From MAILER-DAEMON Mon Jun 01 00:37:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfcCc-0003C0-DG for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 00:37:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfcCa-0003Bs-Bt for emacs-devel@gnu.org; Mon, 01 Jun 2020 00:37:32 -0400 Received: from mout01.posteo.de ([185.67.36.141]:43656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfcCY-0006UA-If for emacs-devel@gnu.org; Mon, 01 Jun 2020 00:37:32 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout01.posteo.de (Postfix) with ESMTPS id 427D8160060 for ; Mon, 1 Jun 2020 06:37:28 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 49b2TK4P03z6tmH; Mon, 1 Jun 2020 06:37:25 +0200 (CEST) From: Andrew Schwartzmeyer Message-Id: <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_C6C9935B-52B7-4C76-BA6D-43D4F24C901B" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Add user customization fido-completion-styles Date: Sun, 31 May 2020 21:37:23 -0700 In-Reply-To: Cc: emacs-devel@gnu.org To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= References: <87r1uzn018.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=185.67.36.141; envelope-from=andrew@schwartzmeyer.com; helo=mout01.posteo.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 00:37:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 04:37:32 -0000 --Apple-Mail=_C6C9935B-52B7-4C76-BA6D-43D4F24C901B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Okay so re: > On May 31, 2020, at 5:37 PM, Andrew Schwartzmeyer = wrote: >=20 > Honestly, the strangest thing in my experience so far is that M-x with = =E2=80=9Cflex=E2=80=9D style doesn=E2=80=99t start with my historical = items, just seemingly random (but static) commands. It seems like = switching it to =E2=80=9Cinitials flex=E2=80=9D already pulls in my = history as default sort, but I need to investigate further and be sure = it isn=E2=80=99t something else. I think an integral part to any = completion framework is for the initial suggestions to follow = frequency/recency, to provide good context with no input, and allow = immediate selection of frequently/recently used commands (buffers, = files=E2=80=A6). With just =E2=80=9Cflex=E2=80=9D as the completion style, for some = reason M-x with no input (from an emacs -q) presents the following = candidates as the first: icomplete-fido-delete-char enable-theme url-setup-privacy-info dired-at-point tab-bar-select-tab I can=E2=80=99t see a pattern in these. If I then call a command, I=E2=80=99= d want/expect (from experience with other completion frameworks) the = next use of M-x to show it as the first candidate, but it doesn=E2=80=99t.= Now if I use the aforementioned Orderless package and the minibuffer = hook to use it as the completion style in fido, somehow it does some = magic such that M-x (which is still bound to execute-extended-command) = now has some history sorting! (Working for switch-to-buffer too. :) For repro: (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize) (package-refresh-contents) (package-install 'orderless) (add-hook 'icomplete-minibuffer-setup-hook (lambda () (setq-local completion-styles '(orderless)))) (fido-mode) So yeah, I=E2=80=99m off to look through Orderless to see what magic it = does that sorts the candidates for M-x (without having do anything like = what smex does!). Cheers, Andy= --Apple-Mail=_C6C9935B-52B7-4C76-BA6D-43D4F24C901B Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Okay = so re:

On May 31, 2020, at 5:37 PM, Andrew = Schwartzmeyer <andrew@schwartzmeyer.com> wrote:

Honestly, the strangest thing in = my experience so far is that M-x with =E2=80=9Cflex=E2=80=9D style = doesn=E2=80=99t start with my historical items, just seemingly random = (but static) commands. It seems like switching it to =E2=80=9Cinitials = flex=E2=80=9D already pulls in my history as default sort, but I need to = investigate further and be sure it isn=E2=80=99t something else. I think = an integral part to any completion framework is for the initial = suggestions to follow frequency/recency, to provide good context with no = input, and allow immediate selection of frequently/recently used = commands (buffers, files=E2=80=A6).

With just =E2=80=9Cflex=E2=80=9D as the = completion style, for some reason M-x with no input (from = an emacs -q) presents the following candidates as the = first:

icomplete-fido-delete-char
enable-theme
url-setup-privacy-info
dired-at-point
tab-bar-select-tab

I can=E2=80=99t see a pattern in these. = If I then call a command, I=E2=80=99d want/expect (from experience with = other completion frameworks) the next use of M-x to show it as the first = candidate, but it doesn=E2=80=99t.

Now if I use the aforementioned = Orderless package and the minibuffer hook to use it as the completion = style in fido, somehow it does some magic such that M-x (which is still = bound to execute-extended-command) now has some history sorting! = (Working for switch-to-buffer too. :)

For repro:

(require = 'package)
(add-to-list 'package-archives
             '("melpa" . = "https://melpa.org/packages/") t)
(package-initialize)
(package-refresh-contents)
(package-install 'orderless)
(add-hook = 'icomplete-minibuffer-setup-hook
=  (lambda () (setq-local completion-styles '(orderless))))
(fido-mode)

So yeah, I=E2=80=99m off to look = through Orderless to see what magic it does that sorts the candidates = for M-x (without having do anything like what smex does!).

Cheers,

Andy
= --Apple-Mail=_C6C9935B-52B7-4C76-BA6D-43D4F24C901B-- From MAILER-DAEMON Mon Jun 01 01:18:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfcqD-0003bO-L6 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 01:18:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33706) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfcqB-0003aL-Vg for emacs-devel@gnu.org; Mon, 01 Jun 2020 01:18:27 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:36133) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfcq9-0005M7-TJ for emacs-devel@gnu.org; Mon, 01 Jun 2020 01:18:27 -0400 Received: by mail-lj1-x230.google.com with SMTP id a25so6547476ljp.3 for ; Sun, 31 May 2020 22:18:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=it.uc3m.es; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9tCAZudIVJCUwEeJlVTfUoDlGsUaKo1Hv3tsDVHgleI=; b=lJ93yuKsmACyb1hrGLoyG5u4QymQ4yWGoa9zSCk6zdegs8P7Ja7teFMvIgdZFba7a6 Gj9/obBUIDt20RzEXmkuQxFmtBFX5aoin9+icoeseilwUYsMTdK/Ttp0Ta/MQN326ABd 60yewFy9hkrwoIKReK9W4vhiNkTPxbuaXISIQr8+P5TVGYHVl/ETOyIdxhDA6zBK5eq1 EK3JpmMNE+VL09/ZwYb5DaaXK1BqOFncvsFpNT+ePnfAdwsZXTuaPOlaozpkU3ks8zNI D+mQ3kjtQH2Wh/87+cgtCkkL72zLqB/pXICMZqvsYuFtCdN/93R/pzPOFj3SNTGxU4Rq Vs2Q== 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:cc; bh=9tCAZudIVJCUwEeJlVTfUoDlGsUaKo1Hv3tsDVHgleI=; b=KMBwNiEVa+6qsKv9HMVYGWyJOxumSUl81EzdYUcZjDP3ZoW2tbS45yCStGODOeBAlG +FTfh7Ivy9RBFh8946Q9EbRu9dLuAadfYGWWImVVqdBTW+h3vqZxQAfrnXQkwkDgZJ8y tp/4md3uya2jB12RvZY/itXzLdGzpy0U3tF/973jEHh3iTviq4EWzgRhwB/nS7lTm0mv P4ibUR3Wzigz2ek/k+pgzEpTdZHaq7999lSoXT5CT/q5vwzfnypA8k2wOU8ZHLC2uHv3 WFi107CiAddtkIHyu1rOLp6OgioEKlMkP/fAgbuqNIA9YZtu8Dxxm/k+uj5OlLSf1D2L 0O3g== X-Gm-Message-State: AOAM530kXrrZ69hu1JkkSiQjPyNahtw1kNVrHqlzkPdOcdd2lM7pniqg uV6SMP7IiV5VFouSooN0gAimWPOs8UvUV7fJdYOJFw== X-Google-Smtp-Source: ABdhPJzDegFxQNNxxOhF2sdu2UXtiIyc+g8jxKnNlFmF3dhJc5gNtREQ8gpB9cUI5o46j/tsEydbXM7GtpjB7ynVRas= X-Received: by 2002:a05:651c:c9:: with SMTP id 9mr3008252ljr.365.1590988703312; Sun, 31 May 2020 22:18:23 -0700 (PDT) MIME-Version: 1.0 References: <306c7cf5-6cfc-436e-a902-8ad4560b32d1@default> <47fc942f-62e1-4efc-9d67-db292177044e@default> <608b0cf8-ee1b-4c16-b15c-2eb7ac56d652@default> In-Reply-To: <608b0cf8-ee1b-4c16-b15c-2eb7ac56d652@default> From: PEDRO ANDRES ARANDA GUTIERREZ Date: Mon, 1 Jun 2020 07:18:12 +0200 Message-ID: Subject: Re: Just a thought about comment-line To: Drew Adams Cc: Dmitry Gutov , Yuri Khan , emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="00000000000080c70e05a6feec25" Received-SPF: pass client-ip=2a00:1450:4864:20::230; envelope-from=paranda@it.uc3m.es; helo=mail-lj1-x230.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: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 05:18:28 -0000 --00000000000080c70e05a6feec25 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hey, thanks for all the answers so far. It's nice to see people getting passionate about this. I too had my code to deal with (bol-p end-of-region) and I'm passing it on to people, but I started writing a short introduction for students who get interested in Emacs by seeing how I use it and well, it'd be so much better for Emacs if I could get one of the FAQ answered by something like 'customise variable so-and-so to get your desired behaviour' instead of 'include in your .emacs.d/functions.el and bind function sensible-comment-lines to M-;' I hope the discussion crystallises in some better future :-) Best, /PA PS: and as my signature translates ;-) "questions exist to be made, not to be answered" El dom., 31 may. 2020 a las 23:54, Drew Adams () escribi=C3=B3: > > > You're fairly sure for whom? For you? Not for me. > > > > The only complaints against comment-dwim I have seen > > I wasn't complaining about `comment-dwim'. > I was saying that it's not the be-all and > end-all. I use it for end-of-line comments. > And I use something else for block commenting. > > It doesn't matter to me if you use `M-;' for > everything. If you're happy that way, great. > > > were along the lines "I want to micromanage > > how comments are made", > > I see. If someone says your one-size-fits-all > dream command doesn't fit all then their idea > for doing something additional or different > just wastes your time. Sorry to hear that. > > > and not "this code-writing scenario becomes > > suboptimal". > > > > Are you still writing code? I'm surprised, > > Surprise! And irrelevant. > > > > Tell me why Common Lisp behavior for block comments > > > (#|...|#) is missing? I don't mean that those macro > > > chars are missing, but that the block-commenting > > > behavior (nesting, unnesting) is missing. > > > > You might want to elaborate. > > I think I did. Maybe you can show us how > `comment-dwim' provides the same behavior. > > > It definitely can create nested comments (i.e. in > > the cases they are really needed, when you call it > > on a region containing both commented and > > non-commented lines). > > A bit of a tautology. I can leap over buildings > in a single bound, in the cases where that's > really needed, which is when the buildings are > at most 1-foot tall. > > Anyway. The point of this thread is the problem > with `comment-line' raised by the OP. If you're > curious why `comment-line' was added, since we > already had `comment-dwim', see the thread I > pointed to, where `comment-line' was discussed > and added. > --=20 --- PEDRO ANDRES ARANDA GUTIERREZ Universidad Carlos III de Madrid "Fragen sind nicht da um beantwortet zu werden. Fragen sind da, um gestellt zu werden" Georg Kreisler --00000000000080c70e05a6feec25 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hey,

thanks for all the answ= ers so far. It's nice to see people getting passionate about this.
I too had my code to deal with (bol-p end-of-region) and I'm pass= ing it on to people,
but I started writing a short introduction f= or students who get interested in Emacs by
seeing how I use it an= d well, it'd be so much better for Emacs if I could get one of the
FAQ answered by something like 'customise variable so-and-so to g= et your desired
behaviour' instead of 'include <listin= g 100> in your .emacs.d/functions.el and bind function
sensibl= e-comment-lines to M-;'

I hope the discuss= ion crystallises in some better future :-)

Best, /= PA
PS: and as my signature translates ;-) "questions exist t= o be made, not to be answered"

El dom., 31 may. 2020 a las 23= :54, Drew Adams (<drew.adams@or= acle.com>) escribi=C3=B3:
> > You're fairly sure for whom?=C2=A0 For you?= =C2=A0 Not for me.
>
> The only complaints against comment-dwim I have seen

I wasn't complaining about `comment-dwim'.
I was saying that it's not the be-all and
end-all.=C2=A0 I use it for end-of-line comments.
And I use something else for block commenting.

It doesn't matter to me if you use `M-;' for
everything.=C2=A0 If you're happy that way, great.

> were along the lines "I want to micromanage
> how comments are made",

I see.=C2=A0 If someone says your one-size-fits-all
dream command doesn't fit all then their idea
for doing something additional or different
just wastes your time.=C2=A0 Sorry to hear that.

> and not "this code-writing scenario becomes
> suboptimal".
>
> Are you still writing code? I'm surprised,

Surprise!=C2=A0 And irrelevant.

> > Tell me why Common Lisp behavior for block comments
> > (#|...|#) is missing?=C2=A0 I don't mean that those macro
> > chars are missing, but that the block-commenting
> > behavior (nesting, unnesting) is missing.
>
> You might want to elaborate.

I think I did.=C2=A0 Maybe you can show us how
`comment-dwim' provides the same behavior.

> It definitely can create nested comments (i.e. in
> the cases they are really needed, when you call it
> on a region containing both commented and
> non-commented lines).

A bit of a tautology.=C2=A0 I can leap over buildings
in a single bound, in the cases where that's
really needed, which is when the buildings are
at most 1-foot tall.

Anyway.=C2=A0 The point of this thread is the problem
with `comment-line' raised by the OP.=C2=A0 If you're
curious why `comment-line' was added, since we
already had `comment-dwim', see the thread I
pointed to, where `comment-line' was discussed
and added.


--
---
PEDRO ANDRES ARANDA GUT= IERREZ
Universidad Carlos III de Madrid

"F= ragen sind nicht da um beantwortet zu werden.
Fragen sind da, um = gestellt zu werden" Georg Kreisler
--00000000000080c70e05a6feec25-- From MAILER-DAEMON Mon Jun 01 01:21:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfcsx-0004gx-1c for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 01:21:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfcsw-0004gq-5W for emacs-devel@gnu.org; Mon, 01 Jun 2020 01:21:18 -0400 Received: from mail-vs1-xe36.google.com ([2607:f8b0:4864:20::e36]:36220) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfcsv-0006N9-2Y; Mon, 01 Jun 2020 01:21:17 -0400 Received: by mail-vs1-xe36.google.com with SMTP id j13so951304vsn.3; Sun, 31 May 2020 22:21:16 -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 :cc:content-transfer-encoding; bh=MCBe2UhXAZxssyCUsltOLCr+VvIdn6TnkJ7YEccfgPE=; b=IfHuUV5+M+gi/k/s1YDu5EIZVU56Efz3d4F/NNczJ5NTYddzOOdiaq8mPtaKMX3TQ0 OTeqOOIhsJVC9ZXnDaUhZGCkMF+jhCXnUd1EJvkc+uo1hsKJpb2vL2musO+i33kdVs17 lPdnv8MArSg2E3NlX8nsC3ndn6yy63F3Iye/mYp5j3tOn4GMcjJKBuCyUgizcWaM62uB X81D2hvmpCsSQ6/pPGZtx/EEmHu4t9SnnQwxONL2JzW/c9Yt8xoO8GQ8xmKbB0n5F+qo A5pVaO0nt1PZ9ElLwFrgTIx2AIoNe/gmR4pCHqhU12W/MnRdpAgtU5yw9OkJJRqPm47P gpvg== 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:cc:content-transfer-encoding; bh=MCBe2UhXAZxssyCUsltOLCr+VvIdn6TnkJ7YEccfgPE=; b=suQx97omGh/EVD+l5oX/P6ui0vVlb2o2uO96XNW+fbMjZw6wpsGyOFDHZQGapROeU0 3JSL4CsIuR0HyhThE5qX/M3oDu0HPD9WRbTwCHMSjegxfgfmuiPtxBt8m9L5+76Sd2hC wAqA0CvZ+2OzOzYnlPxLgZyftb6nggLdNXYEw+LANXz+RdJCmPP8+vPL87t1bTB0s+09 XVaClr5gJbEOC6ZU3ieW7/VDzmlKQS2y4hHeLGgmZX7HpP2lhTgecFAwA2m4V4V8MCJf GizEWLSd+yVnKNLAFViw5TKYIQ6YrT+GQGEOzO+apt0Evehirjh/rIp1RcLeL5nKnGcw mLUQ== X-Gm-Message-State: AOAM532/c651MBKyHfYnFE384uKj1JhU9FXAZ3TSHtaBfAd0WyvoXza/ FS193MKQb2qlAf2iXVALpzULQ67J59UqE3WyFeeKWhnY X-Google-Smtp-Source: ABdhPJxmt2OEWWnNVkLwMM66H8fjJSi/nVvUHf8uI3URZ8tCg1G/e9yqfOWtVCj1tcmDV0d3GyuorAin1Y5zDUE9paA= X-Received: by 2002:a67:7fc4:: with SMTP id a187mr12756088vsd.139.1590988875318; Sun, 31 May 2020 22:21:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Yuri Khan Date: Mon, 1 Jun 2020 12:21:03 +0700 Message-ID: Subject: Re: What is the most useful potential feature which Emacs lacks? To: Richard Stallman Cc: excalamus@tutanota.com, van.ly+2020@sdf.org, Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::e36; envelope-from=yurivkhan@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 05:21:18 -0000 On Mon, 1 Jun 2020 at 10:54, Richard Stallman wrote: > > What about collaborative editing? That is, multiple people > > simultaneously editing a document over the internet. > > It would be good to do that in a truly usable way. > > Emacs has had the feature of running multiple terminals at once for > over 20 years, but there are bad problems in it. To do it right, to > has to have a thread for each terminal, and they have to be able to > get in and out of the minibuffer separately. More importantly, a single Emacs will force identical configuration on all collaborating users. And, instead of collaborating, they will curse and bicker over every small convenience each of them has become used to. > The other way to do this is to have separate Emacs processes that > communicate with each other. We would need to use modification hooks > to take note of changes and transmit them to the other Emacses. > > Or perhaps one Emacs could be the "server", and the others act as clients= , > maintaining mirrors of the document. However, it then follows that each instance is going to have its own supporting tools. So, a power user who has an elaborate setup with LSP, flycheck, whatever, will not be able to share the advantages of his setup with a newbie. Also, most collaboration editing tools in use today let users work on a single document but not necessarily on multiple files in a project. E.g. in a pair programming scenario, it would be nice if one could say =E2=80=9Cnow let=E2=80=99s go to that other file=E2=80=9D and the other wou= ld automatically follow. Preferably in a way that avoids the usual post-teleportation feeling of disorientation. From MAILER-DAEMON Mon Jun 01 01:29:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfd1I-00085K-AE for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 01:29:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35120) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfd1F-00084K-VQ for emacs-devel@gnu.org; Mon, 01 Jun 2020 01:29:53 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:46107) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfd1E-0007fY-0l for emacs-devel@gnu.org; Mon, 01 Jun 2020 01:29:53 -0400 Received: by mail-lj1-x230.google.com with SMTP id z6so6495094ljm.13 for ; Sun, 31 May 2020 22:29:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=it.uc3m.es; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=WxNlSNcxLt44Q/eBZhembY7P6cWaR4BBVdIkCa1AaAQ=; b=a11WEbVw2wLJ9uVpul4A5F/rRMQLlezOepIXclvmwQrg3WJIdTDV9qnDb6cl5lvp7k +AEv3yMCLXkFCl6pu6XFSEMcO+SZ2IJ50rMKWORffze7aDLW2BXQfTbpd2kdUkxHuZCO Jazh47p7iy8myqIfnqbVY6et3Q+Ri+NTgTS+/LgQyZF5opC/VUAhMY1amz1iLbEzCTw+ /H5sT8PQsavai6Hn77mwqNCSpzeRwX8q6aK4bzGSXOiAAcMkHYvips6PIjqOfzwjAGhH 7r3kGNvlLUT8rsycIP/ESLlddqyApCH5kpQnD3rzMjkPx51swg6juYOZGguJpaY16PWf YL3w== 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:cc; bh=WxNlSNcxLt44Q/eBZhembY7P6cWaR4BBVdIkCa1AaAQ=; b=l6jgsimhSA9hlWAEIjpKn7MBgnxl/vQf/edQqxi1ZHMzFAh+/yn1GO5dvGOCTn/dss mhxEIlJdFOWATGU2wZobahucrjAFkvAWluQ6Q4kW5UESkEv2hk7ye/qaJKYaAIXbhHs6 IVCMomwsfwy1WUhwH4YrSbFsUTQfskwdhE8DunsYjon+Kk38n6Mn+4JPs59LwqFiHjVn i1xmsCnJwdPqRIlJaLAwoYdTD4ZEESOUHHgClpRgPZU30SviPOkiO79WST/LgJx9Bjb4 DTnz1GXWqOymKFOugJNNfm8kAgqqJmitqs0HIn2r+koFaX4gYQxSAmBzG4lqt7a6d4I6 3eCg== X-Gm-Message-State: AOAM532yo9UP6nH51u93Ri/nI0UmnqdbfDDfA7ScA9YXi6DtWea1mLru PsEw7A+Az+7P+Ep9w4r0k6WnEzESFDseXZ8Hq0/3QQ== X-Google-Smtp-Source: ABdhPJwOOk4p5r/aN4xToywPuWSBx7aBkwGXr+ICrMN2Bgfidtou75+MWye9QStSsRpKnJxoc1PbdSFUVGaGHVoEe4s= X-Received: by 2002:a2e:a48d:: with SMTP id h13mr9788260lji.120.1590989389622; Sun, 31 May 2020 22:29:49 -0700 (PDT) MIME-Version: 1.0 References: <306c7cf5-6cfc-436e-a902-8ad4560b32d1@default> <47fc942f-62e1-4efc-9d67-db292177044e@default> <608b0cf8-ee1b-4c16-b15c-2eb7ac56d652@default> In-Reply-To: From: PEDRO ANDRES ARANDA GUTIERREZ Date: Mon, 1 Jun 2020 07:29:38 +0200 Message-ID: Subject: Re: Just a thought about comment-line To: Drew Adams Cc: Dmitry Gutov , Yuri Khan , emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="000000000000691b8105a6ff15a8" Received-SPF: pass client-ip=2a00:1450:4864:20::230; envelope-from=paranda@it.uc3m.es; helo=mail-lj1-x230.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: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 05:29:54 -0000 --000000000000691b8105a6ff15a8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable And BTW, my code looks like: (defun my-comment-line-region (beg end) "Comment all complete lines in a region using comment-line if the region does not start at a beginning of line, expand it" (interactive "r") (save-excursion (save-restriction (narrow-to-region (get-bol beg) end) (push-mark (point-min)) (goto-char (point-max)) (call-interactively 'comment-line) (pop-mark)))) It seems that narrowing helps avoiding that last comment. Don't know how much of an overkill this might be, but it works for me(tm) Best PA El lun., 1 jun. 2020 a las 7:18, PEDRO ANDRES ARANDA GUTIERREZ (< paranda@it.uc3m.es>) escribi=C3=B3: > Hey, > > thanks for all the answers so far. It's nice to see people getting > passionate about this. > I too had my code to deal with (bol-p end-of-region) and I'm passing it o= n > to people, > but I started writing a short introduction for students who get intereste= d > in Emacs by > seeing how I use it and well, it'd be so much better for Emacs if I could > get one of the > FAQ answered by something like 'customise variable so-and-so to get your > desired > behaviour' instead of 'include in your .emacs.d/functions.e= l > and bind function > sensible-comment-lines to M-;' > > I hope the discussion crystallises in some better future :-) > > Best, /PA > PS: and as my signature translates ;-) "questions exist to be made, not t= o > be answered" > > El dom., 31 may. 2020 a las 23:54, Drew Adams () > escribi=C3=B3: > >> > > You're fairly sure for whom? For you? Not for me. >> > >> > The only complaints against comment-dwim I have seen >> >> I wasn't complaining about `comment-dwim'. >> I was saying that it's not the be-all and >> end-all. I use it for end-of-line comments. >> And I use something else for block commenting. >> >> It doesn't matter to me if you use `M-;' for >> everything. If you're happy that way, great. >> >> > were along the lines "I want to micromanage >> > how comments are made", >> >> I see. If someone says your one-size-fits-all >> dream command doesn't fit all then their idea >> for doing something additional or different >> just wastes your time. Sorry to hear that. >> >> > and not "this code-writing scenario becomes >> > suboptimal". >> > >> > Are you still writing code? I'm surprised, >> >> Surprise! And irrelevant. >> >> > > Tell me why Common Lisp behavior for block comments >> > > (#|...|#) is missing? I don't mean that those macro >> > > chars are missing, but that the block-commenting >> > > behavior (nesting, unnesting) is missing. >> > >> > You might want to elaborate. >> >> I think I did. Maybe you can show us how >> `comment-dwim' provides the same behavior. >> >> > It definitely can create nested comments (i.e. in >> > the cases they are really needed, when you call it >> > on a region containing both commented and >> > non-commented lines). >> >> A bit of a tautology. I can leap over buildings >> in a single bound, in the cases where that's >> really needed, which is when the buildings are >> at most 1-foot tall. >> >> Anyway. The point of this thread is the problem >> with `comment-line' raised by the OP. If you're >> curious why `comment-line' was added, since we >> already had `comment-dwim', see the thread I >> pointed to, where `comment-line' was discussed >> and added. >> > > > -- > --- > PEDRO ANDRES ARANDA GUTIERREZ > Universidad Carlos III de Madrid > > "Fragen sind nicht da um beantwortet zu werden. > Fragen sind da, um gestellt zu werden" Georg Kreisler > --=20 --- PEDRO ANDRES ARANDA GUTIERREZ Universidad Carlos III de Madrid "Fragen sind nicht da um beantwortet zu werden. Fragen sind da, um gestellt zu werden" Georg Kreisler --000000000000691b8105a6ff15a8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
And BTW, my code looks like:

(defun my-comment-line-region (beg e= nd)
=C2=A0 "Comment all complete lines in a region using comment-li= ne
if the region does not start at a beginning of line, expand it"<= br>=C2=A0 (interactive "r")
=C2=A0 (save-excursion
=C2=A0= =C2=A0 (save-restriction
=C2=A0=C2=A0 (narrow-to-region (get-bol beg) = end)
=C2=A0=C2=A0 (push-mark (point-min))
=C2=A0=C2=A0 (goto-char= (point-max))
=C2=A0=C2=A0 (call-interactively 'comment-line)
= =C2=A0=C2=A0 (pop-mark))))

It seems that n= arrowing helps avoiding that last comment. Don't know how much of an ov= erkill this might be, but
it works for me(tm)

=
Best PA

El lun., 1 jun. 2020 a las 7:18, PEDRO ANDRES= ARANDA GUTIERREZ (<paranda@it.uc3= m.es>) escribi=C3=B3:
Hey,

thanks for= all the answers so far. It's nice to see people getting passionate abo= ut this.
I too had my code to deal with (bol-p end-of-region) and= I'm passing it on to people,
but I started writing a short i= ntroduction for students who get interested in Emacs by
seeing ho= w I use it and well, it'd be so much better for Emacs if I could get on= e of the
FAQ answered by something like 'customise variable s= o-and-so to get your desired
behaviour' instead of 'inclu= de <listing 100> in your .emacs.d/functions.el and bind function
sensible-comment-lines to M-;'

I hop= e the discussion crystallises in some better future :-)

Best, /PA
PS: and as my signature translates ;-) "ques= tions exist to be made, not to be answered"

El dom., 31 may. = 2020 a las 23:54, Drew Adams (<drew.adams@oracle.com>) escribi=C3=B3:
> > You're fairly= sure for whom?=C2=A0 For you?=C2=A0 Not for me.
>
> The only complaints against comment-dwim I have seen

I wasn't complaining about `comment-dwim'.
I was saying that it's not the be-all and
end-all.=C2=A0 I use it for end-of-line comments.
And I use something else for block commenting.

It doesn't matter to me if you use `M-;' for
everything.=C2=A0 If you're happy that way, great.

> were along the lines "I want to micromanage
> how comments are made",

I see.=C2=A0 If someone says your one-size-fits-all
dream command doesn't fit all then their idea
for doing something additional or different
just wastes your time.=C2=A0 Sorry to hear that.

> and not "this code-writing scenario becomes
> suboptimal".
>
> Are you still writing code? I'm surprised,

Surprise!=C2=A0 And irrelevant.

> > Tell me why Common Lisp behavior for block comments
> > (#|...|#) is missing?=C2=A0 I don't mean that those macro
> > chars are missing, but that the block-commenting
> > behavior (nesting, unnesting) is missing.
>
> You might want to elaborate.

I think I did.=C2=A0 Maybe you can show us how
`comment-dwim' provides the same behavior.

> It definitely can create nested comments (i.e. in
> the cases they are really needed, when you call it
> on a region containing both commented and
> non-commented lines).

A bit of a tautology.=C2=A0 I can leap over buildings
in a single bound, in the cases where that's
really needed, which is when the buildings are
at most 1-foot tall.

Anyway.=C2=A0 The point of this thread is the problem
with `comment-line' raised by the OP.=C2=A0 If you're
curious why `comment-line' was added, since we
already had `comment-dwim', see the thread I
pointed to, where `comment-line' was discussed
and added.


--
---
PEDRO ANDRES ARANDA GUTIERREZ
Universidad Ca= rlos III de Madrid

"Fragen sind nicht da um b= eantwortet zu werden.
Fragen sind da, um gestellt zu werden"= Georg Kreisler


--
---
PEDRO ANDRES ARANDA GUT= IERREZ
Universidad Carlos III de Madrid

"F= ragen sind nicht da um beantwortet zu werden.
Fragen sind da, um = gestellt zu werden" Georg Kreisler
--000000000000691b8105a6ff15a8-- From MAILER-DAEMON Mon Jun 01 02:14:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfdiO-0002Gx-6d for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 02:14:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfdiN-0002Gc-90 for emacs-devel@gnu.org; Mon, 01 Jun 2020 02:14:27 -0400 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]:44814) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfdiM-0007rq-HK for emacs-devel@gnu.org; Mon, 01 Jun 2020 02:14:27 -0400 Received: by mail-qk1-x72a.google.com with SMTP id c14so7038455qka.11 for ; Sun, 31 May 2020 23:14:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=93+0vzHzbneFtGIbWW3AeFrMgXAkOL2bGpnuVbTodDs=; b=BJdgpZXYQpjgmrYunzAHOz7VCB+ZpA8jTutvvhF9t98vfq++O+UpAum5L79DFcS6/D MdYhbWeDCnwklgmyHus3k6mB+xrja2DhSVIlpRcnmsx5+iu1kScHMy4794Madhb2W0w9 JE+gFI/WBWbrE9WW1VNPCJohJQsQhTkFYuL/d3jiFQHqSlUL7pQ0qJvghMw7jtnTCP8h wsUDJDzyfg9zO1qd4WgVWxNdnrWCYtgGH4zu54LbYMXRXobMjMD1i8Llj3520c79TuEt atjobmu5Wb39DTy5b+hTRl0r1nEWrtCAQA0yeDl2UL8qKb/ReOigFlA3FqePw4xclACj Qnsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=93+0vzHzbneFtGIbWW3AeFrMgXAkOL2bGpnuVbTodDs=; b=Bg7EyVxuBRvnECwW7IHGiom29b8SpmKFjuqrGVIXqokNuo586a6101NAcOCtoWFLAI vcOt6wjBStRiucHNcG4d7h1XOs5KZFBijAZhFmSWvUucHsRheColvnrxOKZ4jV3kAzXA 4LZDNPhTsTIjl3LnuU/tr26YFUFeBw2tkoJP2hF77EbSAIfKZsIXYecJneCskbLhJQfQ moez1xe2TJyfWl2BaGvPAtA+z5yDJIm7aQEHzlVWm1OnmzX/crQIvk/RDCG+HqO1vCXg /LBjd1WjCEDyISKaOuOLqmJLVy5kcTOxdh8y7jF3B1kw7oAQYX3BVe+AgdJtOWXQ2UxU EPOA== X-Gm-Message-State: AOAM531nrUAYhY2zxSWOKLA4j0PpBd24nX0dP4WWULVw44u5ebqp7ylm RekQAWczk91EjSWjlwN6j8tZSTR+ X-Google-Smtp-Source: ABdhPJwhziYOhMTqPOh28Gf7GygOBb1JqMTw5jeE72k+A0MPM5lPIWLujKBQ8QtAfgsbOWGdp7StJw== X-Received: by 2002:a37:a89:: with SMTP id 131mr18081379qkk.92.1590992065399; Sun, 31 May 2020 23:14:25 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:bda5:ac5c:1de0:b677? ([2601:184:4180:66e7:bda5:ac5c:1de0:b677]) by smtp.googlemail.com with ESMTPSA id o33sm5028429qtj.44.2020.05.31.23.14.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 31 May 2020 23:14:24 -0700 (PDT) Subject: Re: Just a thought about comment-line To: PEDRO ANDRES ARANDA GUTIERREZ , "emacs-devel@gnu.org" References: From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <080be6cf-52db-e0a2-3e5d-e91e8cc748f5@gmail.com> Date: Mon, 1 Jun 2020 02:14:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::72a; envelope-from=cpitclaudel@gmail.com; helo=mail-qk1-x72a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 06:14:27 -0000 On 31/05/2020 03.39, PEDRO ANDRES ARANDA GUTIERREZ wrote: > However let's suppose that your theme is highlighting the region and you comment the region with M-x comment-line. You will have the line at the point: > 1.- not highlighted before M-x comment-line > 2.- commented after M-x comment-line Is this bug 21921, or am I misunderstanding the report? https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21921 If it is the same issue, then I agree with you wholeheartedly :) From MAILER-DAEMON Mon Jun 01 02:59:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfePk-0002t7-Og for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 02:59:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfePh-0002t1-Fg for emacs-devel@gnu.org; Mon, 01 Jun 2020 02:59:14 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42428) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfePh-0008Kd-6P; Mon, 01 Jun 2020 02:59:13 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:45002 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfePc-0000yX-Rt; Mon, 01 Jun 2020 02:59:09 -0400 Received: by guerry (Postfix, from userid 1000) id 07FF71A603C1; Mon, 1 Jun 2020 08:59:06 +0200 (CEST) From: Bastien To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: Copyright verification service Organization: GNU References: <87tv04fnt9.fsf@gnu.org> Date: Mon, 01 Jun 2020 08:59:05 +0200 In-Reply-To: (=?utf-8?Q?=22Cl=C3=A9ment?= Pit-Claudel"'s message of "Mon, 25 May 2020 20:29:10 -0400") Message-ID: <87tuzve0g6.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 06:59:14 -0000 Hi Cl=C3=A9ment, Cl=C3=A9ment Pit-Claudel writes: > On 25/05/2020 03.58, Bastien wrote: >> Hi Tim, >>=20 >> I've toyed with this idea myself for a while. >>=20 >> I don't know if it is a good idea for the GNU project in general, but >> as someone who sometimes need to check the copyright status of some >> contributors for Org/Emacs, the current setup is fine for me. >>=20 >> Although, I don't think authentication would be optional as we should >> by default assume that the list of signed contributors should be kept >> private, shouldn't we? > > The API idea was discussed in depth two weeks ago, as part of the very > long thread on packages not getting included in ELPA; see > https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg01909.html. Thanks for the pointer. > The conclusion was that email addresses are not private, since they > appear in commits anyway.=20=20 Well, privacy is about the *link* between an email and a person. If I am using an address like batman@pm.me for my contributions (i.e. for both the emails I send to a mailing list and for my patches), then only those who can access the copyright list know I am Bruce Wayne and I trust them not to disclose this information publicly. So the question seems rather: shall the FSF preserve the possibility for someone to consider his copyright assignment as private info? I think the FSF should let contributors decide whether they want their assignment to be public or not. > rms said he would talk to the FSF sysadmins to see if something was > feasible. OK, thanks. --=20 Bastien From MAILER-DAEMON Mon Jun 01 03:04:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfeUM-00043t-E5 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:04:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfeUG-00043a-Vg for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:03:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42484) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfeUG-0001KW-5P; Mon, 01 Jun 2020 03:03:56 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:45044 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfeUE-0001q5-P5; Mon, 01 Jun 2020 03:03:55 -0400 Received: by guerry (Postfix, from userid 1000) id 795B11A603C1; Mon, 1 Jun 2020 09:03:53 +0200 (CEST) From: Bastien To: Stefan Monnier Cc: Eric Abrahamsen , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails Organization: GNU References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> Date: Mon, 01 Jun 2020 09:03:53 +0200 In-Reply-To: (Stefan Monnier's message of "Sun, 31 May 2020 13:10:20 -0400") Message-ID: <87lfl7e086.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:03:58 -0000 Hi Stefan, thanks for answering. Stefan Monnier writes: >>>> Known problem: just disable fsck for the initial fetch. >> Thanks. Is there any way to fix it? > > Not without rewriting history. Git used to sometimes generate these > zero-padded file modes. It's now more careful, but those old commits > are still with us. :/ > Any chance you haven't done `make externals` beforehand? Yes, I didn't do that... how could I know? The instruction is burried within a quite beefy README.=20=20 I did ~$ make externals and things went fine. Then ~$ make produced this: In dismal-send-cmd-to-shell: packages/dismal/dismal.el:4519:17:Warning: variable reference to nonvaria= ble =E2=80=98(make-local-variable 'dismal-gnuplot-finish)=E2=80=99 packages/dismal/dismal.el:4519:17:Error: Wrong type argument: symbolp, (m= ake-local-variable 'dismal-gnuplot-finish) make: *** [GNUmakefile:173: packages/dismal/dismal.elc] Error=20 I don't really need to compile things in ELPA for now, I was just going down the rabbit hole after the first zero-padded error. HTH, --=20 Bastien From MAILER-DAEMON Mon Jun 01 03:04:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfeUu-0004Z6-Du for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:04:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44570) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfeUs-0004X2-P0 for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:04:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42493) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfeUs-0001Oo-Eg; Mon, 01 Jun 2020 03:04:34 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:45048 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfeUr-0002uE-Ig; Mon, 01 Jun 2020 03:04:34 -0400 Received: by guerry (Postfix, from userid 1000) id CDC081A603C1; Mon, 1 Jun 2020 09:04:31 +0200 (CEST) From: Bastien To: Eric Abrahamsen Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails Organization: GNU References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> <87mu5ndfmy.fsf@ericabrahamsen.net> Date: Mon, 01 Jun 2020 09:04:31 +0200 Message-ID: <87a71ne074.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:04:35 -0000 Eric Abrahamsen writes: > I'll do one or the other soon, but I'd be curious to know if Bastien > hasn't done `make externals`, and if that fixes the problem for sure. Yes, with ~$ make externals the problem with ebdb is gone. Thanks! -- Bastien From MAILER-DAEMON Mon Jun 01 03:23:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfenA-0000Al-NN for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:23:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46642) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfen9-0000Ad-Ik for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:23:27 -0400 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]:41195) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfen8-0004uC-GG; Mon, 01 Jun 2020 03:23:27 -0400 Received: by mail-qt1-x834.google.com with SMTP id w90so6963705qtd.8; Mon, 01 Jun 2020 00:23:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=aa5LEtS8lVFXDXUJLBihmojca98w+dvfRF0Iqk4+gRE=; b=Gifo9DsipXIva+z1XB+Tf4XbRyoqZMlb92UfFTzuuS1t4AxkoqgtyQzMqay0HUKEG4 M7dXq51YTC0HBRjRKz+gfsKFt5joiw/a2UVRqqjqzJ0R5kC9wUew+Mn9QmBAsUi6W5rO ePbHiATg+yNrMwTGcD/6gzNjHfxojxniDekEl3fzc40hVwAO7SWSVJ2fLxtmKGO3QWtF h6U9zsXQgV0rtBl1LWOMBJO4I58t4t42J62Oe/7HeOrd+xKu2rvQ4wbZ3TUe+TYvmE4R 6uKiyejN0qgwhxG6toZZwguznVu5l8662//mP4C1hBEu/GcHNMljAOfTJWzTWjYWDrTq cTyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=aa5LEtS8lVFXDXUJLBihmojca98w+dvfRF0Iqk4+gRE=; b=kBnMpUx5AgsZkgckH7mWHdxR70t/L34Lbdnh0TRTctnHKNf3YPjdkkeaO4a/Irz5U6 Ax8QJS6yDA1DV2XaXKxe1ixVCk7QQk74H2TNPBcxp5/0FuYwmOBY6u96w78XtN+3dxVf 1lwzLEqI4AW8PCvV2/gpFj9h49MTFbQx4PZy2Y/OZRH79U50w9xPfrmnh3NP+EABsdJW Rfd3GYv6/dRVHTxUzuQosAC2OM8QinKJ6fivAJbnSShwdgnCJPBGN6sOhtperKdhkK1W TXsFlk0hHuyTedKfKseBKDNPnUIiryx/+hFlJVEDIZh72RksqHEra8zyHRAJIqCdGjcy f7Eg== X-Gm-Message-State: AOAM531pkrf1udwu5o0OnzwTVOfhhh4bT9RzEK7hwcX39U1LUFwpA9RN Ti7nMXSQTNouMd2cKRx8DPTrDpSP X-Google-Smtp-Source: ABdhPJwyMB9Pi9xvHxNC3nhhMnJaeK041oboKt0WtlixLRjGAKO6ubgxmVP5AaII0qnRR+WI0hXIPw== X-Received: by 2002:ac8:38b6:: with SMTP id f51mr19366071qtc.312.1590996204652; Mon, 01 Jun 2020 00:23:24 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:bda5:ac5c:1de0:b677? ([2601:184:4180:66e7:bda5:ac5c:1de0:b677]) by smtp.googlemail.com with ESMTPSA id q207sm7877320qke.55.2020.06.01.00.23.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 01 Jun 2020 00:23:24 -0700 (PDT) Subject: Re: Copyright verification service To: Bastien Cc: emacs-devel@gnu.org References: <87tv04fnt9.fsf@gnu.org> <87tuzve0g6.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Mon, 1 Jun 2020 03:23:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87tuzve0g6.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::834; envelope-from=cpitclaudel@gmail.com; helo=mail-qt1-x834.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:23:27 -0000 On 01/06/2020 02.59, Bastien wrote: > If I am using an address like batman@pm.me for my contributions (i.e. > for both the emails I send to a mailing list and for my patches), then > only those who can access the copyright list know I am Bruce Wayne and > I trust them not to disclose this information publicly. Why would they? The proposal is to build an API that responds to queries like "does batman@pm.me have an assignment on file?", not "who is batman@pm.me?" From MAILER-DAEMON Mon Jun 01 03:29:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfesj-0003P8-Mw for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:29:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfesh-0003Ow-Db for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:29:11 -0400 Received: from ciao.gmane.io ([159.69.161.202]:56950) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfesg-0006W1-GA for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:29:11 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jfesd-000VQX-BB for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:29:07 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Lars Brinkhoff Subject: Meaning behind Control-G Date: Mon, 01 Jun 2020 07:29:02 +0000 Organization: nocrew Message-ID: <7w367f6y81.fsf_-_@junk.nocrew.org> References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:DF1AlYpgyavbh+trtQHKCKo12B4= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 03:29:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:29:11 -0000 > > > > What does C-g mean? Why the sequence C-g specifically? I think > > > > the disconnect may be that C-g appears outwardly meaningless. > > > I will ask Greenblatt -- he might remember. > > I suspect there is no deep meaning behind it, the BEL was common way > > back then to mean abort, or alert. TECO and DDT both used C-g for > > abort, > Are you confident of that? I don't remember, but if your memory is > clear, that is probably the reason. I remember it clearly, because I use ITS DDT almost daily. TECO, not so much but it's easy enough to verify. Now, why TECO uses Control-G for "quit", I don't know. ASCII "BEL" as an "alarm" is a plausible theory, but hard to verify. In general there's no strong link between control characteras as inputs and their corresponding output behaviour. I see no control character commands here, so maybe Control-G wasn't in use with PDP-1 TECO: http://www.bitsavers.org/pdf/mit/rle_pdp1/memos/Murphy_PDP-1_TECO.pdf I don't see Control-G Here either, so maybe it was added after 1964: https://github.com/larsbrinkhoff/its-archives/blob/master/ailab/pdp6-memo-2.pdf From MAILER-DAEMON Mon Jun 01 03:42:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jff5i-0002K7-O0 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:42:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jff5g-0002Jk-AF for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:42:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42901) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jff5g-0000lp-11; Mon, 01 Jun 2020 03:42:36 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:45398 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jff5e-0001P4-VX; Mon, 01 Jun 2020 03:42:35 -0400 Received: by guerry (Postfix, from userid 1000) id BFD2A1A603C1; Mon, 1 Jun 2020 09:42:32 +0200 (CEST) From: Bastien To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: Copyright verification service References: <87tv04fnt9.fsf@gnu.org> <87tuzve0g6.fsf@gnu.org> Date: Mon, 01 Jun 2020 09:42:32 +0200 In-Reply-To: (=?utf-8?Q?=22Cl=C3=A9ment?= Pit-Claudel"'s message of "Mon, 1 Jun 2020 03:23:23 -0400") Message-ID: <87zh9n1bbr.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:42:36 -0000 Cl=C3=A9ment Pit-Claudel writes: > On 01/06/2020 02.59, Bastien wrote: >> If I am using an address like batman@pm.me for my contributions (i.e. >> for both the emails I send to a mailing list and for my patches), then >> only those who can access the copyright list know I am Bruce Wayne and >> I trust them not to disclose this information publicly. > > Why would they? The proposal is to build an API that responds to > queries like "does batman@pm.me have an assignment on file?", not "who > is batman@pm.me?" Then that's fine! I thought it was an API to access info currently found in the text file. Thanks for the precision. --=20 Bastien From MAILER-DAEMON Mon Jun 01 03:56:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jffJ8-0008Dh-7C for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 03:56:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49954) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jffJ6-0008Bm-Tr for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:56:28 -0400 Received: from ciao.gmane.io ([159.69.161.202]:51886) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jffJ6-00049l-A5 for emacs-devel@gnu.org; Mon, 01 Jun 2020 03:56:28 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jffJ4-000R51-Ji for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:56:26 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Lars Brinkhoff Subject: Re: Meaning behind Control-G Date: Mon, 01 Jun 2020 07:56:21 +0000 Organization: nocrew Message-ID: <7wy2p75ie2.fsf@junk.nocrew.org> References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:UveSfFy9DwPoO1j6d5U23jcsnjk= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 03:29:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 07:56:29 -0000 Lars Brinkhoff wrote: > I don't see Control-G Here either, so maybe it was added after 1964: > https://github.com/larsbrinkhoff/its-archives/blob/master/ailab/pdp6-memo-2.pdf I don't see Control-G in AI memo 81 "PDP-6 TECO" from 1965. https://dspace.mit.edu/handle/1721.1/5917 I do see it as "quit" in the description of ITS DDT in AI memo 147 from 1968. It seems likely that once DDT or TECO added Control-G, it would have jumped to the other pretty quickly. https://dspace.mit.edu/handle/1721.1/5862 From MAILER-DAEMON Mon Jun 01 05:06:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgPK-0000fN-Eg for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:06:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgPH-0000dr-QN for emacs-devel@gnu.org; Mon, 01 Jun 2020 05:06:55 -0400 Received: from ciao.gmane.io ([159.69.161.202]:33530) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgPH-00029N-17 for emacs-devel@gnu.org; Mon, 01 Jun 2020 05:06:55 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jfgPF-0002jf-40 for emacs-devel@gnu.org; Mon, 01 Jun 2020 11:06:53 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Lars Brinkhoff Subject: Re: Meaning behind Control-G Date: Mon, 01 Jun 2020 09:06:48 +0000 Organization: nocrew Message-ID: <7wr1uz5f4n.fsf@junk.nocrew.org> References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> <7wy2p75ie2.fsf@junk.nocrew.org> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:sX9YcLNKtxigIQmgyArXOhcPuDA= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 03:29:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:06:56 -0000 AI memo 118 from January 1967 is interesting. It says about TECO: "|G Takes an optional string argument which, if give, is passed on to MACDMP [...]" "|G" means Control-G. To have TECO go to MACDMP is a form of abort. https://dspace.mit.edu/handle/1721.1/5878 From MAILER-DAEMON Mon Jun 01 05:11:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgU5-0002ew-Gs for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:11:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgU4-0002dk-E2 for emacs-devel@gnu.org; Mon, 01 Jun 2020 05:11:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43802) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfgU3-0002sf-V8; Mon, 01 Jun 2020 05:11:51 -0400 Received: from [2a01:e35:2fe1:f780:a886:3d11:7807:868b] (port=36276 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfgTv-0000iG-Up; Mon, 01 Jun 2020 05:11:44 -0400 Received: by guerry (Postfix, from userid 1000) id DE9711A603C1; Mon, 1 Jun 2020 11:11:41 +0200 (CEST) From: Bastien To: excalamus--- via "Emacs development discussions." Cc: Van Ly , excalamus@tutanota.com, Richard Stallman Subject: Re: What is the most useful potential feature which Emacs lacks? Organization: GNU References: Date: Mon, 01 Jun 2020 11:11:41 +0200 In-Reply-To: (excalamus's message of "Sun, 31 May 2020 14:49:03 +0200 (CEST)") Message-ID: <874krvup4i.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:11:52 -0000 excalamus--- via "Emacs development discussions." writes: > What about collaborative editing? FWIW, this is something Org users have been wanting for years. Especially researchers using Org for publishing drafts for their papers: they are used to be able to collaborate on LaTeX documents and providing real-time collaboration over Org buffers would be a huge plus. -- Bastien From MAILER-DAEMON Mon Jun 01 05:13:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgVH-0003nj-5T for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:13:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgVF-0003nP-O6 for Emacs-devel@gnu.org; Mon, 01 Jun 2020 05:13:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43847) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfgVF-00036Z-7f; Mon, 01 Jun 2020 05:13:05 -0400 Received: from [2a01:e35:2fe1:f780:a886:3d11:7807:868b] (port=36278 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfgV7-0000tZ-9R; Mon, 01 Jun 2020 05:12:57 -0400 Received: by guerry (Postfix, from userid 1000) id 543361A603C1; Mon, 1 Jun 2020 11:12:56 +0200 (CEST) From: Bastien To: Alan Third Cc: eliz@gnu.org, Richard Stallman , Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <87sgfotqav.fsf@gnu.org> <20200525204821.GA95936@breton.holly.idiocy.org> Date: Mon, 01 Jun 2020 11:12:56 +0200 In-Reply-To: <20200525204821.GA95936@breton.holly.idiocy.org> (Alan Third's message of "Mon, 25 May 2020 22:48:24 +0200 (CEST)") Message-ID: <87zh9ntahz.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:13:05 -0000 Hi Alan and Dmitry, Alan Third writes: > There's a reasonably long thread starting here: > > https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01733.html Dmitry Gutov writes: > And another here: > https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg01946.html thanks, I've checked those links and they helped me understand the situtation. -- Bastien From MAILER-DAEMON Mon Jun 01 05:16:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgYS-00059a-A5 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:16:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgYQ-00058l-Hk for Emacs-devel@gnu.org; Mon, 01 Jun 2020 05:16:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43878) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfgYQ-00042k-15; Mon, 01 Jun 2020 05:16:22 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:45810 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfgYI-0001Ag-QE; Mon, 01 Jun 2020 05:16:15 -0400 Received: by guerry (Postfix, from userid 1000) id E86611A603C1; Mon, 1 Jun 2020 11:16:12 +0200 (CEST) From: Bastien To: Dmitry Gutov Cc: Sacha Chua , Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <03df68b8-dace-c4f0-d45a-26c2e8b5cae5@yandex.ru> Date: Mon, 01 Jun 2020 11:16:12 +0200 In-Reply-To: <03df68b8-dace-c4f0-d45a-26c2e8b5cae5@yandex.ru> (Dmitry Gutov's message of "Thu, 28 May 2020 03:42:28 +0300") Message-ID: <87d06jtacj.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:16:23 -0000 Hi Dmitry, Dmitry Gutov writes: > On 25.05.2020 10:51, Bastien wrote: >> - List packages >> - Customize package archives (<= the option you want to promote) >> - Customize the package interface > > I wonder if we do want to promote that second option (the mention of > MELPA was recently deleted from the manual). My take on this is that yes, I'd want to promote the second option, and I don't think we need to sort out all the issues with ELPA (GNU and possibly non-GNU) before doing so. The reason is newbies and old-timers both want to customize the list of package archives. > And the last one... when did you last customize that group, aside from > the list of archives? Agreed, I don't think it is necessary. > I do agree that the first one could be made move prominent. Perhaps > the first step would be rearranging the items in the Options menu? I'd rather go ahead by moving Package information to the Tools menu, where it really belongs. -- Bastien From MAILER-DAEMON Mon Jun 01 05:26:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgiO-00012Q-Pq for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:26:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58954) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgiN-00012J-SV for Emacs-devel@gnu.org; Mon, 01 Jun 2020 05:26:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44667) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfgiN-0005en-FW; Mon, 01 Jun 2020 05:26:39 -0400 Received: from [2a01:e35:2fe1:f780:a886:3d11:7807:868b] (port=36300 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfgi9-00029x-OM; Mon, 01 Jun 2020 05:26:26 -0400 Received: by guerry (Postfix, from userid 1000) id 9A0A01A603C1; Mon, 1 Jun 2020 11:26:23 +0200 (CEST) From: Bastien To: Sacha Chua Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> Date: Mon, 01 Jun 2020 11:26:23 +0200 Message-ID: <87pnajrvb4.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:26:40 -0000 --=-=-= Content-Type: text/plain Hi Sacha, thanks for the feedback! Sacha Chua writes: > Oh, Tools makes sense too. Okay. > Hmm... What if the submenu has: > > - Manage package sources <-- move this one first? I agree this is better (more explicit) than "Manage package archives". > - Choose packages I'd rather go for "List available packages" as "Choose packages" feels like the user has to do something with the listed packages while "List available packages" feels more factual. But not a big deal, both are good. > - Customize the package interface As Dmitry said, maybe this one is not really needed. > - ... Maybe that help link? I'm not sure here -- maybe we can modify the help menu in another patch? I've updated my patch to modify the menu according to the suggestion above. Eli, let me know if I can apply it against master. Thanks, -- Bastien --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=menu-bar.el.patch diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 9bc667acd6..6340af08e9 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -1414,10 +1414,6 @@ menu-bar-options-menu (bindings--define-key menu [customize] `(menu-item "Customize Emacs" ,menu-bar-custom-menu)) - (bindings--define-key menu [package] - '(menu-item "Manage Emacs Packages" package-list-packages - :help "Install or uninstall additional Emacs packages")) - (bindings--define-key menu [save] '(menu-item "Save Options" menu-bar-options-save :help "Save options set from the menu above")) @@ -1682,6 +1678,18 @@ menu-bar-shell-commands-menu menu)) +(defvar menu-bar-package-menu + (let ((menu (make-sparse-keymap "Manage Emacs Packages"))) + (bindings--define-key menu [customize-package-archives] + '(menu-item "Customize package sources" + (lambda () (interactive) (customize-variable 'package-archives)) + :help "Set the list of Emacs package sources")) + (bindings--define-key menu [list-packages] + '(menu-item "List available packages" list-packages + :help "Browse a list of Emacs packages")) + + menu)) + (defun menu-bar-read-mail () "Read mail using `read-mail-command'." (interactive) @@ -1716,6 +1724,13 @@ menu-bar-tools-menu (bindings--define-key menu [separator-net] menu-bar-separator) + (bindings--define-key menu [package] + `(menu-item "Manage Emacs Packages" + ,menu-bar-package-menu)) + + (bindings--define-key menu [separator-package] + menu-bar-separator) + (bindings--define-key menu [browse-web] '(menu-item "Browse the Web..." browse-web)) (bindings--define-key menu [directory-search] --=-=-=-- From MAILER-DAEMON Mon Jun 01 05:34:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfgq1-0002FL-Ix for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 05:34:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59662) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfgpz-0002Ey-SA for Emacs-devel@gnu.org; Mon, 01 Jun 2020 05:34:31 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45051) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfgpz-0006sA-JR; Mon, 01 Jun 2020 05:34:31 -0400 Received: from [2a01:e35:2fe1:f780:a886:3d11:7807:868b] (port=36304 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfgpq-0005Xi-Js; Mon, 01 Jun 2020 05:34:22 -0400 Received: by guerry (Postfix, from userid 1000) id 26C8B1A603C1; Mon, 1 Jun 2020 11:34:21 +0200 (CEST) From: Bastien To: Stefan Kangas Cc: Richard Stallman , eliz@gnu.org, Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <35DBF02E-44D7-41E5-A217-7D6EC84ED221@icloud.com> <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <87sgfotqav.fsf@gnu.org> Date: Mon, 01 Jun 2020 11:34:21 +0200 In-Reply-To: (Stefan Kangas's message of "Mon, 25 May 2020 19:07:43 -0700") Message-ID: <87ftbfqgde.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 09:34:32 -0000 Hi Stefan, I've read the threads -- great to see that Nicolas and you are both working on this. I have a small preference for Nicolas' approach, as the dotted lines feel a bit more readable than the three columns. I'll let you integrate my suggestion on adding the line about listing ELPA packages when/where you see fit. About the vertical space in the splash screen: here (emacs-28.0.50) the number of text lines in the splash screen is 15 by default and 18 with the message about auto-saved files. Perhaps we can agree to keep this number of lines below 20 and adapt the height of the logo when (20 lines + current logo's height) does not fit into Emacs startup height? -- Bastien From MAILER-DAEMON Mon Jun 01 06:10:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfhOu-0003wj-Ri for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 06:10:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35348) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfhOt-0003vM-75 for Emacs-devel@gnu.org; Mon, 01 Jun 2020 06:10:35 -0400 Received: from mail-yb1-xb2e.google.com ([2607:f8b0:4864:20::b2e]:44898) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfhOs-0005v0-Gx; Mon, 01 Jun 2020 06:10:34 -0400 Received: by mail-yb1-xb2e.google.com with SMTP id n123so4894201ybf.11; Mon, 01 Jun 2020 03:10:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:in-reply-to:references:mime-version:date:message-id:subject:to :cc; bh=NuYUQIb7L69Sr2fT3AiSMfGxMVHRLBfh60cLfQDfoww=; b=ny3EeKnJwr0vhgjjt+FqFFAt0qQNDr6XH9CNuPFagaSDcj5ic7tmdOW7H66dLlpDE0 6ZIjS+x7KXxipJE/ly26oUvSy0/irG3IdC0Vx0HH1CqJI+59EJztKfBEHVor+GAU+tpS jIjhAlk0ROZc3jsavm0hchtQVUDovUDk9vcIFBDcU5XYv+bZRng3MezQhT5AWRIA5W8j KfIvBJKv4O8DaZe6XP9GOQWTo/NTyyTnEwVG8Jo3rr0bT8gq7+cnbf4t0ikLn+k/67y9 qQpMTWo0/R1BQkAl+ogMEbWdwymHbWdFjr7Br/dxzMIcp8QSNklx0FH+cPPTQusNVdQw ObvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:in-reply-to:references:mime-version:date :message-id:subject:to:cc; bh=NuYUQIb7L69Sr2fT3AiSMfGxMVHRLBfh60cLfQDfoww=; b=TQoyR61jiWFv95wH8o7u8PgYcqj6pIU0EzgW/y0MjJELwqfOki1Hi311DAxnslVKS+ KVX3c8mUPeePO9aaI/iwaPAWNytFypUEbEwViQQoMcSr8JrCilYZy782Q5Zso0AZz6Ls Gt0Gpss1Ty9UT2dovVzsaiKziCZ9OepfxgR3oEvtr4HBaurniA2c+o9p6KpZm0KtwLnN HfeeEHX6obVkFBol9ctNjtobhUizGsx88V29tI/hmGQaPOxxb0g33E9wlPztK7Xt0VRx fanbmgYiWxNRlIdAcociTSjRFUnQ0D7xxlloYy8KOc9zSvieZLgiXJKbQlpIbWkr19YD zlJQ== X-Gm-Message-State: AOAM533V2Iz/fKTJUWtL3SZnSslV5sn7o29m7hTp5b4t767eJBz1mm5J W/hbfmvA4jUbkXFhv2Tp6fPt7zbxGQ4puuunqrf0eQ== X-Google-Smtp-Source: ABdhPJxOOuZJYevQSx+GNckJ38GW3yLJuRwm+6SykS+OBylQAFT1IZc+0eGXd5z9wrElCPGHV1JwyibLCMEv5+ayxW0= X-Received: by 2002:a25:ca45:: with SMTP id a66mr14288208ybg.85.1591006231804; Mon, 01 Jun 2020 03:10:31 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Mon, 1 Jun 2020 03:10:31 -0700 From: Stefan Kangas In-Reply-To: <87pnajrvb4.fsf@bzg.fr> References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> MIME-Version: 1.0 Date: Mon, 1 Jun 2020 03:10:31 -0700 Message-ID: Subject: Re: GNU ELPA package discoverability To: Bastien , Sacha Chua Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::b2e; envelope-from=stefankangas@gmail.com; helo=mail-yb1-xb2e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 10:10:35 -0000 Bastien writes: > + '(menu-item "Customize package sources" > + (lambda () (interactive) (customize-variable 'package-archives)) > + :help "Set the list of Emacs package sources")) I propose to hold off on "Customize package sources" until we have a final decision on the "Non-GNU ELPA" archive. If we get a positive decision to go ahead with that, IMHO this menu item is not necessary and possibly even undesirable. Just my two cents. Best regards, Stefan Kangas From MAILER-DAEMON Mon Jun 01 06:27:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfheu-0007KO-6w for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 06:27:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfher-0007Hv-Uk for Emacs-devel@gnu.org; Mon, 01 Jun 2020 06:27:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46154) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfher-000180-GW; Mon, 01 Jun 2020 06:27:05 -0400 Received: from [2a01:e35:2fe1:f780:a886:3d11:7807:868b] (port=36492 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfheg-0008Me-JD; Mon, 01 Jun 2020 06:26:54 -0400 Received: by guerry (Postfix, from userid 1000) id 6F23A1A603C1; Mon, 1 Jun 2020 12:26:52 +0200 (CEST) From: Bastien To: Stefan Kangas Cc: Sacha Chua , Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> Date: Mon, 01 Jun 2020 12:26:52 +0200 In-Reply-To: (Stefan Kangas's message of "Mon, 1 Jun 2020 03:10:31 -0700") Message-ID: <87eeqzhyj7.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 10:27:06 -0000 Hi Stefan, Stefan Kangas writes: > Bastien writes: > >> + '(menu-item "Customize package sources" >> + (lambda () (interactive) (customize-variable 'package-archives)) >> + :help "Set the list of Emacs package sources")) > > I propose to hold off on "Customize package sources" until we have a > final decision on the "Non-GNU ELPA" archive. If we get a positive > decision to go ahead with that, IMHO this menu item is not necessary and > possibly even undesirable. Sorry, I must be missing something here, but how can it be undesirable to advertize the fact that users can customize Emacs in a way that let them install packages from non-official sources? As long as the official sources are the default, I don't see a problem. -- Bastien From MAILER-DAEMON Mon Jun 01 07:31:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfifY-0005L6-SE for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 07:31:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfifU-0005Kw-RC for Emacs-devel@gnu.org; Mon, 01 Jun 2020 07:31:48 -0400 Received: from mail-yb1-xb34.google.com ([2607:f8b0:4864:20::b34]:39549) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfifT-0006L5-Th; Mon, 01 Jun 2020 07:31:48 -0400 Received: by mail-yb1-xb34.google.com with SMTP id p123so5014600yba.6; Mon, 01 Jun 2020 04:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:in-reply-to:references:mime-version:date:message-id:subject:to :cc; bh=fXBSXU3UOa6UnlW+JmH/AtfbXmeIRheNf7rsvFXC/9Q=; b=qZed4WAw1UUWmqCoW0LDh0ljBHAyWLOeRo+IfooF3DwdHJY8gUaoxiXXWAnG1TKBiS NyjW7Rl7loDdzmaY8VJ8UL2oMG/MA0DIuFB2eZLjA3mjzNEPg3z/jGjMyndFWx89AdWG VosXOz8ZTRSg5DmojM+gcuYQrZWK7IsJ4TnlDHCYWvO5FEFqfg+WA/xCZLEMSnrx6P4L nbk0fxq1KfVoCU2DClIxRs+DKmzzY1vlJGZJvhbSsYOsKCQqdafY9VUy2ANaR0DW1Rl4 oqopmSTinqY2Y2cVl/O3xQpBTgxix3auDjnePpMZBbr0tcgnsHb2kX3A8PDcq9hPNI08 RSfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:in-reply-to:references:mime-version:date :message-id:subject:to:cc; bh=fXBSXU3UOa6UnlW+JmH/AtfbXmeIRheNf7rsvFXC/9Q=; b=i3Uq/ypUB492jpvQfcNzEJQsm/ZnsmC16ny8MwiUvWvT7oZV+rkfsFWgRU1xc25pu2 8tN+RUxaeSVg92oHoHCcN6rTN6pNh2Vb9yF+N5hZm44tksoPwHXYKq/AWKS4/43qRXov zfXDACo3b2ndPf9pYxfXrgG9+2HSJfPFBguGpzqPsARIOWJvtu7lIQqmjnfga6oQCS/p 8cdZXdL7NOdRPp6AKaQ7u3sFOVsHmMRhcHo18R3RqRv4A6LOO+fcO9U6JtZJ+/a+mD9R AYkx0RPf7kU8xSqDwt8Fp6OGjKV81eJ5fis1QWP+HSrlozsFEEGsHheJzqT0ndp1y8qG bc4w== X-Gm-Message-State: AOAM532wN7jTNwO+xKe96ib71NyHG5XcRrzhLZRlLtX6HPTY3OxW25Sf qdxF+SduQ0liAbJDbr7YmTyz9INt27lq/4CCwYEGlg== X-Google-Smtp-Source: ABdhPJybFaF2gBlqrMHpET6TP6EWjlWe3eazhz7Y9Mf7XPsZkXYM1ZzpJLoa1zVlXm+tCqQ/h0jQV4sSW6mPGZ2ID8M= X-Received: by 2002:a25:4606:: with SMTP id t6mr15950651yba.389.1591011103672; Mon, 01 Jun 2020 04:31:43 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Mon, 1 Jun 2020 04:31:43 -0700 From: Stefan Kangas In-Reply-To: <87eeqzhyj7.fsf@gnu.org> References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <87eeqzhyj7.fsf@gnu.org> MIME-Version: 1.0 Date: Mon, 1 Jun 2020 04:31:42 -0700 Message-ID: Subject: Re: GNU ELPA package discoverability To: Bastien Cc: Sacha Chua , Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::b34; envelope-from=stefankangas@gmail.com; helo=mail-yb1-xb34.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 11:31:49 -0000 Bastien writes: > Sorry, I must be missing something here, but how can it be undesirable > to advertize the fact that users can customize Emacs in a way that let > them install packages from non-official sources? I'm not against advertising it, which we do in several places already. It is only a question of how prominently we advertise it. I would expect that once we can get "Non-GNU ELPA" going and configured by default, there is less need to advertise this so prominently. Perhaps the most important and/or popular packages will already be installable by default, which means that this customization will take place more infrequently. My proposal is therefore simply to wait with adding the menu entry until we know more about the way forward for "Non-GNU ELPA", its relation to MELPA and so on. There is ample time before Emacs 28.1 is released to consider it again. But this is just my personal opinion, of course. Another thing, which I failed to bring up in my previous email. If I understand correctly, you propose to put "List available packages" after "Customize package sources". This seems to suggest that the package system is not usable until after you customize it. Am I missing something here? If not, should we perhaps change that order? Best regards, Stefan Kangas From MAILER-DAEMON Mon Jun 01 08:23:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfjTy-0006z4-Mp for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 08:23:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfjTx-0006yw-IB for Emacs-devel@gnu.org; Mon, 01 Jun 2020 08:23:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47681) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfjTx-0000ZQ-3z; Mon, 01 Jun 2020 08:23:57 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:46342 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfjTp-00078G-My; Mon, 01 Jun 2020 08:23:49 -0400 Received: by guerry (Postfix, from userid 1000) id DAE4F1A603C1; Mon, 1 Jun 2020 14:23:47 +0200 (CEST) From: Bastien To: Stefan Kangas Cc: Eli Zaretskii , Emacs-devel@gnu.org, Sacha Chua , rms@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <87eeqzhyj7.fsf@gnu.org> Date: Mon, 01 Jun 2020 14:23:47 +0200 In-Reply-To: (Stefan Kangas's message of "Mon, 1 Jun 2020 04:31:42 -0700") Message-ID: <87ftbf9dpo.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 12:23:57 -0000 Hi Stefan, Stefan Kangas writes: > My proposal is therefore simply to wait with adding the menu entry until > we know more about the way forward for "Non-GNU ELPA", its relation to > MELPA and so on. There is ample time before Emacs 28.1 is released to > consider it again. But this is just my personal opinion, of course. I'd rather detangle both issues: one is to promote the fact that users can customize `package-archives' to what they need, another one is what sources Emacs should promote. I'll let Eli decide, of course. > Another thing, which I failed to bring up in my previous email. If I > understand correctly, you propose to put "List available packages" after > "Customize package sources". This seems to suggest that the package > system is not usable until after you customize it. Am I missing > something here? If not, should we perhaps change that order? No, you're right, "List available packages" should probably come first. -- Bastien From MAILER-DAEMON Mon Jun 01 09:21:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfkNf-0003B6-52 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 09:21:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfg89-0005Mt-En for emacs-devel@gnu.org; Mon, 01 Jun 2020 04:49:13 -0400 Received: from mout.gmx.net ([212.227.15.15]:54759) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfg88-0005uc-J6; Mon, 01 Jun 2020 04:49:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591001349; bh=1INR3fIxwp9139rchylMFXCKI3x0wcOn1Cae9sLJ0MM=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=iaaRqS/7oEadMZEGsvNKnU9Cesk5jsta8pnMuasCr3t/f3QGfAb1tj6/0vSa6FZCQ 4X3Ypz0pMVHZrAz5VcNVOsHKHVjtizlrJSeo2rvCGyqlM+QEjkC2t3MGuzBPoAGiaT XKmb0R8ua0lqWnMakCYQwPEZQWKgnTXx7ou1UhFg= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([117.206.178.228]) by mail.gmx.com (mrgmx005 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MN5eR-1jNBo12bun-00J3Z5; Mon, 01 Jun 2020 10:49:09 +0200 From: James Thomas To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [PATCH] Improve Malayalam language transliteration In-Reply-To: <83wo4wq81f.fsf@gnu.org> References: <87d07ul5m1.fsf@gmx.net> <83r1wa5k1w.fsf@gnu.org> <87tv161aml.fsf@gmx.net> <83eesa5fxi.fsf@gnu.org> <87zhaxk5tw.fsf@gmx.net> <83wo4wq81f.fsf@gnu.org> Date: Mon, 01 Jun 2020 14:19:03 +0530 Message-ID: <87v9kbtbls.fsf@Kittu.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:DKOdxWvBvZH1xy3k7oQPTclyMqiKoxxRB5V3FJAAvJ1lGcnno1v I7SvY4kEDvO/ifFqqoo4XrrdB+cj8miy0RTlHPIH1PYNTNWlM1+4nPgPpklf8tsJ9jwVEvP p58oLyQ9K0XE7EBc79e0jmsHINlI57v6P/KfdEbns31l7IZ1MW9VvVG7A3T78CEvZ76poMR uNCbu6hRyrqW935+xYhMg== X-UI-Out-Filterresults: notjunk:1;V03:K0:OW7yQ0M/RR0=:gGOMUHeFNib/h/i3OU7Vb7 cy+jLP9AU4hYstd6UbsjV46G+hu8OP5lptSa3VX7e6J/lMRtyP6NNlZ/YbkxtSexqeQNU+Z34 ObALEcTtrfkGi0Rip2+HC7+tNs/StZRlcxi1c4ygZfGSg9lhfnf7dfDm/SLjiD3OPrj7eBvgv g+4rqXygEMi/CtmSfJ1G6dXc3MjO7PGwsBQ5g3sA0RdF4MHRNBg7br/Xnc1PPOXK8W0n0ZAGa A80MdVkp3uJ62F5OkjCX6CQO8ax/sNKC09TGDsk9OrdgGPKIqIHjMbDfIQ0X0sn1l9JBl7KC2 Q4VjLzlwicrijTJi37Tarx5a7Ub84EG7DUIVScnRjSKK8N2Q1TATUeaDooa4LweH6KdF2U7zm JshJU8rY7ojbu39oXyw7k44cOl29ad11DgrQkSFJ9A1SBe1rdZiZCJDnbsTwTrePnL9D2lVzS 9mFLgeBx3nuVPd2cPLzGf2PNNIJC7a8rqM0+6SAP6W6/8na9+ZTv0CgxVvpS4Txqt2XGhkBz0 NXC6+nov88hm4vOqP4b8day87hAiW44Dq51H/adxKqCx3C0krv32cb5lUwZhbC8h8y5PprCCc 0jZfyHKb4KDINuhi97Vw2ZA39mnh0Y1odS5CTDLik7H8xkWpFXywCalw9PIjenwiUaAvTyAMB TrblAFSofk+IfX7WXqY0IAK2oSKmWuqCaZggSFMFkYdVUMswE6989Qq4FYzrkbd36EOqmDMsy CtSjr3rWXReNSC+SkuHO7JuG5ZwzLM9RgzNuXAg6DfkG41CTOGsR3tnCvmE68RLuXpn1uCBIO F88ErEcm1GMGYnKB/psOzhkVGlDX/Il+WdDK2ZCa6YHwki3OxEYtng0tlyIVd7HpY9oD3W7SC vlvMZklv62qwPbGEYEjZDPFRG1MYg1S93+aNwxUUDmzPcUn+AdXDlP5lj6BeuU8lbDry2ZUCB d/8znNGzq1jRVZ1WDF+Fb1v/2WjSWylK3bAyVMdXPts26To5nBpuQI5QrXQB88Uw+6YMO40v3 qz6zeW9i3pKlmLwVimN9pS8uX5m8kklMBykema6hjpUHATZXx3kolhrTpAk9wnV3vq+FaE8Wy jJ/lHdQ4lBib5fTkEPul8KZ2K2b95nPdgU7ZKh1YPD1Xhnwr4kf51hLwGHfqPSeIWr1RefHCu 1Azp5mXSmSEI3fVjMrhP0Vn/A9OUVoBcdHYCHiz6Ue+B60DJHcJbtVg/QuBnK0g+m/Bix1IGY CMpE6diXH/Jbf7kT5 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.15.15; envelope-from=jimjoe@gmx.net; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 04:49:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SORBS_WEB=1.5, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Mon, 01 Jun 2020 09:21:29 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 08:49:13 -0000 Eli Zaretskii writes: >> From: James Thomas >> Cc: emacs-devel@gnu.org >> Date: Mon, 27 Apr 2020 08:12:03 +0530 >> >> Sorry for the bother, but this newer patch implements the Inscript stuf= f >> in an easier way. > > Thanks, I pushed this to the master branch. Just checked git and I think there's a problem - I can't see the changes to 'indian.el'. From MAILER-DAEMON Mon Jun 01 09:30:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfkVx-0006Fa-Uy for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 09:30:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkVw-0006DU-HN for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:30:04 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:5982) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkVu-0005XN-Tl; Mon, 01 Jun 2020 09:30:03 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 1C5D9100363; Mon, 1 Jun 2020 09:30:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5BE92100059; Mon, 1 Jun 2020 09:29:59 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591018199; bh=kYuwiq/RaBr7NlzSE5gLMod3DbG7DaqV0ySuclPs2Y8=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=M9drLlK5BARDujKegzr56vWu3pXXKofFAM1kY7ownh5dexoMT9BZ8Y16Z+NrxYJFc Bgr6K8iJ95vf6dOrp9M/0GYmHNJUHLq1R+2JWYAkR+pcsgeKjMWTg67BGje1ZLNQNd apoz0c03Ua3p+IiopV7ov8L5Z9wjAjljq803sxrI2Sd0SGnkyGIjADYL7SR8zDTYiY oSL5GBBbjppJ7PucLtbQPuU0NPxGXrE4pcDVQ88JTqxjUOAJubJyUrh89MUrrbXRY8 Q3HEqNxyTPF0hF3XDSPeDIfl3sN2/J+MMaXJalw8LZjAPAzph52yODGOeGw6vjtrPN U5BuiqUIS8acA== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 22DBB1205FB; Mon, 1 Jun 2020 09:29:59 -0400 (EDT) From: Stefan Monnier To: =?utf-8?Q?Micha=C5=82?= Nazarewicz Cc: Alan Mackenzie , bug-cc-mode@gnu.org, emacs-devel@gnu.org Subject: Re: [PATCH] cc-mode: don't tread dir-local and file-local variables differently Message-ID: References: <20200512194516.83180-1-mina86@mina86.com> <20200513184745.GA8857@ACM> <20200517142327.GA12554@ACM> <20200525184412.GA8662@ACM> <20200526171830.GA3905@ACM> Date: Mon, 01 Jun 2020 09:29:58 -0400 In-Reply-To: (=?utf-8?Q?=22Micha=C5=82?= Nazarewicz"'s message of "Mon, 1 Jun 2020 01:19:47 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.000 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 09:30:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 13:30:04 -0000 > The longer explanation is that if =E2=80=98c-file-style=E2=80=99 value co= mes from > a file-local variable, the specified style is set with DONT-OVERRIDE > equal nil. If the value comes from a directory-local variable, the > style is set with DONT-OVERRIDE equal t. In former case any global > customisation will be overridden; in the latter it won=E2=80=99t. > > I=E2=80=99ve mentioned hooks earlier because it doesn=E2=80=99t matter if= the value is > set via =E2=80=98setq-default=E2=80=99 in init.el, via customise or in on= e of cc-mode > hooks. The end result is that a file-local =E2=80=98c-file-style=E2=80= =99 will override > it while directory-local won=E2=80=99t. It's OK for hooks to override dir-local settings. It's more problematic when global settings override dir-local settings. Stefan From MAILER-DAEMON Mon Jun 01 09:37:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfkdM-0000dv-Jg for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 09:37:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkdL-0000dN-Op for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:37:43 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:46029) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkdK-0006tQ-CA; Mon, 01 Jun 2020 09:37:43 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 00D7D4411FA; Mon, 1 Jun 2020 09:37:40 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 524AB441195; Mon, 1 Jun 2020 09:37:34 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591018654; bh=rvv2pTXdx5TFYuoQamm+WCFj5puFhmtHXvEf+OeXu+o=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=TfkNkYzoC1MEVgCwSnZ8y1jy5oZE7J3CXyEDsiUBcRkMVJNoy+JX/+jwr0pP6/wBO Brd/9xQ3KLqBSJjE3BzEULMAucMWW0so6Z+cOIYwwTBylhlo4mkSg2jPxqCyi8fYR8 gTjunrYMWLNhCsg7bHIfQIrFQcqTxxxF7oq6Y28u/T88iNfnsPVel+JfmqOg9fIuGp BkxgwOVF6yqQDrIlb/kLmR2kXabBLuQ2BYwyFR2HRqkGJ6qq/UJyTBLOsrFCbgZh25 YUwhB0E1jMOg6TkchtaJtu/YBdZ/r4EB6Pn7cF4OZjqvYYqTzU1yEtc0lA33on5p+q WHfddLeRVVUnQ== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F0770120206; Mon, 1 Jun 2020 09:37:33 -0400 (EDT) From: Stefan Monnier To: Bastien Cc: Eric Abrahamsen , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails Message-ID: References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> <87lfl7e086.fsf@gnu.org> Date: Mon, 01 Jun 2020 09:37:33 -0400 In-Reply-To: <87lfl7e086.fsf@gnu.org> (Bastien's message of "Mon, 01 Jun 2020 09:03:53 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.096 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 09:30:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 13:37:44 -0000 > Then ~$ make produced this: > > In dismal-send-cmd-to-shell: > packages/dismal/dismal.el:4519:17:Warning: variable reference to nonvar= iable > =E2=80=98(make-local-variable 'dismal-gnuplot-finish)=E2=80=99 > packages/dismal/dismal.el:4519:17:Error: Wrong type argument: symbolp, = (make-local-variable 'dismal-gnuplot-finish) > make: *** [GNUmakefile:173: packages/dismal/dismal.elc] Error=20 [ Sorry&Thanks: I just pushed a fix for this. ] Hmm... I've had the `elpa.git` checked out for years, and do `make` in it regularly, yet this plain error got through. Obviously my `make` only recompiles the changed files, but still, I wonder how I managed to have a `dismal.elc` more recent than `dismal.el` given the obvious error from which it suffered. Stefan From MAILER-DAEMON Mon Jun 01 09:44:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfkjz-0002T3-Uo for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 09:44:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60916) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkjx-0002SK-VW for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:44:33 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:57552) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfkjw-0000sP-PQ for emacs-devel@gnu.org; Mon, 01 Jun 2020 09:44:33 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 12ECE4411FA; Mon, 1 Jun 2020 09:44:32 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 8CB29441195; Mon, 1 Jun 2020 09:44:30 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591019070; bh=9LLDrnMVmEdFet9nu010L2yVtQ8m7t8D0ic3Wl/DUk8=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=YTiUSXOYL0rnS4s+dtq0EtQuo2thtUe/U76Co7ng7IieQl1GCKyRwXBDZbjNVoV4t zOfUEKa+3n3QrTMrpcQpFHbjTT5Lpzh3zq2ML2+vscRHBX8MC879w7gsOoJp2pmJ5a XHgEcb+q1mPMrXngU+wLLH8sSOwuaJMxmfe0KPvJw+WENrUKRxUkclym+Xz8sy9HSz oaHP1kOSF51ehsdMudueZqw97rhYECyaxr8QoXVCtrQP7qwsW3l1iZPQ6h7MRuA2ID 6813FtvNmvHMXuzphowyME1pO+Drsk7kwAPq+WJdRmQcr3jYSCBg0lmvcXzBEXKNXc o24h4cyxI1IMg== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 3F6B91207FB; Mon, 1 Jun 2020 09:44:30 -0400 (EDT) From: Stefan Monnier To: Lars Brinkhoff Cc: emacs-devel@gnu.org Subject: Re: Meaning behind Control-G Message-ID: References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> Date: Mon, 01 Jun 2020 09:44:29 -0400 In-Reply-To: <7w367f6y81.fsf_-_@junk.nocrew.org> (Lars Brinkhoff's message of "Mon, 01 Jun 2020 07:29:02 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.094 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 09:30:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 13:44:34 -0000 > Now, why TECO uses Control-G for "quit", I don't know. ASCII "BEL" as > an "alarm" is a plausible theory, but hard to verify. In general > there's no strong link between control characteras as inputs and their > corresponding output behaviour. FWIW, the link between C-g and "BEL" is pretty clear: it must be [G]raham [Bel]l Stefan From MAILER-DAEMON Mon Jun 01 11:02:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jflwu-0000jc-9p for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 11:02:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42480) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jflws-0000hg-HH for emacs-devel@gnu.org; Mon, 01 Jun 2020 11:01:58 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50465) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jflws-0002QH-1S; Mon, 01 Jun 2020 11:01:58 -0400 Received: from [176.228.60.248] (port=2781 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jflwr-0002BP-4C; Mon, 01 Jun 2020 11:01:57 -0400 Date: Mon, 01 Jun 2020 18:02:00 +0300 Message-Id: <837dwqg787.fsf@gnu.org> From: Eli Zaretskii To: James Thomas Cc: emacs-devel@gnu.org In-Reply-To: <87v9kbtbls.fsf@Kittu.i-did-not-set--mail-host-address--so-tickle-me> (message from James Thomas on Mon, 01 Jun 2020 14:19:03 +0530) Subject: Re: [PATCH] Improve Malayalam language transliteration References: <87d07ul5m1.fsf@gmx.net> <83r1wa5k1w.fsf@gnu.org> <87tv161aml.fsf@gmx.net> <83eesa5fxi.fsf@gnu.org> <87zhaxk5tw.fsf@gmx.net> <83wo4wq81f.fsf@gnu.org> <87v9kbtbls.fsf@Kittu.i-did-not-set--mail-host-address--so-tickle-me> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 15:01:58 -0000 > From: James Thomas > Cc: emacs-devel@gnu.org > Date: Mon, 01 Jun 2020 14:19:03 +0530 > > Eli Zaretskii writes: > > > Thanks, I pushed this to the master branch. > > Just checked git and I think there's a problem - I can't see the changes > to 'indian.el'. Did you check the master branch? If so, perhaps your branch is not in sync: I mistakenly left out indian.el from the original commit, but pushed it later (3 days ago, to be correct). Sorry about the messup. From MAILER-DAEMON Mon Jun 01 11:03:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfly5-00028u-LS for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 11:03:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfly4-00026Z-2x for emacs-devel@gnu.org; Mon, 01 Jun 2020 11:03:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50493) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfly3-0002gk-47; Mon, 01 Jun 2020 11:03:11 -0400 Received: from [176.228.60.248] (port=2845 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jflxs-0004Aw-Kw; Mon, 01 Jun 2020 11:03:01 -0400 Date: Mon, 01 Jun 2020 18:03:03 +0300 Message-Id: <835zcag76g.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: emacs-devel@gnu.org, excalamus@tutanota.com, van.ly+2020@sdf.org, rms@gnu.org In-Reply-To: <874krvup4i.fsf@gnu.org> (message from Bastien on Mon, 01 Jun 2020 11:11:41 +0200) Subject: Re: What is the most useful potential feature which Emacs lacks? References: <874krvup4i.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 15:03:12 -0000 > From: Bastien > Date: Mon, 01 Jun 2020 11:11:41 +0200 > Cc: excalamus@tutanota.com, Van Ly , > Richard Stallman > > > What about collaborative editing? > > FWIW, this is something Org users have been wanting for years. What is missing in Emacs to make this possible? From MAILER-DAEMON Mon Jun 01 11:07:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfm24-0005Ef-3e for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 11:07:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfm20-0005EG-GN for Emacs-devel@gnu.org; Mon, 01 Jun 2020 11:07:18 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50560) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfm1z-0003lI-Io; Mon, 01 Jun 2020 11:07:15 -0400 Received: from [176.228.60.248] (port=3098 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jfm1r-0004ZV-MG; Mon, 01 Jun 2020 11:07:08 -0400 Date: Mon, 01 Jun 2020 18:07:09 +0300 Message-Id: <834krug6zm.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: dgutov@yandex.ru, sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org In-Reply-To: <87d06jtacj.fsf@gnu.org> (message from Bastien on Mon, 01 Jun 2020 11:16:12 +0200) Subject: Re: GNU ELPA package discoverability References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <03df68b8-dace-c4f0-d45a-26c2e8b5cae5@yandex.ru> <87d06jtacj.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 15:07:18 -0000 > From: Bastien > Cc: Sacha Chua , Eli Zaretskii , > rms@gnu.org, Emacs-devel@gnu.org > Date: Mon, 01 Jun 2020 11:16:12 +0200 > > I'd rather go ahead by moving Package information to the Tools menu, > where it really belongs. Why "Tools"? because some other applications have Tools->Add-ons menu item? But if so, then (a) not all of them do that (some have it in "Options"), and (b) the proposed menu items are nowhere near "Add-ons", so if someone wanted to alert newbies to something they are maybe used to, I very much doubt that "Manage Emacs Packages" will do. IOW, if this intends to make additional packages more easily detectable, let's find a better name for this menu item, because what's being suggested here is more a turn-off than a feature promoting Emacs. Or maybe I'm missing something. From MAILER-DAEMON Mon Jun 01 11:08:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfm3S-0006AB-Eb for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 11:08:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43278) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfm3Q-00068o-Jf for Emacs-devel@gnu.org; Mon, 01 Jun 2020 11:08:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50599) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfm3Q-0003ts-Ai; Mon, 01 Jun 2020 11:08:44 -0400 Received: from [176.228.60.248] (port=3189 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jfm3I-0004fJ-Km; Mon, 01 Jun 2020 11:08:37 -0400 Date: Mon, 01 Jun 2020 18:08:39 +0300 Message-Id: <83367eg6x4.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org In-Reply-To: <87pnajrvb4.fsf@bzg.fr> (message from Bastien on Mon, 01 Jun 2020 11:26:23 +0200) Subject: Re: GNU ELPA package discoverability References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 15:08:44 -0000 > From: Bastien > Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org > Date: Mon, 01 Jun 2020 11:26:23 +0200 > > Eli, let me know if I can apply it against master. See my other message: I'd rather we found a better name for these items. "Manage packages" sounds boring and uninteresting (who starts using Emacs to "manage" something?). Thanks. From MAILER-DAEMON Mon Jun 01 11:18:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfmDJ-0006Kb-Cw for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 11:18:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44380) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfmDH-0006KU-Ev for Emacs-devel@gnu.org; Mon, 01 Jun 2020 11:18:55 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:60427) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfmDF-00069R-UB; Mon, 01 Jun 2020 11:18:54 -0400 X-Originating-IP: 128.53.64.23 Received: from [10.0.1.13] (pl19991.ag0304.nttpc.ne.jp [128.53.64.23]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 834A3C0003; Mon, 1 Jun 2020 15:18:44 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: GNU ELPA package discoverability From: Jean-Christophe Helary In-Reply-To: <83367eg6x4.fsf@gnu.org> Date: Tue, 2 Jun 2020 00:18:40 +0900 Cc: Bastien , Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org Content-Transfer-Encoding: 7bit Message-Id: <145482B3-7B78-45FC-ABB2-22F37DFAAC9E@traduction-libre.org> References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.198; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay6-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 11:18:48 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 15:18:55 -0000 > On Jun 2, 2020, at 0:08, Eli Zaretskii wrote: > >> From: Bastien >> Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org >> Date: Mon, 01 Jun 2020 11:26:23 +0200 >> >> Eli, let me know if I can apply it against master. > > See my other message: I'd rather we found a better name for these > items. "Manage packages" sounds boring and uninteresting (who starts > using Emacs to "manage" something?). New extensions -- Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Mon Jun 01 13:09:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfnwH-0005fF-1y for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 13:09:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfnwG-0005f8-07 for emacs-devel@gnu.org; Mon, 01 Jun 2020 13:09:28 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:33557) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfnwF-0005oT-8P for emacs-devel@gnu.org; Mon, 01 Jun 2020 13:09:27 -0400 Received: by mail-pf1-x435.google.com with SMTP id n15so3793005pfd.0 for ; Mon, 01 Jun 2020 10:09:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YXIjZ78Xua/lhvHbte4ujQlrgvrs3DPB3uDvtyUe6+4=; b=sdjX4J2IFaXSvzVL95pGyjgIcgtVGXwcMTg9Ii8+4hqGRR2KIKzB0y1RZSfDy+5Ei8 X5lGvOVKReJhlvsb0pG6yh4JOQ8oMNwYXJAE4P8svM6XzoooejCwjz852BocYYzydTlH ZzstC7iUopXR196+88cbZQRiEYM8fE74/8AXg9BbMUIxlKLV/Z9cMFgH/oM7rQM16azL vIUBLAZAUy1n+vF7147iFlOF9pSD+6RJCa+g4FtHG8fhCbUjfpTrntycktbSHRSrN2X5 4iEYQ+5R8fGge13L12F0/xAHs5AuTZRTVzB/BNGnTOiX2b+LTEL5D2R0Evxh07awv22Z D0FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YXIjZ78Xua/lhvHbte4ujQlrgvrs3DPB3uDvtyUe6+4=; b=EZwE6pYroJKyI5KUm1z6fwBxYrgbF8DaYwI2iNt0mivfRU9cX1CI+zulLTPQ6BOazs yJOa+NbXlb+ubFu1AOIEcjM30Zg/g1w9+Hs33SuBt23p/Qpbdidi4rSZacWVXw6/L6SJ po72w2uDS4jR/F8jmmeJuYxOwgEX8yVt1MuI0hbOpjOICq0lEMaGtCFXyUH4Z4ysnlIX T6ZK4ywbqiribcS/tmsbQluVOjgVwwTgbTKHADkGv6DYsKm0+IIjiHrEvcBu8Ky5mIjg O08heaCWR8PnZXvwcJ1+qKeyOigoi2eAsgLDHxODRf5xpDzJt+vqX7MUvLgJVKpefHpS +3SQ== X-Gm-Message-State: AOAM531EdOTu33F73w8nU1Ydya7GOQxUhMz1IoI+8D3GN2rAlke3ir9h Hc1PpbJlqQ1gtRXOlOspne6E1g== X-Google-Smtp-Source: ABdhPJxvpv4mkZk4sKRW3/TKMmcgvejOIgxCjjDV/dnyyAY0jLmDhi6PXDHSoShSB6hJWLPfwOcAwQ== X-Received: by 2002:a05:6a00:1511:: with SMTP id q17mr14639709pfu.16.1591031364067; Mon, 01 Jun 2020 10:09:24 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id o20sm39166pjw.19.2020.06.01.10.09.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jun 2020 10:09:22 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id 93A1CC233A3; Mon, 1 Jun 2020 10:09:21 -0700 (PDT) From: "T.V Raman" To: Stefan Monnier Cc: Bastien , Eric Abrahamsen , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> <87lfl7e086.fsf@gnu.org> Date: Mon, 01 Jun 2020 10:09:21 -0700 In-Reply-To: (Stefan Monnier's message of "Mon, 01 Jun 2020 09:37:33 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=raman@google.com; helo=mail-pf1-x435.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: -175 X-Spam_score: -17.6 X-Spam_bar: ----------------- X-Spam_report: (-17.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 17:09:28 -0000 The other thing this points out: how do we catch and prevent bit-rot in elpa? Dismal used to be one of my favorite tools but I've abandoned it long since because it has not seen any updates in a long, long time. -- From MAILER-DAEMON Mon Jun 01 13:31:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfoHn-00033H-Qf for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 13:31:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfoHl-000336-P1 for emacs-devel@gnu.org; Mon, 01 Jun 2020 13:31:42 -0400 Received: from ericabrahamsen.net ([52.70.2.18]:47632 helo=mail.ericabrahamsen.net) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfoHk-0001VS-TR; Mon, 01 Jun 2020 13:31:41 -0400 Received: from localhost (c-73-254-86-141.hsd1.wa.comcast.net [73.254.86.141]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 81471FA034; Mon, 1 Jun 2020 17:31:38 +0000 (UTC) From: Eric Abrahamsen To: Bastien Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> <87mu5ndfmy.fsf@ericabrahamsen.net> <87a71ne074.fsf@bzg.fr> Date: Mon, 01 Jun 2020 10:31:37 -0700 In-Reply-To: <87a71ne074.fsf@bzg.fr> (Bastien's message of "Mon, 01 Jun 2020 09:04:31 +0200") Message-ID: <87v9kabsli.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=52.70.2.18; envelope-from=eric@ericabrahamsen.net; helo=mail.ericabrahamsen.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 13:31:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 17:31:42 -0000 Bastien writes: > Eric Abrahamsen writes: > >> I'll do one or the other soon, but I'd be curious to know if Bastien >> hasn't done `make externals`, and if that fixes the problem for sure. > > Yes, with ~$ make externals the problem with ebdb is gone. Thanks! Cool! I'm still going to re-absorb this package into Gnorb, I think. Thanks, Eric From MAILER-DAEMON Mon Jun 01 16:58:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfrWJ-0005XA-P4 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 16:58:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58432) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfrWE-0005X1-IX for emacs-devel@gnu.org; Mon, 01 Jun 2020 16:58:50 -0400 Received: from forward102o.mail.yandex.net ([2a02:6b8:0:1a2d::602]:48530) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfrWC-0003Sh-Q8 for emacs-devel@gnu.org; Mon, 01 Jun 2020 16:58:49 -0400 Received: from mxback9g.mail.yandex.net (mxback9g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:170]) by forward102o.mail.yandex.net (Yandex) with ESMTP id 6CEF4668034F for ; Mon, 1 Jun 2020 23:58:41 +0300 (MSK) Received: from iva4-bca95d3b11b1.qloud-c.yandex.net (iva4-bca95d3b11b1.qloud-c.yandex.net [2a02:6b8:c0c:4e8e:0:640:bca9:5d3b]) by mxback9g.mail.yandex.net (mxback/Yandex) with ESMTP id gDEtXVcZU8-wfVGgEQi; Mon, 01 Jun 2020 23:58:41 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591045121; bh=UX3JEA92rSROlxJ3EaQYE1XJK3iU700FX8aG+xGMo34=; h=Subject:To:From:Date:Message-Id; b=tdzelJJOcw0b5gXOVopXWGckkyEg+QFwvhHe16V5vw2llEDjp7KNtsVNhEQkJmmbA xSaDqIKD8m9l8pVeYIszw3ybkGCiipjEHMlet8LfBh3S4qgKHnBvZFFUupvgn/Kfem 2JCAANiVxnNedbPtOSIN75/kYS8og+95leoKjTXw= Authentication-Results: mxback9g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva4-bca95d3b11b1.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id i6e9W4Pu11-weXGRW2b; Mon, 01 Jun 2020 23:58:40 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) From: Konstantin Kharlamov To: emacs-devel@gnu.org Subject: [PATCH] Highlight typed variables in python Date: Mon, 1 Jun 2020 23:58:33 +0300 Message-Id: <20200601205833.35606-1-Hi-Angel@yandex.ru> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::602; envelope-from=Hi-Angel@yandex.ru; helo=forward102o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 20:58:50 -0000 * progmodes/python.el (python-font-lock-keywords-maximum-decoration): recognize typed variables like "foo: int = 1" as well. --- lisp/progmodes/python.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index ae5aff351c0..0263f4cc291 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -634,6 +634,7 @@ python-font-lock-keywords-maximum-decoration (,(lambda (limit) (let ((re (python-rx (group (+ (any word ?. ?_))) (? ?\[ (+ (not (any ?\]))) ?\]) (* space) + (? ?: (* space) (+ (any word ?. ?_)) (* space)) ;; a type, like " : int " assignment-operator)) (res nil)) (while (and (setq res (re-search-forward re limit t)) -- 2.26.2 From MAILER-DAEMON Mon Jun 01 17:05:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfrd9-00080H-8M for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 17:05:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfrd7-0007zM-Pf for Emacs-devel@gnu.org; Mon, 01 Jun 2020 17:05:57 -0400 Received: from mail-qt1-f170.google.com ([209.85.160.170]:38935) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfrd6-0004sm-6v; Mon, 01 Jun 2020 17:05:57 -0400 Received: by mail-qt1-f170.google.com with SMTP id k22so8917559qtm.6; Mon, 01 Jun 2020 14:05:54 -0700 (PDT) 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:cc; bh=jGP+bBlD7vtKGz5Nn6WIl19KqVOzYWkcify0q/uIDMw=; b=AVs3PqgsDvPt+VVO93ARS7xPTA9jiuGlNH00h7S+c7v0OfxqYyGXEPkLWSaRD4yEF0 JslyGRn6wGIgzRiloH8yrStk7/Rd3QnXg1DYdhLic0fB4brCmgUPQ19hl5FtoNFHF91M qCQBmTRBVlwcO2dG41CmLMid0wgfbfGhgT3UU3ngjdqJdC76iL58uLefyjsK8cTBLgRp 8MjQ5fDquExBLlXa+MWgprf3GvjTbFh1C+ID5ThoUl2oKCpN6W3eFXcalGo4hJmn6qKP 1YBmOYwJWYreWpOUUMhYFCa9/kwzpUdAmQ9Qx5Rgv9xQJDPBEAWTJ3w+5uNYD6iKmucH BKyQ== X-Gm-Message-State: AOAM5313SsdN9Qnod4Qz3lSfYdyKmKBeSw4x9HfTPv7u4WEXQWO8oVRB ZQd8U2/43Jri5bLeLqGzTuQRxWCP4BN+YCDw7FbxM9ms X-Google-Smtp-Source: ABdhPJxtRTz0t6bHjRn0fvHwPyn5HJ/VXVK432Gmf3n43lvkvmE1A/XMoLYTGacHzbfm1ZgmRp19zekh2BjUxe6rhf4= X-Received: by 2002:aed:2622:: with SMTP id z31mr10861063qtc.273.1591045553711; Mon, 01 Jun 2020 14:05:53 -0700 (PDT) MIME-Version: 1.0 References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <145482B3-7B78-45FC-ABB2-22F37DFAAC9E@traduction-libre.org> In-Reply-To: <145482B3-7B78-45FC-ABB2-22F37DFAAC9E@traduction-libre.org> From: Corwin Brust Date: Mon, 1 Jun 2020 16:05:41 -0500 Message-ID: Subject: Re: GNU ELPA package discoverability To: Jean-Christophe Helary Cc: Eli Zaretskii , Bastien , sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="0000000000000cef4805a70c2949" Received-SPF: pass client-ip=209.85.160.170; envelope-from=mplscorwin@gmail.com; helo=mail-qt1-f170.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 17:05:53 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 21:05:58 -0000 --0000000000000cef4805a70c2949 Content-Type: text/plain; charset="UTF-8" On Mon, Jun 1, 2020, 10:19 Jean-Christophe Helary < jean.christophe.helary@traduction-libre.org> wrote: > > > > On Jun 2, 2020, at 0:08, Eli Zaretskii wrote: > > > >> From: Bastien > >> Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org > >> Date: Mon, 01 Jun 2020 11:26:23 +0200 > >> > >> Eli, let me know if I can apply it against master. > > > > See my other message: I'd rather we found a better name for these > > items. "Manage packages" sounds boring and uninteresting (who starts > > using Emacs to "manage" something?). > > New extensions > Add/Remove Features > > > -- > Jean-Christophe Helary @brandelune > http://mac4translators.blogspot.com > > > --0000000000000cef4805a70c2949 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Mon, Jun 1, 2020, 10:19 Jean-Christophe Helary <= jean.christo= phe.helary@traduction-libre.org> wrote:


> On Jun 2, 2020, at 0:08, Eli Zaretskii <eliz@gnu.org> wrote:
>
>> From: Bastien <bzg@gnu.org>
>> Cc: Eli Zaretskii <eliz@gnu.org>,=C2=A0 rms@gnu.org,=C2=A0 Emacs= -devel@gnu.org
>> Date: Mon, 01 Jun 2020 11:26:23 +0200
>>
>> Eli, let me know if I can apply it against master.
>
> See my other message: I'd rather we found a better name for these<= br> > items.=C2=A0 "Manage packages" sounds boring and uninteresti= ng (who starts
> using Emacs to "manage" something?).

New extensions

Add/Remove Features


--
Jean-Christophe Helary @brandelune
http://mac4translators.blogspot.com


--0000000000000cef4805a70c2949-- From MAILER-DAEMON Mon Jun 01 19:03:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jftSS-0004CO-5g for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 19:03:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jftSP-00049s-Nl for emacs-devel@gnu.org; Mon, 01 Jun 2020 19:03:01 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:43921) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jftSO-0007Or-O0 for emacs-devel@gnu.org; Mon, 01 Jun 2020 19:03:01 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id D740540002; Mon, 1 Jun 2020 23:02:56 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> Date: Tue, 02 Jun 2020 02:01:46 +0300 In-Reply-To: <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> (Dmitry Gutov's message of "Sun, 31 May 2020 02:39:31 +0300") Message-ID: <87d06is84l.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.194; envelope-from=juri@linkov.net; helo=relay2-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 19:02:59 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 23:03:01 -0000 >> Also could you please >> add a command to run shell, in addition to the already added eshell. > > Would you like to do the honors? No problem, done. From MAILER-DAEMON Mon Jun 01 19:25:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfto8-00041V-M8 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 19:25:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfto7-00041A-Fb for Emacs-devel@gnu.org; Mon, 01 Jun 2020 19:25:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59624) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfto6-0005gh-QW; Mon, 01 Jun 2020 19:25:26 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:51252 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jftnt-00010n-5i; Mon, 01 Jun 2020 19:25:14 -0400 Received: by guerry (Postfix, from userid 1000) id AB4D81A60813; Tue, 2 Jun 2020 01:25:10 +0200 (CEST) From: Bastien To: Eli Zaretskii Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> Date: Tue, 02 Jun 2020 01:25:10 +0200 In-Reply-To: <83367eg6x4.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 01 Jun 2020 18:08:39 +0300") Message-ID: <875zcas71l.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 23:25:27 -0000 Eli Zaretskii writes: >> From: Bastien >> Cc: Eli Zaretskii , rms@gnu.org, Emacs-devel@gnu.org >> Date: Mon, 01 Jun 2020 11:26:23 +0200 >> >> Eli, let me know if I can apply it against master. > > See my other message: I'd rather we found a better name for these > items. "Manage packages" sounds boring and uninteresting (who starts > using Emacs to "manage" something?). Fair enough. What about this: Tools Install Emacs packages List available packages Add new package* sources * Not sure whether this should be package or packages. -- Bastien From MAILER-DAEMON Mon Jun 01 19:32:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jftuj-0005v5-LO for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 19:32:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jftui-0005uv-V5 for emacs-devel@gnu.org; Mon, 01 Jun 2020 19:32:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59718) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jftui-0002HY-C4; Mon, 01 Jun 2020 19:32:16 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:51280 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jftub-0002dh-31; Mon, 01 Jun 2020 19:32:09 -0400 Received: by guerry (Postfix, from userid 1000) id AEAD01A60813; Tue, 2 Jun 2020 01:32:06 +0200 (CEST) From: Bastien To: Eli Zaretskii Cc: excalamus@tutanota.com, van.ly+2020@sdf.org, rms@gnu.org, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Organization: GNU References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> Date: Tue, 02 Jun 2020 01:32:06 +0200 In-Reply-To: <835zcag76g.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 01 Jun 2020 18:03:03 +0300") Message-ID: <87ftbenz0p.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 23:32:17 -0000 Eli Zaretskii writes: >> From: Bastien >> Date: Mon, 01 Jun 2020 11:11:41 +0200 >> Cc: excalamus@tutanota.com, Van Ly , >> Richard Stallman >> >> > What about collaborative editing? >> >> FWIW, this is something Org users have been wanting for years. > > What is missing in Emacs to make this possible? I don't know for sure. In the past, I was able to collaborate with a friend using an Emacs extension called "Rudel", which lets two distant buffers communicate with each other over the Gobby protocol. https://www.emacswiki.org/emacs/Rudel indicates that the reference implementation for the Gobby protocol is broken. I have not tried. So perhaps the required work is not on the Emacs side, but on that of the protocol and its implementation. -- Bastien From MAILER-DAEMON Mon Jun 01 19:47:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfu9R-0002KX-HR for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 19:47:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfu9Q-0002K3-3U for emacs-devel@gnu.org; Mon, 01 Jun 2020 19:47:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59925) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfu9P-0005YZ-5k; Mon, 01 Jun 2020 19:47:27 -0400 Received: from lns-bzn-32-82-254-31-120.adsl.proxad.net ([82.254.31.120]:51428 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jfu9O-0003fG-S0; Mon, 01 Jun 2020 19:47:26 -0400 Received: by guerry (Postfix, from userid 1000) id 4E6521A60813; Tue, 2 Jun 2020 01:47:24 +0200 (CEST) From: Bastien To: Stefan Monnier Cc: Eric Abrahamsen , emacs-devel@gnu.org Subject: Re: ELPA git repo contains zero-padded file modes and running ~$ make fails Organization: GNU References: <87zha1esp6.fsf@gnu.org> <87blmbs4wg.fsf@ericabrahamsen.net> <87imgcxgar.fsf@bzg.fr> <87lfl7e086.fsf@gnu.org> Date: Tue, 02 Jun 2020 01:47:24 +0200 Message-ID: <87367ejqlv.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 23:47:28 -0000 Stefan Monnier writes: > [ Sorry&Thanks: I just pushed a fix for this. ] Thanks! I was able to git pull, make externals and make fine. -- Bastien From MAILER-DAEMON Mon Jun 01 19:50:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfuCo-0003P2-SN for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 19:50:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfuCn-0003Ov-Tb for emacs-devel@gnu.org; Mon, 01 Jun 2020 19:50:57 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:36283) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfuCj-0007by-C0; Mon, 01 Jun 2020 19:50:56 -0400 Received: from [10.0.1.13] (pl19991.ag0304.nttpc.ne.jp [128.53.64.23]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 9BF02240003; Mon, 1 Jun 2020 23:50:37 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: What is the most useful potential feature which Emacs lacks? From: Jean-Christophe Helary In-Reply-To: <87ftbenz0p.fsf@gnu.org> Date: Tue, 2 Jun 2020 08:50:33 +0900 Cc: Eli Zaretskii , excalamus@tutanota.com, van.ly+2020@sdf.org, Richard Stallman , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> To: Bastien X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.178.230; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay10.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 19:50:48 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_BL=0.001, RCVD_IN_MSPIKE_L3=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Jun 2020 23:50:58 -0000 > On Jun 2, 2020, at 8:32, Bastien wrote: >=20 > Eli Zaretskii writes: >=20 >>> From: Bastien >>> Date: Mon, 01 Jun 2020 11:11:41 +0200 >>> Cc: excalamus@tutanota.com, Van Ly , >>> Richard Stallman >>>=20 >>>> What about collaborative editing? >>>=20 >>> FWIW, this is something Org users have been wanting for years. >>=20 >> What is missing in Emacs to make this possible? >=20 > I don't know for sure. >=20 > In the past, I was able to collaborate with a friend using an Emacs > extension called "Rudel", which lets two distant buffers communicate > with each other over the Gobby protocol. >=20 > https://www.emacswiki.org/emacs/Rudel indicates that the reference > implementation for the Gobby protocol is broken. I have not tried. >=20 > So perhaps the required work is not on the Emacs side, but on that=20 > of the protocol and its implementation. It looks like SubEthaEdit, the text editor that first provided solid = collaborative editing features on macos is now released under the MIT = license and its communication protocol is documented on emacswiki: https://www.emacswiki.org/emacs/SubEthaEditProtocol --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Mon Jun 01 21:51:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfw5i-00051y-TX for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 21:51:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45368) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfw5g-00050U-T2 for emacs-devel@gnu.org; Mon, 01 Jun 2020 21:51:45 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:48492) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfw5e-0002uD-Ks for emacs-devel@gnu.org; Mon, 01 Jun 2020 21:51:44 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 3CDAE160097; Mon, 1 Jun 2020 18:51:27 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id ILJ6pu5yYLvZ; Mon, 1 Jun 2020 18:51:26 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 6A1191600D1; Mon, 1 Jun 2020 18:51:26 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id H12ABC2bDI4C; Mon, 1 Jun 2020 18:51:26 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 3C171160097; Mon, 1 Jun 2020 18:51:26 -0700 (PDT) Subject: Re: Meaning behind Control-G To: Stefan Monnier Cc: Lars Brinkhoff , emacs-devel@gnu.org, Gordon Bell References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: Date: Mon, 1 Jun 2020 18:51:25 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 18:46:39 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 01:51:45 -0000 On 6/1/20 6:44 AM, Stefan Monnier wrote: > FWIW, the link between C-g and "BEL" is pretty clear: it must be > [G]raham [Bel]l Hah! As long as we're guessing, why not [G]ordon [Bel]l? His early work predates ASCII and Wikipedia says he designed the first UART (this was for the PDP-1) so he was very much in the thick of things when Control-G was invented. I'll cc him in this email to see whether he knows whether Control-G and BEL are related because of him. It's unlikely, though. I looked it up, and BEL goes back to the Western Union code (sometimes called the Baudot-Murray code, ITA2, or CCITT#2) invented in 1901. It was a 5-bit code with an escape, and BEL was an escaped J. The New Zealand inventor Donald Murray invented BEL to ring the mechanical bells in his telegraphic typewriters. (Murray eventually became rich from his teleprinter patents and died a wealthy philosopher in Switzerland.) When ASCII was developed in the early 1960s, BEL was one of the standardized characters for compatibility with ITA2. The developers of ASCII looked at all the control characters to be standardized, and attempted to maximize the Hamming distance between the bit patterns of pairs of control characters where confusion was likely to cause the most damage. (This little tidbit of information comes from page 245 of Charles E Mackenzie's 1980 book "Coded Character Sets, History and Development".) The best person to ask exactly why C-g was assigned to BEL would be Bob Bemer, co-developer of COBOL and sometimes called the "Father of ASCII" for his lead role in ASCII standardization. Unfortunately for us he passed away in 2004. That being said, Western Union and Bell were bitter commercial competitors (see the Telephone Cases of the 1870s and 1880s), and I very much doubt that Western Union would name one of its character codes after Alexander Graham Bell. From MAILER-DAEMON Mon Jun 01 22:27:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfweH-0002kX-H3 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 22:27:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfweG-0002kP-0g for emacs-devel@gnu.org; Mon, 01 Jun 2020 22:27:28 -0400 Received: from mout.gmx.net ([212.227.17.20]:54841) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfweD-00021v-2R; Mon, 01 Jun 2020 22:27:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591064841; bh=v21AIRC3xNDWVeVu31vNo1N6uvJ6tPLGKoAIYzl0hh4=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=cef70zJG1C7pBbzPAVNYBT/WSib/syBYs7S+Z6tfxv+Y/H4LOqlMfP4Ncxnl0L6YT PtRaTNl6rdGgz6sN71U3ax5q5JiBcB7IqdYpEbPcQNRgGY5si5+HgWH4lGOIfydZmM 12jPkRSPvbzOmcexxq+k5y7Ej0xh0AUYIuOS2zuM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([59.94.238.39]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MHoNC-1jjkY23JCQ-00ExM6; Tue, 02 Jun 2020 04:27:21 +0200 From: James Thomas To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [PATCH] Improve Malayalam language transliteration In-Reply-To: <837dwqg787.fsf@gnu.org> References: <87d07ul5m1.fsf@gmx.net> <83r1wa5k1w.fsf@gnu.org> <87tv161aml.fsf@gmx.net> <83eesa5fxi.fsf@gnu.org> <87zhaxk5tw.fsf@gmx.net> <83wo4wq81f.fsf@gnu.org> <87v9kbtbls.fsf@Kittu.i-did-not-set--mail-host-address--so-tickle-me> <837dwqg787.fsf@gnu.org> Date: Tue, 02 Jun 2020 07:57:03 +0530 Message-ID: <87pnaiurrc.fsf@Kittu.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:ybgk+pHEfCaeQE8XsncDNLIs/6a09ZX+mDCJooWebhp74ET0HeD Ic/sFAku0BIawrXFmWA97EqVFgW71tX5gMYCt2g3tOB8O7Bgt1iKm8NN4mTvDnhvq0SeRUu 3bKwgQiSyzsLxqHzli1QcnGRlboHn9d6rgtLlh59Nz26qHtXmlS9NnGO/2LckXgwk/J2SL+ amtMMRzrv2Szjs83BegPw== X-UI-Out-Filterresults: notjunk:1;V03:K0:QOzkiuDwD9w=:Y4gD/MtLR7873NzfZTrjbu K0nDW/C2MnOy9zUinmMMSnkz5IyLGUv0Ev+rpzW5zsfVBLApR10Pn5Bm1tl9aum1/Vx1Z1+VC TT6m/7zj56Jr78lblx7lkXQcv+tgNAhStkmvleN9FD0IjvF+kBXZ5OrM59iXVfFoNKe+4dTgq pErRKH/WRACReVOfjZFQuklZ7EZuLwi0dappStD6raYtG1cDjdBfgFNobeF5dSOwAzJelhb/H Iq1DDQ7ch0nV7eNXNcfp3S66MltNxIbumgq6VxvPOF8zc6u2k8q2jbTcOjqXSH1ATJsT5EEI8 I3vqWxRN003rNOIh0M2l75kRoEiDYim0IxvEp733bH/0gu9XvIPEQnbb66Ha02kUlmImLnBII 69tgmW84bn3HkB4Zur5NadeapiTozACp/bsSOcA8aOO1IFzaj6MIis+tlMtfQiM8DnGUGMFut GIJazQ7ZBuiwpUxzHX9Ei/qodyUq2UD+iTc0fI9WSFlo338T+kwjPJx3+U9frURoU43Nc6PDz FqpmH97id43guy/DUAcGK6EeNaOzHxms4gysQWbysckPhmt8mLfSjBMoiptGY89UuaHn542e/ SZB5o838oSpHhuJh9UouLVQ0EjKY1oVsJHUWWIkbb+ZIpPN03cJ1KFeL+96LLHPIsNpw7wLdO Ljklr0a6rgL5hhtmpu6OFIkPw+vVNJHC8mWbFJFpleznFNqkycC5timnEb53ML7kdU0zfJWuM 06CHStZTIp9jZYqWTBiFvjBpe4B2avKXBoYal6eBK7Q+z1JefXG24cVWGkuzWpKNjWiuJND7B hz/Vur9IepmfU5Lrup2cKZbEEBxahsSSwj1bfx0O/X6c5WzVQpvskeoz1AZ/ParGJqPhF2GIY b6kbT03LTPBffjWMVTw0veQB4vgw8Q4QP8oJhH8MPYi1r8kLT+9AFkzUyfw1+gegqfGjXXX9i ggEPp91vDNmBK1wuXjCODG4Z5adEFJZ+nagImuAAY27lwOLHdmByYT94xbMenqg7Yn0Tg6ZNV //79vD7CyEwOr0FlhHjDayrsW6MhdB9ZOzE/Y6WP+v95u8s4pvDJMUy/Tfdf4uZb8cYq4HmIS +zI1BZ7wPjzAeZ6tEC8LKCEV/ZhlabKlFTOaZgcHWdsQ4yHvs9pfheEDMaEvuiKVpoYiTcE+u yK5ahW1Z/OopXO5QpEjl4e9x35OaqlkvIyYbQZuqDRNDDKMvXkM6AunZL0WYpeoCgb3zQAQQP uQlhY1AxKNzZEAg5f Received-SPF: pass client-ip=212.227.17.20; envelope-from=jimjoe@gmx.net; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 22:27:21 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SORBS_WEB=1.5, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 02:27:28 -0000 Eli Zaretskii writes: > Did you check the master branch? If so, perhaps your branch is not in > sync: I mistakenly left out indian.el from the original commit, but > pushed it later (3 days ago, to be correct). > > Sorry about the messup. Got it (I had checked only the 1st commit). Works fine at my end, btw. From MAILER-DAEMON Mon Jun 01 22:55:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfx5e-0003m3-Gm for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 22:55:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40928) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfx5d-0003lf-Ea for emacs-devel@gnu.org; Mon, 01 Jun 2020 22:55:45 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35053) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfx5a-0001vM-CB; Mon, 01 Jun 2020 22:55:42 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jfx5Z-0006NK-Gn; Mon, 01 Jun 2020 22:55:41 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Yuri Khan Cc: excalamus@tutanota.com, van.ly+2020@sdf.org, emacs-devel@gnu.org In-Reply-To: (message from Yuri Khan on Mon, 1 Jun 2020 12:21:03 +0700) Subject: Re: What is the most useful potential feature which Emacs lacks? Reply-To: rms@gnu.org References: Message-Id: Date: Mon, 01 Jun 2020 22:55:41 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 02:55:45 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > More importantly, a single Emacs will force identical configuration on > all collaborating users. And, instead of collaborating, they will > curse and bicker over every small convenience each of them has become > used to. If they use one single Emacs, that will happen. > > Or perhaps one Emacs could be the "server", and the others act as clients, > > maintaining mirrors of the document. > However, it then follows that each instance is going to have its own > supporting tools. So, a power user who has an elaborate setup with > LSP, flycheck, whatever, will not be able to share the advantages of > his setup with a newbie. If each has per own Emacs, that will happen. To avoid both of those problems, we need some other way, but what could it be? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Mon Jun 01 23:57:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfy3L-0004MQ-20 for mharc-emacs-devel@gnu.org; Mon, 01 Jun 2020 23:57:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51204) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfy3I-0004Ln-Pu for emacs-devel@gnu.org; Mon, 01 Jun 2020 23:57:24 -0400 Received: from newsp.red-bean.com ([45.79.25.59]:38906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfy3H-0006hk-FH; Mon, 01 Jun 2020 23:57:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=red-bean.com; s=202005newsp; h=Content-Type:MIME-Version:Message-ID: In-Reply-To:Date:Reply-To:References:Subject:Cc:To:From:Sender: Content-Transfer-Encoding:Content-ID:Content-Description; bh=W2WTdghykM5FKc1I5Q7dGSeZnB/R/eFlP1Ig0BNf96Y=; t=1591070240; x=1592279840; b=KAMMs87NZiR7meGRS+FIVB7m2DdvsxWoRoMPzetcsaCP83yrYYxRfkYsO6Rh+XYmu8PJk4BCj0 a6qR54FxDl+7RFl88XQ8smzKUTUsSYNOtH2nibfe5hFfMjnvI4ThCkzX7Hq1FMmGaGKxjPjnCIDZW egc8fB8N4a5duf9MN4FcyugsXNvH59I3GITqcyBKtNc+gq8ZzFHB+QyFenKhKTaTcvP5wzX4K9o8j ASWZrF//kdWd4tT/Q4ljBhgr1F9/fj/wFFbIpmZ+KIsxrgtdgJYi7dxZ3GuvXQ4z8bKUwK7c+7TNa 92fsZn/sIGUeAOPApJFCA7An0SNygTO7EP6xA==; Received: from 99-112-125-163.lightspeed.cicril.sbcglobal.net ([99.112.125.163]:43302 helo=floss) by newsp.red-bean.com with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jfy39-0002fi-HX; Tue, 02 Jun 2020 03:57:15 +0000 From: Karl Fogel To: Richard Stallman Cc: excalamus@tutanota.com, van.ly+2020@sdf.org, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? References: Reply-To: Karl Fogel Date: Mon, 01 Jun 2020 22:57:14 -0500 In-Reply-To: (Richard Stallman's message of "Sun, 31 May 2020 23:54:03 -0400") Message-ID: <87a71mm86d.fsf@red-bean.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=45.79.25.59; envelope-from=kfogel@red-bean.com; helo=newsp.red-bean.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/01 23:57:20 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 03:57:25 -0000 On 31 May 2020, Richard Stallman wrote: >It would be good to do that in a truly usable way. > >Emacs has had the feature of running multiple terminals at once for >over 20 years, but there are bad problems in it. To do it right, to >has to have a thread for each terminal, and they have to be able to >get in and out of the minibuffer separately. > >The other way to do this is to have separate Emacs processes that >communicate with each other. We would need to use modification hooks >to take note of changes and transmit them to the other Emacses. > >Or perhaps one Emacs could be the "server", and the others act as clients, >maintaining mirrors of the document. Having separate Emacs processes that communicate with each other is best, I think. As Yuri Khan pointed out, experienced users have customized their Emacsen in distinctive ways, such that having to edit inside someone else's Emacs setup would be annoying. Furthermore, there are privacy concerns with sharing an Emacs process. I might want to collaborate with people on one buffer while having private things in other buffers. It would be harder to reliably lock out access to those other buffers if the collaboration were happening in the same Emacs process. Meanwhile, this concern... >However, it then follows that each instance is going to have its own >supporting tools. So, a power user who has an elaborate setup with LSP, >flycheck, whatever, will not be able to share the advantages of his >setup with a newbie. ...is not a big deal IMHO. The primary goal of collaborative editing is the editing. Anyway, if the expert can see the newbie editing in real time, the expert can suggest usage or configuration improvements, which the newbie can install or learn to do in her own Emacs. That's how teaching normally happens anyway. It's not important for the newbie to have access to the expert's personal customizations, because it's rare that the most useful lesson for a newbie involves duplicating some expert's idiosyncratic personal configuraton rather than learning some built-in thing already available in Emacs. I mean, the newbie might be urged to set a few variables in her .emacs, or turn on some auto-mode associations or something, but that's normal customization (and the expert can share *her* .emacs via the same collaborative editing method, if she wants to do so). I wish I had time to work on any of the leads at https://www.emacswiki.org/emacs/CollaborativeEditing. That page lists a number of protocols and third-party free software libraries that could be used to make Emacs do inter-process collaborative editing. The client side of Floobits plugin listed there is free software and seems promising (it is apparently working -- I have no direct experience of this, as I haven't used it because the server-side is proprietary. I emailed them in early May to ask how much it would cost to get them to liberate the server side, and never received a response). 'git clone https://github.com/Floobits/floobits-emacs.git' will get you the client-side code, anyway. Best regards, -Karl From MAILER-DAEMON Tue Jun 02 01:20:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfzLN-0000qe-Hk for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 01:20:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34028) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfzLL-0000of-Ri for emacs-devel@gnu.org; Tue, 02 Jun 2020 01:20:07 -0400 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]:34317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfzLK-00066r-Qc; Tue, 02 Jun 2020 01:20:07 -0400 Received: by mail-pj1-x1044.google.com with SMTP id a45so679320pje.1; Mon, 01 Jun 2020 22:20:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=wkMh1WryOZ/JBz2QyXLrGfw7V4QUk6GdqVynA+/8EjA=; b=jckpIgzB5wmKD+ykFxh6+n3KhLQ4GdB8WEXw/jvTfX9g4+88oFkmZhs1fqG4uqB7Zk EkNpZfwWU9NQ59lmBKzd6K6Y0ZwnN0R0c+oK/n/+udZyDe5CAQqxm1PzORJnneHBzch4 SKZP1Uutj3K/2rVBpF0NXBlVBdAQDXhk1FyzVYEoPpBm9PN/Yl6yybwMu7AuZaLHkfzz zBnKpjjl9xXZpv8lI0Fe47+iHisNlVvtFy41AmY4BxVz6Ycs5yPajPGcRjXCIn4d932E NbvQV9BuNek7NRyC6uDZ3SxzrbHFeaDg2MPlsc0OPmwtAieFMphvWDQ9Tnes6TLtWHaq 8IMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=wkMh1WryOZ/JBz2QyXLrGfw7V4QUk6GdqVynA+/8EjA=; b=hqazH2cKyou5fJEUfeJ3r0jQE1dwIC+SnTRm2A35WDsOfrD6fwBJ0iC4Ni8DXiHS+l kaF9pZTjg969SDzNga4+2RgpYbiM7J9qa06XtOH1/cD0kO5CgSFreYCptejolQHxh1KC VEeYXY+0ebKLI2YcsuBVSkxmp1iMBnnvpwQUYStGPL+gNrmh0fMoGR0rPZpE/DHX6aVB GFRcn8XGJw0HERZc/cf7XmJXo5qCw9lrWNJAwtabEb9Jz98Dx292ZNcc1vdBo9VOERRy LC0ink7FI4srV3X9yXl0tSxbWhyhq/w0kwPYxlXI/nnSIFT4pibJPftXjwmZ/yGQ+MDN mQZg== X-Gm-Message-State: AOAM533tlBdIIxpqmRrVRjMzmLRNoOMR1z0sfXhFGvJiLSWf2/u7uFDs n63VanyCy6gF213hlzIWXwY= X-Google-Smtp-Source: ABdhPJzpzowOc1da/mbl7EsVG3xZVfMRxqMcWeWj8iw+rkAebEIcTsucg2Fw8N9xKAcpR563AyG1Xg== X-Received: by 2002:a17:90a:d818:: with SMTP id a24mr3376873pjv.75.1591075204355; Mon, 01 Jun 2020 22:20:04 -0700 (PDT) Received: from localhost ([23.27.206.164]) by smtp.gmail.com with ESMTPSA id t25sm1030908pgo.7.2020.06.01.22.20.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jun 2020 22:20:03 -0700 (PDT) From: Ihor Radchenko To: Karl Fogel , Richard Stallman Cc: excalamus@tutanota.com, van.ly+2020@sdf.org, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? In-Reply-To: <87a71mm86d.fsf@red-bean.com> References: <87a71mm86d.fsf@red-bean.com> Date: Tue, 02 Jun 2020 13:15:18 +0800 Message-ID: <875zca3v6h.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::1044; envelope-from=yantar92@gmail.com; helo=mail-pj1-x1044.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 05:20:08 -0000 > Having separate Emacs processes that communicate with each other is best, I think. As a bonus, it might be used as a basis for true concurrency. Best, Ihor Karl Fogel writes: > On 31 May 2020, Richard Stallman wrote: >>It would be good to do that in a truly usable way. >> >>Emacs has had the feature of running multiple terminals at once for >>over 20 years, but there are bad problems in it. To do it right, to >>has to have a thread for each terminal, and they have to be able to >>get in and out of the minibuffer separately. >> >>The other way to do this is to have separate Emacs processes that >>communicate with each other. We would need to use modification hooks >>to take note of changes and transmit them to the other Emacses. >> >>Or perhaps one Emacs could be the "server", and the others act as clients, >>maintaining mirrors of the document. > > Having separate Emacs processes that communicate with each other is best, I think. > > As Yuri Khan pointed out, experienced users have customized their Emacsen in distinctive ways, such that having to edit inside someone else's Emacs setup would be annoying. > > Furthermore, there are privacy concerns with sharing an Emacs process. I might want to collaborate with people on one buffer while having private things in other buffers. It would be harder to reliably lock out access to those other buffers if the collaboration were happening in the same Emacs process. > > Meanwhile, this concern... > >>However, it then follows that each instance is going to have its own >>supporting tools. So, a power user who has an elaborate setup with LSP, >>flycheck, whatever, will not be able to share the advantages of his >>setup with a newbie. > > ...is not a big deal IMHO. The primary goal of collaborative editing is the editing. Anyway, if the expert can see the newbie editing in real time, the expert can suggest usage or configuration improvements, which the newbie can install or learn to do in her own Emacs. That's how teaching normally happens anyway. It's not important for the newbie to have access to the expert's personal customizations, because it's rare that the most useful lesson for a newbie involves duplicating some expert's idiosyncratic personal configuraton rather than learning some built-in thing already available in Emacs. I mean, the newbie might be urged to set a few variables in her .emacs, or turn on some auto-mode associations or something, but that's normal customization (and the expert can share *her* .emacs via the same collaborative editing method, if she wants to do so). > > I wish I had time to work on any of the leads at https://www.emacswiki.org/emacs/CollaborativeEditing. That page lists a number of protocols and third-party free software libraries that could be used to make Emacs do inter-process collaborative editing. The client side of Floobits plugin listed there is free software and seems promising (it is apparently working -- I have no direct experience of this, as I haven't used it because the server-side is proprietary. I emailed them in early May to ask how much it would cost to get them to liberate the server side, and never received a response). 'git clone https://github.com/Floobits/floobits-emacs.git' will get you the client-side code, anyway. > > Best regards, > -Karl > From MAILER-DAEMON Tue Jun 02 01:58:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jfzwf-0000L8-Vs for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 01:58:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39662) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfzwe-0000Ko-HN for emacs-devel@gnu.org; Tue, 02 Jun 2020 01:58:40 -0400 Received: from ciao.gmane.io ([159.69.161.202]:59780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfzwd-0005IL-Tf for emacs-devel@gnu.org; Tue, 02 Jun 2020 01:58:40 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jfzwb-000KTR-QP for emacs-devel@gnu.org; Tue, 02 Jun 2020 07:58:37 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Lars Brinkhoff Subject: Re: Meaning behind Control-G Date: Tue, 02 Jun 2020 05:58:33 +0000 Organization: nocrew Message-ID: <7wv9ka3t6e.fsf@junk.nocrew.org> References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:tulGLvGI9qihZ0YK8oia7Z1ytk0= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 01:58:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 05:58:40 -0000 > Stefan Monnier wrote: >> FWIW, the link between C-g and "BEL" is pretty clear: it must be >> [G]raham [Bel]l That's a good one! Say, was he an early agent 007? Paul Eggert wrote: > The best person to ask exactly why C-g was assigned to BEL would be > Bob Bemer That's interesting too but the question was, why is Control-G "quit" in Emacs? From MAILER-DAEMON Tue Jun 02 07:14:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg4sF-0006P0-3c for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 07:14:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg4sE-0006Ou-6m for emacs-devel@gnu.org; Tue, 02 Jun 2020 07:14:26 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:44540) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jg4sB-0000p5-Pj for emacs-devel@gnu.org; Tue, 02 Jun 2020 07:14:25 -0400 Received: by mail-wr1-x42f.google.com with SMTP id y17so2943024wrn.11 for ; Tue, 02 Jun 2020 04:14:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=rmydD4GxN8U1KCsJ7w7kWtZAMKhd92Ea3R20FbPAXUw=; b=GO1gG/fmMJmV29b1RrD5MQI1VoB/hX2TT1IX4CLgO5jhefjdiZ4Ok6z5ISwZwi/UNG Wacg6NJRdbIMgkG1f18cji56iHYkf6My1sbsw9FpCCG1N5wCnbl/JV2b8SCPg9PgGfnc fum0B9/mE5IalsXlp6/eMYqaWHLJ7E+kYQQQeOAQjPYFXFh6r+up8NbNX4DpVC/JNEy1 7oQKbkVcRKY0ZZz2oV147linBfxQ7zl/PFBhchdM/WmXteJhKSkm9ni7FpzXIGEX+T6Z PqaQg/dWqWy0vnUUJ/tDy5dl6NvtiLBlzmTOJQdxU1qs1yXukiPWWWGNacNI75c18qDZ hhiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=rmydD4GxN8U1KCsJ7w7kWtZAMKhd92Ea3R20FbPAXUw=; b=YRyQcGBWh5Lgnuj84pYiXN3iztujW9X3U0s8iywAXVCL+NzcdcjsUqdIuX95o1e4ir hVn5RqIPrk7cXIL7Sis2FXoRcRX3wchRnIobsARMT4fOT528rIJkomttMg72uLwdVtTj X+wCK0Mg/p6VJrO24g4LPNuWiV0CFytftoG+MsECKzVC85kYTC2v9AyDrO8syNegFayb niY4Fe5DSZsX3YAEiGd0BIkAQnw4C211mnA4H5Dl/BveXN0YfR7Uu7/MXFRlY45lESZj TWYL2/7eOPXel7056y154k5oaOJ70fOFbx+yw9D811bm+gfKc8hS5G0sIxBx8AEfoc+/ zoFw== X-Gm-Message-State: AOAM533/N8Uh8PuRNBMuPQ5Kt4I0VSC77l/HLtG5T/wNQMXYbgRlsWyS JFu15RvYWreBCjF58oNSBMAWUxFDE1s= X-Google-Smtp-Source: ABdhPJw6fR2hKXb0m29ZyCYaK3eOqr4TwBDqHXErIaceqYFYsDaVosZnevrcoI8gpQ5p3nd/XMqwUQ== X-Received: by 2002:a5d:45c2:: with SMTP id b2mr24648499wrs.323.1591096461462; Tue, 02 Jun 2020 04:14:21 -0700 (PDT) Received: from krug ([2001:818:d820:9500:824a:171:15a:2213]) by smtp.gmail.com with ESMTPSA id e5sm3377683wrw.19.2020.06.02.04.14.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 04:14:20 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Andrew Schwartzmeyer Cc: emacs-devel@gnu.org Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> Date: Tue, 02 Jun 2020 12:14:18 +0100 In-Reply-To: <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> (Andrew Schwartzmeyer's message of "Sun, 31 May 2020 21:37:23 -0700") Message-ID: <877dwpn2id.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x42f.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 11:14:26 -0000 Andrew Schwartzmeyer writes: > With just =E2=80=9Cflex=E2=80=9D as the completion style, for some reason= M-x with no > input (from an emacs -q) presents the following candidates as the > first: > > icomplete-fido-delete-char > enable-theme > url-setup-privacy-info > dired-at-point > tab-bar-select-tab With no inputs to the flex completion style, it matches every candidate. > I can=E2=80=99t see a pattern in these. If I then call a command, I=E2=80= =99d > want/expect (from experience with other completion frameworks) the > next use of M-x to show it as the first candidate, but it doesn=E2=80=99t. fido-mode (and I believe icomplete-mode, whereupon fido-mode is based) do this for minibuffer-reading commands that have a "default", i.e. a result that is returned immediately if the user "forces" the completion with no input, regardless of whether the candidates are showing or not. M-x, which maps to execute-extended-command, is not one of those commands. Regarding the pattern, there is none. I believe that's the order of all symbols as returned by the all-completions when called to return a list of everything that is a command. It doesn't waste any time sorting. > Now if I use the aforementioned Orderless package and the minibuffer > hook to use it as the completion style in fido, somehow it does some > magic such that M-x (which is still bound to execute-extended-command) > now has some history sorting! (Working for switch-to-buffer too. :) You could do some sorting, but that is a a O(NlogN) operation (I think, may be wrong, N is the number of commands times the number of elements in the history). It doesn't make much sense to invest in this sorting because it is only useful if all the candidates have the same flex score. Which they do in the beginning situation, but that quickly changes as the user inputs a pattern. Alternatively, a dirty hack might be to exceptionally use the history list itself -- and not all the candidates -- when the pattern is empty. That'd probably fill in the space and wouldn't be functionally wrong. > So yeah, I=E2=80=99m off to look through Orderless to see what magic it d= oes > that sorts the candidates for M-x (without having do anything like > what smex does!). I haven't looked at Orderless yet. For the empty pattern case, it might be taking the shortcut I suggested. But for non-empty patterns iss it doing what I think it is doing? Will typing the three letter pattern "foo" match "foobarbaz" "fabrobazo" and "orzobafab"? In which order will they be returned? Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 07:46:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg5NK-000672-Ko for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 07:46:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg5NJ-00066C-WB for emacs-devel@gnu.org; Tue, 02 Jun 2020 07:46:34 -0400 Received: from mail-lj1-f182.google.com ([209.85.208.182]:37370) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jg5NI-0007Yz-UZ for emacs-devel@gnu.org; Tue, 02 Jun 2020 07:46:33 -0400 Received: by mail-lj1-f182.google.com with SMTP id e4so12190611ljn.4 for ; Tue, 02 Jun 2020 04:46:31 -0700 (PDT) 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:cc; bh=5yQDgb68DyVelPvDbdcQEhKGNFPJStiFCF3C8QQfwR8=; b=f13z9P1eY31lgkE4ns4icqPTubAeMDTJ/M0+zYlumVz22Uu5C1msiWyw7Kj/SuXAQP 8sRlpai3BYILsT3NUUlpkUcRQ8z5QSimzQ35+Fa/z6V03KV9iFYqogmpYNyC2XBFTBP7 lJcsflPQsY1luJ4u9b3ID2LmkuWUsIdxcsGohP99H9QeNw2z4zWS6pVhnBab92c7e155 C/wQEb0M0Hm5pLBuX3ej8jZ5x8U58YtDCKA57EIiZom5AkmlychLYYHRkhieme6pKbY1 TSSgD032i0P7aUY/ai78YGOc5hLfYj4rnU40yDa9nI6wFoQH6Lu5WGtM7MPV88uh+v3K bOfA== X-Gm-Message-State: AOAM5338EccTYlsEzqC95CzkzgoRodzxFtf5TXJ+bOXqe3hIy78Es+B3 sBnZk+S2SLBce+E7HSQDO/EPXGhXrB67hlAStYw= X-Google-Smtp-Source: ABdhPJxGZLx6+kSmxRNL/cNEWd0vYWbGV94uGgxGIBRgQxPgghGT4y/j6M3JNbRfhC+Uyt8+YCoRxstrp8EduhYLvMc= X-Received: by 2002:a2e:8e94:: with SMTP id z20mr11412736ljk.21.1591098390371; Tue, 02 Jun 2020 04:46:30 -0700 (PDT) MIME-Version: 1.0 References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> In-Reply-To: From: John Yates Date: Tue, 2 Jun 2020 07:46:18 -0400 Message-ID: Subject: Re: Meaning behind Control-G To: Paul Eggert Cc: Stefan Monnier , Lars Brinkhoff , Gordon Bell , Emacs developers Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=209.85.208.182; envelope-from=john.yates.sheets@gmail.com; helo=mail-lj1-f182.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 07:46:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 11:46:34 -0000 On Mon, Jun 1, 2020 at 9:52 PM Paul Eggert wrote: > (this was for the PDP-1) Ah the PDP-1... Before emacs, and before TECO I used ET (Expensive Typewriter) on the PDP-1. And played SpaceWar. And listened to it play Mozart, Bach and Gilbert & Sullivan. /john From MAILER-DAEMON Tue Jun 02 09:42:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg7BC-0005yo-J2 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 09:42:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg7BB-0005wI-1h for emacs-devel@gnu.org; Tue, 02 Jun 2020 09:42:09 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:56017) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg7B9-0006Ja-Jx; Tue, 02 Jun 2020 09:42:08 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 41F4F44128D; Tue, 2 Jun 2020 09:42:05 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A059544120A; Tue, 2 Jun 2020 09:42:03 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591105323; bh=56+o7jG8/Mn1RUG3N2dYImT66adiI+wJl6l/kRsfyUs=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=jaDMlJdoAliez8OftBc7Ij6QlLB3XUCvjzR3tx/OE0bUQdxa0tTtAf2jG8sqg6ygL b1jxsN8D4uKiXU9KbSGrmTWgDlAfaC70tltXCwEc01JAcNiGjaPiE9o1NUJdAOjfPz wGpzrJ01UBwFbLGHdU4il06dRFnO/FPahSAwVapJccvGRqZSdAJRPBwasR29xklDdC 4oM37ZaYVTiyanP+2YI0hJ8NPibJHjgnE75DkTfmxvqFb9aSOLrt+A5a9JWxFpzoj1 Bi7X0ZpTLQgkcQMm69DcSE90b3ncQBCtV9F/wRVKWFlaOhenGucZUaVn6D4inUXH2Q A6iwERhAIy0og== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 5C952120AA3; Tue, 2 Jun 2020 09:42:03 -0400 (EDT) From: Stefan Monnier To: Karl Fogel Cc: Richard Stallman , excalamus@tutanota.com, van.ly+2020@sdf.org, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: References: <87a71mm86d.fsf@red-bean.com> Date: Tue, 02 Jun 2020 09:42:02 -0400 In-Reply-To: <87a71mm86d.fsf@red-bean.com> (Karl Fogel's message of "Mon, 01 Jun 2020 22:57:14 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.064 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 09:42:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 13:42:09 -0000 > Having separate Emacs processes that communicate with each other is best, I think. It's the only option, as far as I'm concerned. Sharing an Emacs process with some other user simply doesn't work at all (as anyone who has tried it will know, I think). > As Yuri Khan pointed out, experienced users have customized their Emacsen in > distinctive ways, such that having to edit inside someone else's Emacs setup > would be annoying. Back when I tried it, those issues didn't even have time to show up. Instead we quickly bumped into issues with the "single keyboard mode", and other similar "modal" problems. Or the unexpected sharing of the kill-ring, ... It's just hopeless. > Furthermore, there are privacy concerns with sharing an Emacs process. Indeed, the first thing I did when someone tried `make-frame-on-display` to display their Emacs session on my display (back when we tried out this new feature), was `M-x shell`. Stefan From MAILER-DAEMON Tue Jun 02 09:50:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg7JT-0003Vm-IF for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 09:50:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg7JS-0003Uy-L7 for emacs-devel@gnu.org; Tue, 02 Jun 2020 09:50:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:46436) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg7JQ-00087F-OR for emacs-devel@gnu.org; Tue, 02 Jun 2020 09:50:41 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 365AC81177; Tue, 2 Jun 2020 09:50:39 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 23ADD8057E; Tue, 2 Jun 2020 09:50:37 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591105837; bh=zMgiRLAVgmqfcbwHS8xDGvFLlIyuSsaEZgG8AvLct0M=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=GWpn46SsL2ENwrK2XoRqoUDk2Zmsku7Wno+ErTLWadZuVHfecle58maoQkDnhZrHi v9PrzO7MIXdCjmbb9EE/OE9kmu67efXXkVzY17fRDc75GH6yJ5U2Jv2W7AVwq8WORm OyJkxvYUjo8k3eHaaKKzQeyIGHTh9WOxUSvaPjrfW7PWGQjQuV4Iq85DzfGgzrrype JuOSMOooDw/18eujSs5xXFaVcv6XEzOe4f37JakzkE7KXPMr7FjGRCprd227Zhvc23 HFvtg2JNBsNKXYQiHWrZNyVcy1Z9CFLbKqYEBBQYdm/fSmoJ2lqy0EAgEN9OLd9X7I zG6tCxJTC0/iw== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id DD57D120736; Tue, 2 Jun 2020 09:50:36 -0400 (EDT) From: Stefan Monnier To: Lars Brinkhoff Cc: emacs-devel@gnu.org Subject: Re: Meaning behind Control-G Message-ID: References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> <7wv9ka3t6e.fsf@junk.nocrew.org> Date: Tue, 02 Jun 2020 09:50:35 -0400 In-Reply-To: <7wv9ka3t6e.fsf@junk.nocrew.org> (Lars Brinkhoff's message of "Tue, 02 Jun 2020 05:58:33 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.001 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 09:42:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 13:50:42 -0000 >>> FWIW, the link between C-g and "BEL" is pretty clear: it must be >>> [G]raham [Bel]l > That's a good one! Say, was he an early agent 007? I could answer that question but then I'd have to kill you, Stefan From MAILER-DAEMON Tue Jun 02 11:16:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg8et-0001R4-EE for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 11:16:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg8es-0001P4-NI for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:16:54 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:62229) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg8eq-0006o4-GJ; Tue, 02 Jun 2020 11:16:53 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 89BDE100311; Tue, 2 Jun 2020 11:16:50 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 62D00100091; Tue, 2 Jun 2020 11:16:48 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591111008; bh=6vy1toW+eryGajD6OHTo9V4ZW61W6djJ0BU2zfFI2dM=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=BVGfQmGU9QUmmcxK7YT08vvtMwVZ787y/O19cJpnRmY+NAAq+pqsKmF+XfFHYkN9B taLuuE86Tyv2+KPtnlnCiLvhpL4JxBLr3IzbyuujjIySoTY42LmENd+dm/Lximm0cL xWN6tb2uKcyNWZ8xKgkwKJ++mM/msiSESaT3Ho9Pm3QwGyHalBA4F0DNSB+8GztdxV x6Cj6zU8knrE3IdkMgnxHygfPqKcwvGXz3vfZRFATVnb3DRW8Qajtbs55h0AMQbApD ZSR+hu7WJI5wPW8R5vK7XsdgimFUVUIu0psTTw3QSQLRJgVpxnpON4BoVwBPU4SR/m xlmP9oT/p+C+g== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 11849120554; Tue, 2 Jun 2020 11:16:48 -0400 (EDT) From: Stefan Monnier To: Andrea Corallo Cc: Eli Zaretskii , emacs-devel@gnu.org, Paul Eggert Subject: Re: Native compilation: the bird-eye view Message-ID: References: <83o8qocd32.fsf@gnu.org> <83ftbzdewp.fsf@gnu.org> <83blmndbpo.fsf@gnu.org> <838shrdb1c.fsf@gnu.org> <837dxbd93b.fsf@gnu.org> Date: Tue, 02 Jun 2020 11:16:46 -0400 In-Reply-To: (Andrea Corallo's message of "Tue, 19 May 2020 16:25:52 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.002 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 09:42:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 15:16:55 -0000 I see you haven't gotten much feedback about this yet, so I'll chime in. > Currently a .el file is compiled as: > /bar/foo.el => /bar/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/foo.eln > where the directory name eln-... disamiguates architecture triplet and > Emacs version/configuration. > > One option would be in case to fall back in deposing the eln in something > like: > > ~/.emacs.d/eln-cache/bar/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/foo.eln > > Both the directories would be added into the effective load path during > load if existing. This is OK but doubles the length of the effective `load-path`. Another option would be to use ~/.emacs.d/eln-cache/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/.eln where is a hash of the corresponding .el(c) file name. Similarly, instead of /bar/foo.el => /bar/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/foo.eln we would store those compiled files to a "global eln-cache" /bar/foo.el => /usr/lib/eln-cache/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/.eln So we'd have a `eln-cache-path` where to search for those files and when loading a file we'd first look for the .el file in `load-path` and once found, we'd look inside `eln-cache-path` to see if that file has a compiled version available. `eln-cache-path` would be expected to be short (2 entries in the typical case). Stefan From MAILER-DAEMON Tue Jun 02 11:35:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg8x3-0005ft-9J for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 11:35:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg8x2-0005e8-40 for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:35:40 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:35695) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jg8x0-0004Hd-Tv for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:35:39 -0400 Received: by mail-wr1-x42f.google.com with SMTP id x14so3885973wrp.2 for ; Tue, 02 Jun 2020 08:35:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:reply-to:from:date:message-id:subject:to; bh=wWO3BmJY85eWmUmuwZuTP+Ss3RuynLfHXDcn2izIRrI=; b=hQ+J7s9e/EFDDVUX9MlHDcV8yALUtWM5L2XQQPEnPnI+A1tL7HiD5BkLQmxgP0pGGJ kbBD/HThgO3vjLxRekkuW5LXX6mh7sdyZml9E5SSkX4bI+2Z1Aemj6USm7Riz1OP/gqL B4evQnJG3BStpEpEKRIDFFGUeBatWO+HsFXq+K+SewpufWxOiKxU772Dn/8AECquj/uV /N2y3UEKCQIojWj0Jx7P+AzSt9DK2fPpCNZq0SIhSzIMPND4AC4Z0Vkt5teHZQU5kYOL aovVPmM5iYLE4ddzILCZRioMpQ4oqiMuApOM2iIXIr04IdABGsVn5p7zxoOJG0vdImCU eSbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:reply-to:from:date:message-id :subject:to; bh=wWO3BmJY85eWmUmuwZuTP+Ss3RuynLfHXDcn2izIRrI=; b=SG9CfdAcZg6/86a8i4wTOfgOxI8P8U2jOgZDWoT8QIWxxTO6TIyQC3ETNAIrOJqhHu XGkhOuV7YXM/iQ1IMj7QCDKY0xCDNcSJDJSLBBGY/merEv7X6ngOt26jnlXlZG8fuPG9 RenQbl9ODl9Yk8iwgf7qe4qk9CB8zm0Z0t2antuA1k3GNpzynUdBaSCJS2q0yzP0f/uc 0X1JPbfuUXxZesj/6TDy42WX7xfHSsrpKLA/ik87jxNvtEDnarToqJEiCDJbM65ctqXv /jBHGyJaDbrgOEjP6tcukRE4GY3um6GrihEcpHP2nHGiP7DryGG9h0qB5Q7113/Zc2lN 8iug== X-Gm-Message-State: AOAM533DVKV9fzfRtbZ/usBJkaMB2P2WVET0FQSbuW6phjuyJa2snGBn BTDSunlxe2NMe1j1Jex6qP8NrJ9Gh+FaQ2+chQEFfjOboaQGvg== X-Google-Smtp-Source: ABdhPJwgf7QWn4t1fh2TSG8wQ0cIczBszeZVvr/tJEZnO/sAFV905TBBRqzoE/m8iyR5/vLCKq4W6cmpTrlZPb1Rcik= X-Received: by 2002:a5d:5449:: with SMTP id w9mr27360856wrv.106.1591112136427; Tue, 02 Jun 2020 08:35:36 -0700 (PDT) MIME-Version: 1.0 Reply-To: thibaut.verron@gmail.com From: Thibaut Verron Date: Tue, 2 Jun 2020 17:35:25 +0200 Message-ID: Subject: Precedence of criteria for file-local riskyness To: emacs-devel Content-Type: multipart/alternative; boundary="000000000000b08e9f05a71ba98b" Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=thibaut.verron@gmail.com; helo=mail-wr1-x42f.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 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 15:35:40 -0000 --000000000000b08e9f05a71ba98b Content-Type: text/plain; charset="UTF-8" Hi, According to the documentation, emacs considers that if a variable name ends with -program, then it is probably risky. I guess that it is a fair assumption in general. However, it seems that this assumption is taken even if: - the variable declaration has a non-nil :safe property - the variable declaration has a nil :risky Is there a good reason for this? Naively, I would expect that if a variable can have some safe values, then it is reasonable to give the user the choice to save other safe values (and it can always be overridden with :risky t). And that if the package author says that a variable is not risky, even with a suspicious name, then their decision takes precedence. It could also be useful if the reason why the variable is considered risky (suspicious name, explicitly marked as such, predicate not matching) could be added to the help message, for example so that users can make an educated decision whether to bypass the security or not. For the anecdote, in my specific use-case, all of this was even more surprising because emacs was repeatedly querying me whether the default value for the variable was safe. Of course adding an adequate :safe setting fixed that, and this situation probably doesn't happen often enough to be worth generalizing. MWE: Consider the following code in a file: (defun my-var-program-pred (val) (memq val '("default value"))) (defcustom my-var-program "default value" "Program to be launched to use magma (usually magma)." :type 'string :risky nil :safe 'my-var-program-pred) ;;;###autoload (put 'my-var-program 'safe-local-variable 'my-var-program-pred) ;; Local Variables: ;; my-var-program: "another value" ;; End: Eval it with or without compiling, then revert the buffer and see that the "always mark as safe" option is not proposed. Best regards, Thibaut --000000000000b08e9f05a71ba98b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

According to the documentation, emacs cons= iders that if a variable name ends with -program, then it is probably risky= .=C2=A0

I guess that it is a fair assumption in ge= neral.
However, it seems that this assumption is taken even i= f:
- the variable declaration has a non-nil :safe property=C2= =A0
- the variable declaration has a nil :risky=C2=A0
<= br>
Is there a good reason for this?

Nai= vely, I would expect that if a variable can have some safe values, then it = is reasonable to give the user the choice to save other safe values (and it= can always be overridden with :risky t). And that if the package author sa= ys that a variable is not risky, even with a suspicious name, then their de= cision takes precedence.=C2=A0

It could also be us= eful if the reason why=C2=A0the variable is considered risky (suspicious na= me, explicitly marked as such, predicate not matching) could be added to th= e help message, for example so that users can make an educated decision whe= ther to bypass the security or not.

For the anecdo= te, in my specific use-case, all of this was even more surprising because e= macs was repeatedly querying me whether the default value for the variable = was safe. Of course adding an adequate :safe setting fixed that, and this s= ituation probably doesn't happen often enough to be worth generalizing.=


MWE: Consider the following code i= n a file:

=C2=A0 =C2=A0 (defun my-var-pr= ogram-pred (val)
=C2=A0 =C2=A0 =C2=A0 (memq val '("defau= lt value")))
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0 (de= fcustom my-var-program "default value"
=C2=A0 =C2=A0 = =C2=A0 "Program to be launched to use magma (usually magma)."
=C2=A0 =C2=A0 =C2=A0 :type 'string
=C2=A0 =C2=A0 =C2= =A0 :risky nil
=C2=A0 =C2=A0 =C2=A0 :safe 'my-var-program-pre= d)
=C2=A0 =C2=A0=C2=A0
=C2=A0 =C2=A0 ;;;###autoload (pu= t 'my-var-program 'safe-local-variable 'my-var-program-pred)

=C2=A0 =C2=A0 ;; Local Variabl= es:
=C2=A0 =C2=A0 ;; my-var-program: "another value"
=C2=A0 =C2=A0 ;; End:

Eval it with or without compiling, then revert the buffer and see that t= he "always mark as safe" option is not proposed.


Best regards,
Thibaut

--000000000000b08e9f05a71ba98b-- From MAILER-DAEMON Tue Jun 02 11:38:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg8zp-0007yB-TY for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 11:38:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg8zo-0007vN-Fq for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:38:32 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:55200) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg8zn-0005Ax-4N for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:38:31 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052FcQEC120712; Tue, 2 Jun 2020 15:38:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=EB+tcLU7cZ8DjweJPLZOLMYZKJnTgRy9Li7ssqP4/u8=; b=ES4hLz+BdfipZPFV6qUmoIBNYo0L1owH6lyrGYlBTk2x6NcCwbLLX97W1KXb5x5JuBdd F8gpTveT/2een3zCP1EmonAndA97LkAgZX13Z5181ZnZhbtbmEkssgmNFy3FNUDUp15t ewkh1/ihxX4mCSqxUTh6IIWqNwUziqKGeZSIj9lLd6C4+OBYDr0ihcSC0qUIZrF5cne1 lYOCYZm/pHc0Zu2UYQN/WmCH+AUpre+VpWAudIoZ53iUdhY4Ul0p9VSYqPCog869EJ3J 02MWP6ET4co31ZwKUyhkcYUfWrST0LYMWELjHbiaUpmfXxY+KY09PlupY1oEjxOMW9Y1 fQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31bfem4ny4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 02 Jun 2020 15:38:27 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052FXvq2097682; Tue, 2 Jun 2020 15:38:21 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 31c25p98y6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 02 Jun 2020 15:38:21 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 052FcJNe018902; Tue, 2 Jun 2020 15:38:20 GMT MIME-Version: 1.0 Message-ID: Date: Tue, 2 Jun 2020 08:38:13 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Lars Brinkhoff , emacs-devel@gnu.org Subject: RE: Meaning behind Control-G References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> <7w367f6y81.fsf_-_@junk.nocrew.org> <7wv9ka3t6e.fsf@junk.nocrew.org> In-Reply-To: <7wv9ka3t6e.fsf@junk.nocrew.org> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 mlxscore=0 phishscore=0 mlxlogscore=766 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020111 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 mlxlogscore=808 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1011 impostorscore=0 adultscore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020112 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 11:38:27 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 15:38:32 -0000 > >> FWIW, the link between C-g and "BEL" is pretty clear: it must be > >> [G]raham [Bel]l >=20 > That's a good one! Say, was he an early agent 007? Only hexincidentally. From MAILER-DAEMON Tue Jun 02 11:40:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg926-0001v4-Fd for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 11:40:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54794) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg925-0001uw-TU for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:40:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46745) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jg925-00066D-A3; Tue, 02 Jun 2020 11:40:53 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:46179) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jg925-0002R1-3c; Tue, 02 Jun 2020 11:40:53 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id A968A27C005A; Tue, 2 Jun 2020 11:40:52 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 02 Jun 2020 11:40:52 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudefjedgjedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtgfesthhqredttderjeenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe ffieetveehkefhgeefueetueegudevveejgeefkedugfejfffgleefueettdfhueenucff ohhmrghinhepghhithhhuhgsrdgtohhmnecukfhppeegiedrkedtrdejhedrvdefgeenuc evlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhorhhn odhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdekieejfeekjeekgedqieefhe dvleekqdhtshguhheppehgnhhurdhorhhgsehfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p2e504bea.dip0.t-ipconnect.de [46.80.75.234]) by mail.messagingengine.com (Postfix) with ESMTPA id BAB55328005E; Tue, 2 Jun 2020 11:40:51 -0400 (EDT) From: Tassilo Horn To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Andrew Schwartzmeyer , emacs-devel@gnu.org Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> Mail-Followup-To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer , emacs-devel@gnu.org Date: Tue, 02 Jun 2020 17:40:50 +0200 In-Reply-To: <87r1uzn018.fsf@gmail.com> (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vor?= =?utf-8?Q?a=22's?= message of "Mon, 01 Jun 2020 00:43:15 +0100") Message-ID: <87lfl5fpbx.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 15:40:54 -0000 Jo=C3=A3o T=C3=A1vora writes: Hi Jo=C3=A3o, >> Users of fido-mode (like me) may want to customize the completion >> style it uses, so add a variable to allow them to do so. >> >> For instance, I really like using the =E2=80=9Cinitials=E2=80=9D style s= o =E2=80=9Cvlm=E2=80=9D >> quickly completes visual-line-mode, and then falling back to >> flex. There are also neat packages like orderless >> (https://github.com/oantolin/orderless) which add a new >> completion-style, which folks may want to plug-in and use. Anyway, it >> seems like it ought to be customizable. > > Actually, it is, just not with custom. These two lines should do the tri= ck: > > (add-hook 'icomplete-minibuffer-setup-hook 'my-flex-styles) > (defun my-flex-styles () (setq-local completion-styles '(initials flex)= )) > > Or just use a lambda, which is even shorter. I'd like to avoid a > duplicate version of completion-styles customization vars.=20=20 I guess fido-mode sets `completion-styles' locally in order to achieve ido-like defaults, right? But as a user with customized `completion-styles' and `completion-category-overrides', I wish there was a simple way to just use them with fido, too. Especially, I can't see how I could figure out the right category override. Is the completion metadata accessible in icomplete-minibuffer-setup-hook? I would like to use fido (more than icomplete) because the keybindings suite my intuition but I'd like to keep my completion styles and overrides as I have them. Bye, Tassilo From MAILER-DAEMON Tue Jun 02 11:56:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg9Gi-0000Tc-OC for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 11:56:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg9Gh-0000RC-CU for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:55:59 -0400 Received: from mail-il1-x136.google.com ([2607:f8b0:4864:20::136]:33254) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jg9Gg-0001G3-6L for emacs-devel@gnu.org; Tue, 02 Jun 2020 11:55:58 -0400 Received: by mail-il1-x136.google.com with SMTP id z2so5083096ilq.0 for ; Tue, 02 Jun 2020 08:55:57 -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=hhWf9HwNtq4NkLZi6uYkvAm1hfiWjM5xPOg/TT4lpGE=; b=bvaSi14hSk2TPBls62ev/SeznwI5On9vk2+Bp92Sru6UFd3x8VHfr1SB4gMZqWt7tf N2ArlaX/bWkxaIXvlxUc9joaDb92V1bj/EQl6AoKC5ZkmP8xTwKOoZAAHIUMfBzLxegv oThlEFWyrhCuiN1o/aVwLtXdQi225ZUOfbGdk6FkL3r61O86XUj5nvqJ3ePV88HIHqaM LB87vPFNpeaBEI+e02YRLk0wTs9+eco/FnrdEBZEcgtrDA23Lpr068gKcx7VVdzoOsWv r/IeZCt+GwSBk2cL48Ot83bF9ITkj/alqC/rfY2/Ox+Y4geJIiSZ4QkNR7oqpEOC43X/ nZPQ== 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=hhWf9HwNtq4NkLZi6uYkvAm1hfiWjM5xPOg/TT4lpGE=; b=CwcVrQ2X3e2y20S+7c5sWo5wjp8XLGIlTOcS5nLwMhEV8qIAtYwMhRVLDAy7FOppfE G9C8H7jycye2EqTUVOXqGxdEZ3jWyPo80Zy0zMH2pdUdDNvy1xljUpVqn5x034Lz5vex AcMTqfDIkqWjWk9Inpa88GAMoT4quQP0Hcx+Gxa59aLxCOAS7fLkyT3tw9hoY+SnlYOq dK7NRHbe0K6MWuFpBPJGudpdZfkg44hE8EyggteA1lrvqt83+9UPlycJpXHuAxJkalbM ou8mWt8LbWQSGO8fkBPF8RDFwZBxYqeJw7ADtrpoGVug+bdkfQAIejkr7S/Pq1PEm18U PpEw== X-Gm-Message-State: AOAM531CVqZurRfiditmJfLZf79KV5ob5j54pT8wcwNPd9X/FVVs7FXE KeNI+qViXKDrgCJxpXuTqOkPWpT/fiwviCwvqFw= X-Google-Smtp-Source: ABdhPJzmFXv+76K1mOKmoRxyHdvo9QzmZmYysjf5OTt77n0gOPrviVp0KpXkU3rr8SCSrcP+Yzw8l/2yTuDdUo7sD/s= X-Received: by 2002:a05:6e02:c:: with SMTP id h12mr72212ilr.125.1591113357018; Tue, 02 Jun 2020 08:55:57 -0700 (PDT) MIME-Version: 1.0 References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> In-Reply-To: <87lfl5fpbx.fsf@gnu.org> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Tue, 2 Jun 2020 16:55:45 +0100 Message-ID: Subject: Re: Add user customization fido-completion-styles To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer , emacs-devel Content-Type: multipart/alternative; boundary="000000000000714b1b05a71bf2a1" Received-SPF: pass client-ip=2607:f8b0:4864:20::136; envelope-from=joaotavora@gmail.com; helo=mail-il1-x136.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 15:55:59 -0000 --000000000000714b1b05a71bf2a1 Content-Type: text/plain; charset="UTF-8" On Tue, Jun 2, 2020 at 4:40 PM Tassilo Horn wrote: > > (add-hook 'icomplete-minibuffer-setup-hook 'my-flex-styles) > > (defun my-flex-styles () (setq-local completion-styles '(initials flex))) > > > > Or just use a lambda, which is even shorter. I'd like to avoid a > > duplicate version of completion-styles customization vars. > > I guess fido-mode sets `completion-styles' locally in order to achieve > ido-like defaults, right? Yes, exactly. fido-mode is broadly "choose these nice icomplete-mode settings that make it fake ido-mode". > But as a user with customized > `completion-styles' and `completion-category-overrides', I wish there > was a simple way to just use them with fido, too. You can try icomplete-mode directly if you don't like fido-mode's. fido-mode is a small customization layer on top of it that makes some choices for you. > Especially, I can't > see how I could figure out the right category override. Is the > completion metadata accessible in icomplete-minibuffer-setup-hook? I don't know what you mean. Exactly what are you trying do to? Anyway, I'm reasonably confident you can set completion-category-overrides there. > I would like to use fido (more than icomplete) because the keybindings > suite my intuition but I'd like to keep my completion styles and > overrides as I have them. If (some of the keybindings) are the only thing that interest you, you can bind them to icomplete-minibuffer-map. The only thing you can't do this way is this bit of behaviour hidden in `icomplete--sorted-completions' ((and fido-mode (not minibuffer-default) (eq (icomplete--category) 'file)) ;; `fido-mode' has some extra file-sorting ;; semantics even if there isn't a default, ;; which is to bubble "./" to the top if it ;; exists. This makes M-x dired RET RET go to ;; the directory of current file, which is ;; what vanilla Emacs and `ido-mode' both do. `(,(lambda (comp) (string= "./" comp)))) But _that_ could be controlled by an icomplete variable or some other category technique. Also, you can argue for some of the defaults in icomplete to be changed, slowly. --000000000000714b1b05a71bf2a1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Jun 2, 2020 at 4:40 PM Tassilo Horn <tsdh@gnu.org> wrote:

> > =C2=A0 (= add-hook 'icomplete-minibuffer-setup-hook 'my-flex-styles)
> = > =C2=A0 (defun my-flex-styles () (setq-local completion-styles '(in= itials flex)))
> >
> > Or just use a lambda, which is eve= n shorter.=C2=A0 I'd like to avoid a
> > duplicate version of = completion-styles customization vars.
>
> I guess fido-mode set= s `completion-styles' locally in order to achieve
> ido-like defa= ults, right?

Yes, exactly. fido-mode is broadly "choose th= ese nice icomplete-mode
settings that make it fake ido-mode"= .

> But as a user with customized
> `completion-style= s' and `completion-category-overrides', I wish there
> was a = simple way to just use them with fido, too.

You can try icomplete-mo= de directly if you don't like fido-mode's.
fido-mode is a small = customization layer on top of it that makes
some choices for you.
> Especially, I can't
> see how I could figure out the right = category override.=C2=A0 Is the
> completion metadata accessible in i= complete-minibuffer-setup-hook?

I don't know what you mean.= =C2=A0 Exactly what are you trying do to?
Anyway, I'm reasona= bly confident you can set
completion-category-overrides ther= e.

> I would like to use fido (more than icomplete) because= the keybindings
> suite my intuition but I'd like to keep my com= pletion styles and
> overrides as I have them.

If (some of the= keybindings) are the only thing that interest you,
you can bind them to= icomplete-minibuffer-map.=C2=A0 The only thing
you can't do this wa= y is this bit of behaviour hidden in
`icomplete--sorted-completions'=

((and fido-mode
=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 =C2=A0(n= ot minibuffer-default)
=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 =C2=A0(eq (icomplete--cate= gory) 'file))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; `fido-mode' has some extra file-sort= ing
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ;; semantics even if there isn't a default,
=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 ;; which is to bubble "./" to the top if it
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; ex= ists.=C2=A0 This makes M-x dired RET RET go to
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; the director= y of current file, which is
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; what vanilla Emacs and `ido-mo= de' both do.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 `(,(lambda (comp)
=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 = =C2=A0(string=3D "./" comp))))

But _that= _ could be controlled by an icomplete variable or some
other cat= egory technique.

Also, you can argue for some of t= he defaults in icomplete to be
changed, slowly.
--000000000000714b1b05a71bf2a1-- From MAILER-DAEMON Tue Jun 02 12:14:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jg9Z2-00084E-75 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 12:14:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg9Z0-00080P-Je for emacs-devel@gnu.org; Tue, 02 Jun 2020 12:14:54 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:49554) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jg9Yy-0005WU-QK for emacs-devel@gnu.org; Tue, 02 Jun 2020 12:14:53 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052G27FY148658; Tue, 2 Jun 2020 16:14:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=itbg9XymvbZlF5IqXLvs+PPVHghapSwmpIfFigJiqB4=; b=aJIp4DOYcFHVIwRIg/Nv734CEhNo0OwmM8JkS4123lpmAxzzSh4nSIGNd9EpRo2pfZMX BOSkgB98N2wejH6rSU4s+5aMg4c8eE/dzK4aGonMNSeEMoGKsWp75pmPHe9EO5l+RQAG B4ihOeQvFOoK53hsg1QWx1EcTUuHUUDnOLcS5Cxy/X9RQmeJdLhQrKX+zMvvynIoomxQ Sh+viEjcLv8qF/dRaOmLOcw23fPwLn+kNv1FDLn8wj8GeDCeDGZlR2az5cVYuxUhDhj8 65gusTgPqsHEzbhPuo0JTF11ITzBCSF4iOMKA7pwuZjQ7sgcdbcD+A6eDOnqYnW1Fpkp aA== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2130.oracle.com with ESMTP id 31bewqvypa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 02 Jun 2020 16:14:50 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052G3Q6o189031; Tue, 2 Jun 2020 16:14:49 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3030.oracle.com with ESMTP id 31c12pfvfk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 02 Jun 2020 16:14:49 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 052GEmUe023320; Tue, 2 Jun 2020 16:14:49 GMT MIME-Version: 1.0 Message-ID: <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> Date: Tue, 2 Jun 2020 09:14:42 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer Cc: emacs-devel@gnu.org Subject: RE: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> In-Reply-To: <877dwpn2id.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 malwarescore=0 adultscore=0 suspectscore=0 spamscore=0 bulkscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020115 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 bulkscore=0 phishscore=0 suspectscore=0 impostorscore=0 cotscore=-2147483648 lowpriorityscore=0 mlxscore=0 adultscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020115 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 12:14:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 16:14:54 -0000 FWIW: If you choose the sort order "by flx score" in Icicles, and if you type no pattern to match in the minibuffer, then the candidates (e.g. commands, for `M-x') are sorted by `string-lessp' (but respecting `completion-ignore-case'). In general, the predefined sort orders in Icicles do something reasonable when the main sorting test says two candidates are incomparable. Some such orders have more than one fallback level, i.e., more than one kind of sorting, the 2nd taking over when the 1st can't compare, the 3rd taking over when the 2nd can't compare, etc. Often the (last) fallback is alphabetical order. For example, for flx-score sorting, the test predicate is this: (defun icicle-flx-score-greater-p (s1 s2) "Non-nil means the `flx-score' of S1 is greater than that of S2. That is, the cars of the `flx-score' values are compared. If `flx-score' returns nil for either argument, then they are compared using `icicle-case-string-less-p'. This function requires library `flx.el'." (let* ((input (if (and (icicle-file-name-input-p) =20 insert-default-directory) (file-name-nondirectory icicle-current-input) icicle-current-input)) (score1 (flx-score s1 input)) (score2 (flx-score s2 input))) (if (and score1 score2) (> (car score1) (car score2)) (icicle-case-string-less-p s1 s2)))) I don't know why Emacs shouldn't act similarly. As for performance, for `M-x' there certainly is no problem. `M-x' with no input pattern to match shows the 6000-some candidates immediately. https://www.emacswiki.org/emacs/Icicles_-_Sorting_Candidates ___ FWIW2: Icicles extends the idea of combining predicates in the definition of a single sort predicate, in two ways: 1. Interactively, you can apply multiple sort orders, sequentially. 2. A sort comparer can itself be defined as a list ((PRED...) FINAL-PRED), where each PRED and FINAL-PRED are binary predicates. #1 is described here: https://www.emacswiki.org/emacs/Icicles_-_Sorting_Candidates#AddingASavedSo= rtOrder In #2, each PRED returns true, false, or undecided, where undecided means that the next PRED takes over deciding, and so on. FINAL-PRED just returns true or false. (True is `(t)', false is `(nil)', and undecided is nil.) This way of combining yes-no-maybe predicates is described here: https://www.emacswiki.org/emacs/ApplesAndOranges ___ (Note: Icicles uses the flx-scoring provided by 3rd-party library `flx.el', from Le Wang (if loaded), not the flx completing style you recently added to vanilla Emacs. https://github.com/lewang/flx) From MAILER-DAEMON Tue Jun 02 12:48:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgA5j-00075r-Qr for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 12:48:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgA5i-00074s-QU for emacs-devel@gnu.org; Tue, 02 Jun 2020 12:48:42 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48070) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgA5i-0005L8-9p; Tue, 02 Jun 2020 12:48:42 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:47377) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jgA5h-0001uj-5I; Tue, 02 Jun 2020 12:48:42 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id C2DBE27C0054; Tue, 2 Jun 2020 12:48:40 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 02 Jun 2020 12:48:40 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudefjedgjeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtgfesthhqredttderjeenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dvueefkeeuleekheffffdtieduvdfhffdtgfekhfejueejudehudekveefvedvhfenucfk phepgeeirdektddrjeehrddvfeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepthhhohhrnhdomhgvshhmthhprghuthhhphgvrhhsohhnrghl ihhthidqkeeijeefkeejkeegqdeifeehvdelkedqthhsughhpeepghhnuhdrohhrghesfh grshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p2e504bea.dip0.t-ipconnect.de [46.80.75.234]) by mail.messagingengine.com (Postfix) with ESMTPA id A0710328005E; Tue, 2 Jun 2020 12:47:53 -0400 (EDT) From: Tassilo Horn To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Andrew Schwartzmeyer , emacs-devel Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> Mail-Followup-To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer , emacs-devel Date: Tue, 02 Jun 2020 18:47:01 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Tue, 2 Jun 2020 16:55:45 +0100") Message-ID: <87h7vtfm9m.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 16:48:43 -0000 Jo=C3=A3o T=C3=A1vora writes: > On Tue, Jun 2, 2020 at 4:40 PM Tassilo Horn wrote: > >> > (add-hook 'icomplete-minibuffer-setup-hook 'my-flex-styles) >> > (defun my-flex-styles () (setq-local completion-styles '(initials > flex))) >> > >> > Or just use a lambda, which is even shorter. I'd like to avoid a >> > duplicate version of completion-styles customization vars. >> >> I guess fido-mode sets `completion-styles' locally in order to achieve >> ido-like defaults, right? > > Yes, exactly. fido-mode is broadly "choose these nice icomplete-mode > settings that make it fake ido-mode". > >> But as a user with customized `completion-styles' and >> `completion-category-overrides', I wish there was a simple way to >> just use them with fido, too. > > You can try icomplete-mode directly if you don't like fido-mode's. > fido-mode is a small customization layer on top of it that makes some > choices for you. Yes, I know. And except for the change in completion-styles, I like it. Not so much for plain icomplete-mode where the fido keybindings are missing. >> Especially, I can't see how I could figure out the right category >> override. Is the completion metadata accessible in >> icomplete-minibuffer-setup-hook? > > I don't know what you mean. Exactly what are you trying do to? > Anyway, I'm reasonably confident you can set > completion-category-overrides there. If I understand the docs correctly, `completion-category-overrides' override the normal `completion-styles' on a category basis. I have these customizations: --8<---------------cut here---------------start------------->8--- (setq completion-styles '(basic partial-completion substring flex) completion-category-overrides '((ecomplete (styles basic partial-completion substring)) (buffer (styles basic partial-completion substring)) (unicode-name (styles basic partial-completion flex)) (info-menu (styles basic partial-completion flex)) (project-file (styles basic partial-completion substring initials)) (file (styles basic partial-completion substring initials)) ;; TODO: There's actually no command category (yet). (command (styles basic partial-completion substring initials)))) --8<---------------cut here---------------end--------------->8--- So when completing buffers, completion-styles will be (basic partial-completion substring) whereas when completing files it'll be (basic partial-completion substring initials) and when not completing something in the overrides, it'll go with the normal customized completion-styles of (basic partial-completion substring flex). I don't know when this happens, but it might be that it is before `icomplete-minibuffer-setup-hook' is called and then setting `completion-category-overrides' wouldn't have an effect. I'll test... Thanks, Tassilo From MAILER-DAEMON Tue Jun 02 13:03:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAKL-0001Mu-St for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:03:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAKK-0001Is-8Z for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:03:48 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:39021) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgAKJ-0007dB-2D for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:03:47 -0400 Received: by mail-wr1-x42f.google.com with SMTP id t18so4152240wru.6 for ; Tue, 02 Jun 2020 10:03:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=vxmt7zEg2Cpep3xZnc17TLxChAPx1+QiJu2NOpqIidw=; b=Wxos1dFw5xOBGmbGRssPjx2YX5r4EnsJSy/mMY7qSofKs5xRxCjNDmp0FZs+En2WTW UYZ7PBsIrDzbGLLWhJPFbxxlMYEocmuz7BCnwPGkHEakzU5Vgz4bk0YzTdHY+0skgfUc XP7EoNnmQIxDnR9sQemRBfwuzym9bLOib9P2VHKym/dMGBZh48TNWPoACFvua94VUmzD V4GB3x+eQWDYyKkkKiTUD+cNvZmyTS7DSJ27Y7iugueB4rZWONsIU6SKxDfTpSgznT6s sxbvjBxFZ8JQ8UZkiGIshlNZicoNwbyVRFv/6IU2gWdynnKgKfdSyvp8pJxnN509zbn9 fy2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=vxmt7zEg2Cpep3xZnc17TLxChAPx1+QiJu2NOpqIidw=; b=dWixx69Q0dweQSpybrdiVcRdpLkc+TceEc4262CW1ZWJhdoBQY2xt3JMWgr/o7wBuU ieq+SpLv0QPhHOhtPXI6Ei/8/VNwds4azsVfxQs/miYhe4k4CLWFeLcgukx0zV2sutfX HQNyvTAh/EAi7sNjlFoEjPe4PGULxxHefNsEkL2fVF0oyAXk2abJC9Che2/bHP7RvQBm wMQbUfTRCTAPmrJwnIFpcEhC1i+OCGXotKD0ZOZzyofbgjVbT/IyXsMomFIchOqrZxjw HmE4AkDhB4Vlknl6DNRkdoBohN5cghOcnwKcHzIz+iVuH2ZzdWpOuvkvdCiv1rPcXuFV 86/w== X-Gm-Message-State: AOAM531axE3hrPtk6MP20ju/qxyTY2dgg1ep9NB6NHKUKQia3qRh2sZ4 eqaen8EpVrIdvt6uQmdxtBGOPNru+BQ= X-Google-Smtp-Source: ABdhPJwJocsmYaQUi4xnf7bMt6rRXCvjQIDbqebIm/FFodk5SpgFuRYUpf+FE2EgCnYj5v7Brs6npA== X-Received: by 2002:adf:f882:: with SMTP id u2mr29041831wrp.40.1591117424596; Tue, 02 Jun 2020 10:03:44 -0700 (PDT) Received: from krug (89-180-144-241.net.novis.pt. [89.180.144.241]) by smtp.gmail.com with ESMTPSA id j11sm4613723wru.69.2020.06.02.10.03.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 10:03:43 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Andrew Schwartzmeyer Cc: emacs-devel Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> <87h7vtfm9m.fsf@gnu.org> Date: Tue, 02 Jun 2020 18:03:41 +0100 In-Reply-To: <87h7vtfm9m.fsf@gnu.org> (Tassilo Horn's message of "Tue, 02 Jun 2020 18:47:01 +0200") Message-ID: <87wo4pl7rm.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x42f.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:03:48 -0000 Tassilo Horn writes: >> You can try icomplete-mode directly if you don't like fido-mode's. >> fido-mode is a small customization layer on top of it that makes some >> choices for you. > > Yes, I know. And except for the change in completion-styles, I like it. > Not so much for plain icomplete-mode where the fido keybindings are > missing. You can grab all the bindings of fido-mode in one swoop like this, I think you can put this: (use-local-map (make-composed-keymap icomplete-fido-mode-map (current-local-map))) Somewhere in your icomplete-minibuffer-setup-hook. > I don't know when this happens, but it might be that it is before > `icomplete-minibuffer-setup-hook' is called and then setting > `completion-category-overrides' wouldn't have an effect. I'll test... If it helps, here is a list of the variables that fido-mode sets for you. (setq-local icomplete-tidy-shadowed-file-names t icomplete-show-matches-on-no-input t icomplete-hide-common-prefix nil completion-styles '(flex) completion-flex-nospace nil completion-category-defaults nil) It seems to leave `completion-category-overrides' alone, so you should be able to use to have the last word. If completion-category-overrides were to allow `t` entries, or some kind of catch-all, then it would be the "ultimate" last word. This would make sense to me, and fido-mode would commit to not touching that variable explicitly. I think this would make an(other) elegant solution for this question, don't you think? Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 13:05:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgALk-00040B-Es for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:05:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40238) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgALi-0003uq-CX for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:05:14 -0400 Received: from aibo.runbox.com ([91.220.196.211]:58590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgALg-0007mm-50 for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:05:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:Date:References:Subject:Cc:To:From; bh=pKZFB7KwYrCdaR52tr/FLCDgs9ZGJGf1qLWhN6OZFXk=; b=KlXa2loyeEnjme5uXZofiW1ndO bym2+GyPlWnYrQj9e4mwp3Ke77/oT2HdwBnm+PUDQFyBiRt43geLuy0baAe4qmCXNNB5w7vWdsfTe F1V5XyqkiNtQZM8nUjPzz7XtASknC/1FqCyn2DxknKxRVaaqJcUtlpFd0MGV+kua6CBzl5xrFJh2T h3xLn+zNnXnk7a4WaV2cqL+HpFPLSOdR0DHi93yaibeqBaPlWkuQQyE8cQl9BOz53HW8J85Q0uylh kWxdnkHG874eTKuwigdv4u+c9HvG+SYm0cwOLv3XSLGw4FnkUjgchkZADwC3u4PTfHWW5yWSS3K0v crv/dBAw==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgALZ-0006rv-8Z; Tue, 02 Jun 2020 19:05:05 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgALM-0004Zp-Ag; Tue, 02 Jun 2020 19:04:52 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: "Philip K." Cc: dgutov@yandex.ru, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects References: <87wo4tn2ap.fsf@warpmail.net> Date: Tue, 02 Jun 2020 19:04:52 +0200 Message-ID: <87367dxutn.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 13:05:07 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:05:14 -0000 "Philip K." writes: > Simen Heggest=C3=B8yl writes: > >> Hm, won't that be a problem when the user wants to use the lower and >> upper variants of the same character for different commands? That's done >> extensively in Org Mode's Export Dispatcher for instance. The bracketed >> layout approach has natural support for it however: >> >> [f] Find foo [F] Find bar > > Is that intended? Org uses this for things like generate HTML in a file > or in a buffer, where the lowercase variant is what's more probable > (since you don't need to press the extra shift key). Yes, Org uses it for things that are similar to each other, like the "Export to HTML" options: [h] As a HTML file [H] As a HTML buffer And Magit uses it for different log listing styles for instance: [l] Short [L] Long > I can't think of examples where something like this would be > interesting when opening a project? Or what would "foo" and "bar" be > in your example? I didn't have anything specific in mind, just thinking why remove the possibility if the user wishes to do so? Maybe "e" and "E" could be used to launch different shells in the project root, for instance: [e] Shell [E] Eshell Or having string search and regexp search commands separately: [s] Find string [S] Find regexp > I would have prefered read-multiple-choice, because the function is > more extensive than "just" a key-reading-loop, and seems to catch more > edge-cases. Me too. The only gripe I (and Dmitry) had with it was that we preferred the layout of the current interface. For me it's because I find it hard to distinguish the bold letters used by read-multiple-choice. Would it be an option to change read-multiple-choice's prompt to use brackets to distinguish key choices instead? If more people prefer it, making it the default, or if not, at least adding it as an option? In that case I wouldn't hesitate to change project-switch-project to use read-multiple-choice. -- Simen From MAILER-DAEMON Tue Jun 02 13:10:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAQc-00057b-Q2 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:10:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAQb-00054h-Fr for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:10:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48544) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgAQb-0000Pl-1y; Tue, 02 Jun 2020 13:10:17 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:51557) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jgAQZ-0004dq-Qz; Tue, 02 Jun 2020 13:10:16 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 4597127C0054; Tue, 2 Jun 2020 13:10:15 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 02 Jun 2020 13:10:15 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudefjedgkeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhi lhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnheptd elieffkeeuffduueeffefhiedtjeeutdeuveegfffgtdejleekheegkeetkeevnecukfhp peegiedrkedtrdejhedrvdefgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhi thihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgsehfrg hsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p2e504bea.dip0.t-ipconnect.de [46.80.75.234]) by mail.messagingengine.com (Postfix) with ESMTPA id 6CB07328005E; Tue, 2 Jun 2020 13:10:14 -0400 (EDT) From: Tassilo Horn To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Andrew Schwartzmeyer , emacs-devel Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> <87h7vtfm9m.fsf@gnu.org> Mail-Followup-To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer , emacs-devel Date: Tue, 02 Jun 2020 19:10:13 +0200 In-Reply-To: <87h7vtfm9m.fsf@gnu.org> (Tassilo Horn's message of "Tue, 02 Jun 2020 18:47:01 +0200") Message-ID: <87d06hfl6y.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:10:17 -0000 Hi again, > I don't know when this happens, but it might be that it is before > `icomplete-minibuffer-setup-hook' is called and then setting > `completion-category-overrides' wouldn't have an effect. I'll test... Ok, nothing to worry, it seems to work with those configs. --8<---------------cut here---------------start------------->8--- (defvar th/completion-styles '(basic partial-completion substring flex)) (defvar th/completion-category-overrides '((ecomplete (styles basic partial-completion substring)) (buffer (styles basic partial-completion substring)) (unicode-name (styles basic partial-completion flex)) (info-menu (styles basic partial-completion flex)) (project-file (styles basic partial-completion substring initials)) (file (styles basic partial-completion substring initials)) ;; TODO: There's actually no command category (yet). (command (styles basic partial-completion substring initials)))) (setq read-buffer-completion-ignore-case t read-file-name-completion-ignore-case t completion-cycle-threshold 3 completion-styles th/completion-styles completion-category-overrides th/completion-category-overrides) (defun th/icomplete-minibuffer-setup-init () (when fido-mode (setq-local completion-styles th/completion-styles) (setq-local completion-category-overrides th/completion-category-overrides))) (add-hook 'icomplete-minibuffer-setup-hook #'th/icomplete-minibuffer-setup-init) (fido-mode) --8<---------------cut here---------------end--------------->8--- From MAILER-DAEMON Tue Jun 02 13:14:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAUg-0001XM-U3 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:14:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAUf-0001Ws-5j for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:14:29 -0400 Received: from aibo.runbox.com ([91.220.196.211]:59458) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgAUd-00019Q-6B for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:14:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=HXZCustOv7Y17jcRUoELNijrefVRzL86G6i4m7/mpus=; b=TsQvqGgmPLyFk0sLA1gukae5lT Yjkm7uJm+CV8slw4zNjwxe6mOD0bPbX+Vv0rqyPEEtmkfuIKW2y5Pwvhx3466SlxD2K3GV2UTcgjU Igc11dmeLK8OveE+Hev1Lh/QbLwQzr8CFJtaMrCGvQNPphVGfZJGcT2DtNCQT9Q6higoHPhZmZNHa tutVWdJanopyl7RUaG1iqTkFoPPC3qb+DJvZGAXpHKzIYVHDmFO2RqiChtBB/SR7WDnIJBTaAPbDv RfqB9IKplzjWxCrBpKY/LmeASMOnDbKwBlT4tKt0R9/t2DeYbepsszn+ehu22wi3qLOs0ZsbWvGdE Wg7m/w+Q==; Received: from [10.9.9.72] (helo=submission01.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgAUV-0007p1-OW; Tue, 02 Jun 2020 19:14:19 +0200 Received: by submission01.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgAUT-0007lU-Hs; Tue, 02 Jun 2020 19:14:17 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Dmitry Gutov Cc: "Philip K." , "Basil L. Contovounesios" , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> Date: Tue, 02 Jun 2020 19:14:17 +0200 In-Reply-To: (Dmitry Gutov's message of "Sat, 30 May 2020 15:38:40 +0300") Message-ID: <87zh9l2xw6.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 13:05:07 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:14:29 -0000 Dmitry Gutov writes: > On 29.05.2020 18:54, Simen Heggest=C3=B8yl wrote: >>> In fact, couldn't project--ensure-file-exists be eliminated altogether? >>> If the file doesn't exist, just don't set project--list, or set it to >>> nil. >> Sounds good to me. How about the attached? > > Looks good to me. Installed, thanks. -- Simen From MAILER-DAEMON Tue Jun 02 13:21:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAbX-0007n1-J8 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:21:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAbW-0007mL-A4 for Emacs-devel@gnu.org; Tue, 02 Jun 2020 13:21:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48869) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgAbV-0002k2-Lq; Tue, 02 Jun 2020 13:21:33 -0400 Received: from [176.228.60.248] (port=4716 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgAbO-00035u-3G; Tue, 02 Jun 2020 13:21:26 -0400 Date: Tue, 02 Jun 2020 20:21:08 +0300 Message-Id: <83k10pcrjv.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org In-Reply-To: <875zcas71l.fsf@gnu.org> (message from Bastien on Tue, 02 Jun 2020 01:25:10 +0200) Subject: Re: GNU ELPA package discoverability References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <875zcas71l.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:21:34 -0000 > From: Bastien > Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org > Date: Tue, 02 Jun 2020 01:25:10 +0200 > > Tools > Install Emacs packages I think "Install Add-On Packages" is better. > Add new package* sources > > * Not sure whether this should be package or packages. What would this item do? Variable customization is not a good candidate for a menu item. From MAILER-DAEMON Tue Jun 02 13:30:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAjo-0003ob-4y for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:30:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43826) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAjm-0003o2-4Q for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:30:06 -0400 Received: from aibo.runbox.com ([91.220.196.211]:60450) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgAjk-00055q-4h for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:30:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=deJxi7q/fAoU8WxO+j1HCevoxwxF7YftZ+1gzJWjZDM=; b=KJsesUEgDa1+icVmM/pRKXL6+L s/VKP9h3MzsqDoZYROsVjXdaenb5tSaWnNELLbisefskRf84m7kXZHXnfgWjzCITLYa8PmUudW4oA 8M1miRh/a81CJxOcEhQ1LB4/SMqqvr4B3UAtBFQBzBDLvHvWVVMCg0o1TEuFxwt3dKh2HGnexeNl2 dGIwAX/sW/8n+9PsB1B3b6nMe+7UsVRumV751bDld0wCkhmR8su0lAWUGcNA4ILfhrMQw1MgbssnA iLBSj8z5JCDINaMDErjiKhuoxfsKA67+/KtkSYWHd7Zu33tDZxhhlnAQRdSlCq3seO8qR8VakSpvo ivrl5Ecg==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgAjh-0000k8-LO; Tue, 02 Jun 2020 19:30:01 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgAjS-0006sY-8Z; Tue, 02 Jun 2020 19:29:46 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: =?utf-8?Q?K=C3=A9vin?= Le Gouguec Cc: Dmitry Gutov , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87h7vy9wrv.fsf@gmail.com> <81be7027-4079-0de6-b4dc-d669cd4c6f71@yandex.ru> <7b8fe2bf-3d1e-65f8-0fdb-111bd39490b5@yandex.ru> <5ed1f7ae.1c69fb81.9b99b.4ce7SMTPIN_ADDED_BROKEN@mx.google.com> <87eer161c8.fsf@gmail.com> Date: Tue, 02 Jun 2020 19:29:45 +0200 In-Reply-To: <87eer161c8.fsf@gmail.com> (=?utf-8?Q?=22K=C3=A9vin?= Le Gouguec"'s message of "Sat, 30 May 2020 14:42:31 +0200") Message-ID: <87v9k92x6e.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 13:05:07 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:30:06 -0000 K=C3=A9vin Le Gouguec writes: > Simen Heggest=C3=B8yl writes: > >> Maybe a simple solution could be to only write to the file when the >> addition caused the project list to change? I think it's a good change >> regardless, but is it enough to fix your issue, K=C3=A9vin? > > It is, thank you! Good, I've pushed the fix to master. Thanks! -- Simen From MAILER-DAEMON Tue Jun 02 13:43:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgAx3-0003wF-8C for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgAx1-0003vx-IJ for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:43:47 -0400 Received: from aibo.runbox.com ([91.220.196.211]:33158) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgAwz-0007Bs-Rb for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:43:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Type:MIME-Version:Message-ID:Date:References:Subject: Cc:To:From; bh=WJ2YUS4sfNecIiOUNqXmNELxe1f7W/Xz68V+NWI0nAY=; b=Y4jvN9Wd4CpjmA b+//vAwXVfxhrCd5VUyHbGGYOuj+/AcGpACiQ2rVdUmihc6wZHHAyid6VgiPk7k7YhXS3O2mxoEFe DXSioDRart7ef07oZVdBtJP07exIyUHqm7tuIfzBfSCcFHA6WIpRx+H9iWLAYC2WyV1Dz6lnF9Svu 5GhOP+m1HbgtsLgGkZtq9jNBbx0OGybXiYE/jA1qgzeedY7Be+k/y1Iq85mTC/atwdoSVvV5p/ATI pi7Bs6aVTsLElm3+2PjwP4DQ+vYSPJdEOPI2sc56bYZKe41E1B4v9/WBF14YspNx6jmIq5LlyNrYt F6cqZnZuY1gXbDGQuveA==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgAwv-00025b-G3; Tue, 02 Jun 2020 19:43:41 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgAwm-0008JT-Az; Tue, 02 Jun 2020 19:43:32 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Juri Linkov Cc: Dmitry Gutov , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> Date: Tue, 02 Jun 2020 19:43:32 +0200 Message-ID: <87a71l2wjf.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 13:05:07 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:43:47 -0000 Juri Linkov writes: > Please use a more future-proof format like is used by saveplace.el, > for example, in ~/.emacs.d/places it's saved as: > > ;;; -*- coding: utf-8; mode: lisp-data -*- > (("/tmp/" > (dired-filename . "/tmp/file")) > > that allows adding more metadata in future. Looks good to me. If Dmitry agrees I can start working on changing the format. Maybe it should be renamed from "project-list" to simply "projects" too while we're at it, to match similar files, like "places", "bookmarks", and so on? -- Simen From MAILER-DAEMON Tue Jun 02 13:51:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgB4c-0000p1-E1 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:51:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46676) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgB4a-0000os-DP for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:51:36 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:53404) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgB4Z-00006W-BY for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:51:36 -0400 Received: by mail-wm1-x341.google.com with SMTP id l26so3779735wme.3 for ; Tue, 02 Jun 2020 10:51:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=BQt5V4ad3abokAF+HUi1M6zdeuWtLm21YaNgdoX8PjE=; b=fo5FFcUt2iz42IQgXrc8uxec4BO4GV/Wee+7JQXpBM+CzYvv1rRgO3hI+q0OkUdHY8 KOzu6rNhlNnexW6Z7GLLgf5Xi/mnW6ppmdCvlIPqJj83DNr0rs8JUhd3fdjAO77hv6RG 3JUX0tvYtJGMobokO6eE9FbAD5L36galzvOzXrH9CiVZ2RQSeTEnc7Ipmmqw4xnA7FRu /JIKEGUYfyuhw7zIqywNvg5+lEWkAQqnah7+IB+mJMiYaI5ct8hmhwLif1yLFsUweE0U qzP94WC4UgpCMyngaafVPeBF1EseAdv+A0em6J3LmOkJ+u3hDhGievIhTZXif1I//CEb e0wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=BQt5V4ad3abokAF+HUi1M6zdeuWtLm21YaNgdoX8PjE=; b=MbdNhN16AaU2R6dKfJjSnzKEl9Tj6bHPUvSCbXhOt+f/V2KgfWKB1p1hEDDNuM9TTG ZZoSUTzsIYV+Do7RYhKrtYa+TCpa+dWdASdAoeTKDyrESO+FI2WrrzNMPzcqMcExo6j/ 2st0gTEbmu7SkAG5X3LFJQCNUs6kwDRGPT0nKO6c/uYEaB+M30aAHRWeGHfdvlWExRQW fIK+ok4Z13POXmYClHRmN0ArW/O5lubMNQFzYZt9aNH6mkltym9PHdJSuH9hGg7ESaON eSqBsx49FOIcWLew3JTHSpbEFNb0Z7jZBo6ucEm8VsvKaowMr6QOG92x5dDu3m+JOkSI ttJw== X-Gm-Message-State: AOAM5313ncBlUYVCzvKWvgYBih8qlUM+lklRkiQxQp3myJrUJNOcYCPo FjGUSh2ysdBw1ydXxVh2ZH3+GKbKT8I= X-Google-Smtp-Source: ABdhPJy1BI7WrjFyP3pK14varDvOHnMW/P5InJxjB9+seorjyIu3rAgUH5oPnXom0ZLxBqzIHfJQEQ== X-Received: by 2002:a7b:c5d4:: with SMTP id n20mr5426747wmk.106.1591120293201; Tue, 02 Jun 2020 10:51:33 -0700 (PDT) Received: from krug (89-180-144-241.net.novis.pt. [89.180.144.241]) by smtp.gmail.com with ESMTPSA id d17sm5549381wrg.75.2020.06.02.10.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 10:51:32 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Drew Adams Cc: Andrew Schwartzmeyer , emacs-devel@gnu.org Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> Date: Tue, 02 Jun 2020 18:51:31 +0100 In-Reply-To: <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> (Drew Adams's message of "Tue, 2 Jun 2020 09:14:42 -0700 (PDT)") Message-ID: <87sgfdl5jw.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x341.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:51:36 -0000 Drew Adams writes: > As for performance, for `M-x' there certainly is > no problem. `M-x' with no input pattern to match > shows the 6000-some candidates immediately. Certainly it doesn't _show_ 6000 candidates, right? You must mean it calculates them quickly and shows the top-sorting set quickly. That's great, I guess, and I join in asking if Emacs shouldn't do that. I didnt' dig down very intensively, but my naive profiling shows the bulk of the work to be in `all-completions' or thereabouts to be the main sink of cpu time: - icomplete-post-command-hook 2032 86% - icomplete-exhibit 2032 86% - icomplete-completions 2009 85% - icomplete--sorted-completions 1986 84% - completion-all-sorted-completions 1986 84% - completion-all-completions 1982 84% - completion--nth-completion 1982 84% - completion--some 1982 84% - # 1982 84% - completion-flex-all-completions 1965 84% - completion-substring--all-completions 1935 82% - completion-pcm--all-completions 1932 82% - all-completions 1929 82% - # 1929 82% - complete-with-action 1929 82% - all-completions 37 1% As you know, all-completions is a C function. The 1% is suspicious, I don't know if I should trust it. Anyway, I'm curious how Icycles evades this. Anyway2, I wasn't trying this in an Emacs -Q. When I do, and I set icomplete-compute-delay to 0, then M-x is practically instantaneous. Maybe the default 0.3 value of that variable is excessively conservative. So, to summarize: I do believe could be some shortcuts for the notable case of no input pattern to give a speed boost, maybe showing them them their relevant minibuffer history. I don't believe there's some kind of magical speed pickup to be had. Even the C rewrite of parts of completion-pcm--all-completions now seems dubious. > This way of combining yes-no-maybe predicates is > described here: > > https://www.emacswiki.org/emacs/ApplesAndOranges Have you tried `fido-mode` and/or flex? Can you think of specific ways to improve it? If so, patches are very welcome. It's a bit harder, I admit, to try to learn Icicles and decide which features to migrate. But if you can point some laser-targeted improvement to the flex algorithm (in efficiency of functionality) are very welcome. Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 13:52:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgB55-0001DZ-54 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgB53-0001Be-C2 for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:52:05 -0400 Received: from aibo.runbox.com ([91.220.196.211]:60664) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgB51-00008N-AL for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:52:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=W+2o8oCI9i4UWVo1U2cDazuwa+tixZ8yemOQl/LOkqE=; b=JUWNRgyHfYMOQMgRtY2WWNfLzw i21S6bHJnsrR69/n3C/DN7Z5WmDlzlQeP9MA5sLEISYZ45YNmlad8ROqpUcqb3VYBxHi6tej0bjZ0 A+JHEGptyem5+sexqzQ7PHOAlhWNH3hM0h1ZEP7ZqCy7nBUBwIUF2LaGwnneSbVSdo2adUgFq9kcv 7WcCkn7PDMIjJnd0KtHPBjUlQ1ZOHDQ6fAaRZmnnj2NL07GzSdEtp3282oAqBVzRd8biwD58bvdet aJ9oIRTPGPt7Izbo36DbiKN+8gMqzNrdE+heiKol8XLJEtAU0PiBfGmjHaU28YgMsglRVHRPGQIew 663h3ZAQ==; Received: from [10.9.9.74] (helo=submission03.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgB4x-0004UK-Tw; Tue, 02 Jun 2020 19:52:00 +0200 Received: by submission03.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgB4n-0002j4-4Q; Tue, 02 Jun 2020 19:51:49 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Dmitry Gutov Cc: "Philip K." , "Basil L. Contovounesios" , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> Date: Tue, 02 Jun 2020 19:51:48 +0200 In-Reply-To: (Dmitry Gutov's message of "Sun, 31 May 2020 16:00:12 +0300") Message-ID: <87k10picej.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 13:05:07 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:52:05 -0000 Dmitry Gutov writes: > On 29.05.2020 18:54, Simen Heggest=C3=B8yl wrote: >>> On 29.05.2020 02:05, Basil L. Contovounesios wrote: >>> >>>> Can the project-list file name please be customisable? >>> Of course. Just an omission. >> Yup. > > Simen what do you say? I think there's a "list" too much in project-list-file's docstring, otherwise it looks good to me. -- Simen From MAILER-DAEMON Tue Jun 02 13:57:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBAU-00052Y-1z for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 13:57:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBAS-00052I-7T for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:57:40 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:33201) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgBAR-00029t-8O for emacs-devel@gnu.org; Tue, 02 Jun 2020 13:57:39 -0400 Received: by mail-wm1-x32e.google.com with SMTP id j198so2764899wmj.0 for ; Tue, 02 Jun 2020 10:57:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=rw3CAgXRzACPH+j/k64VZNWeQqcMrxwdeF3STjOXeXY=; b=FUALT2jBjH96xA3Zvl3WDkpmI61+9YCnKmHAuOMBrYfVF+7PAJsDLP3V7cyPFJ6Udf 7lvnR+Le22HElMZT3eRbRXexMo+WdfovjdbrCEK0IxbGJW07+Vlxx3LnaefAThoW5v4j atIiEIy2vD4F6jdeeCHA0sEXg51OG4DVV8UBI67zSPYSb+BwonLs+/HGAlFcsbzwNvkn GBYjp3yxJLTr7eEkLckqSpylpDo+0YB7Jj8kKBS4N0HMBmM8S2S5462f9HyAGcsseEWQ jt52HVg3TpbVpSVsYzn+djFLpsZ8BMo8fC0lGzUSmZDMbEomJV2S70m6oLbZN2tyc9xL HnTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=rw3CAgXRzACPH+j/k64VZNWeQqcMrxwdeF3STjOXeXY=; b=cuyo1JB5kAsZD19rEFP7Fdgz2qzRhD3QLL5x+oKnDE0XFOJ6DQHWzIxdm9644Ba6xL vifDEt0PgijiQd6p/x9q/UsBZ9mLe7Jm/AcVCDhjW7nufpiilY8htqQYH69+jYY5g1M9 2OX6MfuRxlZKIfy567HwysE52/jz59c24Y1AlYfDGZzblRWmsugDUzE/7KINJrPOoR0Y x1qPWrVUpj4nd3vGmljUZPoXiDiWELpd7xTxNArcOXRxy5041JA6nz0dmcPH5iYgqpFN umjE88QSVBapFofpuvhxCWrJPevIbWYTgF4I6GLjBJtT4NUwMGFTDUZOncPRYJgM+E7V 4OMQ== X-Gm-Message-State: AOAM533Aqpb+jLearEj6tas1Tdi8Oj3OPegq3vPDdry4nnvZEATStwMB 1xS5at2bREl0a4kQDF9cY+o/BrTL X-Google-Smtp-Source: ABdhPJwMgpGy0nbpTOT3M+RF0llmztzv9ly5nGnaSAkfZWjVC+SW3TS/ai+s0Wxz4oXUo0l+gakHeQ== X-Received: by 2002:a1c:a906:: with SMTP id s6mr5429197wme.171.1591120653767; Tue, 02 Jun 2020 10:57:33 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id u14sm737901wmd.0.2020.06.02.10.57.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 02 Jun 2020 10:57:32 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , Juri Linkov Cc: "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <87a71l2wjf.fsf@simenheg@gmail.com> From: Dmitry Gutov Message-ID: <0d5f1d5b-bc53-1b71-0a63-c5190fb8cb29@yandex.ru> Date: Tue, 2 Jun 2020 20:57:31 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87a71l2wjf.fsf@simenheg@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 17:57:40 -0000 On 02.06.2020 20:43, Simen Heggestøyl wrote: > Looks good to me. If Dmitry agrees I can start working on changing the > format. I'm fine with it. Up to you, really. > Maybe it should be renamed from "project-list" to simply "projects" too > while we're at it, to match similar files, like "places", "bookmarks", > and so on? OK, sure. From MAILER-DAEMON Tue Jun 02 14:05:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBHi-0008J9-An for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 14:05:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBHg-0008J0-Dy for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:05:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50100) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgBHf-0003fE-Ps; Tue, 02 Jun 2020 14:05:07 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:48393) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jgBHe-0003lK-QC; Tue, 02 Jun 2020 14:05:07 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 8AC6D27C0054; Tue, 2 Jun 2020 14:05:06 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Tue, 02 Jun 2020 14:05:06 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudefjedgledvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtgfesthhqredttderjeenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dvueefkeeuleekheffffdtieduvdfhffdtgfekhfejueejudehudekveefvedvhfenucfk phepgeeirdektddrjeehrddvfeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepthhhohhrnhdomhgvshhmthhprghuthhhphgvrhhsohhnrghl ihhthidqkeeijeefkeejkeegqdeifeehvdelkedqthhsughhpeepghhnuhdrohhrghesfh grshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p2e504bea.dip0.t-ipconnect.de [46.80.75.234]) by mail.messagingengine.com (Postfix) with ESMTPA id 246F63061856; Tue, 2 Jun 2020 14:05:05 -0400 (EDT) From: Tassilo Horn To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Andrew Schwartzmeyer , emacs-devel Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> <87h7vtfm9m.fsf@gnu.org> <87wo4pl7rm.fsf@gmail.com> Mail-Followup-To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Andrew Schwartzmeyer , emacs-devel Date: Tue, 02 Jun 2020 20:05:03 +0200 In-Reply-To: <87wo4pl7rm.fsf@gmail.com> (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vor?= =?utf-8?Q?a=22's?= message of "Tue, 02 Jun 2020 18:03:41 +0100") Message-ID: <87tuzttkc0.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 18:05:08 -0000 Jo=C3=A3o T=C3=A1vora writes: >> Yes, I know. And except for the change in completion-styles, I like >> it. Not so much for plain icomplete-mode where the fido keybindings >> are missing. > > You can grab all the bindings of fido-mode in one swoop like this, I > think you can put this: > > (use-local-map (make-composed-keymap icomplete-fido-mode-map > (current-local-map))) > > Somewhere in your icomplete-minibuffer-setup-hook. Indeed, that should also work. Thanks, Tassilo From MAILER-DAEMON Tue Jun 02 14:12:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBOQ-0002FZ-Dd for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 14:12:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBOO-0002DY-RD for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:12:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50254) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgBOO-0006g6-8X; Tue, 02 Jun 2020 14:12:04 -0400 Received: from [176.228.60.248] (port=3841 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgBOM-0004Sj-1p; Tue, 02 Jun 2020 14:12:03 -0400 Date: Tue, 02 Jun 2020 21:11:44 +0300 Message-Id: <83img9cp7j.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: drew.adams@oracle.com, emacs-devel@gnu.org In-Reply-To: <87sgfdl5jw.fsf@gmail.com> (message from =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= on Tue, 02 Jun 2020 18:51:31 +0100) Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 18:12:05 -0000 > From: João Távora > Date: Tue, 02 Jun 2020 18:51:31 +0100 > Cc: emacs-devel@gnu.org > > - icomplete-post-command-hook 2032 86% > - icomplete-exhibit 2032 86% > - icomplete-completions 2009 85% > - icomplete--sorted-completions 1986 84% > - completion-all-sorted-completions 1986 84% > - completion-all-completions 1982 84% > - completion--nth-completion 1982 84% > - completion--some 1982 84% > - # 1982 84% > - completion-flex-all-completions 1965 84% > - completion-substring--all-completions 1935 82% > - completion-pcm--all-completions 1932 82% > - all-completions 1929 82% > - # 1929 82% > - complete-with-action 1929 82% > - all-completions 37 1% This actually says that the time sink is complete-with-action, not all-completions. > As you know, all-completions is a C function. The 1% is suspicious, I > don't know if I should trust it. You should trust the profile. It works the same whether it's a C function or a Lisp function. From MAILER-DAEMON Tue Jun 02 14:24:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBam-0005Mh-D3 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 14:24:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBak-0005Kd-DF for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:24:50 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:46029) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgBaj-0000mp-Lm; Tue, 02 Jun 2020 14:24:50 -0400 Received: by mail-wr1-x435.google.com with SMTP id c3so4338302wru.12; Tue, 02 Jun 2020 11:24:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=7Ys6OuWerAvPe5W4uokoQKsOnvdk1L7VWet7hCIwxpg=; b=kXMSUT0w7wLgr/0M7VojDgXTdbHDZHnLJutU4aDGLJZAHFzilhrWhviyC27Bhp3MLe Wbg7NnwIUUc9aKg4dr5yO0L7o1NeauvK7riOlXwkdMfgpBGopvEi8NXsOkfxXByxittB eLh9yKlreO1t1+Ax3KjJVOBWcG454YIS6NqrmsoqccktDuNlzTBs18/F7xrvdLd5ddcw NpTMg+IhgIUIid5TSlo01tOqDj4sbp+Zmoz4y3nmlB4yUHckvq4zF4L8tjwWm+aACAhJ B6v8KGRnDjGyS6zjqJLfFL7D67C17lSLOWIZkXAZPq5dIsYDD+DeY5UZg5HsmXVfM3k5 ObMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=7Ys6OuWerAvPe5W4uokoQKsOnvdk1L7VWet7hCIwxpg=; b=oCfa7/Li/YSvdhAmxEuhYgJ0DXovG7XRprlkqPgDhuQPqu1KSkjDhBlDGBZSqN19/7 TgxkSRNltxaw0Mv3Cb+Q54OZfwzmNUNGEqhhu0m0SfhqFuy/eXrJC2Qss6tsw9YU2hTW 3VY2Yx/uqnAeQl/TfrSWlZtOebjRXCLL5TyE+eitxSnoKSbQg0E6H2DcIKeHzuPrAbGM XxBwr+W+dJ/ocorWNbNxfZUbjFubc3fyRWTAmEc7OzjGYfQpG8GAaG4I75FMPSgI2jg2 EcVMS6PIMSgQThI8FyVn7i+ITKjMO8JomqrcbP570W71ioQnXLJP2ptSEFR4a5QBGPQk 7hvw== X-Gm-Message-State: AOAM531fRRTaKI/8Ye4UXhyigmW4mTdATPeEAyO9ty/jI2pnRcqI2wIu EUlBiRuXiuKD2Xp9jdth/VjmYapmXsY= X-Google-Smtp-Source: ABdhPJyPmKo8x7n1BTs/uZbPHUSaijogFQACQSheM2Lieu3agd76q3i8uIHO3vE+K7KxZoJtNXYxug== X-Received: by 2002:adf:ef47:: with SMTP id c7mr29646087wrp.57.1591122287618; Tue, 02 Jun 2020 11:24:47 -0700 (PDT) Received: from krug ([89.180.144.241]) by smtp.gmail.com with ESMTPSA id s72sm788346wme.35.2020.06.02.11.24.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 11:24:46 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Eli Zaretskii Cc: drew.adams@oracle.com, emacs-devel@gnu.org Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> <83img9cp7j.fsf@gnu.org> Date: Tue, 02 Jun 2020 19:24:45 +0100 In-Reply-To: <83img9cp7j.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 02 Jun 2020 21:11:44 +0300") Message-ID: <87o8q1l40i.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::435; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x435.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 18:24:50 -0000 Eli Zaretskii writes: >> From: Jo=C3=A3o T=C3=A1vora >> Date: Tue, 02 Jun 2020 18:51:31 +0100 >> Cc: emacs-devel@gnu.org >>=20 >> - icomplete-post-command-hook 2032 8= 6% >> - icomplete-exhibit 2032 8= 6% >> - icomplete-completions 2009 8= 5% >> - icomplete--sorted-completions 1986 8= 4% >> - completion-all-sorted-completions 1986 8= 4% >> - completion-all-completions 1982 8= 4% >> - completion--nth-completion 1982 8= 4% >> - completion--some 1982 8= 4% >> - # 1982 8= 4% >> - completion-flex-all-completions 1965 8= 4% >> - completion-substring--all-completions 1935 8= 2% >> - completion-pcm--all-completions 1932 8= 2% >> - all-completions 1929 8= 2% >> - # 1929 8= 2% >> - complete-with-action 1929 8= 2% >> - all-completions 37 = 1% > > This actually says that the time sink is complete-with-action, not > all-completions. > >> As you know, all-completions is a C function. The 1% is suspicious, I >> don't know if I should trust it. > > You should trust the profile. It works the same whether it's a C > function or a Lisp function. OK that's good to know, but then, I don't know where the time is going: Shouldn't I be seeing some callee of this function using up the time?? This is complete-with-action minus docstring, can you help me understand what's going on? (defun complete-with-action (action collection string predicate) (cond ((functionp collection) (funcall collection string predicate action)) ((eq (car-safe action) 'boundaries) nil) ((eq action 'metadata) nil) (t (funcall (cond ((null action) 'try-completion) ((eq action t) 'all-completions) (t 'test-completion)) string collection predicate)))) Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 14:35:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBlC-0008FR-Ej for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 14:35:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54470) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBlA-0008EF-TJ for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:35:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50770) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgBlA-0003N4-Aj; Tue, 02 Jun 2020 14:35:36 -0400 Received: from [176.228.60.248] (port=1299 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgBl9-0000h5-H2; Tue, 02 Jun 2020 14:35:36 -0400 Date: Tue, 02 Jun 2020 21:35:18 +0300 Message-Id: <83h7vtco49.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: drew.adams@oracle.com, emacs-devel@gnu.org In-Reply-To: <87o8q1l40i.fsf@gmail.com> (message from =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= on Tue, 02 Jun 2020 19:24:45 +0100) Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> <83img9cp7j.fsf@gnu.org> <87o8q1l40i.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 18:35:37 -0000 > From: João Távora > Cc: drew.adams@oracle.com, emacs-devel@gnu.org > Date: Tue, 02 Jun 2020 19:24:45 +0100 > > This is complete-with-action minus docstring, can you help me understand > what's going on? > > (defun complete-with-action (action collection string predicate) > (cond > ((functionp collection) (funcall collection string predicate action)) > ((eq (car-safe action) 'boundaries) nil) > ((eq action 'metadata) nil) > (t > (funcall > (cond > ((null action) 'try-completion) > ((eq action t) 'all-completions) > (t 'test-completion)) > string collection predicate)))) What is 'collection'? is it a function? Anyway, I suggest to run the same experiment after loading all the code involved in this as *.el files (not *.elc). That should show a more detailed profile, which hopefully will give a clue. From MAILER-DAEMON Tue Jun 02 14:46:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgBw3-0005FU-E7 for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 14:46:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBw0-0005F9-UM for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:46:48 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:55632) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgBvx-0004yV-95 for emacs-devel@gnu.org; Tue, 02 Jun 2020 14:46:47 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id D253F441293; Tue, 2 Jun 2020 14:46:41 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 4385E4412B6; Tue, 2 Jun 2020 14:46:40 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591123600; bh=I2D4BvTqQbl3UfQJ+jiMVLm8O9NgSCZGmE4zdhEP3yA=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Ojf++BwUna+DIqVGKMhVq+D/8kNWanv6unSWH00lIbzrWcEo67dQmP1G/FSVDGqn6 PdrmaHXY3+DEO/sWOjx08VWE+O72dNrtw7XSFUH5nnjamkZhoea/+OoYvCa699n6UR Qm23AB4POAQVA7fwY9VdGARvB6SfQH41DOWzYf5GKr3z2s7/ZWmIPWB2TGBMSU7bki TMcPFl5MF1Wtae/LK+A11Jjzn5N4NrZGC5dglj5Y4YS7rwCeWTg1pFwRsUMu4yNkJo MAp32cCaLrzcjIHcQScmb/CT+7BgxVwQhSMzZZV5TBqysaQIC4FDaviKWZHGx91/V4 ecsW93bTj49mQ== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id AAF0B12031C; Tue, 2 Jun 2020 14:46:39 -0400 (EDT) From: Stefan Monnier To: Ikumi Keita Cc: emacs-devel@gnu.org Subject: Re: Giving "text quotes" syntax in font-lock-syntax-table only Message-ID: References: <50114.1589957638@localhost> <55185.1589981051@localhost> Date: Tue, 02 Jun 2020 14:46:33 -0400 In-Reply-To: <55185.1589981051@localhost> (Ikumi Keita's message of "Wed, 20 May 2020 22:24:11 +0900") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.059 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 14:46:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 18:46:49 -0000 Sorry for not getting back to you sooner. I see you (plural) decided to switch to highlighting math elements using regexps rather than the syntax-table. That sounds like a wise choice. > This resembles the method to modify the major mode's syntax table > (without setting `syntax-ppss-table'). It does eliminate the wrong > fontification, but brings another problem in actual use cases of AUCTeX. > When `syntax-ppss-table' is non-nil, all functions using `syntax-ppss' > obey that syntax table, so they regard math expression $...$ as string > constant. This can be problematic for cases like this: Indeed. What you could do if you still want to use syntax-tables rather than regexp, is to add an entry to the beginning of `font-lock-keywords` which does the equivalent of `font-lock-fontify-syntactically-region` but without using `syntax-ppss` and using its own syntax-table. Maybe this actually argues that `font-lock-fontify-syntactically-region` should use `font-lock-syntax-table` rather than `syntax-ppss-table` and should refrain from using `syntax-ppss` when that syntax-table is different from that of syntax-ppss. Stefan From MAILER-DAEMON Tue Jun 02 15:11:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgCKK-0002ss-0g for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 15:11:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgCKJ-0002sm-2w for emacs-devel@gnu.org; Tue, 02 Jun 2020 15:11:55 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:35291) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgCKI-00020g-95; Tue, 02 Jun 2020 15:11:54 -0400 Received: by mail-wr1-x434.google.com with SMTP id x14so4537636wrp.2; Tue, 02 Jun 2020 12:11:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=kFw89oulAIP5/ZdQDwKm4K9o8td+afYw2DllosZgtOo=; b=band0wBRK6hIROZiPfdDbAClfJoEbzqD2GZ7eslAXgrLIt+mofhIN3McuG4JD0PO78 k4u3aAI+y9Hwzenqs7K4UquhMa4Ffs/MQta3GXmmMZiOOz7p2ltgaSMfsjG2HByq0771 cz8oXpFAoczB/mFRYnrSam9eGpclMgN9IfXtRmLfA2COgpHNtB5Eyi6o9aLrUXa8H/jr XGmNhWAyewoFOWmnlO2wFN8MGv2yBHNnYTtoUTNpUWNOg7rxYTv2jiPBTRsmejiBkvoS mroZkBSN3a0qPosbKPB8znOjEhYC3gqSDPVK9ZHBpdiLbaw9MQ45OQUdkZKZa5PtQ/rk hZkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=kFw89oulAIP5/ZdQDwKm4K9o8td+afYw2DllosZgtOo=; b=JWrzh5DnyGeIuVmwONtcairO59xLDbajLgwUgyi5tUXDZDiVxcHlsklWQExzCjKPvD 2XSVM1VK0ZKe5n/8Hv845fpwhY+3pr2dm26SkDKZ8UksDIra0zJy7h4Z/KCjKth05AAQ PY10w0zAtKM1zMjU6utLo2A5ZqllgPY4hrrF8oKOcVsqOGGvOW+7+iHwE7CK9O3dfMic r2a09ovFgQ9k6vDQDedarzX12ASC/Vb3XTGnhfAc2dhdOQzj5wJ2jfq5eaqccxShnVoH A5Jf6aSTqv1AbkukXG/godsxwPHROKVuQudoqpqNjBa+9/OfZoygPGo2H9JX4Q+vSQuP RwkA== X-Gm-Message-State: AOAM5306xXsN0AZ+fvUbpM7bXUAHvNDv3bx59tVABI1bDOOz7Ve5EWA5 O32pYWlzIXR3/g5VoLgECWY= X-Google-Smtp-Source: ABdhPJwCCoo/FWDR1le2dxhK3vQ85h7utqWYrJeEdvVgKzJWWxKTX5Aa8pqH3ns7kmp0yo1/+E5C+Q== X-Received: by 2002:a5d:4a04:: with SMTP id m4mr30207491wrq.153.1591125112430; Tue, 02 Jun 2020 12:11:52 -0700 (PDT) Received: from krug (89-180-144-241.net.novis.pt. [89.180.144.241]) by smtp.gmail.com with ESMTPSA id r5sm5777183wrq.0.2020.06.02.12.11.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 12:11:51 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Eli Zaretskii Cc: drew.adams@oracle.com, emacs-devel@gnu.org, monnier@iro.umontreal.ca Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> <83img9cp7j.fsf@gnu.org> <87o8q1l40i.fsf@gmail.com> <83h7vtco49.fsf@gnu.org> Date: Tue, 02 Jun 2020 20:11:49 +0100 In-Reply-To: <83h7vtco49.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 02 Jun 2020 21:35:18 +0300") Message-ID: <87h7vtl1u2.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x434.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 19:11:55 -0000 Eli Zaretskii writes: > What is 'collection'? is it a function? I suppose it can be, yes. > Anyway, I suggest to run the same experiment after loading all the > code involved in this as *.el files (not *.elc). That should show a > more detailed profile, which hopefully will give a clue. That did give some clues. When loading minibuffer.el that section becomes: - complete-with-action 1125 75% - cond 1125 75% - funcall 1125 75% - all-completions 24 1% # 15 1% Which shows there's an compiled function coming from somewhere else, likely simple.el. When I load simple.el, the profile changes dramatically, and becomes so deep that it's impossivle to read because M-x profiler-report truncates the names of functions at a certain point. So then I remembered loading the compiled minibuffer.elc and loading the uncompiled simple.el, and I got more interesting results, such as these: - # 1264 82% - completion-flex-all-completions 1233 8= 0% - completion-substring--all-completions = 1212 78% - completion-pcm--all-completions 1209 = 78% - all-completions 1209 78% - # 318 = 20% - let 318 20% - complete-with-action 318 20% - all-completions 10 0% - # = 5 0% - and 5 0% funcall 4 0% - or 1 0% equal 1 0% - # 197 1= 2% - let 197 12% - complete-with-action 197 12% - all-completions 7 0% - # = 4 0% - and 4 0% funcall 4 0% - # 180 1= 1% - let 180 11% - complete-with-action 180 11% - all-completions 5 0% - # = 4 0% - and 4 0% funcall 4 0% + # 177 1= 1% + # 172 1= 1% + # 165 = 10% + completion-pcm--hilit-commonality 21= 1% Which are still kind of confusing, but at least kinda point to the time wasters being in simple.el, i.e. in the "client" code of the completions code, and _not_ in minibuffer.el, where the completion algorithm itself lives. But maybe I'm totally mistaken. Stefan is probably the best person to shed some light here. Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 15:26:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgCYB-0001xN-Ri for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 15:26:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59732) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgCYA-0001to-33 for emacs-devel@gnu.org; Tue, 02 Jun 2020 15:26:14 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51566) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgCY9-0004ks-Cs; Tue, 02 Jun 2020 15:26:13 -0400 Received: from [176.228.60.248] (port=4507 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgCY8-0007Zb-Oi; Tue, 02 Jun 2020 15:26:13 -0400 Date: Tue, 02 Jun 2020 22:25:54 +0300 Message-Id: <83eeqxclrx.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: drew.adams@oracle.com, emacs-devel@gnu.org, monnier@iro.umontreal.ca In-Reply-To: <87h7vtl1u2.fsf@gmail.com> (message from =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= on Tue, 02 Jun 2020 20:11:49 +0100) Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> <83img9cp7j.fsf@gnu.org> <87o8q1l40i.fsf@gmail.com> <83h7vtco49.fsf@gnu.org> <87h7vtl1u2.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 19:26:14 -0000 > From: João Távora > Cc: drew.adams@oracle.com, emacs-devel@gnu.org, monnier@iro.umontreal.ca > Date: Tue, 02 Jun 2020 20:11:49 +0100 > > - complete-with-action 1125 75% > - cond 1125 75% > - funcall 1125 75% > - all-completions 24 1% > # 15 1% This looks like funcall takes most of the time, so it's important to understand which function is being called here. > - completion-pcm--all-completions 1209 78% > - all-completions 1209 78% > - # 318 20% > - let 318 20% > - complete-with-action 318 20% > - all-completions 10 0% > - # 5 0% Is this real? all-completions calls some lambda which itself calls all-completions? > - and 5 0% > funcall 4 0% > - or 1 0% > equal 1 0% > - # 197 12% > - let 197 12% > - complete-with-action 197 12% > - all-completions 7 0% > - # 4 0% > - and 4 0% > funcall 4 0% > - # 180 11% > - let 180 11% > - complete-with-action 180 11% > - all-completions 5 0% > - # 4 0% > - and 4 0% > funcall 4 0% > + # 177 11% > + # 172 11% > + # 165 10% > + completion-pcm--hilit-commonality 21 1% What are all those lambda-functions? From MAILER-DAEMON Tue Jun 02 15:28:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgCag-0004ab-QS for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 15:28:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60042) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgCaf-0004aP-P0 for emacs-devel@gnu.org; Tue, 02 Jun 2020 15:28:49 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:52634) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgCae-0005Lc-Vg for emacs-devel@gnu.org; Tue, 02 Jun 2020 15:28:49 -0400 Received: by mail-wm1-x32f.google.com with SMTP id r9so4039233wmh.2 for ; Tue, 02 Jun 2020 12:28:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=jdnqnfPj3cto2OWqZUMwSmDglaSaUk6GF65k48YCIjs=; b=McjxA3xm+tNk8FrENsSolONrJiDvlrtP+smoHc3ScqjAaCjbdiGxjyfVzKNiu2Sgkj axacHpWc5iFq8knSemKnkomxAApnqUag8HqQYCLHgzsQM5FdEfrQgZAw23rdSTQTE5RY b1lWgwS8Fjf7ZZLse6zSbPyVAI+oQMS1g9t/JVsMJOeYiSETZU2YI12rqfztL6IeGzq+ MYEt8E4W3jFRUIWuFXjUJy8Fv4MmJg8iFnGGdWs7ha/TfiHSKFQC9OcU6CaQ20oncBCj 02oN8tQ2DL8BMlC5j31e3VvuHfuBugl0tfClf4UnnLdBlHTYFyR3FnYGyH4Nudp84vs2 OwRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=jdnqnfPj3cto2OWqZUMwSmDglaSaUk6GF65k48YCIjs=; b=swQF0xQrmvvZ66tZ/M/XnoFgZiAJ2HO9jN9W95jVA9Z6B3kTjQmoJ4706QFI2i2dMN CNsFiC7dhVQnrgTTfiijfSB5bF21nICaMZWTfcjllmCRX8//N3XkSr9ChIYWGQOyNxDO QafjbJscI+y2bl5uFYBiLxr7jqsoIKg6meAis1Wtfmojwi25abu5H0lIZwmVanEeNUE4 YgDLgOlRfPYyR4TKw1ixVzO668BPC3JL8NimN4K75UNb904L7Nmzh0LoLSs1+bfs2NQR v8d+Nhuh9Pn6w9LwigUJqkkwDvcOHOKwjvVY/d/ekKGb1F5VnrQjzCDZAbMc3JpUh16e P3mA== X-Gm-Message-State: AOAM531iCmsj7S6nM2aoXkqQkFSmFh0lGNbCCO++xZclO8LKKBYepwmc vbkO62jXfRxkyTHmsZyfFSgWkpwDJT0= X-Google-Smtp-Source: ABdhPJwGV6Nvlnv7TayJICBGNcb2UeOllufdZ0xEerxFCjGGjhHeXnT9pHiFUhnOvMRX0hmdk6qT+w== X-Received: by 2002:a05:600c:2c4b:: with SMTP id r11mr5829052wmg.144.1591126127232; Tue, 02 Jun 2020 12:28:47 -0700 (PDT) Received: from krug (89-180-144-241.net.novis.pt. [89.180.144.241]) by smtp.gmail.com with ESMTPSA id t14sm5986470wrb.94.2020.06.02.12.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 12:28:46 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Andrew Schwartzmeyer Cc: emacs-devel Subject: Re: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <87lfl5fpbx.fsf@gnu.org> <87h7vtfm9m.fsf@gnu.org> <87d06hfl6y.fsf@gnu.org> Date: Tue, 02 Jun 2020 20:28:45 +0100 In-Reply-To: <87d06hfl6y.fsf@gnu.org> (Tassilo Horn's message of "Tue, 02 Jun 2020 19:10:13 +0200") Message-ID: <87d06hl11u.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x32f.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 19:28:50 -0000 Tassilo Horn writes: > Hi again, > >> I don't know when this happens, but it might be that it is before >> `icomplete-minibuffer-setup-hook' is called and then setting >> `completion-category-overrides' wouldn't have an effect. I'll test... > > Ok, nothing to worry, it seems to work with those configs. Just to note that it _should_ also work without special work on the th/completion-category-overrides var. Did you test that? Jo=C3=A3o From MAILER-DAEMON Tue Jun 02 16:00:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgD52-0005Sv-Ud for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 16:00:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgD52-0005Sp-0A for emacs-devel@gnu.org; Tue, 02 Jun 2020 16:00:12 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:40428) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgD50-0003AQ-T9; Tue, 02 Jun 2020 16:00:11 -0400 Received: by mail-wm1-x334.google.com with SMTP id r15so4370984wmh.5; Tue, 02 Jun 2020 13:00:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=GX3a83kD0p8baOheGUDjLryXwCQpAhRaZ+pYIolGDIc=; b=c1gCEnpfd/N62/JaQiHkMN/6DfxLl/2RibpO9bOAEea4lEVfB3yeCrLh3Va7yRZhSs dXL6+Wbhb9dTdw4RWSVhUbTdKMRSPPWMu2pAfTpngDhoScPbbkNqVhCfI/UjHs6+F6k9 5Bh2gt4WVCWZ5KWzM44siVSniBAWLBeMO8d3TyXUfgFRy3rpCSLifpWq3/coCYgU9u24 2GfA0iH8IvSOxCqPZbpPsx3zLr8ogF6cOsD0wewcnqCUrNzlgNhC5+rXfWbGoMBm+yN5 UB8CveCqLZfEGsE3u5OWB4PwU34ScU2Bd1J3LWd/8B2cOJdctO70D7lmA5eKXTpX2cMn blkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=GX3a83kD0p8baOheGUDjLryXwCQpAhRaZ+pYIolGDIc=; b=UNqE996B4x8ppgZvt58ZsaBxA61ve/4Cy7Dcrx0tarns0HojaFpmpGe2OxUTjpZEf6 BerFtUhjLw7zQFbfZQljzcGFpJIiNBZ55HddmKYq9Hw7pZ5Px6bC0QP4J4m7YW1co5kc MbJh5OaMDTwT8NqrvtJ+mlhun9M8P/2g6EUtOjmaZlyEyBSuYmYPIk5K2+g+XGY+KyMu jca46nRu/caD8VHkUKcZNXeHg7bU06scsWaZTOXx1lB61NKJVGX68y6IRj9zhOZaFHEF inWpZwHVxh0VwgvZSZiIkhIcBFJ9KspDpcOOa0W0sd1N4XqcV5gUHu52tT1H3xixDeD3 vFzA== X-Gm-Message-State: AOAM533ttdKzQ0oAlvxjxDbxYAxbFilWx8JpO9FQtHaPjfcyp+COLpOy AV+s+IhjhPLUO7v1K8T65ug= X-Google-Smtp-Source: ABdhPJxFP5rPYf++6a4LrWSVcSgkPg4gSiir/n+SIS1yCCBlLS1MpQisU0CFccEyZKXnIezz+KAgNg== X-Received: by 2002:a1c:5683:: with SMTP id k125mr5834425wmb.55.1591128009293; Tue, 02 Jun 2020 13:00:09 -0700 (PDT) Received: from krug ([89.180.144.241]) by smtp.gmail.com with ESMTPSA id x18sm993739wmi.35.2020.06.02.13.00.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2020 13:00:08 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Eli Zaretskii Cc: drew.adams@oracle.com, emacs-devel@gnu.org, monnier@iro.umontreal.ca Subject: Re: Add user customization fido-completion-styles In-Reply-To: <83eeqxclrx.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 02 Jun 2020 22:25:54 +0300") References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> <83img9cp7j.fsf@gnu.org> <87o8q1l40i.fsf@gmail.com> <83h7vtco49.fsf@gnu.org> <87h7vtl1u2.fsf@gmail.com> <83eeqxclrx.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) Date: Tue, 02 Jun 2020 21:00:06 +0100 Message-ID: <878sh5w855.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x334.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 20:00:12 -0000 Eli Zaretskii writes: >> From: Jo=C3=A3o T=C3=A1vora >> Cc: drew.adams@oracle.com, emacs-devel@gnu.org, monnier@iro.umontreal.ca >> Date: Tue, 02 Jun 2020 20:11:49 +0100 >>=20 >> - complete-with-action 1125 75% >> - cond 1125 7= 5% >> - funcall 1125 7= 5% >> - all-completions 24 = 1% >> # 15 = 1% > > This looks like funcall takes most of the time, so it's important to > understand which function is being called here. I think it's something in simple.el, given as the profile changes completely once I load that file versus loading simple.elc. >> - completion-pcm--all-completions 12= 09 78% >> - all-completions 1209 7= 8% >> - # 31= 8 20% >> - let 318 2= 0% >> - complete-with-action 318 2= 0% >> - all-completions 10 = 0% >> - # = 5 0% > > Is this real? all-completions calls some lambda which itself calls > all-completions? It might be yes, judging from the docstring, the C implementation of all-completions, and the evidence we're looking at. >> - all-completions 5 = 0% >> - # = 4 0% >> - and 4 = 0% >> funcall 4 = 0% >> + # 177= 11% >> + # 172= 11% >> + # 1= 65 10% >> + completion-pcm--hilit-commonality = 21 1% > > What are all those lambda-functions? No idea. I'd suppose they are the functions who are checking the predicate against the symbols in obarray, since we want only the symbols that verify commandp and aren't marked as obsolete. I've expanded the first two lambdas of the 5 we have in total. I think that's the amount of types I pressed 'M-x C-g' waiting for the completions to show up between the M-x and the C-g. None of this was with an Emacs -Q, though. If I use an Emacs -Q I just have one of those mysterious lambdas, even if I do do the 'M-x C-g' multiple times. - completion--some 111 42% - #) id 1jgDt2-0004uh-EV for emacs-devel@gnu.org; Tue, 02 Jun 2020 16:51:52 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:57534) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgDt0-0005IU-Sa for emacs-devel@gnu.org; Tue, 02 Jun 2020 16:51:51 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052KaidZ043291; Tue, 2 Jun 2020 20:51:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=4aWl6Oic3mw0fUiCOVWOl7aI93RKy5twphlG7WDS4B4=; b=yUZklVi0wPFzqukn1KXAfHnDVqZ+4KxlA9yBg7Zu4rvn8E9alqmJrOAODqOIID7dw+Gq pbB/8EQWUxHxVQ0NI6+rKVOyRblqZ8W5teW2fMC6XVOwnAuZctHKFatT8MhV8YEvWROX q3iIs11nXcrFN89lZ+HJBVs50sGmSkw6NoE421I8Ms9T+zBO6Cw16PIwImnTlhhBqC7+ OTotaaddEwxerIUzhzofTvzkHufHiO+EtwqKvpxkzo9ajYEYBbMl2grIHbU6OPk/kA2V hrLHeMpbpUG1vJn6Zh26r8h7YaROsqpwf8Nni9O8HXsH7JTXTdWIe+LSLG/4BjKNVDpL 5Q== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 31bfem60hw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 02 Jun 2020 20:51:47 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 052KdPv3147184; Tue, 2 Jun 2020 20:51:46 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3030.oracle.com with ESMTP id 31c12ptxn1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 02 Jun 2020 20:51:46 +0000 Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 052KpigY032039; Tue, 2 Jun 2020 20:51:44 GMT MIME-Version: 1.0 Message-ID: <47051525-ddc5-414f-a2ea-d84065d5100a@default> Date: Tue, 2 Jun 2020 13:51:36 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Andrew Schwartzmeyer , emacs-devel@gnu.org Subject: RE: Add user customization fido-completion-styles References: <87r1uzn018.fsf@gmail.com> <953E1512-6420-4AE8-AF29-15AB151B6344@schwartzmeyer.com> <877dwpn2id.fsf@gmail.com> <3483a8d9-1474-45cf-afad-8d276b96ef3f@default> <87sgfdl5jw.fsf@gmail.com> In-Reply-To: <87sgfdl5jw.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 malwarescore=0 adultscore=0 suspectscore=0 spamscore=0 bulkscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020150 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 mlxlogscore=999 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1015 impostorscore=0 adultscore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006020150 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/02 16:51:49 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 20:51:52 -0000 > > As for performance, for `M-x' there certainly is > > no problem. `M-x' with no input pattern to match > > shows the 6000-some candidates immediately. >=20 > Certainly it doesn't _show_ 6000 candidates, right? > You must mean it calculates them quickly and shows > the top-sorting set quickly. That's great, I guess, > and I join in asking if Emacs shouldn't do that. No, it can show them all. Sure, because of Emacs's display code, it shows only as many as fit in the `*Completions* window. But I'm using a separate frame for `*Completions*', and I can shrink its font size to show zillions of them. Yeah, at a certain point the font size becomes too small (no such font). But there's no problem calculating and showing lots of candidates. However, with Icicles flx sorting, the score for each candidate, when there's no input pattern, i.e. (flx-score CANDIDATE ""), is nil. And as I mentioned, when either of the flx scores is nil the candidates are compared alphabetically. `flx-score' (from `flx.el') is meaningless for empty input. (See my previous mail about this.) Things are slower when an input pattern is used. E.g. with `M-x b' I see a pause of a couple sec, for 864 candidates. So yeah, flx sorting isn't super rapid. But that's OK. Icicles users can change sort orders anytime, on the fly. > I didnt' dig down very intensively, but my naive > profiling shows the bulk of the work to be in > `all-completions' or thereabouts to be the > main sink of cpu time: I was reporting about Icicles, not icomplete. But yes, Icicles uses `completion-all-completions' too (in this context). > As you know, all-completions is a C function. > The 1% is suspicious, I don't know if I should > trust it. >=20 > Anyway, I'm curious how Icycles evades this. See above. I was speaking of the empty-input case, where `flx-score' returns nil, in which case the sort predicate falls back to comparing alphabetically. Also, Icicles sorts (and displays candidates) outside the standard completion code. It sorts the current set of completions at the end. > Anyway2, I wasn't trying this in an Emacs -Q. > When I do, and I set icomplete-compute-delay to 0, > then M-x is practically instantaneous. >=20 > Maybe the default 0.3 value of that variable is > excessively conservative. (FWIW, Icicles's delay for the number of sec to wait before updating *Completions* incrementally is 0.7 sec, by default. But there's no wait if the number of candidates is =3D< the value of option `icicle-incremental-completion-threshold', whose default value is 1000.) > So, to summarize: I do believe could be some > shortcuts for the notable case of no input pattern > to give a speed boost, maybe showing them them > their relevant minibuffer history. Yes, for that notable case. I'd say no, to using input-history order. (And what do you do if two candidates to compare can't be compared by flx and one or both is not a previous input?) In Icicles, one of the available sort orders is sorting "by last use as input". A user can switch to that anytime during completion. In general (most cases), that's not a good default sort order. It all depends on the user, and on what kind of candidates s?he's sorting, and why. That last-use-as-input sort order is defined as: Non-nil means S1 was used as input more recently than S2. Also: S1 < S2 if S1 was used as input previously but S2 was not. S1 < S2 if neither was used as input previously and S1 `icicle-case-string-less-p' S2. > I don't believe there's some kind > of magical speed pickup to be had. Agreed. Sorry if I gave a false impression in that regard. FWIW, I'm a firm believer in giving users control over this kind of thing, as opposed to trying to bake in some optimal combination that an Emacs developer thinks is a good idea in general, but without giving users an easy way to override that. Yes, a given command (given kind of completion candidates) can call for a given kind of sorting by default - that default sorting behavior should be up to the designer of that command. But past that, a user should be able to choose the kind of (default) sorting to use, including for a specific predefined command, and in general. And beyond that, a user should be able to change the current sort order on the fly, while completing. (Icicles allows all of that.) > Even the C rewrite of parts of > completion-pcm--all-completions now seems dubious. I can't speak to that. > > This way of combining yes-no-maybe predicates is > > described here: > > https://www.emacswiki.org/emacs/ApplesAndOranges >=20 > Have you tried `fido-mode` and/or flex? Can you > think of specific ways to improve it? If so, > patches are very welcome. No, sorry. And I'm no expert on flex matching or fuzzy matching (of any kind). Icicles lets users use different kinds of matching, some of which are provided by other 3rd-party libraries, if you load them. > It's a bit harder, I admit, to try to learn Icicles > and decide which features to migrate. But if you > can point some laser-targeted improvement to the > flex algorithm (in efficiency of functionality) > are very welcome. I don't have anything to help wrt flex. I just enable Icicles to use library `flx.el' which has been around for years. I do the same for other kinds of matching. See this doc page: https://www.emacswiki.org/emacs/Icicles_-_Completion_Methods_and_Styles These are the matchings that require other libraries, for use by Icicles: * Swank fuzzy-symbol matching requires `el-swank-fuzzy.el'. * Fuzzy matching requires `fuzzy-match.el'. * Jaro-Winkler matching requires `fuzzy.el' (in package `autocomplete'). * Levenshtein matching requires `levenshtein.el'. (There are 2 kinds of Levenshtein matching.) The only "fuzzy" matchings I define in Icicles itself are these: * Scatter matching (sometimes called "flex" elsewhere). This is just regexp matching with `a.*b.*c=E2=80=99 * SPC-scatter matching (some other packages use this). This matches input parts that are separated by SPC chars, matching arbitrary text at the separations between those parts. IOW, it's as if regexp `.*' were inserted in place of each substring of SPC chars. HTH. From MAILER-DAEMON Tue Jun 02 17:33:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgEXf-0007z9-LT for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 17:33:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgEXe-0007yo-NN for emacs-devel@gnu.org; Tue, 02 Jun 2020 17:33:50 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:54736) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgEXd-0004Gp-PC for emacs-devel@gnu.org; Tue, 02 Jun 2020 17:33:50 -0400 Received: by mail-wm1-x32e.google.com with SMTP id g10so4307111wmh.4 for ; Tue, 02 Jun 2020 14:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=MD9+1rVEwPZtQJxih9Swkop75uqPp3dr8s4orPgSl8g=; b=O3qb/ce5jcgk/z+WY4cacGwjO0GD46Pa0XMTEkYOcALLtDFkazCxPG8jEdV22wDrtF N+9O/GtV6FHhqA8NH3dD2/5VQBsHKUINDr1jSktrilO2i+qcRWg+SeQJoy3bJD2FBiz+ P8EM7sNK9yYKgG0m9Cxvpjy0hwD2OrdD/DUjBXi91odJ3gUDvCWqb4p+8IH6vCLX/okl b28Cp42bOGJO294ZDKG9zTvWZDWGBjx7StZmCeqitgFoOE/wfqchvDoXgjeEigIErPso cAnHlbrqIxFLMeZ5R70Fkjx26xhiFFVSdhv52rR0YOt7os7sJjAEFWFui654ugMFq0jR +viQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=MD9+1rVEwPZtQJxih9Swkop75uqPp3dr8s4orPgSl8g=; b=Aa9z5w5SBJbR0xwfn6oewq234lyjWiAkAhLFc0ksunFxsmb4R5DvM7u07gSIYchYKt M8gBth1WVBYXAfUOlvW6XtI7qtVjhnKccdqt57Ruo8oHuLcorbW4RbnSewn0oGqxee/o m92DCMIe99GeTczc+i0goGYdz8BvwRVgrU24EGIJKu8u0LE0aeeFY2gj/cn+ZPm22qBi PIpKWGRwWg91S1JtCrI7x540Sxiv5/XH5Cf2qkxwV7YEIBzfQSGeVmFaOXpjHf6uAgOw ssgkQA9dYlkPq4VV9YsQGq61HzbcLRBCtzaZURqrRR6igEEzKJkUvr7GIJOpPvnsRlsc Na0Q== X-Gm-Message-State: AOAM532MOjcBpahpP5YIbzCL2SDAs6qd5YNri5HOmM0ZGHER8hS2eWgC URttKUc7gh5PlyB8nhpxyM+pau+z X-Google-Smtp-Source: ABdhPJzQ6QNCh1/YreNeLaEc9j4oHvxYmSDA2ZXCm0t0sqMOkguqfnngNGoIToCSRMoworepXeuP3g== X-Received: by 2002:a05:600c:22c1:: with SMTP id 1mr6178317wmg.50.1591133628102; Tue, 02 Jun 2020 14:33:48 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a1sm168126wmd.28.2020.06.02.14.33.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 02 Jun 2020 14:33:47 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= Cc: "Philip K." , "Basil L. Contovounesios" , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87k10picej.fsf@simenheg@gmail.com> From: Dmitry Gutov Message-ID: <6f0f416f-5d80-450f-0975-30efe1fefa6b@yandex.ru> Date: Wed, 3 Jun 2020 00:33:45 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87k10picej.fsf@simenheg@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 21:33:50 -0000 On 02.06.2020 20:51, Simen Heggestøyl wrote: > I think there's a "list" too much in project-list-file's docstring, > otherwise it looks good to me. Ah, yes. Already fixed locally, but thanks for the reminder! Pushed to master. From MAILER-DAEMON Tue Jun 02 17:34:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgEYU-0000Pm-6n for mharc-emacs-devel@gnu.org; Tue, 02 Jun 2020 17:34:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgEYS-0000O6-TX for emacs-devel@gnu.org; Tue, 02 Jun 2020 17:34:40 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:45283) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgEYS-0004O8-Ad for emacs-devel@gnu.org; Tue, 02 Jun 2020 17:34:40 -0400 Received: by mail-wr1-x42a.google.com with SMTP id c3so128100wru.12 for ; Tue, 02 Jun 2020 14:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=m6jHbdMd3dSlf6AyJUDLIKcmlizF2GSeG4D5bobJkgg=; b=b2kjHvPGERHdgALpIzyi12yC56Dmc4SD6JXmV7j6eqmLksHD7nqR+DFoQf9RG4maA1 MYw9O0qQaBy4ClfXsCBqNd0fSp7UWZ+Xw/8HrmjL4F31SEiPBhx+RgH/PHZY3e8pXJXO uglgbgSpDv19ag4NPjABP6rZ1k6ckmFH3Km1kRQYFlXq65SbGZyvVcLuOk5FOulQXuz/ qFM0I/abqUF8aQqAabDKELH+oMsC0opBxTTuRbkKuvzVddMhw7qmbMOTVARwTZD8/+qX 64RF7a32FDHSljkrVz/gAfaOKolV7kzACilLlbegQcM7WbdCSvk+jiPZUSmPMrqtKywd JY4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=m6jHbdMd3dSlf6AyJUDLIKcmlizF2GSeG4D5bobJkgg=; b=st/fKjUOYALjEXVnWthhysOWt2o++rvSsGYmoWM9fwkMZCl0xtYTLczQIaqrrYMDlX 9jH+exGbO/b4yLx3vYXh9kCVriAlXxByu2SsnWBaWfGzaF70oTEHmuZiXRokHH01S1j3 3XF8FaZTT4gVXIRH26m50yx/u/TutBkom6soBbtrYjBNQVVuDdT0ABVp9+jDDIyxW+86 3VL9NZElCYu8nBdRgbofHr4W/4jwLmP0VaYGoNpTjrCTdAIku+3cr1FrQL2E6PmHc27c 8xHLMIW8tjGtzKxovv145KB5L9FzgQ33ra7FSwt8uFCX8NOloFvrJm2ODrU57qxi5LcT 9M+g== X-Gm-Message-State: AOAM533deD/eaJ91zJrCzsJo8z+vvfBEuS4QaKRd5/jVr1rHMxAFOJLH wCL0aElvFnCfLAe1jDIsxpRDJ2PC X-Google-Smtp-Source: ABdhPJzOm8CMORPDITmSaQ+OO0Vi/zxK09UWdW2yASvd8obAWLqfoxNMJbTnGJ+WTcAeyWaldyIuog== X-Received: by 2002:adf:fc81:: with SMTP id g1mr28772412wrr.156.1591133678750; Tue, 02 Jun 2020 14:34:38 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id g3sm405203wrb.46.2020.06.02.14.34.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 02 Jun 2020 14:34:38 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: Juri Linkov Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> Date: Wed, 3 Jun 2020 00:34:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87d06is84l.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42a.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2020 21:34:41 -0000 On 02.06.2020 02:01, Juri Linkov wrote: >>> Also could you please >>> add a command to run shell, in addition to the already added eshell. >> Would you like to do the honors? > No problem, done. Thanks! From MAILER-DAEMON Wed Jun 03 00:25:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgKxc-0002SW-Sr for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 00:25:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgKxb-0002SM-M2 for emacs-devel@gnu.org; Wed, 03 Jun 2020 00:25:03 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33900) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgKxa-00075A-2S; Wed, 03 Jun 2020 00:25:02 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jgKxX-0000I4-HX; Wed, 03 Jun 2020 00:24:59 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Dmitry Gutov Cc: stefan@marxist.se, emacs-devel@gnu.org, joaotavora@gmail.com, pcr910303@icloud.com, eliz@gnu.org, drew.adams@oracle.com, monnier@iro.umontreal.ca In-Reply-To: (message from Dmitry Gutov on Mon, 11 May 2020 05:54:30 +0300) Subject: Re: Imports / inclusion of s.el into Emacs Reply-To: rms@gnu.org References: <0c88192c-3c33-46ed-95cb-b4c6928016e3@default> <550fa43f-30ef-14f3-dd19-dd97a985a04e@yandex.ru> <95bddb34-2c3f-eff5-220f-16b726d97a69@yandex.ru> Message-Id: Date: Wed, 03 Jun 2020 00:24:59 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 04:25:03 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Today I came across a message remaining from May 11 and concluded I had better respond to it. I regret taking so long. > > > Right. And I'll posit that including s.el into GNU ELPA, by itself, will > > > not hurt any of these three goals. > > > > It would mess up the naming in GNU Emacs, making two incongruous > > systems. > Not in GNU Emacs, though. Yes, in GNU Emacs. If we have s.el in GNU ELPA under current conditions, that will put the s- namespace of GNU Emacs outside our control. (Indeed, someone claimed it is already de facto outside our control.) It is a big problem that other people, without even consulting us, can take major parts of the Emacs Lisp namespace away from us. Maybe we can correct this general problem in a general way with a system of namespaces. I hope so. But denying the problem is not solving it. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Wed Jun 03 00:25:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgKxy-0002v2-Mm for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 00:25:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48028) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgKxx-0002tV-Ak for emacs-devel@gnu.org; Wed, 03 Jun 2020 00:25:25 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33914) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgKxv-0007Is-V0; Wed, 03 Jun 2020 00:25:23 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jgKxq-0000Kf-Pm; Wed, 03 Jun 2020 00:25:19 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Marcin Borkowski Cc: van@scratch.space, emacs-devel@gnu.org In-Reply-To: <87h7wmi7pj.fsf@mbork.pl> (message from Marcin Borkowski on Mon, 11 May 2020 21:37:28 +0200) Subject: Re: Some ideas with Emacs Reply-To: rms@gnu.org References: <87d0dbszjn.fsf@mbork.pl> <8736e4titj.fsf@mbork.pl> <871rtoti9w.fsf@mbork.pl> <87v9qysxbb.fsf@mbork.pl> <87tv6hq62w.fsf@mbork.pl> <87h7wmi7pj.fsf@mbork.pl> Message-Id: Date: Wed, 03 Jun 2020 00:25:18 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 04:25:25 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Please forgive me for taking so long to respond. I am backlogged 500 messages I have not yet seen. I just saw your message today. I wrote: > > Turning to the broader ethical issue, I think that _all_ textbooks, > > indeed all educational resources, ought to be free -- because they > > exist to be _used_ for a practical job: f teaching or learning a > > subject. You wrote: > Quite the contrary - I would be suspicious about free educational > resources. > Why is that so? Because if someone provides me with information (be it > of educational nature or otherwise), and I do not pay for it, this means > that it is quite probable that someone else paid for it. And the goals > of the "someone else" may be very different from my ones. I believe we are miscommunicating. When I say "free" it refers to freedom -- "wolne" in Polish. I believe you are talking about whether you have to pay for a copy -- "darmowe". Our definition of "free" for textbooks is basically our definition of "free software"; see https://gnu.org/philosophy/free-sw.html. Special interests with lots of money are already capable of pushing their positions into textbooks. When a nonfree educational resources is published, if it contains bogus claims, you can't change them. If the resource is free, you can make a modified version and distribute that. > But I would *never* give my child a "free history textbook" > (for example) unless I made really sure that the author did not try to > push some nasty agenda with it. The non-wolne history textbooks in the US have such problems too. The book Lies My Teacher Told Me, by James Loewin, explains some. There are strong partisan pressures on what to say school textbooks. And not just in history -- also in biology, geology and medicine. But this is getting off topic for GNU. For decades, our detractors have claimed that free software can't exist, or that it has to be inferior, based on arguments similar to the ones you have made. Meanwhile, there are now many educational resources which come close to being wolne without, alas, actually being wolne. They are called "open educational resources". Many come from universities that could just as well make them wolne. See stallman.org/articles/online-education.html. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Wed Jun 03 03:45:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgO58-00013p-DS for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 03:45:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgO56-00012j-JD for Emacs-devel@gnu.org; Wed, 03 Jun 2020 03:45:00 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35745) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgO56-0003b2-65; Wed, 03 Jun 2020 03:45:00 -0400 Received: from lns-bzn-40-82-251-163-54.adsl.proxad.net ([82.251.163.54]:37906 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jgO4z-0005sZ-05; Wed, 03 Jun 2020 03:44:53 -0400 Received: by guerry (Postfix, from userid 1000) id 3178F1A60817; Wed, 3 Jun 2020 09:44:50 +0200 (CEST) From: Bastien To: Eli Zaretskii Cc: sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <875zcas71l.fsf@gnu.org> <83k10pcrjv.fsf@gnu.org> Date: Wed, 03 Jun 2020 09:44:50 +0200 Message-ID: <87d06g385p.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 07:45:00 -0000 Hi Eli, Eli Zaretskii writes: >> Install Emacs packages > > I think "Install Add-On Packages" is better. Add-On and Packages sound a bit redundant to me, but it's okay. >> Add new package* sources >> >> * Not sure whether this should be package or packages. > > What would this item do? Variable customization is not a good > candidate for a menu item. My motivation while pushing for a change here is to make it easier for users to customize package-archives, something I've seen asked very often. If an item pointing to the variable customization is too "direct", then I suggest to move the item "Find extra packages" from the Help menu to this new "Install Add-On Packages" menu. (If we go that way, then we should probably also move the "Search built-in packages" item.) -- Bastien From MAILER-DAEMON Wed Jun 03 04:12:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgOVl-0005aV-6h for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 04:12:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgOVg-0005Y2-06 for emacs-devel@gnu.org; Wed, 03 Jun 2020 04:12:28 -0400 Received: from smtp1a.inetd.co.jp ([210.129.88.11]:51840) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgOVe-0000tq-A6 for emacs-devel@gnu.org; Wed, 03 Jun 2020 04:12:27 -0400 Received: from localhost (42-146-134-146.rev.home.ne.jp [42.146.134.146]) by smtp1a.inetd.co.jp (Postfix) with ESMTPA id 133D26C; Wed, 3 Jun 2020 17:12:22 +0900 (JST) From: Ikumi Keita To: Stefan Monnier cc: emacs-devel@gnu.org Subject: Re: Giving "text quotes" syntax in font-lock-syntax-table only In-reply-to: References: <50114.1589957638@localhost> <55185.1589981051@localhost> Comments: In-reply-to Stefan Monnier message dated "Tue, 02 Jun 2020 14:46:33 -0400." X-Mailer: MH-E 8.6+git; nmh 1.7.1; GNU Emacs 26.3 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <25496.1591171941.1@localhost> Date: Wed, 03 Jun 2020 17:12:21 +0900 Message-ID: <25497.1591171941@localhost> Received-SPF: pass client-ip=210.129.88.11; envelope-from=ikumi@ikumi.que.jp; helo=smtp1a.inetd.co.jp X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 04:12:22 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 08:12:29 -0000 Hi Stefan, >>>>> Stefan Monnier writes: > I see you (plural) decided to switch to highlighting math elements using > regexps rather than the syntax-table. That sounds like a wise choice. Thanks. It is lucky that we have texmathp.el, a smart utility created by Carsten Dominik. It gives us a way practical enough to identify whether a given position of latex document buffer is in math mode or not. > Maybe this actually argues that `font-lock-fontify-syntactically-region` > should use `font-lock-syntax-table` rather than `syntax-ppss-table` and > should refrain from using `syntax-ppss` when that syntax-table is > different from that of syntax-ppss. Maybe. I suppose that it should be documented, for the time being, that SYNTAX-ALIST entry of `font-lock-defaults' may not introduce dratistic change in syntax table such as changing assignments of "string quotes" syntax. Regards, Ikumi Keita From MAILER-DAEMON Wed Jun 03 06:24:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgQZA-0003R9-GP for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 06:24:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55598) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgQZ9-0003R2-RZ for emacs-devel@gnu.org; Wed, 03 Jun 2020 06:24:11 -0400 Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:41788) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgQZ8-0002Kb-Mu for emacs-devel@gnu.org; Wed, 03 Jun 2020 06:24:11 -0400 Received: by mail-ua1-x930.google.com with SMTP id a10so658057uan.8 for ; Wed, 03 Jun 2020 03:24:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=2wR7kuaDbprZeaXUMMn4niH/BoyJa1gtbNKxiqF7T5E=; b=Pm0AzsbWdwkeQmcwHmEmTuqYPNrPQ20OXFloDL/IykQ5yO7+Ywn7XYLgERrFx3WfZL Zaosher/ukViv16FrA7i5QZe5y161CVeRL1uu0rbMHIZ3nTUmiEodiwn+nTD7L8TDR0P uXT8mVMQuJLDv6PtaRE3jextxQpowBn8S1niUtBVgP6Uepuu7ctWsnFfFB2YGxdPfbb7 ro6eAtwF1GkQfYBVuJqHJTiTCjjTjOelmesND0UsjSb2TKhb59zj8lOmVssk6DYlYacJ 85kub9qm/YeXWmD8x4oYJ7o3vHvUKBTCd4e2JhF4yGyQTrmZFpSlRLraDkpqG/3MltdW WnsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=2wR7kuaDbprZeaXUMMn4niH/BoyJa1gtbNKxiqF7T5E=; b=NPEVQzETcUxuc7uTel8aauWfugqQQHGCECiKjoZ0/j4oNLWwUAiTnrqzC0fwhCdgxX RnHJH5v0MWZyLQlLT96+ylaUXlCvwXsDM430j8PbN5TyAHKPOflH7vdOBhBdW2OEVdvK dBuH2I07awzS5JrDrmRiN11r2RUTVqgOnvE5YnZ0Y7sVUP6HnaCKemYqNsneqAvEpZCN 1MFAHY07IVtmH+K6tbLwjISUdHckXJYnztntN3BUIYqwabHUJs0bMj8VHev+uAOnLxjb 6NAtIv6eDWJ+TI6uOvCaekyT8HeIkp1yL7TUQ8dKxOhMXN15B4JPMo3j5y9BOOiuBARc 0F3A== X-Gm-Message-State: AOAM532kPCN5AMkWqBmbLclCWUADqT1LT8LS0apoW6lg2FYTRr0UPa0G lFcp44oFNEEE9heD9XRpgNE3DvDnYTScM+wFNl+vzVyQPg== X-Google-Smtp-Source: ABdhPJxTIC5iwlfHI6S5OrK3B0KrxCNGG01EHIQ37WEgfpSCZiJlcXDTOIL0zP/ImcqNw95ZbJbE52L3f2YvnphzLjg= X-Received: by 2002:ab0:7715:: with SMTP id z21mr10738434uaq.139.1591179849218; Wed, 03 Jun 2020 03:24:09 -0700 (PDT) MIME-Version: 1.0 From: "numbchild@gmail.com" Date: Wed, 3 Jun 2020 18:23:42 +0800 Message-ID: Subject: [BUG] ov property line height failed on lone length line when exceeded window width To: Emacs developers Content-Type: multipart/alternative; boundary="000000000000afbd8905a72b6d09" Received-SPF: pass client-ip=2607:f8b0:4864:20::930; envelope-from=numbchild@gmail.com; helo=mail-ua1-x930.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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 10:24:12 -0000 --000000000000afbd8905a72b6d09 Content-Type: text/plain; charset="UTF-8" As my last email is rejected by mailing list moder. So I uploaded attachment files to other servers. And post email again. I checked emacs-devel mailing list archive, found my email is not sent successfully from mu4e client. So send on gmail again. At first, let me show the problem I meet. Here is a recorded video "simplescreenrecord*.mkv". I tested this with Minimal Emacs Config. You can see, the original line height is failed after I split window (which window width is decreased). link: https://pan.baidu.com/s/1QMz4N7JVXIGswOAXYXcpSA download code: hy9a I also attached the material "org-agenda.org" of reproducing the environment. I have a configuration which add colored blocks on Org Agenda headlines. Here is my Minimal Emacs Config "emacs-minimal.el" https://gist.github.com/stardiviner/9a56cdf5dea90e1466df87f9f1cc5f95 [stardiviner] GPG key ID: 47C32433 IRC(freeenode): stardiviner Twitter: @numbchild Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433 Blog: http://stardiviner.github.io/ --000000000000afbd8905a72b6d09 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
As my last email is rejected by mailing list moder.
<= div class=3D"gmail_default" style=3D"font-family:trebuchet ms,sans-serif"><= br>
So I uploaded attachment files to other servers. And post email ag= ain.

I checked emacs-devel mailing list archive, found my em= ail is not sent
successfully from mu4e client. So send on gmail again.
At first, let me show the problem I meet. Here is a recorded video"simplescreenrecord*.mkv". I tested
this with Minimal Emacs C= onfig. You can see, the original line height is
failed after I split win= dow (which
window width is decreased).


I also attached the m= aterial "org-agenda.org" of= reproducing the
environment.

I have a configuration which add co= lored blocks on Org Agenda headlines.
Here is
my Minimal Emacs Config= "emacs-minimal.el"



[stardiviner]= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <Hack this = world!>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GPG key ID: 47C32433
IRC(freeen= ode): stardiviner =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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Twitter:=C2=A0 @n= umbchild
Key fingerprint =3D 9BAA 92BC CDDD B9EF 3B36=C2=A0 CB99 B8C4 B8= E5 47C3 2433
Blog: http://stardiviner.github.io/
<= /div> --000000000000afbd8905a72b6d09-- From MAILER-DAEMON Wed Jun 03 07:07:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRFG-00020j-Pb for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:07:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRFF-00020a-4C for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:07:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39395) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgRFE-0002D8-Qr; Wed, 03 Jun 2020 07:07:40 -0400 Received: from [176.12.186.57] (port=55592 helo=[10.161.9.198]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jgRFD-0003Yh-Rc; Wed, 03 Jun 2020 07:07:40 -0400 Date: Wed, 03 Jun 2020 14:07:36 +0300 User-Agent: K-9 Mail for Android In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width To: emacs-devel@gnu.org, "numbchild@gmail.com" , Emacs developers From: Eli Zaretskii Message-ID: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:07:41 -0000 On June 3, 2020 1:23:42 PM GMT+03:00, "numbchild@gmail=2Ecom" wrote: > As my last email is rejected by mailing list moder=2E >=20 > So I uploaded attachment files to other servers=2E And post email again= =2E >=20 > I checked emacs-devel mailing list archive, found my email is not sent > successfully from mu4e client=2E So send on gmail again=2E >=20 > At first, let me show the problem I meet=2E Here is a recorded video > "simplescreenrecord*=2Emkv"=2E I tested > this with Minimal Emacs Config=2E You can see, the original line height > is > failed after I split window (which > window width is decreased)=2E >=20 > link: https://pan=2Ebaidu=2Ecom/s/1QMz4N7JVXIGswOAXYXcpSA download code: > hy9a >=20 > I also attached the material "org-agenda=2Eorg" of reproducing the > environment=2E >=20 > I have a configuration which add colored blocks on Org Agenda > headlines=2E > Here is > my Minimal Emacs Config "emacs-minimal=2Eel" >=20 > https://gist=2Egithub=2Ecom/stardiviner/9a56cdf5dea90e1466df87f9f1cc5f95 >=20 >=20 > [stardiviner] GPG key ID: 47C32433 > IRC(freeenode): stardiviner Twitter: @numbchild > Key fingerprint =3D 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433 > Blog: http://stardiviner=2Egithub=2Eio/ Can you please describe how you set the overlay, or better yet, show the c= ode which does so? Did you per chance put the overlay on the part of the l= ine that is not shown when you split the window? From MAILER-DAEMON Wed Jun 03 07:27:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRYk-0008DR-Rl for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:27:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34238) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRYi-0008DB-Nu for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:27:48 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:36380) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRYd-0006ep-T3 for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:27:45 -0400 Received: by mail-wr1-x431.google.com with SMTP id q11so1966488wrp.3 for ; Wed, 03 Jun 2020 04:27:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=EzUchh/K3K55O+Gsivd5L5bq2PjYY3geRXJ2Hc5k7mI=; b=qCuve17gcID3tW/EzVT3FcZFa13qDOIwXOczUaD3VBIbr3TeTRy2sE7y5wnMLJbW1x f8vWF4OAtUeveO7J+FOwyj3NyAOhBdE6dgHUIXSX2v8cwLvkkfYryMuDkAvKz8cjlqHZ ZuDY9XSfPfSyX5Hqa6HsPTHNaPf6POwg92QRhlFGIwgA2Mx1UZ6RNE0g7RhijJBHtpw4 fjG2NeBPyo/w/Mh4uigfGVjicRhEIY9ugrg6eVM+uNU6n2ZqLYexKMAE+5yMh3qlcRAs S9+rNMvd1zzY16UhVAgvioNqiNJlvbEdFZ8aZyn41Imi8cPoF+uHT79k8AYPQ8lGI0rG +Ebw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=EzUchh/K3K55O+Gsivd5L5bq2PjYY3geRXJ2Hc5k7mI=; b=KrzYYgpGU1b2i6MF75BooIHukNLJsM2k5L2eCvbde6a3cXHwpPvxLncvusQQX/1PPb cUoUB+/8Q6iZpU+Cx57gLyKd4gxu555+D78fChAJrrE0/bROBj14wSQuo6QpthIXZIvt StGg+h4BvJE8lO9yxFa/ICO4ncpQGhH+qT6U3hUVM2MlPxk9A0Z7BHES6KARE0xDIIkb KScsUWgX3dbwrv6wCjaT6IsvmBeRLpUr6kFNQzqVinhhnaOZhgorjWL30kiI9dy4TtmU gfFOZgOKYQg1mBKCDcWjxs6GPQWZ0o/tCWavo4vHZtQtlsDm63+dkGz9b8vTeRphTvta FezA== X-Gm-Message-State: AOAM533/cGswsT+TZS82BjkpSK70eVuiH3pihNesJRTVv5rxYM/i65pg Q7b3tAC9xAxJ9lr5joQCidTq4A== X-Google-Smtp-Source: ABdhPJyTI/zR0U7zTG8qlNim+Btg0c2Wi0DhHNEFC20DqWSpniRyDZiG4RstG2HxHuxOfGUBmk7T1w== X-Received: by 2002:adf:e30e:: with SMTP id b14mr29638835wrj.334.1591183658083; Wed, 03 Jun 2020 04:27:38 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id e12sm1845791wro.52.2020.06.03.04.27.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 04:27:37 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: emacs-devel , Simen =?utf-8?Q?Heggest=C3=B8yl?= Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> Date: Wed, 03 Jun 2020 12:27:30 +0100 In-Reply-To: <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> (Dmitry Gutov's message of "Fri, 29 May 2020 02:29:35 +0300") Message-ID: <87lfl42xul.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::431; envelope-from=contovob@tcd.ie; helo=mail-wr1-x431.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:27:49 -0000 Dmitry Gutov writes: > On 29.05.2020 02:05, Basil L. Contovounesios wrote: > >> Could the contents of the project-list file comprise easily readable, >> printable, and even extensible sexps? >> Could project-switch-project reuse read-multiple-choice or similar? > > I'm attaching a patch that makes it use read-multiple-choice, check it > out. Thanks. > But I'm not sure the result looks better than what we have now. You're right, it doesn't look as good, and what we have now is fine. But as far as I'm concerned that's a bug with read-multiple-choice that should eventually be fixed so that it can be used in more places. With that in mind, I wonder whether project-switch-commands should use character rather than string keys. Or would that be too limiting? -- Basil From MAILER-DAEMON Wed Jun 03 07:28:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRZi-0000b7-3V for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:28:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34530) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRZh-0000b0-G9 for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:28:49 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:36600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRZg-0006ww-5V for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:28:49 -0400 Received: by mail-wm1-x32b.google.com with SMTP id d128so1654275wmc.1 for ; Wed, 03 Jun 2020 04:28:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=ENe3mix0puJtBWNmezBqVuWGi6XS6RHDArmS+MIBR8A=; b=gMV6Da1sxfLgkcSE8kbacU2GucqMhq7mvRQBwEwlKKhQlPKgbuQSpUXhpS0O/ws+l3 2Dkc3ua7tTh4mQnU8yVtz+2lh5YdCo9gn6JZUm4t2ag0Zk56j1XQsvjfcgsg38LH5M3v rDB6VK9IRO0UpwFcHHXfyd8vUMoXEbqrML6DIIM4jMen+9JXy/0vh0lyRRfJtoOWnuGz 2I3MWNVp61HylgXn26rm1dUVxJuQ0kd4uBHF3QFW3TvZ3M5fbM/r4HOC30fJvPSZY1n7 EyvIfrB+9C5EHX5+BSeL7gJTPcXbY1m7mHyXeAVtlOoXO5GiEMSduJ5Iz7BLShYeKeLG wsWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=ENe3mix0puJtBWNmezBqVuWGi6XS6RHDArmS+MIBR8A=; b=GAZ1KQPKFs4ezt+OH7MTGZ+EV0639fWvOmJG669KStVzB3IWUaY7Xw5QEMjAQ8CHns Uy14Vcy6eKPiE975k0KhOhuttjVnQOTULoUFe7FRXDJ1Fu3oNl902005CXokjWhy/lA0 9BCNtkpWAwYuH2zeRNAB+4m4DnwAlspgGvi91gSRzY5VAddz3UGUuxiHgwzxylv70Rp8 0o3VECRDXTp6d0W653C/8aXynN95z5+Kq7geGZ/pAFzocv4FdFv/HrAp5GTXDnNa6OE+ jbKeIiWCCMbj0O+OGQ+WEFBMe5QLv4GRDcEa4rs6MSoKwxMNHODgmghkJCfAdKqx8VeO CfJw== X-Gm-Message-State: AOAM530FcUp0mxxU6J+0kV84K1TGKs5fr6u1IsSiMKDSWNzCWBpuGv6J JW9N6C1g+05d2di2do/1V78hxA== X-Google-Smtp-Source: ABdhPJwPbW5ds3PWcQpQZ0LEJsxOdxfy7KVuwRF6uevSdXbsHldQphXtXeuHXF4GuIemQxmH1X/wRg== X-Received: by 2002:a1c:2643:: with SMTP id m64mr8143955wmm.158.1591183726215; Wed, 03 Jun 2020 04:28:46 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id c65sm2631962wme.8.2020.06.03.04.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 04:28:45 -0700 (PDT) From: "Basil L. Contovounesios" To: Simen =?utf-8?Q?Heggest=C3=B8yl?= Cc: "Philip K." , emacs-devel@gnu.org, dgutov@yandex.ru Subject: Re: New feature in project.el: Remembering the previously used projects References: <87wo4tn2ap.fsf@warpmail.net> <5ed68784.1c69fb81.61518.35eeSMTPIN_ADDED_BROKEN@mx.google.com> Date: Wed, 03 Jun 2020 12:28:43 +0100 In-Reply-To: <5ed68784.1c69fb81.61518.35eeSMTPIN_ADDED_BROKEN@mx.google.com> ("Simen =?utf-8?Q?Heggest=C3=B8yl=22's?= message of "Tue, 02 Jun 2020 19:04:52 +0200") Message-ID: <87eeqw2xsk.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::32b; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32b.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:28:49 -0000 Simen Heggest=C3=B8yl writes: > "Philip K." writes: > >> I would have prefered read-multiple-choice, because the function is >> more extensive than "just" a key-reading-loop, and seems to catch more >> edge-cases. > > Me too. The only gripe I (and Dmitry) had with it was that we preferred > the layout of the current interface. For me it's because I find it hard > to distinguish the bold letters used by read-multiple-choice. Would it > be an option to change read-multiple-choice's prompt to use brackets to > distinguish key choices instead? If more people prefer it, making it the > default, or if not, at least adding it as an option? In that case I > wouldn't hesitate to change project-switch-project to use > read-multiple-choice. +1 for making read-multiple-choice more flexible (and robust ;). --=20 Basil From MAILER-DAEMON Wed Jun 03 07:29:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRZz-0000u1-9w for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRZx-0000sT-T9 for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:05 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:35628) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRZx-0006yt-4d for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:05 -0400 Received: by mail-wm1-x32a.google.com with SMTP id q25so1664671wmj.0 for ; Wed, 03 Jun 2020 04:29:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=tn61VjkcHLnl5VJuvxgWLc05pXLqL0Ml6nHOgZOWXPw=; b=MYqdHUXGwCPafmGxuM5Sl+tPBicPINTASZOMTGa7t60C23AuYjSudKBJqAPQ6DptZe JzcyaSrRmTehNCbQ079A6PFViNokyN+TBqA+mMLvWmls9Yx8enpJZmDHLhuJ+HmuJwuA P7S0NHSKZMHYiO1DFgWP9x4b9TUT3DvFvaP1uFQLvxA5qywcnl30LmDDQmc8V5OXEqZc ejzzsCX3d9dD/3ylfG1fzZmFRfv+jJlLrdYy7qGwkqVF8WUY7KAZY72YKzmek77c3ucM Vmsr4iSeGsVCzXPC8vBsOf4xhgQF5MkRDrLnui4WRJGGlq29jix8PtsWnvfW71z2g42s 39qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=tn61VjkcHLnl5VJuvxgWLc05pXLqL0Ml6nHOgZOWXPw=; b=GRTxIRKacqqBFn4WGpp0ejFbbQ96ipBx87LmX7/yPhWx+XuyW22ShyJNBJ9/kOHQ6r 4q7UEX1oDNzzUmMQJxQ5ExlI0Z9VplOimv3eg+l9b4kJLdqLxRyH/xkzuzsxT3d0V+JK wtvSauKi507JvzukcRpGlyI4RjGzhYmOY36VsmeFP6oQ8U151VAhpVoulIL4QUWac4yl N6Z2bNJ3EcESqEEbqBaTb+yNI3FXMSMAjyP8iyXXDMdpD2uE6iJKC2++WKG27kX4wkF8 gMfC9cnhuCNBIW2VwZSJgrUf84jbTy7iulfG2mPD14lpsYIPt0kU0nRrMhcYVjTiVhXM sjXA== X-Gm-Message-State: AOAM533ZZ6jS+Dy5USG7EGWbNSndz+45+ibmG8MWnGbOgIX8nIpNhgrz ZaGOjhQZOQEPiyTZpYt6cJ2ikJutvghzLQ== X-Google-Smtp-Source: ABdhPJz29eioUBRooosfz/8lkn1apHs6fmkJVYBPH+s1ccbOP6YDEF0UDP1585uENQIkf0fIshkjIA== X-Received: by 2002:a7b:cd96:: with SMTP id y22mr8465645wmj.56.1591183743851; Wed, 03 Jun 2020 04:29:03 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id c16sm2957410wrx.4.2020.06.03.04.29.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 04:29:03 -0700 (PDT) From: "Basil L. Contovounesios" To: Simen =?utf-8?Q?Heggest=C3=B8yl?= Cc: Juri Linkov , "Philip K." , emacs-devel , Dmitry Gutov Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <5ed68fe1.1c69fb81.45e50.0c7cSMTPIN_ADDED_BROKEN@mx.google.com> Date: Wed, 03 Jun 2020 12:28:56 +0100 In-Reply-To: <5ed68fe1.1c69fb81.45e50.0c7cSMTPIN_ADDED_BROKEN@mx.google.com> ("Simen =?utf-8?Q?Heggest=C3=B8yl=22's?= message of "Tue, 02 Jun 2020 19:43:32 +0200") Message-ID: <87d06g2xs7.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::32a; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32a.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:29:06 -0000 Simen Heggest=C3=B8yl writes: > Juri Linkov writes: > >> Please use a more future-proof format like is used by saveplace.el, >> for example, in ~/.emacs.d/places it's saved as: >> >> ;;; -*- coding: utf-8; mode: lisp-data -*- >> (("/tmp/" >> (dired-filename . "/tmp/file")) >> >> that allows adding more metadata in future. > > Looks good to me. If Dmitry agrees I can start working on changing the > format. > > Maybe it should be renamed from "project-list" to simply "projects" too > while we're at it, to match similar files, like "places", "bookmarks", > and so on? SGTM. Thanks, --=20 Basil From MAILER-DAEMON Wed Jun 03 07:29:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRa2-0000xb-Fn for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRa1-0000wP-Cb for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:09 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:39980) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRa0-0006zH-JM for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:29:09 -0400 Received: by mail-wm1-x329.google.com with SMTP id r15so1646533wmh.5 for ; Wed, 03 Jun 2020 04:29:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=8oWIU8KyPvdthYy1SCX9VNPoQR8pyD9KhchaHNSShkc=; b=jROmVkFbNUH0NmqjDLdeggsKhwYkTAZoFXXahteDGiJbopb0A+qNa58JeaokW5/T0w scHymhdn2lFLn2pBZcTX2aJ1UYcfxTVJvFvzzODcSXlX6U8kZxs1+BmbOfk7EezUqELs DmFRHjjFErQwGXQ5WYa0Hnu3Fz4aAEM1iS5PuXDaRlivMyqpQa/3XbkdO0+2A6lP8swI jxlv58BEgRPZsu3mbWR5PKEgsKJgekaBj8CjTfnqQ64z4g143hU51NO4ti5IVpKhQ4aZ Tgpdzx5YkXhT0nx15i3aFIaTV3fhwzVq4Z3pX1OhtwJ7OyTxUSCabzAJmfR28scHKXjb RPeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=8oWIU8KyPvdthYy1SCX9VNPoQR8pyD9KhchaHNSShkc=; b=lE7MnmMNbLu0U8kgx2eyfIxx4ycqoDVt4ZJkPf1VtUTUtkW3P+bYI3fVGjDU/BV1vq iNcZi9GiLM8FS9rrxDgaY5w0yOsMqM9r11n+uuFpmqEDS4BKNcmamOh5b9cgaXignY6F 3lSUqgp3GLLFfdLsJh6cJ5ICTIFfTxYd9IUX+z5ULLPHHjupAVZAG2z2eS2JBcpV6a6Q iIr8aO8oVCpmyU1Y3RY0bf1xH/Mb6M99OC98dBpsw4gkOxPTiCK89HBlJ37r3u53OLxN faOyYzrz3lFLIn2OyUOJDRm62jCMtiCDZ9Py73hCr6pWGk6/0ejp7bD4weuOV0YDSygX lG3A== X-Gm-Message-State: AOAM532gbN0Bq/09R7fvgcXaM3a4rDksLLDfS/kMmhxLwP98fRCnVA7e Pv6RWZuj28L1rnyVgWJ6Jql5+g== X-Google-Smtp-Source: ABdhPJysFz2hbe5PIuCZCbm/qdgZRTMxpZlYpvH/eX1v40A3G5eOdgo35K01g9JGwJLE9HMtN6y9Kg== X-Received: by 2002:a7b:c306:: with SMTP id k6mr8039921wmj.40.1591183717106; Wed, 03 Jun 2020 04:28:37 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id 23sm2443907wmg.10.2020.06.03.04.28.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 04:28:36 -0700 (PDT) From: "Basil L. Contovounesios" To: Simen =?utf-8?Q?Heggest=C3=B8yl?= Cc: Dmitry Gutov , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <5ed13064.1c69fb81.4bf5e.dc8eSMTPIN_ADDED_BROKEN@mx.google.com> Date: Wed, 03 Jun 2020 12:28:21 +0100 In-Reply-To: <5ed13064.1c69fb81.4bf5e.dc8eSMTPIN_ADDED_BROKEN@mx.google.com> ("Simen =?utf-8?Q?Heggest=C3=B8yl=22's?= message of "Fri, 29 May 2020 17:54:45 +0200") Message-ID: <87ftbc2xt6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::329; envelope-from=contovob@tcd.ie; helo=mail-wm1-x329.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:29:09 -0000 Simen Heggest=C3=B8yl writes: >> On 29.05.2020 02:05, Basil L. Contovounesios wrote: >> >> Could the contents of the project-list file comprise easily readable, >> printable, and even extensible sexps? > > I guess it could, but do you have any immediate use case in mind, or > were you thinking about easier forward compatibility in general? I was thinking in terms of both Emacs' natural lingua franca, the sexp (i.e. what's easiest to read from and write to disc), as well as forward compatibility. (What happens if project.el decides it needs to store more information - is it going to start littering user-emacs-directory with more files?) > I modeled the current approach after org-agenda-files, thinking that the > scheme with one project directory per line would be the easiest to edit > by hand. Ideally users would edit the list via interactive commands that keep disc and memory contents in sync, rather than by editing the file directly. But either way, Emacs is good at editing sexps too. There's no need to follow Org's example here. >> Could project-switch-project reuse read-multiple-choice or similar? > > There's definitely an advantage to reusing a function like that, > especially since it provides a more unified interface for the users. > > I tested it with Philip's patch, but I have to agree with Dmitry in that > I prefer the current interface where the key choices are presented in > brackets next to the labels. I find it much easier to read the choices > at a glance compared to when the keys are made bold in midst of the > label texts. Also the "Find regexp" choice doesn't have an "s" in it, so > in that case read-multiple-choice puts the "s" in brackets instead, > making it non-uniform with the layout of the other choices. > > The current approach where button choices are kept apart from the labels > is inspired by the Org Export Dispatcher and Magit's many menus, which I > think are excellent interfaces. If it turns out that more people, like > Dmitry and myself, like this approach better, maybe > read-multiple-choice's layout could be changed? Indeed, I think it would be nice to eventually be able to use read-multiple-choice, but it's not quite up to scratch yet. Thanks, --=20 Basil From MAILER-DAEMON Wed Jun 03 07:39:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRkE-0006hN-Q0 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:39:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36784) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRkC-0006gr-QV for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:39:40 -0400 Received: from forward102o.mail.yandex.net ([2a02:6b8:0:1a2d::602]:34822) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRkA-00012V-K9 for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:39:40 -0400 Received: from mxback6g.mail.yandex.net (mxback6g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:167]) by forward102o.mail.yandex.net (Yandex) with ESMTP id AB0B56680776; Wed, 3 Jun 2020 14:39:32 +0300 (MSK) Received: from myt6-016ca1315a73.qloud-c.yandex.net (myt6-016ca1315a73.qloud-c.yandex.net [2a02:6b8:c12:4e0e:0:640:16c:a131]) by mxback6g.mail.yandex.net (mxback/Yandex) with ESMTP id a36Pd6Qo8h-dW8u4IOT; Wed, 03 Jun 2020 14:39:32 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591184372; bh=myErmVKTt+GMa8rjdZJt0zcyGJljv9AdQ506LzdiK6A=; h=In-Reply-To:To:From:Subject:References:Date:Message-ID; b=nY/IAvgK97khDmwN9kYzmlBMDXCAMVa8QymZ2Eh+70ToSAYJr+l0gjKyneA3N75v3 VKlbsnvUqs7QDyZJ3w/U1N1mCC0ZmMGzz9zAhxG8Mwy4ve/ZZ2bwYY8PIxVQEBtycE 8rRjEaj/5vz5VQAZ/LYgnQGM+PBESx1Nxgf6RVw4= Authentication-Results: mxback6g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt6-016ca1315a73.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id 9duhvrcEpg-dVkuDOpR; Wed, 03 Jun 2020 14:39:31 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion From: Konstantin Kharlamov To: ndame , Emacs developers Date: Wed, 03 Jun 2020 14:39:31 +0300 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::602; envelope-from=hi-angel@yandex.ru; helo=forward102o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:39:41 -0000 Hello, my 50 cents. The most missing feature, which has almost every text editor out there except Emacs, is no doubt sane autocompletion. "But there are autocompletion plugins!" someone might say. Okay, here's the problem: due to lack of multithreading, they usually set a timeout before autocompletion appears. This makes plugins limited to just one usecase: when a user doesn't know what to type next (like, doesn't remember exact method name, etc.). But most often people know what they want, and they type very fast. In this case what autocompletion should provide is prediction. And Emacs autocompletion plugins are failing bad at this: if you type fast, this means timeout is never expired, and completion never appears. I could set timeout to 0 (which I used to do some years ago), but this often results in terrible lags. And it gets worse: even if timeout expires, depending on completion backend you can get a freeze. For example, how about completion from tags backend, where the TAGS file is 183MB in size! This is the actual TAGS file I got from LibreOffice project. Lack of such simple but immensely useful feature is so disappointing that some years ago I was trying to migrate over to some other editor. And when I was asked "is it worth learning Emacs", I was recommending Vim. Because, while I use Emacs with Evil mode, and I admit this is much more powerful than Vim with plugins (which I use too for quick edits in terminal), but sane autocompletion is something anyone would expect to work out of the box. And the fact it not only doesn't work OOTB, but there's no way to make it even work, will sure turn away users quite quickly. On Mon, 2020-05-11 at 20:09 +0000, ndame wrote: > There is a discussion on Reddit about sponsoring development of > multithreading in Emacs, and people there say it's too hard, takes a > lot of time and it doesn't even bring that much benefit to the user. > > If this is the case (is it?) then what are those other features which > could bring much more tangible benefits for the user and assuming > somebody works on them full time sponsored by the community they can > be implemented in, say, a few months? From MAILER-DAEMON Wed Jun 03 07:47:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRre-0004SG-FP for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:47:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38462) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRrc-0004Pi-E4 for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:47:20 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:43603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRrb-0002sO-Gl for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:47:20 -0400 Received: by mail-wr1-x432.google.com with SMTP id l10so1998591wrr.10 for ; Wed, 03 Jun 2020 04:47:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=3/jzpXP85q7V+UJO1jIRJvepNv+A7osZHLP8t5eKUqg=; b=IQcz0OWB1ABCpOlIoqzDxVwLClSiCf8Tp8UwmXU++YQxlMFx90mvaCVUgFkxevuJwJ wiv3P7ES2b0XA0gVOhL+hDutC0hLpH7iRN35lMvD+reNe0bboUhZFP8Mbmr5YVDubxc9 X2+wx9VCdg6PVxqLHybKUhDNzrQoQbsq09KLNTIGUVwv8aUgvABHHoqQwjdFwEwsPrsd 6b1mUXW2EmeHmXJWvk56AEFKEMdGGgMmoZS7vVoito+6BLD678VLoMSOFf8Lnmztywyo E+qQhrZc4BRnCKdGrlMIXm0EnRHNIhOMKBGg6gezotuuLt6WnK0C/S0BYcLZQpM3z94N hEoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=3/jzpXP85q7V+UJO1jIRJvepNv+A7osZHLP8t5eKUqg=; b=VwCWGQhMzsY0UIGp/0QUeCnPx8nFGH1cHGrb0JJZAz1gu0xnnfqSYovY5eq1uvFpnI xKQ6rXZia0lk4cMuNBsF2d6cewtRlwf8ghCjfH++I2XspZIH1WTH/8KzdxLGqL3Y2tpl 2WgXTZgzGVSm1f5AWW7BmFcNtgImM8t7kFDq7i/o73X/T7nMHnecO2fWNoZi+6+8I88V 4Mm2w1rsaQBOO1g1Fpu0ch7fo8yWn3qOVx8Ue7XZb0GoHggGG/g7iM7NfXHVM6KOMFpm DOg7hcfhKCtA1bg7f9ymJ1cfBz0ny4y3QbIPOhgy1rQ/MgujxzIyB+dNW3NgkRxbeAKn ZKzw== X-Gm-Message-State: AOAM531IxommG1Bh9YyETYQauSZ36mPKk+MqI7OtNy3WE2j3R9Y8cnCN 80zP8dQBjrGW9LCWrjG6nYg= X-Google-Smtp-Source: ABdhPJzWHiKDg710iiqGDf4aOkuo5R/OEuwf113650ONoSYlRJrwFlUnp35b1grBMgEZEoQc66H5dw== X-Received: by 2002:a5d:4a04:: with SMTP id m4mr33528444wrq.153.1591184838002; Wed, 03 Jun 2020 04:47:18 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d18sm2975352wrn.34.2020.06.03.04.47.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 04:47:17 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: "Basil L. Contovounesios" Cc: emacs-devel , =?UTF-8?Q?Simen_Heggest=c3=b8yl?= References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87lfl42xul.fsf@tcd.ie> From: Dmitry Gutov Message-ID: Date: Wed, 3 Jun 2020 14:47:15 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87lfl42xul.fsf@tcd.ie> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=raaahh@gmail.com; helo=mail-wr1-x432.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:47:20 -0000 On 03.06.2020 14:27, Basil L. Contovounesios wrote: > With that in mind, I wonder whether project-switch-commands should use > character rather than string keys. Or would that be too limiting? That would probably make it more compatible to use with read-multiple-choice. The downsides: a bit less readable for the casual reader, I guess? And if keys a strings, the feature could be extended to handle full key sequences, maybe. But I'm not sure this is really needed. Let's hear from Simen thinks. From MAILER-DAEMON Wed Jun 03 07:49:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgRu2-0007TG-Qw for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 07:49:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgRty-0007T0-JR for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:49:47 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:53547) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgRty-0003ai-1O for emacs-devel@gnu.org; Wed, 03 Jun 2020 07:49:46 -0400 Received: by mail-wm1-x32a.google.com with SMTP id l26so1614106wme.3 for ; Wed, 03 Jun 2020 04:49:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=cjxHPy8OwVqW2ew3YR1wmeaA5Y6goIxzOfBLQmiFNAI=; b=tRqLAA8Ofbs2NQQ0M7pWgjqVqnQVDy8TeaO68ppbifSkfgTRsOFYszEJM2KZRcsP2H qaYwQBZEd0DmSBh8arUA9Hql0NGDDgB6QBQcB/dWJip0DUPOapZeC+aLQE7LQAy9R/Da WnK8T7Qi8g7d7+9V7/Rr5i0TfDmTC4EfeImK3AdonLv3mECkbjnEeEg8g/UjMEHS7W8B Zyc9iNiIEdro5Cd1x3RO8B8NSabfm2q23lcVwVFRxQcoH+2t5ucHYFqIpVjodOaa3rSL 5BsjCDrPEMQLwHBfyRy206LlnQFtt2JDi+ddpr6uhyAvW4FspdnPkV/Nu/NUHBbUlcah 4JOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=cjxHPy8OwVqW2ew3YR1wmeaA5Y6goIxzOfBLQmiFNAI=; b=Cuf3qem815yHiFkf8iJ6161UQyxJH/T1fEJTTVHO4N37Hk8kJrssKyqhw3ov3WijPN jmBLcIQT6qiPR0A3hUS2rOOxl0x7jiD2nivdqzD1oj8ck4eUzkusCXZNA5DCVbCH5/uZ y1LRcHLbChjXSf/f4OISxcgMGxyg/A71yRMFuJHqUQHSh3O6ZBxI3pmYa0k7TlfeG3P6 2EFXFm32sFnaGy4swPyYqp/jFfGrmfLlzP1hDAJFTCGGzxzUt5irQykti9lA6udB4oPj p1QfUKzweUIgPg/L0Bu1hFjdktD5FJn63AMFJ3d4ONHjxCiuWcfDJBlY9gfAJO5SKeWN onyg== X-Gm-Message-State: AOAM533ZLqu7gY9WM/+nqFhiGIcH7dsu9l7TRvs18s391dL9mbKgReEi pUItnmCoPoFjMolRnlae6RY= X-Google-Smtp-Source: ABdhPJywZzYpLLhmSAaIrkFlSzLbn+BERKgrB6eTU/QPrO/DO0ORPpm7wMb0whgUFauFyO9BbyzM+Q== X-Received: by 2002:a1c:29c4:: with SMTP id p187mr8344744wmp.73.1591184984779; Wed, 03 Jun 2020 04:49:44 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y66sm2694495wmy.24.2020.06.03.04.49.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 04:49:43 -0700 (PDT) Sender: DG Subject: Re: master 7496690: ; Clean up recent project.el additions To: emacs-devel@gnu.org, "Basil L. Contovounesios" References: <20200603105637.26434.62647@vcs0.savannah.gnu.org> <20200603105638.D04DB20A26@vcs0.savannah.gnu.org> From: Dmitry Gutov Message-ID: Date: Wed, 3 Jun 2020 14:49:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200603105638.D04DB20A26@vcs0.savannah.gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32a.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 11:49:47 -0000 Thanks, Basil. Just one note: On 03.06.2020 13:56, Basil L. Contovounesios wrote: > (defgroup project nil > "Operations on the current project." > + :version "28.1" I'm wasn't sure about adding this :version tag. Would it imply the whole package was only added in 28.1? It also create a kind of curious situation when a subgroup was added earlier than the parent group. :-) From MAILER-DAEMON Wed Jun 03 08:15:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgSIu-0003Zw-45 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 08:15:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgSIr-0003Y4-Or for emacs-devel@gnu.org; Wed, 03 Jun 2020 08:15:29 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:38237) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgSIp-00016X-Vq; Wed, 03 Jun 2020 08:15:29 -0400 Received: by mail-wr1-x429.google.com with SMTP id e1so2120238wrt.5; Wed, 03 Jun 2020 05:15:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=8iOXn8/LwJSm6y0EQczbsJ+oKj0PaEIBUJdnvtHMN4w=; b=EZBEizmWusnUdB8vd3CrU8npwpTibls6ZxdhYX+TYmXoOQQW/DuKyYanYYSPVndZpq iVyUA8tO2MD+tmCKnK22od+vzGM+2AdFP3nibUriZV21HRjJgoNeHYduDSOhe6Ur7y0j Q7z0r2DBCHVIdEkYvi1I96UyKG1lgoLPMBeZMbGWjdd4x8vVsEQxy+QEZ0/VSqvr1tvu lH80f6Sowg/k+X80B+auPsmOGUvBV0KJBj6PfM4LWnjMpU8Aawsp8emMm2YVjSKkyS+P iypcaCMQwmzrI+cmygNn+xqq+gAzxHNcbiIeVC6B0orEmxWQNd2Eq1urTCt1tRX8HyQP ReoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=8iOXn8/LwJSm6y0EQczbsJ+oKj0PaEIBUJdnvtHMN4w=; b=BY2OYnFrDe76b8N8VTzn3IYW6qT3wq8NzYmq0OhoaWn+OsZmR32JbCMzHcSRuL2CaQ ppn6p3ssUmo+wgOSSHeZDM6lhTz4qF8wLS7d0qMJ60/s5M6jlKH615gYy3/5/YtMEBt2 1uh7u20JZMUhTxIv7tHzu6bol5QDJLrfo9yYMjG4SDcN4WlhDFNcdRjesFcr9cHUMw+u YnjQR25V7RqZ1ojK2vG/Ghg9mYPYBkgVWgtGmJ7vNrmaKkjNezuhtKAyPF+vxfYZrMCV N3WR89rRwTNeKnfLb9inwIZ7c7fggLhNPCUBABdLjpkqqKHb4IOOHSwtvkLSJ35ecoGa 30gQ== X-Gm-Message-State: AOAM531K4weAzQb7PZ9EMHZKM+rfE9uyEFx5dc/c1IEqnCNAzuDiRjb1 dKit0ELyigk3gF7i4b2z2Ck= X-Google-Smtp-Source: ABdhPJwMdH8040CPxQR28JaRKEqiU2Ye1EAdvzFLdzA3ze/3LsfB2t64nUp3wXXyTiN3+I3oHiUiSw== X-Received: by 2002:adf:ec0a:: with SMTP id x10mr30250809wrn.130.1591186524906; Wed, 03 Jun 2020 05:15:24 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b14sm2636106wmj.47.2020.06.03.05.15.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 05:15:23 -0700 (PDT) Sender: DG Subject: Re: Imports / inclusion of s.el into Emacs To: rms@gnu.org Cc: stefan@marxist.se, emacs-devel@gnu.org, joaotavora@gmail.com, pcr910303@icloud.com, eliz@gnu.org, drew.adams@oracle.com, monnier@iro.umontreal.ca References: <0c88192c-3c33-46ed-95cb-b4c6928016e3@default> <550fa43f-30ef-14f3-dd19-dd97a985a04e@yandex.ru> <95bddb34-2c3f-eff5-220f-16b726d97a69@yandex.ru> From: Dmitry Gutov Message-ID: <1e5f135f-37f0-ef9f-f3a5-2cb247fb2205@yandex.ru> Date: Wed, 3 Jun 2020 15:15:22 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=raaahh@gmail.com; helo=mail-wr1-x429.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 12:15:30 -0000 On 03.06.2020 07:24, Richard Stallman wrote: > Today I came across a message remaining from May 11 and concluded I had > better respond to it. I regret taking so long. > > > > > Right. And I'll posit that including s.el into GNU ELPA, by itself, will > > > > not hurt any of these three goals. > > > > > > It would mess up the naming in GNU Emacs, making two incongruous > > > systems. > > > Not in GNU Emacs, though. > > Yes, in GNU Emacs. If we have s.el in GNU ELPA under current > conditions, that will put the s- namespace of GNU Emacs outside our > control. (Indeed, someone claimed it is already de facto outside our > control.) That "someone" was me as well. > It is a big problem that other people, without even consulting us, can > take major parts of the Emacs Lisp namespace away from us. > > Maybe we can correct this general problem in a general way with a > system of namespaces. I hope so. But denying the problem is not > solving it. I agree it's a problem, but my (and not only mine) point was that adding the package to ELPA won't really change anything in this regard. A namespace system would be a welcome change, of course. From MAILER-DAEMON Wed Jun 03 08:36:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgSdD-0004hV-5K for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 08:36:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgSdC-0004hG-0i for emacs-devel@gnu.org; Wed, 03 Jun 2020 08:36:30 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:56110) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgSdA-0006CV-Uk for emacs-devel@gnu.org; Wed, 03 Jun 2020 08:36:29 -0400 Received: by mail-wm1-x334.google.com with SMTP id c71so1757341wmd.5 for ; Wed, 03 Jun 2020 05:36:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=SnkKNpV695mp9XZNt7BRVxkfnqfiY/YN851M4lax42E=; b=Sk0NKhx32a4/74qk0gdz213IFdFbtGPtWfdUN3Nh61yqxSowK3zyhafsxCX4SOGlib hZF3jZJfcbjK1F0BKqpO6VD4Frmz6cRpmRypi1Hol2rptk+5xOBRqMzd3nBqxX/UCuPv ug9blG3MhGRcMT2N8CDCQkT9eW63ia85ToVzsfWW13hARiRFalg49Ad+bi0RXDuh4Etb sVkelaJy3c+3lmlO2WQFbBhJ8KRVZswuLEoMQ0QRj8MbY+Gk6C4aW0XgL4O3VXfGXCX6 u0mZfh+Ph3l4nl9fmN8qTwMVRWPneNf3uuUs/82XB63mGd2i1z50BBYTqkTvnL6EQzsn /WlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=SnkKNpV695mp9XZNt7BRVxkfnqfiY/YN851M4lax42E=; b=KCX3FDckJNUkOe/ydB1lt1vjKpbIJgr2mM/Hk6TOy51IrVif2xZmXIiBwCKvrK8Ssq HV/HpkLscsngG7yu/HWxhV++RfiAytiBYyNmE0/84EQkCMAzvzBQrJu961/pWsYhQUHt Xy4HvXbiWju3UaKD56sukZU3eVR5jA7um1Xjh0YQWKpaAHa8QJVVCHfCHa0AUx8LybbO ifkhg64KRJkMLiCWw3CkJnb0SAkb3KnGnBJ2kgYFRsH6JgZEktxDVkcB50JFHBjBHtAE +7fLlzKysLC1hOU2KqGwlnvTL2n6cqiu0c4mb9+a3PVRvKIEtfL9RRv1/sw3+dt+GOkN tntQ== X-Gm-Message-State: AOAM531L+CE/u0gonh0Af7ocnzhGjvsxIEmWNSOjNlsJKWhiqW3uGbEm 0Jnlu8dU3Gcqmzmb7tPoCt18YR8n X-Google-Smtp-Source: ABdhPJyPGi/F4ipmkrWnRf2V3z8NWo/m9ZWq19FRBdhPg9/2RZqhBUd5myUfBzlLpLJFb7U/zjW5vw== X-Received: by 2002:a7b:c158:: with SMTP id z24mr9084624wmi.12.1591187787163; Wed, 03 Jun 2020 05:36:27 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id v7sm3591508wre.93.2020.06.03.05.36.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 05:36:26 -0700 (PDT) Sender: DG Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion To: Konstantin Kharlamov , ndame , Emacs developers References: From: Dmitry Gutov Message-ID: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> Date: Wed, 3 Jun 2020 15:36:24 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=raaahh@gmail.com; helo=mail-wm1-x334.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 12:36:30 -0000 On 03.06.2020 14:39, Konstantin Kharlamov wrote: > Lack of such simple but immensely useful feature is so disappointing > that some years ago I was trying to migrate over to some other > editor. What simple feature? Prediction? Is that like mind reading? As far a multithreading goes, try some backend that uses an external program (either of the LSP clients, or irony, rtags, etc). That's a basic kind of concurrency already available in Emacs. From MAILER-DAEMON Wed Jun 03 08:50:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgSr5-000073-4x for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 08:50:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50578) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgSr3-00006d-V8 for emacs-devel@gnu.org; Wed, 03 Jun 2020 08:50:49 -0400 Received: from forward106o.mail.yandex.net ([37.140.190.187]:47021) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgSr1-0000mz-Nk for emacs-devel@gnu.org; Wed, 03 Jun 2020 08:50:49 -0400 Received: from mxback20o.mail.yandex.net (mxback20o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::71]) by forward106o.mail.yandex.net (Yandex) with ESMTP id BA5BF50631FB; Wed, 3 Jun 2020 15:50:43 +0300 (MSK) Received: from iva8-6403930b9beb.qloud-c.yandex.net (iva8-6403930b9beb.qloud-c.yandex.net [2a02:6b8:c0c:2c9a:0:640:6403:930b]) by mxback20o.mail.yandex.net (mxback/Yandex) with ESMTP id P3cRdaN0Sd-ohNWfuMP; Wed, 03 Jun 2020 15:50:43 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591188643; bh=P+vHrvOjZkbAbxsLYyN5ooRcOtFETKHNNB/AgMzotSA=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=XrmP6G8RIK7UimxkGLeSHurLglmLL7Af0ZBuBLQMrk6jwu3kOFQH/v7Igmd/mrP2r XIIxVtApWEMR7nUxc6AzRxrAHwUO/nJSUL0KfIC88OJfDypf1Vo9AOUyG7xyy37z6t /eEfss6Z3YoTgdZc8wPrTSKMBKhbmxjptGYCwrFI= Authentication-Results: mxback20o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva8-6403930b9beb.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id xVSduWEpIe-oh2i8FAw; Wed, 03 Jun 2020 15:50:43 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion From: Konstantin Kharlamov To: Dmitry Gutov , ndame , Emacs developers Date: Wed, 03 Jun 2020 15:50:42 +0300 In-Reply-To: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=37.140.190.187; envelope-from=hi-angel@yandex.ru; helo=forward106o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 08:50:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 12:50:50 -0000 On Wed, 2020-06-03 at 15:36 +0300, Dmitry Gutov wrote: > On 03.06.2020 14:39, Konstantin Kharlamov wrote: > > Lack of such simple but immensely useful feature is so > > disappointing > > that some years ago I was trying to migrate over to some other > > editor. > > What simple feature? Prediction? Is that like mind reading? You misunderstand what I say. In technical terms "prediction" here means "the timeout set to 0". > As far a multithreading goes, try some backend that uses an external > program (either of the LSP clients, or irony, rtags, etc). That's a > basic kind of concurrency already available in Emacs. Just to make sure: and it not gonna lag if I set timeout to 0? If yes, then great to know, maybe I fell behind recent developments, I should try it then. From MAILER-DAEMON Wed Jun 03 09:11:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgTAa-0005jg-28 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 09:11:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTAY-0005jB-F8 for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:10:58 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:33658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgTAX-0003xd-N0 for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:10:58 -0400 Received: by mail-wr1-x429.google.com with SMTP id l11so2341128wru.0 for ; Wed, 03 Jun 2020 06:10:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=c/pV1K5IVvWj1jY10uRbjxt0HOFWcBOtFyxhZRKSJQU=; b=neL7eHwW08yS8W/nWnQ5wBAHbJ9Zte/ILggCGS4MVywvMGiQTdz3n21OWp/XeReXdE 5HbLcFpL6e5frrJE9HtLdQ/45rJXYg6Otm9YowbbRziyyPR+ty7ZHCi84XpkwR3gD8GP Te9r3CD+wIkSdsj/6VZHLi+OPZ41qeydWuIhM23EeYWRygrxHA/dif6J9r8DH0lfHy8K zp0XrH/6J0NPYWcl7nmBuCL/OgP1ZFx064Ap9JyEPA5uLdoOYKYsvMSpMh+KW8PEnk8r QgWifhbKTilkbHrrVA/TQ8mBk50Fv2995vIBXj901iicgcC+ewju1gYhv+aIPiP2vAw2 nJcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=c/pV1K5IVvWj1jY10uRbjxt0HOFWcBOtFyxhZRKSJQU=; b=uJcjlYAINsEWE9zCM0Irq0/sFllQ4xQTvkf13WRmmoKEnhBg46wFlBtZWp+qVexwC3 5zW7WxWVlPnmT8uf4S+80Hg2GD8KYBhzWS3R4UpVoD6Upht2pr5N4YDYAxQQ3kB7/5tN /mezt//zNpZ68FTSkhtxUVwsMAyC+bLAAia5mudZha2YAl8PngUwZZsa3+KnKMdPQH0+ dKV13KWKyvS/2x5OyqKr5B1hJrYk/Drgy8V5CfJliAYxIDCdSLfg7eujz+ECfecAj5xj /vAuruco0D388Sc/f1PgS3cL68r4jBxVxwbDHlzT2/lR0zrR7So+5GyXZQMYZnwWANWH tasA== X-Gm-Message-State: AOAM5323JnpSZbvLv3VhQHww1qRYAQeXpJZ/eSXOmg4hjQe1vLoqliII bRhnq+O5EG2LW/Dq+BPQJuWs+u+f X-Google-Smtp-Source: ABdhPJzKmftnpucFJGDOo+OAvIbnz+9AnV0qA/LZXmJtlijpSPNk33okiMosnmDIkWQ9qcXqjr4xSA== X-Received: by 2002:adf:dcd2:: with SMTP id x18mr30505734wrm.258.1591189855873; Wed, 03 Jun 2020 06:10:55 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id x205sm3215774wmx.21.2020.06.03.06.10.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 06:10:54 -0700 (PDT) Sender: DG Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion To: Konstantin Kharlamov , ndame , Emacs developers References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> From: Dmitry Gutov Message-ID: <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> Date: Wed, 3 Jun 2020 16:10:53 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=raaahh@gmail.com; helo=mail-wr1-x429.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 13:10:58 -0000 On 03.06.2020 15:50, Konstantin Kharlamov wrote: > On Wed, 2020-06-03 at 15:36 +0300, Dmitry Gutov wrote: >> On 03.06.2020 14:39, Konstantin Kharlamov wrote: >>> Lack of such simple but immensely useful feature is so >>> disappointing >>> that some years ago I was trying to migrate over to some other >>> editor. >> >> What simple feature? Prediction? Is that like mind reading? > > You misunderstand what I say. In technical terms "prediction" here > means "the timeout set to 0". Timeout set to 0 means firing completion requests right after every user input. If completion is synchronous, that will of course lead to a slowdown (depending on how slow the backend is). For asynchronous ones, it could be fine, if the backing process can handle requests at such frequency. In general, the value of 0 seems wasteful to me, but it should work. >> As far a multithreading goes, try some backend that uses an external >> program (either of the LSP clients, or irony, rtags, etc). That's a >> basic kind of concurrency already available in Emacs. > > > Just to make sure: and it not gonna lag if I set timeout to 0? If yes, > then great to know, maybe I fell behind recent developments, I should > try it then. To be 100% sure, you should try it yourself (I don't do C/C++). Maybe someone else here can testify, though. From MAILER-DAEMON Wed Jun 03 09:37:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgTaX-0003zQ-Se for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 09:37:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTaV-0003yk-Te for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:37:47 -0400 Received: from mail-qk1-x733.google.com ([2607:f8b0:4864:20::733]:44480) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgTaU-0000GL-OU for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:37:47 -0400 Received: by mail-qk1-x733.google.com with SMTP id c14so2067873qka.11 for ; Wed, 03 Jun 2020 06:37:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=GdmefZ/BV7MNblTRSjbypHrGsKjdKy/N+mTHZiRbS0s=; b=2Qy5QsZtE2tnCt3Xeq4vLFgMx//lkezK9lKstMvruQltLTv/063Wa945/4X2nEHLJM ptF0tBWFk90pEcdEbi30CKzIZ/FBso7lwLqGTGJ4edPqIYivYhfAUwosh6jEWXqTPlWA ZVO2srXO8bc0iukQuQrP72pnUKY9MD+TRtfb4qPYHcZbHN19VS4U40raTbGHNaVTjdPq 7pGbwLuiAAlycNyx2uZ00EXSj336E9lToht/3Y3Rk9RiiEuP7SlBAqgU3A21dpqhsuiB QHe8wbgYQQxKZx6/sAIDYBt430q4z1nL44zHahG6XS447bwbe4d3IMASboReuenLRknD DFoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=GdmefZ/BV7MNblTRSjbypHrGsKjdKy/N+mTHZiRbS0s=; b=fnTPYdQpiRFWkQb4V95tq+KYPhqNJfDgDqNtOqkT3rxJicvqW+BnihZlT7OWv4iv8H CRYo2safIPfV2HYqStQJmPzijbqPge1lVpWFpTApadKxY8PlaWBSfqO12Bokbtfi109a 2/utBvm+NPNkcjxWhW5IAb/sbwEvj+JsWoLoBYKeOdGMTGmeWBhBB4uQNEk+dRsRYNCk hvCTBmcJdO6Mj3zFUwaP5xyx8cE2aGdExu+MuLm+NDXWLgcO4r7iAbOws2P89V422z+S egJutVmGtBSvE1qn+ubTOf/LQHIsyOP80W0Z6kFICl75Jc8SKngxvCuQzy+l8EhCYjVs SNsw== X-Gm-Message-State: AOAM533dKkoL79pw5jgXWdbEds/M20CqETDEqqFgPiOErqIaaOZ0lIOS 1DYP7LZmTS1uS4Sd/HKHFHJ4jw== X-Google-Smtp-Source: ABdhPJzCRFhjKFbPI/umJralPQ8dzTkDTRUAI7QduTJ2wE8xpLmlYEEwpY5tvTqsfoJEjoize/Woeg== X-Received: by 2002:a37:b903:: with SMTP id j3mr29645175qkf.356.1591191465000; Wed, 03 Jun 2020 06:37:45 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id k12sm1469744qkk.58.2020.06.03.06.37.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 06:37:44 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: emacs-devel@gnu.org Subject: Re: master 7496690: ; Clean up recent project.el additions References: <20200603105637.26434.62647@vcs0.savannah.gnu.org> <20200603105638.D04DB20A26@vcs0.savannah.gnu.org> Date: Wed, 03 Jun 2020 14:37:42 +0100 In-Reply-To: (Dmitry Gutov's message of "Wed, 3 Jun 2020 14:49:42 +0300") Message-ID: <87v9k8z2vt.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::733; envelope-from=contovob@tcd.ie; helo=mail-qk1-x733.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 13:37:48 -0000 Dmitry Gutov writes: > On 03.06.2020 13:56, Basil L. Contovounesios wrote: >> (defgroup project nil >> "Operations on the current project." >> + :version "28.1" > > I'm wasn't sure about adding this :version tag. Would it imply the whole package > was only added in 28.1? No, because a customisation group is not a package. I'm not actually aware of any places where defgroup/defface/etc. :version tags are currently used, but since Glenn put some effort into adding them[1], I think project.el should continue to use them consistently. [1]: Add some missing version tags. e85e0d5951 2016-01-12 20:06:49 -0500 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e85e0d5951bd4e6e69beec1301113f5f9b48f81d > It also create a kind of curious situation when a subgroup was added earlier > than the parent group. :-) The :version tag can also indicate "was changed in some notable way," so I don't think that matters too much, and as I said I don't think the information is currently used anywhere. -- Basil From MAILER-DAEMON Wed Jun 03 09:39:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgTbm-0005Do-5Q for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 09:39:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTbj-0005DM-3F for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:39:04 -0400 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]:38828) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgTbi-0000Qt-Eh for emacs-devel@gnu.org; Wed, 03 Jun 2020 09:39:02 -0400 Received: by mail-qk1-x730.google.com with SMTP id w1so2106134qkw.5 for ; Wed, 03 Jun 2020 06:39:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=X1AuMUlJUTHHiCUqd6erBZ39p21pv9DIY5c7rEbLick=; b=d2BdZD3ljfht9yWRikuBSlrIX8oDIbnnZnXxxTQ46Lu7oJwmCUsE+C3pDDmO7ucPgP aqel13iFc9ER4H9Oxuuta2S0W64IbAizJ9pYtAzk8JADfkTDisAOpw+HRJYDPMGFIZHr KSN9WZYPsjfaQ8lQPCei/ZN7rjkh9YUPPg2gC65eetmEbYnmjtK0FG3zhGIgglEnanu3 UFoZ3VcnGaH9OCvExSRhJVtDYPFAGs1MUc4SvszSPDbEG+tRvUjishdOYYicJLQB7CNA qM8khAe8UT5lZ/xInAsHGPwMS+zfXeXzRPHqMM0fujPz2fMRizndeN5+bXzcQg8fDQKS NNZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=X1AuMUlJUTHHiCUqd6erBZ39p21pv9DIY5c7rEbLick=; b=SCot2/V/vQBwj25Yk9nnco5CP1Od1nBxj++NMSDInB3lXZfnBWCazvwhexBC05Gaot EfTiYT0x9/NoQkEca7SN8s0IToOeMW+H6bTNzyQKMHB6Woq0jZ6CxkCqXFz8ZeFDB9Ws gAlqL81CSZoBiiIT7YN5USbPWBIktZS6WvruAaAjtk60XkbHsIzRJfDNyLDA4Y16aUlI wazOOxAtoksy/Put7ceXAnW3+r78Z+83FUC+V6Etti+RQkD9OCOrvC5WxxugYHOhxtFX +ywwV3tpV4LxHrtxQ4URAyDlvkcMXPESfRFhod9UjnwNMEVzQEaNX+XyaQ52PLm87IhV IbEA== X-Gm-Message-State: AOAM533oktKyqkDTiKF15CMOidXGMObEMBUXwwGImoXL+9J26ILfcF5W konejbgGopvCOnE/EqzDLLeZOg== X-Google-Smtp-Source: ABdhPJyvPZVaxVn2DpG+fGCjkhSC5D9U/f2dsZOhkGiTt8BOEAFgvRMLKApwR8v4KIJADa3E7YKnNg== X-Received: by 2002:ae9:e88c:: with SMTP id a134mr25690266qkg.316.1591191541332; Wed, 03 Jun 2020 06:39:01 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id r57sm2116935qtr.41.2020.06.03.06.39.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 06:39:00 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: emacs-devel , Simen =?utf-8?Q?Heggest=C3=B8yl?= Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87lfl42xul.fsf@tcd.ie> Date: Wed, 03 Jun 2020 14:38:58 +0100 In-Reply-To: (Dmitry Gutov's message of "Wed, 3 Jun 2020 14:47:15 +0300") Message-ID: <87mu5kz2tp.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::730; envelope-from=contovob@tcd.ie; helo=mail-qk1-x730.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 13:39:04 -0000 Dmitry Gutov writes: > On 03.06.2020 14:27, Basil L. Contovounesios wrote: >> With that in mind, I wonder whether project-switch-commands should use >> character rather than string keys. Or would that be too limiting? > > That would probably make it more compatible to use with read-multiple-choice. > > The downsides: a bit less readable for the casual reader, I guess? And if keys a > strings, the feature could be extended to handle full key sequences, maybe. But > I'm not sure this is really needed. Perhaps read-multiple-choice will be extended to support both one day... > Let's hear from Simen thinks. Of course. -- Basil From MAILER-DAEMON Wed Jun 03 10:00:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgTw9-0008HS-Np for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:00:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTw7-0008H2-84 for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:00:07 -0400 Received: from forward104j.mail.yandex.net ([5.45.198.247]:44016) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTw4-0004xR-IB for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:00:06 -0400 Received: from mxback7o.mail.yandex.net (mxback7o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::21]) by forward104j.mail.yandex.net (Yandex) with ESMTP id 8D04E4A022C; Wed, 3 Jun 2020 17:00:00 +0300 (MSK) Received: from sas1-e00c2743cdb8.qloud-c.yandex.net (sas1-e00c2743cdb8.qloud-c.yandex.net [2a02:6b8:c14:3a22:0:640:e00c:2743]) by mxback7o.mail.yandex.net (mxback/Yandex) with ESMTP id lET7KIQvby-00leg3Ri; Wed, 03 Jun 2020 17:00:00 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591192800; bh=B22Dc4qeHaCV6WCgCVCVIRR+/hZs0d6liVNTtnzJKlk=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=Z9baPBIWXpUhs1UnTgpGx5vTPgaU+SQhnRjq35ymG5pCZYPW0kemBuU7lrZSp9UIo uOJ1Fv4HrbY1eJC+pB8s4KSwqg/S889d5xoXE3YdLUhpsZTwElZXy2QxG/dLbXv7Cw Vm4qtr+WTKM+c7/ELGRT7VzsYTAYaQaUL+wMLGb0= Authentication-Results: mxback7o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas1-e00c2743cdb8.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id cA2LLi3sDQ-xxa83cF7; Wed, 03 Jun 2020 17:00:00 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion From: Konstantin Kharlamov To: Dmitry Gutov , ndame , Emacs developers Date: Wed, 03 Jun 2020 16:59:59 +0300 In-Reply-To: <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=5.45.198.247; envelope-from=hi-angel@yandex.ru; helo=forward104j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 10:00:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:00:07 -0000 On Wed, 2020-06-03 at 16:10 +0300, Dmitry Gutov wrote: > On 03.06.2020 15:50, Konstantin Kharlamov wrote: > > On Wed, 2020-06-03 at 15:36 +0300, Dmitry Gutov wrote: > > > On 03.06.2020 14:39, Konstantin Kharlamov wrote: > > > > Lack of such simple but immensely useful feature is so > > > > disappointing > > > > that some years ago I was trying to migrate over to some other > > > > editor. > > > > > > What simple feature? Prediction? Is that like mind reading? > > > > You misunderstand what I say. In technical terms "prediction" here > > means "the timeout set to 0". > > Timeout set to 0 means firing completion requests right after every > user > input. If completion is synchronous, that will of course lead to a > slowdown (depending on how slow the backend is). > > For asynchronous ones, it could be fine, if the backing process can > handle requests at such frequency. > > In general, the value of 0 seems wasteful to me, but it should work. I am not sure why you say it seems wasteful. Do you mean perhaps, as opposed to setting, say, 100ms? 100ms I think is the top limit this timeout should be set. I just tested how quickly I can type a string "prog". I fired up `libinput debug-events` and tried to type "prog". The letter "g" says "+0.256s", i.e. it took 256ms. This means even if I set to 100ms, there's high chance I won't get any autocompletion. > > > As far a multithreading goes, try some backend that uses an > > > external > > > program (either of the LSP clients, or irony, rtags, etc). That's > > > a > > > basic kind of concurrency already available in Emacs. > > > > Just to make sure: and it not gonna lag if I set timeout to 0? If > > yes, > > then great to know, maybe I fell behind recent developments, I > > should > > try it then. > > To be 100% sure, you should try it yourself (I don't do C/C++). > Maybe > someone else here can testify, though. Thank you! Indeed, I confirm this does seem to work with an async backend. I tested it as follows: 1. Opened a test.cpp file, enabled company-irony, checked that completion works. 2. I set `(setq company-idle-delay 0)` 3. I paused the irony-server process with `kill -SIGSTOP $(pidof irony-server)` 4. I tried typing a gibberish to see if I get any delay in rendering a text. I don't see any lags, so I assume using an async backend with the timeout set to 0 should work fine. This is great news! I wonder if company mode should default to zero or so timeout, and print a warning if somebody tries to connect a non-async backend? From MAILER-DAEMON Wed Jun 03 10:03:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgTzk-0001Cx-BF for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:03:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57688) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgTzj-0001Bk-2w for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:03:51 -0400 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]:36055) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgTzh-0005fp-3c for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:03:50 -0400 Received: by mail-qt1-x82d.google.com with SMTP id w9so2096195qtv.3 for ; Wed, 03 Jun 2020 07:03:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=lWIC6I3ZdRAgDwUrk+zgdKz9C1rjTL5jFGLSE8195Xc=; b=AnvMC4mMOsJOEw4xx8Y/9yYQ9A1Cz34LlZ0H+dzTyyg8FFlZaoYakf41D+S9IXNkEd 2Ro+AiBHN7mJghuuNCSHA1qupMA8h8SLk5Mblrm1gVVZZut9ejW5nQcsqH8V0Vd7py5i tCCf64OYRc2KcoKe/XeN1w2wM+Ok6QdxVF3ddbXIYi4gVz1yPsOKePHyIodZqfPih6JB P+5W+u+Oy9DyH2bNN5XgWueamj000GIb5RAYeWjRaTR281p8BBkIqUuD7N4FZm46s4YM i1fkDLQFEsBdSEjAZOZf6oN0MeJZd37eYio/CXOd0LKJ0vzeXgksUj5/SiwucI+KGf3j kYRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=lWIC6I3ZdRAgDwUrk+zgdKz9C1rjTL5jFGLSE8195Xc=; b=lOqx4F8clHMt7qtjDh4wLnluvkadZ5U3x4v8oWt8KMA+THC5sD5bYahsIdE3ncSTxy S2in7X7FoPYIafAuyyyIBDDga3Lk7RfKXKO4ITrJRt7WvgEmDNzNsPJTAjb1R/MkwQCd m3Fy4c6jyKUA9HWajEodhXbEh5hxc1UA//w4jFzVUf5+W9KujI0X+xOOwk0I5uWv27/V iw7XxeokILorBF/DtRrHKfKcuJyuQ7WJK8cjxmG2Wx08ATbyH0YRwYON8+WtEjwglE1b z0iZqQWDluwQkckEQpBzpvsyeXKUJvh1zRzWa+D3YWsyB3VbWf/l2OKM786gKtk/oQ2b rsVw== X-Gm-Message-State: AOAM531AxudPTG1DRtV3gfCpog6dvoiwvcNOZyWPddGuFgNdTjuL06s6 Gitcb6OBO58vS4aFvGCgMBp5Hg== X-Google-Smtp-Source: ABdhPJwkRnxv9otV61/UGtgXFKkPMX+YC1INNMOTczpBahrT683WFSwMx24G4kaZlML/R/vp9/35Ww== X-Received: by 2002:ac8:4742:: with SMTP id k2mr25383195qtp.304.1591193026233; Wed, 03 Jun 2020 07:03:46 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id m53sm2120857qtb.64.2020.06.03.07.03.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 07:03:44 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: Stefan Monnier , jonas@bernoul.li, johnw@gnu.org, emacs-devel@gnu.org Subject: Re: Un-deprecating oset References: <87eery1xhe.fsf@bernoul.li> <87a72d42h2.fsf@bernoul.li> <87a726tg3c.fsf@bernoul.li> <877dx1rt78.fsf@bernoul.li> <83zh9wujkx.fsf@gnu.org> <83sgfougls.fsf@gnu.org> Date: Wed, 03 Jun 2020 15:03:35 +0100 In-Reply-To: <83sgfougls.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 25 May 2020 19:25:19 +0300") Message-ID: <874krsxn48.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: none client-ip=2607:f8b0:4864:20::82d; envelope-from=contovob@tcd.ie; helo=mail-qt1-x82d.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:03:51 -0000 --=-=-= Content-Type: text/plain Eli Zaretskii writes: >> From: Stefan Monnier >> Cc: Jonas Bernoulli , johnw@gnu.org, emacs-devel@gnu.org >> Date: Mon, 25 May 2020 12:06:54 -0400 >> >> > I tend to think it should be un-deprecated. >> >> Interesting. I thought the whole CL -> CL-lib change was because we >> didn't want to have in Emacs core libraries that stomp on the namespace >> like that (funnily enough most of EIEIO's global names come straight >> from Common-Lisp, oref/oset being the main exception ;-) >> >> So does that also mean that EIEIO's names are now accepted into the >> core namespace? It seems rather odd that `defclass` is allowed into the >> core namespace while `defstruct` had to be relegated to `cl-defstruct`. > > I didn't mean we should stop cleaning up the global namespace, just > that this case could be one of the few exclusions. How's the attached patch for un-deprecating oset and oset-default? Political rationale: 0. Most voiced opinions have been in favour of keeping oset. 1. Though most are in favour of cleaning EIEIO's namespace, deprecating only oset causes hassle without sufficient gain. Technical rationale: 2. oset is widely used. 3. oref-default is not yet setf-able, so we'd have to recommend using eieio-oset-default in place of oset-default, which has been described as probably undesirable. WDYT? Should the changes to the manuals go to emacs-27 instead of master? Thanks, -- Basil --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Fix-some-EIEIO-obsoletions.patch >From 5b6eedfee3ac95313d29dca57f56461322dd9b13 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Wed, 3 Jun 2020 14:18:19 +0100 Subject: [PATCH] Fix some EIEIO obsoletions The deprecation of oset and oset-default was discussed in the following threads: https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00674.html * doc/misc/ede.texi (ede-generic-project): Tidy up example. * doc/misc/eieio.texi (Accessing Slots): Document oref, oref-default, and slot-value as generalized variables, and set-slot-value as obsolete. Consistently document getters before setters. (Predicates): Mention cl-print-object in place of the obsolete object-print. (Introspection): Document eieio-class-slots in place of the obsolete object-slots. * lisp/emacs-lisp/eieio.el: Un-deprecate oset and oset-default. Make oref-default setf-able. * etc/NEWS: Announce this change. * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: Use lexical-binding. (eieio-test-13-init-methods): Simplify. (eieio-test-33-instance-tracker): Declare IT-list as special. --- doc/misc/ede.texi | 10 ++-- doc/misc/eieio.texi | 49 +++++++++++++------ etc/NEWS | 7 ++- lisp/emacs-lisp/eieio.el | 7 ++- .../emacs-lisp/eieio-tests/eieio-tests.el | 5 +- 5 files changed, 49 insertions(+), 29 deletions(-) diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index 584b0d7ee5..412176986c 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -955,18 +955,16 @@ ede-generic-project ;;; MAKEFILE (defclass ede-generic-makefile-project (ede-generic-project) - ((buildfile :initform "Makefile") - ) + ((buildfile :initform "Makefile")) "Generic Project for makefiles.") (defmethod ede-generic-setup-configuration ((proj ede-generic-makefile-project) config) - "Setup a configuration for Make." + "Set up a configuration for Make." (oset config build-command "make -k") - (oset config debug-command "gdb ") - ) + (oset config debug-command "gdb ")) (ede-generic-new-autoloader "generic-makefile" "Make" - "Makefile" 'ede-generic-makefile-project) + "Makefile" 'ede-generic-makefile-project) @end example This example project will detect any directory with the file diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 3943c544c7..06093f7263 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -698,6 +698,27 @@ Accessing Slots referencing vectors (@pxref{Vectors,,,elisp,GNU Emacs Lisp Reference Manual}). +@defmac oref obj slot +@anchor{oref} +This macro retrieves the value stored in @var{obj} in the slot named +by @var{slot}. @var{slot} is the name of the slot when created by +@dfn{defclass}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + +@defmac oref-default class slot +@anchor{oref-default} +This macro returns the value of the class-allocated @var{slot} from +@var{class}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + @defmac oset object slot value This macro sets the value behind @var{slot} to @var{value} in @var{object}. It returns @var{value}. @@ -716,17 +737,6 @@ Accessing Slots @end example @end defmac -@defmac oref obj slot -@anchor{oref} -Retrieve the value stored in @var{obj} in the slot named by @var{slot}. -Slot is the name of the slot when created by @dfn{defclass}. -@end defmac - -@defmac oref-default class slot -@anchor{oref-default} -Get the value of the class-allocated @var{slot} from @var{class}. -@end defmac - The following accessors are defined by CLOS to reference or modify slot values, and use the previously mentioned set/ref routines. @@ -734,14 +744,21 @@ Accessing Slots @anchor{slot-value} This function retrieves the value of @var{slot} from @var{object}. Unlike @code{oref}, the symbol for @var{slot} must be quoted. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. @end defun @defun set-slot-value object slot value @anchor{set-slot-value} -This is not a CLOS function, but is the setter for @code{slot-value} -used by the @code{setf} macro. This -function sets the value of @var{slot} from @var{object}. Unlike +This function sets the value of @var{slot} from @var{object}. Unlike @code{oset}, the symbol for @var{slot} must be quoted. + +This is not a CLOS function, but is the obsolete setter for +@code{slot-value} used by the @code{setf} macro. It is therefore +recommended to use @code{(setf (slot-value @var{object} @var{slot}) +@var{value})} instead. @end defun @defun slot-makeunbound object slot @@ -1061,7 +1078,7 @@ Predicates Return a string of the form @samp{#} for @var{obj}. This should look like Lisp symbols from other parts of Emacs such as buffers and processes, and is shorter and cleaner than printing the -object's record. It is more useful to use @code{object-print} to get +object's record. It is more useful to use @code{cl-print-object} to get and object's print form, as this allows the object to add extra display information into the symbol. @end defun @@ -1217,7 +1234,7 @@ Introspection some functions have been provided. None of these functions are a part of CLOS. -@defun object-slots obj +@defun eieio-class-slots obj Return the list of public slots for @var{obj}. @end defun diff --git a/etc/NEWS b/etc/NEWS index ed4722b27f..27e511047e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -112,7 +112,12 @@ setting the variable 'auto-save-visited-mode' buffer-locally to nil. ** New bindings in occur-mode, 'next-error-no-select' bound to 'n' and 'previous-error-no-select' bound to 'p'. -** EIEIO: 'oset' and 'oset-default' are declared obsolete. +** EIEIO + ++++ +*** The macro 'oref-default' can now be used with 'setf'. +It is now defined as a generalized variable that can be used with +'setf' to modify the value stored in a given class slot. ** New minor mode 'cl-font-lock-built-in-mode' for `lisp-mode'. The mode provides refined highlighting of built-in functions, types, diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index ee5dd2cccd..73573a80eb 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -513,8 +513,7 @@ oset "Set the value in OBJ for slot SLOT to VALUE. SLOT is the slot name as specified in `defclass' or the tag created with in the :initarg slot. VALUE can be any Lisp object." - (declare (obsolete "use (setf (oref ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset ,obj (quote ,slot) ,value)) (defmacro oset-default (class slot value) @@ -522,8 +521,7 @@ oset-default The default value is usually set with the :initform tag during class creation. This allows users to change the default behavior of classes after they are created." - (declare (obsolete "use (setf (oref-default ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset-default ,class (quote ,slot) ,value)) ;;; CLOS queries into classes and slots @@ -654,6 +652,7 @@ object-remove-from-list ;; common code between oref and oset, so as to reduce the redundant work done ;; in (push foo (oref bar baz)), like we do for the `nth' expander? (gv-define-simple-setter eieio-oref eieio-oset) +(gv-define-simple-setter eieio-oref-default eieio-oset-default) ;;; diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el index 34c20b2003..21adc91e55 100644 --- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el +++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el @@ -1,4 +1,4 @@ -;;; eieio-tests.el -- eieio tests routines +;;; eieio-tests.el -- eieio test routines -*- lexical-binding: t -*- ;; Copyright (C) 1999-2003, 2005-2010, 2012-2020 Free Software ;; Foundation, Inc. @@ -356,7 +356,7 @@ eieio-test-13-init-methods (oset a test-tag 1)) (let ((ca (class-a))) - (should-not (/= (oref ca test-tag) 2)))) + (should (= (oref ca test-tag) 2)))) ;;; Perform slot testing @@ -852,6 +852,7 @@ IT "Instance Tracker test object.") (ert-deftest eieio-test-33-instance-tracker () + (defvar IT-list) (let (IT-list IT1) (should (setq IT1 (IT))) ;; The instance tracker must find this -- 2.26.2 --=-=-=-- From MAILER-DAEMON Wed Jun 03 10:13:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgU8j-00005L-IT for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:13:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgU8i-0008WE-8E for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:13:08 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:53024) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgU8g-0000Jf-42 for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:13:07 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 6637E10032F; Wed, 3 Jun 2020 10:13:04 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 9835E1002BA; Wed, 3 Jun 2020 10:13:02 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591193582; bh=D0pGfy5g6hnN13iGdbfq/PhKzdspYNXdJKV7YCsDGLY=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=BYNC2FuFgcsptisYHvbQT0IAs26DDuMdpOyHhDDKcsGzup3J9VKx5rtavW5HLmTaF cqZuplxhzLkDNKJL5TB68TGN6+Djmn5XhxTvcdPHmapJQxbREBY4tuaKwY6CBNhh4S w5sRzuZhkPVdF9TwXNAjyK+hD5bDRHBJ6RfmlH6FzRZYC5v+SoexM7SmQtM/26YtKu 3pBoeSDBPKSk2QpCwh9mN4pdmpkXZxO9lNnoRPRfM8xpbCXVuF9sETVeLafN/nQgE5 /4E28oUM7x4Tb2VpLHE7YYqXK9Q1P3+G3uLjTaMQ40S5l9V+jUjNmkN3XJV+ekzu4G Xi+J1GiKyGI1w== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id AA6971206C3; Wed, 3 Jun 2020 10:13:01 -0400 (EDT) From: Stefan Monnier To: Ikumi Keita Cc: emacs-devel@gnu.org Subject: Re: Giving "text quotes" syntax in font-lock-syntax-table only Message-ID: References: <50114.1589957638@localhost> Date: Wed, 03 Jun 2020 10:12:59 -0400 In-Reply-To: (Stefan Monnier's message of "Wed, 20 May 2020 07:53:27 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.002 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 10:13:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:13:08 -0000 >> We think that the problem comes from running `syntax-ppss'. > > Yes, the problem is that `syntax-ppss` is affected by the current > syntax-table yet it doesn't pay attention to syntax-table changes when > it comes to enforcing that its cache is not stale. > > The arguably better way to solve the problem is to not change the > syntax-table used inside `syntax-ppss` and `syntax-propertize`. This is > especially true for `syntax-propertize` if you use `syntax-ppss` in your > `syntax-propertize-function`. > > The best way to do that is to set `syntax-ppss-table` to the > syntax-table that should be used. While I think the new approach using `font-lock-keywords` instead of `font-lock-syntax-table` is a better solution, I think we should try and avoid this breakage. Could you test the patch below to see if it makes the old code work correctly? Stefan diff --git a/lisp/font-lock.el b/lisp/font-lock.el index e0955b74abc..f4ac00d14bd 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -575,6 +575,7 @@ font-lock-syntax-table "Non-nil means use this syntax table for fontifying. If this is nil, the major mode's syntax table is used. This is normally set via `font-lock-defaults'.") +(defvar-local font-lock--syntax-table-affects-ppss nil) (defvar font-lock-mark-block-function nil "Non-nil means use this function to mark a block of text. @@ -1610,7 +1611,15 @@ font-lock-fontify-syntactically-region (regexp-quote (replace-regexp-in-string "^ *" "" comment-end)))) ;; Find the `start' state. - (state (syntax-ppss start)) + (state (if (or syntax-ppss-table + (not font-lock--syntax-table-affects-ppss)) + (syntax-ppss start) + ;; If `syntax-ppss' doesn't have its own syntax-table and + ;; we have installed out own syntax-table which + ;; differs from the standard one in ways which affects PPSS, + ;; then we can't use `syntax-ppss' since that would pollute + ;; and be polluted by its cache. + (parse-partial-sexp (point-min) start))) face beg) (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name))) ;; @@ -1907,6 +1916,7 @@ font-lock-set-defaults ;; Case fold during regexp fontification? (setq-local font-lock-keywords-case-fold-search (nth 2 defaults)) ;; Syntax table for regexp and syntactic fontification? + (kill-local-variable 'font-lock--syntax-table-affects-ppss) (if (null (nth 3 defaults)) (setq-local font-lock-syntax-table nil) (setq-local font-lock-syntax-table (copy-syntax-table (syntax-table))) @@ -1916,7 +1926,14 @@ font-lock-set-defaults (dolist (char (if (numberp (car selem)) (list (car selem)) (mapcar #'identity (car selem)))) - (modify-syntax-entry char syntax font-lock-syntax-table))))) + (unless (memq (car (aref font-lock-syntax-table char)) + '(1 2 3)) ;"." "w" "_" + (setq font-lock--syntax-table-affects-ppss t)) + (modify-syntax-entry char syntax font-lock-syntax-table) + (unless (memq (car (aref font-lock-syntax-table char)) + '(1 2 3)) ;"." "w" "_" + (setq font-lock--syntax-table-affects-ppss t)) + )))) ;; (nth 4 defaults) used to hold `font-lock-beginning-of-syntax-function', ;; but that was removed in 25.1, so if it's a cons cell, we assume that ;; it's part of the variable alist. From MAILER-DAEMON Wed Jun 03 10:21:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUHA-0005ab-Et for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:21:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUH8-0005V1-2F for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:21:50 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:35501) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgUH6-0001nV-R7 for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:21:49 -0400 Received: by mail-wm1-x343.google.com with SMTP id q25so2290435wmj.0 for ; Wed, 03 Jun 2020 07:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=hSXKiUA1Ezm36zBo5QMD5ZIp1cjQdHmdn/YeGG9ov+4=; b=CQ+E9utwwfETqlgzw7nNfxPfeXx2INl+31yRQdlSB7xU13PT2vvDaaG1pFb8LqEjjT mWXn9A7xuW79b5YlV6+iWI8dDk6iieoaaBCS80TkCZq+nAhdOTpRWEeCpdhelm0TlEIz UWmKbwLHZCCOru8KrVCYojr4QEXxnznkbLhLgt3lJBBw/HP8024Hx2U+KOdTyZj8BWLp j+3CDSVsUigDj/WuioLjpUOX5wsj4NlXhx2lfQn1ABMI23LT0nfLQE+O5Y3SSDWVoEUJ XdSw/l+vcQ+fRCzPgmKMYAMKlzN0q65HivpnWZojTCMPuaBJyqZrP/pHeJdtV59PAUt6 bLmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=hSXKiUA1Ezm36zBo5QMD5ZIp1cjQdHmdn/YeGG9ov+4=; b=EKJ/y8QqcqqRT8oJSsdeNws4SO9bJpZGr2FGXUJEI4pKA9dSoxgijYEqtwqLiTfQdH qlWhx/cWXbzBOko0im5uDhhHQwiFkuv6hWqOvtaOfvJoIPfjyrzsruwZ5sTa8Jc1G7P9 eX4JQkQZl7XTZ9zXLqsAfNLf0gfSUTqMmEwFGnpykbgA8382YYFIf78IyOQOS+/WImYS 4Sa/iFanu2X78ZllkOXrpkJ0h6c8A1+wEeEieALIi/Ese+HRZo4yxiIy6cZgU0wcrQkp dEQDnNVSstS61vw2l8NPQTSmZcCbYS+AVhV4krByLF0sMHjulfGLi86C/a5TF1Dvygo6 m/jA== X-Gm-Message-State: AOAM532yc8xPVst9Xgm3zbX/9oSpnJrgd8a4tyz3K+30QD/Uo3rlTXpx e5JCfZtbjA181LPpp0Bah0XhhB6O X-Google-Smtp-Source: ABdhPJz6nIsUP6vGZyQD51qipgSPYUqgLCOUGpr1JKtigewGjsmgZANkpVQblahOBTr6EZPD43+/Ww== X-Received: by 2002:a1c:998c:: with SMTP id b134mr9458985wme.78.1591194107136; Wed, 03 Jun 2020 07:21:47 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id c143sm4358355wmd.1.2020.06.03.07.21.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 07:21:45 -0700 (PDT) Sender: DG Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion To: Konstantin Kharlamov , ndame , Emacs developers References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> From: Dmitry Gutov Message-ID: <701b151d-2133-7916-3169-5d0f29cf3bb8@yandex.ru> Date: Wed, 3 Jun 2020 17:21:44 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=raaahh@gmail.com; helo=mail-wm1-x343.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:21:50 -0000 On 03.06.2020 16:59, Konstantin Kharlamov wrote: > I am not sure why you say it seems wasteful. Do you mean perhaps, as > opposed to setting, say, 100ms? Or 50ms, maybe. Wasteful of CPU cycles and laptop battery, I'd say. Of course, the exact impact depends on the size of your project. > 100ms I think is the top limit this > timeout should be set. The defaults are not set in stone, we can discuss changing them on the company issue tracker. But it's a balancing act. Set the value too small -- and the result is more likely to annoy people who don't rely on the popup as much. > I just tested how quickly I can type a string > "prog". I fired up `libinput debug-events` and tried to type > "prog". The letter "g" says "+0.256s", i.e. it took 256ms. This means > even if I set to 100ms, there's high chance I won't get any > autocompletion. Should I take this to mean the completion request itself took 156ms to finish? >> To be 100% sure, you should try it yourself (I don't do C/C++). >> Maybe >> someone else here can testify, though. > > Thank you! Indeed, I confirm this does seem to work with an async > backend. I tested it as follows: > > 1. Opened a test.cpp file, enabled company-irony, checked that > completion works. > 2. I set `(setq company-idle-delay 0)` > 3. I paused the irony-server process with `kill -SIGSTOP $(pidof > irony-server)` > 4. I tried typing a gibberish to see if I get any delay in rendering a > text. > > I don't see any lags, so I assume using an async backend with the > timeout set to 0 should work fine. Indeed, that's what asynchronous means. But the quality of the user experience also depends on how quickly the backing server can handle those requests. > This is great news! I wonder if > company mode should default to zero or so timeout, and print a warning > if somebody tries to connect a non-async backend? The majority of backends are synchronous. And the "standard" completion API for Emacs (which we want to integrate with) still only supports the synchronous convention. From MAILER-DAEMON Wed Jun 03 10:23:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUIs-0007lc-Km for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:23:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUIo-0007jZ-Sy for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:23:36 -0400 Received: from mx.sdf.org ([205.166.94.20]:51161) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUIn-0002JO-0u; Wed, 03 Jun 2020 10:23:34 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 053ENLPE000232 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Wed, 3 Jun 2020 14:23:22 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 053ENLAJ013512; Wed, 3 Jun 2020 14:23:21 GMT From: Andrea Corallo To: Stefan Monnier Cc: Eli Zaretskii , Paul Eggert , emacs-devel@gnu.org Subject: Re: Native compilation: the bird-eye view References: <83o8qocd32.fsf@gnu.org> <83ftbzdewp.fsf@gnu.org> <83blmndbpo.fsf@gnu.org> <838shrdb1c.fsf@gnu.org> <837dxbd93b.fsf@gnu.org> Date: Wed, 03 Jun 2020 14:23:21 +0000 In-Reply-To: (Stefan Monnier's message of "Tue, 02 Jun 2020 11:16:46 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 10:23:30 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:23:36 -0000 Stefan Monnier writes: > This is OK but doubles the length of the effective `load-path`. > Another option would be to use > > ~/.emacs.d/eln-cache/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/.eln > > where is a hash of the corresponding .el(c) file name. Similarly, instead of > > /bar/foo.el => /bar/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/foo.eln > > we would store those compiled files to a "global eln-cache" > > /bar/foo.el => /usr/lib/eln-cache/eln-x86_64-pc-linux-gnu-d241bf45dde51f21/.eln > > So we'd have a `eln-cache-path` where to search for those files and when > loading a file we'd first look for the .el file in `load-path` and once > found, we'd look inside `eln-cache-path` to see if that file has > a compiled version available. `eln-cache-path` would be expected to be > short (2 entries in the typical case). This is a good idea. My concerns are on how the user would interact with this cache ex: searching if a given eln exists, what's its date, removing one eln etc. Should the user goes always through an API we provide? Or do we want have everything 100% transparent? Andrea -- akrl@sdf.org From MAILER-DAEMON Wed Jun 03 10:38:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUXG-0002Ha-94 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:38:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUXF-0002HN-4u for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:38:29 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:20666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUXD-0005x2-TF; Wed, 03 Jun 2020 10:38:28 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 332E21002FC; Wed, 3 Jun 2020 10:38:26 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 932F2100234; Wed, 3 Jun 2020 10:38:20 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591195100; bh=gnp+BPcJsdPk0g7SRzBSLLfdEeoxvFmsoDCNKjI0Xm0=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=PZNZ5rY2p76gxHxRh4U3hQmwBN3Ol9a2/S5K9F++YAQoWpn2DPuHvzhd0YXFhHGBr Vz+TguQBIlryEHh+4zHmjkzmasvLe55Oh6bh9gGqJxdG37kvhrmAmXk6CGyAgczvt3 UQ4EXSqIWTlaKwScBesme8I78iimABQvpy5fvSTe02bVKyAWUlOWJwczMjHMCAqF5H 4fRba1qb9Fo0Ufe+Y3QaYdqAO8LsIBv4NPVXvVOSfwic9j49AxK63FH+qUC4KCuxJ/ reokOqbIQdLud787yi+0XgJzNyzKv4Z9SiY1eKgbLW2qBxZ9uwbm92QD4Rum2Hm+5e vadDJP8ftMNtA== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 23D21120EE7; Wed, 3 Jun 2020 10:38:20 -0400 (EDT) From: Stefan Monnier To: Andrea Corallo Cc: Eli Zaretskii , Paul Eggert , emacs-devel@gnu.org Subject: Re: Native compilation: the bird-eye view Message-ID: References: <83o8qocd32.fsf@gnu.org> <83ftbzdewp.fsf@gnu.org> <83blmndbpo.fsf@gnu.org> <838shrdb1c.fsf@gnu.org> <837dxbd93b.fsf@gnu.org> Date: Wed, 03 Jun 2020 10:38:19 -0400 In-Reply-To: (Andrea Corallo's message of "Wed, 03 Jun 2020 14:23:21 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.002 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 10:13:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:38:29 -0000 > This is a good idea. My concerns are on how the user would interact > with this cache ex: searching if a given eln exists, what's its date, > removing one eln etc. > Should the user goes always through an API we provide? Or do we want have > everything 100% transparent? I think the idea would be to aim to make it "100% transparent" for normal users. Stefan From MAILER-DAEMON Wed Jun 03 10:40:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUZP-0005eD-VN for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:40:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34212) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUZK-0005aN-CB for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:40:38 -0400 Received: from forward105j.mail.yandex.net ([2a02:6b8:0:801:2::108]:58972) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUZH-0006QC-Mk for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:40:37 -0400 Received: from mxback12g.mail.yandex.net (mxback12g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:91]) by forward105j.mail.yandex.net (Yandex) with ESMTP id 0374EB20C92; Wed, 3 Jun 2020 17:40:31 +0300 (MSK) Received: from sas1-e00c2743cdb8.qloud-c.yandex.net (sas1-e00c2743cdb8.qloud-c.yandex.net [2a02:6b8:c14:3a22:0:640:e00c:2743]) by mxback12g.mail.yandex.net (mxback/Yandex) with ESMTP id 2c2qmfr5VV-eUjikAvC; Wed, 03 Jun 2020 17:40:30 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591195230; bh=qbVE43y+Wux+GVI/9Iv65QXEcARG7JizL814A+D4JnU=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=keVmxDcrSkFqejFVydGToNf1icPhwJvi8b9n7dj2EO0h7lxD2li1BFf2ogEi6Ylam CbZ51QuvWpJ0dbF8qGRCRt0FQtHb++pPhCgy0xXPJOAfEjrn+sPpIl6FAzViJqD3fe HccixrP7NNONMKXgQZRYrTkxSPRZL93bEZBOvDQM= Authentication-Results: mxback12g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas1-e00c2743cdb8.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id L9zM2c5iIZ-eUaeNTXQ; Wed, 03 Jun 2020 17:40:30 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion From: Konstantin Kharlamov To: Dmitry Gutov , ndame , Emacs developers Date: Wed, 03 Jun 2020 17:40:30 +0300 In-Reply-To: <701b151d-2133-7916-3169-5d0f29cf3bb8@yandex.ru> References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> <701b151d-2133-7916-3169-5d0f29cf3bb8@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:801:2::108; envelope-from=hi-angel@yandex.ru; helo=forward105j.mail.yandex.net 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:40:38 -0000 On Wed, 2020-06-03 at 17:21 +0300, Dmitry Gutov wrote: > On 03.06.2020 16:59, Konstantin Kharlamov wrote: > > > I am not sure why you say it seems wasteful. Do you mean perhaps, > > as > > opposed to setting, say, 100ms? > > Or 50ms, maybe. > > Wasteful of CPU cycles and laptop battery, I'd say. Of course, the > exact > impact depends on the size of your project. > > > 100ms I think is the top limit this > > timeout should be set. > > The defaults are not set in stone, we can discuss changing them on > the > company issue tracker. But it's a balancing act. Set the value too > small > -- and the result is more likely to annoy people who don't rely on > the > popup as much. > > > I just tested how quickly I can type a string > > "prog". I fired up `libinput debug-events` and tried to type > > "prog". The letter "g" says "+0.256s", i.e. it took 256ms. This > > means > > even if I set to 100ms, there's high chance I won't get any > > autocompletion. > > Should I take this to mean the completion request itself took 156ms > to > finish? I mean, I was typing outside Emacs, in the same terminal where `libinput debug-events` was running. I was just testing how fast I can type, to figure out how small the timeout should be set if I want a completion to pop up. > > > To be 100% sure, you should try it yourself (I don't do C/C++). > > > Maybe > > > someone else here can testify, though. > > > > Thank you! Indeed, I confirm this does seem to work with an async > > backend. I tested it as follows: > > > > 1. Opened a test.cpp file, enabled company-irony, checked that > > completion works. > > 2. I set `(setq company-idle-delay 0)` > > 3. I paused the irony-server process with `kill -SIGSTOP $(pidof > > irony-server)` > > 4. I tried typing a gibberish to see if I get any delay in > > rendering a > > text. > > > > I don't see any lags, so I assume using an async backend with the > > timeout set to 0 should work fine. > > Indeed, that's what asynchronous means. But the quality of the user > experience also depends on how quickly the backing server can handle > those requests. Well, I paused the backing server in the steps above, so server couldn't answer. This was emulating a behaviour where a user works with a project too big for backend to return a completion immediately. Expected behaviour was that I should not get any lags while typing, and there were no lags. > > This is great news! I wonder if > > company mode should default to zero or so timeout, and print a > > warning > > if somebody tries to connect a non-async backend? > > The majority of backends are synchronous. And the "standard" > completion > API for Emacs (which we want to integrate with) still only supports > the > synchronous convention. I am a bit confused by the last sentence. What's the relation between the Emacs API and already working company-mode? Did you mean, company- mode is trying to be compatible with backends for some standard Emacs API, and those can't be async? From MAILER-DAEMON Wed Jun 03 10:44:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUco-00010O-QQ for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:44:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34564) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUcn-0000zp-5n for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:44:13 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42727) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgUcm-00071l-TM; Wed, 03 Jun 2020 10:44:12 -0400 Received: from [176.228.60.248] (port=3749 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgUcl-0007iY-I0; Wed, 03 Jun 2020 10:44:12 -0400 Date: Wed, 03 Jun 2020 17:43:56 +0300 Message-Id: <835zc8ciqb.fsf@gnu.org> From: Eli Zaretskii To: "numbchild@gmail.com" CC: emacs-devel@gnu.org In-Reply-To: (numbchild@gmail.com) Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:44:13 -0000 [Please use "Reply All" to keep the list CC'ed.] > From: "numbchild@gmail.com" > Date: Wed, 3 Jun 2020 19:48:57 +0800 > > > Can you please describe how you set the overlay, or better yet, show the code which does so? > > The main functionality code set overlay on org-agenda is here: > > (defun org-agenda-log-mode-colorize-block () > "Set different line spacing based on clock time duration." > (save-excursion > (let* ((colors (cl-case (alist-get 'background-mode (frame-parameters)) > ('light > (list "#F6B1C3" "#FFFF9D" "#BEEB9F" "#ADD5F7")) > ('dark > (list "#aa557f" "DarkGreen" "DarkSlateGray" "DarkSlateBlue")))) > pos > duration) > (nconc colors colors) > (goto-char (point-min)) > (while (setq pos (next-single-property-change (point) 'duration)) > (goto-char pos) > (when (and (not (equal pos (point-at-eol))) > (setq duration (org-get-at-bol 'duration))) > ;; larger duration bar height > ;; FIXME (< duration 15) > (let ((line-height (if (< duration 15) 1.0 (+ 0.5 (/ duration 30)))) > (ov (make-overlay (point-at-bol) (1+ (point-at-eol))))) > (overlay-put ov 'face `(:background ,(car colors) :foreground "black")) > (setq colors (cdr colors)) > (overlay-put ov 'line-height line-height) > (overlay-put ov 'line-spacing (1- line-height)))))))) > > (add-hook 'org-agenda-finalize-hook #'org-agenda-log-mode-colorize-block) > > And for a minimal example of setting overlay code is here: > > (let ((line-height 20) > (ov (make-overlay (point-at-bol) (1+ (point-at-eol))))) > (overlay-put ov 'face '(:background "yellow")) > (overlay-put ov 'line-height line-height) > (overlay-put ov 'line-spacing (1- line-height))) > > > Did you per chance put the overlay on the part of the line that is not shown when you split the window? > > About this problem, I suggest you check out my video link, it shows how the overlay line-height property failed > when I split window with `split-window-right`. The line height property is gone. (I mean the visual effect is > gone.) In that case, this is the expected behavior: if the newline with the line-height property is not visible, the setting has no effect. It is conceptually the same as having a tall character or image displayed on a line: if you then truncate the line so that the tall element is not visible, the line's height will be decreased to reflect what is actually on display. This is not a bug. You are trying to use this property in a way that it wasn't designed to support. From MAILER-DAEMON Wed Jun 03 10:49:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgUi1-0006ke-3C for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 10:49:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUhz-0006jU-HT for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:49:35 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:38868) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgUhy-0008G1-6S for emacs-devel@gnu.org; Wed, 03 Jun 2020 10:49:34 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053Elx4s030681; Wed, 3 Jun 2020 14:49:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=+FV4Q4xNh5olYDuqvfrbCxWes6nh+Qu3JYz7RgvhstA=; b=pxC0EuprbdNdTxML0QUqpGtaF38X0H9relYod67JVuuixde3lGLVjLjAuRwENWX+5t9y WTESsSYiGWCSFy+oXNoFzISV0TsYX+QSaG1u/tL2MpGz/Vs2O2sdnqTr4KdbSExQJ4p1 h1cHrmHhOHmwjFyXPo+Dj91uEUo2AJIbn9wfGjnHUv5bTJ9/NH/ptMfHdlwVTq1a2k/3 ACU1IUO2PawqYWhDRzw0yf+UiaCEggT7KrSnfbhxcf+I1hvYxNeu8APDyC+zF1JYZVC1 bP6KBrqF9HL7xL0/Uwhm9tRoGoxtAljZU7q4HYI3NLXLsLhABdPdfNFPDBUD09YisYmP WA== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2130.oracle.com with ESMTP id 31bewr1sa6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 03 Jun 2020 14:49:31 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053EnSuP101955; Wed, 3 Jun 2020 14:49:31 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3030.oracle.com with ESMTP id 31c12r0dka-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 03 Jun 2020 14:49:30 +0000 Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 053EnSGt006753; Wed, 3 Jun 2020 14:49:28 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 3 Jun 2020 07:49:24 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Konstantin Kharlamov , ndame , Emacs developers Subject: RE: What is the most useful potential feature which Emacs lacks? A: Autocompletion References: In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 malwarescore=0 adultscore=0 suspectscore=1 spamscore=0 bulkscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030119 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9640 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 bulkscore=0 phishscore=0 suspectscore=1 impostorscore=0 cotscore=-2147483648 lowpriorityscore=0 mlxscore=0 adultscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030118 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 10:49:33 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 14:49:35 -0000 > Lack of such simple but immensely useful feature > is so disappointing FWIW - Icicles lets you control what you call autocompletion, and what Icicles calls incremental completion, in a few ways. This page explains it: https://www.emacswiki.org/emacs/Icicles_-_Icompletion#IncrementalCompletion Option `icicle-incremental-completion' is the main on/off control. Options `icicle-incremental-completion-delay', `icicle-incremental-completion-threshold', and `icicle-show-completions-initially' determine when it kicks in. But one size doesn't fit all. Different sets of completion candidates (e.g. domain size), and different kinds of completion, imply different fits, in terms of such option values. A given command that uses completion knows its candidates domain and the kind(s) of completion. It can bind such options to values that provide appropriate default behavior for that command. But just as importantly, you can change the option values interactively, while completing: increase or decrease the delay or threshold, for example, or change the general on/off behavior. To me, easy user control is the most important thing for such a feature. A command knows what kind of completion it's dealing with, but only a user knows just what s?he wants/needs, during any given invocation of a command that uses completion. From MAILER-DAEMON Wed Jun 03 13:04:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgWo6-0001CI-IX for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 13:04:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgWo4-0001C8-Nz for emacs-devel@gnu.org; Wed, 03 Jun 2020 13:04:00 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:38879) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgWo3-0005PY-0i for emacs-devel@gnu.org; Wed, 03 Jun 2020 13:04:00 -0400 Received: by mail-wr1-x436.google.com with SMTP id e1so3184070wrt.5 for ; Wed, 03 Jun 2020 10:03:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=jmL4UendFYorZ1wcRBuA+bxzT92Ybbh4PSyQJt4pdHI=; b=S+V3ymeqAnigWBP2KCViyWSMnEhM6o3DqfdOZfEYA1bM6uW3T5IZ9J5XVcLqZ0Y/vL W4U7nKbCVorDIKtB7lzMHxPW9pMudAzwNTVZQlniVtzvEaBgbCFBkPxBCp8XZic/tCx5 eHxD4/P/ML3NBzds1LxekoUZ7oqmbaQR3Qwf1Y5TsnwccK8YDR3+SOgZCh892WUx8Ye+ DgTbRlTrdjwEPSDXjJAEM6GmnDSrZo4MUo7oklgKARLuHqGa2+EmgM1sxnPdvFtTuckQ gr10W3efpSdVV70syALB17RDIKROObftB8zE+MzII+LSjB8eOob/k98kOxdzffMMUCHT SdlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=jmL4UendFYorZ1wcRBuA+bxzT92Ybbh4PSyQJt4pdHI=; b=J9JSXhoXzUTOITTyt5amP3buFNZrlkfcK2QP5HMjuum292sDQQf3eGnCDqB3g1s4bm hh7DaaRJZTqbBJ0zec+ifaP5sqSJzYIObzO40E/Z9o7achFTcnPGUrA5cCkiZdW5YViF Fo/gXlMEaGZVddC46p3wePxaH7Z9fsvIVyLGqPkryoSpkMUqic4XqV490ih2ibKZdepr 55OJrJq5T4GcNWtrmnIAuMulcuUoS3raf8X1L04XCsI2ipQSX4pq/D761pKgL3aAZQrU 6+32SUTA6V/HBKtD5dUafRr4DLwZg3/JZ5b+NigTTnWzlH/mwafQdLvenB5jeX2dGIGS bbzg== X-Gm-Message-State: AOAM530Vo/Gb0cb0RBEgGfySwN/XyuO2XiKmqhe112KFkQN7+MX4TDXu +gQdg2GB1vq4lnZgxW39yir4Zw== X-Google-Smtp-Source: ABdhPJzI3+LvENb8AxA8qyhIfDM09dV0SzsdzCl5PB2hgGHT7fTWwHVU8iWOwSXWUJbZgkFMx7dQvw== X-Received: by 2002:adf:db09:: with SMTP id s9mr408185wri.256.1591203836919; Wed, 03 Jun 2020 10:03:56 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id i3sm4186375wrm.83.2020.06.03.10.03.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 10:03:55 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: Stefan Monnier , jonas@bernoul.li, johnw@gnu.org, emacs-devel@gnu.org Subject: Re: Un-deprecating oset References: <87eery1xhe.fsf@bernoul.li> <87a72d42h2.fsf@bernoul.li> <87a726tg3c.fsf@bernoul.li> <877dx1rt78.fsf@bernoul.li> <83zh9wujkx.fsf@gnu.org> <83sgfougls.fsf@gnu.org> <874krsxn48.fsf@tcd.ie> Date: Wed, 03 Jun 2020 18:03:53 +0100 In-Reply-To: <874krsxn48.fsf@tcd.ie> (Basil L. Contovounesios's message of "Wed, 03 Jun 2020 15:03:35 +0100") Message-ID: <87img8ulmu.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: none client-ip=2a00:1450:4864:20::436; envelope-from=contovob@tcd.ie; helo=mail-wr1-x436.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 17:04:01 -0000 --=-=-= Content-Type: text/plain "Basil L. Contovounesios" writes: > How's the attached patch for un-deprecating oset and oset-default? Here's an updated patch following an off-list suggestion by Stefan: --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Un-deprecate-oset-and-oset-default.patch >From fc8b024116da65074a05a94f8f1983fe94aad8da Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Wed, 3 Jun 2020 17:35:59 +0100 Subject: [PATCH] Un-deprecate oset and oset-default For discussion see the following threads: https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00674.html https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00099.html * lisp/emacs-lisp/eieio.el (oset, oset-default): Un-deprecate. * lisp/emacs-lisp/eieio-core.el (eieio-oref): Declare gv-setter here instead of in lisp/emacs-lisp/eieio.el. Suggested by Stefan Monnier . (eieio-oref-default): Add gv-setter declaration. * etc/NEWS: Announce these changes. * doc/misc/eieio.texi (Accessing Slots): Document oref and oref-default as generalized variables. Consistently document getters before setters. * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: Use lexical-binding. (eieio-test-13-init-methods): Simplify. (eieio-test-33-instance-tracker): Declare IT-list as special. --- doc/misc/eieio.texi | 32 ++++++++++++------- etc/NEWS | 7 +++- lisp/emacs-lisp/eieio-core.el | 4 ++- lisp/emacs-lisp/eieio.el | 14 ++------ .../emacs-lisp/eieio-tests/eieio-tests.el | 5 +-- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 3943c544c7..9e6028d3de 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -698,6 +698,27 @@ Accessing Slots referencing vectors (@pxref{Vectors,,,elisp,GNU Emacs Lisp Reference Manual}). +@defmac oref obj slot +@anchor{oref} +This macro retrieves the value stored in @var{obj} in the slot named +by @var{slot}. @var{slot} is the name of the slot when created by +@dfn{defclass}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + +@defmac oref-default class slot +@anchor{oref-default} +This macro returns the value of the class-allocated @var{slot} from +@var{class}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + @defmac oset object slot value This macro sets the value behind @var{slot} to @var{value} in @var{object}. It returns @var{value}. @@ -716,17 +737,6 @@ Accessing Slots @end example @end defmac -@defmac oref obj slot -@anchor{oref} -Retrieve the value stored in @var{obj} in the slot named by @var{slot}. -Slot is the name of the slot when created by @dfn{defclass}. -@end defmac - -@defmac oref-default class slot -@anchor{oref-default} -Get the value of the class-allocated @var{slot} from @var{class}. -@end defmac - The following accessors are defined by CLOS to reference or modify slot values, and use the previously mentioned set/ref routines. diff --git a/etc/NEWS b/etc/NEWS index ed4722b27f..27e511047e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -112,7 +112,12 @@ setting the variable 'auto-save-visited-mode' buffer-locally to nil. ** New bindings in occur-mode, 'next-error-no-select' bound to 'n' and 'previous-error-no-select' bound to 'p'. -** EIEIO: 'oset' and 'oset-default' are declared obsolete. +** EIEIO + ++++ +*** The macro 'oref-default' can now be used with 'setf'. +It is now defined as a generalized variable that can be used with +'setf' to modify the value stored in a given class slot. ** New minor mode 'cl-font-lock-built-in-mode' for `lisp-mode'. The mode provides refined highlighting of built-in functions, types, diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 1e53f30a2a..3bc65d0d4c 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -730,7 +730,8 @@ eieio-oref (guard (not (memq name eieio--known-slot-names)))) (macroexp--warn-and-return (format-message "Unknown slot `%S'" name) exp 'compile-only)) - (_ exp))))) + (_ exp)))) + (gv-setter eieio-oset)) (cl-check-type slot symbol) (cl-check-type obj (or eieio-object class)) (let* ((class (cond ((symbolp obj) @@ -755,6 +756,7 @@ eieio-oref (defun eieio-oref-default (obj slot) "Do the work for the macro `oref-default' with similar parameters. Fills in OBJ's SLOT with its default value." + (declare (gv-setter eieio-oset-default)) (cl-check-type obj (or eieio-object class)) (cl-check-type slot symbol) (let* ((cl (cond ((symbolp obj) (cl--find-class obj)) diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index ee5dd2cccd..b75410ee22 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -513,8 +513,7 @@ oset "Set the value in OBJ for slot SLOT to VALUE. SLOT is the slot name as specified in `defclass' or the tag created with in the :initarg slot. VALUE can be any Lisp object." - (declare (obsolete "use (setf (oref ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset ,obj (quote ,slot) ,value)) (defmacro oset-default (class slot value) @@ -522,8 +521,7 @@ oset-default The default value is usually set with the :initform tag during class creation. This allows users to change the default behavior of classes after they are created." - (declare (obsolete "use (setf (oref-default ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset-default ,class (quote ,slot) ,value)) ;;; CLOS queries into classes and slots @@ -647,14 +645,6 @@ object-remove-from-list nil (eieio-oset object slot (delete item (eieio-oref object slot))))) -;;; Here are some CLOS items that need the CL package -;; - -;; FIXME: Shouldn't this be a more complex gv-expander which extracts the -;; common code between oref and oset, so as to reduce the redundant work done -;; in (push foo (oref bar baz)), like we do for the `nth' expander? -(gv-define-simple-setter eieio-oref eieio-oset) - ;;; ;; We want all objects created by EIEIO to have some default set of diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el index 34c20b2003..21adc91e55 100644 --- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el +++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el @@ -1,4 +1,4 @@ -;;; eieio-tests.el -- eieio tests routines +;;; eieio-tests.el -- eieio test routines -*- lexical-binding: t -*- ;; Copyright (C) 1999-2003, 2005-2010, 2012-2020 Free Software ;; Foundation, Inc. @@ -356,7 +356,7 @@ eieio-test-13-init-methods (oset a test-tag 1)) (let ((ca (class-a))) - (should-not (/= (oref ca test-tag) 2)))) + (should (= (oref ca test-tag) 2)))) ;;; Perform slot testing @@ -852,6 +852,7 @@ IT "Instance Tracker test object.") (ert-deftest eieio-test-33-instance-tracker () + (defvar IT-list) (let (IT-list IT1) (should (setq IT1 (IT))) ;; The instance tracker must find this -- 2.26.2 --=-=-= Content-Type: text/plain > Should the changes to the manuals go to emacs-27 instead of master? And here's a separate patch for the changes that can go into emacs-27: --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Minor-improvements-to-EDE-and-EIEIO-manuals.patch >From 2421e4534646cfd49f6e701359826f31c9d351fc Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Wed, 3 Jun 2020 17:31:44 +0100 Subject: [PATCH] Minor improvements to EDE and EIEIO manuals For discussion, see the following threads: https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00099.html * doc/misc/ede.texi (ede-generic-project): Clean up example. * doc/misc/eieio.texi (Accessing Slots): Document slot-value as a generalized variable and set-slot-value as obsolete. (Predicates): Fix typo. (Introspection): Document eieio-class-slots in place of the obsolete object-slots. --- doc/misc/ede.texi | 10 ++++------ doc/misc/eieio.texi | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index 584b0d7ee5..412176986c 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -955,18 +955,16 @@ ede-generic-project ;;; MAKEFILE (defclass ede-generic-makefile-project (ede-generic-project) - ((buildfile :initform "Makefile") - ) + ((buildfile :initform "Makefile")) "Generic Project for makefiles.") (defmethod ede-generic-setup-configuration ((proj ede-generic-makefile-project) config) - "Setup a configuration for Make." + "Set up a configuration for Make." (oset config build-command "make -k") - (oset config debug-command "gdb ") - ) + (oset config debug-command "gdb ")) (ede-generic-new-autoloader "generic-makefile" "Make" - "Makefile" 'ede-generic-makefile-project) + "Makefile" 'ede-generic-makefile-project) @end example This example project will detect any directory with the file diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 3943c544c7..aceaff051e 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -734,14 +734,21 @@ Accessing Slots @anchor{slot-value} This function retrieves the value of @var{slot} from @var{object}. Unlike @code{oref}, the symbol for @var{slot} must be quoted. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. @end defun @defun set-slot-value object slot value @anchor{set-slot-value} -This is not a CLOS function, but is the setter for @code{slot-value} -used by the @code{setf} macro. This -function sets the value of @var{slot} from @var{object}. Unlike +This function sets the value of @var{slot} from @var{object}. Unlike @code{oset}, the symbol for @var{slot} must be quoted. + +This is not a CLOS function, but is the obsolete setter for +@code{slot-value} used by the @code{setf} macro. It is therefore +recommended to use @w{@code{(setf (slot-value @var{object} @var{slot}) +@var{value})}} instead. @end defun @defun slot-makeunbound object slot @@ -1062,7 +1069,7 @@ Predicates This should look like Lisp symbols from other parts of Emacs such as buffers and processes, and is shorter and cleaner than printing the object's record. It is more useful to use @code{object-print} to get -and object's print form, as this allows the object to add extra display +an object's print form, as this allows the object to add extra display information into the symbol. @end defun @@ -1217,7 +1224,7 @@ Introspection some functions have been provided. None of these functions are a part of CLOS. -@defun object-slots obj +@defun eieio-class-slots obj Return the list of public slots for @var{obj}. @end defun -- 2.26.2 --=-=-= Content-Type: text/plain -- Basil --=-=-=-- From MAILER-DAEMON Wed Jun 03 14:49:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgYSF-0002Wv-Ir for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 14:49:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60940) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgYSC-0002Wg-Ag for emacs-devel@gnu.org; Wed, 03 Jun 2020 14:49:32 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:39208) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgYSA-0000HX-Mr for emacs-devel@gnu.org; Wed, 03 Jun 2020 14:49:31 -0400 Received: by mail-wr1-x435.google.com with SMTP id t18so3494138wru.6 for ; Wed, 03 Jun 2020 11:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=KRTUHqgWXkGr6PDMaBOJDaWjNB5xAvDuQWwk4ac8AM8=; b=CrdEcI6gE8rNyxj0S7KVur59rWrVz8IlKf4JKMx+OnN/aNoutVf2WdWGy06oe5LoNT VJK1N7q6EhYPB9gOj+MAbfmin8tDj4ImF1DbguNpZ7J7AcIdk8ehhBAsxkZEK03S+500 Ichj9q9Nk82fWkNcR3NOWEXV1eMcrP/fQtCNhA5xDKncT2ClXvKfF9roHzfvHIBoeohc vs2/xgWNKLeAiOLAMEG7SXL3fnEHvPKCwYlhkFcjLeiBjLj0gS7w0dDENnOPVDkVFfzQ OotKxX9Lh0MAQd064mSQQfB37suXlG+YekoJf9xCnb+Ka2oDsmswE7ZkB+cUhGtCThsE EbyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=KRTUHqgWXkGr6PDMaBOJDaWjNB5xAvDuQWwk4ac8AM8=; b=kjIYys/aF227i5cpH9idYAYZulJfiVJHOb3Y5ZLSUMXYjfM42tnfZ7Bl3UV3zxThQ4 wGXMWte1lfghr8YPqm8FyG5D095o0KSdot4qCn4WQCiiVsFgCz7mrEq/wiSBYaH+lxH5 eKvJb3v/wXp92QhyF5XcZ1iDvCBZxTIsFqIQVKL2+L6JUzEaK9/A1sjKF03yBDXslyDN fhZn3EmVdAhFYkrvTl37KcodhxXQx20sebnLnGHo2QviBudrI3nOnfGMD2SC50Jn0x2A +fBu3nIv5k8mCuvfKGgCIG85b82OlgXFV1dFsXds1isDfypVpdXHNoAgRNErJEg7bG7+ pTAw== X-Gm-Message-State: AOAM531GOtElzfEZuQ9dJbADUkMDbWsGBqvtJhFPerRTT+FCJ5FW0WH2 eXjnbZ6kx31eLBeYNWkkhXNKIClT X-Google-Smtp-Source: ABdhPJxjQbwh/6dO3gdDKPAscuwRD4hvB3ktMQOhWQ/3NR9MBbM+1l94IxWez7TJbKxQ8biW3Lc73w== X-Received: by 2002:adf:ff83:: with SMTP id j3mr778954wrr.264.1591210168391; Wed, 03 Jun 2020 11:49:28 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id u7sm4696695wrm.23.2020.06.03.11.49.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 11:49:27 -0700 (PDT) Sender: DG Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion To: Konstantin Kharlamov , ndame , Emacs developers References: <380db8f0-0e18-744f-d72a-a6e12c3b6e1d@yandex.ru> <8919f9382c738573f20d97e22f293d61866f99b8.camel@yandex.ru> <5f3891ac-29f5-f544-360c-384ff9608bd1@yandex.ru> <701b151d-2133-7916-3169-5d0f29cf3bb8@yandex.ru> From: Dmitry Gutov Message-ID: <69ab5904-bcba-a4c2-4f42-8488d86bddbe@yandex.ru> Date: Wed, 3 Jun 2020 21:49:26 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::435; envelope-from=raaahh@gmail.com; helo=mail-wr1-x435.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 18:49:32 -0000 On 03.06.2020 17:40, Konstantin Kharlamov wrote: > I mean, I was typing outside Emacs, in the same terminal where > `libinput debug-events` was running. I was just testing how fast I can > type, to figure out how small the timeout should be set if I want a > completion to pop up. Not sure how to interpret its output. Here's what I was getting while typing 'prog': event15 KEYBOARD_KEY +21.57s *** (-1) pressed event15 KEYBOARD_KEY +21.66s *** (-1) pressed event15 KEYBOARD_KEY +21.68s *** (-1) released event15 KEYBOARD_KEY +21.74s *** (-1) pressed event15 KEYBOARD_KEY +21.76s *** (-1) released event15 KEYBOARD_KEY +21.84s *** (-1) pressed event15 KEYBOARD_KEY +21.86s *** (-1) released event15 KEYBOARD_KEY +22.00s *** (-1) released That seems like I hit a key per ~100ms, but handling the releases adds its latency. >>> I don't see any lags, so I assume using an async backend with the >>> timeout set to 0 should work fine. >> >> Indeed, that's what asynchronous means. But the quality of the user >> experience also depends on how quickly the backing server can handle >> those requests. > > Well, I paused the backing server in the steps above, so server > couldn't answer. This was emulating a behaviour where a user works with > a project too big for backend to return a completion immediately. That tests the best case (which is, it assumes that when you turn the server back, it can handle the load). No typing latency is good (of course), but if you don't see completion suggestions because the backing process is overloaded, that's not so great either. I'm not saying it's going to be a problem with Irony or LSP necessarily, but I've seen this reported in other circumstances. Just something to pay attention to. >> The majority of backends are synchronous. And the "standard" >> completion >> API for Emacs (which we want to integrate with) still only supports >> the >> synchronous convention. > > I am a bit confused by the last sentence. What's the relation between > the Emacs API and already working company-mode? Did you mean, company- > mode is trying to be compatible with backends for some standard Emacs > API, and those can't be async? Pretty much. Eglot does include a hack to minimize typing latency as well, but it's an ad-hoc solution, and there's no way Company would be able to detect this kind of approach being used. From MAILER-DAEMON Wed Jun 03 15:15:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgYrL-00045O-Vy for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 15:15:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34748) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgYrK-00044B-N9 for emacs-devel@gnu.org; Wed, 03 Jun 2020 15:15:30 -0400 Received: from aibo.runbox.com ([91.220.196.211]:41136) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgYrJ-0004Tb-1q for emacs-devel@gnu.org; Wed, 03 Jun 2020 15:15:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From; bh=R2jUZjTBblJSfWzl9pUYKk8mmqomsbjY/W7+wtjaoXo=; b=dsdIPlgCcysrtpcC6f6O93e+Dl pEZEsDfACr7zME6wLy6KU+ihzD29HuN7aNsxs+fGIhs9e0C3Z0HTiihsIWoWlWLueJ5jkldUrtJFL b380Bqq8nfWQxEHwhMHDZkH+1/YbeiqibUAvaeXalk6nzfdxwfxpV8bjTNeWM+FBBCiCD7t+Xjew3 dzNRcm2Qp/JI3b4ik6svnIOiZHSrzxsyK/RIJ1McYBhmQLAW+IbAIi/HAgrVlyAJdzb2acg31kBXs HoM4pqKn80EqQ8ikB9qma+8ixkqER80gRLnj/lQnxLbwdGNYooDJEGu9PBvzbLacGR+jMdidYixV6 ndxWLayg==; Received: from [10.9.9.74] (helo=submission03.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgYrD-0000zK-Qo; Wed, 03 Jun 2020 21:15:24 +0200 Received: by submission03.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgYqy-0002tb-7C; Wed, 03 Jun 2020 21:15:08 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: "Basil L. Contovounesios" Cc: Dmitry Gutov , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87lfl42xul.fsf@tcd.ie> <87mu5kz2tp.fsf@tcd.ie> Date: Wed, 03 Jun 2020 21:15:07 +0200 In-Reply-To: <87mu5kz2tp.fsf@tcd.ie> (Basil L. Contovounesios's message of "Wed, 03 Jun 2020 14:38:58 +0100") Message-ID: <87lfl4x8p0.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 15:15:24 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 19:15:30 -0000 "Basil L. Contovounesios" writes: > Dmitry Gutov writes: > >> On 03.06.2020 14:27, Basil L. Contovounesios wrote: >>> With that in mind, I wonder whether project-switch-commands should use >>> character rather than string keys. Or would that be too limiting? >> >> That would probably make it more compatible to use with read-multiple-choice. >> >> The downsides: a bit less readable for the casual reader, I guess? And if keys a >> strings, the feature could be extended to handle full key sequences, maybe. But >> I'm not sure this is really needed. > > Perhaps read-multiple-choice will be extended to support both one day... I think compatibility with read-multiple-choice outweighs those downsides. Then if read-multiple-choice is extended to support both one day, project-switch-commands can grow with it (after we've changed project-switch-project to use read-multiple-choice). -- Simen From MAILER-DAEMON Wed Jun 03 16:11:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgZjV-0007Xu-Mk for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 16:11:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38584) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgZjT-0007Xd-As for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:11:27 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:36728) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgZjR-0006W9-R2 for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:11:26 -0400 Received: by mail-wr1-x42a.google.com with SMTP id q11so3735322wrp.3 for ; Wed, 03 Jun 2020 13:11:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/mVpBY9J70eLty9knOC4IJjQOoUgbg1PtQ6xxee6tQk=; b=a+GWn8yx3lOKDy0i2W62eu1kYf9TANt9By97xE/mPOSfrZR5QBT9qoifJBAPhipuHk yDjQOCPhN78SUwkuN69VhXZnrBjh1YH3oNo8b2l6hbCUUQE02AcM6b6yHdGnjPjnsrQ3 BtrbDM6Dsmi1P8SF5WNBpnSB1RTC6L9Ha6aSjhuRVDB2oCkl1Ca2gcvUOD/bDDQP6X04 quw8KH3+Qm1Jp9eYsDzPSlW//Cu8JOX/rCaeYT5bC5B9Ed1g/sgAgX8AiMSF2+QhNEJL 1bTo8aV3wIKL1ZzVubH9wJk5ogF90Z+cC8jPk9pkNnTQDkiOQoS3+qoh2r1PdjcifjKb kPPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/mVpBY9J70eLty9knOC4IJjQOoUgbg1PtQ6xxee6tQk=; b=ppP+wE4Nmph7BQA/5WhVqDbd8I0KknttL4u2a2J2W249UU0O3Tj8lcGKI9LUpwAp8g z+Mb+/u4V3nuDzZRJ8k6dmgc2ytttCfxdzlN1eGBhymZcEekGuwB0tdg32nb/7nlK+XL KtBkddymgKvZxMnzbSjZSvC3RbDMUWJKk/EVgqX4iUrMwrVcJ5K5mfjpj2MkWKmkTcvn wEm6GIWQJweZvpn5637dREhdOQzIt0qkY4t1Z1sdH2a4CDh8OdsNgSFVEmmVvXhu//bu htTuet9BKSL5EaFQWXNiyGMxl+LmO7VszuilTYe1TOXDodt6oPkx4py2/xoHUJIUS4AU NSvw== X-Gm-Message-State: AOAM5326Puzz9WRuSOq2rW9jr8acY9xW8devQNpFiUlpEMKFOODC7ymg iIth3yAqJf4ucv7SVAlpyKQd/lHQ X-Google-Smtp-Source: ABdhPJwn2djQ8ui6HQVgR3tdel+wsM3Q6TwBJtfZ61ldgmEsRiNu3Zj57rnynxoD0wKfR7pcyb/AZA== X-Received: by 2002:a5d:4d4d:: with SMTP id a13mr1061737wru.252.1591215080835; Wed, 03 Jun 2020 13:11:20 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b81sm4937143wmc.5.2020.06.03.13.11.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 13:11:20 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , "Basil L. Contovounesios" Cc: emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87lfl42xul.fsf@tcd.ie> <87mu5kz2tp.fsf@tcd.ie> <87lfl4x8p0.fsf@simenheg@gmail.com> From: Dmitry Gutov Message-ID: <8485f0b4-7650-7e27-11ca-6e37c47fefc6@yandex.ru> Date: Wed, 3 Jun 2020 23:11:18 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87lfl4x8p0.fsf@simenheg@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42a.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 20:11:27 -0000 On 03.06.2020 22:15, Simen Heggestøyl wrote: > I think compatibility with read-multiple-choice outweighs those > downsides. Then if read-multiple-choice is extended to support both one > day, project-switch-commands can grow with it (after we've changed > project-switch-project to use read-multiple-choice). Makes sense. Do you want to push that change, or should I? From MAILER-DAEMON Wed Jun 03 16:13:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgZlT-0008Nn-2Z for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 16:13:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38768) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgZlR-0008Ne-EU for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:13:29 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:33908) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgZlQ-0006jI-S1 for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:13:29 -0400 Received: by mail-wm1-x32e.google.com with SMTP id u26so5295071wmn.1 for ; Wed, 03 Jun 2020 13:13:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=eSFGM4jMDEAD9iV0xeha/nUR5UV9kg8d1bxFh3A1lQA=; b=JZ1UmXXBBAIhcpUBk63RBVhbZ7ty3AsGwOLEDZyXmN+u66nBQc8eqj+xMKYf+5g0Fk //qIEJO0gPF2gI537wHlTFk3e/cYHf8khkk4ZD6a7LENmH2RFOpN4fr0B6LyGqWGFsPw BJZERthMmrklYZX2HXnFSegQv3Y7kBlc5tGSwKLxhynLvYxw6mmbT8fbcKIYbTU7uTEO djHBZfn8TejCORAeh5yim45RhLcBIB4jZyaBP33Lmta3el/1PWug40zuniYpzk6QuFH9 mi5JuzOIjfCyDnHRKfTmEcKfGbvihXLo46Fee8F7jVJrNGkdiZhlTFOM4faiztVewC/T ogsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:cc:references:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=eSFGM4jMDEAD9iV0xeha/nUR5UV9kg8d1bxFh3A1lQA=; b=HmkgcEUwCCZ4QlEPZFz46chcAGP5rveePECGCRWKZYynKKmP1L3yXF9SzBp00xhO6j b5Twz8y+mMLGXfQTncuIg/ayJB9P8RMxyB0cBuWoPedMhzaKvoeCXWlziaC8QUwbNlmF NxnDo119Nw0zzcVDGI9uEt5cptHLpVWHU7rpXMOjD3y6c/GViAl+yIEn0eNFUzkbUCbh aEYevzfEftV0qKeOcdYof3Tnvq76c48a1v7EeabKLCZcKdQgFduuUgJFiYkgCGugRZSE goOgMbKody5NKnY/Qzrc61cJQDbti1XOh1JCwFk5TbXQsSf1phP478HZvNhPPFcYSB0c nc6w== X-Gm-Message-State: AOAM533dO3sl50zqpp8EA1AZfYvCs6MxDFeWeY+JBfe3yHJ0KJZgFEEZ ffy3zACCpIn49YprM3catA6tIQ/n X-Google-Smtp-Source: ABdhPJw0nwH3uO0RXUh9fKCttR61gisE6xODuJc3XgcNOcQpbPvUakz2K3pHr6X0bTn9O5DDoT1F8w== X-Received: by 2002:a05:600c:22c1:: with SMTP id 1mr814035wmg.50.1591215207153; Wed, 03 Jun 2020 13:13:27 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id q1sm4132799wmc.15.2020.06.03.13.13.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 13:13:26 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects From: Dmitry Gutov To: Juri Linkov Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> Message-ID: Date: Wed, 3 Jun 2020 23:13:24 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 20:13:29 -0000 Hi Juri, On 03.06.2020 00:34, Dmitry Gutov wrote: >>>> Also could you please >>>> add a command to run shell, in addition to the already added eshell. >>> Would you like to do the honors? >> No problem, done. Regarding the key binding change you have done in that patch, which of the following two options do you prefer? - Move project-eshell to 'e', project-shell to 'E', project-find-regexp back to 's', - Or move project-find-regexp to 'g'. From MAILER-DAEMON Wed Jun 03 16:15:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgZnW-0001BF-Cd for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 16:15:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgZnV-0001B7-5X for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:15:37 -0400 Received: from forward101j.mail.yandex.net ([5.45.198.241]:49291) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgZnS-00076M-Jg for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:15:36 -0400 Received: from mxback28g.mail.yandex.net (mxback28g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:328]) by forward101j.mail.yandex.net (Yandex) with ESMTP id 836A71BE090D; Wed, 3 Jun 2020 23:15:30 +0300 (MSK) Received: from iva3-dd2bb2ff2b5f.qloud-c.yandex.net (iva3-dd2bb2ff2b5f.qloud-c.yandex.net [2a02:6b8:c0c:7611:0:640:dd2b:b2ff]) by mxback28g.mail.yandex.net (mxback/Yandex) with ESMTP id uphBPIuMRL-FU2S22Ea; Wed, 03 Jun 2020 23:15:30 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1591215330; bh=F6Ksu21SLSv4S5WgUm1SywmjJOBEwTZL93ilkb+dRos=; h=In-Reply-To:To:From:Subject:References:Date:Message-ID; b=KwBC13/JfD65UQQTpLxP7O3/XJURfR03Cnm4TILy4t0ZCgyCUN9NeN+pDKPUyBbW0 OEojLiD2wAtwq//GvbZZfdxuP9TxWzObIFoHwuMAPC7W4jsBmUI6Wd84jApqfHMQVw 0aoxZCFkwFHRewRwwxt5m9ZdJN45j2mnRvGzqUqI= Authentication-Results: mxback28g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva3-dd2bb2ff2b5f.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id SC0XI8a2Bw-FT6mDpgO; Wed, 03 Jun 2020 23:15:29 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <92c19682bbe429234e6c7c486ad05799476d3e18.camel@yandex.ru> Subject: Re: What is the most useful potential feature which Emacs lacks? A: Autocompletion From: Konstantin Kharlamov To: Drew Adams , ndame , Emacs developers Date: Wed, 03 Jun 2020 23:15:29 +0300 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=5.45.198.241; envelope-from=hi-angel@yandex.ru; helo=forward101j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 16:15:31 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 20:15:37 -0000 On Wed, 2020-06-03 at 07:49 -0700, Drew Adams wrote: > > Lack of such simple but immensely useful feature > > is so disappointing > > FWIW - > > Icicles lets you control what you call autocompletion, > and what Icicles calls incremental completion, in a > few ways. > > This page explains it: > > https://www.emacswiki.org/emacs/Icicles_-_Icompletion#IncrementalCompletion > > Option `icicle-incremental-completion' is the main > on/off control. I don't know if I'm misreading it, but from what I read about this mode, it seems to only provide completions for minibuffer commands. Undoubtedly useful feature, and for this usecase I already use ido-mode with fuzzy matches. But in my original text I was rather referring to autocompletion when you write code/text, i.e. in buffers different from the minibuffer. From MAILER-DAEMON Wed Jun 03 16:38:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jga9l-00032p-61 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 16:38:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jga9j-00032U-9e for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:38:35 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:50952) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jga9i-0003Na-32 for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:38:34 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053KWUAH057171; Wed, 3 Jun 2020 20:38:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=+LUewGplAycBO+0L8v6PMutn5O6cq9lP6W37aYCRAHU=; b=RMvfyfALN64vMVUistOsQ+lg0NYKPXhP0z/kPW3s7U7r/sK6RY66Owx6MseBfaKdpgNd SxcCWS2JuTvgpLzjjGMeMRZy4ytNwBYG0I6LzrBKZ2TBZSEe+zsfZZSCvuEfKi/bSQD6 ulLr6NzJy71wgdTfWkTuciqxkw5syKEm+R2OaLagsXlRbEUmHVhS+leJUE8BC8258XY/ DwDz6TgN6pyWS9MRyjHzeF55A0ruELenNmkBw49OqsoOXM/t6fHWWKcwvqEzl2cLbJu1 LqQqlFf+z+B8dWYWma3itnlcP2Zr7VVhKFLAJRRTs18yM+6ygMgjbVkz7uEIOIM36MS0 0A== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2120.oracle.com with ESMTP id 31bfemb9xy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 03 Jun 2020 20:38:32 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053KY31l019806; Wed, 3 Jun 2020 20:36:31 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userp3020.oracle.com with ESMTP id 31dju3udax-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 03 Jun 2020 20:36:31 +0000 Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 053KaSOt006276; Wed, 3 Jun 2020 20:36:30 GMT MIME-Version: 1.0 Message-ID: <5dc33388-4c06-4373-8e94-fc1fcaf92c18@default> Date: Wed, 3 Jun 2020 13:36:24 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Konstantin Kharlamov , ndame , Emacs developers Subject: RE: What is the most useful potential feature which Emacs lacks? A: Autocompletion References: <92c19682bbe429234e6c7c486ad05799476d3e18.camel@yandex.ru> In-Reply-To: <92c19682bbe429234e6c7c486ad05799476d3e18.camel@yandex.ru> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9641 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 phishscore=0 malwarescore=0 mlxscore=0 adultscore=0 bulkscore=0 suspectscore=1 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030156 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9641 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=1 mlxlogscore=999 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1015 impostorscore=0 adultscore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030156 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 16:38:32 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 20:38:35 -0000 > I don't know if I'm misreading it, but from what I read about > this mode, it seems to only provide completions for minibuffer > commands. Undoubtedly useful feature, and for this usecase I already > use ido-mode with fuzzy matches. But in my original text I was rather > referring to autocompletion when you write code/text, i.e. in buffers > different from the minibuffer. You did not misread it. I should have made that clear. But I skipped reading the thread, so I didn't realize that's all the question is about. Icicles does support buffer-text completion here and there, but as you say, most of what's involved is about completion using the minibuffer - `completing-read', `read-file-name', etc. Even the (limited) Icicles support for buffer-text completion uses the minibuffer as long as there are multiple matching candidates, however. So in those cases you can take advantage of the usual Icicles features. You can think of such cases as popping up a list of autocomplete choices. The list is shown in `*Completions*' though, not in your usual menu form. This the doc topic that talks about Icicles buffer-text completion: https://www.emacswiki.org/emacs/Icicles_-_Completion_in_Other_Buffers Yes, this is a major lacuna. I haven't bothered to provide a general Icicles solution to buffer-text completion based on, say, `completion-at-point'. But if I did get around to doing that I'd no doubt tie in the usual Icicles completion behavior, as I did for those few special cases, but in a more general way. IOW, you'd still use the minibuffer when multiple candidates match both (a) the buffer text to be completed and (b) any minibuffer input. You'd still be able to progressively complete with multiple input patterns. You'd still be able to sort and change sort orders on the fly. And so on. From MAILER-DAEMON Wed Jun 03 16:52:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgaMx-0006aV-Hr for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 16:52:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgaMw-0006aI-21 for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:52:14 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:36662) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgaMt-0005w2-U1 for emacs-devel@gnu.org; Wed, 03 Jun 2020 16:52:13 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053Kq8kl088064; Wed, 3 Jun 2020 20:52:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=J2dZABC4sJqwIY1QBFSQ6MZmnb+EKPhBfrJwVOLoYpg=; b=Z1SeViRwg6yNAiAefk51716DtEADVMbecHMpERCUhALH27vfkNJ+TwFTY2CN34vfU8qq ET+dcMWQ+F5BezMzYFSsH+1v39f2CLN/bSEDGtEjtbPPCHJt2T2Ds1j+G8EKpWUY39sv 1wiJesO6ETLC2AqRAbeQLzR6OuKkK+zyrHPCE5G13sVPQBRsICP4chrr+Oxavt6jok0E MpsFfkdnJ6EVxqPrcRcNdEnKNgX+Y1pB/KM4lGwlz4qqdLm65hqKuw6jLA+iEdT+DgTY 5CrHxW3V84dTPleYzMBrE5FQ+l98rDjeOABPasMLLX9Y4HI2+4SBZBCJ/Bie3drxseu6 mg== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 31ef1nh8hr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 03 Jun 2020 20:52:07 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 053KlSUu152572; Wed, 3 Jun 2020 20:50:01 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3030.oracle.com with ESMTP id 31ej0yb7ae-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 03 Jun 2020 20:50:01 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 053KnvKV018206; Wed, 3 Jun 2020 20:49:58 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 3 Jun 2020 13:49:53 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Konstantin Kharlamov , ndame , Emacs developers Subject: RE: What is the most useful potential feature which Emacs lacks? A: Autocompletion References: <92c19682bbe429234e6c7c486ad05799476d3e18.camel@yandex.ru> <5dc33388-4c06-4373-8e94-fc1fcaf92c18@default> In-Reply-To: <5dc33388-4c06-4373-8e94-fc1fcaf92c18@default> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9641 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 bulkscore=0 suspectscore=18 spamscore=0 mlxlogscore=949 phishscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030158 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9641 signatures=668686 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=990 clxscore=1015 malwarescore=0 priorityscore=1501 impostorscore=0 spamscore=0 suspectscore=18 bulkscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 mlxscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006030159 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 16:52:10 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 20:52:14 -0000 To be more clear: My purpose in mentioning what Icicles does wrt incremental completion ("autocompletion") was to suggest features that can be useful in this context - food for thought - not to solicit use of Icicles. IOW, vanilla Emacs might also consider such features, or similar. And none of what I described requires the use of the minibuffer, even if that's what Icicles uses. From MAILER-DAEMON Wed Jun 03 17:42:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgb9d-0002vL-Pa for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 17:42:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgb9c-0002uf-26 for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:42:32 -0400 Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]:43658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgb9b-0007OD-9Z for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:42:31 -0400 Received: by mail-qk1-x734.google.com with SMTP id v79so3876355qkb.10 for ; Wed, 03 Jun 2020 14:42:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=user-agent:from:to:subject:date:message-id:mime-version; bh=Ky5f22NCjGoox6NmTlj4f0aUxDHrQ9aHPFur0DQrENs=; b=WldCeIBHM3bZEm3Xy29uouqW+2hLrc6AsUYsGOBW3x+Q/LXhhB1ENjgtrs0KE2IHDm XEYRbcV02a2GygJhG5UTeoAxwMhNyBL7ii3Vh+GMx82vRd8/9lWkRgweSEJQmzSx9hP4 uoYWgSoTvI8B0xW1Dc9bkFyPHs9Y9JWgJvCYkKz2Ja3UkSyRDRGYRGDSrIq56UNOVO5a ZJI2G3y8gXR6oM0rhbpep9xrQqWIUES2EYtuI+bXlgA2mMqnoNAiiy44t2IlGlRR9Xzu aGnnhjp4tyNWBOmBSOKuSyZNyFwDuZaPG44CfQGhBrcjXMAM+uwMC4GS4mKI9dausquC tS6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:user-agent:from:to:subject:date:message-id :mime-version; bh=Ky5f22NCjGoox6NmTlj4f0aUxDHrQ9aHPFur0DQrENs=; b=uLnpAum84WP4Fg8IbPGXSM2dv1dQaoLRtfu36V5HXgBRvgiNPQRr3IZ3+V9xId7aTq kKOG1t4XCzlRguM1aWgoL2XBeIGHeD3DYR0uzMIXi4gz0AD2VGntcUVfVy4x3Pvsay/x ibeAV9V0FFVNMkPKsR8N5eNJmS2LCAEzRlBfc+DwEWZXoxmd7k5qbwYI/OS6I+MxJcZo VPESZb+G29XHNRoTlDM6u3JHfLwyExptVswmNSw8JDfjZvzlGGjtLBbMT9c9tu3k8o6K viUIVIYjNupEcc29DZ02DGFDfGrCW9egQz+3hy2pFicaR898Yhj0X0qCakBP8oC061yT 0BmA== X-Gm-Message-State: AOAM532SwXmBOeQIq+dvajzgpQXOFR5YHI/a4Uo+BPz54wIVCvn8tSYM B2RIUcxBmuN2fHz+hJqRpxlZtixs3t8= X-Google-Smtp-Source: ABdhPJznIwP1d99QKwlMLPgR5wUMQPvDqtiTvwBPi7x/hWEExnuQoVzBiYfSJFhM1q/KRnlq7+5Juw== X-Received: by 2002:a37:9f44:: with SMTP id i65mr1788894qke.103.1591220549537; Wed, 03 Jun 2020 14:42:29 -0700 (PDT) Received: from arch-thinkpad ([2604:2000:2f41:2d00::1]) by smtp.gmail.com with ESMTPSA id v59sm2876347qte.96.2020.06.03.14.42.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 14:42:28 -0700 (PDT) User-agent: mu4e 1.4.8; emacs 28.0.50 From: Zach Shaftel To: emacs-devel@gnu.org Subject: GSoC project - Improving ELisp Traceback and Debugging Information Date: Wed, 03 Jun 2020 17:42:27 -0400 Message-ID: <87eeqv6d30.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; format=flowed Received-SPF: pass client-ip=2607:f8b0:4864:20::734; envelope-from=zshaftel@gmail.com; helo=mail-qk1-x734.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 21:42:32 -0000 Hello all, This summer I will be working on improving ELisp traceback information for Google Summer of Code. My ultimate goal is to record the source location of calls so that this can be used by the backtrace, eg. buttons which jump to the exact function call which produces the error. The minimum goal however is to have the offset recorded while maintaining acceptable performance, and allow the backtrace to jump to the point in the disassembly where the error occurs. So far I've modified the byte-code interpreter to simply store the offset of each funcall in the backtrace specbinding frame, and modified backtrace.el so the sequence of offsets is printed alongside each respective call in the backtrace. It's available on the feature/soc-bytecode-in-traceback-specbinding branch on Savannah. Here's what the backtrace output looks like: Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil) 10 test-debugger() 6 call-test-debugger((110 117 109 98 101 114 115 0 1 2 3 4 5)) 9 call-call-test-debugger() load("/home/zach/ELisp/bad-stuff.elc" nil t) 513 command-line-1(("-l" "bad-stuff.elc")) 1482 command-line() 417 normal-top-level() The current implementation entails a performance regression (based on elisp-benchmarks.el on my machine, a ~10% slowdown), so it's not viable in the current state, but there's plenty of ways to improve on that. Any ideas would be appreciated. I've been looking at the scratch/accurate-warning-pos branch as well as prior discussions and am still evaluating different approaches to solving the task. It might be necessary to modify the way code is represented during compilation, be it simply with the annotated symbols as in that branch or with another more generalized form of object representation. The latter approach would be more versatile, but doing so while still preventing the compiler from hogging memory would be tough, and is broad enough that it's probably outside the scope of this project. I'd love to hear others' thoughts, advice, and comments on the project, and on what sorts of changes would be most desired for inclusion in Emacs. Thanks, Zach Shaftel From MAILER-DAEMON Wed Jun 03 17:45:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgbC2-00041b-5I for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 17:45:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48274) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgbC0-00040m-Ay for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:45:00 -0400 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:40527) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgbBz-0007eU-3H for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:44:59 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id A28267CA; Wed, 3 Jun 2020 17:44:55 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Wed, 03 Jun 2020 17:44:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spwhitton.name; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; s=fm3; bh=TVlM5ndMyHp0YDoJA0nM6ZX8SC 1+ZpMtwYmmFfzkv5U=; b=rtDzYJJBKSM9RnkfTqsvXPtdzO8y/3Q7if0054T3ZC G1b6vwlVoUgy3x4J9JePT2aqUZhQAbg3BLxI7H3wTzLZ+ilZbNQuFaAwLlEKmL8A GvEP05uaHw78DWKbKPMgFccJSW5KL6Gd9a92ccB50LZgRGmpZm1be5YEtPCA3pA9 9KXV0Lo+3ngZje9fuwZj2loCALm42CdkNrJjfxpupirfPCyYsJpguI3P2HX0k9Dy QdIhA+2b5BDWgrDGYE7PQ5ZxpdIiACVRtMwVKnVZD7mX3JGrwnlzTwAI+GEkkTC2 YtLtDowBR3KgWDSZcHyI6Zatd1k8cLAQvzDGPPJrJu4Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=TVlM5n dMyHp0YDoJA0nM6ZX8SC1+ZpMtwYmmFfzkv5U=; b=kxnfUr2F/ZPaQ5ZRVBmTeU bTB767rd7WgI+HSnSdwaMlE7h1J3yRZX3iaKheEd5IaxXqrCtCNVKRxxIN+H7ROL A0/OIiFKnBLtVWGaPn4v04CHnbeMEBGNeZ9hDVpl8wAMQOxQYwH+LpjSdRORgJSF V+/MQfcfinxC+TD/VXDd8e/M5aEt3waUTt3hZZWCQP7oXNCwyvhtnsc11BZRbrGw JfzkLhtlgNe/fUxDkLPBPmreQOaC0p6MCVjONqcf8sDF5SQ3LoCFRlyD+CT9fU2y 1LiAbanYz69BZtNfFEUIrpy8+vyjWIaD42BxqwSfozVapGKJa9I+3idiwoi7DVKA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudegtddgtdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkfggtgfgsehtqhertddttdejnecuhfhrohhmpefuvggrnhcuhghh ihhtthhonhcuoehsphifhhhithhtohhnsehsphifhhhithhtohhnrdhnrghmvgeqnecugg ftrfgrthhtvghrnhepkeffgeehhfelffeutdehfffgieeludegieeijeeuvdeltdffgfek tedulefffedtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrh homhepshhpfihhihhtthhonhesshhpfihhihhtthhonhdrnhgrmhgv X-ME-Proxy: From: Sean Whitton To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel@gnu.org Subject: New flex completion method: toggle case-sensitivity? Date: Wed, 03 Jun 2020 14:44:53 -0700 Message-ID: <877dwnj02y.fsf@iris.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=64.147.123.25; envelope-from=spwhitton@spwhitton.name; helo=wout2-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 17:44:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 21:45:00 -0000 Hello Jo=C3=A3o, Thank you for fido-mode, which I've been trying out. Is it currently possible to toggle the flex completion style's case sensitivity? I got used to completing this way with Ido and it would be nice to keep it. --=20 Sean Whitton From MAILER-DAEMON Wed Jun 03 17:52:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgbIt-0006u3-Hn for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 17:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgbIr-0006tP-Gc for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:52:05 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:34775) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgbIq-0000Ts-MX for emacs-devel@gnu.org; Wed, 03 Jun 2020 17:52:05 -0400 Received: by mail-wr1-x434.google.com with SMTP id r7so3977758wro.1 for ; Wed, 03 Jun 2020 14:52:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=pKUUIIn+7GYo2qmQe3fmEOudoB2sSYPavkK7eq9y3vU=; b=sHoKcVUJSzp7eKMijs3ryM9kVq6SneujMGjquG05zOKfFzMuWE20+OYnmhDgKHdwsd X4ZiK77iUJMxxbxLQggtnAgdrfzVhkPwsCHtyE56ylvJoT5TTlyAl8jzK1xOykM/L6Ih pZuEb55cAXGGmEgUWIN7VAGKKlCu6foK9+7OBtq2QdF/RB6W1iixTdAZfmdKQtlOjBrL JS+hepJFn61ix+6n/jmfMM1Pq0ou3mb+5HSWhgXEG8ghle6KwEobA1uUIEH/5LyLzBMv Gl2xIeNexq6lTjS21rJtUzXUt7ydRL+tnbAPnLCNGqi+7dPoJPRJvh5w42rCS4I2lDO/ 6FkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=pKUUIIn+7GYo2qmQe3fmEOudoB2sSYPavkK7eq9y3vU=; b=Bun57Apo7l4qcU+W+w5ZaUPGhop4mbAnKGmPL1bHHZAskZFUxlfqjP2xcK4SuWpEkS fF49yCpfyOh17F7237CeAOGlVgO3V+Ctfc/Vk0yjgEh+yN0oUYlaoByg9qV34EWGlpIF GdKya+P0HZmB+jZq31hySL85guU5CVWriPCzgLk7EbooS1WObhrWb25v8wVaORxUNCNk T0jxaXnMhBfPTrYwzR2EjPxLczujpEL00nXveMk+b6uT5d0lzaEWrJdtH6r0haZkga5X YH+jMbyCRea74Vk6k3sGxw1MdPDANsYHpreqftIkb5vD0M7AoORpeB3ilWZ94km30QCD OcgQ== X-Gm-Message-State: AOAM533aSTq4uVLVw+jIaud30MgkS8BoGNwiAR70SJL1i+B1g7QIf8DO QmGCPx71htm4gOQlRf9+CKY= X-Google-Smtp-Source: ABdhPJzWd+Q9NtTkzmkpHahtnfPLUN/y3v+u01XpJ/hyo+fhhJj7aHSuHRp3d7AOd/+z8za5f+7HTA== X-Received: by 2002:a5d:508e:: with SMTP id a14mr1239738wrt.335.1591221123202; Wed, 03 Jun 2020 14:52:03 -0700 (PDT) Received: from krug ([89.180.148.153]) by smtp.gmail.com with ESMTPSA id q4sm4571226wma.47.2020.06.03.14.52.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 14:52:02 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: emacs-devel@gnu.org, Paul Eggert Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" Date: Wed, 03 Jun 2020 22:52:01 +0100 Message-ID: <871rmvn7ge.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x434.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 21:52:05 -0000 Hi Paul, After a lengthy git bisect, I discovered that this commit is responsible for breaking a very big part of my SLY extension, a Common Lisp IDE for Emacs. The reason is this change to make-text-button - (when (stringp beg) - (setq object beg beg 0 end (length object))) + (setq object (copy-sequence beg) beg 0 end (length object))) I don't pretend to understand the reason for the change, but I know it hasn't worked like this for a long time (SLY came about for Emacs 24.3)., I didn't investigate much, but SLY has a lot of (insert (sly-make-action-button "[SOMEBUTTON]" ..)) and sly-make-action-button is (defun sly-make-action-button (label action &rest props) (apply #'sly--make-text-button label nil :type 'sly-action 'action action 'mouse-action action props) label) and sly--make-text-button is (defun sly--make-text-button (beg end &rest properties) "Just like `make-text-button', but add sly-specifics." (apply #'make-text-button beg end 'sly-connection (sly-current-connection) properties)) Not sure where the problem lies but every button inserted by SLY is now just plain text. Maybe you have an alternative formulation that I can apply in SLY, otherwise I'd really appreciate that you could revert or find an alternative to this change Thanks in advance, Jo=C3=A3o From MAILER-DAEMON Wed Jun 03 18:33:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgbwr-0003A5-It for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 18:33:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgbwp-00039S-Qj for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:33:23 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:45015) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgbwp-0000rm-6H for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:33:23 -0400 Received: by mail-wr1-x42d.google.com with SMTP id y17so4008185wrn.11 for ; Wed, 03 Jun 2020 15:33:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=jjmLVvD0Szxkn2h57mX5zEhp5hUNp5ybNvVFEBreFBM=; b=GFdo0GjpeH53sIhwf1Bjcud25zM5jTvv9F+g2wD4JB5hO2CaMlpifxsKi59VURn0Kp OxrzRB4g7VU1nu0Lhcph/HoSV5mWRV0avaaEVTTAG4Hco+GDB8dhjjUCcNejPkD+tIpD n25zFj5aCmWbJoReK9YACAHQMZhaZUwFz0vixp6jps1eR2R1Al8A+3HhB+CLEis8EHB4 sZL9GZ8Uj/p3CqRsKx2V6kylvmeoMAbscWc3i77TDJDZoH3qNv8Jt0m2AVQH+4DXi5kv 4p3+l3AgQsQskMlyaFswC8QfiSvPcrUAgzl74nz/IAPKI+2oTWaYUJxuf0R2wE+VHAjz xPIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=jjmLVvD0Szxkn2h57mX5zEhp5hUNp5ybNvVFEBreFBM=; b=XZWLfOyUBMyNh+b7b7DAN3KoJ3J8utG6P3iZOYPzvNozvS5ibX4i8Ljih5KcWtZIgW Yiw0wJdmb8vPK/xZBoXgkibtUGFPS1+GNBNLUbJACP07Y4MNUAzgYZ+Oe2KqeLoCVZj+ jdzWYm0cfmXDopxYLOLuo7iL9d/zsCa5SHbNzITjdU+YjuBMILGP6OcNP9D9tck/j86w E1RomJPW2DatVay3+h9hU4lAQNSHRiDXdYfhnB7mXFnkRvnsOYayKuBOoz4Sb+QSIGA4 qtQ+fY6v8hCbN4JYHoJJQw9UZZsxxK8p4Wna3J6vMSOtxtgSgpQf2Y7j2WYTfYwwCkpt kupw== X-Gm-Message-State: AOAM531uZ6V3bSO4B8iSygitPPwHS/1I36uqqpS5orZjSOv6swn621CZ FFT634hePMaMbh9HRYAgOMo+tpQRzXc= X-Google-Smtp-Source: ABdhPJxyznrGK/amp6UmIhMWT0BHGGH/0ghnwm1vwhJxWjFVluW2xUtmNBRFFJw4OAI0vEfK2VLbfQ== X-Received: by 2002:adf:e387:: with SMTP id e7mr1463595wrm.70.1591223601155; Wed, 03 Jun 2020 15:33:21 -0700 (PDT) Received: from krug (89-180-148-153.net.novis.pt. [89.180.148.153]) by smtp.gmail.com with ESMTPSA id e15sm4930122wme.9.2020.06.03.15.33.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 15:33:20 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Sean Whitton Cc: emacs-devel@gnu.org Subject: Re: New flex completion method: toggle case-sensitivity? References: <877dwnj02y.fsf@iris.i-did-not-set--mail-host-address--so-tickle-me> Date: Wed, 03 Jun 2020 23:33:18 +0100 In-Reply-To: <877dwnj02y.fsf@iris.i-did-not-set--mail-host-address--so-tickle-me> (Sean Whitton's message of "Wed, 03 Jun 2020 14:44:53 -0700") Message-ID: <87v9k7lqz5.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x42d.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 22:33:24 -0000 Sean Whitton writes: > Hello Jo=C3=A3o, > > Thank you for fido-mode, which I've been trying out. > > Is it currently possible to toggle the flex completion style's case > sensitivity? I got used to completing this way with Ido and it would > be nice to keep it. Hello Sean, Thank you for the feedback. Regarding your question, I have no idea. Fido-mode doesn't make any provisions regarding case. It should behave like icomplete-mode, so I _would_ expect it to respond to completion-ignore-case and its cousins read-buffer-completion-ignore-case and read-file-name-completion-ignore-case. Jo=C3=A3o From MAILER-DAEMON Wed Jun 03 18:41:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgc4M-000529-20 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 18:41:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54578) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgc4K-00051k-Dd for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:41:08 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:35088) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgc4J-0001vO-5m for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:41:08 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 15DE4160097; Wed, 3 Jun 2020 15:41:05 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 7P46xxG8zdCX; Wed, 3 Jun 2020 15:41:04 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 0907E1600C8; Wed, 3 Jun 2020 15:41:04 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 1xuP6mvQVLLz; Wed, 3 Jun 2020 15:41:03 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id D47BD160097; Wed, 3 Jun 2020 15:41:03 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= References: <871rmvn7ge.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Cc: emacs-devel@gnu.org Message-ID: <1291ef4a-3a47-3990-9b5f-ec15bb72eb73@cs.ucla.edu> Date: Wed, 3 Jun 2020 15:41:01 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <871rmvn7ge.fsf@gmail.com> Content-Type: multipart/mixed; boundary="------------DFCCE60DB253F93541D458BA" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 18:41:05 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 22:41:08 -0000 This is a multi-part message in MIME format. --------------DFCCE60DB253F93541D458BA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 6/3/20 2:52 PM, Jo=C3=A3o T=C3=A1vora wrote: > Not sure where the problem lies but every button inserted by SLY is now > just plain text. It's because I messed up in that part of the patch. Thanks for reporting = the bug. I installed the attached patch into master; please give it a try. --------------DFCCE60DB253F93541D458BA Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-make-text-button-bug-with-string-copy.patch" Content-Disposition: attachment; filename="0001-Fix-make-text-button-bug-with-string-copy.patch" Content-Transfer-Encoding: quoted-printable >From 6dad339f064df180e8f2c6257ffb53a6f341c4ec Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 3 Jun 2020 15:39:29 -0700 Subject: [PATCH] Fix make-text-button bug with string copy MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit * lisp/button.el (make-text-button): Use the copy of BEG uniformly, instead of in just one place. This fixes a typo introduced in 2020-05-17T05:23:28Z!eggert@cs.ucla.edu. Problem reported by Jo=C3=A3o T=C3=A1vora in: https://lists.gnu.org/r/emacs-devel/2020-06/msg00117.html --- lisp/button.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/button.el b/lisp/button.el index f969a03cb0..a91b0482ac 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -349,7 +349,8 @@ make-text-button (or (plist-member properties 'type) (plist-member properties :type)))) (when (stringp beg) - (setq object (copy-sequence beg) beg 0 end (length object))) + (setq beg (copy-sequence beg)) ;; In case BEG is not mutable. + (setq object beg beg 0 end (length object))) ;; Disallow setting the `category' property directly. (when (plist-get properties 'category) (error "Button `category' property may not be set directly")) --=20 2.17.1 --------------DFCCE60DB253F93541D458BA-- From MAILER-DAEMON Wed Jun 03 18:42:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgc5I-0005bK-3x for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 18:42:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54748) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgc5G-0005Zx-S0 for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:42:06 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:36683) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgc5F-00022u-Rn for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:42:06 -0400 Received: by mail-wm1-x330.google.com with SMTP id d128so3701996wmc.1 for ; Wed, 03 Jun 2020 15:42:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=6hvjtknGU3PbMTxVNy5nqmmfkX+jShTh4j77CncNI/A=; b=RO45AIQXmxVl7FxIDEIMv5A7MDa3ygGSrZUUxidBNKQvAIM13kjK/Wci4YHG34NBY4 U2qPshDIv41cG3pMsGjBOUT4tMXi0cOMCM99T61VZ64CuGymqNsokegEVHpJhPalkUd8 mHD1g2xsiN0zSNyIwK3duOJR7pO4amDwN19n4wZwvcmgxthRhl6117xLD463ULljxOAZ pLfD7Dd6Co73sc2v3mVwXlZseS9CqSEoJ5A1rK7t3xcXkOaJyvx7jlmv1yaoeCCjdTfJ JpiHBGhPFg/cZxIIEyfd+v/VdRsBZmLQYTToIof6GUb000g+GV0QhJFc8vVczm/SmbzP 0jMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=6hvjtknGU3PbMTxVNy5nqmmfkX+jShTh4j77CncNI/A=; b=g5q48VilQxdEhucSMLGzRGmOdAp4tKhvNUsNs3dnfEoWADMra4tPzJh9tEelYXWA34 kgaAcMNiKKaVuzsMPjwokFxF9r6OsONvuRCO3yooZNHy+wL7ppBdzllLG6MdvbefZzyo KcxkFmwmcizEsoZSzIjrH3MllSgVsRFwinMNQVT7RT0PWVKhAZqvYNM063JMY5PqV9yf wfuk4vHStloaUCIC41s4uHNTZfbJvKSvX0l3boq8mP+3R/G3dGGmZLbx8i2uFLMLOud9 foVUeWN0eMFXrcA5647JNzmUTsf5vTmKLTEF9x6lWvXtsS+3La0sOPbzo+4nZFIgEYMQ teBg== X-Gm-Message-State: AOAM530/3owz4UE4fuKgI2Dop3rUP0FEcqKeFD7WDrbwozAj73PnMdUb iBQQ9Q7GlAPpHwW/2vKMJHA= X-Google-Smtp-Source: ABdhPJySBx+OL8LjXGiYJ7EjhrVB/sT+0Q/olI9Pmk1YUaGZq8fWI3DMU0CLpp0YUly+RIkPjzv3Rg== X-Received: by 2002:a1c:154:: with SMTP id 81mr1135063wmb.23.1591224121346; Wed, 03 Jun 2020 15:42:01 -0700 (PDT) Received: from chametz ([185.220.101.10]) by smtp.gmail.com with ESMTPSA id c16sm5300459wrx.4.2020.06.03.15.41.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 15:42:00 -0700 (PDT) From: Pip Cet To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel@gnu.org, Paul Eggert Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> Date: Wed, 03 Jun 2020 22:41:54 +0000 In-Reply-To: <871rmvn7ge.fsf@gmail.com> (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vor?= =?utf-8?Q?a=22's?= message of "Wed, 03 Jun 2020 22:52:01 +0100") Message-ID: <87lfl36abx.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=pipcet@gmail.com; helo=mail-wm1-x330.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: 26 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, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_SBL_CSS=3.335, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 22:42:07 -0000 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Jo=C3=A3o T=C3=A1vora writes: > Hi Paul, > > After a lengthy git bisect, I discovered that this commit is responsible > for breaking a very big part of my SLY extension, a Common Lisp IDE for > Emacs. The reason is this change to make-text-button > > - (when (stringp beg) > - (setq object beg beg 0 end (length object))) > + (setq object (copy-sequence beg) beg 0 end (length object))) > > I don't pretend to understand the reason for the change, but I know it > hasn't worked like this for a long time (SLY came about for Emacs 24.3)., > > I didn't investigate much, but SLY has a lot of > > (insert (sly-make-action-button "[SOMEBUTTON]" ..)) > > and sly-make-action-button is > > (defun sly-make-action-button (label action &rest props) > (apply #'sly--make-text-button > label nil :type 'sly-action > 'action action > 'mouse-action action > props) > label) I think you want (defun sly-make-action-button (label action &rest props) (apply #'sly--make-text-button label nil :type 'sly-action 'action action 'mouse-action action props)) instead, since the new function returns a copy of label rather than the string passed in. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-adjust-to-Emacs-28-change.patch >From d0e06fa8ae4c6d3156dccf922629f91985fd4822 Mon Sep 17 00:00:00 2001 From: Pip Cet Date: Wed, 3 Jun 2020 22:38:37 +0000 Subject: [PATCH] adjust to Emacs-28 change. --- lib/sly-buttons.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/sly-buttons.el b/lib/sly-buttons.el index 8297ea74..8f393090 100644 --- a/lib/sly-buttons.el +++ b/lib/sly-buttons.el @@ -106,8 +106,7 @@ label nil :type 'sly-action 'action action 'mouse-action action - props) - label) + props)) (defface sly-action-face `((t (:inherit warning))) -- 2.27.0.rc0 --=-=-=-- From MAILER-DAEMON Wed Jun 03 18:53:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcG7-0000pH-Uw for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 18:53:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcG6-0000p7-NB for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:53:18 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]:37853) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcG5-0004J0-EA for emacs-devel@gnu.org; Wed, 03 Jun 2020 18:53:18 -0400 Received: by mail-oi1-x22e.google.com with SMTP id m67so3364499oif.4 for ; Wed, 03 Jun 2020 15:53:17 -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 :cc:content-transfer-encoding; bh=JVpssMH3iYc8IMfrsXajTMdKgR8pLI50RsWv97e61ZI=; b=FF4KdB3/wHPXs2RwsntdBP8fsJk2p7fCpCX1gQoYb7lWUzg2FdDIfIQ7oUvVIZwnOM jwS9YEWYmCoCBg11eIP7jkOYUtZCLFU/ax+VQZQwJTuRjr9hMQ0yYzvJOGv2KjhDSCCP +sQzSw/DbkA1TwvI+PLlwl4ZvT61T2vThFwAFa3vZTZo1pvXtDUznRekMi7tzWUxE4vS DwR+M96bNC7q4Baupl327QL++5dYFvapj7zUHO4ni4UERWRgkRmLLw1W1WABfYwgPU99 hWcU9PWESnCzrVamFdA0UUB94vhU6XsGgaQfM2yrYB8Mnryt4Z9PlGYLzTCsVGVcCkU7 nzmw== 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:cc:content-transfer-encoding; bh=JVpssMH3iYc8IMfrsXajTMdKgR8pLI50RsWv97e61ZI=; b=kFL4ZNbGjWzJdMfBUkcdlDoweLODRoXcaMGz2hgV+oO1tMC0kYGArMvQ69fwRwpphO TNT0A3R3ciSH6OKCWuKf7QtcU5OY2TtVSAl88FG36wlb5vSBLZaGDR8rb4h2XQk+5Bhi d4JbyrZStIorM4NpYTt7S8VuSRG08r1HRj/fW7ZCsVCJTVXal4ue6ywc7fKY418hum8l lK1K5D8GelyhdVFBIfK7Lx5Q2RkVVcsGe46yLdz4uPevn3ULdERNGQ+S8w3+j9JHyQe9 o0XPDgzDBybcCNH8XJ0DUevG78DfsU7UgvW8PKDGSWdxzG91Wdo/bmmTUK1h6zkscQcK KMxw== X-Gm-Message-State: AOAM533uWDY+/ozkikGBLWobJJ9A+zmp/f8Mxjn5aHXXNH8riPWepeTZ Rp+Uyqw5Wuw/FifL23tdegwictzCYxaqOuqf/HM= X-Google-Smtp-Source: ABdhPJzTGTG4kuZo8iE4u4zLSdnerh1jqBkz98jgnnv3gM5H7/jsszHQEYSrZTR+4U81yad5TW2DvokMRPsstgfghfs= X-Received: by 2002:aca:4e0d:: with SMTP id c13mr1333029oib.30.1591224795835; Wed, 03 Jun 2020 15:53:15 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <1291ef4a-3a47-3990-9b5f-ec15bb72eb73@cs.ucla.edu> In-Reply-To: <1291ef4a-3a47-3990-9b5f-ec15bb72eb73@cs.ucla.edu> From: Pip Cet Date: Wed, 3 Jun 2020 22:52:37 +0000 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: Paul Eggert Cc: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::22e; envelope-from=pipcet@gmail.com; helo=mail-oi1-x22e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 22:53:18 -0000 On Wed, Jun 3, 2020 at 10:42 PM Paul Eggert wrote: > On 6/3/20 2:52 PM, Jo=C3=A3o T=C3=A1vora wrote: > > Not sure where the problem lies but every button inserted by SLY is now > > just plain text. > > It's because I messed up in that part of the patch. Thanks for reporting = the > bug. I installed the attached patch into master; please give it a try. I don't understand that change at all. All it does is replace a six-argument setq by two successive setqs? Surely the symbol value is irrelevant for the first, third, etc. argument to setq, so what difference does it make? From MAILER-DAEMON Wed Jun 03 19:04:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcQq-0005TP-Ax for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:04:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcQo-0005RR-Hh for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:04:22 -0400 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:32911) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcQm-0006DH-LL for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:04:22 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id CE10B466; Wed, 3 Jun 2020 19:04:18 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Wed, 03 Jun 2020 19:04:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spwhitton.name; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version:content-type:content-transfer-encoding; s=fm3; bh= +BnEBp8Jnq93l1KbLVY0KQRXcNnUU7cyV8fbOvHmoVM=; b=tkYxPqjdR/oONFsa XrpzueZfzvUNKyw1PP582ZE+sSfwuh/pdHrZsdS4ZKlVsYHYxrTB028oNQ6j0p70 109WfzO9XM8HPlPZkKA9QsmL6VJGAkoJaEexqm4GlQ1ApyJVFRUkJVyHESB598UR DwzxSzlcgq4MnJE5+qY1m1SExIKRaoKzLcUFRWcEXC1Fo1Fut40Q+uA3ODo3xrpN AlYRlL79vM1MDE7Z9d2Xn7GiY83o9qo/vl+OFYUsAKkzo0tSSDDoGBfDhFTiPF10 pnFy7n7jgFmxhp2Am3xriE5m7e3g0Dq0nDOuN2rp9qIkd6/KoppY+EfQDOeGrnaI 8IzC8g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=+BnEBp8Jnq93l1KbLVY0KQRXcNnUU7cyV8fbOvHmo VM=; b=Pgw1TrIybSIg5V87NF44GgTPiZ8RAmmuBCk7sx5/I5Yt443Wd1shaOkaW mVBN4wibTHH8glQSKJBKuUVJhc20x3QBuCtv5mB9o/0sWJ7rq8S69itadqhwI3Xy xTwCr+Igof42LLbH5MBYn5YdJy0TD9WDJj3E+qKxaxfPlsSJNEH+7kU3haA/QyUe IL0lNkZBOIfhNWFxzPg/lW443WLyV1Qyti4ESpZSizc3ZjsWS4baK027pdy+GJrv uLV90gkVlN344/k5Xnhqh3EqxkpfRfHgmg4cquabrpibzYW4xAvnhTB8FPj1at3x MUC0uMhxaKnRkM3HUO9hYLMDG5deA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudegtddgudejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufgjfhffkfggtgfgsehtqhertddttdejnecuhfhrohhmpefuvggrnhcu hghhihhtthhonhcuoehsphifhhhithhtohhnsehsphifhhhithhtohhnrdhnrghmvgeqne cuggftrfgrthhtvghrnhepvdfgkeevtdetvedvhffhgeevleelfeekveeuveehffduvdei udfhgeelvefghfehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh hfrhhomhepshhpfihhihhtthhonhesshhpfihhihhtthhonhdrnhgrmhgv X-ME-Proxy: From: Sean Whitton To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel@gnu.org Subject: Re: New flex completion method: toggle case-sensitivity? In-Reply-To: <87v9k7lqz5.fsf@gmail.com> References: <877dwnj02y.fsf@iris.i-did-not-set--mail-host-address--so-tickle-me> <87v9k7lqz5.fsf@gmail.com> Date: Wed, 03 Jun 2020 16:04:17 -0700 Message-ID: <87zh9jhhu6.fsf@iris.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=64.147.123.25; envelope-from=spwhitton@spwhitton.name; helo=wout2-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 17:44:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:04:23 -0000 Hello Jo=C3=A3o, On Wed 03 Jun 2020 at 11:33PM +01, Jo=C3=A3o T=C3=A1vora wrote: > Thank you for the feedback. Regarding your question, I have no idea. > Fido-mode doesn't make any provisions regarding case. It should behave > like icomplete-mode, so I _would_ expect it to respond to > completion-ignore-case and its cousins > read-buffer-completion-ignore-case and > read-file-name-completion-ignore-case. Thanks, setting those works. Looking at my old Ido config, I don't believe I set anything to get the case insensitivity, so maybe fido-mode's minibuffer-setup-hook ought to set those three variables to true, by default, too, or similar, for consistency with what Ido users expect. --=20 Sean Whitton From MAILER-DAEMON Wed Jun 03 19:05:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcS5-00070Q-6p for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57002) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcS3-0006yh-8Y for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:39 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:32829) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcS1-0006SD-U4 for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:38 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 987ADC0008; Wed, 3 Jun 2020 23:05:31 +0000 (UTC) From: Juri Linkov To: Simen =?iso-8859-1?Q?Heggest=F8yl?= Cc: Dmitry Gutov , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <87a71l2wjf.fsf@simenheg@gmail.com> Date: Thu, 04 Jun 2020 01:34:12 +0300 In-Reply-To: <87a71l2wjf.fsf@simenheg@gmail.com> ("Simen =?iso-8859-1?Q?He?= =?iso-8859-1?Q?ggest=F8yl=22's?= message of "Tue, 02 Jun 2020 19:43:32 +0200") Message-ID: <87pnafye1n.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.198; envelope-from=juri@linkov.net; helo=relay6-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 18:26:20 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:05:39 -0000 >> Please use a more future-proof format like is used by saveplace.el, >> for example, in ~/.emacs.d/places it's saved as: >> >> ;;; -*- coding: utf-8; mode: lisp-data -*- >> (("/tmp/" >> (dired-filename . "/tmp/file")) >> >> that allows adding more metadata in future. > > Looks good to me. If Dmitry agrees I can start working on changing the > format. While using this new feature, I discovered that switching projects by directory is not quite handy, directory strings are too long and begin with the same prefix. I think there is a need for an additional command to switch projects by name. A clear advantage of Lisp data is that in this case project names could be saved in the same file ~/.emacs.d/projects, e.g.: (("/project/path/" (name . "Project name")) or after implementing the proposal from bug#41572 to use .dir-locals.el, then maybe to save the project name in .dir-locals.el like ((nil . ((project-name . "Project name") A separate question is how to assign a name to a project. > Maybe it should be renamed from "project-list" to simply "projects" too > while we're at it, to match similar files, like "places", "bookmarks", > and so on? Indeed, "projects" is much better. "project-list" looks like that ugly directory name "\Program Files" that caused much trouble to people on MS-Windows whereas it should have been named just "\Programs". From MAILER-DAEMON Wed Jun 03 19:05:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcS6-000724-L0 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcS5-00070L-0M for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:41 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:53883) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcS3-0006T2-I8 for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:05:40 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 2530640002; Wed, 3 Jun 2020 23:05:34 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> Date: Thu, 04 Jun 2020 01:40:14 +0300 In-Reply-To: (Dmitry Gutov's message of "Wed, 3 Jun 2020 23:13:24 +0300") Message-ID: <878sh3ydrl.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.194; envelope-from=juri@linkov.net; helo=relay2-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 19:05:37 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:05:41 -0000 >>>>> Also could you please >>>>> add a command to run shell, in addition to the already added eshell. >>>> Would you like to do the honors? >>> No problem, done. > > Regarding the key binding change you have done in that patch, which of the > following two options do you prefer? > > - Move project-eshell to 'e', project-shell to 'E', project-find-regexp > back to 's', The problem is that there is no mnemonic connection between 'E' and 'project-shell'. 'E' stands for 'Emacs' in 'Emacs-Shell' (eshell). > - Or move project-find-regexp to 'g'. If you have no plans to implement 'project-grep' then 'g' should be fine. From MAILER-DAEMON Wed Jun 03 19:09:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcVN-0001oI-7O for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:09:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57632) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcVL-0001mn-8U for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:09:03 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:44150) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcVK-00074X-38 for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:09:02 -0400 Received: by mail-wr1-x42a.google.com with SMTP id y17so4067641wrn.11 for ; Wed, 03 Jun 2020 16:09:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=npSnuCPJmgBx0MJ/MquP5EzBJXPlm3Kv++aeXiWXDTU=; b=Iys32LgG0MF9eJHzH7289qxEaHZDbZEsQvci/QYAFcSUZjZiiiU4jIHbTk0bKdg9E6 PPLhKQi/OMjkMJt8zl0+QuIgBg1T2U5Ij0VbPrvixn7qkX3Xg5qCGtaBmP3mPnSAJQua kX3ZqZTfv+PjL3sRtJhqxWh59t5nFcyrqxEywAT2VZvZKKXwABdilm0odyiEbbS4bezT ZQopdgWqgdtmcNQluoQuLOOkxoD4cSrvN4kIUlYlINp0zpQ1kMAbYXXqQ7CLviUU7rGs Rm81xX0g3LdPtjRLY7GYIJprRjuqDhDn2Wb3cTLfP8uaWhqiSxN5WJaPKcaAEmZ2Nt3O GyIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=npSnuCPJmgBx0MJ/MquP5EzBJXPlm3Kv++aeXiWXDTU=; b=aaWHeMm+gA6KYpL7ZMu/i95rERoHSh7ec8+llaILNpyG/RmHNg29bt28CIH48G2t4U hZJE80UtWawldelLr1zbDAKwdrWI1H+DHlrT7qsLTXIbNd5Hbyl/NTbHzlsSYh82+iMR YG6oXdSNkgOkSmHJkLzN3LbWoAxByckCutMY8Si9c1hEFm7HHQ3POoeqHLCIIFQlqS83 d/S5IO6JyzBQXaDcmRyZYoUmFg4JZtjbeemtcvCItsODxr4MK3DiywIabU90vcTkaDFf vpKFjeSoJkdYOyhRw4THQEKSUMJn+gHi+yOfWEkmvgHkKQkWDLHbkxtEBhnMHWXO/l++ IOPw== X-Gm-Message-State: AOAM532F0Np3QpP/FC1NKErIeZkowYmj12FunqeqYudVlFJAAczd8uRb DFkjd6tHQjtv4YAayRI+yfwkkg== X-Google-Smtp-Source: ABdhPJwL++pJD4L+MhcL0A6SHv1i4wsCVEuiRGQywowtFewwQTqO0/sTBHuqb3SEkXQfuozSD66SpQ== X-Received: by 2002:a5d:4204:: with SMTP id n4mr1627187wrq.247.1591225740250; Wed, 03 Jun 2020 16:09:00 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id m129sm5182294wmf.2.2020.06.03.16.08.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 16:08:59 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Paul Eggert , emacs-devel@gnu.org Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> Date: Thu, 04 Jun 2020 00:08:58 +0100 In-Reply-To: <87lfl36abx.fsf@gmail.com> (Pip Cet's message of "Wed, 03 Jun 2020 22:41:54 +0000") Message-ID: <87wo4niw6t.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::42a; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42a.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:09:03 -0000 Pip Cet writes: > Jo=C3=A3o T=C3=A1vora writes: > >> (defun sly-make-action-button (label action &rest props) >> (apply #'sly--make-text-button >> label nil :type 'sly-action >> 'action action >> 'mouse-action action >> props) >> label) > > I think you want > (defun sly-make-action-button (label action &rest props) > (apply #'sly--make-text-button > label nil :type 'sly-action > 'action action > 'mouse-action action > props)) > > instead, since the new function returns a copy of label rather than the > string passed in. Note that doing that would break compatibility with Emacs < 24.3, which is when make-text-button started returning the modified string object, in case that's important to you. --=20 Basil From MAILER-DAEMON Wed Jun 03 19:14:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcaG-0004W0-BM for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:14:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcaD-0004UV-2g for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:14:05 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:52670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcaC-0007uK-4F for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:14:04 -0400 Received: by mail-wm1-x32f.google.com with SMTP id r9so3446630wmh.2 for ; Wed, 03 Jun 2020 16:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=GZMrtfxPuMblD8b0OyTPOBf5xwQoJ0JZaMrBqneXmk8=; b=Wfml/JKO0yl8rj8mE5xtcW13BHjIaw83vDp562JxieIWDla1ADPT6Jm9iuOFv2bmMG 2LGoytlYPdukELZzVu2qz1MjGdwBdu3X7/hQ2L9PYjQPePZbIet4g9fErnOr/M7Inynh 9PMb+dtoYzjKbvqfOUnyki8J5GT6zXLNGLNWqEiS9WfpAC7X7HKKoMC425Qyy4gxp/UW B2zk/qk4waog+6mvIGzWV54JD2tKqaQiqzJhd/lW+aQE0Y0oJcJ7WphTnnj1ILii7F6/ G++hxVW9wKUYlF9eRLAtBv/7nrd2lRF/TsRAjL9vbJP4AAd2LB39t2lgVof5ZeqV32in Qmrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=GZMrtfxPuMblD8b0OyTPOBf5xwQoJ0JZaMrBqneXmk8=; b=r/dxAg9I/T7mHbM0o6M4MnNFiF6x8iRkYsAze2qLzVSvYqTNPPIoDNMcz2nPBhn7EP zpmJvhKgD84YccNJwNgXXVpHbQjDaE34TfyQm+vsgk3g4ryAUgC35St/pDAcN6EZcw7z EqVMFiaKbhnlRQEdB3XsvJU2tNs3kPmgFTxBSuPy84f1OI6U5GwpJOXk0LwRv586Imyk KJqN24aZ0ZbECryM84y2ocw0WhfP8Bc8Onl4BwRef8QuqWRldxOju3X3SB3NaPTfTd9Q 097p5n8fy++BGW1T2GnXZ7X4WonP9IB2oF8Y70QDO9H2H6S5EDFxA7MT1PIFoO9B0VfR qgkw== X-Gm-Message-State: AOAM532Pnr+GHDazzsS7eLrvDXRO+ZGIbXhn0PoeR9jpZ5tKZAfbLtvz r5tvUVGw3TanaFzC7QDb7IUYVY3j X-Google-Smtp-Source: ABdhPJx+y9gWBudUKr7D3tB/s55qcnw5cMi62XwglQFgm5KpobKriUKcVa9kdA/e1QCOV0KGdIBOzA== X-Received: by 2002:a1c:bad7:: with SMTP id k206mr1227134wmf.11.1591226042228; Wed, 03 Jun 2020 16:14:02 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id k16sm5239414wrp.66.2020.06.03.16.14.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 16:14:01 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: Juri Linkov Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> <878sh3ydrl.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <015bbdb0-e9c3-a19e-287c-a26bc305d155@yandex.ru> Date: Thu, 4 Jun 2020 02:13:59 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <878sh3ydrl.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32f.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:14:05 -0000 On 04.06.2020 01:40, Juri Linkov wrote: >>>>>> Also could you please >>>>>> add a command to run shell, in addition to the already added eshell. >>>>> Would you like to do the honors? >>>> No problem, done. >> >> Regarding the key binding change you have done in that patch, which of the >> following two options do you prefer? >> >> - Move project-eshell to 'e', project-shell to 'E', project-find-regexp >> back to 's', > > The problem is that there is no mnemonic connection between > 'E' and 'project-shell'. 'E' stands for 'Emacs' in 'Emacs-Shell' (eshell). They both have 'e' in their names. If we imagine that both 's' and 'h' are taken (the latter standing for 'help', maybe), then 'e' is kind of a natural choice. And maybe 'search' is more important than 'shell', as far as the choice for 's' goes. The main thought behind this option is that 'shell' and 'eshell' are not too different, so it should make sense to put them on the same letter. >> - Or move project-find-regexp to 'g'. > > If you have no plans to implement 'project-grep' then 'g' should be fine. While I might not, it can't stop somebody else, especially if that's for their personal config only. But we could also use 'G' for it. From MAILER-DAEMON Wed Jun 03 19:17:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcdb-00076s-J1 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:17:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58784) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcda-00076k-Ru for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:17:34 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:34857) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcdZ-0000sy-Uj for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:17:34 -0400 Received: by mail-wm1-x32d.google.com with SMTP id q25so3773366wmj.0 for ; Wed, 03 Jun 2020 16:17:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=ShX8e2WrRv2qe0rlvtuvVva9qWrSbmzZhf1ftUJzSEo=; b=iLCrX99SJxSewQctr3+YwPs1bnSBYzoOtwaWbGsnWOrj/iJDC0V/4kUBCsg7e5/toe Kvc5zV/HzPY9nfCsR6WC38ACl2AugcyaC9vsqIc+taEGZRkZPH4sDp+xjA2gm/kv7BjO aprozh4bFaNoJmEnlvoG4sPS91UQoQDQ1xfFL+iQWI9oCIsPBlTrnhQ6EFJaR9UT9iiK dO/iM3i/ppgZBlpo6BsFsMhGoZjytrTNEX6KnDQrCclFNXaSiWZUGaxz6/LPXph1QUTb FNocgBcSoR0JdfVmPZZ3cSHk3dNVgkQ74Hm2EToiz1hwW4FFD8ctRr+NZ2QbooezRGkm PHwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=ShX8e2WrRv2qe0rlvtuvVva9qWrSbmzZhf1ftUJzSEo=; b=nFtiRINZT22J5xmRQdTdI8IN1mbjdaEmMHIZdvpnW1OFIjxidCRdL2pycCGdLK685f IPz/XKsNYrNS4U4/KORRtMg3t/EpFGbFOSnWyeZIdzCUDa5q4H9lQwZy6hyLqgiTRbYR +aXQpgIBmK+klFGJNfxAc5CwcFflC34kDEk37y3auiQmLuQgNYoJij8PMKhaSzo4Q5QI /2Un/F7JEYLZbrjmOQ+T/M0lRCvv21EbzDWxKGVAv72ckg/FYQh4jp1otpBo232c3KVq D9BjfSQI3Gih2lkPPQ8vho9e4cND5pWbAh3fW7IZFMjD2d4ZeWLsBwcKf3eJ784Qiuru gu0A== X-Gm-Message-State: AOAM531ynYBivgTMPxpWuJPc0sni3/SuQ5Z33wrdnsrPOAtrcTVofZh3 zk2i0OSficvuLUIEVIBZ7ITJz9VK X-Google-Smtp-Source: ABdhPJzyZ9JVaWHsFKAsSqrMBNWJQrJE/qsY8c1gs2qaflnjieC9FY3pHGH9F9u23e+GOKLFIA5crw== X-Received: by 2002:a1c:9cd5:: with SMTP id f204mr1217283wme.105.1591226250627; Wed, 03 Jun 2020 16:17:30 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id e5sm5357766wrw.19.2020.06.03.16.17.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2020 16:17:29 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: Juri Linkov , =?UTF-8?Q?Simen_Heggest=c3=b8yl?= Cc: "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <87a71l2wjf.fsf@simenheg@gmail.com> <87pnafye1n.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <2e54d4da-54ab-50dc-09df-580572d2b5f0@yandex.ru> Date: Thu, 4 Jun 2020 02:17:28 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87pnafye1n.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32d.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:17:35 -0000 On 04.06.2020 01:34, Juri Linkov wrote: > While using this new feature, I discovered that switching projects > by directory is not quite handy, directory strings are too long > and begin with the same prefix. Interesting. It's not really the case here, but I imagine how it is possible to be true for many people. > I think there is a need for an additional command to switch projects by name. > > A clear advantage of Lisp data is that in this case project names > could be saved in the same file ~/.emacs.d/projects, e.g.: > > (("/project/path/" > (name . "Project name")) > > or after implementing the proposal from bug#41572 to use .dir-locals.el, > then maybe to save the project name in .dir-locals.el like > > ((nil . ((project-name . "Project name") That's an option, but I wonder if we could do without it: > A separate question is how to assign a name to a project. One way to avoid that, is to generate project names on the fly, in a uniquify fashion. If base directory names are unique, use those. Otherwise, prepend their parent names, and so on. And we won't need a separate command. The exact strategy could be a user option, though. From MAILER-DAEMON Wed Jun 03 19:20:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcgU-0008Lc-5D for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcgS-0008L7-5R for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:32 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:41880) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcgQ-0001ji-O0 for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:31 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id EBF6A160097; Wed, 3 Jun 2020 16:20:27 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 8ufPdz8hUZ4N; Wed, 3 Jun 2020 16:20:27 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 431D71600C8; Wed, 3 Jun 2020 16:20:27 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id d9fSPs4_HQzC; Wed, 3 Jun 2020 16:20:27 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 17CBD160097; Wed, 3 Jun 2020 16:20:27 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: Pip Cet Cc: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel@gnu.org References: <871rmvn7ge.fsf@gmail.com> <1291ef4a-3a47-3990-9b5f-ec15bb72eb73@cs.ucla.edu> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <875630bc-cb80-60df-dadc-edb638a08aad@cs.ucla.edu> Date: Wed, 3 Jun 2020 16:20:25 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 18:41:05 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:20:32 -0000 On 6/3/20 3:52 PM, Pip Cet wrote: > All it does is replace a > six-argument setq by two successive setqs? Surely the symbol value is > irrelevant for the first, third, etc. argument to setq, so what > difference does it make? Oh, you're right, I misread the setqs. (I sure do dislike setqs with mor= e than 2 args....). So all my patch did was make the source code closer to emacs= -27. Instead, Jo=C3=A3o should listen to the email you sent. From MAILER-DAEMON Wed Jun 03 19:20:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcgs-0000N7-CH for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcgq-0000Ib-OB for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:56 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:43777) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcgo-0001n0-JO for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:20:56 -0400 Received: by mail-wr1-x429.google.com with SMTP id l10so4087624wrr.10 for ; Wed, 03 Jun 2020 16:20:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=7eRCrtKCaZzmYoiC9hvTM4L2HeIQl6J6mdREsjmBPYE=; b=qmmNb0wBuUetScRX0OKVycg8HB3i59QYKA/g81oi8YYmAdG6avi3ml7ltWYFozZse+ qsvutbexvNggxKkO0pDBtqFg3y7nHC54bO6zp4V0tZ7gH8rOKYwXeOaQf0dIn6DhSGOa 9rVTXyDv3WYhQQOhFy6Jmwaepbql2pVA5fPCUFZP65/hueB0nmZtaeALUbQchcrFM8Gj y0hlIvyLgcJBJbot+88spNgEVwpRcrNf+lp9PELQfWcTFOAIZ60XhNJHUqv0NwJG4gXQ ZwQXuSjSXPBVG8PqvArR6sLKxxzqNTPavEDqtyoC3N7hYMK8zfecR4tzUrLxrkYdC4eV zNMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=7eRCrtKCaZzmYoiC9hvTM4L2HeIQl6J6mdREsjmBPYE=; b=iFwH7Jv1OzC9tjtuoY+b8ULx0vvDWXIeTeXF/FvdTLqhz1Sx8pjSn45/+hORdShK4Q sKCm8T1ZaDzzXVqY84mazMIpCIH6xgeYCjDOdPmfEEny0AAEa94VkiSmyeYZKvs2U6Co dLQ18SNJYEqXWSMC+ldXKXtVaSJ/DzYz9xhJ1B/ui1JwN3AF+06aprEl/9EI1bWwwdhg WMqNtk/hIPZks0ddCTsuXupPdzbZkszL/QbMaat5KRpNUrqf+tiC1rL4Y33+i86Y339q Zk55qTT++23jafS72P6Z94BIxAyHmLUlidRngSe24EannXfmCh7pHC2ZPRoPa17kRn45 NdfQ== X-Gm-Message-State: AOAM532sidAHPo/gpIBidolC5lE3wzgILceAMxbBoh+ZKbzBhVgB/yv4 S/mB6quwQxqkN7GPpfNoSNb6ow== X-Google-Smtp-Source: ABdhPJwXGceA407nyIzhx3rR5TlHAICZIOPXdIGJAE8NuEZ6YVeKdd/BJYWMxB1CDaChS1lD8M+EOw== X-Received: by 2002:adf:f84d:: with SMTP id d13mr1450979wrq.99.1591226452828; Wed, 03 Jun 2020 16:20:52 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id j18sm5514099wrn.59.2020.06.03.16.20.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 16:20:52 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: Paul Eggert , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel@gnu.org Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <1291ef4a-3a47-3990-9b5f-ec15bb72eb73@cs.ucla.edu> Date: Thu, 04 Jun 2020 00:20:51 +0100 In-Reply-To: (Pip Cet's message of "Wed, 3 Jun 2020 22:52:37 +0000") Message-ID: <87o8pzivn0.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::429; envelope-from=contovob@tcd.ie; helo=mail-wr1-x429.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:20:57 -0000 Pip Cet writes: > On Wed, Jun 3, 2020 at 10:42 PM Paul Eggert wrote: >> On 6/3/20 2:52 PM, Jo=C3=A3o T=C3=A1vora wrote: >> > Not sure where the problem lies but every button inserted by SLY is now >> > just plain text. >> >> It's because I messed up in that part of the patch. Thanks for reporting= the >> bug. I installed the attached patch into master; please give it a try. > > I don't understand that change at all. All it does is replace a > six-argument setq by two successive setqs? Surely the symbol value is > irrelevant for the first, third, etc. argument to setq, so what > difference does it make? Indeed the patch seems like a noop and shouldn't fix Jo=C3=A3o's issue, whi= ch is that until now make-text-button modified its argument. --=20 Basil From MAILER-DAEMON Wed Jun 03 19:31:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgcqh-0002x5-3J for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:31:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgcqe-0002wv-Mz for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:31:04 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:36753) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgcqd-0003DO-Ol for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:31:04 -0400 Received: by mail-wr1-x431.google.com with SMTP id q11so4142100wrp.3 for ; Wed, 03 Jun 2020 16:31:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=/b83WoBJcs3AxvzNjZ4yz8MbRef8a1BNYVrLn6yorQs=; b=ith8YSW4+jFfM6o/7huQt37EABe4phdAFz7XG39qJbsBVk15+gdUaYn4PqHY8iAOKF KS7Tox5AYq9rH/G4u04b68fFjgM8mFYI1DcAgGCqhcFpljRXHLcE3O0bOd/kYH3YFxys MclCNwjx4aUtDH77PVSeaN1h+qQ0mqyA+flSn4Y6Pu9/swEZuBeSYM7ArrIPwaqj0sNs ND+lDDRUoXV1twyoPvN+rehDqx6K5gVoreGlmAr0empY+ym9OEtEF0gzN6T+2vChhFJZ oI2FluA3vbkDRJ2NN8ISr+vY5FpDzvBYKeu+b+ibno+2GSZLAqUo2hf+NWR06dCu5vq+ K1jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=/b83WoBJcs3AxvzNjZ4yz8MbRef8a1BNYVrLn6yorQs=; b=R9iNqg+t0CPcaIBP44+XVeXiqw5UcuVa+GjPpXyb0njAxHjOuszz0J4isXRp0X8nIA PPGDZNLHGC2knl3SyxJ9XwwPWmcafOlp4i4M0nU9iOI6DL66lnRP3iWrWfKC6vuHPWbI cimPea+bCNmXwaa/4yCmzGxb+F0JR2i2vmupeDAc8zdkJM/oJyEXcV4nHNeurnqJZ6yq QR2F848wdMNb5XrSxFBS8gIH6AcsLUT70VgR7Lqs3GhvicHvT7ueXof7yINPPeJ91AZT 35DLAJDDjh2w65yoCJHxMgDpJGwK77fh5Wim20KA7zuywoyKf7zaYreM10y//XO7F300 3n7w== X-Gm-Message-State: AOAM531rFe6cImRgvrQwdutvm2eu1QSiNY5xBYFhL2Z2FRPTSWqpCT0G KrunUCKHokbaf+UwkiSV3Fw1zA== X-Google-Smtp-Source: ABdhPJx7BwsaAo2Ro76NeRCXtv1wyoSsR8fQtAqaoa9x/PTy2RWvPjDhTB5g7HbFAR6GN9DNP0NEpA== X-Received: by 2002:adf:b355:: with SMTP id k21mr1602994wrd.76.1591227061816; Wed, 03 Jun 2020 16:31:01 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id w10sm5359709wrp.16.2020.06.03.16.31.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2020 16:31:01 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Paul Eggert , emacs-devel@gnu.org Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <87wo4niw6t.fsf@tcd.ie> Date: Thu, 04 Jun 2020 00:31:00 +0100 In-Reply-To: <87wo4niw6t.fsf@tcd.ie> (Basil L. Contovounesios's message of "Thu, 04 Jun 2020 00:08:58 +0100") Message-ID: <87img7iv63.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::431; envelope-from=contovob@tcd.ie; helo=mail-wr1-x431.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:31:04 -0000 "Basil L. Contovounesios" writes: > Note that doing that would break compatibility with Emacs < 24.3, which ^^^^ 24.4 > is when make-text-button started returning the modified string object, > in case that's important to you. -- Basil From MAILER-DAEMON Wed Jun 03 19:48:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgd7p-0008VV-FR for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 19:48:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgd7o-0008VL-Pb for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:48:48 -0400 Received: from mail-io1-xd29.google.com ([2607:f8b0:4864:20::d29]:33231) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgd7o-0006sS-00 for emacs-devel@gnu.org; Wed, 03 Jun 2020 19:48:48 -0400 Received: by mail-io1-xd29.google.com with SMTP id k18so4370894ion.0 for ; Wed, 03 Jun 2020 16:48:47 -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 :cc; bh=e4BLgDSntkul2HB+nEVg6UMCNIpe3g7Ku8qqpeRJqao=; b=dK67VkLYogS8Lo9h/WI1JPvlfwC5wNrbuveLimmnWGYKFiK/BhZiIVkcuXuRbZNAHz pHMawdFNm01E250b53xMFydtrkA8mt8xfwQoj4GXb8jK88RlwEc9hEQ2rzJyfwVar1Pb B3AQsiToSDD4rGTFSWrOIIJS1koKF3khUONLpeuWDLD6Tgi/chwcDF9icGWzVvyFSic3 pDgTT6k10XnatyEodF7Juu3dFZOMPDfwehhMEJ0HrusirS7t23ZpoTn9ulLWxaZ/IaJV EVkAtKWdNyEKIn44zJ5iLehkLZ8/PrXZI6Nqn3TalzBRPQFr1W+iwMTaCCa2j4Dck+rL gvAw== 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:cc; bh=e4BLgDSntkul2HB+nEVg6UMCNIpe3g7Ku8qqpeRJqao=; b=Co8pFwNYdM1RYg6kOhVPshilbyvf7/gOBhryZmJQCzYDXWSu0LqBAEwJfOTuYfuPbS IqAwVaghIw99FphL+riipNDeawpSz114tv9M6SbO0thJS9ljakgK9NR6jz2cVYFJIBAk cjBVz2ynwP2yFJ3RfDZlzgy0fbjGPpqzNADv+239x3Eon6mKZ7C+7j9Jh/rkTIzNGtiZ 25jSr6UMQ7vxe2xT9RpkT1SOGN7OOPgZ0opbX2K5BHjx3Grx/AhhQEapZwrDxCU2AX8D UtTTe0TD2wbcJXvPIJ9zSVXl2m7xhUA1NK+FoTloQVLFb+pirFYMur/GJO2cXGOmcO83 MX7g== X-Gm-Message-State: AOAM531BIfg32YPLAjrxBmP6t6UWzGvWPFmF1A1BOpenAsAyvbsshi5p sWVAUwAHAH8Wwxz68hvYYIhndhQB/UkEUAyim0w= X-Google-Smtp-Source: ABdhPJyLy+g1oUsRku8fT6hjclelUcXYuqkZV/hbgZBNMtaUT+efXOCn98jOWGlS0fxsW2Iy7wsCjP1H08zRtvc2598= X-Received: by 2002:a5d:8e14:: with SMTP id e20mr1975977iod.156.1591228126826; Wed, 03 Jun 2020 16:48:46 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> In-Reply-To: <87lfl36abx.fsf@gmail.com> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Thu, 4 Jun 2020 00:48:34 +0100 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: Pip Cet Cc: emacs-devel , Paul Eggert Content-Type: multipart/alternative; boundary="00000000000041927905a736ab15" Received-SPF: pass client-ip=2607:f8b0:4864:20::d29; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd29.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jun 2020 23:48:49 -0000 --00000000000041927905a736ab15 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jun 3, 2020 at 11:42 PM Pip Cet wrote: > Jo=C3=A3o T=C3=A1vora writes: > > I think you want > (defun sly-make-action-button (label action &rest props) > (apply #'sly--make-text-button > label nil :type 'sly-action > 'action action > 'mouse-action action > props)) > > instead, since the new function returns a copy of label rather than the > string passed in. By itself, that doesn't work. I have the same problem. I think I'd rather this previous behavior were retained, or at least achievable by request. I haven't touched this code in a long I don't know what else might depend on it. I don't care about < 24.4 compatibility, if that helps Jo=C3=A3o --00000000000041927905a736ab15 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, Jun 3, 2020 at 11:42 PM Pip Cet <pipcet@gmail.com> wrote:
Jo=C3=A3o T=C3=A1vora <joaotavora@gmail.com> writes:
I think you want
(defun sly-make-action-button (label action &rest props)
=C2=A0 (apply #'sly--make-text-button
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0label nil :type 'sly-action
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'action action
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'mouse-action action
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0props))

instead, since the new function returns a copy of label rather than the
string passed in.

By itself, that doesn'= ;t work.=C2=A0 I have the same problem.

I think I&= #39;d rather this previous behavior were retained, or at least
ac= hievable by request. I haven't touched this code in a long
I don't know what else might depend on it.

= I don't care about < 24.4 compatibility, if that helps
Jo=C3=A3o


--00000000000041927905a736ab15-- From MAILER-DAEMON Wed Jun 03 20:43:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgdyv-0005RV-R8 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 20:43:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37378) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgdyu-0005Qz-74 for emacs-devel@gnu.org; Wed, 03 Jun 2020 20:43:40 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:53562) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgdys-0008LH-Tp for emacs-devel@gnu.org; Wed, 03 Jun 2020 20:43:39 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 07826160097; Wed, 3 Jun 2020 17:43:34 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 4MBeVtWD6CFG; Wed, 3 Jun 2020 17:43:33 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 4A0B31600C8; Wed, 3 Jun 2020 17:43:33 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id yZEAzygw3H5I; Wed, 3 Jun 2020 17:43:33 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 1F970160097; Wed, 3 Jun 2020 17:43:33 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Pip Cet Cc: emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> Date: Wed, 3 Jun 2020 17:43:32 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 18:41:05 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 00:43:40 -0000 On 6/3/20 4:48 PM, Jo=C3=A3o T=C3=A1vora wrote: > I think I'd rather this previous behavior were retained, or at least > achievable by request. It's tricky, as make-text-button in emacs-27 (and earlier) modifies its s= tring argument, which is buggy because string constants are not always unique. = For example: (defun example-bug () (concat "1. " (make-text-button "example" nil 'action (lambda (_) (message "action 1"))) "2. " (make-text-button "example" nil 'action (lambda (_) (message "action 2"))))) If you byte-compile this in emacs-27, both buttons message "action 2" bec= ause there's there's really just one instance of the string constant "example"= , and so there's just one button and the second action overwrites the first. Does SLY always pass mutable strings to make-text-button? I.e., strings b= uilt from 'concat' etc. (not string constants)? If so, I could change make-string-button to copy its string argument only if it's a constant, a= nd that should fix the compatibility issue without needing to make any changes to= SLY. From MAILER-DAEMON Wed Jun 03 20:43:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgdyw-0005Rn-1Z for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 20:43:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37382) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgdyu-0005R8-K4 for emacs-devel@gnu.org; Wed, 03 Jun 2020 20:43:40 -0400 Received: from [183.249.132.153] (port=1569 helo=localhost) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgdys-0008Ks-0i; Wed, 03 Jun 2020 20:43:40 -0400 Received: by localhost (Postfix, from userid 1000) id 0A76F2414F6; Thu, 4 Jun 2020 08:43:28 +0800 (CST) References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> User-agent: mu4e 1.4; emacs 28.0.50 From: stardiviner To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width Reply-To: numbchild@gmail.com In-reply-to: <835zc8ciqb.fsf@gnu.org> Date: Thu, 04 Jun 2020 08:43:27 +0800 Message-ID: <87a71jlky8.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-Host-Lookup-Failed: Reverse DNS lookup failed for 183.249.132.153 (deferred) Received-SPF: softfail client-ip=183.249.132.153; envelope-from=numbchild@gmail.com; helo=localhost X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 19:34:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 53 X-Spam_score: 5.3 X-Spam_bar: +++++ X-Spam_report: (5.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, FSL_HELO_NON_FQDN_1=0.001, HELO_LOCALHOST=3.828, NML_ADSP_CUSTOM_MED=0.9, RDNS_NONE=0.793, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: reject X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 00:43:40 -0000 Eli Zaretskii writes: > [Please use "Reply All" to keep the list CC'ed.] > >> From: "numbchild@gmail.com" >> Date: Wed, 3 Jun 2020 19:48:57 +0800 >> >> > Can you please describe how you set the overlay, or better yet, show the code which does so? >> >> The main functionality code set overlay on org-agenda is here: >> >> (defun org-agenda-log-mode-colorize-block () >> "Set different line spacing based on clock time duration." >> (save-excursion >> (let* ((colors (cl-case (alist-get 'background-mode (frame-parameters)) >> ('light >> (list "#F6B1C3" "#FFFF9D" "#BEEB9F" "#ADD5F7")) >> ('dark >> (list "#aa557f" "DarkGreen" "DarkSlateGray" "DarkSlateBlue")))) >> pos >> duration) >> (nconc colors colors) >> (goto-char (point-min)) >> (while (setq pos (next-single-property-change (point) 'duration)) >> (goto-char pos) >> (when (and (not (equal pos (point-at-eol))) >> (setq duration (org-get-at-bol 'duration))) >> ;; larger duration bar height >> ;; FIXME (< duration 15) >> (let ((line-height (if (< duration 15) 1.0 (+ 0.5 (/ duration 30)))) >> (ov (make-overlay (point-at-bol) (1+ (point-at-eol))))) >> (overlay-put ov 'face `(:background ,(car colors) :foreground "black")) >> (setq colors (cdr colors)) >> (overlay-put ov 'line-height line-height) >> (overlay-put ov 'line-spacing (1- line-height)))))))) >> >> (add-hook 'org-agenda-finalize-hook #'org-agenda-log-mode-colorize-block) >> >> And for a minimal example of setting overlay code is here: >> >> (let ((line-height 20) >> (ov (make-overlay (point-at-bol) (1+ (point-at-eol))))) >> (overlay-put ov 'face '(:background "yellow")) >> (overlay-put ov 'line-height line-height) >> (overlay-put ov 'line-spacing (1- line-height))) >> >> > Did you per chance put the overlay on the part of the line that is not shown when you split the window? >> >> About this problem, I suggest you check out my video link, it shows how the overlay line-height property failed >> when I split window with `split-window-right`. The line height property is gone. (I mean the visual effect is >> gone.) > > In that case, this is the expected behavior: if the newline with the > line-height property is not visible, the setting has no effect. It is > conceptually the same as having a tall character or image displayed on > a line: if you then truncate the line so that the tall element is not > visible, the line's height will be decreased to reflect what is > actually on display. I have a little kind of understand. Hmm, is there any workaround of this situation? I want it to be displayed anyway. Change my code, or toggle some options or something else? > > This is not a bug. You are trying to use this property in a way that > it wasn't designed to support. -- [ stardiviner ] I try to make every word tell the meaning that I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 From MAILER-DAEMON Wed Jun 03 21:20:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgeY5-0000Gw-LS for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 21:20:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgeY4-0000Gk-7j for emacs-devel@gnu.org; Wed, 03 Jun 2020 21:20:00 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:58606) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgeY2-0007Yl-Hx for emacs-devel@gnu.org; Wed, 03 Jun 2020 21:19:59 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9D84F160097; Wed, 3 Jun 2020 18:19:55 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 9cWTo2FXxsRm; Wed, 3 Jun 2020 18:19:54 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8B9A71600C8; Wed, 3 Jun 2020 18:19:54 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id IK-lioOeCE0z; Wed, 3 Jun 2020 18:19:54 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 5F38B160097; Wed, 3 Jun 2020 18:19:54 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= From: Paul Eggert To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Pip Cet , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: Date: Wed, 3 Jun 2020 18:19:54 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> Content-Type: multipart/mixed; boundary="------------D71B70384A0127EBC3173BDD" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/03 18:41:05 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 01:20:00 -0000 This is a multi-part message in MIME format. --------------D71B70384A0127EBC3173BDD Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 6/3/20 5:43 PM, Paul Eggert wrote: > On 6/3/20 4:48 PM, Jo=C3=A3o T=C3=A1vora wrote: >> I think I'd rather this previous behavior were retained, or at least >> achievable by request. >=20 > It's tricky, as make-text-button in emacs-27 (and earlier) modifies its= string > argument, which is buggy because string constants are not always unique= . On second thought, I'll work on coming up with a better workaround for th= e problem along the lines I suggested in my previous message: make-text-but= ton can copy the button label string only if the string's not mutable. I hope thi= s helps with SLY (as I hope SLY is not trying to modify string literals...). In t= he meantime I've reverted the change by installing the attached patch; this = means the bug I mentioned in my previous message remains unfixed. --------------D71B70384A0127EBC3173BDD Content-Type: text/x-patch; charset=UTF-8; name="0001-Revert-make-text-button-string-copy.patch" Content-Disposition: attachment; filename="0001-Revert-make-text-button-string-copy.patch" Content-Transfer-Encoding: quoted-printable >From dd3484bedb7f0207c64ed391d1d7e699741e9917 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 3 Jun 2020 18:15:54 -0700 Subject: [PATCH] Revert make-text-button string copy MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit * lisp/button.el (make-text-button): Don=E2=80=99t make a copy of a button=E2=80=99s string label. This reverts the change made in 2020-05-17T05:23:28Z!eggert@cs.ucla.edu, which broke SLY. Problem reported by Jo=C3=A3o T=C3=A1vora in: https://lists.gnu.org/r/emacs-devel/2020-06/msg00117.html However, we=E2=80=99ll need a better fix for this once string literals become contents, if SLY uses string constants for text button labels. --- lisp/button.el | 1 - 1 file changed, 1 deletion(-) diff --git a/lisp/button.el b/lisp/button.el index a91b0482ac..3a6a6de774 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -349,7 +349,6 @@ make-text-button (or (plist-member properties 'type) (plist-member properties :type)))) (when (stringp beg) - (setq beg (copy-sequence beg)) ;; In case BEG is not mutable. (setq object beg beg 0 end (length object))) ;; Disallow setting the `category' property directly. (when (plist-get properties 'category) --=20 2.25.4 --------------D71B70384A0127EBC3173BDD-- From MAILER-DAEMON Wed Jun 03 23:26:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jggWO-0007yL-Pi for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 23:26:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jggWN-0007yC-Nw for emacs-devel@gnu.org; Wed, 03 Jun 2020 23:26:23 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53658) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jggWM-0000Im-21; Wed, 03 Jun 2020 23:26:22 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jggWL-0002jE-11; Wed, 03 Jun 2020 23:26:21 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Steinar Bang Cc: emacs-devel@gnu.org In-Reply-To: (message from Steinar Bang on Fri, 15 May 2020 21:27:19 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Message-Id: Date: Wed, 03 Jun 2020 23:26:21 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 03:26:24 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I haven't written any novels in it, but yeah, org-mode fills my text > processing needs as well (as well as being my notebook, time keeper and > more). When I write a pamphlet using Libre Office, I need to see how it will appear on the page. I need to see where line breaks and paragraph breaks appear. I want Emacs to be able to do tect processing that way. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Wed Jun 03 23:31:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jggbN-00028s-Q7 for mharc-emacs-devel@gnu.org; Wed, 03 Jun 2020 23:31:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jggbK-00028c-RZ for emacs-devel@gnu.org; Wed, 03 Jun 2020 23:31:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53747) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jggbI-0001kq-RV; Wed, 03 Jun 2020 23:31:28 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jggbG-0008Ov-3c; Wed, 03 Jun 2020 23:31:26 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Dmitry Gutov Cc: stefan@marxist.se, emacs-devel@gnu.org, joaotavora@gmail.com, pcr910303@icloud.com, eliz@gnu.org, drew.adams@oracle.com, monnier@iro.umontreal.ca In-Reply-To: <1e5f135f-37f0-ef9f-f3a5-2cb247fb2205@yandex.ru> (message from Dmitry Gutov on Wed, 3 Jun 2020 15:15:22 +0300) Subject: Re: Imports / inclusion of s.el into Emacs Reply-To: rms@gnu.org References: <0c88192c-3c33-46ed-95cb-b4c6928016e3@default> <550fa43f-30ef-14f3-dd19-dd97a985a04e@yandex.ru> <95bddb34-2c3f-eff5-220f-16b726d97a69@yandex.ru> <1e5f135f-37f0-ef9f-f3a5-2cb247fb2205@yandex.ru> Message-Id: Date: Wed, 03 Jun 2020 23:31:26 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 03:31:32 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I agree it's a problem, but my (and not only mine) point was that adding > the package to ELPA won't really change anything in this regard. I understand your point of view. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Thu Jun 04 00:39:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgheg-0002H8-B5 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 00:39:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56442) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jghec-0002Gm-Nw for emacs-devel@gnu.org; Thu, 04 Jun 2020 00:38:58 -0400 Received: from mail-oi1-x22b.google.com ([2607:f8b0:4864:20::22b]:34414) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgheb-0000SA-CD for emacs-devel@gnu.org; Thu, 04 Jun 2020 00:38:58 -0400 Received: by mail-oi1-x22b.google.com with SMTP id b8so3981587oic.1 for ; Wed, 03 Jun 2020 21:38:56 -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 :cc:content-transfer-encoding; bh=xOJj7NNkJwwrzWVoTVqRQ2XcjD8IHfDrw8ecEpLH06U=; b=FlZyVYchvWVZYW1zzq4PAw82kDPkInf/s6fXxbwtZwewedkbUW0xLR+g6iX8AZ/m3j lt5AMfFlJk1a2LeVoqtYd8V1PgX9fp4M+lwCWYgEfUPmKW+mEg9qkPTUxIIWpLYYZzVz LNP6HtybumtSkUYbg7MlVPocx/RcZTczwNeWj5nw2njR4zAUjlcMzYdhdz1htu8BYKQp Na+UA1sd/BY58uzhNCcYe0FpZljMRYpw80MOkrs+TJch+nu5vNTpm3F8df7S1Txwe22T zb+yD8qJfg1Ok/WhuVdxMrEgRzo9YHODzfIG0vNDMLVIinygDWrDhYjFhJYHQ46QiNMD opzQ== 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:cc:content-transfer-encoding; bh=xOJj7NNkJwwrzWVoTVqRQ2XcjD8IHfDrw8ecEpLH06U=; b=LrBojXwC4qf4DVqvl9qSe4k8Q40ZOyVvvmTRKg2IjZd3hMWP8d5t8ZqhW6CpFAyuNa zp+/g3qznGqiR8I+VGUwmF/K5Pu2877zJJkeyTV34ULuAq1S+nVpUEP+8Yfmu681MTOt jFinoZcfZgIMIsEyDClqd1vlqukRN0UwJmhUVC3kQ7TflOf7IgSI56LqPAUX8i4ijFWg yKdPjCcPu+x7oJVzth3VgLZ60Pj9vmNSjT3MSUGKX0mUnK5uBE9NuV0NHxf9lZBX3O4i GRa/QwwbOQaG4QbTm7P7+tmUI7pV8uy0UfryG5xvZviRGa4iFrwdcbtbMGlul1ZfuUMx BuMQ== X-Gm-Message-State: AOAM533Wwg0TEHad1QyjCLWHtSqA9YniR/xC5WTwMl1neFUPLhtWfb/I nGeaju0rLI2YHA38+YTqAgXbPN1kF34QlZqtvoA= X-Google-Smtp-Source: ABdhPJyG8XCxXjVbVYaDBDHFFz05XJOqd3fj29xNXPlngHCtPIghYpdC74e/72jkAZjW7gYx2ZQt82etdlgmxzUt/5s= X-Received: by 2002:aca:b708:: with SMTP id h8mr1922658oif.122.1591245535890; Wed, 03 Jun 2020 21:38:55 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> In-Reply-To: From: Pip Cet Date: Thu, 4 Jun 2020 04:38:19 +0000 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel , Paul Eggert Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::22b; envelope-from=pipcet@gmail.com; helo=mail-oi1-x22b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 04:38:59 -0000 On Wed, Jun 3, 2020 at 11:48 PM Jo=C3=A3o T=C3=A1vora wrote: > On Wed, Jun 3, 2020 at 11:42 PM Pip Cet wrote: >> I think you want >> (defun sly-make-action-button (label action &rest props) >> (apply #'sly--make-text-button >> label nil :type 'sly-action >> 'action action >> 'mouse-action action >> props)) >> >> instead, since the new function returns a copy of label rather than the >> string passed in. > By itself, that doesn't work. I have the same problem. Strange, I'd tried it locally and it appeared to work. > I think I'd rather this previous behavior were retained, or at least > achievable by request. I haven't touched this code in a long > I don't know what else might depend on it. But the previous behavior was buggy. Things like (defun sly-inspector-insert-more-button (index previous) (insert (sly-make-action-button (if previous " [--more--]\n" " [--more--]") #'sly-inspector-fetch-more 'range-args (list index previous)))) worked only by accident, before. From MAILER-DAEMON Thu Jun 04 03:26:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgkGV-0005YK-CI for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 03:26:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgkGU-0005YE-E0 for emacs-devel@gnu.org; Thu, 04 Jun 2020 03:26:14 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:40480) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgkGT-0001CK-Ek for emacs-devel@gnu.org; Thu, 04 Jun 2020 03:26:14 -0400 Received: by mail-wr1-x432.google.com with SMTP id h5so4889987wrc.7 for ; Thu, 04 Jun 2020 00:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=ZTYdov0g/OEqZOQA7FaSZ5HdoWx9HkOlxqqSs4suZ/c=; b=EfkeZkk54zDh0IomeSpkEaJYbJgy3SZNt+VduiDb5YDRf7S1b4tlAlPMclR3J0QOFm DhAgAwJ1FTHtmt8F2Ufh+YyQcvtNi11kB/9c7urUBTs+O4dzpFism/rjN+JqPrfE21Dk XLi7PqSqPd7zwBibwT87u/HSiG0iJz3KOCf95mj32cDkzDa5xUbOn6GobLOGVuHFF3nY CPXshRm1vqHTJKLG6s3+wol/K1nKp4CjPcFUJhMgbCzepiHeEfOndkDb+eng9SrEuvUl aB75d7Rsy28Xtm+IzbMNMXwaA4DEFf7HU/O6NXQjk8PkN0FTIKs5PYFT0qmYPSOQvtBd Wblw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=ZTYdov0g/OEqZOQA7FaSZ5HdoWx9HkOlxqqSs4suZ/c=; b=j7cS3UvBkz994dxAfur93CkmM3XzfId8MzG8yUEZYoBejFnUREIsh18razH7sQ6QfW ywDbdOMvWYtYWzY2Kz+HJ78AOTM4ovt/No1danCLEMo5M2pyaVisguiHnGpQDI9MdlWT U+pvL0w+pzGQ4aX1XbgJiRljedkTVg3y6cc0WwN9FVgQeEnO1Eko1RIM8zdARcFDF/kc 1uTlSFl/icDW0uGb75m2pEfTs4JiGqs+mZCpLSLFnTih8I9CjG/grRsWMNXA+xP79PJ1 5uJ+DFuKgu2/0Zj2kIfCbC+Ile9a0uAxGETeBs3iCR3xzF0eZDm93fJalJ4xWc79WUpw C71w== X-Gm-Message-State: AOAM533sQ5Urw8mbfjPBiMBDyALRmHEnwjS3N909axdZmZbA9vC4dmaf wFquh4i9Qmy31L6MrXGDmcK0G0iVPJg= X-Google-Smtp-Source: ABdhPJxN3HNW05SK8vXPiWnhX4zGLvp4IcOzThpEfcV/v8gpe2G52kYFpVieR8ZgBFBRvYC7bjvhXg== X-Received: by 2002:adf:ef50:: with SMTP id c16mr2920154wrp.161.1591255571426; Thu, 04 Jun 2020 00:26:11 -0700 (PDT) Received: from chametz (tor-exit-4.all.de. [212.21.66.6]) by smtp.gmail.com with ESMTPSA id i74sm6667153wri.49.2020.06.04.00.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 00:26:10 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> Date: Thu, 04 Jun 2020 07:26:03 +0000 In-Reply-To: (Paul Eggert's message of "Wed, 3 Jun 2020 18:19:54 -0700") Message-ID: <87d06f5m2c.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=pipcet@gmail.com; helo=mail-wr1-x432.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 07:26:14 -0000 Paul Eggert writes: > On 6/3/20 5:43 PM, Paul Eggert wrote: >> On 6/3/20 4:48 PM, Jo=C3=A3o T=C3=A1vora wrote: >>> I think I'd rather this previous behavior were retained, or at least >>> achievable by request. >> It's tricky, as make-text-button in emacs-27 (and earlier) modifies >> its string >> argument, which is buggy because string constants are not always unique. > On second thought, I'll work on coming up with a better workaround for the > problem along the lines I suggested in my previous message: > make-text-button can > copy the button label string only if the string's not mutable. I hope > this helps > with SLY (as I hope SLY is not trying to modify string literals...). It is. I'm not sure the copy-sequence-unless-mutable semantics really make sense, though, as that might make bugs such as this one even harder to find. I think we should add a new function with clean semantics, and throw an error in the old function if the string isn't "mutable", whatever that means in this context. (I guess I can't modify the string contents or add text properties, but can I modify existing properties? What about cons cells deep within the properties? If they're recursively immutable, what about markers and other objects that change state behind your back?) > In the > meantime I've reverted the change by installing the attached patch; this = means > the bug I mentioned in my previous message remains unfixed. I'm still surprised my patch fixed the problem here (for some buttons, at least, for others there are a few more places that do the same thing...) but not for Jo=C3=A3o. Maybe we're looking at a more complicated bug, or maybe we haven't tested with the same kind of button (I entered an unbound symbol and got the restart options, and those were buttons with my patch but plain text without). From MAILER-DAEMON Thu Jun 04 05:16:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jglzF-00034X-Vn for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 05:16:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jglzD-00034A-4F for emacs-devel@gnu.org; Thu, 04 Jun 2020 05:16:31 -0400 Received: from mail-oln040092069064.outbound.protection.outlook.com ([40.92.69.64]:24390 helo=EUR02-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jglzB-00070M-BE; Thu, 04 Jun 2020 05:16:30 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KiFzO6cUBZ9yu66kqo8PpBoBA6z3CU0g7JJvSmaxboFAxptc6hgHKpz1Byj+o3pZB4gQakaOOkrwwMvWYdu/dOpS6A7Ok79voY3oD6yU+Yd831mfjOEdkhO10bvTdNnhTR4OX6zRZ36/R7dFz6hXafFWZuPqg8jx0m7OgnlqUNRJ40KorBMIYHB2pWqSnkNGutv6H/DzyZpaHA647GCy9G3fFE+7PmmDEkocGgL0sGq3ER3dimkOucpN26i2OvqXTXKIuNhmyr0nlLh5brZFCHvwwemS+60HRL4QUEMfZ4sAPV6jiT4p/8pHxXNCIQMWgSKmWkNzOvITebkf7YIfFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p0z0hxwT5Iw8LbRnInrNCiMIYX/8Ar/2OkBPfnZy8YE=; b=A432D28su6mjgNSo76w9+ksMAPdSJQshnqDJG7ZOV/IbzODTBxOnpvquroXIUPwg9dkWpR8R+bD8GspYegAqQaZs+d7PHOHI5rC0mDf+gtWXWkFKfBIsjQWAFMbYEMWmO9yYRq6V6J+9ubYZ8QlxZgwNT7Qvf0cXTnD1ycQQjrHjjn6MGdDSfIanLPnyvozsamY0Ol5+1D+mJGyTPqDBt632UKGqZJC0I4QUHwjkuOjRrPLqNWORyYa0ULswOaIOwM/2sTgwosFY6em0AvzPmyO96iMBX2agmLVI/FCTjiimYycI3RH6LNSkAUQ/iZF825GFkNVlX0gGUy0nkDioyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p0z0hxwT5Iw8LbRnInrNCiMIYX/8Ar/2OkBPfnZy8YE=; b=GgYl8kieTkwU+1IukhxyowBWUj8lCYx4HA3C/0QCbMQzQEqFXWku4D21vO/PH6wllARed9X6zZv78gjGUD7uIt0JZRQSzThoZhEG+sccL+aYvjk8clcwFGvbEuAf75e8mzgrUg3DV/9D0OPdM5xttH4zOc/2vk4bHR4ofl16qHJc/umb9JEokbiVcqLeZfwaB5eO/1ixH9l97VFhXfajFg+CXQkVabX45jrh/RnHL8U2IH4PMdfUYvP7iN+pWbhIIVtRc/D66KbbJYEzgWRvQXBky6yaKKdRJSwb/0J8LJYjvTs8kNA10q/KJK1oHgTTRO/Fb10ElVlrccZYCmV8xA== Received: from HE1EUR02FT045.eop-EUR02.prod.protection.outlook.com (2a01:111:e400:7e1d::51) by HE1EUR02HT124.eop-EUR02.prod.protection.outlook.com (2a01:111:e400:7e1d::366) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Thu, 4 Jun 2020 09:16:25 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:7e1d::4e) by HE1EUR02FT045.mail.protection.outlook.com (2a01:111:e400:7e1d::494) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Thu, 4 Jun 2020 09:16:25 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:F72BFA89BD7EC7A254B0AF7E804F6CD96C7EA524B5F8F48BD71F56787FB77A1B; UpperCasedChecksum:A12C8F38595A7324FC897CE33E411E283AC802C05F944E4DD42C6AF017091452; SizeAsReceived:8225; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 09:16:25 +0000 From: Arthur Miller To: Richard Stallman Cc: Steinar Bang , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Date: Thu, 04 Jun 2020 11:16:23 +0200 In-Reply-To: (Richard Stallman's message of "Wed, 03 Jun 2020 23:26:21 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: BE0P281CA0026.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:14::13) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <87h7vr42e0.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by BE0P281CA0026.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:14::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Thu, 4 Jun 2020 09:16:24 +0000 X-Microsoft-Original-Message-ID: <87h7vr42e0.fsf@live.com> X-TMN: [GOez5DCWPB78N2w/hz8OdB4waGJAPQ6w] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: a8500c52-e65a-4e23-bf66-08d80867f430 X-MS-TrafficTypeDiagnostic: HE1EUR02HT124: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zo9Bx4wLZi90U5dvatwMu5Kxa9qs+UUJNMHnrJbFx+Ce6jWuc0lbHGX9f9q9ZQXgOma+C37Yw/dm5MsiZ0JYmVnZ42W9zMNFzEdOXLiWvoUzxv+YAtB29Kxb9pIrCUTXsrRHqanuAvMsBiFjPsd579UByN3wkY/EqJtSk/pc1mXw518BDAgyRv/0mU2uJZ4BY5qhnqLtJ/GYl+YmxpcQU2gs+GnQoTGq0Ga/FbRHoFs1O4e9mXEp2r7z68zxEL6x X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: uqmCho4lqU/o/0mVy9CyACZ9d/7UamnRd/kl6AJcmnk/zXA3+/DY5FruDmG2dnz6aO9RCls1QO0irI66sR/B1r1CWAcI6AdDba0ZvMiB3dZDFIKVEQJZgVxkpMpaFMRYmWhj4XMfGb1wQ9voV/70Yw== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8500c52-e65a-4e23-bf66-08d80867f430 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 09:16:25.3209 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1EUR02HT124 Received-SPF: pass client-ip=40.92.69.64; envelope-from=arthur.miller@live.com; helo=EUR02-VE1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 05:16:25 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 09:16:31 -0000 Richard Stallman writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > I haven't written any novels in it, but yeah, org-mode fills my text > > processing needs as well (as well as being my notebook, time keeper and > > more). > > When I write a pamphlet using Libre Office, I need to see how it > will appear on the page. I need to see where line breaks and paragraph > breaks appear. > > I want Emacs to be able to do tect processing that way. When you say page, you mean a printed page on paper? Can't that be helped with some of live preview options for a pdf or ps or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? Or couldn't it be possible to define some html+css to model A4 paper size, for example: https://codepen.io/rafaelcastrocouto/pen/LFAes and use some of live preview options for html (eww or browseurl or something else)? Not a wysiwyg directly, but kind-of middle ground? From MAILER-DAEMON Thu Jun 04 05:31:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgmDg-0004lU-AF for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 05:31:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56178) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgmDf-0004kP-1M for emacs-devel@gnu.org; Thu, 04 Jun 2020 05:31:27 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:33001) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgmDd-0000yJ-WE for emacs-devel@gnu.org; Thu, 04 Jun 2020 05:31:26 -0400 Received: by mail-wm1-x331.google.com with SMTP id j198so6411765wmj.0 for ; Thu, 04 Jun 2020 02:31:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=4GsxEQnYIsXHRwyhuY9V5ZAZsH5Baoh6p139jn17KWs=; b=eTi4G0ML0eR/VSeMhLR5OmcQTKskWBYK6YdPcusbtHL0FXw6ahF9NnyUmAjgaPlvoe PmQJHwgFg8IQ3HlJwZmNk5JFIwncCBQZvif0UU2JFsBRnOFfK6NkHedW0orKKXeNRfKt wt4bb19F5f10oHtgdwwCwkKyR9uJowdDJe2yVK1me2WMBPLafHk7I6iwijUZUvLx6Bgj 8Ph3FnVyO29J1BNA5xm0kxSzatv8AEKXOT8M4N3yEpkz9HpI9605kGQwjXsFwHuLi0OB Z+DLFN1NQmEKedA0WB6WdLHAc4A8NQgeaWcVIoC+zxsnZ3HrfVR2r57hnhLPgYICen++ Hyeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=4GsxEQnYIsXHRwyhuY9V5ZAZsH5Baoh6p139jn17KWs=; b=LE9MBsRjqaQMUsLcsjpAsUjZ2p8qWr537S9KG0uzfHV6X3juMVVEJulQtWEu4rfKRO OWGFFDR9FpY+F62DpkqbEox1CNZyTkF2i6WYSATRmVpCJiJnC6ElmJqxG9UT5l5LuJxk N/OuYRTALk9lJRgAtIcYGV9rHE+ZaJqp/J9fFfus68d13Zv4dCh6kelpMnz85sY/Q3ZC duS2UaCc1wOZBTh8w0Jh9MywJD5EQt6XhrImNTLQaZRaXyiGGWo87Fyii5m3S7y5oR50 eDN0uDMrcfJtiVrnh3o2bfDV/QfS4ImOeqYQg3LStiPIes21Y4VTdaFSpTtHV4xkUkGg w0lg== X-Gm-Message-State: AOAM531wbE849nglr6YdHtfiVjpvkSNBWKTuCOwAA/sxDvHcHgfphgF9 LlOCVLoDQNQrjIHJ4QIJDOQ= X-Google-Smtp-Source: ABdhPJw8NjFbRZka7GCpfrOlSk3GcB4qpTcSjw8so4xwJD7lNFF47OIjh61GiRd6l0XfNOxOIkq8Tw== X-Received: by 2002:a7b:c7d8:: with SMTP id z24mr3052364wmk.28.1591263084370; Thu, 04 Jun 2020 02:31:24 -0700 (PDT) Received: from krug ([89.180.148.153]) by smtp.gmail.com with ESMTPSA id y37sm8507907wrd.55.2020.06.04.02.31.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 02:31:23 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Pip Cet Cc: emacs-devel , Paul Eggert Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> Date: Thu, 04 Jun 2020 10:31:21 +0100 In-Reply-To: (Pip Cet's message of "Thu, 4 Jun 2020 04:38:19 +0000") Message-ID: <87r1uvkwie.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x331.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 09:31:27 -0000 Pip Cet writes: > On Wed, Jun 3, 2020 at 11:48 PM Jo=C3=A3o T=C3=A1vora wrote: >> On Wed, Jun 3, 2020 at 11:42 PM Pip Cet wrote: >> By itself, that doesn't work. I have the same problem. > > Strange, I'd tried it locally and it appeared to work. Yep, I didn't dig in, but it seems now that some buttons works and other's don't work. So in a REPL typing "123" CL-USER> 123 123 (7 bits, #x7b, #o173, #b1111011) doesn't work (the second line should be interactive and it's not). But now I did dig in and that's because other code is using the same paradigm that sly-make-action-button was using. Everything should work if I track such users and change them. I think I will lose compatibility to ~24.4, which is where I developed this code. Oh well. >> I think I'd rather this previous behavior were retained, or at least >> achievable by request. I haven't touched this code in a long >> I don't know what else might depend on it. > > But the previous behavior was buggy. Things like > > (defun sly-inspector-insert-more-button (index previous) > (insert (sly-make-action-button > (if previous " [--more--]\n" " [--more--]") > #'sly-inspector-fetch-more > 'range-args (list index previous)))) > > worked only by accident, before. =20=20 Accident/spec/divine providence: they worked, and for a long time. make-text-button never warned me about mutability/immutability, constant strings or non-constant strings. So effectively we're changing the sepc implicit or explicit, in a backwards-incompatible way, and that breaks programs, case in point. Jo=C3=A3o PS: I admit I didn't check the recent "incompatible lisp changes" NEWS for recent Emacs versions, maybe there's something in there that could have given me a heads up. From MAILER-DAEMON Thu Jun 04 05:39:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgmLo-00024A-Fa for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 05:39:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57138) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgmLn-00022Y-96 for emacs-devel@gnu.org; Thu, 04 Jun 2020 05:39:51 -0400 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]:46818) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgmLm-0003kE-Ff; Thu, 04 Jun 2020 05:39:50 -0400 Received: by mail-lj1-x22c.google.com with SMTP id z9so6396730ljh.13; Thu, 04 Jun 2020 02:39:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=dO0MnFnpJe0HMVpi6mNZ9X+akMCrji7+cffXy2yOWgc=; b=AQJgE6vgA8+ouh0iy2qHRy91DDDRHlQ+exqnMsmpLDwRmbemtFMPwvkX+6HmnsJT3S gRjZ3Tv7PLkD8tMISnnny/IdFYY9Nz1kCH+B5hrab3O5cIY7rKB907eh+G+cIJ8kSZ94 FDKGNXq84fyx4WOzbYJELUasLABGbTrMnILxT4OOEOjwZljfuT6Y2JOEZ+wnGBbuXyYC LqgB8m/OEX/th5HZ5MajTsf1Wv3pmb16PjdujyPtZ22zDXhxpypWyA+XQm6LL2kiM1PQ 9PBv4ZCZW71KF5TsscB3c/DpDCnif+irSfM9URyWbBWmBRGr694Vb59GBH2/L8kolQDd UZIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=dO0MnFnpJe0HMVpi6mNZ9X+akMCrji7+cffXy2yOWgc=; b=RK17MNJAxp0uFU8/u1elwJRFc359J/s3NkCPXWhc7kea+yuZHWpImMryvTYH7j+eGG lYWS67gwesDdPt7tnuoYmB3Vt55jJ4gANb5e6BtGfxp4GkDhcATvgkQjHGf33fNBqc4j uH8GIhmSshWf67A6N7RmyWeliIZJOpDUF4wvrv9RXCwIhJmIBvZmeygn5pJvqBd8Wejb tTd9C0EG8bT5pfzRvS/j+Zyy4/aSXz+BbDAqNetGaXsmth4a+gP6AxivpDSySIlU3Jn1 eK8EqJu702j4326nXYgbmLQ3/c0i/3plj9fGCzdOMvNmUaBRJyPnhyBE4sNTL8DOMw9N ZCRw== X-Gm-Message-State: AOAM532HjoW+/ZJ1hFTboSnXAU2KyN2DmCMfjZo/e07TIo0FaVboGxj2 XBZqPvRhfzeGz8T0Mvsr/B63lvISRfL36A4hX0bsbAUHeGc= X-Google-Smtp-Source: ABdhPJy+pXiZpFT9PuyjS0tsl+SZwRRgNZmKoEgQ0hfL1SUFgrL0WosHgDLx1thG7/xOveACgDy37r6OSo9xKcaP4cQ= X-Received: by 2002:a05:651c:318:: with SMTP id a24mr81319ljp.55.1591263587294; Thu, 04 Jun 2020 02:39:47 -0700 (PDT) MIME-Version: 1.0 From: Philippe Vaucher Date: Thu, 4 Jun 2020 11:39:22 +0200 Message-ID: Subject: Prefixed manual describe-function and api overview To: Emacs developers , =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Eli Zaretskii Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x22c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 09:39:51 -0000 Hello, Following up on our previous discussions, here is a working implementation of the completion mechanism based on the manual: https://github.com/Silex/prefixed-manual.el/blob/master/prefixed-manual.el At the moment it uses https://melpa.org/#/dash and https://melpa.org/#/s so make sure you have these dependencies. Then to try it out, test with `M-x prefixed-manual-describe-function` and `M-x prefixed-manual-overview`. The later still needs a lot of work but it gives an idea. Here are my questions/plans: - If there is interest for some parts for the core, I'll rewrite this in vanilla Emacs. - I'm not sure I like "prefixed-manual", given this is more about "manual-helpers". Feel free to suggest a better name. - In `prefixed-manual-overview`, I'd like to display the full signature of functions. For example display "(substring-no-properties STRING &optional FROM TO)" instead of "substring-no-properties". If you know a simple way I'm interested. I tried to use something like `(get 'substring-no-properties 'function-documentation)` or play with `documentation-property` but couldn't find easily and gave up. Kind regards, Philippe From MAILER-DAEMON Thu Jun 04 07:11:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgnm6-00038G-DT for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 07:11:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgnm5-00037E-KK for emacs-devel@gnu.org; Thu, 04 Jun 2020 07:11:05 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:35343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgnm4-00069l-0S for emacs-devel@gnu.org; Thu, 04 Jun 2020 07:11:05 -0400 Received: by mail-wr1-x430.google.com with SMTP id x14so5646209wrp.2 for ; Thu, 04 Jun 2020 04:11:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=IOuNNfjQjSKeoSPsKFx9W+GmgAeOacV03615T18wTL4=; b=MzePvnWVSF6yXmnBHsaTk1z9RBo2xHao1Uwjqds1jl5guMR20dj1kf9wuoQdFp7dDh E3O/XrM0gWLI5XF6cwem0RuI2Db4pAsFS4NweoiFr5nB+JnbrMh6xrAicJFLkfjALlbP hEXSB8txbA0JZU/Tyh3rvg+LJdR4+v4s9fWU692bK2EZoNJenERyoP7xM3Jglt1x1Sq2 kRoMXfGa2fUG3rPphStdZsHDWaWGgUte7pvBcib+9G3Hkhou3ZmO7BLowEeWLQrjqRES lfDb3Dus0M3zwovtv0ZKZFEs/ixfsAdHxd3eOj6gVNLA/y9I8QRhYHbMfA/cmSVh6pEz 8mGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=IOuNNfjQjSKeoSPsKFx9W+GmgAeOacV03615T18wTL4=; b=OfcyMHyIdL4t+Gdc4l4/GVrwLc+EThm0vDr43FJaM1w98aFpCYxJKqQppBKitRfPky HXTG55G4SjTbmJZRW6o/jMri57D5IDFZqKNtluknwLJrwq9Gsb+vv/nEN3zkmAMpIkuj CGjEkpwmrDOOQyFhgyYv9SGBWPxm2d5rY1rKFzsPx+ZfX2ZFB9Ngvth7nrg9AlEARELc VnEkRQ9LWnODSToivLC9ZRibCqXZuWwEXb1cIoPjYgBvGk8j82sxFIUc/Agm1JbMqZ05 LE8jtMyZribHhkJpiSh9TfZ3FhoWoqJ1z5A2VnTeA7fbWvFppiu6eNXKNTAe1jYfrrf1 qicQ== X-Gm-Message-State: AOAM5324UXWVeCS7FA281X1jcC64ou6U+iJW/rwFG3v5tS8p15Z0qqib S8kkaj359M8l8f/xOqe8uMavEQ== X-Google-Smtp-Source: ABdhPJzaaGCI5XDdhbfiir22/gITIG7LecOI6azT7UoNaQsRuiPruKgVNUQ+Z9vp6W83/8F3Uwraog== X-Received: by 2002:adf:9b9e:: with SMTP id d30mr4007872wrc.345.1591269062192; Thu, 04 Jun 2020 04:11:02 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id b201sm6900387wmb.36.2020.06.04.04.11.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 04:11:01 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: Paul Eggert , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> Date: Thu, 04 Jun 2020 12:11:00 +0100 In-Reply-To: <87d06f5m2c.fsf@gmail.com> (Pip Cet's message of "Thu, 04 Jun 2020 07:26:03 +0000") Message-ID: <87lfl3f5mj.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::430; envelope-from=contovob@tcd.ie; helo=mail-wr1-x430.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 11:11:05 -0000 Pip Cet writes: > Paul Eggert writes: > >> On second thought, I'll work on coming up with a better workaround for the >> problem along the lines I suggested in my previous message: >> make-text-button can >> copy the button label string only if the string's not mutable. I hope >> this helps >> with SLY (as I hope SLY is not trying to modify string literals...). > > It is. I'm not sure the copy-sequence-unless-mutable semantics really > make sense, though, as that might make bugs such as this one even harder > to find. > > I think we should add a new function with clean semantics, and throw an > error in the old function if the string isn't "mutable", whatever that > means in this context. (I guess I can't modify the string contents or > add text properties, but can I modify existing properties? What about > cons cells deep within the properties? If they're recursively immutable, > what about markers and other objects that change state behind your > back?) How would make-text-button detect whether its first argument is mutable? Would it not suffice to clarify in its documentation that it modifies its argument, in the same way that we warn about passing immutable lists to nconc? -- Basil From MAILER-DAEMON Thu Jun 04 08:16:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgonZ-0002nQ-2Y for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 08:16:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49268) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgonX-0002ie-2v for emacs-devel@gnu.org; Thu, 04 Jun 2020 08:16:39 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:58075) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgonS-00045a-FR; Thu, 04 Jun 2020 08:16:38 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id AF7594413E1; Thu, 4 Jun 2020 08:16:32 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 027114413D7; Thu, 4 Jun 2020 08:16:26 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591272987; bh=apHoaOCzxQoSKGRq/3QVlBg07VqEtrmPYRFhR2glp2M=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=b08+JCdA5lGXFgy3JRHL1ndE/J9ZqErOk/Iro1tVFDombTi4M3mwW7WM1wZvGMYI/ nbd063TifCIscY74ASpy5WASpM8dFT60k9Rn3yuvbagbTkopdU8RYB0SBOo5OFom23 PIs2In2fqqAewpfRuSc+KyHe7g6wuZnW3j5h4SzvN0tKFBHv5X79EiboNx/zINe2HZ I5EbSTYoc6exrUwySp9BM3+edbNnWUchZkNchT6aivW3fviP9qcB5jD8iEIeM414Cg 9PS9AX2H2+H8um0iw16btfhLsjZrrpXJKAJgOP2hPq7FSeR7N5Cbe8fdyn+ljIWzRU iW2vDaLi/4lSw== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id B342A120AE8; Thu, 4 Jun 2020 08:16:26 -0400 (EDT) From: Stefan Monnier To: Philippe Vaucher Cc: Emacs developers , =?windows-1252?B?Sm/jbyBU4XZv?= =?windows-1252?B?cmE=?= , Eli Zaretskii Subject: Re: Prefixed manual describe-function and api overview Message-ID: References: Date: Thu, 04 Jun 2020 08:16:25 -0400 In-Reply-To: (Philippe Vaucher's message of "Thu, 4 Jun 2020 11:39:22 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.065 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 08:16:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 12:16:39 -0000 > - I'm not sure I like "prefixed-manual", given this is more about > "manual-helpers". Feel free to suggest a better name. `fixed-manual` ? ;-) > - In `prefixed-manual-overview`, I'd like to display the full > signature of functions. For example display "(substring-no-properties > STRING &optional FROM TO)" instead of "substring-no-properties". If > you know a simple way I'm interested. I tried to use something like > `(get 'substring-no-properties 'function-documentation)` or play with > `documentation-property` but couldn't find easily and gave up. I think you're looking for `help-function-arglist`, but of course that only works for those functions already loaded into Emacs. Stefan From MAILER-DAEMON Thu Jun 04 09:16:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgpju-0007iC-W5 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 09:16:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgpjt-0007hi-ET for emacs-devel@gnu.org; Thu, 04 Jun 2020 09:16:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60692) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgpjt-00022x-5b; Thu, 04 Jun 2020 09:16:57 -0400 Received: from [176.228.60.248] (port=2987 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jgpjs-0000sc-PL; Thu, 04 Jun 2020 09:16:56 -0400 Date: Thu, 04 Jun 2020 16:16:44 +0300 Message-Id: <83wo4nas3n.fsf@gnu.org> From: Eli Zaretskii To: numbchild@gmail.com Cc: emacs-devel@gnu.org In-Reply-To: <87a71jlky8.fsf@gmail.com> (message from stardiviner on Thu, 04 Jun 2020 08:43:27 +0800) Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 13:16:57 -0000 > From: stardiviner > Cc: emacs-devel@gnu.org > Date: Thu, 04 Jun 2020 08:43:27 +0800 > > > In that case, this is the expected behavior: if the newline with the > > line-height property is not visible, the setting has no effect. It is > > conceptually the same as having a tall character or image displayed on > > a line: if you then truncate the line so that the tall element is not > > visible, the line's height will be decreased to reflect what is > > actually on display. > > I have a little kind of understand. Hmm, is there any workaround of this > situation? I want it to be displayed anyway. Change my code, or toggle some > options or something else? Can you describe what are you trying to accomplish, and for what purpose? Maybe then we could propose a workaround. From MAILER-DAEMON Thu Jun 04 09:37:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgq3a-0000KF-Q0 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 09:37:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgq3X-0000JG-TZ for emacs-devel@gnu.org; Thu, 04 Jun 2020 09:37:15 -0400 Received: from smtp1a.inetd.co.jp ([210.129.88.11]:56098) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgq2z-0005sm-D9 for emacs-devel@gnu.org; Thu, 04 Jun 2020 09:37:15 -0400 Received: from localhost (42-146-134-146.rev.home.ne.jp [42.146.134.146]) by smtp1a.inetd.co.jp (Postfix) with ESMTPA id CEE2D61; Thu, 4 Jun 2020 22:36:35 +0900 (JST) From: Ikumi Keita To: Stefan Monnier cc: emacs-devel@gnu.org Subject: Re: Giving "text quotes" syntax in font-lock-syntax-table only In-reply-to: References: <50114.1589957638@localhost> Comments: In-reply-to Stefan Monnier message dated "Wed, 03 Jun 2020 10:12:59 -0400." X-Mailer: MH-E 8.6+git; nmh 1.7.1; GNU Emacs 26.3 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <32982.1591277791.1@localhost> Date: Thu, 04 Jun 2020 22:36:32 +0900 Message-ID: <32983.1591277792@localhost> Received-SPF: pass client-ip=210.129.88.11; envelope-from=ikumi@ikumi.que.jp; helo=smtp1a.inetd.co.jp X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 09:36:36 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 13:37:16 -0000 Hi Stefan, >>>>> Stefan Monnier writes: > Could you test the patch below to see if it makes the old code > work correctly? Yes, the fontification doesn't get scrambled with this modification. If I understand correctly, fontification still can fail even with this fix, if `font-lock-syntax-table' is modified after font lock mode is enabled. So I think it's preferable to advertise that `font-lock-syntax-table' should not modified directly, unless the modification is restricted within translation between ".", "w" and "_", once after font lock mode is enabled. Regards, Ikumi Keita From MAILER-DAEMON Thu Jun 04 10:01:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgqQk-0002kr-Fe for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 10:01:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgqQj-0002kj-JR for emacs-devel@gnu.org; Thu, 04 Jun 2020 10:01:13 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:22240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgqQc-0002dQ-0y for emacs-devel@gnu.org; Thu, 04 Jun 2020 10:01:09 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 97BC3100525; Thu, 4 Jun 2020 10:01:04 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id B758C1002CF; Thu, 4 Jun 2020 10:01:02 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591279262; bh=WKR1chSApJb3r3kMUIpV3+Y06w8EJARb6L7dE1+sjSM=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=XWdO/0RnGdVNUNCE/KktaaSK5OFrijYqBkl6PYCJNNwLqNDUzkvYUMZjEM5DEeKWz lZw8kBEzddB7wzlvlz/dVi9NM5CBwO3E6iiS3WpFlfkgN3EGFbobt6jt1pQlkwrBra 3Lnl7HVOIFvZ4tdfJrAQ3wlu03B3XlKpex/JbYWJ2lDckwBUGvdCLQR8osVkLZg8Fb XdAqBVpZ5sXZ8j5SVu/7h3EzyOhJGzNPJT8VFQAgn/8YxR1FI254ekc9S6uPql6Pnu LJuE/plnZdt7fxdD/lzRBQW0JnF1ELb3SXN9GjLc6G/bh5OUAG75OsCnTA1P/RBimu IcbO3Kck8gTYw== Received: from alfajor (76-10-137-254.dsl.teksavvy.com [76.10.137.254]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 164DD12027A; Thu, 4 Jun 2020 10:01:02 -0400 (EDT) From: Stefan Monnier To: Ikumi Keita Cc: emacs-devel@gnu.org Subject: Re: Giving "text quotes" syntax in font-lock-syntax-table only Message-ID: References: <50114.1589957638@localhost> <32983.1591277792@localhost> Date: Thu, 04 Jun 2020 10:00:58 -0400 In-Reply-To: <32983.1591277792@localhost> (Ikumi Keita's message of "Thu, 04 Jun 2020 22:36:32 +0900") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.000 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 08:16:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 14:01:13 -0000 >> Could you test the patch below to see if it makes the old code >> work correctly? > Yes, the fontification doesn't get scrambled with this modification. Thanks. I pushed it to `master`. > If I understand correctly, fontification still can fail even with this > fix, if `font-lock-syntax-table' is modified after font lock mode is > enabled. Yes, if `font-lock-syntax-table` is modified/set directly rather than via the 4th element of `font-lock-defaults`. > So I think it's preferable to advertise that `font-lock-syntax-table' > should not modified directly, unless the modification is restricted > within translation between ".", "w" and "_", once after font lock > mode is enabled. We should probably deprecate the use of `font-lock-syntax-table`, indeed. Stefan From MAILER-DAEMON Thu Jun 04 10:06:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgqWC-0005Qa-6o for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 10:06:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgqWB-0005Og-3E for emacs-devel@gnu.org; Thu, 04 Jun 2020 10:06:51 -0400 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]:47083) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgqWA-0004Q4-CF; Thu, 04 Jun 2020 10:06:50 -0400 Received: by mail-lj1-x233.google.com with SMTP id z9so7422588ljh.13; Thu, 04 Jun 2020 07:06:49 -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 :cc; bh=hS7G786whRadnjwG8rdodpLQpdqxj9RfgrllUpJnBDA=; b=l0od5PpZAHEiHWR2hUIk5lH9LCYiUGvlumwBT0Z40F90rNpWckJvCnddc6lGWRk4tJ qEHJXnUBtrj2vtOb8GgjAb07RD2vIfFxCkCs1KWYsStmggwWSLduLm1IHob9EpD9jnc7 /gC0829JeHArqrqDykOLrqFD3ZyZ9Em2bCZAW4Bu6keBo/z89nbpWlbWOXI4yvi+TFC5 QH+1g60nsdIbUT8Pa4DgrtFcEeZBvX8Uhzq2wqRiOu+Zg3FdwSceR2Ax0WOOxkvNcKSP DfpLM/WpmhxS8VC5x3c5MsYq5506YTSgFOm2MMNpFP0YMPz0KfPqHpKLt77A5iguAQEq /irQ== 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:cc; bh=hS7G786whRadnjwG8rdodpLQpdqxj9RfgrllUpJnBDA=; b=iwCSak85nXipE5bRC9NR7UQ9PdBHTq+IVFklyb93LQSY3VcC0KxsQon/mARIgkPGhD EDgizgt4KuFyNDF4w7BvKrPsZbZ/L6dpoYmk6VCTNdmMgnxh0okbWsrrDjvgp0X9TJre wYRjRS4k6C3D19Oo6ukpKxnKh6+6uIHeNRaphNObAAONQ3jE2HzJs/BAkwFXF6d6qLCs LXmVvcUViUu3Arz2teG8ho/ovmsCmJf6lQca2zol+RfU3niZ8DyzfPb7yhgCwoqgZVdb avB9VSGdWng8FKEh/3m9QGRP1MfoNEy/NWEIjKP3RG5yKQiu3H4c0PPxLeUoLzfQcnPQ 7ARw== X-Gm-Message-State: AOAM532V5E5vHImCQAm4USfMFw3TpK4JktvtGpcYUlNrNzf4Z3uK7crT JHQqc8wnyQA2kw1iDvmY4KjaAKE/bONQTBEbkZ8= X-Google-Smtp-Source: ABdhPJx+diYeX9LrIUYbQ5UQR5/GCg8v0e3cPf6zD39CD90IjmWp86mLyysQNwcQlTBaFBfrmzhs6gvb9NRqKfz67pk= X-Received: by 2002:a05:651c:3cc:: with SMTP id f12mr2275470ljp.244.1591279607998; Thu, 04 Jun 2020 07:06:47 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Philippe Vaucher Date: Thu, 4 Jun 2020 16:06:22 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: Stefan Monnier Cc: Emacs developers , =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Eli Zaretskii Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::233; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x233.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 14:06:51 -0000 > > - In `prefixed-manual-overview`, I'd like to display the full > > signature of functions. For example display "(substring-no-properties > > STRING &optional FROM TO)" instead of "substring-no-properties". If > > you know a simple way I'm interested. I tried to use something like > > `(get 'substring-no-properties 'function-documentation)` or play with > > `documentation-property` but couldn't find easily and gave up. > > I think you're looking for `help-function-arglist`, but of course that > only works for those functions already loaded into Emacs. Thanks. I was beginning to think about having to use `describe-function`, extract the signature from it, then close the buffer :-) I'll incorporate your idea soon and try to make it look pretty, maybe by generating org-mode blocks instead. Philippe From MAILER-DAEMON Thu Jun 04 11:52:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgsAR-0000pR-2l for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 11:52:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgsAP-0000ob-5v for emacs-devel@gnu.org; Thu, 04 Jun 2020 11:52:29 -0400 Received: from [183.249.132.153] (port=1771 helo=localhost) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgsAL-0001YZ-Az; Thu, 04 Jun 2020 11:52:28 -0400 Received: by localhost (Postfix, from userid 1000) id 1F80B2416EB; Thu, 4 Jun 2020 23:46:13 +0800 (CST) References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> <83wo4nas3n.fsf@gnu.org> User-agent: mu4e 1.4; emacs 28.0.50 From: stardiviner To: Eli Zaretskii Cc: numbchild@gmail.com, emacs-devel@gnu.org Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width Reply-To: numbchild@gmail.com In-reply-to: <83wo4nas3n.fsf@gnu.org> Date: Thu, 04 Jun 2020 23:46:09 +0800 Message-ID: <87v9k6esvy.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 183.249.132.153 (deferred) Received-SPF: softfail client-ip=183.249.132.153; envelope-from=numbchild@gmail.com; helo=localhost X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 11:46:14 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 53 X-Spam_score: 5.3 X-Spam_bar: +++++ X-Spam_report: (5.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, FSL_HELO_NON_FQDN_1=0.001, HELO_LOCALHOST=3.828, NML_ADSP_CUSTOM_MED=0.9, RDNS_NONE=0.793, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: reject X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 15:52:29 -0000 =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Eli Zaretskii writes: >> From: stardiviner >> Cc: emacs-devel@gnu.org >> Date: Thu, 04 Jun 2020 08:43:27 +0800 >>=20 >> > In that case, this is the expected behavior: if the newline with the >> > line-height property is not visible, the setting has no effect. It is >> > conceptually the same as having a tall character or image displayed on >> > a line: if you then truncate the line so that the tall element is not >> > visible, the line's height will be decreased to reflect what is >> > actually on display. >>=20 >> I have a little kind of understand. Hmm, is there any workaround of this >> situation? I want it to be displayed anyway. Change my code, or toggle s= ome >> options or something else? > > Can you describe what are you trying to accomplish, and for what > purpose? Maybe then we could propose a workaround. I try to add overlay which is colorized blocks that have line-height based = on the org-agenda clocked time. I hope the overlay can keep line-height even I split window get window width decreased. The core code is here: #+begin_src emacs-lisp ;; Show Org Agenda tasks with heigh spacing based on clock time with `org-a= genda-log-mode'. ;; work with org-agenda dispatcher [c] "Today Clocked Tasks" to view today'= s clocked tasks. (defun org-agenda-clock-colorize-block () "Set different line spacing based on clock time duration." (save-excursion (let* ((colors (cl-case (alist-get 'background-mode (frame-parameters)) ('light (list "#F6B1C3" "#FFFF9D" "#BEEB9F" "#ADD5F7")) ('dark (list "#aa557f" "DarkGreen" "DarkSlateGray" "DarkSlateB= lue")))) pos duration) (nconc colors colors) (goto-char (point-min)) (while (setq pos (next-single-property-change (point) 'duration)) (goto-char pos) (when (and (not (equal pos (point-at-eol))) (setq duration (org-get-at-bol 'duration))) ;; larger duration bar height (let ((line-height (if (< duration 15) 1.0 (+ 0.5 (/ duration 30)= ))) (ov (make-overlay (point-at-bol) (1+ (point-at-eol))))) (overlay-put ov 'face `(:background ,(car colors) :foreground "= black")) (setq colors (cdr colors)) (overlay-put ov 'line-height line-height) (overlay-put ov 'line-spacing (1- line-height)))))))) (add-hook 'org-agenda-finalize-hook #'org-agenda-clock-colorize-block) #+end_src Which I get this code originally from this URL https://emacs-china.org/t/org-agenda/8679 (It's Chinese Emacs forum). =2D --=20 [ stardiviner ] I try to make every word tell the meaning that I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 =2D----BEGIN PGP SIGNATURE----- iQFIBAEBCAAyFiEE8J9lDX1nSBmJJZFAG13xyVromsMFAl7ZF0EUHG51bWJjaGls ZEBnbWFpbC5jb20ACgkQG13xyVromsOY+gf+JfnwA67k3RpnSXcIaERYDALF434Q t2XpigdnMigV3T+6OwQoPXHEPvmZU0tQ2a/RcPhMRw70FbQP2KGKqwc5VnSonzyp NBYKKBKWoQtNpFFdK7Nu1sL+5/7weLtK0IH4DjZ7whp5POj32l+AAD8FTclOJLIn CezOj/X5YsGmh08eUEIjUK9mk229hun9UFV4emdNj8BDisNXQQELyrOTXF3ITiZC +peQmYWib90G+Pma4AavW9EyfxOoZVgOf846M5e8MMyrhLXaGKzJh7eyRab26psA mTS8vOOGzFPyK0SisHU0I3T+JsvdJRScZfFZNWJZvQyPP03pvxEImod0Og=3D=3D =3DcFd8 =2D----END PGP SIGNATURE----- From MAILER-DAEMON Thu Jun 04 13:49:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgtzR-0007K0-Vq for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 13:49:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33750) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtzP-0007Eg-SE for emacs-devel@gnu.org; Thu, 04 Jun 2020 13:49:15 -0400 Received: from mout01.posteo.de ([185.67.36.141]:49714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtzO-0007pM-Lk for emacs-devel@gnu.org; Thu, 04 Jun 2020 13:49:15 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout01.posteo.de (Postfix) with ESMTPS id ED5D2160062 for ; Thu, 4 Jun 2020 19:49:09 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 49dCvS4Gcbz6tmT; Thu, 4 Jun 2020 19:49:08 +0200 (CEST) From: Andrew Schwartzmeyer Content-Type: multipart/alternative; boundary="Apple-Mail=_0126F65D-9A1D-447C-9AEA-1B9BCF169925" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Should (icomplete-mode) explicitly disable fido-mode? Message-Id: <7ADEE954-6074-4C8E-9EB7-7BF93F6F46BD@schwartzmeyer.com> Date: Thu, 4 Jun 2020 10:49:05 -0700 Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: emacs-devel@gnu.org X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=185.67.36.141; envelope-from=andrew@schwartzmeyer.com; helo=mout01.posteo.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:49:10 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 17:49:16 -0000 --Apple-Mail=_0126F65D-9A1D-447C-9AEA-1B9BCF169925 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Jo=C3=A3o, I was wondering if this bit of code in icomplete-mode needs to be = changed: (when icomplete-mode (fido-mode -1)... Running (icomplete-mode) explicitly disables fido-mode, whereas running = (fido-mode) makes it appear that icomplete-mode is enabled (sets it to t = and runs its setup, without actually running the function = icomplete-mode). This causes third party packages which wrap icomplete-mode to easily = break fido-mode, like in this issue: = https://github.com/oantolin/icomplete-vertical/pull/13 = icomplete-vertical calls (icomplete-mode), I think expecting it to be = idempotent (not have any effect if icomplete-mode is already enabled), = but in fact, since fido-mode is currently enabled this explicitly = disables it and switches to the base icomplete-mode, as the mode = functions icomplete-mode and fido-mode act like toggles of each other. Should (icomplete-mode t) perhaps do nothing if fido-mode is already = enabled? I=E2=80=99m not sure. Obviously the package can workaround it = (given my patch), but I think it=E2=80=99s unexpected to have to avoid = calling (icomplete-mode) if the icomplete-mode var is already t. What do = you think? Thanks, Andy= --Apple-Mail=_0126F65D-9A1D-447C-9AEA-1B9BCF169925 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Hi = Jo=C3=A3o,

I was = wondering if this bit of code in icomplete-mode needs to be = changed:

  (when icomplete-mode
  =   (fido-mode -1)...

Running (icomplete-mode) explicitly = disables fido-mode, whereas running (fido-mode) makes it appear that = icomplete-mode is enabled (sets it to t and runs its setup, without = actually running the function icomplete-mode).

This causes third party packages which = wrap icomplete-mode to easily break fido-mode, like in this issue: https://github.com/oantolin/icomplete-vertical/pull/13

icomplete-vertical = calls (icomplete-mode), I think expecting it to be idempotent (not have = any effect if icomplete-mode is already enabled), but in fact, since = fido-mode is currently enabled this explicitly disables it and switches = to the base icomplete-mode, as the mode functions icomplete-mode and = fido-mode act like toggles of each other.

Should (icomplete-mode t) perhaps do nothing if fido-mode is already enabled? I=E2=80=99m = not sure. Obviously the package can workaround it (given my patch), but = I think it=E2=80=99s unexpected to have to avoid calling = (icomplete-mode) if the icomplete-mode var is already t. What do you = think?

Thanks,

Andy
= --Apple-Mail=_0126F65D-9A1D-447C-9AEA-1B9BCF169925-- From MAILER-DAEMON Thu Jun 04 14:20:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jguTI-0005iu-2g for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 14:20:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jguT6-0005gl-Q6 for emacs-devel@gnu.org; Thu, 04 Jun 2020 14:20:02 -0400 Received: from aibo.runbox.com ([91.220.196.211]:48786) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jguT3-0005Sk-0q for emacs-devel@gnu.org; Thu, 04 Jun 2020 14:19:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=c6zGEt7BXtVQhwHghCLiuCk9fgGsDUJGyLM2RcBeqCU=; b=nNqbi+iVGGxoV+hHdY7+4bDwZY LNdwAjLpxjgUY1maxIRu36DN7wfRkVKAPjon7IebGORP7p74oH+zQPPlPrtSyVg9Fl6nbGwukeBJc ENKO9ypPkiDVBtJSrIzBoTxTM5iTl/HPg9/fwN5lCPWiALV6iPJS7r2G8/SouyrOLaBMnu+uwf2hq cVo1exT9/7e7hoc7HKvQ23LiNS0+jRa0CzWeU8vbQHAobO5HJizY8ZRYPdXF+0j3cFlSU6PPKikIy PqTfB1/lmLBktNtTb+Uxq/9z8bUKePmoTPTS3MsGds5mdP/xVbthwclnKsW2E/JeC9aEL1snNETUG CkC/M5ZQ==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jguSt-0002cA-0V; Thu, 04 Jun 2020 20:19:43 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jguSj-0007ZE-7b; Thu, 04 Jun 2020 20:19:33 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Dmitry Gutov Cc: "Basil L. Contovounesios" , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87lfl42xul.fsf@tcd.ie> <87mu5kz2tp.fsf@tcd.ie> <87lfl4x8p0.fsf@simenheg@gmail.com> <8485f0b4-7650-7e27-11ca-6e37c47fefc6@yandex.ru> Date: Thu, 04 Jun 2020 20:19:32 +0200 In-Reply-To: <8485f0b4-7650-7e27-11ca-6e37c47fefc6@yandex.ru> (Dmitry Gutov's message of "Wed, 3 Jun 2020 23:11:18 +0300") Message-ID: <87wo4md77v.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 14:19:48 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 18:20:03 -0000 Dmitry Gutov writes: > On 03.06.2020 22:15, Simen Heggest=C3=B8yl wrote: >> I think compatibility with read-multiple-choice outweighs those >> downsides. Then if read-multiple-choice is extended to support both one >> day, project-switch-commands can grow with it (after we've changed >> project-switch-project to use read-multiple-choice). > > Makes sense. Do you want to push that change, or should I? I did now, hope it looks okay. -- Simen From MAILER-DAEMON Thu Jun 04 14:34:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgugv-0000mJ-1i for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 14:34:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38454) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgugr-0000gE-Gf for emacs-devel@gnu.org; Thu, 04 Jun 2020 14:34:10 -0400 Received: from aibo.runbox.com ([91.220.196.211]:49704) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgugp-0008Th-1s for emacs-devel@gnu.org; Thu, 04 Jun 2020 14:34:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From; bh=MCUUhAXB3QMhRh0vaoiALTjuXg1hXgD0W2cpw62IFS0=; b=cOZXDesnQoLWMXgmCg9oKdimYW 0krdWgJR890t04t/DG3FMrhhjrnnWzkhztEEsR19lZ1xqPCiy0hDTzkdHLzCxP0bS36TMRKf8HEIm Gqyq160UQyhPEvvql/B/LoQ+GLsGAdoI8oFUfMdykgFi8jC8xBnypPt8MFbADOF67FO9bruD4kEYH ggJaVlcw+mDxG+4vpBRRQmHwZ1MNi+pIYPRYyo+dr3siaSSghAf8BH/qwIPhf0xVAFNdaoqtNb4sU Q/+wJmvgxiN2U4fIYtoUNpAPoOTomDdRYc4iwDybVYJUI7vfAvuLVZ/7qOWOeStvhIVv77AFvAfZ+ HI9TR9vQ==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jgugj-0003u5-TN; Thu, 04 Jun 2020 20:34:02 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jgugh-0001Ip-6d; Thu, 04 Jun 2020 20:33:59 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Dmitry Gutov Cc: Juri Linkov , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <87a71l2wjf.fsf@simenheg@gmail.com> <87pnafye1n.fsf@mail.linkov.net> <2e54d4da-54ab-50dc-09df-580572d2b5f0@yandex.ru> Date: Thu, 04 Jun 2020 20:33:58 +0200 In-Reply-To: <2e54d4da-54ab-50dc-09df-580572d2b5f0@yandex.ru> (Dmitry Gutov's message of "Thu, 4 Jun 2020 02:17:28 +0300") Message-ID: <87pnaed6jt.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 14:19:48 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 18:34:11 -0000 Dmitry Gutov writes: > On 04.06.2020 01:34, Juri Linkov wrote: > >> While using this new feature, I discovered that switching projects >> by directory is not quite handy, directory strings are too long >> and begin with the same prefix. > > Interesting. It's not really the case here, but I imagine how it is > possible to be true for many people. Same. I'm using Ivy for completion though, maybe that plays a role. >> I think there is a need for an additional command to switch projects by name. >> A clear advantage of Lisp data is that in this case project names >> could be saved in the same file ~/.emacs.d/projects, e.g.: >> (("/project/path/" >> (name . "Project name")) >> or after implementing the proposal from bug#41572 to use >> .dir-locals.el, >> then maybe to save the project name in .dir-locals.el like >> ((nil . ((project-name . "Project name") > > That's an option, but I wonder if we could do without it: > >> A separate question is how to assign a name to a project. > > One way to avoid that, is to generate project names on the fly, in a > uniquify fashion. If base directory names are unique, use those. > Otherwise, prepend their parent names, and so on. > > And we won't need a separate command. Generating the names on the fly in a uniquify fashion sounds like good idea to me (in the beginning this feature feature actually did just that, but I later changed it to what we have now for simplicity). > The exact strategy could be a user option, though. Yep. I imagine different ways the name could be derived from the path automatically (also supporting name = path like we have now), and maybe even an option to let users specify the name manually whenever a new project is encountered. Juri Linkov writes: >> Maybe it should be renamed from "project-list" to simply "projects" too >> while we're at it, to match similar files, like "places", "bookmarks", >> and so on? > > Indeed, "projects" is much better. "project-list" looks like that ugly > directory name "\Program Files" that caused much trouble to people on > MS-Windows whereas it should have been named just "\Programs". Done. -- Simen From MAILER-DAEMON Thu Jun 04 15:46:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgvov-00069E-Vh for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 15:46:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgvor-00068x-WD for emacs-devel@gnu.org; Thu, 04 Jun 2020 15:46:30 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:42480) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgvop-0006Y1-CN for emacs-devel@gnu.org; Thu, 04 Jun 2020 15:46:29 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A57B916007A; Thu, 4 Jun 2020 12:46:25 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id SgLAL4TnXMrs; Thu, 4 Jun 2020 12:46:24 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 6FA1C1600D1; Thu, 4 Jun 2020 12:46:24 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id ld_wL73YdLys; Thu, 4 Jun 2020 12:46:24 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 2E5AE16007A; Thu, 4 Jun 2020 12:46:24 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: "Basil L. Contovounesios" , Pip Cet Cc: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: Date: Thu, 4 Jun 2020 12:46:23 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87lfl3f5mj.fsf@tcd.ie> Content-Type: multipart/mixed; boundary="------------71DBCD029D7691A50418B6FD" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 15:46:25 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 19:46:31 -0000 This is a multi-part message in MIME format. --------------71DBCD029D7691A50418B6FD Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 6/4/20 4:11 AM, Basil L. Contovounesios wrote: > How would make-text-button detect whether its first argument is mutable= ? It could try to mutate the string, and catch the error that is thrown whe= n it's not mutable. No such error is thrown now and Emacs can crash or worse - b= ut I plan to arrange for one to be thrown. > Would it not suffice to clarify in its documentation that it modifies > its argument, in the same way that we warn about passing immutable list= s > to nconc? We could do that, yes. Some code passes string literals to make-text-butt= on, though, and we'd need to change it. The first example I found was ibuf-ex= t.el's ibuffer-old-saved-filters-warning, which calls (make-text-button "here" .= ..). Such code is already "broken" in some sense, so we'll need to fix it anyw= ay somehow. On 6/4/20 12:26 AM, Pip Cet wrote: > I'm not sure the copy-sequence-unless-mutable semantics really > make sense, though, as that might make bugs such as this one even harde= r > to find. True. > I think we should add a new function with clean semantics, and throw an > error in the old function if the string isn't "mutable", whatever that > means in this context. Throwing an error matches Basil's suggestion. What sort of clean semantic= s did you have in mind? > (I guess I can't modify the string contents or > add text properties, but can I modify existing properties? What about > cons cells deep within the properties? If they're recursively immutable= , > what about markers and other objects that change state behind your > back?) The test I was thinking of is pretty simple: you can't modify the string = object itself, but you can modify the objects it points at. We could come up wit= h fancier tests later involving immutable property lists, but one thing at = a time and maybe this one thing is good enough (at least it should avoid the und= efined behavior). > I'm still surprised my patch fixed the problem here (for some buttons, > at least, for others there are a few more places that do the same > thing...) but not for Jo=C3=A3o. There are several instances of the same problem in SLY. I found the ones = in the attached patch, and I expect there are others. So perhaps Jo=C3=A3o was r= unning into one of the other problems. --------------71DBCD029D7691A50418B6FD Content-Type: text/x-patch; charset=UTF-8; name="sly.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="sly.diff" diff --git a/contrib/sly-mrepl.el b/contrib/sly-mrepl.el index f569bc48..265d752b 100644 --- a/contrib/sly-mrepl.el +++ b/contrib/sly-mrepl.el @@ -539,8 +539,7 @@ BEFORE and AFTER as in `sly-mrepl--save-and-copy-for-repl'" 'part-args (list (cadr result) idx) 'part-label (format "REPL Result") 'sly-mrepl--result result - 'sly-button-search-id (sly-button-next-search-id)) - (car result)) + 'sly-button-search-id (sly-button-next-search-id))) (defun sly-mrepl--insert-results (results) (let* ((comint-preoutput-filter-functions nil)) diff --git a/contrib/sly-stickers.el b/contrib/sly-stickers.el index bd4bda06..7fcb4cc5 100644 --- a/contrib/sly-stickers.el +++ b/contrib/sly-stickers.el @@ -353,8 +353,7 @@ render the underlying text unreadable." :type 'sly-stickers--recording-part 'part-args (list sticker-id recording vindex) 'part-label "Recorded value" - props) - label) + props)) (cl-defun sly-stickers--describe-recording-values (recording &key (indent 0) diff --git a/contrib/sly-trace-dialog.el b/contrib/sly-trace-dialog.el index 44759e01..ec36a895 100644 --- a/contrib/sly-trace-dialog.el +++ b/contrib/sly-trace-dialog.el @@ -363,8 +363,7 @@ inspecting details of traced functions. Invoke this dialog with C-c T." 'part-label (format "%s %s" (capitalize (substring (symbol-name type) 1)) - part-id)) - part-text) + part-id))) (define-button-type 'sly-trace-dialog-spec :supertype 'sly-part 'action 'sly-button-show-source @@ -401,8 +400,7 @@ inspecting details of traced functions. Invoke this dialog with C-c T." 'part-args (list id (cdr (sly-trace-dialog--trace-spec trace))) 'part-label (format "Trace entry: %s" id) - props)) - label) + props))) (defun sly-trace-dialog--draw-tree-lines (start offset direction) (save-excursion diff --git a/lib/sly-buttons.el b/lib/sly-buttons.el index 8297ea74..81d63e7c 100644 --- a/lib/sly-buttons.el +++ b/lib/sly-buttons.el @@ -106,8 +106,7 @@ label nil :type 'sly-action 'action action 'mouse-action action - props) - label) + props)) (defface sly-action-face `((t (:inherit warning))) diff --git a/sly.el b/sly.el index 0ff8c0e0..d6ae2e79 100644 --- a/sly.el +++ b/sly.el @@ -3877,8 +3877,7 @@ SEARCH-FN is either the symbol `search-forward' or `search-backward'." (defun sly--compilation-note-group-button (label notes) "Pepare notes as a `sly-compilation-note' button. For insertion in the `compilation-mode' buffer" - (sly--make-text-button label nil :type 'sly-compilation-note-group 'sly-notes-group notes) - label) + (sly--make-text-button label nil :type 'sly-compilation-note-group 'sly-notes-group notes)) ;;;; Basic arglisting @@ -4568,12 +4567,12 @@ TODO" (car designator))) (defun sly-apropos-insert-symbol (designator item bounds package-designator-searched-p) - (let ((label (sly-apropos-designator-string designator))) - (sly--make-text-button label nil + (let ((label + (sly--make-text-button (sly-apropos-designator-string designator) nil 'face 'sly-apropos-symbol 'part-args (list item nil) 'part-label "Symbol" - :type 'sly-apropos-symbol) + :type 'sly-apropos-symbol))) (cl-loop with offset = (if package-designator-searched-p 0 @@ -4728,8 +4727,7 @@ The most important commands: (sly--make-text-button label nil :type 'sly-xref 'part-args (list location) - 'part-label "Location") - label) + 'part-label "Location")) (defun sly-insert-xrefs (xref-alist) "Insert XREF-ALIST in the current-buffer. @@ -5742,8 +5740,7 @@ If MORE is non-nil, more frames are on the Lisp stack." 'part-args (list (car frame) (sly-db--guess-frame-function frame)) 'part-label (format "Frame %d" (car frame)) - props) - label) + props)) (defun sly-db-frame-number-at-point () (let ((button (sly-db-frame-button-near-point))) @@ -5851,8 +5848,7 @@ If MORE is non-nil, more frames are on the Lisp stack." (apply #'sly--make-text-button label nil :type 'sly-db-local-variable 'part-args (list frame-number var-id) - 'part-label (format "Local Variable %d" var-id) props) - label) + 'part-label (format "Local Variable %d" var-id) props)) (defun sly-db-frame-details-region (frame-button) "Get (BEG END) for FRAME-BUTTON's details, or nil if hidden" @@ -6584,8 +6580,7 @@ was called originally." :type 'sly-inspector-part 'part-args (list id) 'part-label "Inspector Object" - props) - label) + props)) (defmacro sly-inspector-fontify (face string) `(sly-add-face ',(intern (format "sly-inspector-%s-face" face)) ,string)) --------------71DBCD029D7691A50418B6FD-- From MAILER-DAEMON Thu Jun 04 16:14:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgwFs-00006x-8h for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 16:14:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgwFr-00006m-JW for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:14:23 -0400 Received: from mail-vk1-xa2a.google.com ([2607:f8b0:4864:20::a2a]:35419) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgwFq-0003EH-OF; Thu, 04 Jun 2020 16:14:23 -0400 Received: by mail-vk1-xa2a.google.com with SMTP id m23so1690054vko.2; Thu, 04 Jun 2020 13:14:20 -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 :cc; bh=WCzmZuBdZV34nlPJ6C/446p6eQWu2eFBcorF0xdZSoA=; b=QxgkgsmRPdkXlTlJME6Zm69I/A362PWMAHoqaEXqq8lwdEYa8Okv6ZKlQF1YHqCXpe lNoIs3vn8MO/fhR+1VTusdzueoSCJ57WUcVEfQmpqbnGdNTsSXct11mgdVMO8jzAPiMv nLcSL6pjRtoqkPX/okqJEacxnE9m4ZegmIwaxb0V9PYfPyn+WLTw4de6u/fzqnIw9Ebp DQxHNAOeBCowp4oTnWqN3JZuJIclmcSgyzvPN/zxFe+UaFIQriL8oteUM1cXcsNoLoyy Sm+N5bTeh9wG/gVblVyQrvUbamvW2EByNAPZeYh+Kpf2QGfZ+I+1DPY6OJwtdqmAUeYk XerQ== 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:cc; bh=WCzmZuBdZV34nlPJ6C/446p6eQWu2eFBcorF0xdZSoA=; b=MqrRWtxCJI6gdqDKD9hZhPNKPEl+H1SVB9a3Ssvhw8mlC1hfrcEbXXPkD4GuPgsPeD 9sLVLOrn+408KRG/mFgwiumOgmNGnD8Ww3n1coNYI01DJ0H4VXPrhK9vrknt8xOiqLpm KUdCsNHhxjfocfrAUEz1zbAt6oa8dMECDQK/1YaFdhKyjitftRpxzWYk+A7BBIo9sOLU ntUZIuadDBaQ6+9lIw/1TI6iqOoCz95/9p3jcss3nXHb6qKdQ/WmdmgBb00vRSJnNYsl 4PWzd8Kd2K0FOudE9iMdBRpzPwFzsCc/5elSxFUlox29Wgc8YTDldkD28IWXyBtBmees 6WoA== X-Gm-Message-State: AOAM530odc7X00ofSaehwpWvo8xsvyGShNWVvaJ6WBIpicwMrqXVxwLW m0pUdgQ2ugawKwrFt9sFGRGOP0+AXKm19JGYz8RYNP/+Wt2BTw== X-Google-Smtp-Source: ABdhPJwxLGIskmM2NhooRr0ub3so8bv/fFQKV2rFT0uhAPC7NMf7oWhSq2ijb/pN30pU2XBISqmGWDyBhIHX9prQDyM= X-Received: by 2002:a1f:430a:: with SMTP id q10mr4712760vka.4.1591301660174; Thu, 04 Jun 2020 13:14:20 -0700 (PDT) MIME-Version: 1.0 References: <871smeoalc.fsf@gnu.org> <87fuatmw71.fsf@gnu.org> <83mu66bm60.fsf@gnu.org> In-Reply-To: From: Mathias Dahl Date: Thu, 4 Jun 2020 22:14:08 +0200 Message-ID: Subject: Re: Abbrev suggestions - feedback appreciated To: Stefan Monnier Cc: Eli Zaretskii , emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="0000000000002f6ef705a747cae6" Received-SPF: pass client-ip=2607:f8b0:4864:20::a2a; envelope-from=mathias.dahl@gmail.com; helo=mail-vk1-xa2a.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 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 20:14:23 -0000 --0000000000002f6ef705a747cae6 Content-Type: text/plain; charset="UTF-8" Since there were no more comments on my previous reply I will pick the option I like best :) The performance is anyway very good regardless which option I take. Now for another matter: documentation. I've been thinking about where to best describe this new feature. It does not need a very length description I think, but we should mention it in the manual. Here is the current "menu" for Abbrevs: * Abbrev Concepts Fundamentals of defined abbrevs. * Defining Abbrevs Defining an abbrev, so it will expand when typed. * Expanding Abbrevs Controlling expansion: prefixes, canceling expansion. * Editing Abbrevs Viewing or editing the entire list of defined abbrevs. * Saving Abbrevs Saving the entire list of abbrevs for another session. * Dynamic Abbrevs Abbreviations for words already in the buffer. * Dabbrev Customization What is a word, for dynamic abbrevs. Case handling. Any thoughts on this? Also, once the documentation is done, what would be the steps, in git, to get this into Emacs? Are we using feature branches? Do people commit to master? Or can I send a patch by e-mail? (less risk of me messing up...) Thanks! --0000000000002f6ef705a747cae6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Since there were no more c= omments on my previous reply I will pick the
option I like best :) The p= erformance is anyway very good regardless
which option I take.

No= w for another matter: documentation. I've been thinking about where to<= br>best describe this new feature. It does not need a very length
descri= ption I think, but we should mention it in the manual. Here is the
curre= nt "menu" for Abbrevs:

* Abbrev Concepts = =C2=A0 =C2=A0 =C2=A0 Fundamentals of defined abbrevs.
* Defining Abbrevs= =C2=A0 =C2=A0 =C2=A0Defining an abbrev, so it will expand when typed.
*= Expanding Abbrevs =C2=A0 =C2=A0 Controlling expansion: prefixes, canceling= expansion.
* Editing Abbrevs =C2=A0 =C2=A0 =C2=A0 Viewing or editing th= e entire list of defined abbrevs.
* Saving Abbrevs =C2=A0 =C2=A0 =C2=A0 = =C2=A0Saving the entire list of abbrevs for another session.
* Dynamic A= bbrevs =C2=A0 =C2=A0 =C2=A0 Abbreviations for words already in the buffer.<= br>* Dabbrev Customization =C2=A0What is a word, for dynamic abbrevs.=C2=A0= Case handling.

Any thoughts on this?

Also, = once the documentation is done, what would be the steps, in git,
to get = this into Emacs? Are we using feature branches? Do people commit
to mast= er? Or can I send a patch by e-mail? (less risk of me messing
up...)
=

Thanks!

--0000000000002f6ef705a747cae6-- From MAILER-DAEMON Thu Jun 04 16:25:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgwQz-0002RE-L9 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 16:25:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49898) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgwQy-0002Nr-5k for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:25:52 -0400 Received: from mail-io1-xd34.google.com ([2607:f8b0:4864:20::d34]:41673) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgwQw-0006Oj-RD for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:25:51 -0400 Received: by mail-io1-xd34.google.com with SMTP id o5so7816084iow.8 for ; Thu, 04 Jun 2020 13:25:50 -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 :cc; bh=iexfHEh1Xv7gKpWcX8JPz4JjpZh47+ma79MYTw1IHIk=; b=j1DfICzjzeK/ZNR+eJuoAeTRO94dKvNV/HJGp1TYEtVqdcgoOVkU43uMQYy3OGcJSA IVhCE4HycPEXEZhsM7mxq67NRovi1rayZADH5PHkhp+emJKJzBZfsmdBkACPjQwA05kG 5tnV7MV4D2IxHoiiNOKJdLb+GyqC63o0+VdkoR+HbC8nVWAszirYjxu1ZKs+awuHXTA+ gFiL0mHwVQvPXAvmTDolU8v/k++4A/QNTgRcOEgjc+XcsH8uqpMmwf3NGm7eND5Yrrn+ Ff17dRR1mpUc/+l3Bns1embt43cZifSSxraMIkLAsLea6bl7FM1KYzzBMBf9JEerVVpA iDbQ== 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:cc; bh=iexfHEh1Xv7gKpWcX8JPz4JjpZh47+ma79MYTw1IHIk=; b=QwiIID4za2o7d4dSd5K/wQ8P5N+pbPuXwZV1bIWNyM5G1+QD9y0tTUj8EpYOpPUap1 z5DK3d9phIJVsqh3kpUOmm4OwlAZaB1TktN0fo7juNyRmquEN/NkFnmnfzMJvBzUdjJg /lCLTGnTlYE73lSYZCDx/OsempCqhnvbkDpIHeKIaJY+PapKWMR2RAUK5s03MMzJEDl/ ypSiiuggVfVfY/0uoVeWzgTs74yQWfUib1GxEQ+YHe53Jf77BynNuoElDYMoQFLbNtzV FPcktP3RNCgggpc4M1Ej3nzwsmqQC92BAVD918DCYU5ZY0Qs2ctaUwm6S7xLcC40L6fN R3wg== X-Gm-Message-State: AOAM532hUf31rr0Eu9i5Ma6+5rN6+2tE5u+n5+xbcCPXdq/QgVJC6dTU Fug4CgjP0TwkG14IlpeE8xtiS1dT906U9tLsoRQ= X-Google-Smtp-Source: ABdhPJwMUrl5W6DGs2ZgkxfRdKcQvXtLvzdyIpNtqao3/mDznFzJ3t888f8Y4l3KjcmEXFGniMpM5Pg/m05oKZ0HWAw= X-Received: by 2002:a02:3406:: with SMTP id x6mr5867010jae.24.1591302349356; Thu, 04 Jun 2020 13:25:49 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Thu, 4 Jun 2020 21:25:23 +0100 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: Paul Eggert Cc: "Basil L. Contovounesios" , Pip Cet , emacs-devel Content-Type: multipart/alternative; boundary="00000000000043831405a747f3b8" Received-SPF: pass client-ip=2607:f8b0:4864:20::d34; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd34.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 20:25:52 -0000 --00000000000043831405a747f3b8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 4, 2020 at 8:46 PM Paul Eggert wrote: > > > > I'm still surprised my patch fixed the problem here (for some buttons, > > at least, for others there are a few more places that do the same > > thing...) but not for Jo=C3=A3o. > > There are several instances of the same problem in SLY. I found the ones > in the > attached patch, and I expect there are others. So perhaps Jo=C3=A3o was r= unning > into > one of the other problems. > Yes, sorry, that was the case. There was more code doing the same pattern. I'm OK with changing to the new pattern, and now that this has come up I do seem to remember being annoyed that I make-text-button didn't return the string it added the properties to. The only problem is that this will break Emacs 24.4 support, unless I do some version-checking thing. Jo=C3=A3o --=20 Jo=C3=A3o T=C3=A1vora --00000000000043831405a747f3b8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Thu, Jun 4, 2020 at 8:46 PM Paul Egger= t <eggert@cs.ucla.edu> wrot= e:


> I'm still surprised my patch fixed the problem here (for some butt= ons,
> at least, for others there are a few more places that do the same
> thing...) but not for Jo=C3=A3o.

There are several instances of the same problem in SLY. I found the ones in= the
attached patch, and I expect there are others. So perhaps Jo=C3=A3o was run= ning into
one of the other problems.

Yes, sorry, = that was the case.=C2=A0 There was more code doing the same pattern.
<= div>
I'm OK with changing to the new pattern, and now tha= t this
has come up I do seem to remember being annoyed that = I=C2=A0
make-text-button didn't return the string it added th= e properties
to.

The only problem i= s that this will break Emacs 24.4 support, unless
I do some = version-checking thing.

Jo=C3=A3o
<= br clear=3D"all">
--
Jo= =C3=A3o T=C3=A1vora
--00000000000043831405a747f3b8-- From MAILER-DAEMON Thu Jun 04 16:29:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgwUu-00014I-Nw for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 16:29:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50302) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgwUt-00011N-AX for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:29:55 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:51988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgwUr-0006wH-Og for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:29:54 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id ADBC81600D4; Thu, 4 Jun 2020 13:29:52 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id FsGd_ENNp9X2; Thu, 4 Jun 2020 13:29:51 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id B859F1600E2; Thu, 4 Jun 2020 13:29:51 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 9uiaavGBtnHy; Thu, 4 Jun 2020 13:29:51 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 8A7F716007A; Thu, 4 Jun 2020 13:29:51 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: "Basil L. Contovounesios" , Pip Cet , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <1ce4b8e1-c452-a11f-1146-dc54342abc9b@cs.ucla.edu> Date: Thu, 4 Jun 2020 13:29:51 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 15:46:25 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 20:29:55 -0000 On 6/4/20 1:25 PM, Jo=C3=A3o T=C3=A1vora wrote: > On Thu, Jun 4, 2020 at 8:46 PM Paul Eggert wrote: > I'm OK with changing to the new pattern, and now that this > has come up I do seem to remember being annoyed that I > make-text-button didn't return the string it added the properties > to. In that case perhaps all that's needed is to document the issue with make-text-button, at least unless someone comes up with a cleaner API. From MAILER-DAEMON Thu Jun 04 16:43:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgwhs-0003Vx-Lx for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 16:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgwhq-0003Tc-7M for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:43:18 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:35424) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgwho-0001ZK-Oc for emacs-devel@gnu.org; Thu, 04 Jun 2020 16:43:17 -0400 Received: by mail-wm1-x32c.google.com with SMTP id q25so7042869wmj.0 for ; Thu, 04 Jun 2020 13:43:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=Dr9pyVpWIz/Jd2ut7s7QHn+LJPfDxMdlERxwbqKyW28=; b=ogNLSdTSHIWp+J8O7LYvchxaA5aHHKWExrXqQdkKLkUnE5KKT3WBPFhPj1TADxQilq BwF8oMmqXeWv1Wekwtz2C3Bmi0JRINkZJIbTkh0BXr4eIEDE5vCmqlFcKDT2Oj8USR97 looDcylec1kk2lCTkJ3eT+UC53gJZFlteanYpr/GKGjp3AC0mxk0rBvciWMH9TIDIdk6 /9X3ni28Qx6xucTnBV6Tnss3+B5oeTeuvDjxLOEUMkfgdMHdF7qc9rZgLiOoWut/Gb/U OUmDjGPANQ9OXsMmZ7bB9X7RmWiGS28tZxMKmdYKjKGqDJPIJwXNRVUOocdpPASvmBYS 2phA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=Dr9pyVpWIz/Jd2ut7s7QHn+LJPfDxMdlERxwbqKyW28=; b=bGNI8ImiNQ2Ch81ZCEd7ztO/2l0H1VxlsGi8UYAUJfhjnNpo5XBiqF6oRkj3ASa11K gmlF48sN128TKipuEVA2xIgIEYyuLhUWHQR7PmSFjNTpb8vY98wW0D6/N35VE7K4AUIF 8vB+QpuArllS7DjKAndFk022vbUcr0XNZ7cuOvDj2LwxWs49PIIiA4wgcezwn5WQ5J4H Uo9ROdb8i9R7FlGNQTgGyI2Zpt1xRgC1y1t4uOM+gJyydN1P4lZe+bhy+0Adb3tYkOYL JWNGjxhwvYFM77firPplBHJ4D5ASR4jImPdvDo3JQiG7qTS1ve2wrzmmnBUJ+1VK0c76 PNUw== X-Gm-Message-State: AOAM531w+XzKBqt1UROvmL7jzgIlrDXdyWjomfpxjQRdahvL4pncF8Wi Z4uFBxTaCYoU64yuwC46FmJYUrMmZNc= X-Google-Smtp-Source: ABdhPJwWY4dsfYn5Y9uM/DDBjgVfvbGRvoJG8eLbbpoK4sO7t61glYPlNOPkGw3M8eQz4+mxYjqkJA== X-Received: by 2002:a1c:4302:: with SMTP id q2mr5655792wma.54.1591303394071; Thu, 04 Jun 2020 13:43:14 -0700 (PDT) Received: from chametz ([185.220.101.33]) by smtp.gmail.com with ESMTPSA id p7sm9048530wro.26.2020.06.04.13.43.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 13:43:13 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: "Basil L. Contovounesios" , =?utf-8?B?Sm/Do28gVMOh?= =?utf-8?B?dm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> Date: Thu, 04 Jun 2020 20:43:08 +0000 In-Reply-To: (Paul Eggert's message of "Thu, 4 Jun 2020 12:46:23 -0700") Message-ID: <87k10m4l5v.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=pipcet@gmail.com; helo=mail-wm1-x32c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 20:43:18 -0000 Paul Eggert writes: > On 6/4/20 4:11 AM, Basil L. Contovounesios wrote: >> How would make-text-button detect whether its first argument is mutable? > > It could try to mutate the string, and catch the error that is thrown > when it's > not mutable. To be honest, I'd prefer a mutablep predicate, with a strong warning not to use it in the way that was suggested: (if (mutablep object) (do-something object) (do-something (copy object))) > No such error is thrown now and Emacs can crash or worse - but I > plan to arrange for one to be thrown. Have those plans been discussed anywhere? I get the impression it would help me to understand what you're planning to do. >> Would it not suffice to clarify in its documentation that it modifies >> its argument, in the same way that we warn about passing immutable lists >> to nconc? > > We could do that, yes. Some code passes string literals to make-text-butt= on, > though, and we'd need to change it. The first example I found was > ibuf-ext.el's > ibuffer-old-saved-filters-warning, which calls (make-text-button "here" .= ..). > Such code is already "broken" in some sense, so we'll need to fix it > anyway somehow. I fail to see how that code is broken: it uses an ephemeral string literal, just once, and gives it text properties. I don't think this is the best way of doing things, but it's a far cry from "Emacs can crash or worse". Am I missing something? > > On 6/4/20 12:26 AM, Pip Cet wrote: > >> I'm not sure the copy-sequence-unless-mutable semantics really >> make sense, though, as that might make bugs such as this one even harder >> to find. > > True. > >> I think we should add a new function with clean semantics, and throw an >> error in the old function if the string isn't "mutable", whatever that >> means in this context. > > Throwing an error matches Basil's suggestion. What sort of clean semantic= s did > you have in mind? Well, a documented return value would be a good start. The "BEG can be a string, in which case it's really the object, and we'll return it" thing is confusing, I think. I would suggest two functions, one which propertizes a string to be a button when inserted, and returns the propertized string; and one which adds text properties to make a range of an object (string or buffer) into a button, and doesn't return anything useful. >> (I guess I can't modify the string contents or >> add text properties, but can I modify existing properties? What about >> cons cells deep within the properties? If they're recursively immutable, >> what about markers and other objects that change state behind your >> back?) > > The test I was thinking of is pretty simple: you can't modify the > string object > itself, but you can modify the objects it points at. I think I can kind of decrypt that, but I'm not sure: keep in mind that currently, for example, (text-properties-at N STRING) returns the string's actual plist, so you can mutate it, which seems useless and potentially dangerous to me. (Please, let's change that?) Would you consider (text-properties-at N STRING) to be part of the string object itself, or an object it points at? > We could come up with > fancier tests later involving immutable property lists, but one thing > at a time > and maybe this one thing is good enough (at least it should avoid the > undefined > behavior). Which undefined behavior is that, precisely? It seems to me it would be pretty easy to define current behavior, though it wouldn't be very useful. >> I'm still surprised my patch fixed the problem here (for some buttons, >> at least, for others there are a few more places that do the same >> thing...) but not for Jo=C3=A3o. > > There are several instances of the same problem in SLY. I found the > ones in the > attached patch, and I expect there are others. So perhaps Jo=C3=A3o was > running into > one of the other problems. I think that was what was happening, yes. From MAILER-DAEMON Thu Jun 04 17:21:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgxJ0-0000qK-Lj for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 17:21:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxIy-0000nX-Bj for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:21:40 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:45938) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxIx-00014r-5I for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:21:39 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 054LCvag094524; Thu, 4 Jun 2020 21:21:22 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=5/j9507/HsJZ81srBxIvZvUO88mmBkmQTwmv9oFZyPo=; b=CBrv+SQVPcKKjjnJ3szapPJsO+YWUOa5tDIbP6of84iaS5rTfs+MyAS3DxQSaFL2g7RS I6nYCpJTUvQsJ0Att7MvOqTtt9Rx7EvX7bdscnIUIP23dkA/+CBFoTrhCT+TnzwN/yoo 0w0u9wAhGoFZsptp/KB+WIa67vM+iUmmdWc4uBZ4Bwq5TKevQ86KGi08fF/7EcNlToPb zn+dEACeCvROfyn9qXBHIG1Zokdv7jY240j8e6jqPlK3QXfRbBRMW0al5jc7MJ4HhLNj gUfdXGDvLND2TydV00TNOX9PGfWMTzE+AIcE6fL+168EbLQJHhO8V9hJFiEhe7VmgzbX ow== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31evap3vv4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 04 Jun 2020 21:21:22 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 054LE5hT113823; Thu, 4 Jun 2020 21:21:22 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3020.oracle.com with ESMTP id 31c25wbh9c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 04 Jun 2020 21:21:22 +0000 Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 054LLEbW007056; Thu, 4 Jun 2020 21:21:14 GMT MIME-Version: 1.0 Message-ID: <220a649e-98c8-4011-9dd9-77abcdc8b3f2@default> Date: Thu, 4 Jun 2020 14:21:02 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Paul Eggert , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: "Basil L. Contovounesios" , Pip Cet , emacs-devel Subject: =?utf-8?B?UkU6IDMxMzk1NTExOiAiRG9u4oCZdCBhdHRlbXB0?= =?utf-8?B?IHRvIG1vZGlmeSBjb25zdGFudCBzdHJpbmdzIg==?= References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <1ce4b8e1-c452-a11f-1146-dc54342abc9b@cs.ucla.edu> In-Reply-To: <1ce4b8e1-c452-a11f-1146-dc54342abc9b@cs.ucla.edu> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9642 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006040151 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9642 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 clxscore=1015 phishscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006040151 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 17:21:35 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 21:21:40 -0000 > In that case perhaps all that's needed is to document the issue with > make-text-button, at least unless someone comes up with a cleaner API. Apologies for not following this thread. I have code that uses `make-text-button'. What is it, exactly that must not be done by a user? ___ 1. In help-fns+.el I pass a string as first arg that results from `copy-sequence' of a key=20 description. 2. In finder+.el I pass a `help-echo' value that's a literal string. 3. In facemenu+.el I pass a `mouse-face' value that's a list with a `:foreground' value that's a literal string. I'm guessing that you're talking only about passing a literal string as the first arg (so only #1 above). Is that right? If so, is my #1 problematic? From MAILER-DAEMON Thu Jun 04 17:27:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgxOs-0003yN-MY for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 17:27:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxOo-0003ug-7q for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:27:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:55977) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxOm-0002St-Kc for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:27:41 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id C37C1100525; Thu, 4 Jun 2020 17:27:38 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 3473C100419; Thu, 4 Jun 2020 17:27:37 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591306057; bh=OG7H3zR1d5XRTtDPLWgl43MQ+Mu7EJvrrD+4KOgrsBk=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=e/TIT49JfOQOiRhOkeJKsPt+1Ino+8Y7aTFfFo2n3b3KlPAhlFIRxYhrWLFbLKG9v +3pWMKkWEn6m/7zR/4tmjcPTtZ4Cb3aXYG+QyArRPP+VywSqP3yVee+6xM4EcUxecK hqqTRE6Xrchxt68qf4XY+mtCy7sw+Dw6KotP03ufqomVmNEkMjlcL7ZhvXp62YtHmX 3iT1yB0ttQMiPVJmmOYtUklkBzpK0dbVpxRDQHumXgPEkyl8lgzH6zOesgpkVLdJis KK9WB7JIWSEu+v7M3NK5IffGLZq09YD1iDF3xP86VmqfPZjbzIblilLeb06E25nlEX MXfaVESBPNyaA== Received: from alfajor (unknown [157.52.19.38]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 80CD3120497; Thu, 4 Jun 2020 17:27:36 -0400 (EDT) From: Stefan Monnier To: Pip Cet Cc: Paul Eggert , "Basil L. Contovounesios" , =?windows-1252?B?Sm/jbyBU4XZvcmE=?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" Message-ID: References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> Date: Thu, 04 Jun 2020 17:27:32 -0400 In-Reply-To: <87k10m4l5v.fsf@gmail.com> (Pip Cet's message of "Thu, 04 Jun 2020 20:43:08 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.008 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 17:27:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 21:27:42 -0000 > To be honest, I'd prefer a mutablep predicate, with a strong warning not > to use it in the way that was suggested: > > (if (mutablep object) > (do-something object) > (do-something (copy object))) Aka (do-something (if (mutablep object) object (copy object))) Stefan From MAILER-DAEMON Thu Jun 04 17:42:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgxdU-0005GN-8b for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 17:42:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxdS-0005Fa-9F for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:42:50 -0400 Received: from mail-ej1-x644.google.com ([2a00:1450:4864:20::644]:43158) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgxdR-0006jZ-FD for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:42:49 -0400 Received: by mail-ej1-x644.google.com with SMTP id l12so3955559ejn.10 for ; Thu, 04 Jun 2020 14:42:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=8r82IICc0YHXc5or+8cnIx/OEYTk6lvmwdNinXF+F/c=; b=G+cPTZm8sjSgCuVNUvf6rXvEv9pFtgzwCx7hswCGb5SltBGJCJMAfRCGDtg0PBO0z8 lVQh3jWYkbYVlDLHphl6hHPliE1Wp9AYJ7v02QqTLjMqiv4hAjVKhFg3bx4f9wz1wdHS rUKOBHbBtGGjqjCI5pDBFueQMKqq+Bq/Zyi2PjDOCo2fowX6Wa+CHjoIk1wHdKQRccJr vh1G9pLCyr+JTAzeWLclzsDL9XLrdCBwxaWMEKipHlkZI4Vq28ByqLl4O+oNwgX2ijKF gJMIekaby6ED2Z7lrt8IADMIGCJ7g6ktvvJtuHWJHWveGHhIrrBE+SuFAC4MIs6iT5jW ZEug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=8r82IICc0YHXc5or+8cnIx/OEYTk6lvmwdNinXF+F/c=; b=AELEgESUbQGodAa+g3JXaZBO4e8Z2rAMSEURfa3laAhj5vRzaVtRS+9fc56cFCCCCu YI8X3rNUcYJUP3t/edwMgZ6zboRWGwdUiBHk/G62UdvmQU9JWPnf0HcdobTl+4EIMkjI 1Qur99ByMjFPrBqDomg/lsGxTP2FVtHoCMH3jW2lkmiYAv2HndwslPMj+gYtUSg/gQMI hcWN+ZETgwNlcf36UOC9alOPjq3PLU+TDsxoKiwzME8XAqGIKvkvFI2n6RWVVuRDk2Tu oJAyEubWIha3LTwZUjhvPFa9ppE+doxBqQN4PNRmkth6S3glcgsWbdc9/ZcbUnBx6SH/ ox+w== X-Gm-Message-State: AOAM532RAym6rkdVxn8FZ1c6OzmpTOGtcuAhLhoNYgoLDCY+hqjyoQFQ JfR6oAV6dB04CvXlOjenUMvEygldDZ4= X-Google-Smtp-Source: ABdhPJzk9xMYXlsuMbymxRBeMeTjYWMBuC9h29c1g0VhDB/qvqLiGkZkThVaQ1q6LjbGwbc1J8vtLQ== X-Received: by 2002:a17:906:e0c:: with SMTP id l12mr5520361eji.435.1591306967791; Thu, 04 Jun 2020 14:42:47 -0700 (PDT) Received: from chametz ([179.43.167.228]) by smtp.gmail.com with ESMTPSA id d6sm3464210edn.75.2020.06.04.14.42.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 14:42:47 -0700 (PDT) From: Pip Cet To: Stefan Monnier Cc: Paul Eggert , "Basil L. Contovounesios" , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> Date: Thu, 04 Jun 2020 21:42:40 +0000 In-Reply-To: (Stefan Monnier's message of "Thu, 04 Jun 2020 17:27:32 -0400") Message-ID: <878sh24ien.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::644; envelope-from=pipcet@gmail.com; helo=mail-ej1-x644.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 21:42:50 -0000 Stefan Monnier writes: >> To be honest, I'd prefer a mutablep predicate, with a strong warning not >> to use it in the way that was suggested: >> >> (if (mutablep object) >> (do-something object) >> (do-something (copy object))) > > Aka (do-something (if (mutablep object) object (copy object))) All the more reason to avoid my bad-example code! From MAILER-DAEMON Thu Jun 04 17:58:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgxs8-0004VK-L2 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 17:58:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxo1-0000g9-Iu for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:53:45 -0400 Received: from mail1.protonmail.ch ([185.70.40.18]:37870) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgxny-0000Kc-4u for emacs-devel@gnu.org; Thu, 04 Jun 2020 17:53:44 -0400 Date: Thu, 04 Jun 2020 21:53:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=protonmail; t=1591307617; bh=UQSrWIb13juTVE4OwA8e6UHc2DgyY+CbwmUAX7Ynupw=; h=Date:To:From:Reply-To:Subject:From; b=aoiDGa/OyIZD/Go8uczA6LA+lwEtzUr7cyXZA0Mmn4u0sbgISefruJHYWZjlq4Q3W jLXWu6P+V/dY4kXuYaECpTAikn06imig5HRnQxo15mMetLkzB5Xd/Q9062pFFLCnjj lfAmdD/DEeCF3j4MtSeqj0itQ+wIQPdpM41494XPmq8XjtO/Ct6FX5FUcPiSQ/USpk gCQrjGSbW2BufFow19AShgnTSji/RpNIhVqpgFhiWGTOzNSL0iXTWqoZQj7vLXNayS MqCKe798UKdx6StjEC6P8hfZguAKBIiDGxkhelHTnN26y2NFYvnkb9b05W4GDfFccC HtYdEUO4cQePQ== To: emacs-devel@gnu.org From: Theodor Thornhill Reply-To: Theodor Thornhill Subject: Project.el - running processes in root Message-ID: <87img65wh2.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.18; envelope-from=theo@thornhill.no; helo=mail1.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 17:53:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Thu, 04 Jun 2020 17:57:59 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 21:53:45 -0000 Hello! What is the best way to run a subprocess in root of a project currently? Right now I've made a small convenience macro for this: (defmacro with-project-root (&rest body) "Dynamically bind default directory to project root." (declare (debug t) (indent 0)) `(let ((default-directory (project-root (project-current)))) ,@body)) Then I can: (defun elm-repl () "Create a new buffer with Elm repl started and switch to it." (interactive) (with-project-root (switch-to-buffer-other-window (make-comint "Elm Repl" "elm" nil "repl")))) This seems like a nice solution, but if there already exists something like this, please tell. Otherwise, would this be something appropriate for project.el to expose? Have a nice day, Theo From MAILER-DAEMON Thu Jun 04 18:07:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgy1c-0008IL-9X for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:07:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37068) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgy1a-0008IA-Nz for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:07:46 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:34847) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgy1Z-0003dp-Bj for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:07:46 -0400 Received: by mail-wm1-x333.google.com with SMTP id q25so7215253wmj.0 for ; Thu, 04 Jun 2020 15:07:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=9Mt3/szHTRNYpZUkpXyr0gA29JhcRxG3Ba7XGC9awWw=; b=Tm8DCksy911ng60dImmqCUHYOS8QHSc1yPiHH17R9OO209mw70XFoHvFl1F2H7YtGv dWmOzcpTCrVUF34V1Qstl/15vcVA/gbhUSnBqZnuDHQY6dV0XjIDQ/0717kZxAD92nAA ZX3xo6zFdCARk0UeXYgZX5WM4gkrVE6LH7WWvxDT4LGCGuO4QZRX+WBxF6yv4YsZ/Xs9 IWGXU8ROClPpAZNvj4Rm/c30eaycJRj3o21TCRar2amEGjBGYqDvtdoUNVr1OgiopFbq Ave28RRBo3VRppvg1Ijj6u3eeJUI3xyWaYt037C5kwI5D80oANdRV0SexFX2kJW+Xqbx KeUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=9Mt3/szHTRNYpZUkpXyr0gA29JhcRxG3Ba7XGC9awWw=; b=pJsT9a0Zg5xMQZc1dWXcJxH/Dw0w59kJocTmjvhw92Mglfd5FkHhjA3DesrUJdL0bW eVx8I5w6gFw5pcdGpMBlfhU0y1G6g8dTaGPON0xPejeBUwyy8lj4DrVjJI5Oy8t6Vbja vZ0atZVCMdiFSO7EvESJpKMvV3M4nMk12eiL8w/vHhEtfwgHkxaZWUFd7nrtSl6pByzJ SGZojtq9OKkF4lurPcTEFQldX52cJt7D8BV09Nd4ea4yoNmdefovvlf4QvsrnSWfToHU p9Mfu4OuXfrGr/+t814bciGmxrpNFZyITDVYAD83BJadMoqkRA7uAj0ZfdIgkwi6swKX exFw== X-Gm-Message-State: AOAM530rmt+h/3znFqnyr4lNqO0dm9AIbIYKOV5sZtscmQJGedHlZJkb YpPJshbU2M9FKto0Eeu9Q3QcOupW X-Google-Smtp-Source: ABdhPJw0KgKOCXbjfW4frqZ2hfbJdX6fruFiYYVX/MIFEG+7l4Ep6zQRA74yy1sa0wV3krwvXhVLbw== X-Received: by 2002:a1c:1983:: with SMTP id 125mr5761139wmz.43.1591308462956; Thu, 04 Jun 2020 15:07:42 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id e10sm9543267wrn.11.2020.06.04.15.07.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jun 2020 15:07:42 -0700 (PDT) Sender: DG Subject: Re: Project.el - running processes in root To: Theodor Thornhill , emacs-devel@gnu.org References: <87img65wh2.fsf@thornhill.no> From: Dmitry Gutov Message-ID: <8c6b3360-f5a4-b10a-55a8-f79d843192da@yandex.ru> Date: Fri, 5 Jun 2020 01:07:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87img65wh2.fsf@thornhill.no> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=raaahh@gmail.com; helo=mail-wm1-x333.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:07:47 -0000 Hello! On 05.06.2020 00:53, Theodor Thornhill wrote: > What is the best way to run a subprocess in root of a project currently? > > Right now I've made a small convenience macro for this: > > (defmacro with-project-root (&rest body) > "Dynamically bind default directory to project root." > (declare (debug t) (indent 0)) > `(let ((default-directory (project-root (project-current)))) > ,@body)) > > > Then I can: > > (defun elm-repl () > "Create a new buffer with Elm repl started and switch to it." > (interactive) > (with-project-root > (switch-to-buffer-other-window > (make-comint "Elm Repl" "elm" nil "repl")))) It's as good a solution as any. > Otherwise, would this be something appropriate for > project.el to expose? I'm not sure... It doesn't even save one line. Just shortens it. From MAILER-DAEMON Thu Jun 04 18:23:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyGy-0002oI-ME for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyGx-0002mj-Jq for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:39 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:47347) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyGw-0005mh-I7; Thu, 04 Jun 2020 18:23:39 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 538A81C0005; Thu, 4 Jun 2020 22:23:32 +0000 (UTC) From: Juri Linkov To: Arthur Miller Cc: Richard Stallman , Steinar Bang , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Organization: LINKOV.NET References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Date: Fri, 05 Jun 2020 00:50:38 +0300 In-Reply-To: (Arthur Miller's message of "Thu, 04 Jun 2020 11:16:23 +0200") Message-ID: <87tuzqmskt.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.197; envelope-from=juri@linkov.net; helo=relay5-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 18:23:35 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:23:39 -0000 > Or couldn't it be possible to define some html+css to model A4 paper > size, for example: > > https://codepen.io/rafaelcastrocouto/pen/LFAes > > and use some of live preview options for html (eww or browseurl or > something else)? Not a wysiwyg directly, but kind-of middle ground? Maybe chromium-browser --print-to-pdf=doc.pdf --headless --disable-gpu --run-all-compositor-stages-before-draw --no-margins doc.html or using its wrapper chromehtml2pdf. From MAILER-DAEMON Thu Jun 04 18:23:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyH0-0002rs-W7 for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38430) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyGz-0002os-Du for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:41 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:37299) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyGy-0005nQ-FP for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:41 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id AB680FF802; Thu, 4 Jun 2020 22:23:36 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> <878sh3ydrl.fsf@mail.linkov.net> <015bbdb0-e9c3-a19e-287c-a26bc305d155@yandex.ru> Date: Fri, 05 Jun 2020 00:55:34 +0300 In-Reply-To: <015bbdb0-e9c3-a19e-287c-a26bc305d155@yandex.ru> (Dmitry Gutov's message of "Thu, 4 Jun 2020 02:13:59 +0300") Message-ID: <87d06ems49.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=217.70.183.199; envelope-from=juri@linkov.net; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 18:23:38 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:23:41 -0000 >>> - Move project-eshell to 'e', project-shell to 'E', project-find-regexp >>> back to 's', >> The problem is that there is no mnemonic connection between >> 'E' and 'project-shell'. 'E' stands for 'Emacs' in 'Emacs-Shell' (eshell). > > They both have 'e' in their names. If we imagine that both 's' and 'h' are > taken (the latter standing for 'help', maybe), then 'e' is kind of > a natural choice. Maybe it's not too bad when read-multiple-choice will underline the letter ‘e’ in ‘shell’ in the prompt with: (read-multiple-choice "Switch project" '((?E "Eshell") (?e "shell") (?h "help"))) so the prompt will be: _E_shell, sh_e_ll, _h_elp > And maybe 'search' is more important than 'shell', as far as the choice for > 's' goes. Is it possible to use key sequences, e.g. ‘s h’ for ‘shell’, ‘s e’ for ‘search’? From MAILER-DAEMON Thu Jun 04 18:23:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyH5-00034J-Sk for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyH3-0002x1-H4 for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:45 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:48871) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyH2-0005nm-ID for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:23:45 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 800DC1BF207; Thu, 4 Jun 2020 22:23:40 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <87a71l2wjf.fsf@simenheg@gmail.com> <87pnafye1n.fsf@mail.linkov.net> <2e54d4da-54ab-50dc-09df-580572d2b5f0@yandex.ru> Date: Fri, 05 Jun 2020 00:58:24 +0300 In-Reply-To: <2e54d4da-54ab-50dc-09df-580572d2b5f0@yandex.ru> (Dmitry Gutov's message of "Thu, 4 Jun 2020 02:17:28 +0300") Message-ID: <87zh9ildf3.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 18:23:42 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:23:45 -0000 > One way to avoid that, is to generate project names on the fly, in > a uniquify fashion. If base directory names are unique, use those. > Otherwise, prepend their parent names, and so on. Maybe like reading filenames in project-find-file that truncates long directory names. Or like uniquify indeed. From MAILER-DAEMON Thu Jun 04 18:33:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyQC-0008L0-HV for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:33:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39606) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyQA-0008Kn-NW for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:33:10 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:42768) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgyQ8-00005T-9j for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:33:10 -0400 Received: by mail-wr1-x429.google.com with SMTP id p5so7757229wrw.9 for ; Thu, 04 Jun 2020 15:33:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=FZrgn+fcMP6vVVVYGu50Ety2uk8qZJbNR3YLBnrp+ok=; b=HWS+0KhJuJEGDduWUOngYrQb1nELpnAvrNG6E5sM/C71D66Ej15KG9OEOqUFXuN/Le CAUnqCwZ9wGdTTm2zplEyVlHMz1QUq7NOCoZvuwpvkHVEJC7MXzrDCXu5+GAfKlIpAdi WWHbrnKPp9Vv6IAcMZmuGCudS3xwSyS0o3CNgwVnHhl/ZAjKZvynJYjyBsLUZcnu3jj5 UO1v590sRWCWEBSyABsRuTAt26fFNtx3/HRxXOoZPtqOFH4k8h7//wgSw8vI22yKOwqj L3HfxdyErua3nyjyuD3LeGvTbsGC/bpzMRM0OREinMCNuocC7Srkf6CZ03Lrclg21E0k 0Xuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=FZrgn+fcMP6vVVVYGu50Ety2uk8qZJbNR3YLBnrp+ok=; b=F7rkRllEU+j2IYJriRQUl1D0pXqLuTEtQBUrXYgCpvy9WaLgXr1lJroi3J2uqivEMF KVUpUd4RLhbuIRkw6/7jbz6nF1RD92XiXkmzBN6ql5nJ1KRF16AkJ5cux4VlG0NWOJ8I GVYF17qYK+DEGLGyYv20qpsxFZ+VpWwDofTKyifsr5h+ZqdugejFSDSKo8uelv6sMVC9 4rOAX7UCAufAqTJgd6UUw+yH9GGSwIWRyINBqPhU5e6ZYl0ty3g/RzI0b0o7tkrH3wTP CDhOYr7QEGEq/V59RHXPmb1JeKtCNNiLTp4iClUWJKrOqkSCnWESxHI713nb6LajAsIP DXBw== X-Gm-Message-State: AOAM531xWrLz0gLg1DBDYHgkQK2cjXBum7Sa9JGHp+1viLkXUBB3TwiZ sBa+W1scCyBs+39sJjmE2G00Uw== X-Google-Smtp-Source: ABdhPJyJFkdng2OzBGmUtLYkugeE4Ae3z59/N4HOQ56ulscdjp2KE6pnaq+mMJcpuF5cnf2n1Sbf+A== X-Received: by 2002:a5d:690b:: with SMTP id t11mr6980772wru.213.1591309985833; Thu, 04 Jun 2020 15:33:05 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id z206sm9214313wmg.30.2020.06.04.15.33.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 15:33:04 -0700 (PDT) From: "Basil L. Contovounesios" To: Paul Eggert Cc: Pip Cet , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> Date: Thu, 04 Jun 2020 23:33:03 +0100 In-Reply-To: (Paul Eggert's message of "Thu, 4 Jun 2020 12:46:23 -0700") Message-ID: <87v9k68ns0.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::429; envelope-from=contovob@tcd.ie; helo=mail-wr1-x429.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:33:10 -0000 Paul Eggert writes: > On 6/4/20 4:11 AM, Basil L. Contovounesios wrote: > >> Would it not suffice to clarify in its documentation that it modifies >> its argument, in the same way that we warn about passing immutable lists >> to nconc? > > We could do that, yes. Some code passes string literals to make-text-button, > though, and we'd need to change it. The first example I found was ibuf-ext.el's > ibuffer-old-saved-filters-warning, which calls (make-text-button "here" ...). > Such code is already "broken" in some sense, so we'll need to fix it anyway somehow. Thanks, that should be fixed now: Fix some side-effecting uses of make-text-button f51f963478 2020-06-04 23:30:34 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=f51f9634788323b3bf2dde59d0d20a8ca8fbfeaf -- Basil From MAILER-DAEMON Thu Jun 04 18:37:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyU1-0001f7-OY for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:37:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40070) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyTz-0001eP-DF for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:37:07 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:55800) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jgyTy-0000fb-6a for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:37:07 -0400 Received: by mail-wm1-x330.google.com with SMTP id c71so6691326wmd.5 for ; Thu, 04 Jun 2020 15:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=D9VSMXO4aq0p/A/ymBzadwHNL/sW2QuAm8FbXh9i5fw=; b=o9Y3slcom/kefTgd4MbG6Qx+l0ITLo1mWbFeFE5BM6AfGLR/PrKN9YjA6CmFaBeM9x XCGqK4xAW67eNLT0NIFElnRU5zNyw7mDRi2nrL8HG11S6u+8LzRRTgTR+qwbfoH+PJEK MrAF1Eiu0TsOxWhZzGlNZp0IW4TgLLQNVNnYuHVHBpV8VdfRZT2r3bL87HftsiGZTOXJ YDSGK5r5UVlQ2B0WCsgj6ov8oAZjt+kfsvFXKZaCEyDOOPgztDVDEpK6//wf2vqm8OW5 M3JjC3G2X7C4r3kBafUmiXCP1BKe7eAwnrJiDnw1IGEh64MJ7JPaJQaG0fGE8c6ls/n+ /1OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=D9VSMXO4aq0p/A/ymBzadwHNL/sW2QuAm8FbXh9i5fw=; b=BrOOyDb6Jg1QcCVVahMB3iIfGW0+NCgnlJZMLRPOqbwSlhpP96LF8Rtim6oB2bvZX1 p3EJHOhlij0QpDVq9ZKwC98L9myJBhmEVc08s+V/wBrdcMap6y+4obq5lo5aodZ8AH62 c7mlxn6W7sIj24X9YUdXbLyj/gHp+c4lqs8iX9FLkkeUM2pAQhJ8JzL2TDSA31LmIzGA Mu5zACwRD8vZasyWj7V6tGSVxGoWC+F/jW2i3rN75kFciT4WnNd5UwxG3wy4y4E093DS jWlWe95foi7JyA+DbQbXOLeDo/V04CYtr+5ynn6UtZ77ZwG+qId+zHdOM6GhS4MgFHb5 Je/g== X-Gm-Message-State: AOAM530297c+Dz2khiFI2KMV0hK/mCzVMG5bbsZ/6TrkK9z6CwL3Xmih IGjaiUy7sQdJJ7dUYhaTbWPG7rXd X-Google-Smtp-Source: ABdhPJyV51NlsMC4dOajFDpIDkAKuq30+w+40rRHe+FZR7bljeSngpMXCHco+ZSdsAC+YtV/4lqn1Q== X-Received: by 2002:a1c:e40a:: with SMTP id b10mr5790654wmh.41.1591310224134; Thu, 04 Jun 2020 15:37:04 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id u9sm5770759wme.16.2020.06.04.15.37.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jun 2020 15:37:03 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: Juri Linkov Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , "Basil L. Contovounesios" , "Philip K." , emacs-devel References: <6f0f6cc9-52f4-8383-9827-ead54e898472@yandex.ru> <87pnan8xuf.fsf@tcd.ie> <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> <87eer3nqnd.fsf@warpmail.net> <871rn2ivne.fsf@simenheg@gmail.com> <87367hozkq.fsf@mail.linkov.net> <1cc7dff3-6e39-2cf4-ec65-379c9f72ac72@yandex.ru> <87d06is84l.fsf@mail.linkov.net> <71832015-6be9-4433-02ba-99b54f63a0ed@yandex.ru> <878sh3ydrl.fsf@mail.linkov.net> <015bbdb0-e9c3-a19e-287c-a26bc305d155@yandex.ru> <87d06ems49.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: Date: Fri, 5 Jun 2020 01:37:01 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87d06ems49.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=raaahh@gmail.com; helo=mail-wm1-x330.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:37:07 -0000 On 05.06.2020 00:55, Juri Linkov wrote: >> They both have 'e' in their names. If we imagine that both 's' and 'h' are >> taken (the latter standing for 'help', maybe), then 'e' is kind of >> a natural choice. > > Maybe it's not too bad when read-multiple-choice will underline > the letter ‘e’ in ‘shell’ in the prompt with: > > (read-multiple-choice "Switch project" > '((?E "Eshell") > (?e "shell") > (?h "help"))) > > so the prompt will be: _E_shell, sh_e_ll, _h_elp Sure. But we not using read-multiple-choice, or at least not yet. >> And maybe 'search' is more important than 'shell', as far as the choice for >> 's' goes. > > Is it possible to use key sequences, e.g. ‘s h’ for ‘shell’, ‘s e’ for ‘search’? Provided someone implements it, sure. But if we'd put two commands on the same letter this way, I'd rather we use two similar ones, again shell and eshell. And keep 'search' separate. I'm pretty sure the latter is going to be used more often, so it deserves a separate letter. From MAILER-DAEMON Thu Jun 04 18:44:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgyaw-0004Ml-MH for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 18:44:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyau-0004KX-J8 for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:44:16 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:14000) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgyat-0001jc-5N for emacs-devel@gnu.org; Thu, 04 Jun 2020 18:44:15 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0F26E44144B; Thu, 4 Jun 2020 18:44:14 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 8A32B441449; Thu, 4 Jun 2020 18:44:12 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591310652; bh=ckpkqIl2GHCVy7cx/ULQCnCJNoDH2s0p+zhKkQZTogA=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=cYlUW06je/e9NUzR4SpaoKSGHU7seBfcC4fePTFfKolLOEw75NPFxsr3GcTNFcZiG gHxNpiQUR6ONQY+5HqxyHJc2CuQQu2q1tfu9nMh3DHULUmMchbzXimBkf7XBex5W0k Qx+V762u2GQU3o2h4PmhEFzbc4DiFkG9JlhyM1/ZtJGUElbeR5NdTnR/avSozmTeAG 6diacKbPqjhOCS+V1EfVm+Gh3kqjolpFtKKZA3rj2qxj22ftN+Un0wcSKSTsnNEoYq UQyasLRN9JwKjXnHNPaENkfvftyxhE7mBHXKY02rm48quc6EL7IVx83YTm9tCYYJq5 VsqarLsjEg5xg== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id C718C1221A8; Thu, 4 Jun 2020 18:44:11 -0400 (EDT) From: Stefan Monnier To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> Date: Thu, 04 Jun 2020 18:44:10 -0400 In-Reply-To: <20200604223058.1850020A26@vcs0.savannah.gnu.org> (Basil L. Contovounesios's message of "Thu, 4 Jun 2020 18:30:57 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.029 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 17:27:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 22:44:16 -0000 > (make-text-button name nil > 'type 'apropos-library > 'face 'apropos-symbol > - 'apropos-symbol name) > - name))) > + 'apropos-symbol name)))) So, IIUC we consider `make-text-button` to be functional rather than side-effecting, right? > @@ -202,7 +202,7 @@ The format has been repaired and the variable modified accordingly. > You can save the current value through the customize system by > either clicking or hitting return " > (make-text-button > - "here" nil > + (copy-sequence "here") nil > 'face '(:weight bold :inherit button) > 'mouse-face '(:weight normal :background "gray50" :inherit button) > 'follow-link t So, here why do we need to `copy-sequence`? Stefan From MAILER-DAEMON Thu Jun 04 19:10:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jgz06-0003Le-MR for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 19:10:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgz04-0003K9-JC for emacs-devel@gnu.org; Thu, 04 Jun 2020 19:10:16 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:52148) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgz02-0007iN-E0 for emacs-devel@gnu.org; Thu, 04 Jun 2020 19:10:15 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id F0C231600C4; Thu, 4 Jun 2020 16:10:11 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id USGKL1xXnknW; Thu, 4 Jun 2020 16:10:11 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 18D4C1600DE; Thu, 4 Jun 2020 16:10:11 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id SMmV5I2hr0q3; Thu, 4 Jun 2020 16:10:10 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id D20191600C4; Thu, 4 Jun 2020 16:10:10 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: Pip Cet Cc: "Basil L. Contovounesios" , =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> Date: Thu, 4 Jun 2020 16:10:10 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87k10m4l5v.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 19:10:12 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 23:10:16 -0000 On 6/4/20 1:43 PM, Pip Cet wrote: > I'd prefer a mutablep predicate, with a strong warning not > to use it I'd rather not not build/support/advertise predicates that shouldn't be used.... >> No such error is thrown now and Emacs can crash or worse - but I >> plan to arrange for one to be thrown. > > Have those plans been discussed anywhere? I get the impression it would > help me to understand what you're planning to do. A few weeks ago, a bit. The idea I have is pretty simple: the Emacs interpreter throws an error if you attempt to modify a string constant. Although the interpreter done this for years, (a) its test for whether a string is a constant has always been spotty and (b) the test has gone downhill recently. > I fail to see how that code is broken: it uses an ephemeral string > literal String literals are not ephemeral; they can be coalesced, or retained, or put into read-only memory. And when Emacs does that your program's behavior becomes squirrelly. > Well, a documented return value would be a good start. The "BEG can be > a string, in which case it's really the object, and we'll return it" > thing is confusing, I think. Yup. > I would suggest two functions, one which propertizes a string to be a > button when inserted, and returns the propertized string; and one which > adds text properties to make a range of an object (string or buffer) > into a button, and doesn't return anything useful. I'm no expert on make-text-button etc. so I'll let the experts comment on that one. > (text-properties-at N STRING) returns the > string's actual plist, so you can mutate it, which seems useless and > potentially dangerous to me. (Please, let's change that?) We could do something along those lines eventually. The immediate problem that I'm looking at is just the string itself. > Would you consider (text-properties-at N STRING) to be part of the > string object itself, or an object it points at? My earlier email was assuming the current implementation, which is the latter. However, I don't think this matters much, since string literals shouldn't have text properties. > Which undefined behavior is that, precisely? I was referring to code that modifies literal strings' contents or properties. We don't really define how that works, and in practice it doesn't work the way people might naively expect since strings might be coalesced and their contents might be in read-only memory. From MAILER-DAEMON Thu Jun 04 20:58:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh0gZ-0003pC-VC for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 20:58:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh0gX-0003nU-ME for emacs-devel@gnu.org; Thu, 04 Jun 2020 20:58:13 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:41808) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh0gW-000364-45 for emacs-devel@gnu.org; Thu, 04 Jun 2020 20:58:13 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 4D3161600D4; Thu, 4 Jun 2020 17:58:08 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Os3Kh5zHNm-r; Thu, 4 Jun 2020 17:58:07 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 321141600B5; Thu, 4 Jun 2020 17:58:07 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id NmXslX4loqmB; Thu, 4 Jun 2020 17:58:07 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id E3D001600DE; Thu, 4 Jun 2020 17:58:06 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Stefan Monnier , "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: Date: Thu, 4 Jun 2020 17:58:01 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------0A283D80046CF0AF35B007EC" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 19:10:12 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 00:58:13 -0000 This is a multi-part message in MIME format. --------------0A283D80046CF0AF35B007EC Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 6/4/20 3:44 PM, Stefan Monnier wrote: > So, IIUC we consider `make-text-button` to be functional rather than > side-effecting, right? It *ought* to be functional but it's currently not, because make-text-button has a side effect on its argument string. How about the attached patch? This would mean SLY would need the patch I sent in earlier[1] since the attached patch is not 100% compatible with existing Emacs; however, it does make make-text-button more functional and that's a good thing. [1] https://lists.gnu.org/r/emacs-devel/2020-06/msg00152.html --------------0A283D80046CF0AF35B007EC Content-Type: text/x-patch; charset=UTF-8; name="make-text-button.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="make-text-button.diff" diff --git a/etc/NEWS b/etc/NEWS index ed4722b27f..5479831448 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -471,6 +471,11 @@ are 'eq'. To compare contents, use 'compare-window-configurations' instead. This change helps fix a bug in 'sxhash-equal', which returned incorrect hashes for window configurations and some other objects. +** When its first argument is a string, 'make-text-button' no longer +modifies the string's text properties; instead, it uses and returns a +copy of the string. This helps avoid trouble when strings are shared +or constants. + --- ** The obsolete function 'thread-alive-p' has been removed. diff --git a/lisp/apropos.el b/lisp/apropos.el index 22866cd2cc..2566d44dfc 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -661,7 +661,7 @@ apropos (defun apropos-library-button (sym) (if (null sym) "" - (let ((name (copy-sequence (symbol-name sym)))) + (let ((name (symbol-name sym))) (make-text-button name nil 'type 'apropos-library 'face 'apropos-symbol diff --git a/lisp/button.el b/lisp/button.el index 3a6a6de774..76b0e9102f 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -341,7 +341,7 @@ make-text-button as the argument for the `action' callback function instead of the default argument, which is the button itself. -BEG can also be a string, in which case it is made into a button. +BEG can also be a string, in which case a copy of it is made into a button. Also see `insert-text-button'." (let ((object nil) @@ -349,7 +349,9 @@ make-text-button (or (plist-member properties 'type) (plist-member properties :type)))) (when (stringp beg) - (setq object beg beg 0 end (length object))) + (setq object (copy-sequence beg)) + (setq beg 0) + (setq end (length object))) ;; Disallow setting the `category' property directly. (when (plist-get properties 'category) (error "Button `category' property may not be set directly")) diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index c39000b488..bfb9787a96 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -202,7 +202,7 @@ ibuffer-old-saved-filters-warning You can save the current value through the customize system by either clicking or hitting return " (make-text-button - (copy-sequence "here") nil + "here" nil 'face '(:weight bold :inherit button) 'mouse-face '(:weight normal :background "gray50" :inherit button) 'follow-link t --------------0A283D80046CF0AF35B007EC-- From MAILER-DAEMON Thu Jun 04 22:09:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh1nT-000838-Im for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 22:09:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh1nS-00082u-0T for emacs-devel@gnu.org; Thu, 04 Jun 2020 22:09:26 -0400 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]:42768) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh1nR-00080E-B4 for emacs-devel@gnu.org; Thu, 04 Jun 2020 22:09:25 -0400 Received: by mail-qt1-x829.google.com with SMTP id q14so7257260qtr.9 for ; Thu, 04 Jun 2020 19:09:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=viNTHaRf+gPIfTDOfmQ4eQfMoz2Qyzl3iV2wvY3ySY0=; b=IfW0o0eaLxmHBYzHORR14+NwMnQfacb2LIV+cKPuVZxm44Bf2OpyleAUwn49nJzACv t3R7KIuIIKeqh4FgemgE2PnSoUmPEYXyfH99G4VhpRW2TbdYEWcjWpaNBPRBPhSXYfTs KkRw0ONDiu7xOBE0/Xfy81NvtSP93PPc8belvmDxxP7HFR4chP86so/t9b4h2FThzM69 DeowwLQdXUd4HU2lb+PZr4dK8jTlBIfFH30awsgvs3rhUYJSnC8UlbL31i4DOXbqVMUF +8JQMtvCO5H7d0WfIpBuM7FsiRAIACPtrTvFpY4eZiMRA1iP6D7jRE5RAzJ20xSjOxSk cutg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=viNTHaRf+gPIfTDOfmQ4eQfMoz2Qyzl3iV2wvY3ySY0=; b=cbz06VQENK0Puw0IdCULNFCd7/4KpJQWJRMtk20bGQAMvKJmJ/oUbhdSmga6lC7QB6 YGGsYRUUbSXQ99kFR0eCTm9RQr6d5CjB723rGKBLFxIyy9lMz6q3Z7D3OiWFCo0peNrQ S0sH0YU+TUEX53nQxDWbJ3QGkgxwib7FiPmnWvpqginox9QC8W3NrgFcVJ1B4PawGVj7 ywuIW6YXirj86tbdsg1987NBCoZc0Rl5/rfz2s4+F22Aiet+rgsCBswnd1BYzm7kaJCB s3RRK8Y4iQ4FE0co0BLftWazAoppcf7J/qznqi6rwsTTVl/jHNJIpt5gMh7zZA30K86l aJlA== X-Gm-Message-State: AOAM532bbtIxA0gynpAx84XoQKC4MxO+ci7IuARzdp3f2vy/FkPv2qGJ G30QHVou7F6k6+AClZt3/XLkWEKk X-Google-Smtp-Source: ABdhPJx2L0h71jUdCGxe2sHGDq3F/QWUKoii/jg0/PXgDR0tjcvozzylwDpoY6UgqrEDHCvFRatxLw== X-Received: by 2002:ac8:2397:: with SMTP id q23mr7494993qtq.44.1591322963588; Thu, 04 Jun 2020 19:09:23 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:bda5:ac5c:1de0:b677? ([2601:184:4180:66e7:bda5:ac5c:1de0:b677]) by smtp.googlemail.com with ESMTPSA id o33sm6589013qtj.44.2020.06.04.19.09.22 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jun 2020 19:09:22 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: emacs-devel@gnu.org References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> Date: Thu, 4 Jun 2020 22:09:21 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::829; envelope-from=cpitclaudel@gmail.com; helo=mail-qt1-x829.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 02:09:26 -0000 On 04/06/2020 19.10, Paul Eggert wrote: > I don't think this matters much, since string literals shouldn't have > text properties. Really? I've used the reader syntax for propertized strings a few times — it's pretty convenient. From MAILER-DAEMON Thu Jun 04 22:40:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh2HF-0005D7-9p for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 22:40:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59992) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh2HD-0005Cu-5M for emacs-devel@gnu.org; Thu, 04 Jun 2020 22:40:11 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:38988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh2HB-0005jA-Cg; Thu, 04 Jun 2020 22:40:10 -0400 Received: by mail-wm1-x32d.google.com with SMTP id k26so7582567wmi.4; Thu, 04 Jun 2020 19:40:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=A9gVjWBYNKpb7a/NKDo0XvJcg/239hL2zrOVwaTzqZc=; b=COqloHZjUDZwhfjNLT+xez7M3nIYR24wDKNp7nyc7XE9UPtHp4u4HSqkCKprhFLQuC Ak5jJidFcRgTdLrT2MEmn8IbtktXAvJmZoE6fYXb68lfuHDzwjxyblxyFU/HVvLoXu74 dlXT0ikM/0dkIIBAUuYQp5c/c8TfwjdMHFFqOxeMdHMTmAT/Y8tY899ygfgnd0xNnx1k HYUmevka3Q7l/WY+bXVI4gRsMqavxpWc+jUfQbJRrwUCgsPVIIlo9YsT4bl4rLbAqZ0V o+PJmyx/N26+O5xAu8QvWEky481JTn6lRI49tt9VvMAZ38Ey/JrzXVxLgYwTNKye4PfE H58Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=A9gVjWBYNKpb7a/NKDo0XvJcg/239hL2zrOVwaTzqZc=; b=skk3nh0ShesgpXZwBA08AWG2ff5BXVStC9gjNdDwR9J1kiYxnJm+MRmHnxFWlskbG7 hkXXYA7mxS6kojnyn6YVk7IvzveU87xBLLg+lJXQJB8OzTnybM0Ws0CVnXxrlUf4sLI9 7t1xMjxOz8terRc4ip/IAhZPbGzlUtFMAFqKaN/vCRygXiySS1SR2AqCHzEy7oyyCBtO pHw9pVERuPvLTKroI76WmcO/O1QdQ3IJb1dnXu8pSKHloEqo4tlj/tp7rrEsGx2DQY3z hD4EfvwpTObTi6LlDnvSV/TDH6+9y4JXgHj1ElptB9PEAWg2bl8b9QSVxrGos7kT9ENl pi7Q== X-Gm-Message-State: AOAM533Epuomvxd2dygvl9txOwqIxihJx7lu9nU3cDXypH190RhByZVJ wKJJwfeWnwQ5SSz+/8hLCpY= X-Google-Smtp-Source: ABdhPJxWb3lRm48vkpH9jtZPCR6uPr9OAo7TeyOx2cIhRf/Ldoze2VlM++V5gDobq+5NRQJNlEmwrw== X-Received: by 2002:a1c:1d16:: with SMTP id d22mr368702wmd.174.1591324806494; Thu, 04 Jun 2020 19:40:06 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id z8sm10054517wru.33.2020.06.04.19.40.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jun 2020 19:40:05 -0700 (PDT) Sender: DG Subject: pop-up-mini-mode, was Re: GNU Emacs raison d'etre To: martin rudalics , Robert Pluim Cc: Jean-Christophe Helary , Richard Stallman , =?UTF-8?Q?Andreas_R=c3=b6hler?= , Emacs developers , Karl Fogel , homeros.misasa@gmail.com, tkk@misasa.okayama-u.ac.jp, Sergey Organov , Stefan Monnier , Arthur Miller , Eli Zaretskii , Drew Adams , Stefan Kangas References: <5230692c-c665-a330-7a12-e59fa25d97dd@gmail.com> <1701f0b1-a481-bb45-08b8-99da4a6139fc@gmx.at> <736c1336-58ea-dd1f-18ba-94f902e37f61@yandex.ru> <980996b3-bdfb-92e9-4b1f-594b8f5b68d0@yandex.ru> <4518e4d3-f33a-256f-bb8e-342050bc59c7@gmx.at> <71896546-9110-3b00-1b12-40bc60c181e3@yandex.ru> <244b139e-cd5a-729c-4979-436571a6b1a2@gmx.at> <3fa75ed3-52c1-be87-5af0-aa8aac4aca10@yandex.ru> <4b652904-9966-f0cd-d6f4-ea625e4fa1b1@gmx.at> From: Dmitry Gutov Message-ID: Date: Fri, 5 Jun 2020 05:40:03 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <4b652904-9966-f0cd-d6f4-ea625e4fa1b1@gmx.at> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32d.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: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 02:40:11 -0000 Hi Martin, Sorry for the late response. A detailed reply below. On 26.05.2020 11:06, martin rudalics wrote: > >> I forgot to ask what "startup" means here.  Invoking 'pop-up-mini-mode' > >> itself or starting a dialogue as with 'ido-mode'? > > > > Neither. Emacs startup, and the blink that comes with re-creating the > frame. I just meant that I was going to talk about this at some later > point, but now I didn't have to. > ... > > > >>  >>  > but didn't know > >>  >>  > what to attribute it to. Would be great to be able to avoid it. > >>  >> > >>  >> Is this a blink that happens also when you do > >>  >> > >>  >> emacs -Q --eval "(setq default-frame-alist '((minibuffer . nil)))" > >>  >> > >>  >> or does it require the presence of a child frame? > >>  > > >>  > I couldn't manage to reproduce the bug there. > > I'm confused.  When you do > > emacs -Q --eval "(setq initial-frame-alist '((minibuffer . nil)))" > > you do not see any "blink".  Right?  When instead you do > > emacs -Q --eval "(setq initial-frame-alist '((minibuffer . child-frame)))" > > do you see the blink?  Finally, when you do > > emacs -Q --load ~/pop-up-mini.el > > you see a blink.  Right? The "blink" is present in all cases. They all delete the original frame to create one without minibuffer, right? > > One difference I noticed is that the child frame created by > > pop-up-mini-mode is constant width, > > I don't understand.  Here it changes its width together with its parent > frame. Okay, it's "constant" width. I don't really change the width of the frame often. It's the with of the frame. > > but the mini-frame created by the > > above recipe updates its width dynamically as well > > Why "as well" if the pop-up-mini-mode child frame is _constant_ width? Updates its width "as well as" its height, sorry, that was probably unclear. Either resize-mini-frames is nil, and neither dimension updates automatically (meaning the height always stays = 1), or both dimensions update automatically, and the width follows the width of the prompt + input, and that... > > . And always feels kinda cramped. > > Which one is cramped?  The normal minibuffer-only frame? ...feels "cramped". Yes, the (minibuffer . nil) case. Setting this variable to 't' also has the effect of the minibuffer frame starting to "drift" across the desktop. It's probable the same issue we've seen with moving frames in GNOME Shell. > > In any case, it really seems like the blink is due to how updating > the size of the popup works: first, the buffer is updated (and redrawn), > then the timer resizes the popup, and the buffer is redrawn again. Not > sure what the better implementation is going to do, though. > > There is one problem you cannot avoid: You have to know the size of the > minibuffer text before resizing its frame and only after that you can > determine its position (within the display or its parent frame). I have run with pop-up-mini-mode for a few days, and not I think I have a different conclusion: there must be at least one other bug in there, and that one could be contributing the most annoying part of the effect: When the aforementioned "blink" happens, it looks like the mode-line itself "blinks" (the one that resides just below the child frame). It's too fast to see for sure, but it seems like it travels up and then back (meaning, the window dimensions change briefly, making the window shorter by the same several lines). Maybe it tries to "give way" to the phantom minibuffer which used to be below it? When it doesn't, the resizing of the child frame happens fairly smoothly. So if the aforementioned effect is fixed, that would be a significant win. > > Well, why else? It's the only real way we have to implement "popup" > windows. Too bad they don't work in the terminal. > > We could do that just as we pop up menus in a terminal. Perhaps Someone (sorry) could start working on that? Then we could finally have a popup library that can be used both in terminal and graphical Emacs. That would be a significant win. I would certainly > But such popup > windows would be modal - you cannot really pop them down to see the text > beneath them. IME child frames are also always used to create modal popups. > > Not sure how it's relevant to the package under discussion. The > minibuffer frame I've tried with that default-frame-alist setup didn't > really provide a good UI, looks or behavior-wise. > > The (minibuffer . nil) one or the (minibuffer . child-frame) one? I meant the first one, but neither really works well as a minibuffer replacement. The latter is also not very usable without the tweaks in popup-up-mini.el. > > Via... a frame parameter? OK, I'm probably not going to be very > helpful here, at this level of discussion detail. If there are specific > hard problems with repro senarios, I could try to take a look later, but > I'm only interested in going in this direction if our goal is to make a > package for a broad audience. > > Currently, every frame must have a corresponding minibuffer window.  If > you have more than one minibuffer window at hand, you have to decide > which one to choose.  For example, with (minibuffer . child-frame) the > situation is clear - the minibuffer window of each frame is that of its > minibuffer child frame. I don't know the low level details, but as long as the child frames themselves don't get focus (hopefully all window managers we want to support have provisions to enable that), switching the focus between frames should be doable. At least in theory. > >> Agreed.  And that's why users have to put the necessary customizations > >> in their init files and not simply call 'pop-up-mini-mode' from a > >> running session.  Although the latter might be a seductive way to test > >> it. > > > > Are you sure this customization couldn't be applied by > pop-up-mini-mode? Alternatively, it could be a setup function. > > In practice 'pop-up-mini-mode' is simply not something that comes up > without customizations in your init file or by calling it from the > command line.  The reason is the one explained before: You cannot > convert a minibuffer-equipped frame into a minibuffer-less frame (or do > the opposite).  The same holds for (minibuffer . child-frame) and > (minibuffer . nil) setups. Even if you can't get all the benefits of pop-up-mini-mode for old frames (ones that were created before it was enabled), it would be better to enable customizations inside the mode. They would apply transparently when the mode is enabled, but otherwise stay out of the user's custom file. Also, I think I suggested the trick of re-creating existing frames with minibuffers disabled (following what Emacs already does when the minibuffer is customized to be in a dedicated frame)? That should work, and even the ensuing "blinking" shouldn't be much of annoyance, given it will happen in response to an explicit user command. > >> inhibits it currently.  The problem perceived here is that one cannot > >> derive the actual coordinates of a frame _before_ that frame was mapped > >> by the WM and mapping always means to make it visible. > > > > What about full transparency, then? > > You mean we should come up with a fully transparent frame first, resize > it and make it opaque then.  I never played around with that but note > that this would require a compositing window manager and not all of them > support transparency of child frames. Something like that. Given that this blinking happens only once per "real" frame, and it's a purely visual annoyance, I think it might be okay even if only a fraction of our users will benefit. I kinda managed to get used to this particular blinking after a few days. > >> OTOH the actual > >> coordinates of the minibuffer-equipped frame are needed to make the > >> minibuffer-only frame appear at the same position and with the > >> requested, properly modified size, taking the user customizations into > >> account. > > > > The minibuffer-only frame which is immediately hidden itself while > pop-up-mini-mode is active? > > The "normal" frame.  Note that you have to delete the old > minibuffer-equipped frame created initially and then replace it with an > "as similar as possible" minibuffer-less frame.  Look at the code of > 'frame-notice-user-settings'. Makes sense, yes. The "full transparency" idea could help, I think. > >>  >> Also > >>  >> note that we have various strategies to assign the minibuffer > window > >>  >> ('set-minibuffer-window', the 'minibuffer' frame parameter) so > all this > >>  >> is more convoluted than it appears at first sight. > >>  > > >>  > These are implementation options, right? Just pick the most > appropriate. > >> > >> These are user options a user can change any time in a running session. > > > > Perhaps we can say that they shouldn't. > > I think they do already. The users that do, will read the fine print in the package's description. The majority doesn't touch these functions (I haven't, in the many years of using Emacs), and if the package is going to work for them out of the box, it's a win. > >> But you don't like such aborts ... > > > > I don't like abort which presume a lot of prior knowledge and/or > manual setup. > > > > "Sorry, pop-up-mini-mode is not supported in a terminal" sounds just > fine to me. There's nothing else to do anyway. > > It means that when you customize the minibuffer behavior in your init > file, you will have to take into account whether you are going to work > on a terminal or a GUI or maybe both. Again, I wish we could do it more automatically. Otherwise the fraction of our users who can benefit from this is going to be severely limited. > > With Lucid, the blink is the same. > > OK.  IIRC you had some old machine somewhere with a non-mutter WM ... Okay, booted it up. The machine has Unity installed, which uses Compiz. And a last year's build of Emacs 27. The "mode-line traveling" blinking is there. Just barely perceptible, because apparently Compiz is faster at rendering (on an older machine) than GNOME Shell released last year. It also happens less frequently there: I only managed to reproduce it like 5 times out of 30 tries (with my init script). And with 'emacs -Q', it's harder to catch, I manage to see this like 3 times out of 20 tries. The scenario, to recap: 1. cd ~/vc/emacs-master (adjust your directory accordingly) 2. M-x ido-mode. 3. C-x C-f e (the minibuffer should grow in size to like 3 lines; if it doesn't, change the size of the window). 4. If you saw the mode-line blink, good, if not, C-g and repeat. And hot on the heels of this scenario, another annoyance: When I do press C-g on step 4, first the child frame resizes to 1 line height, then some text flashes on it (the previous contents of the minibuffer? the current ones?), and only then it finally settles on the empty line with the word "Quit". That happens every time. I wonder if that could be improved, too. > > I have just tried company-posframe, which renders its popup through > the posframe package, and could find such artifacts, even when the popup > overlapped the right scroll bar. > > "could find" or "could not find"? Sorry, could not find. > > The minibuffer child frame from pop-up-mini-mode seemed to show > glitches like that when it was resized, to accommodate multiple lines. > > Glitches with the scroll bar? Yes. They weren't there with posframe. But I just tried to reproduce these scroll bar glitches with with x-gtk-resize-child-frames=resize-mode, and couldn't, in ant of the configurations. And posframe sets up this variable's value, so that's probably it. > >> I'd still like to see a list of what people really would like to see > wrt > >> positioning and resizing the minibuffer window first. > > > > Does the list at the bottom here look useful? > https://github.com/honmaple/emacs-maple-minibuffer/#maple-minibufferpostion-type > > You mean the list of positions?  We can add that to 'pop-up-mini-mode' > if we make sure that the child frame always fits into its parent. > Although we do not care much about the size of the minibuffer window of > a minibuffer-equipped frame when that frame gets very small either. I meant, does that list answer your question? The one about "what people really would like to see wrt positioning and resizing the minibuffer window". > > If we had something like that, as well as automatic resizing of the > minibuffer popup without blinking, that would be great. Especially if > the result worked fine with packages such as icomplete-vertical-mode. > > Since I already don't use icomplete investigating the latter would be > quite demanding for me. What do you use? M-x icomplete-mode is a trivial command, and it should be unobtrusive even if you're used to the default completion. > Does 'icomplete-vertical-mode' have problems > with Emacs' default minibuffer layout? It has problems with every child frame based minibuffer emulation package that I have tried. But no problems with Emacs' default minibuffer. From MAILER-DAEMON Thu Jun 04 23:12:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh2mf-00077J-4g for mharc-emacs-devel@gnu.org; Thu, 04 Jun 2020 23:12:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh2md-000770-Eh for emacs-devel@gnu.org; Thu, 04 Jun 2020 23:12:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45319) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jh2mb-0004pU-1W; Thu, 04 Jun 2020 23:12:37 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jh2mY-0000IW-7O; Thu, 04 Jun 2020 23:12:34 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Arthur Miller Cc: sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Thu, 04 Jun 2020 11:16:23 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Message-Id: Date: Thu, 04 Jun 2020 23:12:34 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 03:12:39 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > When I write a pamphlet using Libre Office, I need to see how it > > will appear on the page. I need to see where line breaks and paragraph > > breaks appear. > > > > I want Emacs to be able to do tect processing that way. > When you say page, you mean a printed page on paper? Of course. A pamphlet is for handing out. > Can't that be helped with some of live preview options for a pdf or ps > or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? It would probably take half a minute each time. I am sure you understand the advantage of WYSIWYG. Especially when the text needs to fit in a limited space. This is not an issue for longer documents, since it doesn't crucially matter where the page breaks are in those. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Fri Jun 05 02:45:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh66G-0007lU-N2 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 02:45:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50422) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh66C-0007lB-Oo for emacs-devel@gnu.org; Fri, 05 Jun 2020 02:45:04 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:50022) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh66B-0002c7-AG for emacs-devel@gnu.org; Fri, 05 Jun 2020 02:45:04 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 99B241600B5; Thu, 4 Jun 2020 23:45:00 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id WTDbPszmTb8z; Thu, 4 Jun 2020 23:44:59 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id D436D1600D1; Thu, 4 Jun 2020 23:44:59 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id bqcWgc9FByjf; Thu, 4 Jun 2020 23:44:59 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id AF8AD1600B5; Thu, 4 Jun 2020 23:44:59 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> Cc: emacs-devel@gnu.org From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <8ad00be2-c789-df59-92f9-35a3448d51fd@cs.ucla.edu> Date: Thu, 4 Jun 2020 23:44:59 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 02:45:00 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 06:45:05 -0000 On 6/4/20 7:09 PM, Cl=C3=A9ment Pit-Claudel wrote: > On 04/06/2020 19.10, Paul Eggert wrote: >> I don't think this matters much, since string literals shouldn't have >> text properties. >=20 > Really? I've used the reader syntax for propertized strings a few times= =E2=80=94 it's pretty convenient. Oh, you're right. That's a special case for the same reason that the read= er syntax for ordinary string literals is a special case; these strings are = constants. In the implementation that I have in mind, reading the syntax for a prope= rtized string gives you a string constant, in that the interpreter signals an er= ror if you try to change the string's characters or its text properties slot - b= ut the implementation does not prevent you from using setcar or setcdr on the te= xt properties list. Perhaps some day later we can add further checking to pr= event that sort of funny business on string constants' properties, but one thin= g at a time. If memory serves, it wasn't that long ago that the Elisp interpreter prev= ented you from doing that sort of funny business on propertized string constant= s (at least when they were in pure space), but we've fallen back a bit on our r= untime checking. From MAILER-DAEMON Fri Jun 05 03:01:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh6Ld-0003Ie-5b for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 03:01:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51554) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh6Lb-0003IH-QQ for emacs-devel@gnu.org; Fri, 05 Jun 2020 03:00:59 -0400 Received: from ciao.gmane.io ([159.69.161.202]:39672) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh6Lb-00065m-94 for emacs-devel@gnu.org; Fri, 05 Jun 2020 03:00:59 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jh6LY-000GZ9-0h for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:00:56 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Helmut Eller Subject: Re: GSoC project - Improving ELisp Traceback and Debugging Information Date: Fri, 05 Jun 2020 09:00:50 +0200 Message-ID: References: <87eeqv6d30.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:h6sQmtkWsmWGe8j5rY4cXgFzmKU= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 02:43:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 3 X-Spam_score: 0.3 X-Spam_bar: / X-Spam_report: (0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, NML_ADSP_CUSTOM_MED=0.9, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 07:01:00 -0000 On Wed, Jun 03 2020, Zach Shaftel wrote: > Hello all, > > This summer I will be working on improving ELisp traceback information > for Google Summer of Code. Sounds very useful. > So far I've modified the byte-code interpreter to simply store the > offset of each funcall in the backtrace specbinding frame, and > modified backtrace.el so the sequence of offsets is printed alongside > each respective call in the backtrace. It's available on the > feature/soc-bytecode-in-traceback-specbinding branch on > Savannah. I don't see this branch on Savannah; there's a feature/soc-bytecode-in-traceback from 2020-04-27, but apparently doesn't contain all this. Anyway, just wanted to say, that it would nice if bytecode to bytecode calls would not leave the exec_byte_code function. Those calls should push the necessary frames and continue the interpreter loop. That way the bytecoe PC doesn't need to be saved redundantly on the C stack and the specbinding stack. > I've been looking at the scratch/accurate-warning-pos branch as well > as prior discussions and am still evaluating different approaches to > solving the task. It might be necessary to modify the way code is > represented during compilation, be it simply with the annotated > symbols as in that branch or with another more generalized form of > object representation. Instead of annotating symbols I would annotate cons cells. The reader could keep a hash table on the side an record the source position of cons cells. Helmut From MAILER-DAEMON Fri Jun 05 03:55:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh7CU-0005Jr-W3 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 03:55:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56600) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh7CU-0005JP-2U for emacs-devel@gnu.org; Fri, 05 Jun 2020 03:55:38 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]:36083) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh7CT-0000IU-3e; Fri, 05 Jun 2020 03:55:37 -0400 Received: by mail-lj1-x234.google.com with SMTP id a25so10581152ljp.3; Fri, 05 Jun 2020 00:55:36 -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=MRfwBk/xn9kYsOOegpcm2+lFkPFAS5v0uhhLFz5DNek=; b=IWih3xBsL9uCr445xoJum/wQNTYvKI/vXTVJ24zPRWK4jA6vX8OqJ2kjaW0SDJRGG+ KmFh58+AA8GPSoHBpSDazK0flRFFq7A+FVgxzWiswCbyuiHRG6BfIIow3maXltkm8lt0 U6PPehuv+XDBe8T4YXq8CdYtDEDxkrxhlS/5Ap71OdkdPC/0NrJQN8mExvlq1txdh/gK k++Lm+N4HTFejYSBWw73yzjzQUXk8xYY/nZWYb28/u2vlr5qWBluQOOtX4d7Ytp6YQ83 mS2xLh0vp3kNCcNz7cWbzSB/XbDHE7wxooYF35hmLjTcKd9oOgj3O+VVwfYGjSNIIHzk p0Yw== 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=MRfwBk/xn9kYsOOegpcm2+lFkPFAS5v0uhhLFz5DNek=; b=Crf8pYOPMnk3EcGY1sIBkSOQY9fweBdfQIRlSIjm1VM3LJKHy6KWNFin0POTA9T3wR sGKZL2n7AA1mFGEQYxB7xK24lsBGtWyPvqhuMa4aY5XPOxS57NR9ho6h2Z/kw5UDOjeB g7iwNPhK9UKaZNi3N7wtEm0JMwaQo7mcsdwgNaYTEd9LbL9Ap4avsBUHBD/qWVo+eMIT rYCbznCE+SSnZBYuLkvTY7U3+7E24y38vBXuukwqdv9tsCPdTG9led1kT7ztMqCTf9AD APOrn94MGiwnm8KccPn5HLTw6B+za4b91demBfo/uFeEv575F6FqgpoAvR+DYG6P71/u Btyw== X-Gm-Message-State: AOAM531RUHj3X/tTUogSdkxsCccbQ659XoPcJVsx0RcpwQqSUg+riW/2 5lLsXCr6SAG5RAYXtrtjy8q9/L73z9tzuAk+NmllFNp4 X-Google-Smtp-Source: ABdhPJw0ZJRMHLNsliXwQjrn8CJBmh4u78V36FrAkOzaF8jvwS9EmWGEfQGMiE8kXsvISor1iMeFv7ofyPy/6p58waA= X-Received: by 2002:a2e:8246:: with SMTP id j6mr3982340ljh.54.1591343734451; Fri, 05 Jun 2020 00:55:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Philippe Vaucher Date: Fri, 5 Jun 2020 09:55:08 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: Richard Stallman , Emacs developers Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::234; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x234.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 07:55:38 -0000 > > Following up on our previous discussions, here is a working > > implementation of the completion mechanism based on the manual: > > Could you tell me in 6 lines what it does? Right sorry, I should have said it anyway. I added the mailing list for others to have my description as well. There are several function, but the one I mainly want to show you guys is `prefixed-manual-describe-function`. It is like `describe-function` (C-h f), but before you get to select a function you have to select a "topic" first. The topics are the clickable links at https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top. Once you select a topic, then you get to select a function but your choices are limited to the functions of said topic. This simulates the experience you get when you have a consistently prefixed api. If you want to get a quick overview, please eval the following code and select "Strings and Characters" for the topic (the example is hardcoded to propose string functions): (let ((topic (completing-read "Topic: " '("Introduction" "Lisp Data Types" "Numbers" "Strings and Characters" "Lists" "Sequences Arrays Vectors" "Records" "Hash Tables" "Symbols" "Evaluation" "Control Structures"))) (function (intern (completing-read "Function: " '("stringp" "string-or-null-p" "char-or-string-p" "make-string" "string" "substring" "substring-no-properties" "concat" "split-string" "store-substring" "clear-string" "char-equal" "string" "string-equal" "string-collate-equalp" "string" "string-lessp" "string-greaterp" "string-collate-lessp" "string-version-lessp" "string-prefix-p" "string-suffix-p" "compare-strings" "assoc-string" "number-to-string" "string-to-number" "char-to-string" "string-to-char" "format" "format-message" "downcase" "upcase" "capitalize" "upcase-initials" "case-table-p" "set-standard-case-table" "standard-case-table" "current-case-table" "set-case-table" "set-case-syntax-pair" "set-case-syntax-delims" "set-case-syntax" "describe-buffer-case-table"))))) (describe-function function)) Kind regards, Philippe From MAILER-DAEMON Fri Jun 05 04:33:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh7nI-0002Ed-O7 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 04:33:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh7nH-0002Cv-7B for emacs-devel@gnu.org; Fri, 05 Jun 2020 04:33:39 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:48441) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh7nG-0000Bm-8O for emacs-devel@gnu.org; Fri, 05 Jun 2020 04:33:38 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id 7FF485C01C2; Fri, 5 Jun 2020 04:33:36 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Fri, 05 Jun 2020 04:33:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=warpmail.net; h= from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-type:content-transfer-encoding; s=fm3; bh=bV3CNRAhfA4vj Q2WLIo2XIt5M6b6U8clRkrMh8A81y8=; b=oXnN4Nivj7cbTR/xGTLDfObRg5jfq bJW+puGlJfU05XFOW6dzgt8Xhvn8egliGGjf6IwKuPYiHQM//Hra3axSXB+v6N5v LCqRq+71CHigjikgqggSiaEIGflE47fJMKq7wO7DKKRa4j8eXkEq0dzYZBKAYjR0 eaOIfhGQpMXpVjEoae28rn4+qfbvvwYNni+HvCqIEsdFRE/DCFO5e++CaDKGmvSi 9lLkQSIxhyj3zm1QvvB74Vo17WZzN/JVFSfHhYVLt/JcAN1DSBeG/XjKMS+fG2EK 9LDc44KCutE5ZbE6i+lIf65EsmT1pvfOl5a2E/azuTx61kx9XiNhgL8dw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=bV3CNRAhfA4vjQ2WLIo2XIt5M6b6U8clRkrMh8A81y8=; b=K11JdfCX Rli4w6rP6sETSRQojWUfHy/7uGZVzX3X1P+h9nLYdiZY6GOo1DJlmZdfmEc4CXRG TgT67e91gPKJ232cZ2/rLYxsWHAe1kBCsbNnTRG13V0z+VMEvbA3eVvfgmODKoZ9 70+lIuyVZ2d70l19cUFJAfAUiVOuhTh6pogJDuYyoZVwMNB7MpiQTo5Nr0VTzW9a HnAgcJShhNpgitgtdAqcFhvhiKBzo5BCbGVYj3bviy4/RbrY4R4+2wc9scvtfCxw D7g/dAPokr7JJwEu+ScCYyI11w1kImc40XC0Tsk3M4oETixwQowRojnTJX3j0hTt 8K/hlRm67WSZ3g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudegfedgtdegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufgjfffkgggtgfesthhqredttddtjeenucfhrhhomhepphhhihhlihhp seifrghrphhmrghilhdrnhgvthculdfrhhhilhhiphcumfdrmdenucggtffrrghtthgvrh hnpeejleefveehgfevueeuhfekgedttdefieehudfgveefffdthffgledvheetleegleen ucfkphepjeelrddvudelrdduleehrddufedtnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepphhhihhlihhpseifrghrphhmrghilhdrnhgvth X-ME-Proxy: Received: from localhost (p4fdbc382.dip0.t-ipconnect.de [79.219.195.130]) by mail.messagingengine.com (Postfix) with ESMTPA id 9372E3280063; Fri, 5 Jun 2020 04:33:35 -0400 (EDT) From: philip@warpmail.net (Philip K.) To: Juri Linkov Cc: dgutov@yandex.ru, simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects In-Reply-To: <87d06ems49.fsf@mail.linkov.net> (message from Juri Linkov on Fri, 05 Jun 2020 00:55:34 +0300) Date: Fri, 05 Jun 2020 10:33:33 +0200 Message-ID: <87eeqtvrmq.fsf@bulbul> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=66.111.4.25; envelope-from=philip@warpmail.net; helo=out1-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 04:33:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 08:33:39 -0000 Juri Linkov writes: > Is it possible to use key sequences, e.g. =E2=80=98s h=E2=80=99 for =E2= =80=98shell=E2=80=99, =E2=80=98s e=E2=80=99 for =E2=80=98search=E2=80=99? Don't most people tend to use either shell, eshell or some other terminal application? If I were to use shell, over eshell, I guess that this would be somewhat annoying, at least by default. I was thinking that a "x" key could be added, which would invoke execute-extended-command, but in the project root. --=20 Philip K. From MAILER-DAEMON Fri Jun 05 04:42:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh7w5-00021P-LB for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 04:42:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh7w4-00021I-5P for emacs-devel@gnu.org; Fri, 05 Jun 2020 04:42:44 -0400 Received: from aibo.runbox.com ([91.220.196.211]:39910) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh7w2-0001o8-6T for emacs-devel@gnu.org; Fri, 05 Jun 2020 04:42:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=L3agdgVpaWNFTEJEGotjaXRFdVVrXTSXHUx+Rz1Z6+Q=; b=UfA2huzM3GsCaz2OWo7RcN6pO+ MbIfWcAWKYJGxwozWHszs3pDXoQVTS8q/P/ue7fdd2lrx+VfDt67WjTGxUdOzdW0oLJ5I0v/PxWCr 5166BdGua2IMw7LPySxdsiwvnccQg3qwUuJvZb09syL9Ag8Pz+9i0r64l4iKpVL6rGZGMNRDzTYDJ FXtX3qPICnypVb0hv2IFMONWdTxrmXVLwjDA0g3aR2nF4IpKhN7+bJeh2mIwpxfP6+Gt4fvkwS01Q fwy45R+Ks9h9iwVaY1VJ+D5MTx2cYPHTm6yGk8PcEvTkA1gNwhllkDRmootzJBaF+UcImAhBL8bsn ECFEWu+Q==; Received: from [10.9.9.203] (helo=mailfront21.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jh7vw-000655-BL; Fri, 05 Jun 2020 10:42:36 +0200 Received: by mailfront21.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jh7vk-0001h4-Ub; Fri, 05 Jun 2020 10:42:24 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: philip@warpmail.net (Philip K.) Cc: Juri Linkov , dgutov@yandex.ru, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects References: <87eeqtvrmq.fsf@bulbul> Date: Fri, 05 Jun 2020 10:42:24 +0200 In-Reply-To: <87eeqtvrmq.fsf@bulbul> (Philip K.'s message of "Fri, 05 Jun 2020 10:33:33 +0200") Message-ID: <87d06dzyxb.fsf@runbox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 04:42:37 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_REPLY=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 08:42:44 -0000 philip@warpmail.net (Philip K.) writes: > Juri Linkov writes: > >> Is it possible to use key sequences, e.g. =E2=80=98s h=E2=80=99 for =E2= =80=98shell=E2=80=99, =E2=80=98s e=E2=80=99 for =E2=80=98search=E2=80=99? > > Don't most people tend to use either shell, eshell or some other > terminal application? If I were to use shell, over eshell, I guess that > this would be somewhat annoying, at least by default. Agreed. -- Simen From MAILER-DAEMON Fri Jun 05 05:27:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh8dI-0003xd-Tk for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 05:27:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38838) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh8dF-0003u2-OY for emacs-devel@gnu.org; Fri, 05 Jun 2020 05:27:22 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:54976) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh8dE-0003Fs-Ob for emacs-devel@gnu.org; Fri, 05 Jun 2020 05:27:21 -0400 Received: by mail-wm1-x336.google.com with SMTP id g10so7773485wmh.4 for ; Fri, 05 Jun 2020 02:27:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=OAi3Liqf6biLEE0fPZjNRGQ39v/1/qL+asYG5mXdTEg=; b=r/q/1b3M2DriE9qGN8/8aBuuC90gGG4w0FGRGw33pcpnE+d8DDPaOrq1B77aIJG6Gt i+S5zCtKxf1lpXWIn21nVuivKFEEGhvgttAN5ZSck2FuvOXiwjnoswZk6hRd5PHPMCwr olqrbDwTeSiuyKjALxn8OAAsJVrXDveQ24r+tNc6He+4zmqZQr1O0B7oWwc86t7AuS6x 8FULY9lT+PYujJD74nu/OKnz4v8ZuH5VpmOiy+FCqKD0TqSqVr+F5C7IHB7RqHhIoZ7C 1ODNJixafA/tfKZStl0NnZ3h4jg8xbJ6Oobdr5ngzhF+0uB90eKFlnotA1cY8leRhTd6 8NuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=OAi3Liqf6biLEE0fPZjNRGQ39v/1/qL+asYG5mXdTEg=; b=jJS2OImEiqaqnyJrHoxV31HmRRlfLCAUlBtfB+W64+/ql0fnTLw9j4Q+YoaUZwff0H jmzghg5pT9DTT9PHxtSIGKEP3EejxZrRlF3kKyPZ29hmm/KK1pJK9OcSeZEHtmFgAmwI wmmM2w4Mq59efqVUgIHultGdIzmAOjW76SED5c2Alle4GAQXIqXoARBKsN6LxJLgRaQz +ONuBddPl2jG/4GLpd0b1JSC+MIEi2EYSrau1dfCgcEHwe5TxuDVYsHSocui10X/uO7r lAckLc9scJBnqlJurnii7WD6lEB3lh9pGszk5aXalOJ7VjUZPaSCfzIdsEg8v5q1OxTy 2fbw== X-Gm-Message-State: AOAM533UoxxSq33xt/SQ2TuenNU9EHq6TwvqTdxtLP5mCWHSEu8WeU5q SDVIF/tnjiH7KEhM3TEUQHAQv9qiEpc= X-Google-Smtp-Source: ABdhPJxYtjSMFfyxmK644Fm14+EPEfdYZzNd95RkF/MiVsZ7/N4D8AIrc5f+HbAd1JZ71mxAq2MN2w== X-Received: by 2002:a1c:2b46:: with SMTP id r67mr1889138wmr.160.1591349239036; Fri, 05 Jun 2020 02:27:19 -0700 (PDT) Received: from chametz ([31.220.2.131]) by smtp.gmail.com with ESMTPSA id n7sm11420100wrx.82.2020.06.05.02.27.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 02:27:18 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: Stefan Monnier , "Basil L. Contovounesios" , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> Date: Fri, 05 Jun 2020 09:27:13 +0000 In-Reply-To: (Paul Eggert's message of "Thu, 4 Jun 2020 17:58:01 -0700") Message-ID: <874krp3lse.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=pipcet@gmail.com; helo=mail-wm1-x336.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 09:27:22 -0000 Paul Eggert writes: > diff --git a/lisp/button.el b/lisp/button.el > index 3a6a6de774..76b0e9102f 100644 > --- a/lisp/button.el > +++ b/lisp/button.el > @@ -341,7 +341,7 @@ make-text-button > as the argument for the `action' callback function instead of the > default argument, which is the button itself. > > -BEG can also be a string, in which case it is made into a button. > +BEG can also be a string, in which case a copy of it is made into a button. "and returned", I think. People will need to use the return value now. From MAILER-DAEMON Fri Jun 05 05:49:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh8yF-0003DG-RI for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 05:49:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh8yE-00039v-Hm for emacs-devel@gnu.org; Fri, 05 Jun 2020 05:49:02 -0400 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]:40323) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh8yD-0006nL-F8 for emacs-devel@gnu.org; Fri, 05 Jun 2020 05:49:02 -0400 Received: by mail-ej1-x636.google.com with SMTP id q19so9395801eja.7 for ; Fri, 05 Jun 2020 02:49:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=O/lrLvVeBEbcRUQPPb+gcMchjzGFFRGCeLlDEf65/d8=; b=LqLyo/V6ROY7PTl/JqFrovkKUeQWSaBO7ubsE+1U2Fj42cIEo3zF8M8RsejAo/28Y+ NRHoVGnJYTTRksb8BUzfE2u7mnHrBjSZ7O4FIsA15XtT6WkokhFogo3MEPoHjX4OaL1H 8u/YvVfYsNBCebnZi6zw2NLkJ5if/V0bMQebtv5GJ9+tU8zc3WPirOLdBeMGQIituzbP 5HPRZIbNIpUt+YOyfuGUxQ+Xz+S9TpnnLJAwTVb4s7bFJ6tzd/DBiSdFsWg0zQDGW+hr o39ZFc4Tffh8EKRdkI6gBiT/76jhlSs59HCMXrN5FZZ3OtrzvLNAaNlzji+XG41lY4xi o0PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=O/lrLvVeBEbcRUQPPb+gcMchjzGFFRGCeLlDEf65/d8=; b=q5/OPEoYdd8N0k1uYUGAm144eshmelsweVjuyNBOn9lIs/DvSOK6ejB/zNBoPxKwNU hSThAAVj9xnFDrUGY4dLpOOApW7nbUbtF7U+P7uJpBYWx0KU/d7U7OisnHBJyy/Rrh/m VpU9F0xUgrZTVaMDb/O9fpHvaZpNT6XM7og2SRihQfpRbNd8pvoQMITXG0P6O/BRrVTw utAFhQteYM6QLxlWgyuGkdNgD5SRMGVUZPiu7rcgVDxnvVpBHwcyfi6IHq6+xs7i6SzU yEwXvXCyKVvkxqsAkCxJjz6Y3jYcKHo9hVF81y7fYj7kbhM3xm5QSbCParwp997VuNrq vQ5g== X-Gm-Message-State: AOAM531v/OK9L8bJE4UkhHvzvNdU1bIWzy22fYAxjGi3aii4qQH/HcHA a+aPEN9NW7pAhnjWIylME/ooF6mOdoU= X-Google-Smtp-Source: ABdhPJyShhRJzZIol0VZbi7Zdr3MkLEcJLT7iixWCdCMtQm1+uURdzparIRzKEWO7uB3IKzBQEVL3Q== X-Received: by 2002:a17:906:49da:: with SMTP id w26mr7768767ejv.548.1591350539257; Fri, 05 Jun 2020 02:48:59 -0700 (PDT) Received: from chametz ([31.220.2.134]) by smtp.gmail.com with ESMTPSA id bo26sm4550575edb.67.2020.06.05.02.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 02:48:58 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: "Basil L. Contovounesios" , =?utf-8?B?Sm/Do28gVMOh?= =?utf-8?B?dm9yYQ==?= , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> Date: Fri, 05 Jun 2020 09:48:55 +0000 In-Reply-To: <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> (Paul Eggert's message of "Thu, 4 Jun 2020 16:10:10 -0700") Message-ID: <87wo4l267s.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::636; envelope-from=pipcet@gmail.com; helo=mail-ej1-x636.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: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 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, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 09:49:03 -0000 Paul Eggert writes: > On 6/4/20 1:43 PM, Pip Cet wrote: > >> I'd prefer a mutablep predicate, with a strong warning not >> to use it > > I'd rather not not build/support/advertise predicates that shouldn't > be used.... It's perfectly usable in most situations, it's just that you shouldn't use it to decide whether your function has side effects or not. >>> No such error is thrown now and Emacs can crash or worse - but I >>> plan to arrange for one to be thrown. >> >> Have those plans been discussed anywhere? I get the impression it would >> help me to understand what you're planning to do. > > A few weeks ago, a bit. The idea I have is pretty simple: the Emacs > interpreter > throws an error if you attempt to modify a string constant. Although the > interpreter done this for years, (a) its test for whether a string is > a constant > has always been spotty and (b) the test has gone downhill recently. I think there was only CHECK_IMPURE, which relies on PURE_P, which is effectively a nop in post-dump binaries. (I still think we should remove pure space entirely, but even if we don't we should stop wasting so much binary size on zeroes. But let's wait for Emacs 27 first, as Eli suggested). >> I fail to see how that code is broken: it uses an ephemeral string >> literal > > String literals are not ephemeral; I still believe this one is. It's used in a top-level form in a defvar. > they can be coalesced, or retained, or put into read-only memory. Really? Is there code in Emacs (other than purecopy, which isn't the problem here) that does any of that today? > And when Emacs does that your program's behavior becomes squirrelly. If Emacs were to, a lot of code would break, yes. IMHO, that's a good reason to leave things as they are for now, deal with the pure space issues first, and then decide whether immutable objects are worth it at all... >> (text-properties-at N STRING) returns the >> string's actual plist, so you can mutate it, which seems useless and >> potentially dangerous to me. (Please, let's change that?) > > We could do something along those lines eventually. The immediate problem that > I'm looking at is just the string itself. > >> Would you consider (text-properties-at N STRING) to be part of the >> string object itself, or an object it points at? > > My earlier email was assuming the current implementation, which is the latter. > However, I don't think this matters much, since string literals shouldn't have > text properties. But if text properties aren't part of "the string itself", they can be given text properties. >> Which undefined behavior is that, precisely? > > I was referring to code that modifies literal strings' contents or properties. > We don't really define how that works, and in practice it doesn't work the way > people might naively expect since strings might be coalesced and their > contents > might be in read-only memory. You're saying "in practice ... their contents might be in read-only memory"? How? From MAILER-DAEMON Fri Jun 05 06:48:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh9uF-00085a-Jm for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 06:48:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47638) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh9uE-00084R-Lp for emacs-devel@gnu.org; Fri, 05 Jun 2020 06:48:58 -0400 Received: from mail.mojserwer.eu ([195.110.48.8]:41916) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jh9uD-00037k-Sw; Fri, 05 Jun 2020 06:48:58 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.mojserwer.eu (Postfix) with ESMTP id 6E2CDE6D94; Fri, 5 Jun 2020 12:48:55 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail.mojserwer.eu Received: from mail.mojserwer.eu ([127.0.0.1]) by localhost (mail.mojserwer.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KALeFjajpNNr; Fri, 5 Jun 2020 12:48:48 +0200 (CEST) Received: from localhost (83.8.142.66.ipv4.supernova.orange.pl [83.8.142.66]) by mail.mojserwer.eu (Postfix) with ESMTPSA id 743BBE6CB0; Fri, 5 Jun 2020 12:48:48 +0200 (CEST) References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> User-agent: mu4e 1.1.0; emacs 27.0.50 From: Marcin Borkowski To: rms@gnu.org Cc: Arthur Miller , sb@dod.no, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-reply-to: Date: Fri, 05 Jun 2020 12:48:46 +0200 Message-ID: <87v9k5n5yp.fsf@mbork.pl> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=195.110.48.8; envelope-from=mbork@mbork.pl; helo=mail.mojserwer.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 06:46:45 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 10:48:58 -0000 On 2020-06-05, at 05:12, Richard Stallman wrote: > > Can't that be helped with some of live preview options for a pdf or ps > > or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? > > It would probably take half a minute each time. I am sure you > understand the advantage of WYSIWYG. Especially when the text needs > to fit in a limited space. I think you made a typo here, it should have been "half a second" probably. Best, -- Marcin Borkowski http://mbork.pl From MAILER-DAEMON Fri Jun 05 06:51:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jh9wj-0001Ng-LE for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 06:51:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jh9wi-0001Ls-2o for emacs-devel@gnu.org; Fri, 05 Jun 2020 06:51:32 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:45304) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jh9wg-00046X-U5 for emacs-devel@gnu.org; Fri, 05 Jun 2020 06:51:31 -0400 Received: by mail-wr1-x430.google.com with SMTP id c3so9240308wru.12 for ; Fri, 05 Jun 2020 03:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=JxnEpkeMmr7nGSStfV9Q0fMXdTEU+z3yNgp7Du3DSIY=; b=2F7N0yHBJ8hEcLLFGqOYU8bPwRZajFFbB5RJ/37KQt/821pStembQh1lp17d5kxM99 9Jz51ogY/9jZQ/+7bqClde1HZBG+WkoNSe8J6/7puDyHlM4x7y1C7Uqco9XMvo0PWz3/ p25uf3RZD13bjaLlM+xNfxpoQUoiX8lirY9w8mOc5I1oW7Qgdupf/ns/8Zdk+qSetrUU 4SrqQdmUnRTQNJ8+IB4P29i8lNnZLpRyu1B1nQc/gLGxP6C6r4wmhKW+oz0kMsnDKoei F+JLtKXFDOnviah+a8z/IlHs/lPN/mizCXV8Hhf33Jb2KFU+rffOz9mK+CrJGNy7vJY1 CkUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=JxnEpkeMmr7nGSStfV9Q0fMXdTEU+z3yNgp7Du3DSIY=; b=X77ICQW7SexJn+2h6TPhC6Mx9QXPNfGOc4t/K2/M9/b4IrxOewk2jzM047G6/cjwaH u+VaGL2Z2NrfaelgiiEhWkVaPWOnq92ZkoJdrf5XTBNErz08qmZnKkvKvPVVOqefBN+V VHrtpwsEaPbzY8SDV3FLfOm7sB45wtp6SHQzvupm6oUBZhySo5gBvoGAmZcvyl/Vszn5 Sec9oFDxD0Y0kTRJg+9EQvUu/YqOKc7BRn+ta75Ia4dK5M+r+cTdODoMNbNXQYoAwvop ZXV0u4zeUw8MmWoBANegsnJPKYXaNg4lVROcY+97eLUb1/Gvk+CUbcVUkXmPmCW1XfHO HCLw== X-Gm-Message-State: AOAM533rVpziuKe4WZai6TE42dilCj4CCp6uI8UfTyQY7mzwaLwq3dz1 uCdD438J1qI4VrW61aG0AebUdQ== X-Google-Smtp-Source: ABdhPJy7lljILjn0BZhrI7IsTcfOhSZ2NyxsAuyYP7rLom6jhvIQLHzPoNauFGltl307mnsuuNIdiA== X-Received: by 2002:adf:97cb:: with SMTP id t11mr8934531wrb.314.1591354288557; Fri, 05 Jun 2020 03:51:28 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id w3sm11630908wmg.44.2020.06.05.03.51.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 03:51:27 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> Date: Fri, 05 Jun 2020 11:51:26 +0100 In-Reply-To: (Stefan Monnier's message of "Thu, 04 Jun 2020 18:44:10 -0400") Message-ID: <87eeqtiy4x.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::430; envelope-from=contovob@tcd.ie; helo=mail-wr1-x430.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 10:51:32 -0000 Stefan Monnier writes: >> (make-text-button name nil >> 'type 'apropos-library >> 'face 'apropos-symbol >> - 'apropos-symbol name) >> - name))) >> + 'apropos-symbol name)))) > > So, IIUC we consider `make-text-button` to be functional rather than > side-effecting, right? As Paul said, not quite - it has historically modified its first argument by placing properties on it. If you look at the line preceding this diff hunk you'll see a call to copy-sequence. My reasons for making this particular change are: 0. Since Emacs 24.4, make-text-button has returned its modified first argument, so callers can use the value returned by make-text-button instead of calling it only for its side effects. 1. This has now been reverted again, but for the last month, make-text-button returned a modified _copy_ of its argument, which meant that its side effects could no longer be relied upon. Either way, relying on its return value rather than its side effects seems like the best style to stick with for now. >> @@ -202,7 +202,7 @@ The format has been repaired and the variable modified accordingly. >> You can save the current value through the customize system by >> either clicking or hitting return " >> (make-text-button >> - "here" nil >> + (copy-sequence "here") nil >> 'face '(:weight bold :inherit button) >> 'mouse-face '(:weight normal :background "gray50" :inherit button) >> 'follow-link t > > So, here why do we need to `copy-sequence`? To avoid destructively modifying a string literal by placing properties on it. -- Basil From MAILER-DAEMON Fri Jun 05 07:44:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhAmD-0006OV-Nm for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 07:44:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54340) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhAmC-0006OM-9r for emacs-devel@gnu.org; Fri, 05 Jun 2020 07:44:44 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:35107) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhAmB-00065v-6c for emacs-devel@gnu.org; Fri, 05 Jun 2020 07:44:43 -0400 Received: by mail-wm1-x341.google.com with SMTP id q25so8816695wmj.0 for ; Fri, 05 Jun 2020 04:44:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=sc3DX4VnnuJP/z6bFlsaeQVAyxF+sV6ndiCOpnqFaL8=; b=drvMEhj45MmJ0YhfstadO8LP/REBe6yB2mWUM6/sbL1N9v/EEs7XBpmwtt8zr/Pwkc G0zlGCAqHBowamIwbesx6oAn5GVBh2Lnsfrqi47NLZLw4pZ7v2Jk8Pg3shDb3Ywr5Ji4 H9I7yruPakDE+lSgK/ToSqoERJAm/Q3G59MjVM8ORIVveo2VavH6xEplvPvWMgYhMJHD CUbISxcF+M+MexHQccABr3RADAT7l0Q44gpcMsyM1FowSniGy0ggC5RVKJVVHWmq8xPw /zpgSBAuzzT9TOE9RGO2B6peIORxBfuZFwCs8M9j2ZDYvGNrYsonPxC7izsDwje7dpk8 ru8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=sc3DX4VnnuJP/z6bFlsaeQVAyxF+sV6ndiCOpnqFaL8=; b=dv1ueJLMga0DDr9anAUJIQHBG7vitPePax4cw07HyQc6HPnI3525/VWlA45k9GnFYH Dvj2uhmwSFIj1iGquxFp88y6wrYQr8LW3eVsVd43hzupogGIkYFZcjPvxNhhETmGUo3O YpuLFX8ax5SbmZ34nBkmKgu+lMyVWlAVc+jyAn/xzrnk6I7DAGzEY+Sf6vjRUPHJl0Jf DMXIDMvRYdbe/VreUuTXuOMjkfKFFP27Q6hGqKuJGJNPWCScShuHVNM781Fv0FdCcUiJ AFMSg3cs2SjVPUmgzUXTgK6AmdOuuuD0vUOkaCCtAOnJgp9c46OB1AYCT3d5ACyGd5GA OS8Q== X-Gm-Message-State: AOAM533twvtPy6HbsSgiDJlkHgCw3If6quBCQzD1jTobO1RlnbQ/2UcJ 6GM3Y2fhzgXkksBBfUpZsXSFjOUI X-Google-Smtp-Source: ABdhPJyxBi6UF9TLD3TEVpasWQQKok25yRMCA0PYoLljBIwiNeJQxFfNqZrhJztl/9NvqPIJd+j2RA== X-Received: by 2002:a7b:c852:: with SMTP id c18mr2385152wml.77.1591357481226; Fri, 05 Jun 2020 04:44:41 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id l17sm10451304wmi.3.2020.06.05.04.44.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2020 04:44:40 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: "Philip K." , Juri Linkov Cc: simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org References: <87eeqtvrmq.fsf@bulbul> From: Dmitry Gutov Message-ID: Date: Fri, 5 Jun 2020 14:44:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87eeqtvrmq.fsf@bulbul> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=raaahh@gmail.com; helo=mail-wm1-x341.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: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 11:44:44 -0000 On 05.06.2020 11:33, Philip K. wrote: > Juri Linkov writes: > >> Is it possible to use key sequences, e.g. ‘s h’ for ‘shell’, ‘s e’ for ‘search’? > > Don't most people tend to use either shell, eshell or some other > terminal application? If I were to use shell, over eshell, I guess that > this would be somewhat annoying, at least by default. So what are you saying? Which option would you prefer? Simply by the statement above, I'd probably choose to have only one of the commands in the default set, expecting the user to customize it, if they routinely use the other. And Eshell seems to be a tiny bit more popular (though I could be wrong here). > I was thinking that a "x" key could be added, which would invoke > execute-extended-command, but in the project root. Why not. Would you like to send a patch? From MAILER-DAEMON Fri Jun 05 07:58:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhAzi-00026e-He for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 07:58:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhAzg-00026K-Rq for emacs-devel@gnu.org; Fri, 05 Jun 2020 07:58:40 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33175) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhAzg-00013b-IZ; Fri, 05 Jun 2020 07:58:40 -0400 Received: from [176.228.60.248] (port=3511 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhAzf-0007ub-Ke; Fri, 05 Jun 2020 07:58:40 -0400 Date: Fri, 05 Jun 2020 14:58:30 +0300 Message-Id: <837dwlbu6x.fsf@gnu.org> From: Eli Zaretskii To: numbchild@gmail.com Cc: emacs-devel@gnu.org In-Reply-To: <87v9k6esvy.fsf@gmail.com> (message from stardiviner on Thu, 04 Jun 2020 23:46:09 +0800) Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> <83wo4nas3n.fsf@gnu.org> <87v9k6esvy.fsf@gmail.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 11:58:41 -0000 > From: stardiviner > Cc: numbchild@gmail.com, emacs-devel@gnu.org > Date: Thu, 04 Jun 2020 23:46:09 +0800 > > > Can you describe what are you trying to accomplish, and for what > > purpose? Maybe then we could propose a workaround. > > I try to add overlay which is colorized blocks that have line-height based on > the org-agenda clocked time. > > I hope the overlay can keep line-height even I split window get window width > decreased. I don't think such a feature exist, sorry. maybe someone else can think of a workaround. From MAILER-DAEMON Fri Jun 05 07:59:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhB0h-0002zM-V8 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 07:59:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhB0g-0002z5-55 for emacs-devel@gnu.org; Fri, 05 Jun 2020 07:59:42 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:48005) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhB0e-0001DX-BA for emacs-devel@gnu.org; Fri, 05 Jun 2020 07:59:41 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id BC1065C00CC; Fri, 5 Jun 2020 07:59:39 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 05 Jun 2020 07:59:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=warpmail.net; h= from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-type:content-transfer-encoding; s=fm3; bh=/z4v8DcyEGdGF 6+hbV6RvPsy0mV53wQPdoSMl8v3JE4=; b=oMkps46jLct4TXKhb2LwZbXhY5Co/ lhHx1/p31S+gczQ6f3Ve1enIf+1nSJYAHENtVa/1DNDIL6cH0+kdm98AFUwzfRa3 ZkdhFgm+QxzSdbEQh2kBW744SyhOLSdCi7V6kL+KuqrceGNz553Za9CzwWqzLTup I3uqxK7pY56MKQYGuZJOJXtICnTOs2NanB7hoSBkNxIovoYN8qHds+d19WXfTmqN 3fHc7nm8KJ6gIokCqH21YcedN/npN2wdJN3qmcLmWNOWCmW6WaXjPKDqqXH69ICv DJ3hk47zd9M84+V6UI/TfzkBkWAgRF3Wf1EW5vGj2yJMoQZwb0KDHWK7A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=/z4v8DcyEGdGF6+hbV6RvPsy0mV53wQPdoSMl8v3JE4=; b=V6s96XgK kXhxUDYySEI2QW/rq3hICBYjm9hWmRaeKNYOJH4ZACQBoo9W623gWr+MP2RpW0jt BJKzke9qHIjyz2LVJhA1nbJmow1NyvJgwTLhnyuTaOr7it0IsM0LW1cdxLi36PLL k9gwgG7QMEbKBIep5xeiacFxQz/tDajYTthRNFP4ZU4Ovgp2HVjWQ7vE/2Q6NnwW 76J2JEJneEjP5YuNsm7wr/JODsu5Nxmn9nWfy3yo1c2ZWOzGCF8zcxc94lRhvSd/ 4vU5Is0ZSEvCgVZ7wPXj8dshUbhMBdD2uA/vUPleK+/9h938eTrLpwt18jSM93gg XxcHZf60VmykQA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudegfedggedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufgjfffkgggtgfesthhqredttddtjeenucfhrhhomhepphhhihhlihhp seifrghrphhmrghilhdrnhgvthculdfrhhhilhhiphcumfdrmdenucggtffrrghtthgvrh hnpeejleefveehgfevueeuhfekgedttdefieehudfgveefffdthffgledvheetleegleen ucfkphepjeelrddvudelrdduleehrddufedtnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepphhhihhlihhpseifrghrphhmrghilhdrnhgvth X-ME-Proxy: Received: from localhost (p4fdbc382.dip0.t-ipconnect.de [79.219.195.130]) by mail.messagingengine.com (Postfix) with ESMTPA id AC29C30618B7; Fri, 5 Jun 2020 07:59:38 -0400 (EDT) From: philip@warpmail.net (Philip K.) To: Dmitry Gutov Cc: juri@linkov.net, simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects In-Reply-To: (message from Dmitry Gutov on Fri, 5 Jun 2020 14:44:38 +0300) Date: Fri, 05 Jun 2020 13:59:36 +0200 Message-ID: <87a71hvi3b.fsf@bulbul> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=66.111.4.27; envelope-from=philip@warpmail.net; helo=out3-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 07:59:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 11:59:42 -0000 Dmitry Gutov writes: > On 05.06.2020 11:33, Philip K. wrote: >> Juri Linkov writes: >>=20 >>> Is it possible to use key sequences, e.g. =E2=80=98s h=E2=80=99 for =E2= =80=98shell=E2=80=99, =E2=80=98s e=E2=80=99 for =E2=80=98search=E2=80=99? >>=20 >> Don't most people tend to use either shell, eshell or some other >> terminal application? If I were to use shell, over eshell, I guess that >> this would be somewhat annoying, at least by default. > > So what are you saying? Which option would you prefer? I was questioning how many people switch between eshell and shell, so that both would have to be part of the menu. One way out would be to have a user option for "prefered shell", either in Emacs or as part of project.el. > Simply by the statement above, I'd probably choose to have only one of=20 > the commands in the default set, expecting the user to customize it, if=20 > they routinely use the other. And Eshell seems to be a tiny bit more=20 > popular (though I could be wrong here). > >> I was thinking that a "x" key could be added, which would invoke >> execute-extended-command, but in the project root. > > Why not. Would you like to send a patch? Sure, I'll try it out. --=20 Philip K. From MAILER-DAEMON Fri Jun 05 08:44:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhBhj-0005ce-0H for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 08:44:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhBhh-0005cN-PS for emacs-devel@gnu.org; Fri, 05 Jun 2020 08:44:09 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:28714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhBhg-0002ql-CT for emacs-devel@gnu.org; Fri, 05 Jun 2020 08:44:08 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id BB79B10033A; Fri, 5 Jun 2020 08:44:06 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id AC1D910024D; Fri, 5 Jun 2020 08:44:04 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591361044; bh=ijTkjwdBR9P+v2f5jrjhoq7cB9Ri49BmMWXjz1/ucH8=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Lfg+CB/f7hO4DQRy4ELr8PEELheQF4dbPE8GapSkQw0zXocaRnvg3HGVyIPuOke9S 1JXl5jxyhMwy3hFN3NGIY218P9WQZiYmyeamHcJLVbmLKi3MPY5xDvW/fpB7dkU0JJ OgpCZRisIhVItn+QMy5BKswOPa4YJBFh3G6Tbe+kp74K/G2jlY8Zpv9nhlNY/UnO29 ADq7u6VD4BUfROJuaxOIVJhj8MNJ4tfvuKMcGBNEFw2DVCAR8yCDw7tUHp+TidKgaK Nl05WA0lZgIpcCOxjBzi3034dfgszaYnf32/J5IESAjgdXYMczSwSAbDsKgOgVpFis ptMwjZCgmhhTw== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 77C88120732; Fri, 5 Jun 2020 08:44:04 -0400 (EDT) From: Stefan Monnier To: Paul Eggert Cc: =?windows-1252?Q?Cl=E9ment?= Pit-Claudel , emacs-devel@gnu.org Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" Message-ID: References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> <8ad00be2-c789-df59-92f9-35a3448d51fd@cs.ucla.edu> Date: Fri, 05 Jun 2020 08:44:03 -0400 In-Reply-To: <8ad00be2-c789-df59-92f9-35a3448d51fd@cs.ucla.edu> (Paul Eggert's message of "Thu, 4 Jun 2020 23:44:59 -0700") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.008 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 08:44:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 12:44:10 -0000 > If memory serves, it wasn't that long ago that the Elisp interpreter prevented > you from doing that sort of funny business on propertized string constants (at > least when they were in pure space), AFAIK there aren't any propertized strings in purespace, because `purecopy` doesn't copy the properties: static Lisp_Object purecopy (Lisp_Object obj) { if (FIXNUMP (obj) || (! SYMBOLP (obj) && PURE_P (XPNTR (obj))) || SUBRP (obj)) return obj; /* Already pure. */ if (STRINGP (obj) && XSTRING (obj)->u.s.intervals) message_with_string ("Dropping text-properties while making string `%s' pure", obj, true); -- Stefan From MAILER-DAEMON Fri Jun 05 08:46:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhBjy-0006vG-Cr for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 08:46:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhBjx-0006v6-2e for emacs-devel@gnu.org; Fri, 05 Jun 2020 08:46:29 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:32880) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhBjv-00041i-SU for emacs-devel@gnu.org; Fri, 05 Jun 2020 08:46:28 -0400 Received: by mail-wr1-x434.google.com with SMTP id l11so9651284wru.0 for ; Fri, 05 Jun 2020 05:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=3AkiFDiSWxF7Eaw5trkdR4MPzdtL94IZsNd0iTDpNDc=; b=fMJgJGyDawlNBzxiUSEMtRY0E7JjV1grnx7Ln1HAHFkGVdTB2mOPDnfk7i5MEGqyHU h6LP98KHwBk8NxuAQMfKvwMuoqSgajNfq07VhPXfTabXQRTMQAmUvPwLNGrn/XWhNOs5 1VHAJBv6SH2bBqvHDExDPmUJ/aaLILjWN35MBo4G2JywIVx/QuH+ePL0bs+NZwJJkYE/ zPGxnffUCrd4HRZax9s71Yl36uEQ9AKlJRSrwdp+to9vrXEWaCnlOTjPwRYiP1NIiGkQ Sxb/CvfF4REHKlYK5I+fAteyKhPHcgKAMZyoOcn0RDeKBpkFp5I2R63o1FojwKR8JKuw iTkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=3AkiFDiSWxF7Eaw5trkdR4MPzdtL94IZsNd0iTDpNDc=; b=Y8NC2n4+NLQfOpfo0WHGIjQO+GFMQv2QmhvwWVfh9rriCMPtsQ5TcNGl/pI24o5RtE Pq5bXE4v5OOGWIeQQRS5DpjNez/jmpTXIHSc+vOCjXxYHgohcYb+ZCQFeDlYOoCO4ihS kNZhJLxm9/xtXR6xncysgrIz/372JhZoVMGit149Y3KYksYv0aTlYXQen0LjAQaSLOgu toZmao6PrbRpCKDa8WZt9x/2rXhQY+j//Ek7cSwTi0p9hINoSSEfHakiBK7Syui9HTNE Ns2U/Uh1tzHribYeF03fFEmgm+iY0D/oH4UBsO/N0TvpMT561h16Z03OnVFtB+s6W88E GmUw== X-Gm-Message-State: AOAM531Z9ZIqYTJe8I+fnt9AQp6wg0hNdeW5Jhw77eex6pn/c0s6/oda oIt3mko7W4duuoq5jx7BFVCtgRIDlEs= X-Google-Smtp-Source: ABdhPJxm4Wa2Hyl0utsPVubTc2VNZ+/XhQMliSIOkPU+cYpoJ0mPkpkBeFz/QwGM9YDOubUmbWA3PQ== X-Received: by 2002:a5d:6b83:: with SMTP id n3mr9392904wrx.395.1591361185901; Fri, 05 Jun 2020 05:46:25 -0700 (PDT) Received: from chametz (this-is-a-tor-node---10.artikel5ev.de. [185.170.114.25]) by smtp.gmail.com with ESMTPSA id b8sm11772058wrm.35.2020.06.05.05.46.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 05:46:25 -0700 (PDT) From: Pip Cet To: "Basil L. Contovounesios" Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> Date: Fri, 05 Jun 2020 12:46:19 +0000 In-Reply-To: <87eeqtiy4x.fsf@tcd.ie> (Basil L. Contovounesios's message of "Fri, 05 Jun 2020 11:51:26 +0100") Message-ID: <87img51y04.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=pipcet@gmail.com; helo=mail-wr1-x434.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 12:46:29 -0000 "Basil L. Contovounesios" writes: > Stefan Monnier writes: >>> @@ -202,7 +202,7 @@ The format has been repaired and the variable modified accordingly. >>> You can save the current value through the customize system by >>> either clicking or hitting return " >>> (make-text-button >>> - "here" nil >>> + (copy-sequence "here") nil >>> 'face '(:weight bold :inherit button) >>> 'mouse-face '(:weight normal :background "gray50" :inherit button) >>> 'follow-link t >> >> So, here why do we need to `copy-sequence`? > > To avoid destructively modifying a string literal by placing properties > on it. I think adding a concept of mutability/constness/finality/... could be a great extension of the ELisp language. It would also be a very significant change of that language, perhaps comparable to "true" multi-threading. It would not be a quick bug fix for code that uses (propertize "string" 'a 'b). In particular, I'm not convinced code like that is buggy at all. It's true that it will fail under certain conditions (the string constant is used again in the same function, the function is byte compiled, that sort of thing), and it's true there are better ways of doing that, but is that reason enough to off-handedly ban all such code? I probably don't even know half of it, but there are so many overlapping concepts ("const" in C, "constexpr" in C++, "final" in Java, "const" in JavaScript, "frozen" objects in Python...) that I get the impression we shouldn't discount the possibility that the current way of doing things (after pure space) isn't so bad at all: all strings, vectors, and cons cells are mutable to the same extent. I think it's worth it to experiment with other concepts of mutability, perhaps on a feature branch, but I don't think that's true for a concept that, so far, appears to be "literal strings can't be given text properties unless they already have at least one, in which case you can alter their text properties but not remove them all". I'll take all of that back if I actually see a bug that means Lisp code can cause an Emacs crash (in the C sense of "crash") by mutating literal strings, and that can't easily be fixed in C, and isn't actually a known limitation of the byte compiler. My guess is a concept of immutability won't be very useful if it's just a single bit telling you "this object is immutable": we need to attach more information to it, perhaps going as far as providing special ways of mutating the object rather than simply signalling an information-free error. (So, for example, a vector could be defined in Lisp to coerce all of its entries to nil or t, so we wouldn't need bool vectors anymore). Sorry this got long, but I don't understand the rush to actually commit to what appears to me to be a simplistic model of mutability when we haven't even removed the previous one, which I believe we've outgrown: pure space. (I think we should also get rid of the hash table mutability thing again, but that's another discussion entirely). From MAILER-DAEMON Fri Jun 05 09:01:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhByU-0006r5-Ec for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:01:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhByO-0006pU-LL for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:01:25 -0400 Received: from mail-oln040092072029.outbound.protection.outlook.com ([40.92.72.29]:18559 helo=EUR03-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhByL-0007TT-RN; Fri, 05 Jun 2020 09:01:24 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FiWqxk3/eyrQdj3XoblBMXYyymM+HVghIvuSAv3YQeVOwQeHEIxG0XH+nGF5Zqzu8MJzxqI1+kz8yrAnj2CESoVM6K/7wIYaQa0AWl237AaljQTp1RePSiS+o91i1aJ//XkQYkwkkQaySISYDYFpksXWlUtUT0bQaP33w+FeG9RHf+OFjXl/MJy+OvGV898pRnVWgUTApHOJzvPae5/+LcFAI6gD3JlsTP8Wrah/rft/w28WSsNiGm3NUl+iBHW7rbZ91N5yjgeC9Ke98w3Hm55Fjl025moKCLBH7Ezc3SsPQ12FwhVBp75ICej8xlPX4rgNiGvyDwMTCaLlGtgK4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yaEuLKzPxgiIQzvCOLHm5LexlHMCGMRFnxgBrrnyEi0=; b=F99bpYhRasFQZ7BbY58/4M6m/hveEWCoL8fMbDr5l9x4SRnTnn/VAPtxppRjb9vn893L1K1rsn7jAipiEIiTdjAu4rBGd1h9H82A/rW3duDoermr4YimPZB1zLGQZ37XxJbXeKCbSpo+N+3paLvFwCM2ITKQ8tQKPeoAfuHLp9tHjSn2eVYd9WdwX2T2wjmDOYSLaWGg3bB9iiihzbaURXCzLZkMeofasHuI945x9WtUwUUj/KiB7I2lx5U+1YHZucba3+vaFRDOKJmzBVngZ6SyUv0CTDC112jsZsgylsjqs0z8a17O4E/yS64TwTQJtERqDZAFFMXfu/XGKiurqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yaEuLKzPxgiIQzvCOLHm5LexlHMCGMRFnxgBrrnyEi0=; b=lk/TxieCqz85oE6MnQadt1fkgwJmLgCGsVOeYnL+wBCMMhyRBx9DvUi3KB/qyEorPPW4OmQkKxMXlvogNCgknIQQgBAjx3YhSXTLBcK57PGrrixqDEeVnwZA3IRkaRzXxRM8d3/LvWp4eG0Fc4LP48XmtpzBuuw9NNfLgpXHZFPClYtc89P4XQ5U7dX3kOJsE4UxWdWAkbG1QIRzkcexlHQqar5umUq48nxzv7FfqkrtfVvMafLfLN06KFK9qIR105KKzrC4rH8scABNljlMzHxRXXQiTCPEwwOsVoimUOwSETmykIzSpJj9wOP3ebYeU43La3KUzRl1gXthDKbB8w== Received: from AM5EUR03FT004.eop-EUR03.prod.protection.outlook.com (2a01:111:e400:7e08::45) by AM5EUR03HT094.eop-EUR03.prod.protection.outlook.com (2a01:111:e400:7e08::250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Fri, 5 Jun 2020 13:01:15 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:7e08::41) by AM5EUR03FT004.mail.protection.outlook.com (2a01:111:e400:7e08::163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Fri, 5 Jun 2020 13:01:15 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:274F10AABBE852FB7F122F54A96CC7B10D91B57B9A3EDEDF6DFD4FEE6409B8E1; UpperCasedChecksum:1D5F580862D01FA199BFA68B8CF8E4B27F830CCCC5001AC94C5FD2195F7F7A90; SizeAsReceived:8334; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.018; Fri, 5 Jun 2020 13:01:15 +0000 From: Arthur Miller To: Richard Stallman Cc: sb@dod.no, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Date: Fri, 05 Jun 2020 15:01:13 +0200 In-Reply-To: (Richard Stallman's message of "Thu, 04 Jun 2020 23:12:34 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM7PR02CA0023.eurprd02.prod.outlook.com (2603:10a6:20b:100::33) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <871rmt650m.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM7PR02CA0023.eurprd02.prod.outlook.com (2603:10a6:20b:100::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Fri, 5 Jun 2020 13:01:14 +0000 X-Microsoft-Original-Message-ID: <871rmt650m.fsf@live.com> X-TMN: [cCLHKhMd5jrvGXtFXdSZ7PYqhojfAIHc] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 3f4b95e7-3799-4393-1c48-08d8095087a2 X-MS-TrafficTypeDiagnostic: AM5EUR03HT094: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BtxNnJlIILrJqifpQY/073quAgLoZOYqYmv/kFoZzmchcXgUSi0HZ0Zxc//oVdBcWKumwv2HIG1cozgcpg5HGlr3/ZeFLPwqwu6Gl537/6qD63mCb+VAwE7cURGoMoI1Rcx13jD6ltlmI2iE25sjzG5zN83dBY8/Uy7udxNCU5UlusTqrN/H0XJW2v4VfRWmTqEdEs9WC4yCqaO/CMLW42KDGdVRjJxElbTLan5LkQo1Lk4qDIk3DsWKkj1bbdSQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: cGwKOEbtYbb6142KoSXwAhWnez8gCY3ZBpqQDYx401+LhkLjSwYmxByg6AIO3Yjz0/Azndc0R8HftAJxuqXscyjkJPuxGLnJMQPTXHZGunYKodpiFUsi0o/rLzNNHPzcqIMQeiYwOFH8s+VGTCne6A== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f4b95e7-3799-4393-1c48-08d8095087a2 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2020 13:01:15.6963 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5EUR03HT094 Received-SPF: pass client-ip=40.92.72.29; envelope-from=arthur.miller@live.com; helo=EUR03-VE1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 09:01:16 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:01:26 -0000 Richard Stallman writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > > When I write a pamphlet using Libre Office, I need to see how it > > > will appear on the page. I need to see where line breaks and paragraph > > > breaks appear. > > > > > > I want Emacs to be able to do tect processing that way. > > When you say page, you mean a printed page on paper? > > Of course. A pamphlet is for handing out. > > > Can't that be helped with some of live preview options for a pdf or ps > > or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? > > It would probably take half a minute each time. I am sure you > understand the advantage of WYSIWYG. Especially when the text needs > to fit in a limited space. I understand that wysiwyg is easier and I understand your concern for delays. I believe those delays would not be noticable for a pamphlet (A4/A5 size?) if you used html as intermediate format. Anyway what about if emacs had a print-page-mode as a minor mode for displaying some printing hints in text modes? I am not sure if I can write such, but here is idea: * provide a database of predefined paper sizes as specified on: https://www.papersizes.org/a-sizes-in-pixels.htm to be used as templates for width and height (in pixels) * advice insert funcion(s) to check for current line pixel-width and pixel-height. If width or height exceed template width and height then insert ^L to denote page break and move point to next line and insert text in next line. If width is exceeded maybe it is just enough to move point to next line, but when height for a page is exceeded one would need a special char to visualize page break. As I understand Emacs already has some support for page breaks (^L) as I learned myself very recently :-). There is extended page handling in Emacs and also a mode called PageMode: https://www.emacswiki.org/emacs/PageMode I am not sure, but what I think is missing is just to tie those things to paper sizes and automize page creation based on some paper template which is nothing but a pixel-width and pixel-height. I am not sure, I haven't used PageMode myself, I just learned about it. I am not sure how efficient it would be to check for pixel-width and height on every char insertion, maybe there is some better way? It would be nice if Emacs could draw a thin line to denote edges, or a rectangle of page size below the text as word processors do, but that would ask for some c and exposing of some graphics (XDrawRect & co) to elisp? From MAILER-DAEMON Fri Jun 05 09:03:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhBzx-0008Jz-4w for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:03:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37284) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhBzw-0008JH-9C for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:03:00 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:30978) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhBzu-0007kf-Hm for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:02:59 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 2470D81177; Fri, 5 Jun 2020 09:02:57 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 5BD24805AC; Fri, 5 Jun 2020 09:02:55 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591362175; bh=Oclaqzh67dfeJagFt0NMqyAFHYDFtDveYk3nZsY5S/A=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=KsZTWqautL04ULvnLPVeyP1DXwhOiUpmJBJ4iW6FQKqJBU6B8VfnR4gL+iScrWA8n G/z7gtADfqru2ry/y5AWPtJYiTMVTmM8S03mHweIKGPuLtmkgGKwyKHDDWoEz30zKv 9sP3T464Sg8GQOlgypfFTWH5ae2oqwAH/oSeNxlS/QxQ6z6KMWQ0It+9F6rEFR9R6w XXVQQZ3CHkef4qhIJecMh2hoBLUudcPoOExxjnbcpv+cIKZOJm7qC+GkyWOQevhTX/ aWbuJZ8Mqug4CqDOTit56tfhOoxCwq0i/19ghw+WOOXrc6umv1DzH5or3ER0mmWBHP H5+vLnA8sq1hA== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E27601221D9; Fri, 5 Jun 2020 09:02:54 -0400 (EDT) From: Stefan Monnier To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> Date: Fri, 05 Jun 2020 09:02:54 -0400 In-Reply-To: <87eeqtiy4x.fsf@tcd.ie> (Basil L. Contovounesios's message of "Fri, 05 Jun 2020 11:51:26 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.023 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 08:44:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:03:00 -0000 > As Paul said, not quite - it has historically modified its first > argument by placing properties on it. If you look at the line preceding > this diff hunk you'll see a call to copy-sequence. > > My reasons for making this particular change are: > 0. Since Emacs 24.4, make-text-button has returned its modified first > argument, so callers can use the value returned by make-text-button > instead of calling it only for its side effects. > 1. This has now been reverted again, but for the last month, > make-text-button returned a modified _copy_ of its argument, which > meant that its side effects could no longer be relied upon. > > Either way, relying on its return value rather than its side effects > seems like the best style to stick with for now. So, IIUC `make-text-button` should ideally work functionally, but for historical reasons it works by side-effect. What's the long term plan? Do we plan to live with the current side-effecting behavior, or do we plan to move to the "pure" functional behavior? If we could detect when a string-button is "used" (i.e. displayed or inserted into a buffer), then we could detect the use of the old side-effecting style (by checking if the string passed as argument had already been displayed/inserted elsewhere) and emit a good warning. >>> @@ -202,7 +202,7 @@ The format has been repaired and the variable modified accordingly. >>> You can save the current value through the customize system by >>> either clicking or hitting return " >>> (make-text-button >>> - "here" nil >>> + (copy-sequence "here") nil >>> 'face '(:weight bold :inherit button) >>> 'mouse-face '(:weight normal :background "gray50" :inherit button) >>> 'follow-link t >> So, here why do we need to `copy-sequence`? > To avoid destructively modifying a string literal by placing properties > on it. Makes sense, Stefan From MAILER-DAEMON Fri Jun 05 09:51:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhCkR-00006K-AR for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42664) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCkP-0008W4-HZ for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:01 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:42552) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhCkN-0001bQ-QX for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:01 -0400 Received: by mail-wr1-x42e.google.com with SMTP id p5so9829444wrw.9 for ; Fri, 05 Jun 2020 06:50:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=71vzecniERI7ajcwp2dW2hwGPIvtEz7KY/7bTWTszQk=; b=VknHtY5kdo91cw1T8/tRcV6WhSkJIWGk36Qd6wlLBEYA8uI5/Yzc7Tmnr+4jv+RuXT GRu1O4y0ycOiFGolTWmzW+sd8TmuN3siPuHgkfj8yBjfdSOguOJlK6YavBQykwvIvc0e dbik+nW3zqOC1HWrwLHbCY3Uno609DgUEvCax7EkIVcVtHYJHau4W120XmzLbZ1I7ze7 ZRSYreh4Cd7PW1D4cJ+BGKgFXrvyxDtBtabDJYTYLUSnKD0ZU4GwwfLH278BfhmBXDbU mb3Ed7cM4kKcHu8KFu5sgL7dP3IJgKMSjjhLJ2PAtlW9UehLe0d613U+tOAk4+9TmVih QhDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=71vzecniERI7ajcwp2dW2hwGPIvtEz7KY/7bTWTszQk=; b=S3VrK7iaxsJeuhAnH8f5KfxYZud9HYEe9FCCXft5u6osVmX0ZAN2nny7N8GUE8Lx8i qBUJhOlNcIYY+RTOSFPyaOv67d7xUaY8ajvKUB4BPJDiISYs7vTWBawMnMYLlbK6qxk1 NuQesC5g6mGoms9UNHzUQvMz/Xv1QwunmLYmNG5Is2bm+vwxBo2nOfbmJaUm1o9MBNCK UGHQIhnhHlZYnvrR/SmfUFp31hg6jA8C0V7zNepp6arBse/cEfQqM74i/suFDnHUUnIA qKlqcXcfdZLQeeHZ7aQTWoC+XuPAobaqhCuqHj2YqOyxygvbZdgTPU1je/eHRslLi9br xbyg== X-Gm-Message-State: AOAM531Xusg64gvEczcZmobS6Zm5CDcSrarEpD+hsNLUkgvA+qXEqGBC WMtkgskob8oLNZTDohVfVZ5QcA== X-Google-Smtp-Source: ABdhPJyHQ844d4/E5lyo8AP6GoS1NkedcM5O/aHIoAUg8c3Hv5RlNwurDngqY8atL9wmqmGndzLa9Q== X-Received: by 2002:a5d:4e87:: with SMTP id e7mr9238527wru.427.1591365057662; Fri, 05 Jun 2020 06:50:57 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id v66sm8055871wme.13.2020.06.05.06.50.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 06:50:56 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> Date: Fri, 05 Jun 2020 14:50:55 +0100 In-Reply-To: (Stefan Monnier's message of "Fri, 05 Jun 2020 09:02:54 -0400") Message-ID: <87v9k5mxj4.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42e; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42e.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:51:01 -0000 Stefan Monnier writes: >> As Paul said, not quite - it has historically modified its first >> argument by placing properties on it. If you look at the line preceding >> this diff hunk you'll see a call to copy-sequence. >> >> My reasons for making this particular change are: >> 0. Since Emacs 24.4, make-text-button has returned its modified first >> argument, so callers can use the value returned by make-text-button >> instead of calling it only for its side effects. >> 1. This has now been reverted again, but for the last month, >> make-text-button returned a modified _copy_ of its argument, which >> meant that its side effects could no longer be relied upon. >> >> Either way, relying on its return value rather than its side effects >> seems like the best style to stick with for now. > > So, IIUC `make-text-button` should ideally work functionally, but for > historical reasons it works by side-effect. What's the long term plan? > Do we plan to live with the current side-effecting behavior, or do we > plan to move to the "pure" functional behavior? > > If we could detect when a string-button is "used" (i.e. displayed or > inserted into a buffer), then we could detect the use of the old > side-effecting style (by checking if the string passed as argument had > already been displayed/inserted elsewhere) and emit a good warning. AFAIK all relevant future plans are being discussed in this thread: https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00117.html For almost a month make-text-button was pure wrt strings, but that's now been reverted again for backward compatibility and until a new decision is reached. -- Basil From MAILER-DAEMON Fri Jun 05 09:51:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhCkl-0000RZ-HA for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42710) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCkj-0000NW-D3 for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:21 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:42561) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhCki-0001eX-Lg for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:51:21 -0400 Received: by mail-wr1-x434.google.com with SMTP id p5so9830647wrw.9 for ; Fri, 05 Jun 2020 06:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=I0G3pQwFZm0gctm8dfQjSaWYFMdxnc2gyLogL64z7/o=; b=yCxFeBQhW07YZndCfSPLoTWeS36zwZoDAQ0PZi5TnZCjCr2MNGFSv7WIcFe0Qjmaj3 RCvVVqaqDLxiKMVk1nIl4mUoVk7qB6RGT6/lXVn+Jn05Z6x5PRN0fWDZDXJUWDOcY7Ox 2/qzHVoZEa3h7bY2DChK/6Yhb+64Xuk0pjYpsNA144McrcG4BdeI/e10yySgcLBBJbNW ue/hQ0tNQcdqB3xVyG0yWP765yf/9WngpptHVwo4UU6rnzYDp76/QLABBTEqGtkm3v1b /u9YVG+tzIihYtcC0jfRxAYZ3R1oTOg/pK2PKtej5lDbjtjDz3Sh784um2r/vy7DtvLH FWcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=I0G3pQwFZm0gctm8dfQjSaWYFMdxnc2gyLogL64z7/o=; b=I3998xBzK787Br67Ow4V2NMGDbe9+oH3Ctc7ZF3Gjbrfo5ULn2H/qYLiq8LgdpnQtL I2U7FA9FkhJjSgPhSgI1gPTzpkAW04EBzGAO5mg/N+q+t1czT6+fCvXOjzLwo8ek4cC4 EGjheP/6B8mixa8SzQZeZolZm9F9LEvKvrMuKygDlP0AI4jpouMCBIl6e54NSsb9tScA q+T0HVGCJO8WN6+WULxoIXnCT3rHLMK0eBeCJMCB+sqX9bSI+/uhATCEMh3ypsA62SxU awqGDLPWDpMQihI4W3WTbtNjD7uqZeb5UR5NQLxRbjCUV0Xdket4snEFYPHZsMwug00P wQbg== X-Gm-Message-State: AOAM532I7vbw2S/NhqxrQK7NikNpNv6iw2GT21aIwByfArAitJNK590T R9LChgk8LpxLShh6YF/vsQnrBw== X-Google-Smtp-Source: ABdhPJzb3Cs5CwDKjoFiuu6NkLj5okirca2VvfrCGjL2QWBqbbHoPvfLXd2DN/NThNTXB77jPw7uqA== X-Received: by 2002:a5d:4390:: with SMTP id i16mr9277085wrq.186.1591365079129; Fri, 05 Jun 2020 06:51:19 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id q1sm11018567wmc.15.2020.06.05.06.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 06:51:18 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> Date: Fri, 05 Jun 2020 14:51:17 +0100 In-Reply-To: <87img51y04.fsf@gmail.com> (Pip Cet's message of "Fri, 05 Jun 2020 12:46:19 +0000") Message-ID: <87tuzpmxii.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::434; envelope-from=contovob@tcd.ie; helo=mail-wr1-x434.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:51:21 -0000 Pip Cet writes: [...] > It would not be a quick bug fix for code that uses (propertize "string" > 'a 'b). propertize returns a copy of its argument, so it's not problematic in this context. > In particular, I'm not convinced code like that is buggy at all. It's > true that it will fail under certain conditions (the string constant is > used again in the same function, the function is byte compiled, that > sort of thing), and it's true there are better ways of doing that, but > is that reason enough to off-handedly ban all such code? [...] My only concern with destructively modifying string literals as in the (make-text-button "here" ...) example is that it can "pollute" that string literal for all of its users, which is both "rude" and unnecessary in this case. I simply find it cleaner, less intrusive, and less surprising to modify only one's own copy of a string in such a trivial case. I'm not personally concerned with crashes, theoretical purity or mutability, or anything like that; for that I defer to you, Paul, and other experts. -- Basil From MAILER-DAEMON Fri Jun 05 09:59:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhCsF-00069g-Je for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:59:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCsD-00069U-UC for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:59:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:24215) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCsC-0003FV-HB; Fri, 05 Jun 2020 09:59:05 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 29E2D1004F2; Fri, 5 Jun 2020 09:59:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4DB8E10031F; Fri, 5 Jun 2020 09:58:59 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591365539; bh=RGcW/mXC8/vg6BcJ0/YpJIHZkbl0j7OnxA0TINcC17Y=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=QWrwNIyEctl1+o6qsLRF9m3ZoWgvhpZP2dveMDfntnsEOdip2F362UdWnwSQHFiAm yeiQlz30LmJ2XjG0O93kx3FoXxLk9sAVKXOd/M1LgiSc+qCk7FB6tpTdU6yTk80Qrf F6pojdjcn0W5Zpb/3zu9PahKX4ij8ThCsp102jwVbVPjAnlJWI69SfR+Rj5fc6T6rs WgxZV6A/B60eHT/wHNJyuuJ0QQYn5NLIz/8bl/UUHC1oOhmKcSkssH4ERfm9T34tGH dt/bSRzZP3+vGiFaCLSspo0egAsHyL2UuVgcIBx2LSnRzqWi6kVF085yV9vyd8P0An kpubAEZnxztFQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 0BE6D121299; Fri, 5 Jun 2020 09:58:58 -0400 (EDT) From: Stefan Monnier To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: emacs-27 30a7ee5: Fix Arabic shaping when eww/shr fill the text to be rendered Message-ID: References: <20200605075722.16213.57047@vcs0.savannah.gnu.org> <20200605075724.3C52120A26@vcs0.savannah.gnu.org> Date: Fri, 05 Jun 2020 09:58:57 -0400 In-Reply-To: <20200605075724.3C52120A26@vcs0.savannah.gnu.org> (Eli Zaretskii's message of "Fri, 5 Jun 2020 03:57:23 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.011 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 08:44:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:59:06 -0000 > Fix Arabic shaping when eww/shr fill the text to be rendered > * src/hbfont.c (hbfont_shape): Don't use DIRECTION if the current > buffer has bidi reordering disabled. (Bug#41005) [...] > - if (!NILP (direction)) > + if (!NILP (direction) > + /* If they bind bidi-display-reordering to nil, the DIRECTION > + they provide is meaningless, and we should let HarfBuzz guess > + the real direction. */ > + && !NILP (BVAR (current_buffer, bidi_display_reordering))) Hmm... so indeed I see that SHR binds `bidi-display-reordering`. Isn't that a problem, since its docstring says: [...] Setting this to nil is intended for use in debugging the display code. [...] Can we change SHR so it doesn't bind this var? Stefan From MAILER-DAEMON Fri Jun 05 09:59:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhCsU-0006R1-QY for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 09:59:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCsT-0006PC-2x for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:59:21 -0400 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:33319) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCsS-0003Iu-0a for emacs-devel@gnu.org; Fri, 05 Jun 2020 09:59:20 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id 4FA235C014E; Fri, 5 Jun 2020 09:59:19 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 05 Jun 2020 09:59:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=warpmail.net; h= from:to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type; s=fm3; bh=yk+coeP7xvzS/1NPGDJijFyVTE DfHumqJEBKufD226o=; b=p4h9NBRFYhZaxGqVk3QpY4+F45k9sSUsjr/5bun/2M KpndM3QQWrBGaZrMVJ79/K7OyG1ZoYCl8rZJivzYCwhwiZytPmxxKJnLvZQYn+ba FWOOiH5fIUTgsV79qAG8otYIqfCzIy0xsl6pH8Acqz1/unj5W6uOMtvUmIjO8oI+ lGicwlwyAwR+v/UAnwcpXv3eoUTIZgwPXfqhBUuLpu27MzQxY8eHwV39jPzyR0fg jjntnfvFL//VaFVZnGhpIznSWMEXzmFPppO0tG9y4purO4S1KEsGq8h8McFCpI4N qGiMMA3RgY68ArsomXKt+GxNF0kfTewiL8ZodbVcKWwA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=yk+coe P7xvzS/1NPGDJijFyVTEDfHumqJEBKufD226o=; b=nW3Yt8lXWpzwZWLT18Q4A5 z/uBGagECQrVm0h7FXbrydPVy3+ElcZdsVNcBZTYp7YL1YzG1GEXHKkp2ddt3S4k wzXdDzD+dx1A+b1I88fLH7RLK6/4I2L2B48jc1SP4zvelEwOqZBchLU+5F5ff//u CRIryWeImw9uhFSH49LOPiGiBC1iHBccl7auKOA56hIaNQS64IGe/EkMedeT6Zfk E5m5xn3R9CVV3thq1dre2mx8FLNUcon0fnvt07WYUihqIWwIm8TKE3Uob+9eaoYJ pdC3fiHdgksXVe71QcOa27fvSZWLBN2weLZF2Ap4roqtJViiTS+4DWVo7bbGxebg == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudegfedgiedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehmtderredtredtnecuhfhrohhmpedfrfhhihhl ihhpucfmrddfuceophhhihhlihhpseifrghrphhmrghilhdrnhgvtheqnecuggftrfgrth htvghrnhepveeigefgkeeghfelvdejieehvdfghffftdeivdehjeefveeltdefgeeikeel feeinecukfhppeejledrvdduledrudelhedrudeftdenucevlhhushhtvghrufhiiigvpe dtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehphhhilhhiphesfigrrhhpmhgrihhlrdhn vght X-ME-Proxy: Received: from localhost (p4fdbc382.dip0.t-ipconnect.de [79.219.195.130]) by mail.messagingengine.com (Postfix) with ESMTPA id 59DB53061DC5; Fri, 5 Jun 2020 09:59:18 -0400 (EDT) From: "Philip K." To: Dmitry Gutov Cc: simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org, juri@linkov.net Subject: Re: New feature in project.el: Remembering the previously used projects References: <87a71hvi3b.fsf@bulbul> Date: Fri, 05 Jun 2020 15:59:15 +0200 In-Reply-To: <87a71hvi3b.fsf@bulbul> (Philip K.'s message of "Fri, 05 Jun 2020 13:59:36 +0200") Message-ID: <87a71hsjf0.fsf@warpmail.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=66.111.4.28; envelope-from=philip@warpmail.net; helo=out4-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 09:59:19 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 13:59:21 -0000 --=-=-= Content-Type: text/plain philip@warpmail.net (Philip K.) writes: > Sure, I'll try it out. An initial attempt attached below. It seems like everything works, the only thing I wasn't sure about was execute-extended-command's "typed" argument, since it seems to always be nil, when invoked interactivly? -- Philip K. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-Add-project-execute-command.patch >From 192bdfe0b775c0456fe0ec45b58134b3d2630913 Mon Sep 17 00:00:00 2001 From: Philip K Date: Fri, 5 Jun 2020 15:07:04 +0200 Subject: [PATCH] Add project-execute-command --- lisp/progmodes/project.el | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index a94a27dbc2..e8c35a0fb1 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -744,6 +744,15 @@ project-compile (default-directory (project-root pr))) (compile command comint))) +;;;###autoload +(defun project-execute-command (prefix command) + "Execute an extended COMMAND in project root." + (interactive (list current-prefix-arg + (read-extended-command))) + (let* ((pr (project-current t)) + (default-directory (project-root pr))) + (execute-extended-command prefix command))) + ;;; Project list @@ -830,7 +839,8 @@ project-switch-commands ("d" "Dired" project-dired) ("v" "VC-Dir" project-vc-dir) ("s" "Shell" project-shell) - ("e" "Eshell" project-eshell)) + ("e" "Eshell" project-eshell) + ("x" "Execute command" project-execute-command)) "Alist mapping keys to project switching menu entries. Used by `project-switch-project' to construct a dispatch menu of commands available upon \"switching\" to another project. -- 2.26.2 --=-=-=-- From MAILER-DAEMON Fri Jun 05 10:01:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhCuD-00089J-3y for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 10:01:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhCu2-00088I-Ls for emacs-devel@gnu.org; Fri, 05 Jun 2020 10:00:59 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36987) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhCu0-00043K-Kx; Fri, 05 Jun 2020 10:00:56 -0400 Received: from [176.228.60.248] (port=3389 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhCtq-000604-Gu; Fri, 05 Jun 2020 10:00:47 -0400 Date: Fri, 05 Jun 2020 17:00:33 +0300 Message-Id: <833679boji.fsf@gnu.org> From: Eli Zaretskii To: Arthur Miller Cc: rms@gnu.org, sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Fri, 05 Jun 2020 15:01:13 +0200) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 14:01:03 -0000 > From: Arthur Miller > Date: Fri, 05 Jun 2020 15:01:13 +0200 > Cc: sb@dod.no, emacs-devel@gnu.org > > Anyway what about if emacs had a print-page-mode as a minor mode for > displaying some printing hints in text modes? I am not sure if I can > write such, but here is idea: > > * provide a database of predefined paper sizes as specified on: > https://www.papersizes.org/a-sizes-in-pixels.htm > to be used as templates for width and height (in pixels) > > * advice insert funcion(s) to check for current line pixel-width and > pixel-height. If width or height exceed template width and height then > insert ^L to denote page break and move point to next line and insert > text in next line. If width is exceeded maybe it is just enough to > move point to next line, but when height for a page is exceeded one > would need a special char to visualize page break. > > As I understand Emacs already has some support for page breaks (^L) as I > learned myself very recently :-). There is extended page handling in > Emacs and also a mode called PageMode: > > https://www.emacswiki.org/emacs/PageMode > > I am not sure, but what I think is missing is just to tie those things > to paper sizes and automize page creation based on some paper template > which is nothing but a pixel-width and pixel-height. I am not sure, I > haven't used PageMode myself, I just learned about it. > > I am not sure how efficient it would be to check for pixel-width and height > on every char insertion, maybe there is some better way? All of this is already available, although not all of it is exposed to Lisp. Taking advantage of existing pixel-level capabilities is part of the job of providing the features that Richard has in mind. > It would be nice if Emacs could draw a thin line to denote edges, or a > rectangle of page size below the text as word processors do We already can display such thin lines, see, for example, help-fns.el (search for ":height"). No X-level graphics is needed. From MAILER-DAEMON Fri Jun 05 10:20:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhDDL-00055c-FQ for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 10:20:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhDDK-00055P-5T for emacs-devel@gnu.org; Fri, 05 Jun 2020 10:20:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37460) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhDDJ-0008A8-Eq; Fri, 05 Jun 2020 10:20:53 -0400 Received: from [176.228.60.248] (port=4618 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhDDI-0002sL-MJ; Fri, 05 Jun 2020 10:20:53 -0400 Date: Fri, 05 Jun 2020 17:20:43 +0300 Message-Id: <83y2p1a91g.fsf@gnu.org> From: Eli Zaretskii To: Stefan Monnier Cc: emacs-devel@gnu.org In-Reply-To: (message from Stefan Monnier on Fri, 05 Jun 2020 09:58:57 -0400) Subject: Re: emacs-27 30a7ee5: Fix Arabic shaping when eww/shr fill the text to be rendered References: <20200605075722.16213.57047@vcs0.savannah.gnu.org> <20200605075724.3C52120A26@vcs0.savannah.gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 14:20:54 -0000 > From: Stefan Monnier > Cc: emacs-devel@gnu.org > Date: Fri, 05 Jun 2020 09:58:57 -0400 > > > Fix Arabic shaping when eww/shr fill the text to be rendered > > * src/hbfont.c (hbfont_shape): Don't use DIRECTION if the current > > buffer has bidi reordering disabled. (Bug#41005) > [...] > > - if (!NILP (direction)) > > + if (!NILP (direction) > > + /* If they bind bidi-display-reordering to nil, the DIRECTION > > + they provide is meaningless, and we should let HarfBuzz guess > > + the real direction. */ > > + && !NILP (BVAR (current_buffer, bidi_display_reordering))) > > Hmm... so indeed I see that SHR binds `bidi-display-reordering`. Yes, it does. But the problem is more general, so the fix is not just a kludge to fix what shr does. As the comment explains. > Isn't that a problem, since its docstring says: > > [...] > Setting this to nil is intended for use in debugging the display code. > [...] It's "do like I say, not like I do" ;-) > Can we change SHR so it doesn't bind this var? I didn't see any better way at the time. Shr's naïve filling algorithm cannot cope with the complexity of RTL text in an LTR paragraph, when a long line has been continued. Maybe it's even entirely impossible to DTRT in Lisp in these cases. But if you or someone else have ideas, please describe them. From MAILER-DAEMON Fri Jun 05 10:32:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhDO8-00044M-CI for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 10:32:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhDO4-000443-En for emacs-devel@gnu.org; Fri, 05 Jun 2020 10:32:01 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:34674) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhDNv-0002In-2J for emacs-devel@gnu.org; Fri, 05 Jun 2020 10:32:00 -0400 Received: by mail-wm1-x32f.google.com with SMTP id u26so9226024wmn.1 for ; Fri, 05 Jun 2020 07:31:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version; bh=hzI9E7t2Km3HQwQNmot7ZoN0ZkYXoPmdeDZKw1XVu08=; b=HsjPR0F37PESDrQgIlFvFzktA5xwKV3JIrEtawJr3f1l6+ceRPqxwubENR8Fu6s38B dNOqJb/I7lQ7FxFN1JLdaR09zqF8e+3g+DFw6UmdYhQuBIyCbmayyVbVYcH16vstraYi sv54pNl0Ij8+bAcEWIzfThg78DXfQqQRVFTBbiE6HsGGelAJTnfvHXk80IV4JMmsS6BP ACJwCujg7Gb9HupagAty7Q2Js6S0Hmg3QeIYpl3OeFrN/DB6JgdZYUJFymHNexeKDspN 76vkOZHwvrDucym+y3ZD3LhoEWj0gZJ/ywShYWodOjJIzsxx8w+RxWEEF3QR4qXU+OFS mBEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version; bh=hzI9E7t2Km3HQwQNmot7ZoN0ZkYXoPmdeDZKw1XVu08=; b=UTtwwPHaPByWVk7hKBPXOHdFD5Qg7sdQ4qxuV0yXCwToP8jpwQD8PH9rZaeqsi05Sj 9uUaG+NDmfhAQmIWHQ/N9CSJseDFfyLq2wL0sN8QgUQgSZnNf1L9BFAqkZoQUu7e8+0I ZDL9n79fUu/PiE9AX/S8xnhZ7j/wjbUSvREA+Ml3K/b3OUJTotWSyJttnaGF/RUWOUCR zJfDTEzepEiDppGhhOB6qcyoCGx51Z8soxIz5hd1YVST4mP+d9u8UVsKwsVM+bdSYCOI mebdfE1gTAvjVxBjziWEOKhkVh9mAugNZWk7DkcrmYfxmzXdQoTqg0sZw4bImVijJ8tl +A0A== X-Gm-Message-State: AOAM5328OTrDxjRoAqlBJcJ6Jg9lyVKzP7JIA23lDIGfkbNhLaIfXrdr WfiImTJolPSCD6+A680UMrP6VNNTbtc= X-Google-Smtp-Source: ABdhPJxb1mK1ehrHx12HajsyOjjr/T4sHxEFbLgNhpZ9nQpE7sTznwpUmpB4oMGEndHefmbGpNqP2A== X-Received: by 2002:a1c:c203:: with SMTP id s3mr2911205wmf.174.1591367509095; Fri, 05 Jun 2020 07:31:49 -0700 (PDT) Received: from chametz (tor-exit-13.zbau.f3netze.de. [185.220.100.240]) by smtp.gmail.com with ESMTPSA id d13sm11046086wmb.39.2020.06.05.07.31.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 07:31:47 -0700 (PDT) From: Pip Cet To: "Basil L. Contovounesios" Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button In-Reply-To: <87tuzpmxii.fsf@tcd.ie> (Basil L. Contovounesios's message of "Fri, 05 Jun 2020 14:51:17 +0100") References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <87tuzpmxii.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Fri, 05 Jun 2020 14:31:43 +0000 Message-ID: <871rmt1t4g.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=pipcet@gmail.com; helo=mail-wm1-x32f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 14:32:02 -0000 "Basil L. Contovounesios" writes: > Pip Cet writes: > > [...] > >> It would not be a quick bug fix for code that uses (propertize "string" >> 'a 'b). > > propertize returns a copy of its argument, so it's not problematic in > this context. Thanks for pointing that out. I hope it was still clear what I meant. >> In particular, I'm not convinced code like that is buggy at all. It's >> true that it will fail under certain conditions (the string constant is >> used again in the same function, the function is byte compiled, that >> sort of thing), and it's true there are better ways of doing that, but >> is that reason enough to off-handedly ban all such code? > > [...] > > My only concern with destructively modifying string literals as in the > (make-text-button "here" ...) example is that it can "pollute" that > string literal for all of its users, which is both "rude" and > unnecessary in this case. I simply find it cleaner, less intrusive, and > less surprising to modify only one's own copy of a string in such a > trivial case. I'm not personally concerned with crashes, theoretical > purity or mutability, or anything like that; for that I defer to you, > Paul, and other experts. I'd like to apologise. I made several mistakes in that email (including using the word "off-handedly" when a less offensive term would have done). Most importantly, I think, I was commenting on a change that, as you correctly point out, made the code cleaner and less surprising, as though it were a whole-hearted endorsement of breaking any existing code that is more surprising or less clean. I see now that you said no such thing. From MAILER-DAEMON Fri Jun 05 10:57:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhDmu-0006uY-GD for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 10:57:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51066) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhDms-0006o8-8Q for emacs-devel@gnu.org; Fri, 05 Jun 2020 10:57:38 -0400 Received: from mail-am7eur06olkn2019.outbound.protection.outlook.com ([40.92.16.19]:55136 helo=EUR06-AM7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhDmq-0007bw-Mi; Fri, 05 Jun 2020 10:57:37 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SUlimrG4/HQLs+c/B0mt0cF/xPSwIUmZwfM+HRaWB/k++SBdjlS9+U943Nd6AOl0W1Uk88zKm4xAko8uXo5kFMUwgkAPA2+xStv0/PMwj/x45PylHf84qqu9yhpeiYGEO7VGKtdUDxZMx4glyCXkKI4Qsi9TuBPKdhmrXr4arLVDDWSwMB22X6nlkYlZi+tul60nzxnUOu/N6wa+us2VncXuIGrkjYW+ShKOsh7et2a4ORpRF0ye2u67kN/s9J/sFbtsgpjgAVa0vXPtAk4MfAdjbPw6TCokMNOSKhSUkboOErwncTMU2PTNDKmD0Xrky/wod1eI7fs1H3iKSF+/DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WaKZWAMp3sZXfIbhv2/TaicvtBuoxdUCEFw53UdaWGo=; b=FTVPvA7RRmH3+TE1dvsg8M0xIzrVj9oLQwHIZU39DlyXJA0p4+0qgXzPVEt/CexF3eQNDRQbpQZtMqngYwgzEaEEWO6Ok34s0T5aa1Ecrj1a+dDXt9AbBsGrOP9m49NhdZ+QfPlEoZZ5J+GUm59kF6qIsjubJldfpSLIQInEc45Yzbk9TdUoAIJQYOQ2TDwxamyNLPoQKdVUdyrNauAr27ofFnhNx2pXQ4Wkr+6qXdOM/eyK29Qtw8HZmaUJTx4ZOD2Frm8wCGHD0hlikpVbAMM4+2qsKlt4o61kAjkEwdR8a35ZcrrMP/R3x1YNqndnBE2+SdqyGkktGg0Bv8romg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WaKZWAMp3sZXfIbhv2/TaicvtBuoxdUCEFw53UdaWGo=; b=H4mii3KQwyPWRj3OTd3BsFA2EvtawaRGgVcHa8j4EebliWtqZSwXa14gdv9V7rAafizqGkkz8AqNWluPmKph2bEkJxUdletH7pvbXDxutRXKUkBBb2IqaUm+QT9RvkTOjU1aYSvkFH2selVH7WxS2WkaJ/y2Ywn4eXgQVZ/+PmLrqpQBeL9o5+D3OwHIg5cSk4LCeXR9+KlxH2hGLoEaVVj9vGtvk3mmi9AcW7ElOIUjaoG65Zq6pEEv22X1ZvqSXGA/ZSSyNXZGtY1a56XXw3gu28o+9y82OL04JTutn20pzcH3MPfRlXXROAPzmfZPlGp5TLMfRVUbiTokV8rQFQ== Received: from VI1EUR06FT041.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc37::4c) by VI1EUR06HT140.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc37::407) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Fri, 5 Jun 2020 14:57:33 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:fc37::46) by VI1EUR06FT041.mail.protection.outlook.com (2a01:111:e400:fc37::345) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Fri, 5 Jun 2020 14:57:33 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:DC43BD0D1BB30EC3952803C98FDB5D63AB3D0C799F1F5B3D26F75227E0B7847C; UpperCasedChecksum:764A3F38ECF3B6E16D95D2AE810F88283050FFCE2FF643D1B37EE4AF822CDF4E; SizeAsReceived:8429; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.018; Fri, 5 Jun 2020 14:57:33 +0000 From: Arthur Miller To: Eli Zaretskii Cc: rms@gnu.org, sb@dod.no, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <833679boji.fsf@gnu.org> Date: Fri, 05 Jun 2020 16:57:32 +0200 In-Reply-To: <833679boji.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 05 Jun 2020 17:00:33 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM6P193CA0110.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::15) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <87wo4l4l2b.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM6P193CA0110.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Fri, 5 Jun 2020 14:57:32 +0000 X-Microsoft-Original-Message-ID: <87wo4l4l2b.fsf@live.com> X-TMN: [Os4MndJG3ownkqtLLm2IZh45H4e/7a3m] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 476de895-e3d4-4822-7d3c-08d80960c6d6 X-MS-TrafficTypeDiagnostic: VI1EUR06HT140: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ay0a64YDEMUeioLzGdwIQGEVxbP6oNVgW3kSlxm8FjbNF7LaSQMCM27n1tcq3B3A4rgAGivshVqiK9wgu/RjJXsK2C2cNiA0u/dK0rBrDxdF2YSPpNpH+ZB5gO+w5ssiJ68wHp6SdpQIaejWzeEwM/EyRGg7vJiz68vd0H5gTSzmzIH0J+6yVWBs4MUr0zQKVqOX7HsAHajrq0p0wuzKH1sHAfHt0ln6u0RkQLj8aU60vZksftg6UpUSB0oWmCTJ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: l48HcLI75Fd0s0a4UcxNWuD+4uKwbznWp264B1ypptMXgL++o91DBlA7db80NDPUx7WxNd/nLJpTrKiRetZ0wyGGgB7nEztEYmWWKbgH8ZUIm/84AYzfLqAO/J4vm0BxF0B7Np95a9ZYzT/i58IhxQ== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: 476de895-e3d4-4822-7d3c-08d80960c6d6 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2020 14:57:33.4608 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1EUR06HT140 Received-SPF: pass client-ip=40.92.16.19; envelope-from=arthur.miller@live.com; helo=EUR06-AM7-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 10:57:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 14:57:38 -0000 Eli Zaretskii writes: >> From: Arthur Miller >> Date: Fri, 05 Jun 2020 15:01:13 +0200 >> Cc: sb@dod.no, emacs-devel@gnu.org >> >> Anyway what about if emacs had a print-page-mode as a minor mode for >> displaying some printing hints in text modes? I am not sure if I can >> write such, but here is idea: >> >> * provide a database of predefined paper sizes as specified on: >> https://www.papersizes.org/a-sizes-in-pixels.htm >> to be used as templates for width and height (in pixels) >> >> * advice insert funcion(s) to check for current line pixel-width and >> pixel-height. If width or height exceed template width and height then >> insert ^L to denote page break and move point to next line and insert >> text in next line. If width is exceeded maybe it is just enough to >> move point to next line, but when height for a page is exceeded one >> would need a special char to visualize page break. >> >> As I understand Emacs already has some support for page breaks (^L) as I >> learned myself very recently :-). There is extended page handling in >> Emacs and also a mode called PageMode: >> >> https://www.emacswiki.org/emacs/PageMode >> >> I am not sure, but what I think is missing is just to tie those things >> to paper sizes and automize page creation based on some paper template >> which is nothing but a pixel-width and pixel-height. I am not sure, I >> haven't used PageMode myself, I just learned about it. >> >> I am not sure how efficient it would be to check for pixel-width and height >> on every char insertion, maybe there is some better way? > > All of this is already available, although not all of it is exposed to > Lisp. Taking advantage of existing pixel-level capabilities is part > of the job of providing the features that Richard has in mind. When you say all of this, and not exposed to lisp, what exactly do you mean? :-) Is it possible to get a pixel offset from a point with elisp? Height, width, or whatever that could be used to calculate if current buffer region fits iin a page or not? (defvar ppi-72 '((4A0 . (4768 . 6741)) (2A0 . (3370 . 4768)) (A0 . (2384 . 3370)) (A1 . (1684 . 2384)) (A2 . (1191 . 1684)) (A3 . (842 . 1191)) (A4 . (595 . 842 )) (A5 . (420 . 595 )) (A6 . (298 . 420 )) (A7 . (210 . 298 )) (A8 . (147 . 210 )) (A9 . (105 . 147 )) (A10 . (74 . 105 )))) If I have a database of sizes like this, I would need to know a size in pixel of a buffer region between some min and max points. That could be used to either defadvice insert or to calculate and restructure text afterwards. Maybe it is to naive, no idea, just thinking. Also I am not sure how resolution/ppi relate to emacs buffers to be honest. >> It would be nice if Emacs could draw a thin line to denote edges, or a >> rectangle of page size below the text as word processors do > > We already can display such thin lines, see, for example, help-fns.el > (search for ":height"). No X-level graphics is needed. As composed of characters or as overlays with underline/overstruck or similar? What about a rectangle in some color as a background to symbolize a page. I understand it is not needed, but it would be nice. From MAILER-DAEMON Fri Jun 05 11:10:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhDzD-0007oy-U5 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 11:10:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhDzC-0007mC-6k for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:10:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38402) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhDz9-0002Yn-K4; Fri, 05 Jun 2020 11:10:19 -0400 Received: from [176.228.60.248] (port=3642 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhDyz-0007sw-Il; Fri, 05 Jun 2020 11:10:10 -0400 Date: Fri, 05 Jun 2020 18:10:00 +0300 Message-Id: <83sgf9a6rb.fsf@gnu.org> From: Eli Zaretskii To: Arthur Miller Cc: rms@gnu.org, sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Fri, 05 Jun 2020 16:57:32 +0200) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <833679boji.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 15:10:22 -0000 > From: Arthur Miller > Cc: rms@gnu.org, sb@dod.no, emacs-devel@gnu.org > Date: Fri, 05 Jun 2020 16:57:32 +0200 > > > All of this is already available, although not all of it is exposed to > > Lisp. Taking advantage of existing pixel-level capabilities is part > > of the job of providing the features that Richard has in mind. > When you say all of this, and not exposed to lisp, what exactly do you > mean? :-) Is it possible to get a pixel offset from a point with elisp? > Height, width, or whatever that could be used to calculate if current > buffer region fits iin a page or not? See window-text-pixel-size as one example of what we have. The underlying functionality is even more powerful. > >> It would be nice if Emacs could draw a thin line to denote edges, or a > >> rectangle of page size below the text as word processors do > > > > We already can display such thin lines, see, for example, help-fns.el > > (search for ":height"). No X-level graphics is needed. > As composed of characters or as overlays with underline/overstruck or > similar? Just look at the code, it is self-explanatory, IMO. > What about a rectangle in some color as a background to symbolize a > page. You will see in the code I pointed to that we actually already produce a rectangle, just a very thin one. From MAILER-DAEMON Fri Jun 05 11:20:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhE9E-00067a-DW for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 11:20:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhE9C-000679-UT for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:20:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:44726) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhE9B-0005e5-Hk; Fri, 05 Jun 2020 11:20:42 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id B3C4510033A; Fri, 5 Jun 2020 11:20:39 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 0D82410031F; Fri, 5 Jun 2020 11:20:38 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591370438; bh=P5M0i4FiitYXppj1uNO2/LZcYDuH8iqtWIFcdW+QRFw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=RBzPw4EnRx2ZeZcOeKE2puS5vjXr5rTfFPXQff7vCUrYWMl8WyFKC+Oui3zpl1gvM uLon2HsEKtISPGmrkw/Qcu2cR7YICGPwQ0jiaM9agG31yXF525Rg4vdjcNxYEbV37N KG9s1Qd3cp4wLcKw/jJ4OE9KdogPTpCxAWNJTKOyVZxN/NfVERYy2GRRv6WFpb4kOV zHT7kBXphEmUsIsbzD3nqHeegZYqQ+qTsg4zb7B9JH9dpRpmQ5KiVlbc+cklBAVCCc 45/GLhAqeuHFih0aT8tdtynopIrPpJ3b58FKxZqfBjVxRLInhYzuWArDrPwM+BGW7K 4x7RzyJIO+fSQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id B0B10120EE7; Fri, 5 Jun 2020 11:20:37 -0400 (EDT) From: Stefan Monnier To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: emacs-27 30a7ee5: Fix Arabic shaping when eww/shr fill the text to be rendered Message-ID: References: <20200605075722.16213.57047@vcs0.savannah.gnu.org> <20200605075724.3C52120A26@vcs0.savannah.gnu.org> <83y2p1a91g.fsf@gnu.org> Date: Fri, 05 Jun 2020 11:20:37 -0400 In-Reply-To: <83y2p1a91g.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 05 Jun 2020 17:20:43 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.011 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 08:44:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 15:20:43 -0000 > Yes, it does. But the problem is more general, so the fix is not just > a kludge to fix what shr does. As the comment explains. Yes, the fix is fine. >> Isn't that a problem, since its docstring says: >>=20 >> [...] >> Setting this to nil is intended for use in debugging the display cod= e. >> [...] > > It's "do like I say, not like I do" ;-) ;-) >> Can we change SHR so it doesn't bind this var? > > I didn't see any better way at the time. Shr's na=EFve filling > algorithm cannot cope with the complexity of RTL text in an LTR > paragraph, when a long line has been continued. Maybe it's even > entirely impossible to DTRT in Lisp in these cases. But if you or > someone else have ideas, please describe them. Fair enough, thanks, Stefan From MAILER-DAEMON Fri Jun 05 11:25:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhEDx-0001H1-B9 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 11:25:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhEDv-0001F3-Id for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:25:35 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:32915) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhEDu-0006Sj-EM for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:25:35 -0400 Received: by mail-wm1-x32e.google.com with SMTP id j198so9345659wmj.0 for ; Fri, 05 Jun 2020 08:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=MpnJTq99PgatdBH3X567bWGLC+wV4TQZo55zTy1041w=; b=P9kDKYLdrbTEAK1Tlpc91d5kRE0oY6RN7qQ8oelt9Y6OPMOsst3bqmBNjJI4KRTs17 5xWVjSFvegkD3iPF5YgtWpOnG8K/Dn5eVFyl4S/B5cZ2QY+kOsa3shlyAITD7gukAT4n zbR2m7fzecs/H1EZ1YpwlyTwQQnA5UsTZ9QXiPFh2DRLS8BluS0YuI6MKo9pWmYEjxZR h51MM63HdV+53Io8PmTUVMDbryWhaeQK6Kv6VMzt0yGAJnOznBnuizervLE1B5iEILgc B3akwj1J3jXADAGJkxi7MSRxOvxzczA7wffPYgihj3C1ZEDjJS95u6PcGArELvY586Ub 7wsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=MpnJTq99PgatdBH3X567bWGLC+wV4TQZo55zTy1041w=; b=dhU5Cv/b2RXpPyITpxXZ7pQ/eET4oCdOXh2l3fm84u8bLP/V6IjaIgWBwn8DDjGIws aceEAQP5XK7bS54/gQyen6+En4WXtSRJ4PP8z+Y1nwizp3Saj+gnfw8jFlTRWNOyJ1qm 70rJc+G3bC9/0jt79uY+yBnVDtwmhvI3PirtprBqUUspM3Iz47vZDe2G4im2Xig82exJ rdTonpMB1DWlyq7gx5KgnPw75q50QQWGGlH1EnjKIa5FnefqnVVEHLu44CrYcD8T7SMc XSBGFlA4YJVvaknw0OIiQF2Sl+Un8N/Ah5aJ4yekUdvCprvGChPMC5X6z+oR1oiQtSoX Xl7g== X-Gm-Message-State: AOAM532upO5C1mUThu/ysuuXIxOyV17yuOszKr2v/vFO0ndRtsj1o2cR PkaesL/mMl9qMAD8sfPZ9Mn3lrwvC4M= X-Google-Smtp-Source: ABdhPJyQ2RFivMPsRGeSpjo2ebciX0fxAkGSziZOpt151Nek6gZRLmbpcIacEEHlpC5to3d0elpiSw== X-Received: by 2002:a05:600c:24c:: with SMTP id 12mr3366946wmj.28.1591370732479; Fri, 05 Jun 2020 08:25:32 -0700 (PDT) Received: from krug ([89.180.147.0]) by smtp.gmail.com with ESMTPSA id o6sm12624166wrp.3.2020.06.05.08.25.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 08:25:31 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Paul Eggert Cc: Pip Cet , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> Date: Fri, 05 Jun 2020 16:25:28 +0100 In-Reply-To: <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> (Paul Eggert's message of "Wed, 3 Jun 2020 17:43:32 -0700") Message-ID: <873679lel3.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x32e.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 15:25:35 -0000 Paul Eggert writes: > On 6/3/20 4:48 PM, Jo=C3=A3o T=C3=A1vora wrote: >> I think I'd rather this previous behavior were retained, or at least >> achievable by request. > > It's tricky, as make-text-button in emacs-27 (and earlier) modifies its s= tring > argument, which is buggy because string constants are not always unique. = For > example: > > (defun example-bug () > (concat "1. " (make-text-button > "example" nil > 'action (lambda (_) (message "action 1"))) > "2. " (make-text-button > "example" nil > 'action (lambda (_) (message "action 2"))))) > > If you byte-compile this in emacs-27, both buttons message "action 2" bec= ause > there's there's really just one instance of the string constant "example"= , and > so there's just one button and the second action overwrites the first. But if you evaluate it, that doesn't happen, which is probably even worse. And this is even stranger, IMO: (defun example-bug2 () (eq (make-text-button "example" nil 'action (lambda (_) (message "action 1"))) (make-text-button "example" nil 'action (lambda (_) (message "action 2"))))) =20=20=20=20=20 (defun example-bug3 () (eq "example" "example")) =20=20=20=20=20 (defun example-bug4 () (let ((str1 "example") (str2 "example")) (eq str1 str2))) =20=20=20=20=20 (list (example-bug2) (example-bug3) (example-bug4)) when compiled, last form returns (t nil t) in emacs 27, when compiled, last form returns (nil nil t) in emacs 28. when evaluated, last form returns (nil nil nil) in emacs 28. For comparison, example-bug4 is valid Common Lisp and will return nil in every Common Lisp implementation I know (I tested with ACL and SBCL), regardless of whether compiled or evaluated. I'm reasonably confident there's somewhere in the Hyperspec where that behaviour may be specified (I trust some CL pope will find it for me ;-) ) Elisp is its own Lisp of course, and I suppose these things allow for performance/space optimizations under the hood, but is all that strange behaviour worth it? > Does SLY always pass mutable strings to make-text-button? I.e., strings b= uilt > from 'concat' etc. (not string constants)? If so, I could change > make-string-button to copy its string argument only if it's a constant, a= nd that > should fix the compatibility issue without needing to make any changes > to SLY. No it doesn't, as someone else has already reported. Jo=C3=A3o From MAILER-DAEMON Fri Jun 05 11:27:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhEG0-0002md-MS for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 11:27:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55186) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhEFw-0002lX-HW for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:27:41 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:34824) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhEFv-0006wV-IJ for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:27:40 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 5so2868576pjd.0 for ; Fri, 05 Jun 2020 08:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bobnewell-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:organization:references:date:in-reply-to:message-id :user-agent:mime-version; bh=CLc8I5Dboslznd24vB1XLX+Ra1l1xc2fJoJWbXk1n60=; b=IlcC1T8SeEjO6z3ecqzzJ8MIbjL+UiB3vOPoN7x0GGQLg2kNgXd8u+zIRd6qBTuF4/ Rq33/+qYuDa+ehy+t3lHMVZOV8PygeG7JRAcmGJiOFMF2XCF7fmw5nim0+BDwXn6vUY9 ShGGKN9lCY1BRZ5cQB7RE2vk9elRChKzfwKASfZCJ/A5mU0pflKhPGeJqJvZNfC0OvWs lZsSi6rFZcJTuMnum15cmDJT0z8m/QIxhULvmr+BkTPojMerXNqi1xhf6f/YMTGOuq1Q 3fUbXgz9VUa034btvouUGzzHWmY3ZJKd8NwXTnfBxaB9Oy2X6j01N3Kso7q3WGGP+NHp EVrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:organization:references:date :in-reply-to:message-id:user-agent:mime-version; bh=CLc8I5Dboslznd24vB1XLX+Ra1l1xc2fJoJWbXk1n60=; b=kA13mnvQVJ28cP57O25D2qnjLhAzMS91+XZzK67wW9kNsTMr6Vn59wMA3n0uxL3FM3 Z7Ny1SkbG2V4fUc8zivN4SM7yWpGHxrAAgRmHWsaHijNmrRZ/ZX/S1jlXHwK6W1g35SP CgKshjEOM9/3mk5/id3FsPCChFD/RimPtV6jz1wkLT1LmvkfqwRKvcR+CZlfMoti3w0+ OULt0VgBuFigmUqIIS7xnlx4gi4crU71EV+IQBDQ/E+jm63YMVM/1qM0cilj6WAH9uM2 6fhj8kIUJ0MvDDqWZBDQdr2tpH/ipcpIGk4YaKBrmkJqlNCD/M38cO2hiH8beNwfV8pH fNDQ== X-Gm-Message-State: AOAM531ulaH+oKhRcvRHeHdHJLXKhQld5gs/pZe290xHf+B6h4D82wIi G10ZoJjjCKQ1N4LpWr7yvZtGDrELwI4= X-Google-Smtp-Source: ABdhPJx9TmW4xudkupXe0QsNwIaWNxf3YY+R8BH1gCNjzX48oynt2LbO0SMI18u05YtuKEgA8vWhhQ== X-Received: by 2002:a17:90a:e60d:: with SMTP id j13mr3743752pjy.127.1591370856966; Fri, 05 Jun 2020 08:27:36 -0700 (PDT) Received: from localhost (cpe-45-49-59-204.socal.res.rr.com. [45.49.59.204]) by smtp.gmail.com with ESMTPSA id t7sm6213116pju.42.2020.06.05.08.27.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 08:27:36 -0700 (PDT) From: Bob Newell To: emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Organization: Avi Gobbler Publishing References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Date: Fri, 05 Jun 2020 05:27:35 -1000 In-Reply-To: (Richard Stallman's message of "Thu, 04 Jun 2020 23:12:34 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::1031; envelope-from=bobnewell@bobnewell.net; helo=mail-pj1-x1031.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 15:27:42 -0000 Richard Stallman writes: > This is not an issue for longer documents, since it doesn't crucially > matter > where the page breaks are in those. Just as a point of interest: page breaks definitely can matter in longer documents. I've done quite a number of books with Emacs/LaTeX, and in doing text layout I have to take into account widows and orphans--- for instance, having a single line of a paragraph at the bottom of a page is a no-no, and page breaks have to be manipulated to avoid bad typography. That said, I've found that even for longish books with many diagrams (my most extreme example was nearly 800 pages), the compile and view process was fast enough not to get in the way, and corrections and changes go very fast if using something like synctex (I believe that's the correct name). This is not to say that I don't see the need for WYSIWYG on graphics-intense publications; for instance I couldn't see doing a comic book in emacs. -- Bob Newell Honolulu, Hawai`i - Via GNU/Linux/Emacs/Gnus/BBDB From MAILER-DAEMON Fri Jun 05 11:48:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhEZu-0001wZ-RF for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 11:48:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhEZo-0001ui-2Y for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:48:14 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:36120) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhEZm-0004CT-Mr for emacs-devel@gnu.org; Fri, 05 Jun 2020 11:48:11 -0400 Received: by mail-wr1-x434.google.com with SMTP id q11so10264277wrp.3 for ; Fri, 05 Jun 2020 08:48:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=LioDA5bJ3c86e+Pl2x6ovbtJ1Ee/fWVFre/u3T3vVsE=; b=B0u2H9MB3UhXAdZaKoJi2XuiuVAPuw9wEXnAiReeaFWkMZqbbdTICi3vOvmCAJrdoU djX4HG/rZcgChhgZP65B7KNHP/CrXQshdbbNF6sWdho64yQvr7ykp5hHtfoYWUZv5Ls6 hoZY0EJy2IswMVZU/TsjuTWCSSVC2kBdBQKwwZVnHBdHfKsGtsoNQVDmSFkIG7ZH1t9/ aYHQAoDn3XhfY2AiynH7WGeXuL/rtX7qc4f+ogJKKmqN8r2PDOavTBpgbmpRTtBP4rCJ c3nCtiiqQ9ZKOLHNkWnR4r0EwD7Lg2NleOUAp92yEA8hKK5qN3AXtKTHmUWkbOlol919 n+ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=LioDA5bJ3c86e+Pl2x6ovbtJ1Ee/fWVFre/u3T3vVsE=; b=NC25XiNfcASe3107YNwmdovD2LF9A6vQRvdxd4jAsO37/AInsKQd3LCy4ZXwUvbh1C /CvrIPt/yKaSzS7tt1yZcxboaw0WMri6eybt2vpiHLJfXLEsYwnQyssDTk/zAghMpouN 7vYKaWcRaewyZzRAikP0PxCXmcZ2CiJSqx+cR0V8+igCSgvMwFlF2SBkbx/9OTCLlr+X 4tsglkR0v1r2uVnU04dvAoi7PdUqX6cKhGmTet2QVCXQqDdHNAdq94x42twUMj9mtIid C3lH6kVVB03PHzcod8gkTPdAzDeFf6ZhpUELDSkns4sWa3QnOomC2VRRMRFQAmogOywj QsMw== X-Gm-Message-State: AOAM533Y96jKnpvlRgf+CHbPMojcARynf20hXy1nl8jMZ8HU01gRV3sj UFkEPFdzHfe3/CKyUeKXEKrFuA== X-Google-Smtp-Source: ABdhPJxwiYQXXDUEeHtbmsLbxLXOu8XHctSVgAajb+tJIIv7YVzOyDDXwxj3Wxwxdz4YbQmQoAuUgQ== X-Received: by 2002:adf:a50e:: with SMTP id i14mr10271196wrb.21.1591372087497; Fri, 05 Jun 2020 08:48:07 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id q5sm12740836wrm.62.2020.06.05.08.48.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 08:48:06 -0700 (PDT) From: "Basil L. Contovounesios" To: Pip Cet Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <87tuzpmxii.fsf@tcd.ie> <871rmt1t4g.fsf@gmail.com> Date: Fri, 05 Jun 2020 16:48:05 +0100 In-Reply-To: <871rmt1t4g.fsf@gmail.com> (Pip Cet's message of "Fri, 05 Jun 2020 14:31:43 +0000") Message-ID: <87y2p1ecp6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::434; envelope-from=contovob@tcd.ie; helo=mail-wr1-x434.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 15:48:14 -0000 Pip Cet writes: > "Basil L. Contovounesios" writes: > >> Pip Cet writes: >> >> [...] >> >>> It would not be a quick bug fix for code that uses (propertize "string" >>> 'a 'b). >> >> propertize returns a copy of its argument, so it's not problematic in >> this context. > > Thanks for pointing that out. I hope it was still clear what I meant. It rarely isn't. :) >> My only concern with destructively modifying string literals as in the >> (make-text-button "here" ...) example is that it can "pollute" that >> string literal for all of its users, which is both "rude" and >> unnecessary in this case. I simply find it cleaner, less intrusive, and >> less surprising to modify only one's own copy of a string in such a >> trivial case. I'm not personally concerned with crashes, theoretical >> purity or mutability, or anything like that; for that I defer to you, >> Paul, and other experts. > > I'd like to apologise. I made several mistakes in that email (including > using the word "off-handedly" when a less offensive term would have > done). Most importantly, I think, I was commenting on a change that, as > you correctly point out, made the code cleaner and less surprising, as > though it were a whole-hearted endorsement of breaking any existing code > that is more surprising or less clean. I see now that you said no such > thing. No need to apologise. I figured what you meant, don't take offence, sympathise with your position, and am interested to follow this discussion. I just wanted to establish that this particular commit should=E2=84=A2 be pretty uncontroversial, which I hope I succeeded in doin= g. ;) --=20 Basil From MAILER-DAEMON Fri Jun 05 12:00:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhElP-0005h6-M1 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 12:00:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhElJ-0005bo-Vk for emacs-devel@gnu.org; Fri, 05 Jun 2020 12:00:06 -0400 Received: from [183.249.132.153] (port=1261 helo=localhost) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhElI-0005uN-ON; Fri, 05 Jun 2020 12:00:05 -0400 Received: by localhost (Postfix, from userid 1000) id 7E15324150B; Fri, 5 Jun 2020 23:59:37 +0800 (CST) References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> <83wo4nas3n.fsf@gnu.org> <87v9k6esvy.fsf@gmail.com> <837dwlbu6x.fsf@gnu.org> User-agent: mu4e 1.4; emacs 28.0.50 From: stardiviner To: Eli Zaretskii Cc: numbchild@gmail.com, emacs-devel@gnu.org Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width Reply-To: numbchild@gmail.com In-reply-to: <837dwlbu6x.fsf@gnu.org> Date: Fri, 05 Jun 2020 23:59:36 +0800 Message-ID: <874krpqz9z.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 183.249.132.153 (deferred) Received-SPF: softfail client-ip=183.249.132.153; envelope-from=numbchild@gmail.com; helo=localhost X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 11:59:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 53 X-Spam_score: 5.3 X-Spam_bar: +++++ X-Spam_report: (5.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, FSL_HELO_NON_FQDN_1=0.001, HELO_LOCALHOST=3.828, NML_ADSP_CUSTOM_MED=0.9, RDNS_NONE=0.793, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: reject X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 16:00:06 -0000 =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Eli Zaretskii writes: >> From: stardiviner >> Cc: numbchild@gmail.com, emacs-devel@gnu.org >> Date: Thu, 04 Jun 2020 23:46:09 +0800 >>=20 >> > Can you describe what are you trying to accomplish, and for what >> > purpose? Maybe then we could propose a workaround. >>=20 >> I try to add overlay which is colorized blocks that have line-height bas= ed on >> the org-agenda clocked time. >>=20 >> I hope the overlay can keep line-height even I split window get window w= idth >> decreased. > > I don't think such a feature exist, sorry. maybe someone else can > think of a workaround. I see. Really thanks a lot for answer my question. Eli Zaretskii. =2D --=20 [ stardiviner ] I try to make every word tell the meaning that I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 =2D----BEGIN PGP SIGNATURE----- iQFIBAEBCAAyFiEE8J9lDX1nSBmJJZFAG13xyVromsMFAl7aa+kUHG51bWJjaGls ZEBnbWFpbC5jb20ACgkQG13xyVromsPyRggAo2n++6dYrgOITGiy1LPdfUt7Wefw 15mBsrzr/Vd8ATUVrQu62XbuPh/G30dEKjNXXV2+5sIcC9S7F5wUpSouCpgX+xjs z36S29fr7hjO2NdN3L21wMznKkpFMdFq/zDzotAZmEIC76qnAPf46Nms75MBz1+c QQojiLUW2gShrIDk7me7OwL1yV3YA1V0TqQCCKmGiHAWFwE2wbgmX9we/Pv0FL20 qFR6XHlV8J/k6LZLYpPUQoXUrcCjGXBeVWaUcZhj/1+Xl1gR3YM926ylMqxEaquh 6+Bc8Zc71w2NZ5uaqC+cEhrYG/HFsamgss5Kry4D8bverRfdxvYXBxnveg=3D=3D =3DJIbH =2D----END PGP SIGNATURE----- From MAILER-DAEMON Fri Jun 05 12:17:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhF1o-0001hU-6f for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 12:17:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhF1l-0001gh-3f for emacs-devel@gnu.org; Fri, 05 Jun 2020 12:17:06 -0400 Received: from logand.com ([37.48.87.44]:52448) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhF1i-0001FQ-On; Fri, 05 Jun 2020 12:17:04 -0400 Received: by logand.com (Postfix, from userid 1001) id DC0721A1629; Fri, 5 Jun 2020 18:15:53 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Eli Zaretskii , Arthur Miller Cc: sb@dod.no, rms@gnu.org, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <83sgf9a6rb.fsf@gnu.org> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <833679boji.fsf@gnu.org> <83sgf9a6rb.fsf@gnu.org> Date: Fri, 05 Jun 2020 18:15:50 +0200 Message-ID: <87d06dv689.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 12:15:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 16:17:06 -0000 Eli Zaretskii writes: > See window-text-pixel-size as one example of what we have. The > underlying functionality is even more powerful. (window-text-pixel-size) returns nonsense in console. >> > We already can display such thin lines, see, for example, help-fns.el >> > (search for ":height"). No X-level graphics is needed. X graphics is seems to be needed. From MAILER-DAEMON Fri Jun 05 12:18:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhF2o-0002uc-LL for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 12:18:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35080) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhF2n-0002rs-0m for emacs-devel@gnu.org; Fri, 05 Jun 2020 12:18:09 -0400 Received: from [183.249.132.153] (port=1466 helo=localhost) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhF2l-000201-Si; Fri, 05 Jun 2020 12:18:08 -0400 Received: by localhost (Postfix, from userid 1000) id 7E15324150B; Fri, 5 Jun 2020 23:59:37 +0800 (CST) References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> <83wo4nas3n.fsf@gnu.org> <87v9k6esvy.fsf@gmail.com> <837dwlbu6x.fsf@gnu.org> User-agent: mu4e 1.4; emacs 28.0.50 From: stardiviner To: Eli Zaretskii Cc: numbchild@gmail.com, emacs-devel@gnu.org Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width Reply-To: numbchild@gmail.com In-reply-to: <837dwlbu6x.fsf@gnu.org> Date: Fri, 05 Jun 2020 23:59:36 +0800 Message-ID: <874krpqz9z.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 183.249.132.153 (deferred) Received-SPF: softfail client-ip=183.249.132.153; envelope-from=numbchild@gmail.com; helo=localhost X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 11:59:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 53 X-Spam_score: 5.3 X-Spam_bar: +++++ X-Spam_report: (5.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, FSL_HELO_NON_FQDN_1=0.001, HELO_LOCALHOST=3.828, NML_ADSP_CUSTOM_MED=0.9, RDNS_NONE=0.793, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: reject X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 16:18:09 -0000 =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Eli Zaretskii writes: >> From: stardiviner >> Cc: numbchild@gmail.com, emacs-devel@gnu.org >> Date: Thu, 04 Jun 2020 23:46:09 +0800 >>=20 >> > Can you describe what are you trying to accomplish, and for what >> > purpose? Maybe then we could propose a workaround. >>=20 >> I try to add overlay which is colorized blocks that have line-height bas= ed on >> the org-agenda clocked time. >>=20 >> I hope the overlay can keep line-height even I split window get window w= idth >> decreased. > > I don't think such a feature exist, sorry. maybe someone else can > think of a workaround. I see. Really thanks a lot for answer my question. Eli Zaretskii. =2D --=20 [ stardiviner ] I try to make every word tell the meaning that I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 =2D----BEGIN PGP SIGNATURE----- iQFIBAEBCAAyFiEE8J9lDX1nSBmJJZFAG13xyVromsMFAl7aa+kUHG51bWJjaGls ZEBnbWFpbC5jb20ACgkQG13xyVromsPyRggAo2n++6dYrgOITGiy1LPdfUt7Wefw 15mBsrzr/Vd8ATUVrQu62XbuPh/G30dEKjNXXV2+5sIcC9S7F5wUpSouCpgX+xjs z36S29fr7hjO2NdN3L21wMznKkpFMdFq/zDzotAZmEIC76qnAPf46Nms75MBz1+c QQojiLUW2gShrIDk7me7OwL1yV3YA1V0TqQCCKmGiHAWFwE2wbgmX9we/Pv0FL20 qFR6XHlV8J/k6LZLYpPUQoXUrcCjGXBeVWaUcZhj/1+Xl1gR3YM926ylMqxEaquh 6+Bc8Zc71w2NZ5uaqC+cEhrYG/HFsamgss5Kry4D8bverRfdxvYXBxnveg=3D=3D =3DJIbH =2D----END PGP SIGNATURE----- From MAILER-DAEMON Fri Jun 05 12:31:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhFFI-0004EM-S4 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 12:31:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37354) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhFFG-0004Az-Vz for emacs-devel@gnu.org; Fri, 05 Jun 2020 12:31:02 -0400 Received: from [183.249.132.153] (port=1771 helo=localhost) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhFFF-0005YQ-1D; Fri, 05 Jun 2020 12:31:02 -0400 Received: by localhost (Postfix, from userid 1000) id 7E15324150B; Fri, 5 Jun 2020 23:59:37 +0800 (CST) References: <8C0A9F18-AF7B-4C50-8625-229456BF40E4@gnu.org> <835zc8ciqb.fsf@gnu.org> <87a71jlky8.fsf@gmail.com> <83wo4nas3n.fsf@gnu.org> <87v9k6esvy.fsf@gmail.com> <837dwlbu6x.fsf@gnu.org> User-agent: mu4e 1.4; emacs 28.0.50 From: stardiviner To: Eli Zaretskii Cc: numbchild@gmail.com, emacs-devel@gnu.org Subject: Re: [BUG] ov property line height failed on lone length line when exceeded window width Reply-To: numbchild@gmail.com In-reply-to: <837dwlbu6x.fsf@gnu.org> Date: Fri, 05 Jun 2020 23:59:36 +0800 Message-ID: <874krpqz9z.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 183.249.132.153 (deferred) Received-SPF: softfail client-ip=183.249.132.153; envelope-from=numbchild@gmail.com; helo=localhost X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 11:59:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 53 X-Spam_score: 5.3 X-Spam_bar: +++++ X-Spam_report: (5.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, FSL_HELO_NON_FQDN_1=0.001, HELO_LOCALHOST=3.828, NML_ADSP_CUSTOM_MED=0.9, RDNS_NONE=0.793, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: reject X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 16:31:03 -0000 =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Eli Zaretskii writes: >> From: stardiviner >> Cc: numbchild@gmail.com, emacs-devel@gnu.org >> Date: Thu, 04 Jun 2020 23:46:09 +0800 >>=20 >> > Can you describe what are you trying to accomplish, and for what >> > purpose? Maybe then we could propose a workaround. >>=20 >> I try to add overlay which is colorized blocks that have line-height bas= ed on >> the org-agenda clocked time. >>=20 >> I hope the overlay can keep line-height even I split window get window w= idth >> decreased. > > I don't think such a feature exist, sorry. maybe someone else can > think of a workaround. I see. Really thanks a lot for answer my question. Eli Zaretskii. =2D --=20 [ stardiviner ] I try to make every word tell the meaning that I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 =2D----BEGIN PGP SIGNATURE----- iQFIBAEBCAAyFiEE8J9lDX1nSBmJJZFAG13xyVromsMFAl7aa+kUHG51bWJjaGls ZEBnbWFpbC5jb20ACgkQG13xyVromsPyRggAo2n++6dYrgOITGiy1LPdfUt7Wefw 15mBsrzr/Vd8ATUVrQu62XbuPh/G30dEKjNXXV2+5sIcC9S7F5wUpSouCpgX+xjs z36S29fr7hjO2NdN3L21wMznKkpFMdFq/zDzotAZmEIC76qnAPf46Nms75MBz1+c QQojiLUW2gShrIDk7me7OwL1yV3YA1V0TqQCCKmGiHAWFwE2wbgmX9we/Pv0FL20 qFR6XHlV8J/k6LZLYpPUQoXUrcCjGXBeVWaUcZhj/1+Xl1gR3YM926ylMqxEaquh 6+Bc8Zc71w2NZ5uaqC+cEhrYG/HFsamgss5Kry4D8bverRfdxvYXBxnveg=3D=3D =3DJIbH =2D----END PGP SIGNATURE----- From MAILER-DAEMON Fri Jun 05 12:37:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhFLh-0000cX-EE for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 12:37:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38372) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhFLg-0000Yp-5Q for emacs-devel@gnu.org; Fri, 05 Jun 2020 12:37:40 -0400 Received: from logand.com ([37.48.87.44]:56544) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhFLd-0007O0-Rl; Fri, 05 Jun 2020 12:37:39 -0400 Received: by logand.com (Postfix, from userid 1001) id BE78A1A162A; Fri, 5 Jun 2020 18:37:35 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Juri Linkov , Arthur Miller Cc: Steinar Bang , Richard Stallman , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <87tuzqmskt.fsf@mail.linkov.net> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> Date: Fri, 05 Jun 2020 18:37:31 +0200 Message-ID: <87a71hv584.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 12:15:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 16:37:40 -0000 Juri Linkov writes: > Maybe chromium-browser --print-to-pdf=doc.pdf --headless --disable-gpu > --run-all-compositor-stages-before-draw --no-margins doc.html > or using its wrapper chromehtml2pdf. there are alternatives which don't require malware: abiword --to=PDF -o a.pdf a.html soffice --headless --convert-to pdf a.html wkhtmltopdf -B 24 -L 24 -R 24 -T 24 a.html a.pdf But none of those produce good documents. As an experiment, I tried to produce the ebooks.pdf document from org-mode, exported to html, opened in firefox, printed to pdf. It gave the best result. It looked almost like the original and was easy to tune in org-mode. I only had to iterate a few times. But still, all these solutions require huge dependencies. From MAILER-DAEMON Fri Jun 05 13:01:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhFib-00082J-L1 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 13:01:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42296) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhFiX-0007yj-Ks for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:01:18 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:60206) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhFiW-0004FR-1l for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:01:17 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 055Gq7xV155886; Fri, 5 Jun 2020 17:01:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=+e6IYBeaVyMJaVqqmnNcdAj6jnVbmM//dCEc4k/bZFc=; b=FnleInTObniBAXIybCbcKyqbLDH6bd9qpiXQRcR8ZyBC7jDapo5ztdgrBLSqBg0ra5Nl dzWCVob94aMENQn8faEWsLQCmgT2dUk2m3CRhhBVLCjSHbyP4kk9EroL/n1pOtgL7KAN boQKDllStfUaumpGq8hyv9zkBOMHKvxEaPJ58QLaO6TZs9EQCNzXa8Roloenb7HS9xHU rmbB1DypV/ENncyrxGoZ9/hNn+lIBdFl23gZVAU4IioJRF0k+z+EBb6TcHYhNXjPcO5i T5nrtn26xgxFtJV0t5OOcV9l7gGsYVCimrJKvebBZ2GW+GP0yau2YkHqltBmHjtdh1WZ Lg== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 31f9243ux9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 05 Jun 2020 17:01:12 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 055GnQbJ147751; Fri, 5 Jun 2020 17:01:12 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 31f92t1nhr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 05 Jun 2020 17:01:11 +0000 Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 055H1A3q022613; Fri, 5 Jun 2020 17:01:11 GMT MIME-Version: 1.0 Message-ID: <636e4f34-aa10-4e3b-9d61-af6fa6e8d723@default> Date: Fri, 5 Jun 2020 10:01:08 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Q2zDqW1lbnQgUGl0LUNsYXVkZWw=?= , emacs-devel@gnu.org Subject: =?utf-8?B?UkU6IDMxMzk1NTExOiAiRG9u4oCZdCBhdHRlbXB0?= =?utf-8?B?IHRvIG1vZGlmeSBjb25zdGFudCBzdHJpbmdzIg==?= References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> In-Reply-To: <94615cb2-9eda-7c1d-e55c-f89e007cac80@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxscore=0 malwarescore=0 spamscore=0 suspectscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006050127 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1015 impostorscore=0 adultscore=0 priorityscore=1501 mlxlogscore=999 mlxscore=0 bulkscore=0 lowpriorityscore=0 cotscore=-2147483648 phishscore=0 spamscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006050127 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 13:01:14 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 17:01:19 -0000 > > I don't think this matters much, since string > > literals shouldn't have text properties. >=20 > Really? I've used the reader syntax for propertized > strings a few times =E2=80=94 it's pretty convenient. +1. And not just using reader syntax, i.e., not just #("whatever" ...). =20 "String literals shouldn't have text properties" is an unhelpful and unlispy mantra. It, in effect, marginalizes the use of propertized strings. And to what end - what's the gain that offsets the loss? "String literals appearing in code shouldn't be implemented as constants" is a better mantra, if we need a blanket point of view - hopefully we don't. Privileging byte-compiler optimizations such as treating literal strings in code as constants, over Lisp flexibility, is counter-productive and not worth it. What's lost is greater than what's gained (presumably some space or speed). Just as a (global) symbol is an _object_, with properties, so can an Elisp string be. That's a powerful construct (missing in other Lisps). Expecting users to use `make-string' or some such, to avoid constant-string modification - a la using `cons' or `list' to avoid modifying constant list structure (e.g. quoted lists), isn't very lispy, helpful, or reasonable. This is true whether or not this has long been problematic (accidentally or intentionally). Users should be able to propertize a string written literally in code, and change the properties dynamically, over and over, without inviting trouble. They already know to use `copy-sequence' when they need to ensure a new string and not bother an existing one. That should be about all they ever need to do. We should favor use of Elisp by Emacs users. In general, we shouldn't toss out flexibility and convenience in an attempt to achieve general-programming language features such as high performance. It's OK to offer high performance if there's no cost in convenience or flexibility, or if that cost is really worth it. And it's OK to offer it optionally, where the sacrifice is an intentional trade-off (by a user). If you go the other way on this, then we at least need to provide a simple way to manipulate strings with properties - something simpler than fiddling with `make-string' and `copy-sequence' as often as we need to use `cons', `list', and their backquote-comma equivalents to avoid the gotcha of modifying a quoted list. If I use `copy-sequence' once, to ensure that I don't bother an existing string, I should be able to modify my new string over and over, especially its text properties. A quoted list that gets modified is bad enough as a gotcha. Many users never modify list structure, and the doc makes clear when some function does that. And we try to document that modify-quoted-list gotcha explicitly. Not perfect, but we do try to help users with that gotcha. Modifying _symbol_ properties isn't a problem because there is only ever one symbol with a given name interned in a given obarray, and the properties are separate from the obarray. The obarray just holds the symbol identifier. Modification of string properties needs to be dealt with and documented reasonably, somehow. Currently we can't rely on something like an obarray, as we do with symbols. And probably more users will modify string properties than list structure, so we need a solution that is at least as good as the way we handle the list gotcha. Modifying the _chars_ in a string might be a different story. It's string properties I'm mostly concerned about here. We should look for a reasonable solution that helps Emacs users, and not just favor compiled code performance. I know that more than the compiler is involved. There's also the reader. I'm asking for a solution that makes modifying string properties less, not more, problematic. And barring any advance in the direction I'm suggesting, let's at least try to give users good, clear doc about whatever gotchas do exist for modifying string text properties. That's not the best solution, but it's a necessary fallback if nothing is improved in this regard in the code. Just one opinion. +1 for propertized strings, a wonderful Emacs-Lisp feature. From MAILER-DAEMON Fri Jun 05 13:14:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhFvA-0001ls-Lo for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 13:14:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhFv8-0001l7-76 for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:14:18 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:45563) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhFv6-0006Vw-Az for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:14:17 -0400 Received: by mail-wr1-x433.google.com with SMTP id c3so10495536wru.12 for ; Fri, 05 Jun 2020 10:14:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=AxIzAzPacg4MvExphyNONBlFFxmBUNDj5Hk45GXawMs=; b=abJN2Nhh9NeahA1doVihpDe15Q2r1ZBpsMoIjzHjGl5b2HBY7ZWDdWlqOAk/+EJKg4 l9gRSDlcgE8d35a1TSBgIqdQW9yAwUPDq6AuMjB4e7vQ77dcxOkhklKi8ZYZQNKJMvo9 w+DGQQ9G1kAzfcaSBB4XDmNDbL8ywkGbXjqhboNPwKzI/1neP6mpgHSZMPW0NlTkkOiB WQsqtvmS6i/cdW105jp6wFn9a1S699T5ywfG1jvWC9726xLGyn4jpBdMOUpfplYUPqkF OKPbrB+6JwWidvgY4x8f8cAdr4uUnk+eN4tzULNw4nZMQ1n4L4JT9hi6Myh392ai3pq+ 0DaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=AxIzAzPacg4MvExphyNONBlFFxmBUNDj5Hk45GXawMs=; b=GuHzHasycGmKBGVZ3Q23Vu/B2Umh9/TRQQHBTLV5UFkML9CndD6T0RCqclKK6XeYnJ 4KJQjw19aWyEjTeCz2iHb5Bk4RV13GpJ7lANmMmTOkToW55yET1YadN3Jfiavv0p1qY/ 18b/GAGfKIeV+F02pVl8gF4FHfwtUP+emq/J/FCGN9pmWl/kyH/ugdddIiR2nfr7WzfW RdPfut3C5PFpO+e0DJI0x5kUd06rNkyG/YCLwUrwug87VtF48+jKYdEKL/c4E0mN7+wR Ub8cb8w2AuXz7WyVVRdPLXnahLlS51IxFLwX8WGtmBq76MlicQEGrHh8X8s3QbK2gZEg s5Ew== X-Gm-Message-State: AOAM531fsgLlpwgB70SsDe7cCAiWlLcvz5wdkzleS+55FhyrzEmLQkJi oM3mry5b15eBPOqGOpVSKx17cNRi X-Google-Smtp-Source: ABdhPJxJfPmpFW3szwRBLY3U5qz8zxSnCi6n86WUXDyMYev1HKE8OeWTsuWtjK3Db+lTR0mG9+fVWg== X-Received: by 2002:a5d:4a8a:: with SMTP id o10mr10491764wrq.222.1591377254361; Fri, 05 Jun 2020 10:14:14 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d17sm14400570wrg.75.2020.06.05.10.14.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2020 10:14:13 -0700 (PDT) Sender: DG Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Paul Eggert Cc: Pip Cet , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> From: Dmitry Gutov Message-ID: Date: Fri, 5 Jun 2020 20:14:12 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <873679lel3.fsf@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=raaahh@gmail.com; helo=mail-wr1-x433.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 17:14:18 -0000 On 05.06.2020 18:25, João Távora wrote: > But if you evaluate it, that doesn't happen, which is probably even > worse. > > And this is even stranger, IMO: > > (defun example-bug2 () > (eq (make-text-button > "example" nil > 'action (lambda (_) (message "action 1"))) > (make-text-button > "example" nil > 'action (lambda (_) (message "action 2"))))) > > (defun example-bug3 () > (eq "example" "example")) > > (defun example-bug4 () > (let ((str1 "example") > (str2 "example")) > (eq str1 str2))) > > (list (example-bug2) (example-bug3) (example-bug4)) > > when compiled, last form returns (t nil t) in emacs 27, > when compiled, last form returns (nil nil t) in emacs 28. > when evaluated, last form returns (nil nil nil) in emacs 28. > > For comparison, example-bug4 is valid Common Lisp and will return nil in > every Common Lisp implementation I know (I tested with ACL and SBCL), > regardless of whether compiled or evaluated. I'm reasonably confident > there's somewhere in the Hyperspec where that behaviour may be specified > (I trust some CL pope will find it for me;-) ) FWIW, it's a non-intuitive limitation for me as well. But you can give bug#40671 a read, so see some context you might be missing. From MAILER-DAEMON Fri Jun 05 13:20:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhG1A-0003Wl-B9 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 13:20:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhG18-0003VN-W3 for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:20:31 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:35958) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhG17-0007nU-Q7 for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:20:30 -0400 Received: by mail-wm1-x32d.google.com with SMTP id d128so9850489wmc.1 for ; Fri, 05 Jun 2020 10:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=8q23OO1VLRQr/KibmsFfFgROXF6+Jbcz+VVqx1SfgrA=; b=pTFGd9M1gsogzhZlamsr7jIWE+oGEmLkS/M5F4uv3L0gsxpSqrfCQHVsWlbCBJDFgr +8uJxQSUAARBezJwbW65Jfu+FY/OQ9OvHRvSftPg5VYrTSjhauvIqeTd8hltX7TkhI2w Jzw4uh1a0n0JLouGGBPyNhZJKZqYJduVABN12AQI8fZqxpAmRWQU74dvZ2ibdlxVeDDP EQMl9Pig5aRjuTj8KwQVStWCMk/o6ib9I8s5v5V9zUNBQZr29skTAup1XSyJ2fLkKbE0 b0b/wMWYC4J+8h3TUMWE0e6X36be4yaQ4I+Svl4FL4ZJgr8Lgb2F/VZy0QmCwPOCIOVm DNdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=8q23OO1VLRQr/KibmsFfFgROXF6+Jbcz+VVqx1SfgrA=; b=kErNqlOKPve9MHM04eCRvKXo4KlmwRupDQ8XeSJWddr6lbtLJnCobwnpYlof9Il7ve 6Q5sMtraH/oyXQJVvhHIIk+ByBu9kd5Bh7TH9VYp+hRakDMCippaVH5B7OukufI7aAyt 7XuzHvOfyllzCpG2AXMV942/sVAi9lX3u6qOMW+eJbZVwcWfqP7v5EAApJUxHEipsKGV T18TsdY+RuU2IrFRX7vOL3gmDvoPd9CPQrPhtfatBt+QOUKEm62lO37n+EguLLy08I4e z+RsoXWMjgUL75BCTQ4pj+ON6GLQvTl94f5mjXj+FUXbgIHOYaY0zjhVN3T4+vUDhu5K G+cQ== X-Gm-Message-State: AOAM530UPBVFTpJluziL/LUiHiebYGX2rmSm6T3GTDvzjQXVd4bbzF1N r1yZFBqIgwMOEHlSmKkE5PY= X-Google-Smtp-Source: ABdhPJwovMJ5/fhrIEsuV9TUbC8xx3dlNIDKSpSpcA3d4aWfhQxgLuH+X8O3f+6yh/Pxf8b1JqYHUg== X-Received: by 2002:a05:600c:210:: with SMTP id 16mr3953179wmi.185.1591377628147; Fri, 05 Jun 2020 10:20:28 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id p7sm12568974wro.26.2020.06.05.10.20.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2020 10:20:27 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: "Philip K." Cc: simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org, juri@linkov.net References: <87a71hvi3b.fsf@bulbul> <87a71hsjf0.fsf@warpmail.net> From: Dmitry Gutov Message-ID: Date: Fri, 5 Jun 2020 20:20:25 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87a71hsjf0.fsf@warpmail.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32d.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: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 17:20:31 -0000 On 05.06.2020 16:59, Philip K. wrote: > philip@warpmail.net (Philip K.) writes: > >> Sure, I'll try it out. > > An initial attempt attached below. Thank you. Should it be -execute-command or -execute-extended-command? > It seems like everything works, the > only thing I wasn't sure about was execute-extended-command's "typed" > argument, since it seems to always be nil, when invoked interactivly? It seems to be set during previous invocation? In any case, it's only used for shorter typing suggestions, so it's probably not important here. From MAILER-DAEMON Fri Jun 05 13:32:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhGCz-00083T-6r for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 13:32:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhGCy-00083K-0t for emacs-devel@gnu.org; Fri, 05 Jun 2020 13:32:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42958) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhGCv-0001zb-Hu; Fri, 05 Jun 2020 13:32:41 -0400 Received: from [176.228.60.248] (port=4376 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhGCo-0007M6-Gu; Fri, 05 Jun 2020 13:32:34 -0400 Date: Fri, 05 Jun 2020 20:32:24 +0300 Message-Id: <83o8pxa05z.fsf@gnu.org> From: Eli Zaretskii To: Tomas Hlavaty Cc: arthur.miller@live.com, sb@dod.no, rms@gnu.org, emacs-devel@gnu.org In-Reply-To: <87d06dv689.fsf@logand.com> (message from Tomas Hlavaty on Fri, 05 Jun 2020 18:15:50 +0200) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <833679boji.fsf@gnu.org> <83sgf9a6rb.fsf@gnu.org> <87d06dv689.fsf@logand.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 17:32:44 -0000 > From: Tomas Hlavaty > Cc: sb@dod.no, rms@gnu.org, emacs-devel@gnu.org > Date: Fri, 05 Jun 2020 18:15:50 +0200 > > Eli Zaretskii writes: > > See window-text-pixel-size as one example of what we have. The > > underlying functionality is even more powerful. > > (window-text-pixel-size) returns nonsense in console. It does? Can you show an example? Or, better yet, make a bug report about the problematic case(s)? > >> > We already can display such thin lines, see, for example, help-fns.el > >> > (search for ":height"). No X-level graphics is needed. > > X graphics is seems to be needed. You need a GUI frame (not necessarily on X), but that's all. There's no need to expose Xlib calls to Lisp, which was what the original question was about. From MAILER-DAEMON Fri Jun 05 14:17:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhGuk-00082i-FQ for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 14:17:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53138) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhGui-00082V-MF for emacs-devel@gnu.org; Fri, 05 Jun 2020 14:17:56 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:50578) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhGuh-0003xe-1u for emacs-devel@gnu.org; Fri, 05 Jun 2020 14:17:55 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 69B251600B5; Fri, 5 Jun 2020 11:17:51 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id K61k4anHMFcD; Fri, 5 Jun 2020 11:17:50 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9F49F1600D1; Fri, 5 Jun 2020 11:17:50 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id g-5sqvXMIBSQ; Fri, 5 Jun 2020 11:17:50 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 6F9AE1600B5; Fri, 5 Jun 2020 11:17:50 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Pip Cet Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> Date: Fri, 5 Jun 2020 11:17:47 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87img51y04.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 14:17:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 18:17:56 -0000 On 6/5/20 5:46 AM, Pip Cet wrote: > I get the impression we > shouldn't discount the possibility that the current way of doing things > (after pure space) isn't so bad at all: all strings, vectors, and cons > cells are mutable to the same extent. That's not the current way of doing things, and although the area is murky there have always been Emacs Lisp objects that are not mutable. For example: (aset (symbol-name 'cons) 0 ?d) This signals "Attempt to modify read-only object" error in Emacs 25, and makes Emacs dump core in Emacs 27. And there are other cases like that. Obviously we need to do better in the dumping-core area. When we do that, we have an opportunity to simplify and/or document behavior in this area. If we decide to simplify/document by saying "all strings are modifiable" then we'll need significant work at both the C and Lisp level to do that. This will hurt performance a bit since it will disable some optimizations. If we decide to simplify/document by saying "an error is thrown if you try to modify a string literal" then we'll need to add some code to do that. I have a draft of something along those lines. It doesn't hurt performance significantly in my standard benchmark of 'make compile-always'. Although it invalidates some existing code, such code is quite rare and is already relying on undefined behavior. If we decide to leave things alone, they will remain complicated and murky. From MAILER-DAEMON Fri Jun 05 14:37:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhHDk-0007AP-B7 for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 14:37:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55372) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhHDi-0007AA-QN for emacs-devel@gnu.org; Fri, 05 Jun 2020 14:37:34 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:54562) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhHDh-0000Yw-1V for emacs-devel@gnu.org; Fri, 05 Jun 2020 14:37:33 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A12A01600D1; Fri, 5 Jun 2020 11:37:30 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id jvUGkSxtVfki; Fri, 5 Jun 2020 11:37:29 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id E45F41600B5; Fri, 5 Jun 2020 11:37:29 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id mxCJ8qKAlEN1; Fri, 5 Jun 2020 11:37:29 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id B3F7A1600D1; Fri, 5 Jun 2020 11:37:29 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: Pip Cet Cc: "Basil L. Contovounesios" , =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <87d06f5m2c.fsf@gmail.com> <87lfl3f5mj.fsf@tcd.ie> <87k10m4l5v.fsf@gmail.com> <8e691d13-8db0-2066-8725-ea8afab7c506@cs.ucla.edu> <87wo4l267s.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <4c49ba45-9cbf-db28-aea5-b53cdd6f4857@cs.ucla.edu> Date: Fri, 5 Jun 2020 11:37:29 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87wo4l267s.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 14:17:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 18:37:35 -0000 On 6/5/20 2:48 AM, Pip Cet wrote: >> they can be coalesced, or retained, or put into read-only memory. > > Really? Is there code in Emacs (other than purecopy, which isn't the > problem here) that does any of that today? Sure, the byte-compiler coalesces strings with identical contents. If you change one you change them all. And some built-in strings are put into read-only memory now. > if text properties aren't part of "the string itself", they can be > given text properties. I was thinking of just mimicking the traditional Elisp behavior that you can't give modify the text properties of readonly strings. Of course if we want to allow that sort of thing we could - but it sounds to me like a feature that's more trouble than it's worth. I doubt there's a much legacy code out there that depends on modifying text properties of string constants, since it wasn't allowed until quite recently and was allowed more as an accident than anything else. From MAILER-DAEMON Fri Jun 05 17:54:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhKIA-0005sV-PE for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 17:54:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhKI8-0005s7-V2 for emacs-devel@gnu.org; Fri, 05 Jun 2020 17:54:20 -0400 Received: from logand.com ([37.48.87.44]:58702) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhKI3-0003zv-R7; Fri, 05 Jun 2020 17:54:20 -0400 Received: by logand.com (Postfix, from userid 1001) id 025BF1ACD99; Fri, 5 Jun 2020 23:54:10 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: rms@gnu.org, Steinar Bang Cc: emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Date: Fri, 05 Jun 2020 23:54:08 +0200 Message-ID: <87zh9hrxfj.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 17:54:12 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 21:54:21 -0000 Richard Stallman writes: > When I write a pamphlet using Libre Office, I need to see how it > will appear on the page. I need to see where line breaks and paragraph > breaks appear. > > I want Emacs to be able to do tect processing that way. What are the missing pieces? I think there are many and they would be useful for other use-cases. Some of the use-cases I am interested in: 1) Sometimes, I need to write a letter which does not need to be an art work. I wrote emacs-pdf (see ) to address that. It creates a PDF document from an Emacs buffer. Only plain, monospace ASCII text works so far, but it can already break and count pages and insert headers and footers. It is very short (about 400 lines of elisp including comments) and requires no dependencies and no graphics. a) The next step will be unicode. It seems that there is some code in Emacs dealing with unicode fonts in order to generate postscript files. Any pointers where to start with this? b) After that, emacs-pdf will understand font metrics so it will be possible to do layout. It should be possible to render HTML for example, and create graphical web browser as an alternative to eww. It should also be possible to render other formats like abw, odt, etc. At least roughly, depending on how much detail in the corresponding spec people want to address. I have explored simple conversion to text in pure elisp in emacs-unoffice . It should be possible to write a direct PDF backend for org-mode and maybe enriched-mode. Internally, probably some kind of html like sexp based format should be used. I used a sexp based format in emacs-pdf (transient cons tree representation) but for document processing, the format should not be so low level (e.g. no PDF drawing primitives but something like HTML primitives; or maybe mixed). c) It should not be difficult to add raster images and vector graphics to the PDF drawing code. d) It should be possible to add for example SVG backend. Non-console Emacs can already draw SVG. At least at the beginning, this would also avoid the need for image rasterisation if vector format like PDF or SVG is used. Maybe this could be used for real-time preview, before we get WYSIWYG. Or maybe use pdf-tools to view the generated PDF. 2) Printing is an issue in Emacs. I will try to implement an alternative which will use IPP and PDF. No PostScript, no CUPS, if possible no complex configuration. 3) I use Emacs on the console a lot. All the above should work there too. In order to view images in console Emacs, I wrote . So far there are a few functions that draw images using w3mimgdisplay from the w3m console web browser. It fits images on the screen, unlike graphical Emacs where image display is unuseable. a) I would like image-mode just work with this emacs-framebuffer image drawing. Any ideas, how to plug emacs-framebuffer into image-mode? b) It is a shame, that I need to reimplement such basic functions like image-size: (image-size (create-image "/tmp/a.jpg")) => (error "Window system frame should be used") framebuffer-image-size at https://logand.com/sw/emacs-framebuffer/file/emacs-framebuffer.el.html#l95 does not require any dependencies and computes image size for png, jpeg, bmp, gif, tiff and pnm in elisp. It would be nice to eliminate or at least reduce the need for such dependencies so that many Emacs features are useable in different environments, like for example console. c) There are functions frame-width and frame-height. Are there also functions something like buffer-width and buffer-height and or a way to compute x and y position relative to frame origin, which would allow me to position images exactly in the buffer similar to what w3m browser does? 4) Emacs is missing some kind of canvas, where things could be drawn and which would handle pixel precise input. For example, I would like to browse OpenStreetMap in Emacs. I wrote a console based OSM browser osmq and web-based OSM browser at . I would prefer an Emacs based map browser. However, I have not figured out how to lay out images in Emacs in a grid and how to detect which image was clicked. A bonus would be, where exactly was clicked. Any ideas what should I look into? Emacs canvas should probably work like HTML canvas, which is rather similar to PDF or PostScript in terms of drawing interface. I have explored this space in the PostScript interpreter in JavaScript . Not sure how difficult it would be to plug some kind of portable canvas into Emacs. This seems rather low level C work. It seems to me that these points are precondition for a WYSIWYG document editor feature in Emacs. Do these points resonate here? Is somebody already implementing anything mentioned? Or what is already implemented? Would there be an interest in incorporating emacs-pdf, emacs-unoffice and emacs-framebuffer (the framebuffer-image-size function?) into Emacs? Regards, Tomas From MAILER-DAEMON Fri Jun 05 18:48:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhL8x-0005Vt-HX for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 18:48:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhL8w-0005Vj-82 for emacs-devel@gnu.org; Fri, 05 Jun 2020 18:48:54 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:38092) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhL8v-0006tM-C9 for emacs-devel@gnu.org; Fri, 05 Jun 2020 18:48:53 -0400 Received: by mail-wr1-x429.google.com with SMTP id e1so11261319wrt.5 for ; Fri, 05 Jun 2020 15:48:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=zhMuxHfs06ApvRaYkskITNBjafRvDsxYg6G27JnLbKY=; b=LfP6T0MHSes23DzmZ3sJmEx/XiUfTvh4OQ+Qi7ud9DPEzWD+pB68gfs6b0kmwqdhbU YBBIl/2kt/dVzk1+2LaFAHhBzvAU2gHyPTMTY/L0wz+g2G7cd+YsAwV5+Kx4JEX0HTdd MBtj3wjygXpHtL7ng7h0QaeP+SAaEfmw5PeiIVFOeR1CcH75PFhwKl0W331D4mzRqJhx kdddy+XItBWN2g+e05ntnGlrrWCdIolI+p+wIoSOLJ8LWWhlia85XnKJe6v6tjFJ2hEn GYLO23B07U/3d6/gpmMynnhdeXpHoFWA7R5VCfDLrOOiQWymLkPpctd9InHpTw5VYSRA B9tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=zhMuxHfs06ApvRaYkskITNBjafRvDsxYg6G27JnLbKY=; b=WMa3d5xJkLg2gtLuEhH8cnpCubHsEKUK0+nJT8yLs1QLIt17sPb5MH98z3BulCnGxy IsOu3DIwoNV5KLkz6FkLREKbzVHlZnO3Ycs4Su2jpzww1l1IVELIFvm3pf8V7HoY5njL V5jfYUJV0r4vcMPZyfeqnB5Jehz92H1t3zmmhqE/P5tQ4L5kR1MExq1CCqiDosH76HsL 36S5xBFn1wc4bDvbvOvFLE+1UxjMxMmRL/GOw5XJTRwDCc+ruDtYHVh3GE0OGbViUGr6 60Rgo4+j2mJmUXzZagZkzgkI8rGcfd0FPCVaW6tzuTUvAYD5zqpQZojnOJiZdWRr4tQq KJNw== X-Gm-Message-State: AOAM532+hjfyH28j3pY6eTzEWuyRWOUM9zoeTRNH5rMMtgjgYWo+OvzU n8E1cnOtzGGjSy8vB0y20WI= X-Google-Smtp-Source: ABdhPJzAil8qXsxoHkWxNObHFI05tB0bOge9U1wtvDGJaJelz2f95rq6AWovM0GlIuqIKEpZogsssw== X-Received: by 2002:adf:f4c6:: with SMTP id h6mr12119247wrp.398.1591397330913; Fri, 05 Jun 2020 15:48:50 -0700 (PDT) Received: from krug ([89.180.147.39]) by smtp.gmail.com with ESMTPSA id d16sm13124796wmd.42.2020.06.05.15.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 15:48:50 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Andrew Schwartzmeyer Cc: emacs-devel@gnu.org, Stefan Monnier Subject: Re: Should (icomplete-mode) explicitly disable fido-mode? In-Reply-To: <7ADEE954-6074-4C8E-9EB7-7BF93F6F46BD@schwartzmeyer.com> (Andrew Schwartzmeyer's message of "Thu, 4 Jun 2020 10:49:05 -0700") References: <7ADEE954-6074-4C8E-9EB7-7BF93F6F46BD@schwartzmeyer.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Date: Fri, 05 Jun 2020 23:48:38 +0100 Message-ID: <87o8pxjfi1.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x429.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 22:48:54 -0000 Andrew Schwartzmeyer writes: > icomplete-vertical calls (icomplete-mode), I think expecting it to be > idempotent (not have any effect if icomplete-mode is already enabled), > but in fact, since fido-mode is currently enabled this explicitly > disables it and switches to the base icomplete-mode, as the mode > functions icomplete-mode and fido-mode act like toggles of each > other. But isn't the end result what icomplete-vertical is after? i.e. icomplete with some kind of verticality added? Or were you expecting icomplete-vertical to add verticality to fido-mode? > Should (icomplete-mode t) perhaps do nothing if fido-mode is already > enabled? Maybe. > I=E2=80=99m not sure. Obviously the package can workaround it (given > my patch), but I think it=E2=80=99s unexpected to have to avoid calling > (icomplete-mode) if the icomplete-mode var is already t. What do you > think? It's a tricky situation, indeed. Fido-mode sets the icomplete-mode variable for effects, i.e. to have some functions that check that variable behave differently. But tries not to "be" icomplete-mode. Maybe Stefan Monnier would have something to say about this Jo=C3=A3o From MAILER-DAEMON Fri Jun 05 19:19:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhLcF-0002WH-8A for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhLcE-0002W3-Ag for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:10 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:36817) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhLcC-00058c-RA for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:09 -0400 Received: by mail-wr1-x436.google.com with SMTP id q11so11306232wrp.3 for ; Fri, 05 Jun 2020 16:19:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=k8tYok/skZbOsxkFP/iMN2XrcK+xwamBsI1lpgsjlRA=; b=j/Lj+BZQUBoa7929x8WkOJGvQFch9h7wGzAqcoOpJtsX1fd5hrFU1rVW91O5otbYeE WXjXzOypZbXIoExunEVleHPZgW5PSuveCrwFGSCNALhHOgJBqS1Tu3OcqRVqQ2u6darw StL3eNreAKHVwqtBMe2wU0zZUmxbCekLzdePABUNTwtukuhSZffVpkZd7BfSSwDSmQmn FB+rG8u5hoBccIRVhDNaq3LPMIuneSDCFFVmU6g6s97VBoZC98V7jrH/Ldez4ZXsUwT4 9UDlK93nlD/y/QSyRD8eaFjRYEN+5EQFb8g5PB9VSGA6mAyS3zslHi1mRLMwU/DdeJlX 4Y5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=k8tYok/skZbOsxkFP/iMN2XrcK+xwamBsI1lpgsjlRA=; b=ZsYL4+N0QgSmnGB0U23/EEHURgz0Gz0utzfzHDxcYLS9WZ6reoeOHw7l5Ma3gVWO4z 62FcNa7cBv+yK44HK6/JTQodCbFmWcB5yiiQa+z03Xp+lkDKZgqIAilUDg8rQjKGYk+/ qfGueeoKQiO/oe0hLbNXHOWJYfS8r3jYERPJ+vMDtJfElrMPQxA711zqqacvm9V3HmfS iuMhJY7nvCfCYDMiKkGEhF23F5h+zENtmzQniNbUPSfZgkQ+EmbHI8KJfIMe8rXtypJI fQP1nk3O9O3d29Hpy14VFuZJYPA9yo1tK654FDQHnilN+5WSaUxGmrGzSQKtHAQX4WKe AJDw== X-Gm-Message-State: AOAM531jDqNXh4/Muxb7CBU4Q7I0/8aIBz4i0f4hDsxN21ThrKy0eqlW XTf/UkgbNkjzgDjPhy9VfW7DLXm7TMQ= X-Google-Smtp-Source: ABdhPJx9RdiLdF5FJGOpDItcL5VHu0rR0hi01Thdmf0Siy7F2dsxpyUjYqwqQsnxFjQM931k4AwRuA== X-Received: by 2002:a5d:4008:: with SMTP id n8mr11591626wrp.82.1591399146746; Fri, 05 Jun 2020 16:19:06 -0700 (PDT) Received: from krug ([89.180.147.39]) by smtp.gmail.com with ESMTPSA id l204sm13451824wmf.19.2020.06.05.16.19.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 16:19:05 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Dmitry Gutov Cc: Paul Eggert , Pip Cet , emacs-devel Subject: Re: 31395511: =?utf-8?Q?=22Don=E2=80=99t?= attempt to modify constant strings" References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> Date: Sat, 06 Jun 2020 00:19:02 +0100 In-Reply-To: (Dmitry Gutov's message of "Fri, 5 Jun 2020 20:14:12 +0300") Message-ID: <87d06dje3d.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x436.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 23:19:10 -0000 Dmitry Gutov writes: > FWIW, it's a non-intuitive limitation for me as well. > > But you can give bug#40671 a read, so see some context you might be missi= ng. Thanks, that's a pretty long read. There is indeed a relation, but that bug (the first parts) is about modifying literal objects and this particular strangeness seems bigger than that. I totally agree it is undefined behaviour to change structure of literals (quoted or self-evaluating objects), also in Common Lisp, because compilers are probably allowed to reuse parts of the internal structure of such objects. But that's a far cry from having two different manifestations of `equal` such objects _be_ the same object, but only for compiled code. Emacs doesn't behave that way for quoted lists (fortunately), so I don't think it should behave that way for strings either. An "easy" solution would be to say: in Elisp, there are no string literals, period, because properties. But that's likely expensive... unless some clever copy-on-write semantics operate under the hood. But I'm talking out of my elbow, I don't really know what's under the hood here. Jo=C3=A3o From MAILER-DAEMON Fri Jun 05 19:19:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhLd0-0003Iu-Os for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhLcx-0003Gt-TO for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:55 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:7358) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhLcw-0005Jh-Ea for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:19:55 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 36DC1441518; Fri, 5 Jun 2020 19:19:52 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id D8D3C441515; Fri, 5 Jun 2020 19:19:50 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591399190; bh=Z5UrUDgXF58p3zxtGmejmqdokoeWaLHV6MY637ZrYKE=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Rg3f1o2OZ6iyPi8+0A1GXaVKBGF9cuiqR5hvG1KHf6PjBu+Vjy50N44Q7eCL0sKSU VFa5AMOfbc7XBALckNAO/dx69DONEpjDIRSh+L1dsHGNY+Ey9k+SQI35wKeTpXTqhq lFROv+tW02zLPo/XGUZEN8LX2wUSVQyBYW84wYJOf/r5rJ899zYf66y0ESbSLTduQZ zqhEU0/k/TyfeFAuWoDaRA1hQ3itKryBnY7EToZ/JdLol95tGNk+AGttg3we3jrsOb n4IacQxs9NX1+tJ2bh30GXjA2u5h0lAlwAVW/aSSG9RPBGGEFtJUgnKwy7KnZJ7Czm DLnVvzxoKeZrw== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9D3B01220CD; Fri, 5 Jun 2020 19:19:50 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?B?Sm/jbyBU4XZvcmE=?= Cc: Andrew Schwartzmeyer , emacs-devel@gnu.org Subject: Re: Should (icomplete-mode) explicitly disable fido-mode? Message-ID: References: <7ADEE954-6074-4C8E-9EB7-7BF93F6F46BD@schwartzmeyer.com> <87o8pxjfi1.fsf@gmail.com> Date: Fri, 05 Jun 2020 19:19:43 -0400 In-Reply-To: <87o8pxjfi1.fsf@gmail.com> (=?windows-1252?Q?=22Jo=E3o_T=E1vo?= =?windows-1252?Q?ra=22's?= message of "Fri, 05 Jun 2020 23:48:38 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.017 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 19:19:52 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 23:19:56 -0000 > Maybe Stefan Monnier would have something to say about this Probably not ;-) Various behaviors make sense and I don't have a strong opinion about what should happen. The only thing that might be worth investigating is why icomplete-vertical needs to call icomplete-mode when it's already enabled. Maybe we could arrange for this not to be needed at all and avoid the problem. Stefan From MAILER-DAEMON Fri Jun 05 19:32:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhLpE-0006sg-PU for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 19:32:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37986) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhLpD-0006sY-3l for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:32:35 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:40209) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhLpC-0007Q1-69 for emacs-devel@gnu.org; Fri, 05 Jun 2020 19:32:34 -0400 Received: by mail-wm1-x32e.google.com with SMTP id r15so10559604wmh.5 for ; Fri, 05 Jun 2020 16:32:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/TLuHiO6u5+ySoEW6HZ51j5ojt1iXcIFTqqu4QzsRzE=; b=C5I42nW5zx1w4K56P0k1uLLT5xzOAogQNVwoxiXFha551otkSN4L7n09Uts58y6F8q QWBm7qwHkSc9YFYvfvhw6Xp2WHNBZVndeeaXxgpF6R/S08qTLYj5WGs0qUFgOo9gnCRe SsT68dmz5CblAwiuS8a/KzlltDK1/5t5CSisBMsB3KyD5zJz8RixY5GsCTQEZb9e3rOu zYHZ8x9vir07/37dhRxVZlfYMORyiMaKRMfLPCTJ/+ugERNReSAAZUkpxDa4AURVJMvF bSz//G9cXAOU/lQu8Vf9TBdOdmY2m2SZxyGPD4uJwp5wd+h71ZGMx7d3ossQgWPitO/W Ev8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/TLuHiO6u5+ySoEW6HZ51j5ojt1iXcIFTqqu4QzsRzE=; b=Jy2kJ7ytEsoYP8negIUZYwRPzLAGRIboPGUv5V1veJ794nfFE3rht+FPeK8VkYMoxZ N3dgMGIwpoSjnw9rOqyredebeqUU7SWqWnZ2F4LmzVd0FSOu6eNp7+7ALhJdWA7o3kJg SLIolDKLONxySRaYDDLBf6TYOt1FY5QJbj1SF42mivTwVPFJGZ4FvfOvehxMcAdr+WKI 9lDeLJ8cODCs99VVXYSm+kB4gS6TQC+HAOMcTPmjjUvm96MCoRwlQo5lsCN4UKQYfG6G a9NjrC/PH91wFUR2R0aFwNMSL+Je70297/bEzbDWUBSEm4p9KMmK+hveMLIdKShQL9Ut cnJQ== X-Gm-Message-State: AOAM532aDKufSS/gB8mGiF6hnV55+vp1AnANb6JJ80FfQQLhgrouFy3n onUfg6iduuyZ7b0g7/w6nj6N3yYV X-Google-Smtp-Source: ABdhPJxxRsXfqCVJk9CuxuW23ImWhhG5Qi/82diWrjnc8YHvAhyK/wJHZUywgO0m2nxP9bUFT4BkWw== X-Received: by 2002:a05:600c:2313:: with SMTP id 19mr5156508wmo.51.1591399952268; Fri, 05 Jun 2020 16:32:32 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y66sm13316998wmy.24.2020.06.05.16.32.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2020 16:32:31 -0700 (PDT) Sender: DG Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Paul Eggert , Pip Cet , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> From: Dmitry Gutov Message-ID: Date: Sat, 6 Jun 2020 02:32:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87d06dje3d.fsf@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2020 23:32:35 -0000 On 06.06.2020 02:19, João Távora wrote: > There is indeed a relation, but that > bug (the first parts) is about modifying literal objects and this > particular strangeness seems bigger than that. Later it goes deeper than that. > But that's a far cry from having two different manifestations > of `equal` such objects_be_ the same object, but only for compiled > code. That looks suboptimal to me too. I mean, it sounds like a sound optimization (to an extent), but I really wonder if it really buys us much in practice. And we're paying the price of not exactly obvious behavior. From MAILER-DAEMON Fri Jun 05 20:23:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhMcw-000238-1a for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 20:23:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhMct-00022A-T4 for emacs-devel@gnu.org; Fri, 05 Jun 2020 20:23:55 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:54196) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhMcs-00087s-OW for emacs-devel@gnu.org; Fri, 05 Jun 2020 20:23:55 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0560Iv1R090742; Sat, 6 Jun 2020 00:23:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=tzPppZGEgYTnZLKGohknHE9FMdSoytGR5tRh8OCfR9U=; b=sCqjAgAzwecQIg4/Z84+JMWBWSP+5oh5+9pj85uJY/w4oOnJ/svnq4BekudrUclwU9zC y6F5KHuUQVdKq/93Av6ZQIFlnDoJ81XatOW6Lra342IP4yjFIZAk/PmKnRqNI8xG0UEe poZeWAUwncwrgAg7tTRtAoSu67iM9SrwmrnSW6isUcZJCMYLONnacv6sd9gSCDUjMTyY HY9BA9grFy7NDU6tZcTNdMF+1oFd7BmI9rcT6BAHAwP57oATfiSivlsrpHiDFC7UJt7I NYXO1QP+VBAjNO2QPdTahiBo1UrqkMcwqMF4p7A4oLRztTittr1yeed9AV9qW651exSd wA== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 31f92455kt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 00:23:37 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0560HPQt055171; Sat, 6 Jun 2020 00:23:37 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 31g08q8fa0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 00:23:37 +0000 Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 0560NYPI002899; Sat, 6 Jun 2020 00:23:34 GMT MIME-Version: 1.0 Message-ID: Date: Fri, 5 Jun 2020 17:23:31 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Dmitry Gutov Cc: Paul Eggert , Pip Cet , emacs-devel Subject: =?utf-8?B?UkU6IDMxMzk1NTExOiAiRG9u4oCZdCBhdHRlbXB0?= =?utf-8?B?IHRvIG1vZGlmeSBjb25zdGFudCBzdHJpbmdzIg==?= References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> In-Reply-To: <87d06dje3d.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 suspectscore=18 bulkscore=0 adultscore=0 spamscore=0 malwarescore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060000 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1015 impostorscore=0 adultscore=0 priorityscore=1501 mlxlogscore=999 mlxscore=0 bulkscore=0 lowpriorityscore=0 cotscore=-2147483648 phishscore=0 spamscore=0 malwarescore=0 suspectscore=18 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060000 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 20:23:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 00:23:56 -0000 > > But you can give bug#40671 a read, so see some context you might be > missing. >=20 > Thanks, that's a pretty long read. There is indeed a relation, but that > bug (the first parts) is about modifying literal objects and this > particular strangeness seems bigger than that. > > I totally agree it is undefined behaviour to change structure > of literals (quoted or self-evaluating objects), also in > Common Lisp, because compilers are probably allowed to reuse > parts of the internal structure of such objects. Yes. But Common Lisp is a general-programming language. Elisp is for use with Emacs. And it has strings that have properties, like symbols. > But that's a far cry from having two different manifestations > of `equal` such objects _be_ the same object, but only for compiled > code. Emacs doesn't behave that way for quoted lists (fortunately), so > I don't think it should behave that way for strings either. +1. > An "easy" solution would be to say: in Elisp, there > are no string literals, period, because properties. +1. Clean, flexible (dunno how "easy"). > But that's likely expensive... Do we have an idea how expensive? Lots of things are expensive. And some of them are worth it. OK, some Elisp code might make heavy, repeated use of long strings, and maybe some such uses would pay a penalty. Not sure though that the penalty would be large, or "too large". And most Elisp code won't be like that, I expect. Maybe we could have a Boolean variable (which could be made file-local or buffer-local on demand). You could turn it on in some scope or for some extent, to enable some string optimization at the cost of either an occasional gotcha or systematic error-raising when you try to modify etc. Maybe that decision would need to be made at byte-compile time, or maybe the compiled code could (at the cost of being larger) respect it. > unless some clever copy-on-write semantics operate > under the hood. But I'm talking out of my elbow, > I don't really know what's under the hood here. Nor do I, obviously. I just have a hunch that, in general, string optimization isn't worth it for most Lisp code used in Emacs - not worth the loss of being able to comfortably and generally modify string properties. From MAILER-DAEMON Fri Jun 05 21:25:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhNa6-0001Fn-0r for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 21:25:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50080) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNa5-0001Ff-6s for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:25:05 -0400 Received: from ciao.gmane.io ([159.69.161.202]:56240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNa4-0001O2-KU for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:25:04 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jhNa2-000SuM-AK for emacs-devel@gnu.org; Sat, 06 Jun 2020 03:25:02 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Jamie Beardslee Subject: Re: New feature in project.el: Remembering the previously used projects Date: Sat, 06 Jun 2020 13:24:09 +1200 Message-ID: <877dwlm1fq.fsf@gmail.com> References: <87a71hvi3b.fsf@bulbul> <87a71hsjf0.fsf@warpmail.net> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:PPy95r50bE30X7XTqSFuwwMURhM= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 21:25:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 3 X-Spam_score: 0.3 X-Spam_bar: / X-Spam_report: (0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, NML_ADSP_CUSTOM_MED=0.9, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 01:25:05 -0000 --=-=-= Content-Type: text/plain "Philip K." writes: > An initial attempt attached below. It seems like everything works, the > only thing I wasn't sure about was execute-extended-command's "typed" > argument, since it seems to always be nil, when invoked interactivly? I have no idea what's going on with that typed argument, but maybe it would be more sensible to use `call-interactively' just in case? (defun project-execute-extended-command () "Execute an extended command in project root." (declare (interactive-only command-execute)) (interactive) (let ((default-directory (project-root (project-current t)))) (call-interactively #'execute-extended-command))) -- Jamie --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFNBAEBCAA3FiEElxJbPtj12sn/xkPXc0qyklu3X7MFAl7a8DkZHGJlYXJkc2xl ZWphbWllQGdtYWlsLmNvbQAKCRBzSrKSW7dfs83+CACggCCjyUwJDFC6H3ynRL1Y QOo5OpbyJd9gjsB6fTFo/yjx+IFbovJBk9r6ITUCquNj0aI8wQi5g8zkvfUCPSc0 CZO/ok2srDIwLXLwgBoYIbh1SIo0nDO9riz3AUYuJNge558k6szjv7eL+hdR1v4N pNBcleiBeUp2ofZg9nAmuXJtgdMPSYNAP1WBjLBvBdjCrlqfC1njEBNQQTl2yVaB Ker1RisUd+Y44vz+IzZp6EbGjcsEktsu4uJ1UuhtwkGDiPxNjtbzmrzA3e8n5YZm xHq2jSOOgfDkbv+UOvrVrzqlGBvb0GjmoKmWTnDmYXr0QSi8megItsKV/jtNqRqU =ng/1 -----END PGP SIGNATURE----- --=-=-=-- From MAILER-DAEMON Fri Jun 05 21:35:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhNjn-0002v4-VB for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 21:35:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50904) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNjm-0002un-Kz for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:35:06 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:52424) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNjl-0003TA-E3 for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:35:06 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0561X0KM004162; Sat, 6 Jun 2020 01:34:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=LlgROhJs754x0WIERpV1q0YUAP3wpYACCOoGXMQmlqc=; b=aEy+98UFn2vmDF8WxuA65zgqylAO10WVfqAbbsunEuDJjSS99aPhdv5mh2repDqIeYYo IRsLSfx/184IjkDzQgfOtVWcnJU/PJ6H8/1DTfubKuMxLKNmf/wQyKvokcg3PLnFte+V s4/Cp6x8UyDKlGf28x5olquDMdQEE3VDvhttSFUtc7gvmTOaOp1XFK2VMHovzBdJSz3H fZaAeV9Eof9WmJ9Yd8uOpxYCgKv9TRngDK5gM6X1eFz2ymDS7ljlP+FHDNQdl73xx21K utfE/U4cSOEsQTeGoVo5cid06y8/88J3CslpzZyK3nFNqZXW1f39kqpxDcSwKIggO7S0 iQ== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2120.oracle.com with ESMTP id 31f926570d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 01:34:55 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0561XQ8D154301; Sat, 6 Jun 2020 01:34:55 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userp3030.oracle.com with ESMTP id 31g08q9rxa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 01:34:55 +0000 Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 0561YrqV029404; Sat, 6 Jun 2020 01:34:53 GMT MIME-Version: 1.0 Message-ID: <19454d0f-cf93-4fac-8a11-3f4ba5c52886@default> Date: Fri, 5 Jun 2020 18:34:50 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Dmitry Gutov Cc: Paul Eggert , Pip Cet , emacs-devel , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Subject: =?utf-8?B?Rlc6IDMxMzk1NTExOiAiRG9u4oCZdCBhdHRlbXB0?= =?utf-8?B?IHRvIG1vZGlmeSBjb25zdGFudCBzdHJpbmdzIg==?= References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 suspectscore=18 bulkscore=0 adultscore=0 spamscore=0 malwarescore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060007 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9643 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 suspectscore=18 cotscore=-2147483648 bulkscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 malwarescore=0 mlxlogscore=999 spamscore=0 lowpriorityscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060007 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 21:35:03 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 01:35:06 -0000 (Guess I forgot to use Reply All. Re-sending.) > > [bug#40671] is about modifying literal objects and this > > particular strangeness seems bigger than that. >=20 > Later it goes deeper than that. >=20 > > But that's a far cry from having two different manifestations > > of `equal` such objects _be_ the same object, but only for > > compiled code. > > That looks suboptimal to me too. I mean, it sounds like a sound > optimization (to an extent), but I really wonder if it really buys us > much in practice. And we're paying the price of not exactly obvious > behavior. Exactly the question - is it worth anything? Is it worth the cost of unclear and less useful behavior? From MAILER-DAEMON Fri Jun 05 21:43:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhNrd-0004So-Oh for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 21:43:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNrb-0004Sb-Vc for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:43:12 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:39600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhNra-0004qy-HJ for emacs-devel@gnu.org; Fri, 05 Jun 2020 21:43:11 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 66A601600D1; Fri, 5 Jun 2020 18:43:07 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id S6MENx94GJkU; Fri, 5 Jun 2020 18:43:06 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A4B221600D4; Fri, 5 Jun 2020 18:43:06 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Bdib-QoPuzxj; Fri, 5 Jun 2020 18:43:06 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 6FE411600DE; Fri, 5 Jun 2020 18:43:06 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_31395511=3a_=22Don=e2=80=99t_attempt_to_modify_cons?= =?UTF-8?Q?tant_strings=22?= To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Dmitry Gutov Cc: Pip Cet , emacs-devel References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> Date: Fri, 5 Jun 2020 18:43:05 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87d06dje3d.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/05 21:43:07 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 01:43:12 -0000 On 6/5/20 4:19 PM, Jo=C3=A3o T=C3=A1vora wrote: > I totally agree it is > undefined behaviour to change structure of literals (quoted or > self-evaluating objects), also in Common Lisp, because compilers are > probably allowed to reuse parts of the internal structure of such > objects. But that's a far cry from having two different manifestations > of `equal` such objects _be_ the same object, but only for compiled > code. I don't understand this remark, as the idea that "compilers are allowed t= o reuse parts" necessarily implies that (eq "a" "a") can be t if the compiler dec= ides to reuse the string. Certainly in Common Lisp (eq "Foo" "Foo") might be true= or false (this specific example is called out in CLtL 6.3). Anyway, Elisp has behaved compatibly with Common Lisp for some time, and = it works well in practice. I doubt whether it'd be a good idea to try to cha= nge Elisp to require each string literal "unique", whatever that turns out to= mean. From MAILER-DAEMON Fri Jun 05 23:56:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhPwT-0004GY-Tc for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 23:56:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhPwS-0004GQ-0Y for emacs-devel@gnu.org; Fri, 05 Jun 2020 23:56:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54474) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhPwP-0003XB-NK; Fri, 05 Jun 2020 23:56:17 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhPwO-0006zF-RN; Fri, 05 Jun 2020 23:56:17 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Arthur Miller Cc: sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Fri, 05 Jun 2020 15:01:13 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> Message-Id: Date: Fri, 05 Jun 2020 23:56:16 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 03:56:20 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I understand that wysiwyg is easier and I understand your concern > for delays. I believe those delays would not be noticable for a pamphlet > (A4/A5 size?) if you used html as intermediate format. Could you state your proposed solution more concretely? How would it work, which programs would it use? > * provide a database of predefined paper sizes as specified on: > https://www.papersizes.org/a-sizes-in-pixels.htm > to be used as templates for width and height (in pixels) > * advice insert funcion(s) to check for current line pixel-width and > pixel-height. If width or height exceed template width and height then > insert ^L to denote page break and move point to next line and insert > text in next line. If width is exceeded maybe it is just enough to > move point to next line, but when height for a page is exceeded one > would need a special char to visualize page break. If this works reliably, and isn't very slow, it could be good enough. For this to work reliably requires understanding the width of text as it will eventually be rendered, including different sizes and variants (italic, bold, etc). > I am not sure how efficient it would be to check for pixel-width and height > on every char insertion, maybe there is some better way? We can arrange to take note of how wide the line is, update that incrementally in a quick way, then do more processing when that seems necessary. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Fri Jun 05 23:57:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhPy1-0005MH-Gq for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 23:57:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhPy0-0005Ln-1m for emacs-devel@gnu.org; Fri, 05 Jun 2020 23:57:56 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54586) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhPxy-0003mz-5S; Fri, 05 Jun 2020 23:57:54 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhPxt-0007aW-Ls; Fri, 05 Jun 2020 23:57:50 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Marcin Borkowski Cc: sb@dod.no, arthur.miller@live.com, emacs-devel@gnu.org In-Reply-To: <87v9k5n5yp.fsf@mbork.pl> (message from Marcin Borkowski on Fri, 05 Jun 2020 12:48:46 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87v9k5n5yp.fsf@mbork.pl> Message-Id: Date: Fri, 05 Jun 2020 23:57:49 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 03:57:56 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > Can't that be helped with some of live preview options for a pdf or ps > > > or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? > > > > It would probably take half a minute each time. > I think you made a typo here, it should have been "half a second" > probably. That would be an amazing typo. I expect starting these various programs to take a long time. But if it doesn't, they might be adequate. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Fri Jun 05 23:59:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhPzB-0006Cn-Om for mharc-emacs-devel@gnu.org; Fri, 05 Jun 2020 23:59:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhPz9-0006Bp-Kv for emacs-devel@gnu.org; Fri, 05 Jun 2020 23:59:07 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54629) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhPz9-0003v4-Be; Fri, 05 Jun 2020 23:59:07 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhPz7-0008OA-FQ; Fri, 05 Jun 2020 23:59:05 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Philippe Vaucher Cc: emacs-devel@gnu.org In-Reply-To: (message from Philippe Vaucher on Fri, 5 Jun 2020 09:55:08 +0200) Subject: Re: Prefixed manual describe-function and api overview Reply-To: rms@gnu.org References: Message-Id: Date: Fri, 05 Jun 2020 23:59:05 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 03:59:07 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > It is like `describe-function` > (C-h f), but before you get to select a function you have to select a > "topic" first. The topics are the clickable links at > https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top. > Once you select a topic, then you get to select a function but your > choices are limited to the functions of said topic. It is worth a try. Let's see whether users find that helps them find the information they are looking for. To find out whether users find it helpful, we might want to publish it and ask users to try it. Here's an idea: make describe-function accept topic names as well as function names. When the input is a topic name, it would follow up by doing what you've implemented. If the minibuffer prompt explains this feature, users might discover it on their own. And it won't require a new command. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 06 00:06:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhQ6H-0008ED-Nd for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 00:06:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60082) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhQ6G-0008Cy-LW for emacs-devel@gnu.org; Sat, 06 Jun 2020 00:06:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54989) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhQ6F-0005Tb-JG; Sat, 06 Jun 2020 00:06:27 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhQ67-00041R-Ez; Sat, 06 Jun 2020 00:06:20 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Paul Eggert Cc: joaotavora@gmail.com, dgutov@yandex.ru, pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> (message from Paul Eggert on Fri, 5 Jun 2020 18:43:05 -0700) Subject: Re: 31395511: =?iso-8859-1?Q?=22Don=E2=80=99t?= attempt to modify constant strings" Reply-To: rms@gnu.org References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> Message-Id: Date: Sat, 06 Jun 2020 00:06:19 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 04:06:28 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Anyway, Elisp has behaved compatibly with Common Lisp for some time, and it > works well in practice. I doubt whether it'd be a good idea to try to change > Elisp to require each string literal "unique", whatever that turns out to mean. I agree. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 06 00:07:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhQ6w-0000Y8-Vb for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 00:07:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhQ6w-0000X1-4W for emacs-devel@gnu.org; Sat, 06 Jun 2020 00:07:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:55053) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhQ6u-0005dh-C6; Sat, 06 Jun 2020 00:07:08 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhQ6t-0004l6-3r; Sat, 06 Jun 2020 00:07:07 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Tomas Hlavaty Cc: sb@dod.no, emacs-devel@gnu.org In-Reply-To: <87zh9hrxfj.fsf@logand.com> (message from Tomas Hlavaty on Fri, 05 Jun 2020 23:54:08 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> Message-Id: Date: Sat, 06 Jun 2020 00:07:07 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 04:07:10 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Better exporting of Emacs buffers to PDF is certainly a desirable feature. Any system for editing formatted text in Emacs will need that feature. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 06 01:14:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhRAX-0008JU-BG for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 01:14:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhRAV-0008JK-NE for emacs-devel@gnu.org; Sat, 06 Jun 2020 01:14:55 -0400 Received: from mout02.posteo.de ([185.67.36.142]:49479) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhRAU-000796-KK for emacs-devel@gnu.org; Sat, 06 Jun 2020 01:14:55 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id B5FEB2400FC for ; Sat, 6 Jun 2020 07:14:49 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 49f7475smdz6tmG; Sat, 6 Jun 2020 07:14:47 +0200 (CEST) From: Andrew Schwartzmeyer Message-Id: <4F21BA4E-0725-46D5-80D2-CBB96ADBF45A@schwartzmeyer.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_F75EE658-F3CE-4A00-A406-7C750948C032" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Should (icomplete-mode) explicitly disable fido-mode? Date: Fri, 5 Jun 2020 22:14:44 -0700 In-Reply-To: <87o8pxjfi1.fsf@gmail.com> Cc: emacs-devel@gnu.org, Stefan Monnier To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= References: <7ADEE954-6074-4C8E-9EB7-7BF93F6F46BD@schwartzmeyer.com> <87o8pxjfi1.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=185.67.36.142; envelope-from=andrew@schwartzmeyer.com; helo=mout02.posteo.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 01:14:50 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 05:14:55 -0000 --Apple-Mail=_F75EE658-F3CE-4A00-A406-7C750948C032 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 On Jun 5, 2020, at 3:48 PM, Jo=C3=A3o T=C3=A1vora = wrote: >=20 > But isn't the end result what icomplete-vertical is after? > i.e. icomplete with some kind of verticality added? Or were you > expecting icomplete-vertical to add verticality to fido-mode? Since fido-mode is just icomplete-mode with nice defaults, = icomplete-vertical just becomes fido-vertical. With that patch they = took, it works like a charm. I get all the semantics and keybindings of = fido-mode, and use the icomplete-vertical-do macro for my yank-pop+ and = recentf-list+ functions based on completing-read (the content in these = completions tables is better suited to a vertical representation, = whereas most of the time I want the default horizontal representation). > The only thing that might be worth investigating is why > icomplete-vertical needs to call icomplete-mode when it's > already enabled. Maybe we could arrange for this not to be needed at > all and avoid the problem. I patched icomplete-vertical with (unless icomplete-mode = (icomplete-mode)), but it felt like a work-around. I don=E2=80=99t know = of any other instance where calling foo-mode non-interactively will = break things if it=E2=80=99s already enabled. I thought they were = usually idempotent. Cheers, Andy= --Apple-Mail=_F75EE658-F3CE-4A00-A406-7C750948C032 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 On = Jun 5, 2020, at 3:48 PM, Jo=C3=A3o T=C3=A1vora <joaotavora@gmail.com> wrote:

But isn't the end result what = icomplete-vertical is after?
i.e. icomplete with some kind of verticality added?  Or = were you
expecting = icomplete-vertical to add verticality to = fido-mode?

Since fido-mode is just icomplete-mode with nice defaults, = icomplete-vertical just becomes fido-vertical. With that patch they = took, it works like a charm. I get all the semantics and keybindings of = fido-mode, and use the icomplete-vertical-do macro for my yank-pop+ and = recentf-list+ functions based on completing-read (the content in these = completions tables is better suited to a vertical representation, = whereas most of the time I want the default horizontal = representation).

The = only thing that might be worth investigating is why
icomplete-vertical needs to call icomplete-mode when = it's
already enabled.  Maybe we could arrange for this = not to be needed at
all and avoid the = problem.

I = patched icomplete-vertical with (unless icomplete-mode = (icomplete-mode)), but it felt like a work-around. I don=E2=80=99t know = of any other instance where calling foo-mode non-interactively will = break things if it=E2=80=99s already enabled. I thought they were = usually idempotent.

Cheers,

Andy
= --Apple-Mail=_F75EE658-F3CE-4A00-A406-7C750948C032-- From MAILER-DAEMON Sat Jun 06 02:36:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhSQy-0002u0-JL for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 02:36:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhSQw-0002tB-Gn for emacs-devel@gnu.org; Sat, 06 Jun 2020 02:35:58 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57120) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhSQu-00025o-8L; Sat, 06 Jun 2020 02:35:56 -0400 Received: from [176.228.60.248] (port=4521 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhSQn-0004Sl-2M; Sat, 06 Jun 2020 02:35:49 -0400 Date: Sat, 06 Jun 2020 09:35:40 +0300 Message-Id: <83img4aegz.fsf@gnu.org> From: Eli Zaretskii To: Tomas Hlavaty Cc: rms@gnu.org, sb@dod.no, emacs-devel@gnu.org In-Reply-To: <87zh9hrxfj.fsf@logand.com> (message from Tomas Hlavaty on Fri, 05 Jun 2020 23:54:08 +0200) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 06:35:58 -0000 > From: Tomas Hlavaty > Date: Fri, 05 Jun 2020 23:54:08 +0200 > Cc: emacs-devel@gnu.org > > It seems that there is some code in Emacs dealing with unicode > fonts in order to generate postscript files. Any pointers where > to start with this? I think you should provide more details about the particular problem you are trying to solve here, because I don't think I understand it. Emacs generally knows only about fonts it uses for its own display, and it needs to load the font before it can provide information about it. Whereas you seem to be talking about fonts to be used in the PDF file, not in Emacs display. > b) After that, emacs-pdf will understand font metrics so it will be > possible to do layout. I very much doubt you can do sensible layout in Lisp. shr.el tries, but the result is slow and incomplete -- and it does that with text displayed by Emacs itself, whereas you are talking about something more ambitious. If you want to do layout for PDF, I think one way forward would be to implement a pdfterm.c "terminal" for Emacs, which produces PDF like the existing *term.c backends do for supported display types. > c) There are functions frame-width and frame-height. Are there also > functions something like buffer-width and buffer-height and or a > way to compute x and y position relative to frame origin, which > would allow me to position images exactly in the buffer similar to > what w3m browser does? Yes, there are, but they need a window to compute these metrics. Without a live window, "buffer width" is meaningless, because buffer text doesn't define the fonts (more generally, the typefaces) used for displaying the text. Only a window in which a buffer is displayed provides enough typeface information to do these calculations. > 4) Emacs is missing some kind of canvas, where things could be drawn and > which would handle pixel precise input. > > For example, I would like to browse OpenStreetMap in Emacs. I wrote > a console based OSM browser osmq > and web-based OSM browser at > . I would prefer an Emacs based map browser. > However, I have not figured out how to lay out images in Emacs in a > grid and how to detect which image was clicked. A bonus would be, > where exactly was clicked. Any ideas what should I look into? Emacs supports "hot spots" on images for this: a click on an image returns information about pixel-resolution offset of the click from the image origin. I think that's what you want, although I'm not 100% sure. We also support displaying slices of images, in case that helps to produce a smarter layout of images. > It seems to me that these points are precondition for a WYSIWYG document > editor feature in Emacs. FWIW, I don't think these points are necessarily preconditions for WYSIWYG features. They are important and useful features, but a WYSIWYG document editor should IMO start with something whose beginning we have in enriched-mode. That mode currently lacks the ability of laying out text in variable-pitch typefaces, which I think is the first extension of enriched-mode that should be worked on. Followed by page layout and page breaks, intelligent sectioning commands, etc. etc. And yes, printing is also important, whether it is done by producing PDF or PostScript or any other intermediate format. From MAILER-DAEMON Sat Jun 06 02:55:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhSk6-0005uN-Rm for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 02:55:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhSk4-0005tJ-Hd for emacs-devel@gnu.org; Sat, 06 Jun 2020 02:55:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57169) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhSk2-0004kt-2a; Sat, 06 Jun 2020 02:55:42 -0400 Received: from [176.228.60.248] (port=1748 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhSjs-0005br-U4; Sat, 06 Jun 2020 02:55:33 -0400 Date: Sat, 06 Jun 2020 09:55:25 +0300 Message-Id: <83eeqsadk2.fsf@gnu.org> From: Eli Zaretskii To: rms@gnu.org Cc: arthur.miller@live.com, sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Richard Stallman on Fri, 05 Jun 2020 23:56:16 -0400) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 06:55:44 -0000 > From: Richard Stallman > Date: Fri, 05 Jun 2020 23:56:16 -0400 > Cc: sb@dod.no, emacs-devel@gnu.org > > > * advice insert funcion(s) to check for current line pixel-width and > > pixel-height. If width or height exceed template width and height then > > insert ^L to denote page break and move point to next line and insert > > text in next line. If width is exceeded maybe it is just enough to > > move point to next line, but when height for a page is exceeded one > > would need a special char to visualize page break. > > If this works reliably, and isn't very slow, it could be good enough. > For this to work reliably requires understanding the width of text > as it will eventually be rendered, including different sizes and > variants (italic, bold, etc). FWIW, I don't think this is possible from Lisp, not with the currently available facilities. shr.el does something like that, and it does a decent job with the tools it has, but IMO it is nowhere near what is needed, and cannot handle complex situations with various complex scripts. It is also quite slow: I sometimes need to wait for several seconds for it to display an email message of a couple of hundreds lines. Layout in Emacs has to be done in C to be both efficient and fully capable. Some small and simple jobs, like pixel-level alignment, can be done in Lisp, but not the entire job as a whole. From MAILER-DAEMON Sat Jun 06 03:38:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhTPt-0000D0-2H for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 03:38:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhTPr-0000Ct-MU for emacs-devel@gnu.org; Sat, 06 Jun 2020 03:38:55 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57485) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhTPp-0002dG-IT; Sat, 06 Jun 2020 03:38:53 -0400 Received: from [176.228.60.248] (port=4392 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhTPo-0001Zq-Ki; Sat, 06 Jun 2020 03:38:53 -0400 Date: Sat, 06 Jun 2020 10:38:43 +0300 Message-Id: <837dwkabjw.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: monnier@iro.umontreal.ca, jonas@bernoul.li, johnw@gnu.org, emacs-devel@gnu.org In-Reply-To: <87img8ulmu.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: Un-deprecating oset References: <87eery1xhe.fsf@bernoul.li> <87a72d42h2.fsf@bernoul.li> <87a726tg3c.fsf@bernoul.li> <877dx1rt78.fsf@bernoul.li> <83zh9wujkx.fsf@gnu.org> <83sgfougls.fsf@gnu.org> <874krsxn48.fsf@tcd.ie> <87img8ulmu.fsf@tcd.ie> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 07:38:55 -0000 > From: "Basil L. Contovounesios" > Cc: Stefan Monnier , jonas@bernoul.li, > johnw@gnu.org, emacs-devel@gnu.org > Date: Wed, 03 Jun 2020 18:03:53 +0100 > > +@defmac oref obj slot > +@anchor{oref} > +This macro retrieves the value stored in @var{obj} in the slot named > +by @var{slot}. @var{slot} is the name of the slot when created by > +@dfn{defclass}. Two minor stylistic points: . It is many times better to use the argument name as an integral part of the sentence, instead of separating it. For example: This macro retrieves the value stored in @var{obj} in the named @var{slot}. . It is better to avoid starting a sentence with @var{something}, because in the printed version of the manual @var{..} doesn't capitalize its argument, so you get a sentence that starts with a lower-case letter, which is not valid English. (Yes, we have a lot of examples of this sub-optimal usage our manuals.) In this case, I would rephrase: Slots names are determined by @dfn{defclass} which creates the slot. Btw, why is "defclass" in @dfn here? Thanks. From MAILER-DAEMON Sat Jun 06 03:42:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhTTd-0001HL-Gn for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 03:42:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhTTb-0001HE-Vo for Emacs-devel@gnu.org; Sat, 06 Jun 2020 03:42:48 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57506) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhTTb-00037G-JG; Sat, 06 Jun 2020 03:42:47 -0400 Received: from [176.228.60.248] (port=4623 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhTTT-0001oK-9b; Sat, 06 Jun 2020 03:42:39 -0400 Date: Sat, 06 Jun 2020 10:42:32 +0300 Message-Id: <835zc4abdj.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org In-Reply-To: <87d06g385p.fsf@bzg.fr> (message from Bastien on Wed, 03 Jun 2020 09:44:50 +0200) Subject: Re: GNU ELPA package discoverability References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <875zcas71l.fsf@gnu.org> <83k10pcrjv.fsf@gnu.org> <87d06g385p.fsf@bzg.fr> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 07:42:48 -0000 > From: Bastien > Cc: sacha@sachachua.com, rms@gnu.org, Emacs-devel@gnu.org > Date: Wed, 03 Jun 2020 09:44:50 +0200 > > >> Install Emacs packages > > > > I think "Install Add-On Packages" is better. > > Add-On and Packages sound a bit redundant to me, but it's okay. I don't think this will be redundant to newbies. It also isn't necessarily redundant in general, since "packages" exist in the core as well. E.g., "C-h p" finds "packages". > >> Add new package* sources > >> > >> * Not sure whether this should be package or packages. > > > > What would this item do? Variable customization is not a good > > candidate for a menu item. > > My motivation while pushing for a change here is to make it easier > for users to customize package-archives, something I've seen asked > very often. My question was what will this menu item lead to. IOW, what command will it invoke, and what UI will that command present to users? From MAILER-DAEMON Sat Jun 06 04:18:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhU21-0002yv-MZ for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 04:18:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU1z-0002yR-FX for emacs-devel@gnu.org; Sat, 06 Jun 2020 04:18:19 -0400 Received: from mail-qk1-x733.google.com ([2607:f8b0:4864:20::733]:44655) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhU1x-0000YZ-Gb for emacs-devel@gnu.org; Sat, 06 Jun 2020 04:18:19 -0400 Received: by mail-qk1-x733.google.com with SMTP id c14so12242486qka.11 for ; Sat, 06 Jun 2020 01:18:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=P1pbtFmX8YeGmwvQ2eF+zSqS9N95x56HgqtchQpWZlY=; b=Ylwc5GIy2vPwpwcOvrS8TmH4uudspnlv/yorXAhV5AYjBs7v8eb/wFwu3NkuQOOTXZ 3ihsXEv8cNMvvxWo95mHr1jrd3AE96bWSyTuOAqeVOz0ziTLPogIum5e/OHDMOJOcIr1 61l3sGl6133kSMB+5gDXgeRfxuFbPe02UHdPdLiUwQxfXJAsfz/edDB6yBlTIQ0USjoQ OcJHT3p3v/JSWtxineztPlw2H66AhH7W64PrgsJiTFD88cao5gzoKcsRWeK+WLutaUKw 1LjOKFkn4sxVhSWsMUZq27tGA9XmEY2Bj0IGFS37SYZy+g+FNALnIdHlrAkDxfGYU/uV xYgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=P1pbtFmX8YeGmwvQ2eF+zSqS9N95x56HgqtchQpWZlY=; b=KmMUvNAeBCDsiXwaR469cBiij4DZ+NEGXnbp9JLVASU5FrPcoMHLf6UuVJ/EDlBCc2 d97wtYbFcAUPopuoop3bDbpSKBtELoVwBNZHJpCGvK6pPU+B4Zub5RbvWb25MXEpIqwM eCHarg+qkkzDcA26p+9S4Ek4vinRItO9nqETZyeRzM8GpOwH8znQ+1YHBz9TUzjjFZ3H Ek4Ybv2hR4Lbv9ueEzFD9MJ9IlVidf5U0mrbdtns4blcA4KlMUVc/Wg0nIMnEREpOtfc IoezCyIRPs2AduOwdd/KgpsKIskqelxM5nbOrCQH2SWeXEOKCFBEb3LSklhOoFL9aJ1i ppeg== X-Gm-Message-State: AOAM532W8g9YY2DWZOlHINsDUMi2C92CQq3/3GQ/12EZBQ6krwjcLWqu H3D2SJYLXzav7lGAg4VR6zXkUVFaWiA= X-Google-Smtp-Source: ABdhPJw4KCTHYL1WMyibDGGBN7fRR+ffA3yz1KYuhfj4fR3+okDqxi2VtZnVnfKmhzv/KdlaJdM7MA== X-Received: by 2002:a37:c20c:: with SMTP id i12mr14242259qkm.167.1591431496266; Sat, 06 Jun 2020 01:18:16 -0700 (PDT) Received: from chametz (ns552097.ip-142-44-139.net. [142.44.139.12]) by smtp.gmail.com with ESMTPSA id s15sm2203599qtc.95.2020.06.06.01.18.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 01:18:15 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> Date: Sat, 06 Jun 2020 08:18:08 +0000 In-Reply-To: <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> (Paul Eggert's message of "Fri, 5 Jun 2020 11:17:47 -0700") Message-ID: <87img4zjy7.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::733; envelope-from=pipcet@gmail.com; helo=mail-qk1-x733.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 08:18:19 -0000 Paul Eggert writes: > On 6/5/20 5:46 AM, Pip Cet wrote: >> I get the impression we >> shouldn't discount the possibility that the current way of doing things >> (after pure space) isn't so bad at all: all strings, vectors, and cons >> cells are mutable to the same extent. > > That's not the current way of doing things, and although the area is > murky there > have always been Emacs Lisp objects that are not mutable. Lately, only pure ones, as far as I can tell? > For example: > (aset (symbol-name 'cons) 0 ?d) > > This signals "Attempt to modify read-only object" error in Emacs 25, and makes > Emacs dump core in Emacs 27. And there are other cases like that. Well, dumping core is bad. The problem here is how pdumper "changed" pure space (actually, we're putting several megabytes of zeroes into every Emacs binary as a result) and how make_pure_c_string tries so very hard to save a few kilobytes of memory. Both problems, as I said, that wouldn't exist if we simply removed pure space. > Obviously we need to do better in the dumping-core area. When we do that, we > have an opportunity to simplify and/or document behavior in this area. Indeed. Simplify: remove pure space. Document: all strings, vectors, and cons cells are mutable to the same extent. > If we decide to simplify/document by saying "all strings are modifiable" then > we'll need significant work at both the C and Lisp level to do that. I don't see why. All strings are modifiable, but the byte compiler will identify strings under certain circumstances. That doesn't violate the simple rule that as far as the Emacs core is concerned, all strings are equal. > This will > hurt performance a bit since it will disable some optimizations. Which ones? > If we decide to simplify/document by saying "an error is thrown if you try to > modify a string literal" then we'll need to add some code to do that. I have a So far, what you have proposed is "an error is thrown if you try to modify the characters of a string literal, or if you add text properties unless it already has some, or if you remove the last text property". > draft of something along those lines. It doesn't hurt performance > significantly > in my standard benchmark of 'make compile-always'. (In general, I think that's probably not a good benchmark to optimize Emacs for). > Although it > invalidates some > existing code, such code is quite rare and is already relying on > undefined behavior. I'm not sure "undefined behavior" is a useful term when speaking about Emacs Lisp, except for behavior which is explicitly documented to be unreliable. There's a single implementation, and a lot of code is written to conform not to what's documented but to what happens to work. > If we decide to leave things alone, they will remain complicated and murky. But I'd call the behavior you suggest even more complicated. I still think there's a significant risk that there will be ad-hoc changes that essentially commit us to a simplistic model of mutability. I don't think they're necessary or urgent, except for the make_pure_c_string bug you describe. For example, I think it might be very useful to have an immutable "view" of a mutable object (as in C, where I can pass a char * to a function expecting a const char *); that would mean storing the mutability flag in the Lisp_Object, not in the struct Lisp_String. From MAILER-DAEMON Sat Jun 06 05:42:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVLQ-0000Yt-FB for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 05:42:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49494) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVLO-0000Y8-8n for emacs-devel@gnu.org; Sat, 06 Jun 2020 05:42:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58434) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhVLM-0005Zh-AM; Sat, 06 Jun 2020 05:42:24 -0400 Received: from [176.228.60.248] (port=4395 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhVLE-0004LI-Tz; Sat, 06 Jun 2020 05:42:17 -0400 Date: Sat, 06 Jun 2020 12:42:07 +0300 Message-Id: <83wo4k8r9s.fsf@gnu.org> From: Eli Zaretskii To: Jean-Christophe Helary Cc: bzg@gnu.org, excalamus@tutanota.com, van.ly+2020@sdf.org, rms@gnu.org, emacs-devel@gnu.org In-Reply-To: (message from Jean-Christophe Helary on Tue, 2 Jun 2020 08:50:33 +0900) Subject: Re: What is the most useful potential feature which Emacs lacks? References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 09:42:26 -0000 > From: Jean-Christophe Helary > Date: Tue, 2 Jun 2020 08:50:33 +0900 > Cc: Eli Zaretskii , > excalamus@tutanota.com, > van.ly+2020@sdf.org, > Richard Stallman , > emacs-devel@gnu.org > > >> What is missing in Emacs to make this possible? > > > > I don't know for sure. > > > > In the past, I was able to collaborate with a friend using an Emacs > > extension called "Rudel", which lets two distant buffers communicate > > with each other over the Gobby protocol. > > > > https://www.emacswiki.org/emacs/Rudel indicates that the reference > > implementation for the Gobby protocol is broken. I have not tried. > > > > So perhaps the required work is not on the Emacs side, but on that > > of the protocol and its implementation. > > It looks like SubEthaEdit, the text editor that first provided solid collaborative editing features on macos is now released under the MIT license and its communication protocol is documented on emacswiki: > > https://www.emacswiki.org/emacs/SubEthaEditProtocol What I think is missing is not the description of a specific protocol, but a higher-level spec of basic capabilities needed for the collaborative editing support in Emacs. Is this available anywhere? If not, could someone please write it up? For example, one thing that strikes me is why "collaboration" via a dVCS is not a good solution, or at least the basis of a solution? Am I missing something? From MAILER-DAEMON Sat Jun 06 05:59:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVbS-00048X-Bu for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 05:59:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVbR-00048F-En for emacs-devel@gnu.org; Sat, 06 Jun 2020 05:59:01 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:58918) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jhVbQ-0007s6-14 for emacs-devel@gnu.org; Sat, 06 Jun 2020 05:59:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=From:In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:To:Date; bh=Lwc87nQwJQRIC/z1rW1w2ywE/7y6txjFAu53rNKIe8g=; b=vKmyI3Ix8cm6rjZcp7+Do/CPIk5U+oZyutOFCdirekZkeLqF/Bq5rFCIv8oURC1uowuxJK4krYVonw74l4CtvJsUVYDZtC+Bs95G7Ps1hdACfUXVtvGDgw47iySGHURl2nhOHhwGJtDM4WkRTgk69ATl6j+xyKGy0kOzsSbSjdrE2W5e2tJHZBWxeSx1fKfUp5T5Q1JKM3chR+9oLHfoB6BrKGoPgovmfLsuglL3WerSErd1fVtC5F4xXFcpQG5B2y1WREB9pwaB79Ex+ooQotE411Hk3wqeXd1R/w/70rHRCeFIcHVl2UW4eOMpp4ib5Sbt5NxSLAzYBEiKDcKRUg==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jhVbH-0008O5-3m for emacs-devel@gnu.org; Sat, 06 Jun 2020 11:58:51 +0200 Date: Sat, 6 Jun 2020 11:58:51 +0200 To: emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: <20200606095851.GB28645@tuxteam.de> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="hQiwHBbRI9kgIhsi" Content-Disposition: inline In-Reply-To: <83wo4k8r9s.fsf@gnu.org> User-Agent: Mutt/1.5.21 (2010-09-15) From: Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 05:58:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 09:59:01 -0000 --hQiwHBbRI9kgIhsi Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Jun 06, 2020 at 12:42:07PM +0300, Eli Zaretskii wrote: [...] > What I think is missing is not the description of a specific protocol, > but a higher-level spec of basic capabilities needed for the > collaborative editing support in Emacs. Is this available anywhere? > If not, could someone please write it up? That would indeed be a Good Thing. > For example, one thing that strikes me is why "collaboration" via a > dVCS is not a good solution, or at least the basis of a solution? Am > I missing something? DISCLAIMER: I haven't much experience with collaborative editing. That said, as far as I understand the collaborative editing folks, the difference to a dVCS (which I read as "distributed version control system" =C3=A0 la git) is the "live" experience: you see other people's cursors (points?) running over the text making changes, while you change the text, too. Ideally supported by a side channel, e.g. audio. Think several people doodling simultaneously over a shared blackboard. There was a thread a while ago in -help or -devel explaining why several emacs clients connected to a common server didn't quite fill that bill: I could only partially understand what the limitations were. I think I'll have to try it in practice to get a grip on that. Cheers -- tom=C3=A1s --hQiwHBbRI9kgIhsi Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7baNsACgkQBcgs9XrR2kYH3ACfcgAfBC+H4mErHlkPxLBwnUH2 OuoAn01BToChpE13A5iyw/Y4/DT7Sk+c =r45Y -----END PGP SIGNATURE----- --hQiwHBbRI9kgIhsi-- From MAILER-DAEMON Sat Jun 06 06:00:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVcT-0004uM-Km for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:00:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50908) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVcR-0004th-D9 for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:00:03 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:34647) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhVcQ-0008OV-EO; Sat, 06 Jun 2020 06:00:02 -0400 Received: by mail-wm1-x336.google.com with SMTP id u26so10714407wmn.1; Sat, 06 Jun 2020 03:00:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:reply-to:from:date:message-id :subject:to:cc; bh=z/2bLKV325D0MXS+lRTavoSIw/MpX97PII650Quief4=; b=ghAZZNBpr0qaCZuFCMLzOfNqpSW/NNr0pYjuGJfiUHXT1bvZ/Dvtu3WBGpkAxIo4cq KdppanuE8SUQtJjoTsQWp+EVknlH5ZXpUioxm3yu7GHbYQN6aaZsy2FdiI+t9lz6s2Rb PwykqzLOWRDV0wvPQWQ5d9P44Xs72jMx5Yb5EdcB2ONB2stKuXp/6n4iXgzLHJVovKBb L6lxQ18bj4oT9ZdpapOOiQ1kRFFEeqTaKGJtkTf+sqhsuA35QAfJ97z7P4Vvrdkzcic9 v40vatbgiPyaUJqsM2xwyk8TY45bfJTMF8qIxZzOW+Ji/bQOnly9hX1wNoupqL65I+JS gLZQ== 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:reply-to :from:date:message-id:subject:to:cc; bh=z/2bLKV325D0MXS+lRTavoSIw/MpX97PII650Quief4=; b=hY1zYd4Cl+9645gaApoHSBXocCxWWOEJTjugKRSBXpYM1rNhMeh+WbUnLA8zNcgdj3 kTvgCgdEGlVlILvKMBRwcNf2hu9TdO0Me173k2A5XRmPR/AHPsAD9Y1Ip1ThqyRZD8yU KnzT1FxS12Amr5Nz6tlah25RmuSe1N9umvK3VCd8tmH+r5G1WdKHXFxjdns9o+S21Zma h5qe4x7YxDN4SbA9xxBg6wEUqz/14YeR9KUiHZFUllGpenvIrtomjBFiqFXY3CbDevTb FVptqCB4g8G0EILp0NgdEwIp97jIwE2stN/BUyHuTEpWDU6cFFoIspq98mnx7fzZRaky XUuA== X-Gm-Message-State: AOAM533brfs9h/GOssQhSL4S5FaWMT49owlL4f1eBwqJyFdwSSQTH7M2 fj477uJSdkcgIeNDpnSi/304JBf63rv/16/iXJjFuETvyd4= X-Google-Smtp-Source: ABdhPJwU85HlDzWqh5vjsAgVhZ1p14KutO8GXBx7XrMLEUA20k4Z7KvV/dmzbAhiav07Rl4gMB0Hyr6BwKBvrDw7344= X-Received: by 2002:a05:600c:4102:: with SMTP id j2mr4561729wmi.48.1591437598767; Sat, 06 Jun 2020 02:59:58 -0700 (PDT) MIME-Version: 1.0 References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> In-Reply-To: <83wo4k8r9s.fsf@gnu.org> Reply-To: thibaut.verron@gmail.com From: Thibaut Verron Date: Sat, 6 Jun 2020 11:59:47 +0200 Message-ID: Subject: Re: What is the most useful potential feature which Emacs lacks? To: Eli Zaretskii Cc: Jean-Christophe Helary , bzg@gnu.org, excalamus@tutanota.com, van.ly+2020@sdf.org, Richard Stallman , emacs-devel Content-Type: multipart/alternative; boundary="000000000000c1c06605a767707f" Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=thibaut.verron@gmail.com; helo=mail-wm1-x336.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 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:00:03 -0000 --000000000000c1c06605a767707f Content-Type: text/plain; charset="UTF-8" > > What I think is missing is not the description of a specific protocol, > but a higher-level spec of basic capabilities needed for the > collaborative editing support in Emacs. Is this available anywhere? > If not, could someone please write it up? > > For example, one thing that strikes me is why "collaboration" via a > dVCS is not a good solution, or at least the basis of a solution? Am > I missing something? > Collaborative editors usually show modifications done by other users in real time. I don't know how major conflicts are resolved. How would you emulate this with a VCS? Commit-push-pull with various --force flags, on a timer run every second? Thibaut --000000000000c1c06605a767707f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
What I think is missing is not the description of a spec= ific protocol,
but a higher-level spec of basic capabilities needed for the
collaborative editing support in Emacs.=C2=A0 Is this available anywhere? If not, could someone please write it up?

For example, one thing that strikes me is why "collaboration" via= a
dVCS is not a good solution, or at least the basis of a solution?=C2=A0 Am<= br> I missing something?

Collaborative edit= ors usually show modifications done by other users in real time. I don'= t know how major conflicts=C2=A0are resolved.

How = would you emulate this with a VCS? Commit-push-pull with various --force fl= ags, on a timer run every second?=C2=A0

Thibaut
--000000000000c1c06605a767707f-- From MAILER-DAEMON Sat Jun 06 06:10:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVmT-0007ml-Ak for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:10:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVmQ-0007lv-Tn for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:10:22 -0400 Received: from mail1466c50.megamailservers.eu ([91.136.14.66]:37110 helo=mail268c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVmO-0001gG-Hm for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:10:22 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591437426; bh=PRB7eJSWP9pDn6gmSgEUAeADYDRt/kj7rqsc+NQT+iU=; h=From:Subject:Date:Cc:To:From; b=IwvM+Nj0jQXOjzfI1Ly7rcHZvqgc5RKg6cUr0xHrAWstmXlamciWQiBdCuBxCSllt bVBkw60DQS4f2g1wpCnsGnCusQPSTw3fTAizE9sdLb6eUJ7Z9OWFWGfNO9b1SW9GNF igNgXKTQReYqXtKSkz5GdSUAfboNVHIElmfyZw2Y= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail268c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 0569v4WZ012194; Sat, 6 Jun 2020 09:57:05 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Content-Type: multipart/mixed; boundary="Apple-Mail=_639AFEBB-7C27-4C9A-83B6-97902293D195" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Use 65535 as scale factor for color-values on NS Message-Id: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> Date: Sat, 6 Jun 2020 11:57:03 +0200 Cc: Emacs developers To: Alan Third X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1C.5EDB6822.0034:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=BZ+mLYl2 c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=M51BFTxLslgA:10 a=22mPQ_lD_N0CwAd5RO0A:9 a=CjuIK1q_8ugA:10 a=e95U5ltlPHoIN1d-EaIA:9 a=B2y7HmGcmWMA:10 a=pHzHmUro8NiASowvMSCR:22 a=nt3jZW36AmriUCFCBwmW:22 Received-SPF: softfail client-ip=91.136.14.66; envelope-from=mattiase@acm.org; helo=mail268c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 06:10:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:10:23 -0000 --Apple-Mail=_639AFEBB-7C27-4C9A-83B6-97902293D195 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Alan, it seems that only NS uses 65280 as scale factor for = 'color-values'; all other back-ends use 65535. Do you know if there is = any reason for keeping it this way? Otherwise, I propose we change it = (see patch). It is probably just a relic from when colour components were scaled from = 8 to 16 bits by multiplication with 256 instead of 257; this seems to = have been fixed everywhere else. --Apple-Mail=_639AFEBB-7C27-4C9A-83B6-97902293D195 Content-Disposition: attachment; filename=0001-Use-65535-as-color-values-scale-value-in-the-NS-back.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Use-65535-as-color-values-scale-value-in-the-NS-back.patch" Content-Transfer-Encoding: quoted-printable =46rom=20fba2c0d5f93c05db580b3aa7c8eda7a282411796=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Sat,=206=20Jun=202020=2011:23:48=20+0200=0A= Subject:=20[PATCH]=20Use=2065535=20as=20color-values=20scale=20value=20= in=20the=20NS=20backend=0A=0A*=20src/nsfns.m=20(Fxw_color_values):=20= Scale=20with=2065535=20instead=20of=2065280,=20for=0Auniformity=20with=20= other=20backends.=0A*=20lisp/faces.el=20(color-values):=20Update=20doc=20= string.=0A*=20doc/lispref/frames.texi=20(Color=20Names):=20Update=20= examples.=0A---=0A=20doc/lispref/frames.texi=20|=206=20+++---=0A=20= lisp/faces.el=20=20=20=20=20=20=20=20=20=20=20|=202=20+-=0A=20= src/nsfns.m=20=20=20=20=20=20=20=20=20=20=20=20=20|=204=20++--=0A=203=20= files=20changed,=206=20insertions(+),=206=20deletions(-)=0A=0Adiff=20= --git=20a/doc/lispref/frames.texi=20b/doc/lispref/frames.texi=0Aindex=20= 6bf5db2aa1..966f620558=20100644=0A---=20a/doc/lispref/frames.texi=0A+++=20= b/doc/lispref/frames.texi=0A@@=20-3975,11=20+3975,11=20@@=20Color=20= Names=0A=20(color-values=20"black")=0A=20=20=20=20=20=20@result{}=20(0=20= 0=200)=0A=20(color-values=20"white")=0A-=20=20=20=20=20@result{}=20= (65280=2065280=2065280)=0A+=20=20=20=20=20@result{}=20(65535=2065535=20= 65535)=0A=20(color-values=20"red")=0A-=20=20=20=20=20@result{}=20(65280=20= 0=200)=0A+=20=20=20=20=20@result{}=20(65535=200=200)=0A=20(color-values=20= "pink")=0A-=20=20=20=20=20@result{}=20(65280=2049152=2051968)=0A+=20=20=20= =20=20@result{}=20(65535=2049344=2052171)=0A=20(color-values=20"hungry")=0A= =20=20=20=20=20=20@result{}=20nil=0A=20@end=20example=0Adiff=20--git=20= a/lisp/faces.el=20b/lisp/faces.el=0Aindex=20e707f6f4b6..f4a9dedd79=20= 100644=0A---=20a/lisp/faces.el=0A+++=20b/lisp/faces.el=0A@@=20-1822,7=20= +1822,7=20@@=20color-values=0A=20string=20specifying=20a=20color's=20RGB=20= components=20(e.g.=20\"#ff12ec\").=0A=20=0A=20Return=20a=20list=20of=20= three=20integers,=20(RED=20GREEN=20BLUE),=20each=20between=200=0A-and=20= either=2065280=20or=2065535=20(the=20maximum=20depends=20on=20the=20= system).=0A+and=2065535=20inclusive.=0A=20Use=20`color-name-to-rgb'=20if=20= you=20want=20RGB=20floating-point=20values=0A=20normalized=20to=201.0.=0A= =20=0Adiff=20--git=20a/src/nsfns.m=20b/src/nsfns.m=0Aindex=20= 273fb5f759..5e8d572d8f=20100644=0A---=20a/src/nsfns.m=0A+++=20= b/src/nsfns.m=0A@@=20-2329,8=20+2329,8=20@@=20Frames=20are=20listed=20= from=20topmost=20(first)=20to=20bottommost=20(last).=20=20*/)=0A=20=20=20= [[col=20colorUsingDefaultColorSpace]=0A=20=20=20=20=20=20=20=20=20= getRed:=20&red=20green:=20&green=20blue:=20&blue=20alpha:=20&alpha];=0A=20= =20=20unblock_input=20();=0A-=20=20return=20list3i=20(lrint=20(red=20*=20= 65280),=20lrint=20(green=20*=2065280),=0A-=09=09=20lrint=20(blue=20*=20= 65280));=0A+=20=20return=20list3i=20(lrint=20(red=20*=2065335),=20lrint=20= (green=20*=2065535),=0A+=09=09=20lrint=20(blue=20*=2065535));=0A=20}=0A=20= =0A=20=0A--=20=0A2.21.1=20(Apple=20Git-122.3)=0A=0A= --Apple-Mail=_639AFEBB-7C27-4C9A-83B6-97902293D195-- From MAILER-DAEMON Sat Jun 06 06:11:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVno-0000F2-JW for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:11:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51778) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVnm-0000ER-CR for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:11:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58645) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhVnl-0002DL-Ql; Sat, 06 Jun 2020 06:11:45 -0400 Received: from [176.228.60.248] (port=2236 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhVnl-0006xW-2T; Sat, 06 Jun 2020 06:11:45 -0400 Date: Sat, 06 Jun 2020 13:11:36 +0300 Message-Id: <83v9k48pwn.fsf@gnu.org> From: Eli Zaretskii To: tomas@tuxteam.de Cc: emacs-devel@gnu.org In-Reply-To: <20200606095851.GB28645@tuxteam.de> (tomas@tuxteam.de) Subject: Re: What is the most useful potential feature which Emacs lacks? References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:11:46 -0000 > Date: Sat, 6 Jun 2020 11:58:51 +0200 > From: > > That said, as far as I understand the collaborative editing folks, > the difference to a dVCS (which I read as "distributed version > control system" à la git) is the "live" experience: you see other > people's cursors (points?) running over the text making changes, > while you change the text, too. Ideally supported by a side channel, > e.g. audio. > > Think several people doodling simultaneously over a shared blackboard. Someone will have to explain why this is useful. Sitting and looking at other people's typing something, then erasing and retyping, one character at a time, sounds like a huge waste of time to me. I could use that same time to modify a different section of the same document, or suggest a solution for a problem in parallel to several others suggesting their solutions for the same problem (which would need some processing on top of VC conflict resolution). I'm probably missing something. > There was a thread a while ago in -help or -devel explaining why > several emacs clients connected to a common server didn't quite > fill that bill: I could only partially understand what the limitations > were. I think I'll have to try it in practice to get a grip on > that. I don't think using emacsclient in its current implementation and the infrastructure it uses will help us make any progress in this area. The current keyboard "multiplexing" in Emacs doesn't really support any concurrent input in any useful sense of that word. That's why I think we need to start from the basics, and define the features we'd need. In general, since we are talking about several different individuals, the concept of having a single Emacs "server" sounds a non-starter to me. We should talk about several separate Emacs sessions communicating between them in some way. From MAILER-DAEMON Sat Jun 06 06:12:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVou-0001GS-Cz for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:12:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVos-0001GM-S2 for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:12:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58696) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhVor-0002Nb-Rs; Sat, 06 Jun 2020 06:12:53 -0400 Received: from [176.228.60.248] (port=2278 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhVoR-00071E-91; Sat, 06 Jun 2020 06:12:28 -0400 Date: Sat, 06 Jun 2020 13:12:18 +0300 Message-Id: <83tuzo8pvh.fsf@gnu.org> From: Eli Zaretskii To: thibaut.verron@gmail.com Cc: jean.christophe.helary@traduction-libre.org, bzg@gnu.org, excalamus@tutanota.com, van.ly+2020@sdf.org, rms@gnu.org, emacs-devel@gnu.org In-Reply-To: (message from Thibaut Verron on Sat, 6 Jun 2020 11:59:47 +0200) Subject: Re: What is the most useful potential feature which Emacs lacks? References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:12:55 -0000 > From: Thibaut Verron > Date: Sat, 6 Jun 2020 11:59:47 +0200 > Cc: Jean-Christophe Helary , bzg@gnu.org, > excalamus@tutanota.com, van.ly+2020@sdf.org, Richard Stallman , > emacs-devel > > Collaborative editors usually show modifications done by other users in real time. I don't know how major > conflicts are resolved. > > How would you emulate this with a VCS? Commit-push-pull with various --force flags, on a timer run every > second? That could be a start, yes. From MAILER-DAEMON Sat Jun 06 06:18:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhVuR-0002lR-Lc for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:18:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhVuQ-0002kb-9W for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:18:38 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:58959) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jhVuO-0003U1-Jz for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:18:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=From:In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:To:Date; bh=BSTdQHNunvLj0rsRmwZDwBjVmvrcOEO0ttxC6qkeigo=; b=r//wv24IjOWGARtRbKwLL9oBcI5jO66glhl/YuL9eIU7KsAek89mJ5vOF4mErv58IjgvTh7nG6HX1hZQQ7DP1rh+AGZb1TjOGYDTFFfeRDrJ1alLSR0/NxPzy394qFDfUhp0y5qQe8jp/LKQmNIw9iw9Dl0IFlqpbDN6Ioi8TWGFfA6BJZas9A1Yw+BxYQsRpRj5g+is3SU2sg5y0k/zChU+18eAP9smZ3jo6b1RcT4rb9hyLbwnN/zMDylGnvtJENx5OutxGIxh7XBZSVxwPwmB5qXFD4UjQy3Dd+KOoUaEqwZ/eAQRwQ06RNeA465kGvd3uMBNLfeRbE8KyB8m3w==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jhVuM-00009P-9G for emacs-devel@gnu.org; Sat, 06 Jun 2020 12:18:34 +0200 Date: Sat, 6 Jun 2020 12:18:34 +0200 To: emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: <20200606101834.GC28645@tuxteam.de> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="5QAgd0e35j3NYeGe" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) From: Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 05:58:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:18:38 -0000 --5QAgd0e35j3NYeGe Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Jun 06, 2020 at 11:59:47AM +0200, Thibaut Verron wrote: > > > > What I think is missing is not the description of a specific protocol, > > but a higher-level spec of basic capabilities needed for the > > collaborative editing support in Emacs. Is this available anywhere? > > If not, could someone please write it up? > > > > For example, one thing that strikes me is why "collaboration" via a > > dVCS is not a good solution, or at least the basis of a solution? Am > > I missing something? > > >=20 > Collaborative editors usually show modifications done by other users in > real time. I don't know how major conflicts are resolved. My hunch is that conflicts aren't as heavy "in real time", because users can react to them in a more fine-grained fashion. But there's a whole body of theory dedicated to that. I'd start here [1]. Actually the problems are akin to (but possibly not as hard as) networked gaming, where you have several clients sharing a common model: you'll have to cheat a bit if you don't want to wait until you know the exact model's state, because that'd mean a full network round trip. Sometimes you can afford that, sometimes not. Balancing out that and fixing things to hide your cheating after the fact in a way that the user can cope with the fallout is, I think, the "interesting" part. > How would you emulate this with a VCS? Commit-push-pull with various > --force flags, on a timer run every second? I think network latency would kill you (or rather, your users might ;-) Cheers [1] https://en.wikipedia.org/wiki/Collaborative_real-time_editor#Technical_= challenges -- tom=C3=A1s --5QAgd0e35j3NYeGe Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7bbXoACgkQBcgs9XrR2kYzzwCfYzoDPLEPXB4enD4gla8YuU0m vRsAn2IM3yxNAgG9LA6gNC/O3i6o513g =rKev -----END PGP SIGNATURE----- --5QAgd0e35j3NYeGe-- From MAILER-DAEMON Sat Jun 06 06:29:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhW4w-0005BB-QM for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 06:29:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhW4v-0005B1-8r for emacs-devel@gnu.org; Sat, 06 Jun 2020 06:29:29 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:58981) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jhW4u-0005H0-EV; Sat, 06 Jun 2020 06:29:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date; bh=NZDO85cWm6d2xSNQ3o9BRK6dOLt7U3cMXakUS68K/6c=; b=mnvGrurh8cpDVbw1DKdkeQyWbVhQ6wHYrFFXBjkUe3PTUcPhT274Z3xHWIBOWL/LuYgi3UEV23J0xn/imVYydCIC8qWiC2i2isdNqC0BhKkd8bGxMgNqpGaPA/ouoiJsEPBTHUZJPcNYg0YNQYVmbgVqbAM6wucE0UMUMHPWLwzSh4SBLIpQvkxsfh9G+qb7mLBaQQSQnnnoD2Mukthc9Ls1JnWU3sqM3bHG4jpGbVAs2lMfCZvdcyhH+m/V+zkRgN2ETxjg892JuI7a+K1NaSRX+RqR0ag+oAR4UXTHD1wOEShSCITn4tHavJG+MYlcaFOE3bh/7YAJbOo/j7IFiw==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jhW4s-0000GL-CI; Sat, 06 Jun 2020 12:29:26 +0200 Date: Sat, 6 Jun 2020 12:29:26 +0200 From: tomas@tuxteam.de To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: <20200606102926.GD28645@tuxteam.de> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> <83v9k48pwn.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="4zI0WCX1RcnW9Hbu" Content-Disposition: inline In-Reply-To: <83v9k48pwn.fsf@gnu.org> User-Agent: Mutt/1.5.21 (2010-09-15) Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 05:58:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 10:29:29 -0000 --4zI0WCX1RcnW9Hbu Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Jun 06, 2020 at 01:11:36PM +0300, Eli Zaretskii wrote: Hi, Sorry, just a short answer now -- pressed at the moment. Will come back today later. > > Date: Sat, 6 Jun 2020 11:58:51 +0200 > > From: > >=20 > > That said, as far as I understand the collaborative editing folks, [...] > > Think several people doodling simultaneously over a shared blackboard. >=20 > Someone will have to explain why this is useful. Yup, that's the problem. This isn't the way I enjoy doing things either (so I'm not the most qualified to answer that question, but I feel your pain), but people *love* pushing around an Etherpad [1] URL and just collaboratively hack away at something. Perhaps because it doesn't force them to change the way they interact too much. It's a bit like sitting around a sand pit and putting sticks and stones and drawing doodles around them. You don't take turns at this either, and if you step onto some other's doodle, a side channel (she pushes you out of the sand pit or yells at you ;-) is used. Luckily Etherpad is free software Cheers [1] https://en.wikipedia.org/wiki/Etherpad -- tom=C3=A1s --4zI0WCX1RcnW9Hbu Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7bcAYACgkQBcgs9XrR2kZB/wCcCR2WMHHCMzfEET+uHL+N8T5i JbUAn2e4jevJ9srSbEb7rX44GHPxSyOj =qE/U -----END PGP SIGNATURE----- --4zI0WCX1RcnW9Hbu-- From MAILER-DAEMON Sat Jun 06 07:17:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhWpa-0006q6-OI for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 07:17:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhWpY-0006pW-SA for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:17:40 -0400 Received: from mail1448c50.megamailservers.eu ([91.136.14.48]:46990 helo=mail265c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhWpX-0005fx-7F for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:17:40 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591442255; bh=7gNXT8QuLAMVmW0p81K1VGbvxLhvW/iLI6g/WDq/QQs=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=Vr/6SX/pDsqHHjce9zES9c3fojxz9M8n/gluz+Hfb39OseUKcKX1J8UpvUWx1LzFi dL8S9Awm8eHJ3xHsPjxH5sXoy9r0M/g9AE1dnTTsmch+SZrQv+r+Zmyp+H6W4ib9wH jFlxN3egETtF4pd7pekCfXFm3mFMmBfFY9xUoPN8= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail265c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 056BHXgg010589; Sat, 6 Jun 2020 11:17:35 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Message-Id: <448226DE-E684-4970-8EBC-34064E82EAF7@acm.org> Content-Type: multipart/mixed; boundary="Apple-Mail=_99FC5DC7-3B95-4878-9B27-9A39EA82F9BE" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: Use 65535 as scale factor for color-values on NS Date: Sat, 6 Jun 2020 13:17:32 +0200 In-Reply-To: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> Cc: Emacs developers To: Alan Third References: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F17.5EDB7ADA.0041:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=D5w51cZj c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=M51BFTxLslgA:10 a=2_iepW4DHnm-_PYEmO0A:9 a=CjuIK1q_8ugA:10 a=e95U5ltlPHoIN1d-EaIA:9 a=B2y7HmGcmWMA:10 Received-SPF: softfail client-ip=91.136.14.48; envelope-from=mattiase@acm.org; helo=mail265c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 07:17:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 11:17:41 -0000 --Apple-Mail=_99FC5DC7-3B95-4878-9B27-9A39EA82F9BE Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > <0001-Use-65535-as-color-values-scale-value-in-the-NS-back.patch> That patch contained a typo (65335 instead of 65535); corrected below. Sorry. --Apple-Mail=_99FC5DC7-3B95-4878-9B27-9A39EA82F9BE Content-Disposition: attachment; filename=0001-Use-65535-as-color-values-scale-value-in-the-NS-back.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Use-65535-as-color-values-scale-value-in-the-NS-back.patch" Content-Transfer-Encoding: quoted-printable =46rom=2038a7e4cce4ae9fb807f82e9efb4d6848668ab547=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Sat,=206=20Jun=202020=2011:23:48=20+0200=0A= Subject:=20[PATCH]=20Use=2065535=20as=20color-values=20scale=20value=20= in=20the=20NS=20backend=0A=0A*=20src/nsfns.m=20(Fxw_color_values):=20= Scale=20with=2065535=20instead=20of=2065280,=20for=0Auniformity=20with=20= other=20backends.=0A*=20lisp/faces.el=20(color-values):=20Update=20doc=20= string.=0A*=20doc/lispref/frames.texi=20(Color=20Names):=20Update=20= examples.=0A---=0A=20doc/lispref/frames.texi=20|=206=20+++---=0A=20= lisp/faces.el=20=20=20=20=20=20=20=20=20=20=20|=202=20+-=0A=20= src/nsfns.m=20=20=20=20=20=20=20=20=20=20=20=20=20|=204=20++--=0A=203=20= files=20changed,=206=20insertions(+),=206=20deletions(-)=0A=0Adiff=20= --git=20a/doc/lispref/frames.texi=20b/doc/lispref/frames.texi=0Aindex=20= 6bf5db2aa1..966f620558=20100644=0A---=20a/doc/lispref/frames.texi=0A+++=20= b/doc/lispref/frames.texi=0A@@=20-3975,11=20+3975,11=20@@=20Color=20= Names=0A=20(color-values=20"black")=0A=20=20=20=20=20=20@result{}=20(0=20= 0=200)=0A=20(color-values=20"white")=0A-=20=20=20=20=20@result{}=20= (65280=2065280=2065280)=0A+=20=20=20=20=20@result{}=20(65535=2065535=20= 65535)=0A=20(color-values=20"red")=0A-=20=20=20=20=20@result{}=20(65280=20= 0=200)=0A+=20=20=20=20=20@result{}=20(65535=200=200)=0A=20(color-values=20= "pink")=0A-=20=20=20=20=20@result{}=20(65280=2049152=2051968)=0A+=20=20=20= =20=20@result{}=20(65535=2049344=2052171)=0A=20(color-values=20"hungry")=0A= =20=20=20=20=20=20@result{}=20nil=0A=20@end=20example=0Adiff=20--git=20= a/lisp/faces.el=20b/lisp/faces.el=0Aindex=20e707f6f4b6..f4a9dedd79=20= 100644=0A---=20a/lisp/faces.el=0A+++=20b/lisp/faces.el=0A@@=20-1822,7=20= +1822,7=20@@=20color-values=0A=20string=20specifying=20a=20color's=20RGB=20= components=20(e.g.=20\"#ff12ec\").=0A=20=0A=20Return=20a=20list=20of=20= three=20integers,=20(RED=20GREEN=20BLUE),=20each=20between=200=0A-and=20= either=2065280=20or=2065535=20(the=20maximum=20depends=20on=20the=20= system).=0A+and=2065535=20inclusive.=0A=20Use=20`color-name-to-rgb'=20if=20= you=20want=20RGB=20floating-point=20values=0A=20normalized=20to=201.0.=0A= =20=0Adiff=20--git=20a/src/nsfns.m=20b/src/nsfns.m=0Aindex=20= 273fb5f759..628233ea0d=20100644=0A---=20a/src/nsfns.m=0A+++=20= b/src/nsfns.m=0A@@=20-2329,8=20+2329,8=20@@=20Frames=20are=20listed=20= from=20topmost=20(first)=20to=20bottommost=20(last).=20=20*/)=0A=20=20=20= [[col=20colorUsingDefaultColorSpace]=0A=20=20=20=20=20=20=20=20=20= getRed:=20&red=20green:=20&green=20blue:=20&blue=20alpha:=20&alpha];=0A=20= =20=20unblock_input=20();=0A-=20=20return=20list3i=20(lrint=20(red=20*=20= 65280),=20lrint=20(green=20*=2065280),=0A-=09=09=20lrint=20(blue=20*=20= 65280));=0A+=20=20return=20list3i=20(lrint=20(red=20*=2065535),=20lrint=20= (green=20*=2065535),=0A+=09=09=20lrint=20(blue=20*=2065535));=0A=20}=0A=20= =0A=20=0A--=20=0A2.21.1=20(Apple=20Git-122.3)=0A=0A= --Apple-Mail=_99FC5DC7-3B95-4878-9B27-9A39EA82F9BE-- From MAILER-DAEMON Sat Jun 06 07:41:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhXCh-0003Yz-FH for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 07:41:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhXCe-0003Yt-Nm for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:41:32 -0400 Received: from mail-il1-x12b.google.com ([2607:f8b0:4864:20::12b]:46878) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhXCd-0000iD-E9 for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:41:32 -0400 Received: by mail-il1-x12b.google.com with SMTP id h3so12175949ilh.13 for ; Sat, 06 Jun 2020 04:41:31 -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 :cc; bh=WfG+ZiVq8PvQpnVdyPQArsK3pjgrMVqPRCZbb9lsyTw=; b=TSeY6ViPOpVacRwIhSFBUqSO23sdkUrxLTDjUXQuLJbou0rYjbU5M8SmEpjzr9D2BA xPmykEV/37j6agnTaKqHPoMtJAJoyWsIX0iwfMaRj/fHqzHXaBDELOITU8fZjFN1k6a2 Po6GWhQ4wk5/JD9lIGAYOzBWpX2bJorHUx4YmX8Y8n04EmrreCEkJ7ADefTIBhMuberT 2Ofetmg0wTD1tC4OPL2yZ51gwnsisfI3Y/p7nCK5Up6CWx/E9PsZ2ACXdBGZy5nVYmGv W4iS4Nvx9+1HltkCIJ53i1i+JZ5KXH4p+VYipautpusv9EG2U195Nj6BiOsVIkEU8Fhn tIIA== 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:cc; bh=WfG+ZiVq8PvQpnVdyPQArsK3pjgrMVqPRCZbb9lsyTw=; b=OhUdPYRSMoMZUSN+8zzEkENcu9NnncWNyU1XxCaExS2npADSgomvEdDDuXimnt1AGU 58mE0wecHOn8kvcrOCqjENevOR2v0cOkfw+T72geDVf2Vh2aYiNcgy8uqguq/DZwkvcG I+i/y5Ro0Fxj24k8EZt0yGnXFK4yZV2Ynz9KhXZc6EgEmnRjSWkX6UzF1C5vhdxMEqe9 S6XACDxBj5D2fo3Ov0GWOryEZbVgpX4Z02OcDe7q4gKAnE/LrMttXTIJIUqszp4a8XvQ F8TExAv4DWCw4r2/va7DI/rm6rjD5EPFmJYaQbcOQdDFmTt2iWuRdGMqDVB4zBJAylWm 2QwQ== X-Gm-Message-State: AOAM532QLCuVliiBnPws/ApDfEWGTVtgNFCjKy7QWqkncNw2tHggX33h E+NlX+W38gFJ4BX8r3N0Xi4RqWOTUN1A7QJz220= X-Google-Smtp-Source: ABdhPJygr6Nb8kH7aEUX/SAB6tLb4/otB7JbotecojXLQtVX2NXO367va8Ma3ycZlL77NyvZX1i6hnlomTj26w4FPb4= X-Received: by 2002:a92:c60b:: with SMTP id p11mr6023612ilm.137.1591443690333; Sat, 06 Jun 2020 04:41:30 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> In-Reply-To: <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Sat, 6 Jun 2020 12:41:18 +0100 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: Paul Eggert Cc: Dmitry Gutov , Pip Cet , emacs-devel Content-Type: multipart/alternative; boundary="000000000000d7ad0805a768db80" Received-SPF: pass client-ip=2607:f8b0:4864:20::12b; envelope-from=joaotavora@gmail.com; helo=mail-il1-x12b.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 11:41:32 -0000 --000000000000d7ad0805a768db80 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 6, 2020 at 2:43 AM Paul Eggert wrote: > On 6/5/20 4:19 PM, Jo=C3=A3o T=C3=A1vora wrote: > > I totally agree it is > > undefined behaviour to change structure of literals (quoted or > > self-evaluating objects), also in Common Lisp, because compilers are > > probably allowed to reuse parts of the internal structure of such > > objects. But that's a far cry from having two different manifestations > > of `equal` such objects _be_ the same object, but only for compiled > > code. > > I don't understand this remark, as the idea that "compilers are allowed t= o > reuse > parts" necessarily implies that (eq "a" "a") can be t if the compiler > decides to > reuse the string. Depending on the implementation of sequences, it could reuse only the later parts of the sequences to maintain uniqueness and still have > Certainly in Common Lisp (eq "Foo" "Foo") might be true or > false (this specific example is called out in CLtL 6.3). > I stand corrected. I was simply mistaken :-) Jo=C3=A3o --000000000000d7ad0805a768db80 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 6, 2020 at 2:43 AM Paul Egger= t <eggert@cs.ucla.edu> wrot= e:
On 6/5/20 4:19 PM, Jo=C3=A3o T=C3=A1vora wrote:
> I totally agree it is
> undefined behaviour to change structure of literals (quoted or
> self-evaluating objects), also in Common Lisp, because compilers are > probably allowed to reuse parts of the internal structure of such
> objects.=C2=A0 But that's a far cry from having two different mani= festations
> of `equal` such objects _be_ the same object, but only for compiled > code.

I don't understand this remark, as the idea that "compilers are al= lowed to reuse
parts" necessarily implies that (eq "a" "a") can b= e t if the compiler decides to
reuse the string.

Depending on the impleme= ntation of sequences, it could reuse only the
later parts of the = sequences to maintain uniqueness and still have
=C2=A0
=
Certainly in Common Lisp = (eq "Foo" "Foo") might be true or
false (this specific example is called out in CLtL 6.3).

I stand corrected.=C2=A0 I was simply mistaken :-)

Jo=C3=A3o
--000000000000d7ad0805a768db80-- From MAILER-DAEMON Sat Jun 06 07:48:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhXIu-0004y4-Fj for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 07:48:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60468) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhXIt-0004xi-2P for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:47:59 -0400 Received: from mail-il1-x132.google.com ([2607:f8b0:4864:20::132]:38086) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhXIs-0001YP-79 for emacs-devel@gnu.org; Sat, 06 Jun 2020 07:47:58 -0400 Received: by mail-il1-x132.google.com with SMTP id b5so12214474iln.5 for ; Sat, 06 Jun 2020 04:47:57 -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 :cc; bh=7RHqkjJt80Wj+IwILhsRoBxhaCV0egzr0MU0mPvP8y8=; b=ca5Qr8dmY+LkE11o+y/tmlKnHE3uwJNyuMqA1udf3Ea+5RHX4b7Dqhu0mctE1VMK3B Ij9dH7pNTY/jUT2g4z+JCuykS6Qhjoyp9d2nAYCvkQm93WBUoJsWSSlT82mQORVTlpHj qq8+lv/uA2qOVrOzjoHv2fcenLKf0+9qy4s5vkec2DpPWx9CiIGKm9MseIw25jMpp1W1 SvkJtLAru/hXysBDfDzIrDewo0tLbLPa4TIXC3lEpMe8FxFIUw3DfCiw+eUh0J9lMd+S 4FuHSdgH1D/NfCyjIxTlYN/r77ea9e5VQ6OdIlkt+GPnVKtnqsMXCcY+hL+FHymamf1B brfQ== 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:cc; bh=7RHqkjJt80Wj+IwILhsRoBxhaCV0egzr0MU0mPvP8y8=; b=Xg58siUNK50bFMng38g5MxbdsDF+H36PO2p/oGM5k4xfgxBLs81p0xSp2fUFfr+wUL KyUSCzWQH7P8YAnM2jF4ExYPDSCuNKoIK33ocYoR/0/Dd84BaNGjaLWQq+HdTYYK/y9M v/7Dd+b2P4C9u6ZR3UDOJVmXThIWN4I3WLAxeND0u/VBfCCT0BZ4GrjtqRUMmzO3mVoI d15osCmgYKyj6Vb1Bmu+1WseHrFcILU1DtAKV9mOBCrxkP+ibCoP/19PQk11XX4eLgKb aaVMLTDnZvMB5PvK/rxmUi0vKAV6nTQhjzKj1kJJUIRLGOK1pbfhqMhD90nDW0I4sbUH ocoQ== X-Gm-Message-State: AOAM532kzbc/zUqkk8vMBIoIGFIOD4LZ3HPl26dYWXTe6fNWJa4Qbhhp BJQQrFcKZjidHyRCnEr6WSrRogV9F5MFeIUylyU= X-Google-Smtp-Source: ABdhPJzGuS/NcjDmQPV0zRv+0noK4Sigb1LtWWYYV99VDN5P4eyD9Z+xvl0IFTNUl0CmRN9M4W7CyqG77jQ381GDA50= X-Received: by 2002:a05:6e02:c:: with SMTP id h12mr12400441ilr.125.1591444077162; Sat, 06 Jun 2020 04:47:57 -0700 (PDT) MIME-Version: 1.0 References: <871rmvn7ge.fsf@gmail.com> <87lfl36abx.fsf@gmail.com> <1abe5965-b48e-6dee-1516-c5c233f09d01@cs.ucla.edu> <873679lel3.fsf@gmail.com> <87d06dje3d.fsf@gmail.com> <58642244-da07-c96d-21d5-d7d46714678d@cs.ucla.edu> In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Sat, 6 Jun 2020 12:47:45 +0100 Message-ID: Subject: =?UTF-8?Q?Re=3A_31395511=3A_=22Don=E2=80=99t_attempt_to_modify_constant_st?= =?UTF-8?Q?rings=22?= To: Paul Eggert Cc: Dmitry Gutov , Pip Cet , emacs-devel Content-Type: multipart/alternative; boundary="000000000000e634cb05a768f24d" Received-SPF: pass client-ip=2607:f8b0:4864:20::132; envelope-from=joaotavora@gmail.com; helo=mail-il1-x132.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 11:47:59 -0000 --000000000000e634cb05a768f24d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 6, 2020 at 12:41 PM Jo=C3=A3o T=C3=A1vora wrote: > On Sat, Jun 6, 2020 at 2:43 AM Paul Eggert wrote: > >> On 6/5/20 4:19 PM, Jo=C3=A3o T=C3=A1vora wrote: >> > I totally agree it is >> > undefined behaviour to change structure of literals (quoted or >> > self-evaluating objects), also in Common Lisp, because compilers are >> > probably allowed to reuse parts of the internal structure of such >> > objects. But that's a far cry from having two different manifestation= s >> > of `equal` such objects _be_ the same object, but only for compiled >> > code. >> >> I don't understand this remark, as the idea that "compilers are allowed >> to reuse >> parts" necessarily implies that (eq "a" "a") can be t if the compiler >> decides to >> reuse the string. > > > Depending on the implementation of sequences, it could reuse only the > later parts of the sequences to maintain uniqueness and still have > I forgot to finish the sentence: "and still have some some reuse". Jo=C3=A3o --000000000000e634cb05a768f24d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 6, 2020 at 12:41 PM Jo=C3=A3o= T=C3=A1vora <joaotavora@gmail.c= om> wrote:
On Sat, Jun = 6, 2020 at 2:43 AM Paul Eggert <eggert@cs.ucla.edu> wrote:
On 6/5/20 4:19= PM, Jo=C3=A3o T=C3=A1vora wrote:
> I totally agree it is
> undefined behaviour to change structure of literals (quoted or
> self-evaluating objects), also in Common Lisp, because compilers are > probably allowed to reuse parts of the internal structure of such
> objects.=C2=A0 But that's a far cry from having two different mani= festations
> of `equal` such objects _be_ the same object, but only for compiled > code.

I don't understand this remark, as the idea that "compilers are al= lowed to reuse
parts" necessarily implies that (eq "a" "a") can b= e t if the compiler decides to
reuse the string.

Depending on the impleme= ntation of sequences, it could reuse only the
later parts of the = sequences to maintain uniqueness and still have

I forgot to finish the sentence: "and stil= l have some some reuse".

Jo=C3=A3o
--000000000000e634cb05a768f24d-- From MAILER-DAEMON Sat Jun 06 08:05:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhXaE-0001td-5O for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 08:05:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhXaC-0001t0-A0 for emacs-devel@gnu.org; Sat, 06 Jun 2020 08:05:52 -0400 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:50795) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhXa8-0004xu-7K; Sat, 06 Jun 2020 08:05:51 -0400 X-Originating-IP: 111.89.103.91 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 689F160006; Sat, 6 Jun 2020 12:05:33 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: What is the most useful potential feature which Emacs lacks? From: Jean-Christophe Helary In-Reply-To: <83wo4k8r9s.fsf@gnu.org> Date: Sat, 6 Jun 2020 21:05:29 +0900 Cc: bzg@gnu.org, excalamus@tutanota.com, van.ly+2020@sdf.org, rms@gnu.org, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <575DFA37-17B0-4C14-8827-043CE1EDD039@traduction-libre.org> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.195; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay3-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 08:05:43 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 12:05:52 -0000 > On Jun 6, 2020, at 18:42, Eli Zaretskii wrote: >=20 >> From: Jean-Christophe Helary = >> Date: Tue, 2 Jun 2020 08:50:33 +0900 >> Cc: Eli Zaretskii , >> excalamus@tutanota.com, >> van.ly+2020@sdf.org, >> Richard Stallman , >> emacs-devel@gnu.org >>=20 >>>> What is missing in Emacs to make this possible? >>>=20 >>> I don't know for sure. >>>=20 >>> In the past, I was able to collaborate with a friend using an Emacs >>> extension called "Rudel", which lets two distant buffers communicate >>> with each other over the Gobby protocol. >>>=20 >>> https://www.emacswiki.org/emacs/Rudel indicates that the reference >>> implementation for the Gobby protocol is broken. I have not tried. >>>=20 >>> So perhaps the required work is not on the Emacs side, but on that=20= >>> of the protocol and its implementation. >>=20 >> It looks like SubEthaEdit, the text editor that first provided solid = collaborative editing features on macos is now released under the MIT = license and its communication protocol is documented on emacswiki: >>=20 >> https://www.emacswiki.org/emacs/SubEthaEditProtocol >=20 > What I think is missing is not the description of a specific protocol, > but a higher-level spec of basic capabilities needed for the > collaborative editing support in Emacs. Is this available anywhere? > If not, could someone please write it up? >=20 > For example, one thing that strikes me is why "collaboration" via a > dVCS is not a good solution, or at least the basis of a solution? Am > I missing something? I am totally unable to talk about the technical aspect, but in fact, the = software that I mention in the emacs for translators thread on = help-gnu-emacs (OmegaT) actually uses Git or svn as the "engine" for = collaboration. The files that are shared on the git server are manipulated by all the = collaborators who regularly commit their modifications and when there is = a conflict, the collaborators are asked to resolve it. One collaborator = commits are regularly reflected to the other collaborators so that the = work proceeds with only a small lag between updates. But I think what collaborative editing users have in mind is closer to = an etherpad than to what OmegaT does. --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sat Jun 06 08:49:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhYGb-0001hG-Ci for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 08:49:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhYGY-0001fH-8R for emacs-devel@gnu.org; Sat, 06 Jun 2020 08:49:38 -0400 Received: from logand.com ([37.48.87.44]:37552) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhYGX-00033f-CQ; Sat, 06 Jun 2020 08:49:37 -0400 Received: by logand.com (Postfix, from userid 1001) id 595C11ACD9A; Sat, 6 Jun 2020 14:49:32 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <83o8pxa05z.fsf@gnu.org> References: <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <833679boji.fsf@gnu.org> <83sgf9a6rb.fsf@gnu.org> <87d06dv689.fsf@logand.com> <83o8pxa05z.fsf@gnu.org> Date: Sat, 06 Jun 2020 14:49:25 +0200 Message-ID: <877dwk1hre.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 08:47:17 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 12:49:38 -0000 Eli Zaretskii writes: >> Eli Zaretskii writes: >> > See window-text-pixel-size as one example of what we have. The >> > underlying functionality is even more powerful. >> >> (window-text-pixel-size) returns nonsense in console. > > It does? Can you show an example? Or, better yet, make a bug report > about the problematic case(s)? bug report sent >> >> > We already can display such thin lines, see, for example, help-fns.el >> >> > (search for ":height"). No X-level graphics is needed. >> >> X graphics is seems to be needed. > > You need a GUI frame (not necessarily on X), but that's all. There's > no need to expose Xlib calls to Lisp, which was what the original > question was about. ok, thanks for clarification From MAILER-DAEMON Sat Jun 06 09:44:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhZ7L-0001wI-NB for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 09:44:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41442) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhZ7J-0001uu-TK for emacs-devel@gnu.org; Sat, 06 Jun 2020 09:44:09 -0400 Received: from mail-db8eur05olkn2014.outbound.protection.outlook.com ([40.92.89.14]:22720 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhZ7H-0003Lm-S3; Sat, 06 Jun 2020 09:44:09 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c3e/uYednatqryxeGlPHPD+YxLm/lXic+hf8U+B+nrIGFPwueMy4YTQijsTJyHFhZ3IRkgYdD1nLj7HDjlo+z+h03ZI0ZZXFrZXlhBb3rXv8suPwIzgj7tY+VaIHxVCndYG5VOpbHCbJipcWWfFqkLNRSC54FtcUqxfAeMu4TA7esKFL0c+A/tMCmrs0DcJwKrM48580wyAqD1XVgz50NKfh1Pc7fhukaTedhATbbAael8P4+hnxxhwLsMmzCyH+hiLtwzipL8PrwDoN1LEFvmOn84cEKDJhI8ryY1vGFsVGFkbCdQtpXi4GXRwxsDixIJgOKzk13kqDN2Wi08v2SA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IraMEgi3e1nimFYxd2OI9CzCJNvexLTIOE6SF8eptyw=; b=Lnm/QIU0ADRPAGutPTNZdJyE3NfgtfXftjv8bglEoTyofsta9HXEgVpMCZFbGNjeuMet1/POifR8uKM5Rq9OK1HcT6cxcqqRxatMtoMA7BMgeR1JUebp4iZ2TClhUTlxMmcl3jbF+7TDBtCl7qMDRV9MwDGarDH9q7KBf1ww2CBduxHyojSTed9gV0Z5+ielspigs4umqorkkxfsoGno3sHwA1osaP0Yh7QLz6d/Ezg64bXwoadhi2/2i16MWnuWLmLSgwhdoyfytL5yTkOAwJ0zswbpN3s4oJQqLybycNLeOwCNL/3JeULtzlmcX9fyovjE91CDbc7j0SibVZsvhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IraMEgi3e1nimFYxd2OI9CzCJNvexLTIOE6SF8eptyw=; b=bn64ZzhWCrqt1fp6CUhS6ORN4t6hnueDti4ra2iiJI3rGd3bo/T+WKt+5vZ4O19qcaqLd3wk2eZMF0dlrBv9toXIsY7XOhR5asSaSsdHb2fSqwOEWnUVDdqqZKZUHH1OLYYQsftxGbZFaqamZFfkN3FSYmLTXGwttUUhiS3PpxEcLytZphCsrwf3s/aNo+hmvWsqN81kOrPTlmkVIyCZjkRpwzzd1KXS50WiRvec9IhJGCwV35atEezL+EaSXyrYrBNqjSSbbsHL0BYGnpe1eFGd8ppb3KcRj+pGDXZnXT1WXkjSoGDgOeH3MEZPWuprQi4M/0nQzkZh3iQxKzD7RA== Received: from VI1EUR05FT010.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc12::46) by VI1EUR05HT133.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc12::180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 13:44:04 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:fc12::4e) by VI1EUR05FT010.mail.protection.outlook.com (2a01:111:e400:fc12::159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 13:44:04 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:4DED6A5653882BDC43BC4A4C439A00A1F019BDAFC7FB5A36C0D5B378EF225EC4; UpperCasedChecksum:5AED7F6839A7B599044F5196047002F5D728F8F597D030F2D519513A735FE616; SizeAsReceived:8422; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.023; Sat, 6 Jun 2020 13:44:04 +0000 From: Arthur Miller To: Richard Stallman Cc: Marcin Borkowski , sb@dod.no, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87v9k5n5yp.fsf@mbork.pl> Date: Sat, 06 Jun 2020 15:44:02 +0200 In-Reply-To: (Richard Stallman's message of "Fri, 05 Jun 2020 23:57:49 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM5PR0502CA0003.eurprd05.prod.outlook.com (2603:10a6:203:91::13) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <873678z4v1.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM5PR0502CA0003.eurprd05.prod.outlook.com (2603:10a6:203:91::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 13:44:03 +0000 X-Microsoft-Original-Message-ID: <873678z4v1.fsf@live.com> X-TMN: [vjnQncVaPrnETdSzguBSGE0A1mzCRjAL] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 94e1da60-0786-49e0-1512-08d80a1fad02 X-MS-TrafficTypeDiagnostic: VI1EUR05HT133: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bAqFhzsjNi8E9rj9X5bxNICNqiPQ1Zw1qZq+giJ/cjYp0r3Zp911UAwbL2zME0K1tr0/F7i+yiXQ1PsqUoB3i0EmacMcUw5RVhrb+nITl//5LMg8LtocSil8LhGqGgGrUQuLKsTnlXT9f5sRHdsUFVPrFBiri1redSSZdxItfuzbfM9QNWmts1Lw09oYijJlERvYVe8OYFqGdpZMo3IW9rlzRVJL+A2ym0udVPNDJl+EgVzjA2DpQ+qsFNyWE3qd X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: edmM9nwp0IoUlMysVuKfymM9rzAp/3qVae1D5xdhSKyK153+R59VIZzRyUMAlByhnr0cneM4zwMYzqxqUuHZZ6ovvVae/P1vOktcqy2UFIwfzd9xZUxwxL5qjjM7WrDxvW9YrXRwSTfVSqPXYVvfEw== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: 94e1da60-0786-49e0-1512-08d80a1fad02 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 13:44:04.0941 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1EUR05HT133 Received-SPF: pass client-ip=40.92.89.14; envelope-from=arthur.miller@live.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 09:44:04 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 13:44:10 -0000 Richard Stallman writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > > > Can't that be helped with some of live preview options for a pdf or ps > > > > or latex format? Auctex maybe? Or maybe some of org -> pdf/ps + DocView? > > > > > > It would probably take half a minute each time. > > > I think you made a typo here, it should have been "half a second" > > probably. > > That would be an amazing typo. I expect starting these various > programs to take a long time. But if it doesn't, they might > be adequate. I don't know what kind of computer you use, of course, but if you ment the startup time for a browser, then maybe it is a half second or so, but does it matter? It happends once, when one start to work on a pamflet. LibreOffice takes also a half a second if not more to startup every time and I have quite decent machine. If you start a Chromium process, and then connect from within Emacs with impatient-mode, I don't think you would suffer from lack of real time performance; not for something like a pamflet. Another option is to use some webkit wrap + xwidgets, but I haven't tryed it myself. No idea how easy to use or good it is, but for preview it should probably be good enough. I have seen some Reddit threads and YT videos where people demonstrated it, but I didn't care to try myself. Here is some 4 year old video where a guy is demonstrating xwidgets and webkit to render html in gnus: https://www.youtube.com/watch?v=J2YdjpWJJHs (download with youtube-dl to skip proprietary js) Very nice presentation by the way. With HTML+CSS as intermediate file format, one can have some predefined templates with a pamflet size, layout, typografi etc, and then just edit content of few html tags. From MAILER-DAEMON Sat Jun 06 10:19:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhZfo-0000Uf-ME for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 10:19:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43626) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhZfm-0000UR-W4 for emacs-devel@gnu.org; Sat, 06 Jun 2020 10:19:47 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:5965) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhZfl-0008Nf-7G; Sat, 06 Jun 2020 10:19:45 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 105BC44154A; Sat, 6 Jun 2020 10:19:43 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 70073441545; Sat, 6 Jun 2020 10:19:41 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591453181; bh=7lpHXj43rpGDTGESl0BWtV36m2Op84MtZKspIJfdGMk=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Hq8KLalllLVwrxteWxb80i7/FZRdhzUxWDakVpk73jbQiThr8qRaECNVcplzIGcja gxwJ2lspl1+kCThM6r46SWIQuhTMXaSYUAKF597KIQb/GkJ/bV8HOxotm4h4a1F6iH gwCxTjNHncte6F01siWkbzEHZcP3UEPvFSdrBXqH/tu1IFlGPRcQxhhtZOImfs5PIO uWZNj1zlF5n1ry+IQ5AgQC7XxnU30Y2FQVXCxU7N6qi+vVF0NcCsBsp6oiAtIk2iD2 Q0lsBG9JE2ngMshAaC4C6ykgNXNjVrUxVz4+N8/5vgLKc5wWkQOLqa3BCCdnE56MQO gFDP7vSN+uPMw== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 327341210EE; Sat, 6 Jun 2020 10:19:41 -0400 (EDT) From: Stefan Monnier To: Eli Zaretskii Cc: tomas@tuxteam.de, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> <83v9k48pwn.fsf@gnu.org> Date: Sat, 06 Jun 2020 10:19:40 -0400 In-Reply-To: <83v9k48pwn.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 06 Jun 2020 13:11:36 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.017 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 10:19:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 14:19:47 -0000 > Someone will have to explain why this is useful. Or maybe you can just accept it as something other people might enjoy even tho you don't ;-) > Sitting and looking at other people's typing something, then erasing > and retyping, one character at a time, sounds like a huge waste of > time to me. Yet, as a teacher, I very often am exactly in that situation, where either the student or I write slowly on the board to try and express visually what we want to say. Now, "plain text" like we have in Emacs buffers isn't quite the same, but now that I have to teach via video-conferences, I regularly share my Emacs frame over Jitsi and they watch me slowly type code (and erase and retype) while explaining out loud what it is I'm doing. It may sound slow and painful, but the low speed is actually useful to give them time to understand, and the fact that it's done "live" makes the feedback loop much more effective when it takes several back&forth between the students and I before we come to an understanding. And of course, all that applies as well sometimes when discussing research ideas among peers. > I could use that same time to modify a different section of the same > document, or suggest a solution for a problem in parallel to several > others suggesting their solutions for the same problem (which would > need some processing on top of VC conflict resolution). I'm probably > missing something. Yes, we *also* do that (using Git, typically to share a TeX document or source code) and that's where the meat of work takes place, but at times the fast back&forth of "live editing" (or just talking) is very helpful. Stefan From MAILER-DAEMON Sat Jun 06 10:58:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhaHb-00075R-UP for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 10:58:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhaHa-00075F-QE for emacs-devel@gnu.org; Sat, 06 Jun 2020 10:58:50 -0400 Received: from mail-oln040092074073.outbound.protection.outlook.com ([40.92.74.73]:9770 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhaHY-0005tF-So; Sat, 06 Jun 2020 10:58:50 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IsoqAA62ikVXSgV5BxlDmgFPT0Vp9+ARxnYzEJYpK3GrQdBVKumXw2OzrVyEtLuottt++Lt+BJFnrjIX5VNHaYx4QlsT1lERLIW11W6wh5vzC6WKK0nZBwOVIDP4jy6Qh5PJX9yur+M5Vw9RtMpKF4AqC7W3ahSXAnQaZ3IaECvXfYiCcVX4Q/q3O6UmxYwV6ySmXai5Bom5ulKdETxKLEDgA0zhKcDqyJOw/4W23ok52eKtyT8eJ1o3nXFxHoM9MSWFD+xOT821fMsk3GPAlty5vP4ytAJlChUliWBlVXwUIW2wdvL0qZfo6rLXpuGL2bzeiqZQY2lIXYE/OXEknw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=64LPndVYKjEKQoplJrHKXdH3v25E6OHnqIKVKKdwCZI=; b=FaAtFCureP7fs0RiR2sQfmEM51AsfDUpiPXASuKsS81DBU1dZlZE4J///gUlfTcRJc6m6Zy865lQ1RiqgakWlvFvF2zH7b6QomuFtTzGlq19J4ozTOinDtJ/hGtMRygqxnWEhYggaBnMKCnBv+PGgpj8RSxzBHzrj48OKhQVsdL1BnueN9AAwbBB8+3vcqvl99CKsub9dWF6R0xZuMw7vLYBfsPxH6FXM1nAgoJ3GMdjnN9tITKVyBYL4GXnmbH3A9Er/0/MqA7SMFFPH82zXYH3Q4CI/6cu88AIUMHozO3acsUuCz9LniNNC3VjPPMW/wlWIOfumkJBiGw4tboAgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=64LPndVYKjEKQoplJrHKXdH3v25E6OHnqIKVKKdwCZI=; b=berPSj/uCBXKKnPLcMRnGgCuqMrw8qbsn+0O/TuUA0nNTow4hbj7ojkRaIg2AJ+5yQKNcIheJjnYdz7fhCBwp+DKVVFrZGoBx1fz9QKU4R4Rv9pEF4jQdP0qMfIntbeHbXXpByAxf0+e/qGN8YFKeyPsYPTXCVYc+qW2yTLwZJfJiNqzZKBmfQ1VBSqcLXturGZEV/B+SiCJfJvoyavE0rH7pkyyfQLf0niKJO6SNI8wvXgs6PakJVqFWhPaeOiSSfsOA7vKVdwjbRcsE8Jayct8a1/25QS3cFPXFd71r/s2Py3F4Y/M0bQb1RgUpCTgdYc9dIHQsLXlkpsa1v18yg== Received: from VI1EUR04FT034.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0e::52) by VI1EUR04HT053.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0e::265) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 14:58:45 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:7e0e::50) by VI1EUR04FT034.mail.protection.outlook.com (2a01:111:e400:7e0e::207) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 14:58:45 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:479D22E3697D10E5F8B0FBD3E8E12C0F27D6811BF8F9E303F00DBF74356E7F10; UpperCasedChecksum:C2A2A80DACADC4992A283D9B26FB02FC422C3031C8226EB42A8A7B8D391CA606; SizeAsReceived:8022; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.023; Sat, 6 Jun 2020 14:58:45 +0000 From: Arthur Miller To: Stefan Monnier Cc: Eli Zaretskii , tomas@tuxteam.de, emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> <83v9k48pwn.fsf@gnu.org> Date: Sat, 06 Jun 2020 16:58:44 +0200 In-Reply-To: (Stefan Monnier's message of "Sat, 06 Jun 2020 10:19:40 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM5PR1001CA0019.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::32) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <87y2p0xmu3.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM5PR1001CA0019.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 14:58:45 +0000 X-Microsoft-Original-Message-ID: <87y2p0xmu3.fsf@live.com> X-TMN: [1yMAgHXHex5KcXpH3C+0W2McG1odJ9Tk] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: f7a24c2d-5fc9-47bd-6b5a-08d80a2a1c5e X-MS-TrafficTypeDiagnostic: VI1EUR04HT053: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W83zTQz1MG+DLIRvaYFwIbXYvkOAQhoJvb7TqpeS8mqD/GCnIzvN3KXD9/kmWWxSghFdNHcUKEyvpqce92t9VnV6M91d7Umwbw2X2ka/uph5rpBaB+OZf7dyI0ZV0vb7gWN9gGXuuq7znuy+d1UYdlJeIsd3DaY5ttycqTwlMYCtg3uBFDiE5v9+PS1/hZ9LXqKPv4gY50t+L0yd7Ij9kWoXi8M43CKqJHZiLluuloqTW37ToS+WEBtSxYmrGUKL X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: E6mwEof3YSN27m1ZW49P/fGbWUKmBu34U9BuwixmxZAox6Ddu/spVtJ9hNKO0DW2gDsfwf/ngVpuMSmrpFhwyYZsmi4VWljQh3HeCn5OvU+7KmUKoqxAytbhwfS05LNyL+Cr+O1RUWkvJ1ILQdAUWQ== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7a24c2d-5fc9-47bd-6b5a-08d80a2a1c5e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 14:58:45.7637 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1EUR04HT053 Received-SPF: pass client-ip=40.92.74.73; envelope-from=arthur.miller@live.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 10:58:46 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 14:58:51 -0000 Stefan Monnier writes: >> Someone will have to explain why this is useful. > > Or maybe you can just accept it as something other people might enjoy > even tho you don't ;-) > >> Sitting and looking at other people's typing something, then erasing >> and retyping, one character at a time, sounds like a huge waste of >> time to me. > > Yet, as a teacher, I very often am exactly in that situation, where > either the student or I write slowly on the board to try and express > visually what we want to say. Now, "plain text" like we have in Emacs > buffers isn't quite the same, but now that I have to teach via > video-conferences, I regularly share my Emacs frame over Jitsi and they > watch me slowly type code (and erase and retype) while explaining out > loud what it is I'm doing. > > It may sound slow and painful, but the low speed is actually useful to > give them time to understand, and the fact that it's done "live" makes > the feedback loop much more effective when it takes several back&forth > between the students and I before we come to an understanding. > > And of course, all that applies as well sometimes when discussing > research ideas among peers. > >> I could use that same time to modify a different section of the same >> document, or suggest a solution for a problem in parallel to several >> others suggesting their solutions for the same problem (which would >> need some processing on top of VC conflict resolution). I'm probably >> missing something. > > Yes, we *also* do that (using Git, typically to share a TeX document or > source code) and that's where the meat of work takes place, but at times > the fast back&forth of "live editing" (or just talking) is very helpful. > > > Stefan Can this give some inspiration to you guys? http://impromptu.moso.com.au/ From MAILER-DAEMON Sat Jun 06 13:47:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhcud-00025l-7H for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 13:47:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhcub-00024w-Jd for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:47:17 -0400 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]:43457) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhcua-0002FN-4I for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:47:17 -0400 Received: by mail-qt1-x82c.google.com with SMTP id j32so11369624qte.10 for ; Sat, 06 Jun 2020 10:47:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=bPGxHORtR6qST0ADDiaWR8OGuYQwNnTvFMXhI0CR02Q=; b=sjRyFamnp/WVNgecycklqZBOb8IgEn3DcHZbu0OIWy8roS6+a3gwjwl5xTArXirJAa LMXMQXuzMy/ppZTnUpa28HR/s6DQG1gKBXLmN4klM4uO6rhul5OM1sNtmZi/RJButXkL qDyMdbEZZFgUghxyTq9zsZfrt5RHGYGv53veqWJNy/Y40k16lEvigbeEbhqf1f0uBawD gP/fmpfypXz+DZqpqdREfpBpBGX4JdXh23ouxWq8McMUg+6uTadHWGBdivrvyQCQA+o6 zkokR+0NILF4hNRde/o2kwMqem+0thB10eh+4opF2AjqXk5lCoOuQdhpYU5acpUyjgoW 8S+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=bPGxHORtR6qST0ADDiaWR8OGuYQwNnTvFMXhI0CR02Q=; b=l2JAufXRVnQgY2P/80odv1P0YRg0wMnn3LKLczRJdiCfYXK1aSFzhuoBhbJjYTpQcL ippc2bN8gIPwptu0CQ9dtpgSWRdC752yDuipYH1RViFgHPCOlyz3uCZiBm8Qas2t74JS I9y3+dTYkom1wotniTwCk5k2/o3CEICjdUhz71/ALEwCAXP1jZ91IyIKHfJTNa5YxLfW Ipe5JdSqHEraekjnFsjKg4NhqFN5BXljyP/KLepkaRG9BbXKwYzNqI2wnbHxEjtrLdml RjgBHA0JXntq6nw8D9W92QXW228k5Rz89Ch09yKDkkxwdwoTQ7SVjIzwfpDjsuwzv3aS Nk0w== X-Gm-Message-State: AOAM531Mq8dU7rzSHLGgV8BB0aoktRTgcpanQ29juNcswUM62+kamUyI jYNEAlhS/gIsQ9U2wqLbvcYks00GlYMIiQ== X-Google-Smtp-Source: ABdhPJytdiTu//GUM3hO2gsh5l/w8dJPJK6PBzPU0Iid4YXXsyF71zFFROzUzIOYrb+pxtE8Dzn5yQ== X-Received: by 2002:a37:aec3:: with SMTP id x186mr15090071qke.4.1591461815963; Sat, 06 Jun 2020 09:43:35 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id k12sm2454820qkk.58.2020.06.06.09.43.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 09:43:35 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: monnier@iro.umontreal.ca, jonas@bernoul.li, johnw@gnu.org, emacs-devel@gnu.org Subject: Re: Un-deprecating oset References: <87eery1xhe.fsf@bernoul.li> <87a72d42h2.fsf@bernoul.li> <87a726tg3c.fsf@bernoul.li> <877dx1rt78.fsf@bernoul.li> <83zh9wujkx.fsf@gnu.org> <83sgfougls.fsf@gnu.org> <874krsxn48.fsf@tcd.ie> <87img8ulmu.fsf@tcd.ie> <837dwkabjw.fsf@gnu.org> Date: Sat, 06 Jun 2020 17:43:33 +0100 In-Reply-To: <837dwkabjw.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 06 Jun 2020 10:38:43 +0300") Message-ID: <87lfl0jgay.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::82c; envelope-from=contovob@tcd.ie; helo=mail-qt1-x82c.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 17:47:17 -0000 Eli Zaretskii writes: >> From: "Basil L. Contovounesios" >> Cc: Stefan Monnier , jonas@bernoul.li, >> johnw@gnu.org, emacs-devel@gnu.org >> Date: Wed, 03 Jun 2020 18:03:53 +0100 >> >> +@defmac oref obj slot >> +@anchor{oref} >> +This macro retrieves the value stored in @var{obj} in the slot named >> +by @var{slot}. @var{slot} is the name of the slot when created by >> +@dfn{defclass}. > > Two minor stylistic points: Thanks, I incorporated your suggestions and pushed the two patches to master and emacs-27, respectively. Un-deprecate oset and oset-default 8bcc781bc7 2020-06-06 17:24:00 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=8bcc781bc762b4082cfd678b88938e3d03465d91 Minor improvements to EDE and EIEIO manuals d8593fd19f 2020-06-06 16:35:52 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d8593fd19ffdb1fa62f0b0c4b971cfdb325fbe1d > . It is many times better to use the argument name as an integral > part of the sentence, instead of separating it. For example: > > This macro retrieves the value stored in @var{obj} in the named > @var{slot}. > > . It is better to avoid starting a sentence with @var{something}, > because in the printed version of the manual @var{..} doesn't > capitalize its argument, so you get a sentence that starts with a > lower-case letter, which is not valid English. (Yes, we have a lot > of examples of this sub-optimal usage our manuals.) In this case, > I would rephrase: > > Slots names are determined by @dfn{defclass} which creates the > slot. > > Btw, why is "defclass" in @dfn here? I saw no reason for it so changed it to @code instead. Thanks, -- Basil From MAILER-DAEMON Sat Jun 06 13:55:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhd26-0004Pu-Gr for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 13:55:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhd23-0004PZ-1g for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:54:59 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:33860) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhd1z-0003YV-9T for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:54:58 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A69771600E0; Sat, 6 Jun 2020 10:54:51 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 1D2nuZ3pCSD0; Sat, 6 Jun 2020 10:54:50 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 5CE361600E1; Sat, 6 Jun 2020 10:54:50 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id aF5sVxif_4mB; Sat, 6 Jun 2020 10:54:50 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id F028E1600E0; Sat, 6 Jun 2020 10:54:49 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Pip Cet Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> Date: Sat, 6 Jun 2020 10:54:46 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87img4zjy7.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 13:54:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 17:55:00 -0000 On 6/6/20 1:18 AM, Pip Cet wrote: >> there have always been Emacs Lisp objects that are not mutable. > > Lately, only pure ones, as far as I can tell? There are others. I haven't cataloged them but they include builtin symbol names, empty strings, and constant variables (no, I didn't come up with that last term :-). Also numbers of course. Constants have always been ubiquitous in Emacs. >> If we decide to simplify/document by saying "all strings are modifiable" then >> we'll need significant work at both the C and Lisp level to do that. > > I don't see why. All strings are modifiable, but the byte compiler will > identify strings under certain circumstances. That's not how Emacs works now, and it's not how Common Lisp or Scheme works. If we insisted on making the change you're proposing, it would throw yet another obstacle into the path of porting Emacs to other platforms such as Guile. That would not be a good road to take. It might be worth making such a significant change if modifiable string literals were an important feature that Elisp programmers urgently needed. But they're not: they're rarely used, partly because when they have been used their use often caused subtle bugs (as we've seen with make-text-button). They're not a feature worth fighting for, any more than mutable numbers would be. >> This will >> hurt performance a bit since it will disable some optimizations. > > Which ones? The ones Emacs is currently using, such as some strings are in read-only shared memory, and some are coalesced. It would be unreasonable to coalesce strings if they were mutable, since that would mean changing one would change the other. > So far, what you have proposed is "an error is thrown if you try to > modify the characters of a string literal, or if you add text > properties unless it already has some, or if you remove the last text > property". There must be some confusion here, as I haven't proposed that. What I'm thinking of proposing (though I haven't written it up yet, and this is just an off-the-cuff first cut) is that Emacs signal an error if a program attempts to change a string constant's characters or text properties. That's a simple notion, and it's something that Emacs long did for preloaded strings so it's not like this would be a giant revolution. To my mind it's a considerably more-conservative change than the one you're suggesting. > (In general, I think that's probably not a good benchmark to optimize > Emacs for). Admittedly it's crude but it is better than nothing and it is what we have readily available. If you have another easy-to-use benchmark that would be better, I'm all ears. > I'm not sure "undefined behavior" is a useful term when speaking about > Emacs Lisp, except for behavior which is explicitly documented to be > unreliable. There's a single implementation, and a lot of code is > written to conform not to what's documented but to what happens to > work. Of course, and there's a natural tension between trying to document every unimportant implementation detail (which would be a mistake) and not documenting useful behavior (which would also be a mistake). But that's not the issue here, as the behavior in question is explicitly documented to be unreliable and we're discussing what (if anything) to do about it. From MAILER-DAEMON Sat Jun 06 13:57:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhd4n-0007SA-UE for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 13:57:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhd4m-0007S1-8x for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:57:48 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:41259) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhd4k-0004aS-Mj for emacs-devel@gnu.org; Sat, 06 Jun 2020 13:57:47 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 54BB380BB9; Sat, 6 Jun 2020 13:57:45 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id B8A4480605; Sat, 6 Jun 2020 13:57:43 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591466263; bh=8ddzwL+VJU+NQ0UOe77uYnASsAfX/NmqNHxSd1murCw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=gf0eP21HesR/zkycgxuvIRH5lLF6+APw6UOmkkvaTrlBRd6JkbYU8fEG3W9si1+1p 3PmzFpxqMJcREWYt4XpNy98D9yTd+f4xNGr6q+KVc1u1Yj5HyYw9uAypPXQhml4Ww4 5mQbDCIt2tqBYKR4QUXzBMP5RbBHlej8BFo3bpznv9SImJE9WmY+jQ9EfTGPJpOJWq 5S6MPuUtZN7HqKj8+0Haurzh9bXy5qpvgl0jj1seF7gxAilKP95+cKpT6/201T9UU6 uNsjnN6VIk+miMFNjKgg9d83QoY+fUEQrsWzixrVTBrk/21vf72ATbOzJheE/pr7uO 4uqtmfEv9j2mQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6B57E12029A; Sat, 6 Jun 2020 13:57:43 -0400 (EDT) From: Stefan Monnier To: Drew Adams Cc: Pip Cet , Paul Eggert , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> Date: Sat, 06 Jun 2020 13:57:42 -0400 In-Reply-To: <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> (Drew Adams's message of "Sat, 6 Jun 2020 09:57:23 -0700 (PDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.012 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 13:57:45 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 17:57:48 -0000 > But going backwards, toward some perhaps unneeded > optimization, in the direction of systematically > raising an error when trying to modify text > properties of a string, is not a good idea, IMO. I think there needs to be a clarification here: the issue is about modifying data (here specifically strings, but the issue applies to all other such data) that appears as literal in the code. This issue is not one of optimization (preventing those modifications would likely impose a slowdown, if anything) but one of detecting usage that is usually a bug (one that leads to people being utterly confused by the resulting behavior). Stefan From MAILER-DAEMON Sat Jun 06 14:20:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhdR6-0003xY-7D for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 14:20:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhdR4-0003xQ-J4 for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:20:50 -0400 Received: from mail-qk1-x72e.google.com ([2607:f8b0:4864:20::72e]:42046) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhdR3-0000d3-Or for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:20:50 -0400 Received: by mail-qk1-x72e.google.com with SMTP id s1so13199805qkf.9 for ; Sat, 06 Jun 2020 11:20:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:message-id :date:mime-version; bh=hSSorgTy4ZzMu5A+IfbrdBSbWcp+xhz9aXpqUduJuXQ=; b=Qfl7cfcX7/cudDCRKXFYj51lrMBI0Ms2l7CO1L8M61FMyaUk2HEBqomBrv9ACV/DIl Z6o/G9VNwfyLIcIXgiZR7Tkybb+Msy8Wmop2fzXzLoVVwWqlbQCbd4/UJVcSL0cpYHjj rowl5TxkbrZrRYXA/QnqVGoXXZ9NM1E/bK7srTplKiduxur25t9Nm8Uw6/Nm7rgzjfkr PyvTaa6RndvZrZaA+qw/I+cOHJnzDG4A9JGqqdUXwj5Ef9ZsJ0AOIcXE28rQFwzjUIwv jiyfHeHM0vaOWx8OFH7hWiqgcW0Lw4s0oXAW06vg469EvOgToDZ2Y/sy/yQ3KptZJCdQ vPLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:message-id:date:mime-version; bh=hSSorgTy4ZzMu5A+IfbrdBSbWcp+xhz9aXpqUduJuXQ=; b=Wf0m/zNTYlaGRk9YqltU7pq7Bl2bNGwaSlOSBMRzBwvHIRyDtqIkHKLGZ7Ca4ZTUJ8 rhx3H+QwB7z2O42k22wesXsPwYxPkAMHhBRX0edIWxMj7PTTyuKNxLZS0URA1aASrzF1 cU4n2AmwmslZ13nm0MxOmUfTsDT+9hT8zgnk3F/kjoHZwZPN7anFo88wRmCKQA+Rn7y1 0Av156HskDnlPSE6l3vA3qcR0UQUS+yMnq8hME6Si5P1RT20pWME75bkL8KW0HZnSWbK empJYF6DJvt0m+73ZaMhAfV2Dl6k3Kt9oXKp+aMGXjJInc2VtNXJYBsyFIde/djKBCig R/cA== X-Gm-Message-State: AOAM533F0040AEuuhOhZPQ4O0/GbJPBhfzml1+oV89JLteQ3KcDDyHwP TZpjqDF+D2BR7euqAuW1e7gbEK2I X-Google-Smtp-Source: ABdhPJz2iq2hZ/FHlMs9rFL6DLbKAap2NJqA5GKaATJU3zVFsqeplzEiZyyXLWVcz5FYXiLS5oKq9w== X-Received: by 2002:a05:620a:1396:: with SMTP id k22mr15590959qki.28.1591467648017; Sat, 06 Jun 2020 11:20:48 -0700 (PDT) Received: from arch-thinkpad ([2604:2000:2f41:2d00::1]) by smtp.gmail.com with ESMTPSA id v69sm2712771qkb.96.2020.06.06.11.20.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 11:20:47 -0700 (PDT) References: <87eeqv6d30.fsf@gmail.com> User-agent: mu4e 1.4.8; emacs 28.0.50 From: Zach Shaftel To: Helmut Eller Cc: emacs-devel@gnu.org Subject: Re: GSoC project - Improving ELisp Traceback and Debugging Information In-reply-to: Message-ID: <878sh0rr7m.fsf@gmail.com> Date: Sat, 06 Jun 2020 14:20:46 -0400 MIME-Version: 1.0 Content-Type: text/plain; format=flowed Received-SPF: pass client-ip=2607:f8b0:4864:20::72e; envelope-from=zshaftel@gmail.com; helo=mail-qk1-x72e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 18:20:50 -0000 > I don't see this branch on Savannah; there's a > feature/soc-bytecode-in-traceback from 2020-04-27, but > apparently > doesn't contain all this. Ah my mistake, Rocky Bernstein had pushed that branch, I'm still waiting to hear back from copyright-clerk@fsf.org so I don't know if I can push to Savannah just yet. The repo is available at https://github.com/SwiftLawnGnome/emacs-gsoc/tree/feature/soc-bytecode-in-traceback-specbinding if you'd like to take a look. > Anyway, just wanted to say, that it would nice if bytecode to > bytecode > calls would not leave the exec_byte_code function. Those calls > should > push the necessary frames and continue the interpreter loop. > That way > the bytecoe PC doesn't need to be saved redundantly on the C > stack and > the specbinding stack. That's an excellent idea. That would make the logic cleaner and should speed up the interpreter to boot. I'll get to work on that right away. > Instead of annotating symbols I would annotate cons cells. The > reader > could keep a hash table on the side an record the source > position of > cons cells. That was also mentioned in this thread https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00444.html discussing this project. I'll be looking into this option but as Alan Mackenzie mentioned in that thread it might not be plausible, largely due to the sheer number of cons cells created during compilation and macroexpansion. Keeping that information across all those source transformations seems nigh impossible without some very convoluted logic. I'm also not so keen on the symbols approach because it splits symbols into two different types, annotated and bare, which to me just seems unnecessarily complicated. But this could be changed so that it isn't transparent to the user like it is in that branch. I'll be looking at how other Lisp compilers record source code locations. SBCL is what I'm most familiar with but that compiler is very complex, and uses an intermediate code representation during compilation that makes recording this type of information easier. Ideally I would teach the byte compiler to do something as advanced as this as well, but that would probably entail a complete overhaul that wouldn't fit into the span of my project. Perhaps, once the offset is readily available, I could start this undertaking and continue work on it after GSoC ends. -Zach From MAILER-DAEMON Sat Jun 06 14:24:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhdUI-00052O-L6 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 14:24:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhdUH-00052G-LP for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:24:09 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:44240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhdUF-00011U-T4 for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:24:09 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056Guuwl093945; Sat, 6 Jun 2020 16:57:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=wUPK3hR/4ZtrGMzu/ly3v654tj0ZOfbS9shPQbPSASA=; b=Y2Wu/wgT+/bqdYe2tifScxiMFP1bIWuLIeLQVUCsQhL9EiCHAAtif9pjNidVzxZ9sYrw jixbLTHQ/Set0nK2i3MtW+Hvzhe+jSKaRJCzCTPD0QgN1zj1vTFG/Qa/lgDrRXNqpnVt iVD6K87W7ceQd0EWACwxsdmrs6vV09mw4m8OjxJDtYcOkbTR/yHbPmQJMsBbiMMO3Ef3 +u/uhmykThaHJ6e52KriyuF6XefYR+CnyWO9WKUoBYbHqRSIbfZhgKI0hBqOjgCh4Pmn xtz2DFMP2CKT8QS8OK3s4vJ+W96bt2odoBITDcw93bBEI5As40+wln73V7RSo6TUdSUr Vg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2120.oracle.com with ESMTP id 31g33ksftc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 16:57:39 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056GsDnG052023; Sat, 6 Jun 2020 16:57:38 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 31g2fhf3kq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 16:57:38 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056GvRZJ008970; Sat, 6 Jun 2020 16:57:27 GMT MIME-Version: 1.0 Message-ID: <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> Date: Sat, 6 Jun 2020 09:57:23 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Pip Cet , Paul Eggert Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> In-Reply-To: <87img4zjy7.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060134 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 spamscore=0 cotscore=-2147483648 malwarescore=0 phishscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060134 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 14:16:14 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 18:24:09 -0000 > >> I get the impression we > >> shouldn't discount the possibility that the current way of doing thing= s > >> (after pure space) isn't so bad at all: all strings, vectors, and cons > >> cells are mutable to the same extent. > > > > That's not the current way of doing things, and although the area is > > murky there have always been Emacs Lisp objects that are not mutable. >=20 > Lately, only pure ones, as far as I can tell? >=20 > > For example: (aset (symbol-name 'cons) 0 ?d) > > This signals "Attempt to modify read-only object" error in Emacs 25, an= d > > makes Emacs dump core in Emacs 27. And there are other cases like that. >=20 > Well, dumping core is bad. The problem here is how pdumper "changed" > pure space (actually, we're putting several megabytes of zeroes into > every Emacs binary as a result) and how make_pure_c_string tries so very > hard to save a few kilobytes of memory. Both problems, as I said, that > wouldn't exist if we simply removed pure space. >=20 > > Obviously we need to do better in the dumping-core area. When we do tha= t, > > we have an opportunity to simplify and/or document behavior in this are= a. >=20 > Indeed. Simplify: remove pure space. Document: all strings, vectors, and > cons cells are mutable to the same extent. >=20 > > If we decide to simplify/document by saying "all strings are modifiable= " > > then we'll need significant work at both the C and Lisp level to do tha= t. >=20 > I don't see why. All strings are modifiable, but the byte compiler will > identify strings under certain circumstances. That doesn't violate the > simple rule that as far as the Emacs core is concerned, all strings are > equal. >=20 > > This will hurt performance a bit since it will disable some optimizatio= ns. >=20 > Which ones? >=20 > > If we decide to simplify/document by saying "an error is thrown if you = try > > to modify a string literal" then we'll need to add some code to do that= . I > > have a >=20 > So far, what you have proposed is "an error is thrown if you try to > modify the characters of a string literal, or if you add text > properties unless it already has some, or if you remove the last text > property". >=20 > > draft of something along those lines. It doesn't hurt performance > > significantly in my standard benchmark of 'make compile-always'. >=20 > (In general, I think that's probably not a good benchmark to optimize > Emacs for). >=20 > > Although it invalidates some existing code, such code is quite > > rare and is already relying on undefined behavior. >=20 > I'm not sure "undefined behavior" is a useful term when speaking about > Emacs Lisp, except for behavior which is explicitly documented to be > unreliable. There's a single implementation, and a lot of code is > written to conform not to what's documented but to what happens to > work. >=20 > > If we decide to leave things alone, they will remain complicated and mu= rky. >=20 > But I'd call the behavior you suggest even more complicated. Amen. > I still think there's a significant risk that there will be ad-hoc > changes that essentially commit us to a simplistic model of > mutability. I don't think they're necessary or urgent, except for the > make_pure_c_string bug you describe. >=20 > For example, I think it might be very useful to have an immutable "view" > of a mutable object (as in C, where I can pass a char * to a function > expecting a const char *); that would mean storing the mutability flag > in the Lisp_Object, not in the struct Lisp_String. +1. All that Pip says here makes sense to me, as far as I understand it. (I can't speak to the implementation matters, e.g. use of pure space.) If someone has the cycles and will to improve things by making the modification of strings, including what look like literal strings in code, easier and more flexible - in particular text properties, great. But going backwards, toward some perhaps unneeded optimization, in the direction of systematically raising an error when trying to modify text properties of a string, is not a good idea, IMO. Before even considering optimization there should be some analysis of what would be gained and what would be lost. Yes, currently there is some mess and uncertainty. But there are good and bad cures to mess and uncertainty - different kinds of "cleanup". From MAILER-DAEMON Sat Jun 06 14:57:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhe0r-0006dQ-2W for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 14:57:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhe0q-0006dG-9C for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:57:48 -0400 Received: from mailout-l3b-97.contactoffice.com ([212.3.242.97]:48956) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhe0o-0008Qd-62 for emacs-devel@gnu.org; Sat, 06 Jun 2020 14:57:47 -0400 Received: from smtpauth1.co-bxl (smtpauth1.co-bxl [10.2.0.15]) by mailout-l3b-97.contactoffice.com (Postfix) with ESMTP id 783805BF; Sat, 6 Jun 2020 20:57:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1591469862; s=20200222-6h9o; d=idiocy.org; i=alan@idiocy.org; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Transfer-Encoding:In-Reply-To; l=612; bh=KzxUxjvsGXnAXjmolzuRFmEkRnmcEzyLlpoo+HiUWnw=; b=Ogatimz/mLViehRGfNFhQ7Tor7DbIOnG8Uy5CC8yP9Ok6mYQcdr7rHQ5+D3o3Ove Zh8ZdW+SpZsgsOP7R4g/ChWeyqj5zLbvms/hVGCEWB+/CS67l1ru+jmRb+g5Vy6cHRg ytb95Np44/sBc/QcfDlDiSEfRAmNTIzUuB7Dps6x/dZZriKIhFdSb5tJdJYbhJyu1kO R8EZjfnjhGI8Bg/Lvm1pPWBP9/pFGOomM4Cq8eRrBcMBCNmJhPpbI1PXA2OdiTnr5PK DXO1PD7J4jphRhBq9VF/oas/wN5u6Cie8Tl11glHaoT3DHsyplQ8FF8HXQgPGPQc89N wZX2+ycE2g== Received: by smtp.mailfence.com with ESMTPA ; Sat, 6 Jun 2020 20:57:39 +0200 (CEST) Received: by breton.holly.idiocy.org (Postfix, from userid 501) id 5B97A202359CE4; Sat, 6 Jun 2020 19:57:34 +0100 (BST) Date: Sat, 6 Jun 2020 20:57:40 +0200 (CEST) From: Alan Third To: Mattias =?iso-8859-1?Q?Engdeg=E5rd?= Cc: Emacs developers Subject: Re: Use 65535 as scale factor for color-values on NS Message-ID: <20200606185734.GA16539@breton.holly.idiocy.org> Mail-Followup-To: Alan Third , Mattias =?iso-8859-1?Q?Engdeg=E5rd?= , Emacs developers References: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> X-ContactOffice-Account: com:241649512 Received-SPF: pass client-ip=212.3.242.97; envelope-from=alan@idiocy.org; helo=mailout-l3b-97.contactoffice.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 14:57:42 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 18:57:48 -0000 On Sat, Jun 06, 2020 at 11:57:03AM +0200, Mattias Engdegård wrote: > Alan, it seems that only NS uses 65280 as scale factor for > 'color-values'; all other back-ends use 65535. Do you know if there > is any reason for keeping it this way? Otherwise, I propose we > change it (see patch). > > It is probably just a relic from when colour components were scaled > from 8 to 16 bits by multiplication with 256 instead of 257; this > seems to have been fixed everywhere else. I'm not aware of any reason for this, and I don't see any immediate problems with your (second) patch applied. -- Alan Third From MAILER-DAEMON Sat Jun 06 15:00:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhe3P-0008JD-Vx for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 15:00:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35900) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhe3O-0008Gu-6g for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:00:26 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:39717) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhe3N-0000u9-3L for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:00:25 -0400 Received: by mail-wr1-x42a.google.com with SMTP id t18so13130398wru.6 for ; Sat, 06 Jun 2020 12:00:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=wJfxP+7EqfmTBMO/qlYCNFOs9M6Y5Ckiyv8u1HtJKfU=; b=ARKthVxV+UZ4+m928Tqx/l3iI+Yxjh8zD73IIDcH9uUVGH7gJiIqlPEECy5Fl+9bwe 3KavQYBRsRtEfcVZDc83D/8HmjD1iEJNhRKsxBxlHhDW8qXm8YdYS/x4GXINfOCx/MN9 NEk5oJEr4A0nhlvW6xpWpjRwlx97FCNCC664nQ870n0ANxHoVz3/0cZF8zPSSif7l/gU SMC0DZSmT5uVjxNPgrt4+X9LKrNh73FrTPDXrGtRshHYjP29V+erWymh6oYMk5pZchma v/qJDE6ZvBjDmuCAYqlb6GcpZ9scI7r0Jixbrx7VbY5bDQXGu0O7eiNv/jLSMScNE9Zk zobQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=wJfxP+7EqfmTBMO/qlYCNFOs9M6Y5Ckiyv8u1HtJKfU=; b=K2Eq9MKMX6lrMkE4o797ss5/+Yp9eiJNv8j+N/LAGzwM0BZ5wkNmLsENij3oTsCeKQ Ptij+Schkbc0zfpF41GPk0q2Q8ByhlMA4sAb5f9RpVJ6zpK2x5Kx//6trzCxUnf9Rpwl /AyV1IXAWmQ1vM74hfL2TMCTnH6QfmF7BAHZaNo11gx0d2Iyc8eG12/uMvns4D+SRpoK JKaJ/abo8z/gq4o74MENxbSFxNotNQE2QsJECklejKFbaSX8qOAArkS3FM71DOaHr5hV HqJdo0OGg+OIrXsN5QNuLGghXygEysH01laieL6h1WT18cHrB6COugik1GR7DXeIdEo/ RZdQ== X-Gm-Message-State: AOAM5321gQlQxUW4p52i8wcunL9Epi6GugtUYO6+IOplHWlHWfD78O46 aOEBh2I6c5uD7alza00cH8HBlwp7/3E= X-Google-Smtp-Source: ABdhPJz7224TI9Z8wPeq3F/gfUGU0oyK09Sl5v6zg+6BEM5sdaaIKXwl77T/BG8mJs2ZguVyqQxp4Q== X-Received: by 2002:adf:fc4e:: with SMTP id e14mr15385875wrs.348.1591470023038; Sat, 06 Jun 2020 12:00:23 -0700 (PDT) Received: from chametz ([185.220.101.204]) by smtp.gmail.com with ESMTPSA id h7sm16347948wml.24.2020.06.06.12.00.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 12:00:22 -0700 (PDT) From: Pip Cet To: Stefan Monnier Cc: Drew Adams , Paul Eggert , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> Date: Sat, 06 Jun 2020 19:00:15 +0000 In-Reply-To: (Stefan Monnier's message of "Sat, 06 Jun 2020 13:57:42 -0400") Message-ID: <87pnacxbnk.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=pipcet@gmail.com; helo=mail-wr1-x42a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 19:00:26 -0000 Stefan Monnier writes: >> But going backwards, toward some perhaps unneeded >> optimization, in the direction of systematically >> raising an error when trying to modify text >> properties of a string, is not a good idea, IMO. > > I think there needs to be a clarification here: the issue is about > modifying data (here specifically strings, but the issue applies to all > other such data) that appears as literal in the code. > This issue is not one of optimization (preventing those modifications > would likely impose a slowdown, if anything) but one of detecting usage > that is usually a bug (one that leads to people being utterly > confused by the resulting behavior). I don't see how literal data is special that way. If I expect a function to look at a string argument, but it actually modifies its argument, that's equally confusing. If I modify data that's been used in a hash key, that's even more confusing. If I modify data in an image spec in a Lisp callback from the image backend, Emacs will crash. These cases deserve being thought about, too. How many such bugs have appeared and been difficult to debug since pure space essentially stopped existing when pdumper was introduced? The cost of this isn't negligible; the single bit which I expect will be kept for every string, cons cell, or vector isn't that significant, but so far what's been proposed would be complicated to implement, explain, and use. It would lead to some people developing a false sense of security and others becoming insecure and copying everything needlessly (and dangerously, for cyclic objects). And it would effectively prevent any competing system of mutability, I fear. For example, consider quasi-quoted literals: would those be immutable? No matter what the answer to that question is, would people actually remember? From MAILER-DAEMON Sat Jun 06 15:09:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jheBt-00050W-Aw for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 15:09:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jheBr-0004y9-2T for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:09:11 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:42214) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jheBp-0002oV-QJ for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:09:10 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id C45F71600E0; Sat, 6 Jun 2020 12:09:07 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id KLFQSNSgs21n; Sat, 6 Jun 2020 12:09:06 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A37181600E1; Sat, 6 Jun 2020 12:09:06 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id XMPl-7Dv-kEp; Sat, 6 Jun 2020 12:09:06 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 5055D1600E0; Sat, 6 Jun 2020 12:09:06 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Stefan Monnier , "Basil L. Contovounesios" Cc: emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <3325df83-4840-c15d-3f38-372628a54536@cs.ucla.edu> Date: Sat, 6 Jun 2020 12:09:04 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------844231CD102D2FF8DE3B9BA2" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 13:54:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 19:09:11 -0000 This is a multi-part message in MIME format. --------------844231CD102D2FF8DE3B9BA2 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 6/5/20 6:02 AM, Stefan Monnier wrote: > So, IIUC `make-text-button` should ideally work functionally, but for > historical reasons it works by side-effect. What's the long term plan? > Do we plan to live with the current side-effecting behavior, or do we > plan to move to the "pure" functional behavior? Given the comments in this thread it seems that there's consensus that it should move to the "pure" functional behavior, as the side-effecting behavior is confusing (and this is independent of whether string literals are constant). I installed the attached patch, which is along the lines that I proposed a couple of days ago; it has the doc fix that Pip Cet suggested. --------------844231CD102D2FF8DE3B9BA2 Content-Type: text/x-patch; charset=UTF-8; name="0001-make-text-button-no-longer-modifies-its-string-arg.patch" Content-Disposition: attachment; filename*0="0001-make-text-button-no-longer-modifies-its-string-arg.patc"; filename*1="h" Content-Transfer-Encoding: quoted-printable >From 481e57cd310177452fe5d4e733370337eb35ba96 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 6 Jun 2020 12:05:10 -0700 Subject: [PATCH] make-text-button no longer modifies its string arg MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit * etc/NEWS: Mention this. * lisp/apropos.el (apropos-library-button): * lisp/ibuf-ext.el (ibuffer-old-saved-filters-warning): There=E2=80=99s no longer a need copy make-text-button=E2=80=99s string a= rg. * lisp/button.el (make-text-button): Return a copy of a string arg. Delay making the copy until after error-checking. --- etc/NEWS | 5 +++++ lisp/apropos.el | 2 +- lisp/button.el | 9 ++++++--- lisp/ibuf-ext.el | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 27e511047e..edad5b37d6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -476,6 +476,11 @@ are 'eq'. To compare contents, use 'compare-window-= configurations' instead. This change helps fix a bug in 'sxhash-equal', which returned incorrect hashes for window configurations and some other objects. =20 +** When its first argument is a string, 'make-text-button' no longer +modifies the string's text properties; instead, it uses and returns +a copy of the string. This helps avoid trouble when strings are +shared or constants. + --- ** The obsolete function 'thread-alive-p' has been removed. =20 diff --git a/lisp/apropos.el b/lisp/apropos.el index 22866cd2cc..2566d44dfc 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -661,7 +661,7 @@ apropos (defun apropos-library-button (sym) (if (null sym) "" - (let ((name (copy-sequence (symbol-name sym)))) + (let ((name (symbol-name sym))) (make-text-button name nil 'type 'apropos-library 'face 'apropos-symbol diff --git a/lisp/button.el b/lisp/button.el index 3a6a6de774..d9c36a0375 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -341,15 +341,14 @@ make-text-button as the argument for the `action' callback function instead of the default argument, which is the button itself. =20 -BEG can also be a string, in which case it is made into a button. +BEG can also be a string, in which case a copy of it is made into +a button and returned. =20 Also see `insert-text-button'." (let ((object nil) (type-entry (or (plist-member properties 'type) (plist-member properties :type)))) - (when (stringp beg) - (setq object beg beg 0 end (length object))) ;; Disallow setting the `category' property directly. (when (plist-get properties 'category) (error "Button `category' property may not be set directly")) @@ -362,6 +361,10 @@ make-text-button (setcar type-entry 'category) (setcar (cdr type-entry) (button-category-symbol (cadr type-entry)))) + (when (stringp beg) + (setq object (copy-sequence beg)) + (setq beg 0) + (setq end (length object))) ;; Now add all the text properties at once. (add-text-properties beg end ;; Each button should have a non-eq `button' diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index c39000b488..bfb9787a96 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -202,7 +202,7 @@ ibuffer-old-saved-filters-warning You can save the current value through the customize system by either clicking or hitting return " (make-text-button - (copy-sequence "here") nil + "here" nil 'face '(:weight bold :inherit button) 'mouse-face '(:weight normal :background "gray50" :inherit bu= tton) 'follow-link t --=20 2.17.1 --------------844231CD102D2FF8DE3B9BA2-- From MAILER-DAEMON Sat Jun 06 15:41:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhehY-0003ST-DK for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 15:41:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhehW-0003S3-MI for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:41:54 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]:36488) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhehU-0001Sx-PK for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:41:54 -0400 Received: by mail-ej1-x632.google.com with SMTP id z5so13888374ejb.3 for ; Sat, 06 Jun 2020 12:41:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=lE/9t5A730uLIJs66tg26TBEmBaEshWSHPvbsyqwPMw=; b=pLZqugockWp+j8+88DyBwUQIeRtfsy5pD6yaivs5bgNIEjTmzr3N8y+OBfhhzbaR0b MLEfmpZN8dMs2G6M8V9DhQ/kwmHGNWMgIkwVQQ3iy/DJYy7Y/iR5Uyx37DwFjsAme5Vg 81fU8JSczlpjjlza1ZTe7LmpctuSL6V9EnI3nMfPF14iUOmoZE/AX3pUXUC/FraatrIq 9voNm7D4NpwpNS3AFb2fa6K15AvK6xqfkkiFs8pDOgnMb6u4A99Dua6LrxYM/E8+yLZW zXQRkphlOPS1d+JMHVgg2Vcpl4lPPT6SocmANfGq58ZSUbgunC12MfcgRLlTirSFq8R7 SAKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=lE/9t5A730uLIJs66tg26TBEmBaEshWSHPvbsyqwPMw=; b=RByDPhhvmSSqdN/bnmptmcn/XK6hl09x7MjY+mXY2uJ2msVbV+3jkzfcTvqFzv4SvX iWH63f/eXunr5NUmU8JRu6HsAD2M1v1MnsN1nk9GjPeBarstpb1zkhhWLs9kOnGn2fII LcURHIqHCeY4aOSCqmEvpCakkInTB66ULjSqxMkVmtrFDSn+9vZecKwfnt46f0/UGs6C egUL1ZygVtPsmRaVN8DOWWJeJwbV5COlYKPyn8Q5BmVVrqFNurjl2eD8nmPI8PLaC1Ds R7iu/QHXckQ08obpQMbWL44A7XXuxmVBpkCHyY52CsBTmDwkVvBOEfzjfxpkD+EzYpiI CRHw== X-Gm-Message-State: AOAM531fnWcyAV48iPv3uUAkmhtl9xUWP37tq7qB26RK6V7g0sUX3l47 Pps8bZCiw/pvdHx/27wid5KD2Da0oLU= X-Google-Smtp-Source: ABdhPJxXndhEKlxy1b70plWo5TfB8Dbt42iOiMfa7c8b+SWHAt1T1/WJMKK/2P3zvwj1lLD0QIr7Lw== X-Received: by 2002:a17:907:1110:: with SMTP id qu16mr14861400ejb.539.1591472510894; Sat, 06 Jun 2020 12:41:50 -0700 (PDT) Received: from chametz ([81.17.16.149]) by smtp.gmail.com with ESMTPSA id gt26sm6964562ejb.107.2020.06.06.12.41.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 12:41:50 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> Date: Sat, 06 Jun 2020 19:41:41 +0000 In-Reply-To: <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> (Paul Eggert's message of "Sat, 6 Jun 2020 10:54:46 -0700") Message-ID: <87lfl0x9qi.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=pipcet@gmail.com; helo=mail-ej1-x632.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 19:41:54 -0000 Paul Eggert writes: > On 6/6/20 1:18 AM, Pip Cet wrote: > >>> there have always been Emacs Lisp objects that are not mutable. >> >> Lately, only pure ones, as far as I can tell? > > There are others. I haven't cataloged them but they include builtin symbol > names pure > empty strings, pure, and as modifiable as all other strings > and constant variables (no, I didn't come up with that > last term :-). Also numbers of course. I don't think setting a symbol's values is comparable to mutating a vector or string. Neither are numbers. > Constants have always been > ubiquitous in > Emacs. I disagree, to me immutable objects appear to be the strange exception. >>> If we decide to simplify/document by saying "all strings are >>> modifiable" then >>> we'll need significant work at both the C and Lisp level to do that. >> >> I don't see why. All strings are modifiable, but the byte compiler will >> identify strings under certain circumstances. > That's not how Emacs works now, Very close, though. > and it's not how Common Lisp or Scheme works. Neither is anything that has been proposed by you so far. > If > we insisted on making the change you're proposing, it would throw yet another > obstacle into the path of porting Emacs to other platforms such as Guile. That > would not be a good road to take. "Yet another" is the important term here, I think. There are more significant issues to sort out. > It might be worth making such a significant change if modifiable > string literals > were an important feature that Elisp programmers urgently needed. But they're > not: they're rarely used, partly because when they have been used their use > often caused subtle bugs (as we've seen with make-text-button). They're not a > feature worth fighting for, any more than mutable numbers would be. I agree, actually. What I'm fighting against is a certain model of immutability being installed into the Emacs source tree and effectively preventing better ones from ever having a chance, as well as turning out to be, as the vast majority of such models have, a problem rather than a useful feature. > >>> This will >>> hurt performance a bit since it will disable some optimizations. >> >> Which ones? > > The ones Emacs is currently using, such as some strings are in > read-only shared > memory, I don't think that's even an optimization. As I said, we're not aggressively reducing the size of the Emacs binary, quite the opposite, and read-only strings copied into pure space probably wouldn't be paged in. > and some are coalesced. Just to be clear: nothing in Emacs "coalesces" two strings by making them equal if they weren't before. The byte compiler generates new strings, and might generate fewer than were put in, but a string always has its own identity and keeps it. > It would be unreasonable to coalesce > strings if > they were mutable, since that would mean changing one would change the > other. Strings are mutable, and we are "coalescing" them, if only in the weak sense that the byte compiler does. > >> So far, what you have proposed is "an error is thrown if you try to >> modify the characters of a string literal, or if you add text >> properties unless it already has some, or if you remove the last text >> property". > > There must be some confusion here, as I haven't proposed that. I'm sorry for misunderstanding, then. > What > I'm thinking > of proposing (though I haven't written it up yet, and this is just an > off-the-cuff first cut) is that Emacs signal an error if a program attempts to > change a string constant's characters or text properties. Okay. I'm sorry I assumed you were just going to go ahead and commit something without any prior discussion, and it would be unfair not to wait for that proposal before criticizing it. >> (In general, I think that's probably not a good benchmark to optimize >> Emacs for). > > Admittedly it's crude but it is better than nothing and it is what we have > readily available. If you have another easy-to-use benchmark that would be > better, I'm all ears. Let me second that, I would love to have a better benchmark. >> I'm not sure "undefined behavior" is a useful term when speaking about >> Emacs Lisp, except for behavior which is explicitly documented to be >> unreliable. There's a single implementation, and a lot of code is >> written to conform not to what's documented but to what happens to >> work. > > Of course, and there's a natural tension between trying to document every > unimportant implementation detail (which would be a mistake) and not > documenting > useful behavior (which would also be a mistake). But that's not the > issue here, > as the behavior in question is explicitly documented to be unreliable > and we're > discussing what (if anything) to do about it. I'm not sure whether I've lost the right to comment on changes made all of six weeks ago, because I must admit I hadn't been aware of those documentation changes. I think you've essentially documented the changes you're considering to propose as though they had already happened. I think there are solutions here we'd both be happy with: we can easily use the C preprocessor to generate the amount of mutability checking we want, ignoring all or some of the information passed to the macros. But if we want that C API to be flexible enough to allow unusual applications (and isn't that what Emacs is all about?), it needs something more than just the obvious CHECK_MUTABLE (obj) macro. From MAILER-DAEMON Sat Jun 06 15:50:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhepL-0005xG-L3 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 15:49:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhepJ-0005ww-Ka for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:49:57 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:47632) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhepH-0002o1-Co for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:49:56 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 82AA91600E0; Sat, 6 Jun 2020 12:49:52 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id wF2crF1R4hNY; Sat, 6 Jun 2020 12:49:51 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id B61841600E1; Sat, 6 Jun 2020 12:49:51 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id uPS1_UgYVxrx; Sat, 6 Jun 2020 12:49:51 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id EDF9F1600E0; Sat, 6 Jun 2020 12:49:50 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Pip Cet , Stefan Monnier Cc: Drew Adams , "Basil L. Contovounesios" , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <31332591-f540-de69-26a8-03c0d8dd2c9d@cs.ucla.edu> Date: Sat, 6 Jun 2020 12:49:50 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87pnacxbnk.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 13:54:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 19:49:58 -0000 On 6/6/20 12:00 PM, Pip Cet wrote: > consider quasi-quoted literals: would those be immutable? A string literal should not be modified, regardless of whether it's quasiquoted. A subexpression of `X that contains no substitutions or splices yields conses that should not be modified. These two rules are reasonably simple and are already documented, and neither rule should be that hard to remember for the few people whose code is affected by this issue. > It would lead to some people developing a false sense of security "False sense" because programmers would start relying on Emacs to catch trivial mistakes involving modifying string literals? Horrors! (Programmers should let those mistakes persist into hard-to-debug complex programs, as this will give them much more of a challenge when debugging. :-) From MAILER-DAEMON Sat Jun 06 15:56:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhevx-000163-C2 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 15:56:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45366) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhevv-00015S-9A for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:56:47 -0400 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]:37802) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhevu-0004f9-6T for emacs-devel@gnu.org; Sat, 06 Jun 2020 15:56:47 -0400 Received: by mail-ed1-x52d.google.com with SMTP id k8so10175578edq.4 for ; Sat, 06 Jun 2020 12:56:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=XBneQ6gaF4nrcwPxvpmiFu9fJREWCb4fFDUwE/lgCyI=; b=Xznvh8a+5xaQp85iXNBsABH9rIn5zfAbLaFwvypQ/GcwGWQo5G+W56rwZVjVcZWRY+ THRfASWzUSKbZyx1PBWzt80bCPlEvvsfRMo3G/AIoyg1Wgmf71Q73JyoUFthZHF+a+Eh 1iQa8o77qNwtpVB9UoHTKAl2LVVUJmBBkQ/ssDlQgcyHLfhOtBVF3ltr1A820evfsXGt yzjz2X3GIG5r09hj6i6zT9ahCf5wpOSHnMdcjdGCyCub9178QYEmU9sKROpmZbDMm7e9 6AX+gLynWk8oT8P/55XLu89vq74QXI/auMwoftxBxbUFjXztVs1gr+4YNJwqjjoxEg3U EiRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=XBneQ6gaF4nrcwPxvpmiFu9fJREWCb4fFDUwE/lgCyI=; b=o8EnTzgnBVqD8B62AZD76m+qCiSMnDTTctHVnQz0Wsy3QM/tMF+1VxBDKCBwCNFvm+ XGcT52RsFg6/uHSFjvpL7L5sI/TuS+xNkrVuCkTNv8+7i7Rq/u34cBvrFzj+dYHHnusu VFcNT2CFYYifx5y6ZLwjfhgtm28Th3L0c1p5ce6xFOnRLBcWIaFge2EGL+/P7d2A0ZGU n2DBSoSZ+qgMjOlWHuDRHfnxIiJZdn7C6PvXQxudP/Zfej1JIgE1kM34SeMib6M1EwOK fDDFmTa2Amp92iOrUv2ELRW4M5htH4lSQK9FqwJwhtu6cGzS+/jHtmgnnHF0H6ks/VCR IOiQ== X-Gm-Message-State: AOAM5319A2p4h0I6pAStXhqX3krDJ5EPLMj3tLEEVCj9phd6G2sk9hgY U6WpC4VV4Xf/Xt8W8hYL/f+g3+Eq X-Google-Smtp-Source: ABdhPJwdOqrG+xIRjKLlQTa2fzk5aWa7Ri942VPULxMXRUJJj1rwacX3FwqqJlGZiGxPzcOevqp1yA== X-Received: by 2002:aa7:d9d6:: with SMTP id v22mr15759751eds.66.1591473404061; Sat, 06 Jun 2020 12:56:44 -0700 (PDT) Received: from caladan (dialin-242027.rol.raiffeisen.net. [195.254.242.27]) by smtp.gmail.com with ESMTPSA id ce14sm7078261ejc.3.2020.06.06.12.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 12:56:43 -0700 (PDT) From: Helmut Eller To: Zach Shaftel Cc: emacs-devel@gnu.org Subject: Re: GSoC project - Improving ELisp Traceback and Debugging Information References: <87eeqv6d30.fsf@gmail.com> <878sh0rr7m.fsf@gmail.com> Date: Sat, 06 Jun 2020 21:56:41 +0200 In-Reply-To: <878sh0rr7m.fsf@gmail.com> (Zach Shaftel's message of "Sat, 06 Jun 2020 14:20:46 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::52d; envelope-from=eller.helmut@gmail.com; helo=mail-ed1-x52d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 19:56:47 -0000 > I'll be looking at how other Lisp compilers record source code > locations. SBCL is what I'm most familiar with but that compiler is > very > complex, and uses an intermediate code representation during > compilation > that makes recording this type of information easier. [For now lets pretend that "source-path" is the same as a source-location.] Before converting to IR1, SBCL records the "source-path" of each cons cell in a top-level form in the hash table *SOURCE-PATHS*. (See the function SUB-FIND-SOURCE-PATHS defined in ir1tran.lisp). Later, when the compiler walks down the (macroexpanded) form, it searches the recorded source-path for the current form. If something is recorded, good; if nothing is recorded, then the compiler uses the source-path of the parent form instead (the top-level form has always a recorded source-path). I think this approach is quite simple and usually works pretty well. Most macros return part of the input arguments somewhere in their output and so the compiler will naturally find the recorded source-path in the hash table. Problematic are macros that completely copy/rewrite the input. Luckily, such macros are rare. I don't know if it would work well enough for macroexpand-all and cconv.el. But at least, it doesn't need new data types. It could also help to manually propagate the source locations in a few places, like macroexp--cons. Helmut From MAILER-DAEMON Sat Jun 06 16:11:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhf9u-0005c9-8h for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:11:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46520) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhf9s-0005bz-Tg for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:11:12 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:60744) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhf9r-0006kE-DM for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:11:12 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056K9G3h084642; Sat, 6 Jun 2020 20:11:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=7Ozl9d9iBQob3JaZrf/+0agX2VywvdHsF4DPEPHEbRc=; b=NpajN+HnYS/ydn7jrnYvAKPGZ+g+WCcyp8gGPKivofiwfuev/4/iAOa+uZ34rztanh+3 +aOE4pICqvO+1slcAFHYrfgc6/xitOcOheheIdZIcZ8f1tLlmXTwhds9f8K5dakyZ021 AFJ+wbLCDPXwSETGd9FVDeT7Stw1lxTywUNY35JRi85zSO+4GRvA891TSODHl9hMK1j7 Md8mZkNY6m4wYP6rn52WRy3mnMgi9W0o+KlYGQqBSiUGm6YGGv5cITYJrYNX8TYBxnWg sUCpkmyygzATb+E81xaGsPyHXvi9Ny/AYtQf/0EpU5v0ojEb9uuWksUDdqPBubE/21zH sQ== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 31g3smhpdw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 20:11:08 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056K7eIr034937; Sat, 6 Jun 2020 20:11:07 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3030.oracle.com with ESMTP id 31g169ds8u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 20:11:07 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056KB5Cr031016; Sat, 6 Jun 2020 20:11:05 GMT MIME-Version: 1.0 Message-ID: <56bae185-9309-43f1-9727-11e89080cd12@default> Date: Sat, 6 Jun 2020 13:11:01 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Paul Eggert , Pip Cet Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> In-Reply-To: <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 suspectscore=0 adultscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060161 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 cotscore=-2147483648 suspectscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=999 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060161 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 16:11:10 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:11:13 -0000 > It might be worth making such a significant change if > modifiable string literals were an important feature They are, IMHO. A wonderful feature. Other Lisps should be so lucky. > that Elisp programmers urgently needed. Urgently? As in an emergency? No. That's a pretty high bar. Do your proposed wholesale changes in the other direction handle an emergency? Urgent? > But they're not: they're rarely used, Evidence? But let's assume your guess is right. Is frequency of use really an important criterion here? List modification in Lisp is infrequent, but it's very important to Lisp - always has been, outside the use of "pure Lisp" for some research purposes. > partly because when they have been used their use > often caused subtle bugs (as we've seen with > make-text-button). That's because there are bugs in the implementation. And because there's not corresponding doc everywhere. The same thing is true of list-structure modification. (I hope your next crusade won't be to prevent that!) > They're not a feature worth fighting for, Your opposite "feature" isn't, IMO. > any more than mutable numbers would be. Wrong. An Elisp string is an object, with properties. When Elisp numbers get text properties your comparison might make some sense. > >> This will hurt performance a bit since it will > >> disable some optimizations. > > > > Which ones? >=20 > The ones Emacs is currently using, such as some strings are in read-only > shared memory, and some are coalesced. It would be unreasonable to coales= ce strings > if they were mutable, since that would mean changing one would change the= other. What's the cost in lost optimization? Any plan to fiddle with optimization should weigh the gain and loss. To you, there's apparently no loss, because you see no value in modifying string properties (or at least that's not important enough to keep - to "fight for"). > What I'm thinking of proposing ... is that Emacs signal > an error if a program attempts to change a string constant's > characters or text properties. Very not-good. What's next, impossibility to modify list structure? > That's a simple notion, It sure is. Too simple. And unlispy. > and it's something that Emacs long did for preloaded > strings so it's not like this would be a giant revolution. That some instances of a class of objects can be immutable is very different from denying all such objects the ability to change. Yes, that's a giant, and ill-conceived, revolution. > To my mind it's a considerably more-conservative > change than the one you're suggesting. "Conservative" or ultraconservative? It goes backward IMO, tossing out an important feature of Emacs Lisp. From MAILER-DAEMON Sat Jun 06 16:15:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhfEF-00079d-Lp for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:15:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfEE-00079S-9w for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:15:42 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:50192) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfEC-0007RC-16 for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:15:41 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 637E81600E0; Sat, 6 Jun 2020 13:15:37 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id CS52IViT8j9x; Sat, 6 Jun 2020 13:15:36 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 7FAEC1600E1; Sat, 6 Jun 2020 13:15:36 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id dF_2DPrTMX4z; Sat, 6 Jun 2020 13:15:36 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 3FD8B1600E0; Sat, 6 Jun 2020 13:15:36 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Pip Cet Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> <87lfl0x9qi.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <785d730e-23b2-dcad-105c-80ac5074b5dc@cs.ucla.edu> Date: Sat, 6 Jun 2020 13:15:35 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87lfl0x9qi.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 13:54:51 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:15:42 -0000 On 6/6/20 12:41 PM, Pip Cet wrote: > What I'm fighting against is a certain model of > immutability being installed into the Emacs source tree and effectively > preventing better ones from ever having a chance, as well as turning out > to be, as the vast majority of such models have, a problem rather than a > useful feature. I'm quite conscious of those dangers. What I had in mind was something far more limited: just supporting runtime checking of attempts to modify strings that either have undefined behavior if you mutate them now, or are close enough to that category so that nobody will care about the difference (except to be happy when Emacs catches unlikely glitches in their programs). In my drafts so far Emacs requires no more storage than it does now, and the CPU performance does not change significantly, so overall this change should be a win in practical use. It'd be a more-drastic change to add mutability/immutability as a more-general concept to Emacs, to add new functions that freeze or check the mutability status of arbitrary objects, etc., etc.. I'm not ready to propose that now and I don't know if it'd be a good idea. My goal right now is to prevent Emacs crashes and and general bugginess, not to add general mutability features. > I think you've essentially documented the changes > you're considering to propose as though they had already happened. No, I first discussed and wrote those changes in response to a bug report, and only later looked into conservative ways of fixing some of the real problems uncovered by that documentation effort. > if we want that C API to be flexible enough to allow unusual > applications (and isn't that what Emacs is all about?), it needs > something more than just the obvious CHECK_MUTABLE (obj) macro. It sounds like you're thinking ahead to the non-string case. I'm limiting myself just to strings for now, as they're the most salient part of the problem (core dumps and all). It should be OK to do that, and put off the more-general issues until later (if we ever do that at all). The obvious check_string_mutable function doesn't need to be used very often: only in the places where CHECK_IMPURE is used on strings now. The only other primitive I've found the need for at the C level is freeze_string (to mark an already-constructed string as being a constant). From MAILER-DAEMON Sat Jun 06 16:18:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhfGs-0008EW-LO for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:18:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfGq-0008EM-9z for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:18:24 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:60182) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jhfGo-00086u-85; Sat, 06 Jun 2020 16:18:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date; bh=HGWu7BZ41Sk2hbkRyvsveSbxK7gFOY4118w1yOOWopY=; b=M4W30UhjmaQNxxkjUFHLkWtZr05A70oiGyJEiLBAuJacNkwExIUkt3maAhm7O4rjDFgB+QeO81TSQuiM/38nXb/wEy28n8iaCA6/CZ8fS0OAE2jS/3pp90cavgvn5mIPA/cB//q1PdcXQTJ5TnN/uX8unSqISrX2owjCh53I7fKTBvyZ/eWLWWJHAwMHZH/gtAEEM6548251ZMwpoO4rgBO/yLWdD4cw5OUJjRzX+LZ9bHzhpUPOD6DhfJU/0xLvgO0vQcUCLj0yEBScg2hZyOFViQqg22+9R4+tdeEx3kae+9/6SQxWSVuTRM1scLO3JIrDRttkBeZAJg3FJDEDvA==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jhfGl-0005N3-Cj; Sat, 06 Jun 2020 22:18:19 +0200 Date: Sat, 6 Jun 2020 22:18:19 +0200 From: tomas@tuxteam.de To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: <20200606201819.GA18889@tuxteam.de> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> <83v9k48pwn.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="ZGiS0Q5IWpPtfppv" Content-Disposition: inline In-Reply-To: <83v9k48pwn.fsf@gnu.org> User-Agent: Mutt/1.5.21 (2010-09-15) Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 16:18:19 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:18:24 -0000 --ZGiS0Q5IWpPtfppv Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Jun 06, 2020 at 01:11:36PM +0300, Eli Zaretskii wrote: > > Date: Sat, 6 Jun 2020 11:58:51 +0200 > > From: [...] > > Think several people doodling simultaneously over a shared blackboard. >=20 > Someone will have to explain why this is useful [...] I think Stefan offered a better explanation than I did. My attempt had the flaw (not the only one, mind you) that I mixed in personal preferences, so it possibly turned out more sarcastic than intended. > > There was a thread a while ago in -help or -devel explaining why > > several emacs clients connected to a common server didn't quite > > fill that bill [...] > I don't think using emacsclient in its current implementation and the > infrastructure it uses will help us make any progress in this area. > The current keyboard "multiplexing" in Emacs doesn't really support > any concurrent input in any useful sense of that word. I wasn't seriously proposing to use that as a replacement for collab editing: my aim was rather to understand the issues and perhaps learn a bit more about collaborative editing itself. > That's why I think we need to start from the basics, and define the > features we'd need [...] Actually, having had the time to do some homework, I found: - Rudel: a collaborative editing environment for Emacs. It's even on Elpa and has a page on Emacswiki [1] It seems to be based on the Gobby protocol - there's someone (github [2], alas) implementing the Etherpad protocol for Emacs Embarrasment of riches, it seems ;-) Cheers [1] https://www.emacswiki.org/emacs/Rudel [2] https://github.com/holtzermann17/linepad -- tom=C3=A1s --ZGiS0Q5IWpPtfppv Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7b+gsACgkQBcgs9XrR2ka5ZgCdH2bfmtH6mAgGKBAeL2mr94ND JnwAnRckh7y+VDSx9fuEwAveG2551C83 =3q4t -----END PGP SIGNATURE----- --ZGiS0Q5IWpPtfppv-- From MAILER-DAEMON Sat Jun 06 16:19:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhfHi-0000aF-C8 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfHg-0000YQ-Uf for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:16 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:45796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfHf-0008Ud-Ke for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:16 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KIAGf064072; Sat, 6 Jun 2020 20:19:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=eRih6B0il1W9Jj8li/wEYNGTvuo20b7nBCVmEw3hN10=; b=QdPCYCrVLJJNit6FiMZ2GizS7UadkNyNPr/BPbw5N97Ci+XdtAwlj4bbyguln4Yg/cYg zxTUoe4xcQ+niPT1o0qyvHKjPehyjocTc9I/EYeoBkd0lDpMrUxPgJ8UrTqaSm879RN7 hG8syior/bmdHaP9pUlf6vvIaael+Q2ol41zWNcrA8Ji6/PiIE6bu7UvMYzdqkLof6ko VT4D9rpI5G2luLLknn6dHefbkV4GB3j8vWTHqF8fRx3LX5homL2SgYaMF4jLIh3JEwDf +pvUygJHV5oGkuJStQ/Av8uUKyHla+BPCKkDGfrTAultU8rxIYc8vLYtOUSd8Vh5igbE UA== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 31g2jqstgv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 20:19:12 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KIEYq068184; Sat, 6 Jun 2020 20:19:12 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3020.oracle.com with ESMTP id 31g2fhm32c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 20:19:11 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 056KJAYr029128; Sat, 6 Jun 2020 20:19:10 GMT MIME-Version: 1.0 Message-ID: <68198d80-34f2-4f06-b964-9157f4d43c9e@default> Date: Sat, 6 Jun 2020 13:19:07 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Stefan Monnier Cc: Pip Cet , Paul Eggert , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060162 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 impostorscore=0 cotscore=-2147483648 priorityscore=1501 spamscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060162 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 16:19:14 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:19:17 -0000 > > But going backwards, toward some perhaps unneeded > > optimization, in the direction of systematically > > raising an error when trying to modify text > > properties of a string, is not a good idea, IMO. >=20 > I think there needs to be a clarification here: the issue is about > modifying data (here specifically strings, but the issue applies to all > other such data) that appears as literal in the code. Yes, I know. > This issue is not one of optimization (preventing those modifications > would likely impose a slowdown, if anything) but one of detecting usage > that is usually a bug (one that leads to people being utterly > confused by the resulting behavior). The resulting behavior now is undefined/unpredictable in the problematic cases. That's the problem. List-structure modification too can result in application bugs and confusion. That's not a reason, in Lisp, to prevent such modification. Lisp, including Elisp, gives you lots of rope to hang yourself with. A "literal" string occurrence in code is what the implementation of Emacs defines it to be. Strings can have text properties. Those are not visible as program text (code, viewed lexically). Maybe no strings in Elisp should really be considered "literal" in the usual sense. Unless some sophisticated analysis takes place, to determine that no modification of a given string's properties will/can/might take place, there are two "extreme" positions possible: 1. Disallow modification of a string's text props. 2. Allow modification of a string's text props. Something in between is also possible. We have something in between now, but it's unclear or undefined or accidental. As I understand it, Paul proposes extreme #1. I'm closer to extreme #2. But I say that any backtracking from #2, and especially any backtracking from what Emacs has had so far (ad hoc, accidental, partial, or what have you) - any considering a string ("literal" or not) as needing an error to be raised if an attempt is made to change its text properties (including adding some when there are none) is a loss. And any such loss needs to have a good supporting argument - as strong an argument as for raising an error for list-structure modification where today there's no such error-raising. Elisp programmers need to be able to do both: (1) program without structure modification (list, string, whatever), and (2) program using such modification. And the "literal" case really shouldn't, I think, be a special one. I think that now, even for a quoted list, but I won't argue that case. (A quoted list is clear just from the program text. A propertized string is not clear textually, in the general case.) I don't expect others to hold the same "extreme" position. But that's the direction I'm thinking in now, FWIW. And so far I haven't seen any good arguments in the other direction. We heard arguments about important "optimization". You've tossed that aside now, at least for literal strings, saying there's no such optimization and in fact there may be a performance cost. Your argument is instead the value in "detecting usage that is usually a bug (one that leads to people being utterly confused by the resulting behavior)". That needs to be shown. And not just by pointing to the current all-bets-are-off situation in terms of understanding. Please make the argument in terms of a situation where every string is considered to have modifiable text properties (extreme #2). When I see a good argument against #2, maybe I'll pull back from it a bit. ;-) Certainly, the general argument against this kind of thing _is_ in terms of (1) simplicity of program analysis and (2) performance. It's the argument of compilation vs interpretation, more or less. I'd argue that Emacs Lisp is, among all the Lisps, the one where use by end users of the result is the most important, and interpretation (vs compilation) is relatively more important than for other Lisps, and performance and static (lexical) analysis is relatively less important. (And that's from someone who wishes that Elisp would take more from Common Lisp, which is far from #2.) From MAILER-DAEMON Sat Jun 06 16:19:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhfIA-00014f-Iq for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfI9-000141-Vg for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:46 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:46042) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfI9-00007k-33 for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:19:45 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KIQwH064101; Sat, 6 Jun 2020 20:19:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=+XWvdX2GfXkhLSy5pZpVcPLIo+5vzDpLZYAD9XU0IUQ=; b=JL//GvMEIWLuMT2oxLSI9v8VXi7ih/bLx0hNbJLcWJ6dj/vHP/9vtKO50Coafap9tidF oQ/xY66tt4lrAt3EDCQaUsGFc3+C+QM4b7CGDo5Zt33mWUuDLbvB5duSGQrHpAY69Gtb 3Gc1dfMXPtdQW4/bwC09YTIpEwxNN9WkkeQvw2wZEFLvdumOMadwjXFcNVTsyMMgXabY iOtsfL4Mwt7VxzgKohWjT7hBh5reabwf52NAqy6eJlmctJrtNRWFBssbh4DQzoFSf1Of x5fuQQAleaJRt+rWxTrMIV03nbCKldJ9CPcHUvo5p55XnGBVU3e9BKmtNDmyeTg0PVlk VA== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 31g2jqsthn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 20:19:43 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KHkKC091840; Sat, 6 Jun 2020 20:19:43 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userp3030.oracle.com with ESMTP id 31g08r8d2n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 20:19:43 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056KJden014341; Sat, 6 Jun 2020 20:19:39 GMT MIME-Version: 1.0 Message-ID: <54301e3c-35a1-4f01-bf66-b7dfeeddecd2@default> Date: Sat, 6 Jun 2020 13:19:35 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Paul Eggert , Stefan Monnier , "Basil L. Contovounesios" Cc: emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <3325df83-4840-c15d-3f38-372628a54536@cs.ucla.edu> In-Reply-To: <3325df83-4840-c15d-3f38-372628a54536@cs.ucla.edu> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 spamscore=0 malwarescore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060162 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 impostorscore=0 cotscore=-2147483648 priorityscore=1501 spamscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060162 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 16:19:14 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:19:46 -0000 > > So, IIUC `make-text-button` should ideally work functionally, but for > > historical reasons it works by side-effect. What's the long term plan? > > Do we plan to live with the current side-effecting behavior, or do we > > plan to move to the "pure" functional behavior? >=20 > Given the comments in this thread it seems that there's consensus that it > should move to the "pure" functional behavior, as the side-effecting beha= vior is > confusing (and this is independent of whether string literals are constan= t). Please don't count me among the consenting, in your consensus count. > I installed the attached patch, which is along the lines that I proposed = a > couple of days ago; it has the doc fix that Pip Cet suggested. What was the reason not to go the other direction, and _always allow_ modification of that string arg? From MAILER-DAEMON Sat Jun 06 16:25:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhfO6-00041Z-J8 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 16:25:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfO4-00041E-TV for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:25:52 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:44316) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhfO3-0001B1-St for emacs-devel@gnu.org; Sat, 06 Jun 2020 16:25:52 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KOEgg189839; Sat, 6 Jun 2020 20:25:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=ebiA81c8Oh6AB1VBxxkP0W9VDLX3/qGCfuk2/0/X+Bc=; b=k5S800It6iEvDQLzBLLhy1ju7gfPkaGV+B+5fxuR472ePn31yfbkKt7rExpOl1h+3MFN 5OQwYb+wnxKCKBvPPgXDEwwJ/niFv7hSNvMN3P8YExagSQqCXxSZ9YehBK2s5F6K3AS9 W4uTnqWhTD+Ju/AF2AyVSlibtNfxhstVugvHxr32rN+Mt6N+jrWAobG32a5qGU1ZI4+/ Ml88ZIVbTki0sD0NnT3Ot+PyTfkfWCjD/akdQ0RaTeYILZQ03oLhEgrQif5MFPnyG6XW H2Bfy2+qL+PIdUw8O02frNY+LMSq/bVEcZys+0X14jFQ425u6pzqpf6+wCmtMbor0j/Z xg== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31g33ksspu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 20:25:49 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056KICdj053393; Sat, 6 Jun 2020 20:23:48 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3020.oracle.com with ESMTP id 31g2y2v607-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 20:23:48 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056KNlbD015665; Sat, 6 Jun 2020 20:23:47 GMT MIME-Version: 1.0 Message-ID: <837642c4-4bdd-4db3-9fe5-4523df349703@default> Date: Sat, 6 Jun 2020 13:23:43 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Paul Eggert , Pip Cet , Stefan Monnier Cc: "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> <31332591-f540-de69-26a8-03c0d8dd2c9d@cs.ucla.edu> In-Reply-To: <31332591-f540-de69-26a8-03c0d8dd2c9d@cs.ucla.edu> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060162 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 spamscore=0 cotscore=-2147483648 malwarescore=0 phishscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060163 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 14:16:14 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 20:25:53 -0000 > > consider quasi-quoted literals: would those be immutable? >=20 > A string literal should not be modified, regardless > of whether it's quasiquoted. You keep repeating the mantra that a string literal should not be modified, with no good supporting argument. Elisp strings, and hence its string "literals" are not your textbook strings and string literals. The latter are not mutable objects, with text properties. Emacs strings are, in general. And more of them could be - they could even all be, I expect. > "False sense" because programmers would start relying > on Emacs to catch trivial mistakes involving modifying > string literals? Horrors! (Programmers should let > those mistakes persist into hard-to-debug complex > programs, as this will give them much more of a challenge > when debugging. :-) With that logic, we should outlaw list modification. Some users will make mistakes, or get confused, and get into trouble. Heck, why not take it even further: outlaw dynamic state altogether - complex, difficult to reason about, difficult to analyze and optimize by program, difficult to optimize and parallelize. Just a lot of trouble and headache, right? All such arguments are 100% valid. And there are languages based on them. Lisp isn't one of them. And by design Emacs isn't based on one of them. FWIW, I love purely declarative, applicative, logic and functional languages. Always have. I love formal logic, algebraic specification of ADTs, theorem proving, etc. But I also appreciate the dynamic, side-effecting "messiness" of dirty old bit-fiddling Lisp - and _especially_ for a user-programmer editor/env such as that dirty old man, Emacs. From MAILER-DAEMON Sat Jun 06 17:55:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhgmr-0003f9-Tf for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 17:55:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhgmq-0003eF-O7 for emacs-devel@gnu.org; Sat, 06 Jun 2020 17:55:32 -0400 Received: from mx.sdf.org ([205.166.94.20]:49178) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhgmp-0008Hg-Kt for emacs-devel@gnu.org; Sat, 06 Jun 2020 17:55:32 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 056LpAos006190 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO) for ; Sat, 6 Jun 2020 21:51:10 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 056LpAe3029438; Sat, 6 Jun 2020 21:51:10 GMT From: Andrea Corallo To: emacs-devel@gnu.org Subject: Re: feature/native-comp, comp-deferred-compilation: no recompilation when .elc newer than .eln? References: <875zcxgx8f.fsf@no.workgroup> <877dxczwsy.fsf@no.workgroup> <87ftc0nqtv.fsf@no.workgroup> Date: Sat, 06 Jun 2020 21:51:10 +0000 In-Reply-To: <87ftc0nqtv.fsf@no.workgroup> (Gregor Zattler's message of "Sat, 16 May 2020 11:59:08 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 17:51:11 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 21:55:33 -0000 Gregor Zattler writes: > Hi Andrea, > * Andrea Corallo [2020-05-16; 07:30]: >> Gregor Zattler writes: >>>> Is it possible that the old eln is still being loaded because >>>> load-prefer-newer is nil? >>> >>> load-prefer-newer is t in my case. The stale org.eln file >>> was loaded instead of the newer org.elc and the newer >>> org.elc wasn't compiled to a newer org.eln file. I realized >>> because I experienced a specific bug although there was a >>> patch with a fix in the repo. > >> the bit I'm missing is how the load was performed after org is updated. >> Restarting Emacs or calling `load'? > > Sorry for not being more precise: I restart > emacs after upgrading emacs or org-mode (or notmuch). > > > Ciao; Gregor Hi Gregor, This issue should be fixed by Nico's patch e38678b268 "Reduce the number of files probed when finding a lisp file." Hope works for you, in case does not please complain :) Ciao Andrea -- akrl@sdf.org From MAILER-DAEMON Sat Jun 06 17:56:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhgnh-0004RQ-8f for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 17:56:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhgnf-0004PY-Lq for emacs-devel@gnu.org; Sat, 06 Jun 2020 17:56:23 -0400 Received: from grinta.net ([109.74.203.128]:46806) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhgne-0008VL-4F for emacs-devel@gnu.org; Sat, 06 Jun 2020 17:56:23 -0400 Received: from black.local (c-73-229-170-236.hsd1.co.comcast.net [73.229.170.236]) (Authenticated sender: daniele) by grinta.net (Postfix) with ESMTPSA id EE345E0D45 for ; Sat, 6 Jun 2020 21:56:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=grinta.net; s=2020; t=1591480578; bh=lXV54XkuaRFWBv/b2ssd1PMi27XsVvZ3zYDch9nF3wI=; h=Subject:To:References:From:Date:In-Reply-To:From; b=V5VIuUHhxzyXts5HQ8MuEcjlIoiF+3+mTqHLxepbVqa77vyN32mUSEbS9+2autf+P IRxv/WBJcLJG2gcqbsg6TRgljHK2nM4y/vs7i+pXataNnz3MXl4PqczvljJ9hOADzn p/ibs43qf4aOpc6G6HAIXkOF6CZAnj18cMu9zgVOurF5waQyoE5WQlg6i4I/u8NLH6 Sfh8dKRtqI3zGzb+SSainL87JhgUwRbRD4Ughno+aYrY/uCg9TqocKkOdqPI1BFG8I nHWFTqFFgagXIP4tm2PvZ1EQVhP8623ouy3MfxOhMoLBN+QxMttnKkExx6SutSDGxL pRora7p08/M1A== Subject: Re: Package naming To: emacs-devel@gnu.org References: <426aedc1-fd8d-5708-2164-03a10224a652@grinta.net> From: Daniele Nicolodi Message-ID: <6110ea25-7e2f-9ac4-2f4d-f07bd4425782@grinta.net> Date: Sat, 6 Jun 2020 15:56:06 -0600 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 MIME-Version: 1.0 In-Reply-To: <426aedc1-fd8d-5708-2164-03a10224a652@grinta.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=109.74.203.128; envelope-from=daniele@grinta.net; helo=grinta.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 17:56:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] 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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 21:56:23 -0000 On 30/05/2020 16:31, Daniele Nicolodi wrote: > Hello, > > what is the established convention for naming packages that mainly > provide a major mode? If I have a package that mainly provides > `foo-mode`, in the sense that all the "user facing" functionality is > enabled activating a major mode, should the package be named "foo" or > "foo-mode"? > > I see examples of both. Notable examples are "org-mode" and "bibtex". Hello, beside the matter-of-fact reply of Stefan, I haven't seen anyone else express opinion on this matter. I believe that with easy code distribution via ELPA (and MELPA) it would be best to have some consistency in package naming, thus an (unofficial, not strictly enforced) naming convention would be a good thing. Does anyone else feel like commenting on this? Thank you. Cheers, Dan From MAILER-DAEMON Sat Jun 06 18:14:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhh5J-0006nh-Nd for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 18:14:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59308) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhh5I-0006nR-Ag for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:14:36 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:54910) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhh5F-000208-Jn for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:14:35 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 8E12144155B; Sat, 6 Jun 2020 18:14:32 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 3032D44106F; Sat, 6 Jun 2020 18:14:31 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591481671; bh=hqYklwJXgQ36Q7C7po/a/uWyMSqYpBrZo3X9tf6fuyE=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=GkYv3jQxjkeAEkPINjXwRMvP5q7LvyWKwuW7edajssgiXmUjcJ+y4w6HY735ECl7U 1e3qjXA/Rnmb1uk7qZ+Xbz/BQCq5UHtdMpOM+FkFZTYseZZ5zYf4qh3RBt87DLcWds 0VilOZCgMnY4q3Sm3IPLY+bVnNx+4vLPgr7DwKb4Rc1dDOLhezXqtXEfY5xtd3zobq t7SXGla9TmvR3d4p1O3U7TuaWtAl2UEA+lods5sfryyCan3qH3/ooiTEb6e5G3gZl4 jAcMSskFcLSQJGLp0dolRuWiokERsltDzqpzdVlNmdue5hwnftCioDRey7jt/pwn/T cB5ZmWASeVGDQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id B1F56120B68; Sat, 6 Jun 2020 18:14:30 -0400 (EDT) From: Stefan Monnier To: Pip Cet Cc: Drew Adams , Paul Eggert , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> Date: Sat, 06 Jun 2020 18:14:29 -0400 In-Reply-To: <87pnacxbnk.fsf@gmail.com> (Pip Cet's message of "Sat, 06 Jun 2020 19:00:15 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.016 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 18:14:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 22:14:37 -0000 > I don't see how literal data is special that way. In code (let ((x "foo")) (cl-assert (eq (aref x 0) ?f)) ...) every programmer I know expects the assertion to be true, always, no matter what. Yet the assertion will fail if `...` does something like (aset x 0 ?o). That's what makes literals special. This is not unique to Lisp [ tho Lisp experiences this much more because of the presence of `quote` which makes it possible and common to have arbitrary literals embedded in the code. ] IIRC, in C the standard says that modifying a string literal has undefined behavior. > If I expect a function to look at a string argument, but it actually > modifies its argument, that's equally confusing. I hate mutability, yes. But mutability of literals amounts to self-modifying code, which is yet a bit more evil. > If I modify data that's been used in a hash key, that's even more > confusing. If I modify data in an image spec in a Lisp callback from > the image backend, Emacs will crash. These cases deserve being > thought about, too. We agree, but I'm not sure what it is you're suggesting we should do. We obviously can't make existing data types unilaterally immutable since it would break way too much code. Are you suggesting we add new constructors for "immutable cons", "immutable string", ...? Or a `set-immutable` function? > The cost of this isn't negligible; the single bit which I expect will be > kept for every string, cons cell, or vector isn't that significant, but > so far what's been proposed would be complicated to implement, explain, > and use. I'm not exactly sure what has been suggested, to be honest. Are you referring to the idea of making literal strings immutable? I'm not sure what is the implementation plan for such a thing. It seems at least not completely straightforward. > It would lead to some people developing a false sense of security and > others becoming insecure and copying everything needlessly (and > dangerously, for cyclic objects). And it would effectively prevent any > competing system of mutability, I fear. That makes me think there's been a fairly concrete proposal that has been made and which I missed (since otherwise, it seems unclear how you'd get to these conclusions). Can someone point me to it? Stefan From MAILER-DAEMON Sat Jun 06 18:16:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhh7b-0008H7-KE for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 18:16:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59748) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhh7W-00085X-Gq for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:16:55 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:6603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhh7V-0002Wb-Om for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:16:54 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 4952344155B; Sat, 6 Jun 2020 18:16:52 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id D4E064411FE; Sat, 6 Jun 2020 18:16:50 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591481810; bh=vhwgyKgsPoZ0pc2gmI9JNaQRkJknoxsrc5ZbhOz3SFk=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=CYj+aIMDPcNvkbRvmVJRYPjEkDz2ApD/bNSa6ZE69d2ujQ5cL1zIq6Fy61sxbzcBW 5OstZJiuS5DbLUo9E9u6TWpp6iEDFpQX15Vz2M7rBFo7TDSSFmgyy6yUlsudAjYpWj GYDLEN8BvB5TcLSD9Igb+WHXcnMDzrgb+F+vzcO1qyKBN66MzMDsAA0NZQ70Gx4KGF CB9mnXyqkoxsVkshZwAQmzo8zm1hYcXu/IbB9zKAiV1p70A6DSgjBPfvKm4eFagAi/ XC06p2of+16l6RXk7UvwmU9I2SmER6Cr158MLHsvmJtG9gTm9Zew7dedcgW+0O3Y3n 4qNGkiG+c+kaw== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6D371120D0A; Sat, 6 Jun 2020 18:16:50 -0400 (EDT) From: Stefan Monnier To: Drew Adams Cc: Paul Eggert , Pip Cet , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> <56bae185-9309-43f1-9727-11e89080cd12@default> Date: Sat, 06 Jun 2020 18:16:48 -0400 In-Reply-To: <56bae185-9309-43f1-9727-11e89080cd12@default> (Drew Adams's message of "Sat, 6 Jun 2020 13:11:01 -0700 (PDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.016 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 18:14:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 22:16:55 -0000 >> It might be worth making such a significant change if >> modifiable string literals were an important feature > They are, IMHO. A wonderful feature. I find it very hard to believe. Either you're misunderstanding what we're talking about, or you do have some really off programming habits. Could you show some examples of code that rely of that "wonderful feature"? Extra points if such code is available in an existing Elisp package. Stefan From MAILER-DAEMON Sat Jun 06 18:20:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhhBA-0001Ge-Uc for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 18:20:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60324) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhhB9-0001GT-B8 for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:20:39 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:37491) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhhB8-00038Q-8a for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:20:39 -0400 Received: by mail-wr1-x42a.google.com with SMTP id x13so13480850wrv.4 for ; Sat, 06 Jun 2020 15:20:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=WKPcSnDZ8y8AxezBBOPn7q9JbZrJhSHPQtkGC+maexQ=; b=NQ6G0JdVNnOjZKk7DGNSnmVkw4OXtDEohb4jNpdXRHX1I70mOkqtZA6BH+GU/b3hTI MWdDkaXv7/cTKvkGjaE59MXru9iyJjyU9ALutxwKLpn49gX69tt27Z1UJYe3kDV23oJA msdL/T+ukx6MdphLcPw+UGUoxUoKNfSAB7Ma0vxWmWJ/d+juNNq515J5u12dmqeXpZcq WbNWAbPFNKX3AJDjV1aubFthaMwAnpJ3nyGDle3uh2WXlNlgyMi8P40o2ArpOpso/N+2 5C3lfIpmhaOkJqOeD0zrwql07Goi9jiCXC4Pxr6xSwDzNnZJPLd/oiQmxkj5x9FoCfSF NUEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=WKPcSnDZ8y8AxezBBOPn7q9JbZrJhSHPQtkGC+maexQ=; b=OpHEIg8VU7SHw42Z/Y5cZtUe46eNdqRmf4Lp1aurpzx95VMd9CxWrI/0BU4WJu/2aD ycCWCvBpIuRAIfyvsnpL+aT5HwT/p3DxjYzNLh58fXj8LAFJvTFKyT1fISbJae6zDo1U Lihsva81KldUw9o30kWDHwQ5j94pYuWxA/UB3lrQUJQ19aVMVitN9igwJAFLNIiB9pJg lKV1dEdroJaZ8ZHqGqh9KYORGxQaoAwiAFV7R12QKAvuAt3vDWlp/QUSQvaZ2K8LFuE1 A1ZtQ7KLtWEHC2wJlY4sSusEGedrn3mWN1L2tqVl2P5Tj3vjlUTTRMY/xeG3iH6rYOWt omjA== X-Gm-Message-State: AOAM532F3Ji+rERaZhBj/Ceuu4BRBXUu1FyvevppGtaF8IYhrpG5+j8x zAQewZsd324hBgJN2/LZix9BSXou X-Google-Smtp-Source: ABdhPJzFyN5GJFDwJudL5ds5hMK8KVcClS+XeGhl973yUmm/fiHbgeOOWJxacsV9mPYwYNuUGeN6MQ== X-Received: by 2002:a5d:4042:: with SMTP id w2mr16875437wrp.423.1591482036351; Sat, 06 Jun 2020 15:20:36 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a6sm16833082wrn.38.2020.06.06.15.20.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 06 Jun 2020 15:20:35 -0700 (PDT) Sender: DG Subject: Re: Package naming To: Daniele Nicolodi , emacs-devel@gnu.org References: <426aedc1-fd8d-5708-2164-03a10224a652@grinta.net> <6110ea25-7e2f-9ac4-2f4d-f07bd4425782@grinta.net> From: Dmitry Gutov Message-ID: Date: Sun, 7 Jun 2020 01:20:33 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <6110ea25-7e2f-9ac4-2f4d-f07bd4425782@grinta.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42a.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 22:20:39 -0000 On 07.06.2020 00:56, Daniele Nicolodi wrote: > beside the matter-of-fact reply of Stefan, I haven't seen anyone else > express opinion on this matter. I believe that with easy code > distribution via ELPA (and MELPA) it would be best to have some > consistency in package naming, thus an (unofficial, not strictly > enforced) naming convention would be a good thing. > > Does anyone else feel like commenting on this? I generally lean toward naming the packages 'foo', not 'foo-mode'. But there are exceptions. E.g. if the mode is called -mode, looks like almost everybody in MELPA up to now has chosen to name the package the same, apparently in order not to confuse the name of the package with the language? There are plenty of exceptions for this in core Emacs, though (python.el, pascal.el, prolog.el, etc). So you really can go either way. All packages with minor modes, on the other hand, can safely go with the name, because it's probably sufficiently unique. I'd call the org-mode package 'org', by the way. From MAILER-DAEMON Sat Jun 06 18:20:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhhBI-0001MP-5M for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 18:20:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60356) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhhBH-0001LS-EZ for emacs-devel@gnu.org; Sat, 06 Jun 2020 18:20:47 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:16913) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhhBG-0003Bf-Jk; Sat, 06 Jun 2020 18:20:47 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 618DA1002FA; Sat, 6 Jun 2020 18:20:45 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id CFB0A10029E; Sat, 6 Jun 2020 18:20:43 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591482043; bh=QLtY13MhxPABRgejp+MTIrkImNpBnlUqe/EV0eYiXcs=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=m2uoa5G5qJsgM88YCl3VFopH5oNkggJOFdIScijW9Tz2OmTkJf0/0G97Rj1MlyMKE zujigJbzcp3X6BWPo6cHbqrUrKtu5sihvUzedcBg6PFueiI0hBYFqDxh+uTgOa05+W 4Hm35UxXrKIAvbprAfRj0CLwkKWYuoVZxutWL5dLizgKPKQ6HOITAvNTmrgVaEMG6j xfs8ZqD7uj2JvdUrYvmLS0w5/B2Tgwv7z4iaRlr2O/soXg1BKAHFnmSWdnE8f/Bt2n V81XHPvJ3McaOOcqDocq/XsLP9hAgtwZOBExSNRJlZibFDJcq1BqlOBf44hHjx8HTp WkEX7JvkSHiMg== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6A749120C75; Sat, 6 Jun 2020 18:20:43 -0400 (EDT) From: Stefan Monnier To: tomas@tuxteam.de Cc: Eli Zaretskii , emacs-devel@gnu.org Subject: Re: What is the most useful potential feature which Emacs lacks? Message-ID: References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606095851.GB28645@tuxteam.de> <83v9k48pwn.fsf@gnu.org> <20200606201819.GA18889@tuxteam.de> Date: Sat, 06 Jun 2020 18:20:42 -0400 In-Reply-To: <20200606201819.GA18889@tuxteam.de> (tomas@tuxteam.de's message of "Sat, 6 Jun 2020 22:18:19 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.003 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 18:14:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 22:20:47 -0000 > - Rudel: a collaborative editing environment for Emacs. > It's even on Elpa and has a page on Emacswiki [1] > It seems to be based on the Gobby protocol Yes, it's in GNU ELPA, but it's been on life-support for several years. It would benefit quite significantly from someone digging into it and making it use libgnutls rather than gnutls-cli. Streamlining the setup would also be quite useful. Stefan From MAILER-DAEMON Sat Jun 06 19:11:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhhyc-0002vc-Aw for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 19:11:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhhyb-0002vU-AT for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:11:45 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:54796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhhya-0003ky-4s for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:11:44 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056NBann135207; Sat, 6 Jun 2020 23:11:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=28SR5poju0JyipzTg4HRcGsnKHG1CUrKiL4dMr5h/v8=; b=wHXiQSBHY8B9WS2CvhA7Kw5blwwWivA/wkzzZBdAw6Q9DH9aRKpbXBkIpT3rFcnrm1Vu PQtlHsSYgKUH+C9HqmjQoN0b1ltGOEc3Q3DLRVAG1w/PrBNZSY8E39zVizm8aPP+X2O6 sj3zIpaqPhlChgsy/5cXOeOgKIDhkp+iCUD8aVqtTdOhGOyRHogqUiIAu0jQgGv3OeHk dwPh9rO1eI0ZrA3//WpJ2LFhFN7mEILfdDslyMjBh2JTv4tUytNXMalYt54MouaPR/8e rNWYBndPkFB0N8dMQ8Kc7A4pDNT5iQ6nG4p0PKGTbvKKgP7X404O3kUSbstVcTD4GWIu lA== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 31g3smhway-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 23:11:42 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056N7qBf103851; Sat, 6 Jun 2020 23:11:41 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3030.oracle.com with ESMTP id 31g169j9wf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 23:11:41 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056NBeaF023322; Sat, 6 Jun 2020 23:11:40 GMT MIME-Version: 1.0 Message-ID: Date: Sat, 6 Jun 2020 16:11:36 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Daniele Nicolodi , emacs-devel@gnu.org Subject: RE: Package naming References: <426aedc1-fd8d-5708-2164-03a10224a652@grinta.net> <6110ea25-7e2f-9ac4-2f4d-f07bd4425782@grinta.net> In-Reply-To: <6110ea25-7e2f-9ac4-2f4d-f07bd4425782@grinta.net> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 suspectscore=0 adultscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060186 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 cotscore=-2147483648 suspectscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=999 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060186 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 19:11:42 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 23:11:45 -0000 > Does anyone else feel like commenting on this? Good idea to raise the question. I don't think we should have any naming style/convention, other than the file-name length or package-name length (if the latter exists). I do, however, think we should have an apropos command that helps you find packages. The "keywords" or other relevant info describing a package are the best way to find it. We shouldn't expect the package or file names to do that job. IOW, Emacs has better ways to find things that depend on a file name to convey much, if anything. Package developers name their things whatever they want, for whatever reasons they want. If they think the package name is good for discovery or advertising (whether or not it describes the package), that's fine too. We have a command `apropos-library', but it doesn't really seem to act like an apropos command. It seems to match only library (file) names, and return info that's within the chosen library, as opposed to matching keywords etc. relevant to the library. I don't see any `apropos-package' command, but it might be good to have one - preferably a powerful one that really helps discovery etc. From MAILER-DAEMON Sat Jun 06 19:18:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhi4y-0004Oq-CB for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 19:18:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36098) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhi4w-0004OT-Tj for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:18:18 -0400 Received: from mail-qk1-x733.google.com ([2607:f8b0:4864:20::733]:34510) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhi4w-0004sb-4U for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:18:18 -0400 Received: by mail-qk1-x733.google.com with SMTP id f18so13750134qkh.1 for ; Sat, 06 Jun 2020 16:18:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=AL2D7RRitQE9K5P1AryLP0a2UotbxzvEZ0kz5yXwGK0=; b=Feb87R0unrcf66p1aNu+2fz6hW/BDCLI0BJc8dZ0fReCMe2ilNQ55Zroqp+zQEAP3r EnqwGFn7a6CRy1js8lts6eGk1HRPc0YQqe01FBdWHtUSiTWRFgKQ8+QQC1u1dCDQ0oaH gdoJuhXKAJr/VanslUKCnwV+wX6snYajuAbsRqrzUW+zbJZ10xTsdMW52ObKTyQIUUiW HViTHPn7JiRKprx1nSif5qM/rsx4t9/5ApLLmSy+48kW3t6dU9GUGpwdZves1LfXD1AQ 5AUPurNnL++wADuDAoUblKSucpmJVo9X8nB/k30Jy09fqVl/tzAKFNt+kSouu1kwV4Zr hurA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=AL2D7RRitQE9K5P1AryLP0a2UotbxzvEZ0kz5yXwGK0=; b=R98w+Rjw9LAEhTE37DuEbbXPRnqOnRxOig+3FWF9qKQB4/aRHeIhkXqwWQgaWSh36t q3Iw0aRZsKy4Bjr0so0/E2b/KIgOv3tDOnMK9jS71Oa502xKccadydulHelfUnYOX9aO Jwu+I7J4PEDh6WV0WaQi91FRYdS0ie/0mOoVF7LIzqiV6lrrn1cl2BMI+cLiToUIfDmO MTHo0RDS4/GAYTWaQW6UyBHku6LS0jDwSQB4KUnXIvn3CE01KA9/fPpDwQBlP5Ek9AA9 MBUl3xCSoBVQvo9NmZp1tas9p7PBziehFk+u60EdXVDebUIsdIjRqoLstgIuCniAfAG5 M0yA== X-Gm-Message-State: AOAM53393KmYIgcGfHb6qhojs4tkB4hcwGigIo/r5vTpgO+lcDJNfY/n wYWsUgp7wDCTH54PBsMryc24G3y2 X-Google-Smtp-Source: ABdhPJzqVUG8R3ET4Dfky3IyWMUhgO3VbtDT5uPaKDz/YPfI+Ll9fZjpKnNHUSvl4HBc5dUshEvvmA== X-Received: by 2002:a37:a554:: with SMTP id o81mr14819241qke.180.1591485496713; Sat, 06 Jun 2020 16:18:16 -0700 (PDT) Received: from arch-thinkpad (cpe-24-161-33-75.hvc.res.rr.com. [24.161.33.75]) by smtp.gmail.com with ESMTPSA id i14sm3149498qkl.105.2020.06.06.16.18.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jun 2020 16:18:16 -0700 (PDT) References: <87eeqv6d30.fsf@gmail.com> <878sh0rr7m.fsf@gmail.com> User-agent: mu4e 1.4.8; emacs 28.0.50 From: Zach Shaftel To: Helmut Eller Cc: emacs-devel@gnu.org Subject: Re: GSoC project - Improving ELisp Traceback and Debugging Information In-reply-to: Date: Sat, 06 Jun 2020 19:18:15 -0400 Message-ID: <874krnss08.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::733; envelope-from=zshaftel@gmail.com; helo=mail-qk1-x733.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 23:18:19 -0000 > Before converting to IR1, SBCL records the "source-path" of each cons > cell in a top-level form in the hash table *SOURCE-PATHS*. (See the > function SUB-FIND-SOURCE-PATHS defined in ir1tran.lisp). Ah okay, I guess I'm not as familiar with the SBCL compilation process as I thought. I had some trouble finding where the source path recording actually takes place so thanks for pointing that out, gonna be doing a lot more digging through the source. > Later, when the compiler walks down the (macroexpanded) form, it > searches the recorded source-path for the current form. If something > is recorded, good; if nothing is recorded, then the compiler uses the > source-path of the parent form instead (the top-level form has always > a recorded source-path). > > I think this approach is quite simple and usually works pretty well. > Most macros return part of the input arguments somewhere in their output > and so the compiler will naturally find the recorded source-path in the > hash table. Problematic are macros that completely copy/rewrite the > input. Luckily, such macros are rare. Great, that certainly does sound like something the byte compiler can manage to keep track of. > I don't know if it would work well enough for macroexpand-all and > cconv.el. But at least, it doesn't need new data types. It could also > help to manually propagate the source locations in a few places, like > macroexp--cons. That seems like a good approach and should be easy enough, and luckily macroexp--expand-all already tries hard to preserve `eq`uality of expanded forms. cconv.el might be the bigger issue, but that's a task for later. -Zach From MAILER-DAEMON Sat Jun 06 19:27:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhiDl-0006ND-CT for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 19:27:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36688) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhiDk-0006N4-Jt for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:27:24 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:42678) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhiDj-0006FZ-61 for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:27:24 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056NMTBr121768; Sat, 6 Jun 2020 23:27:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=+BqNHSLyvrluksCaaKoppxP3zAelxE6E7VXBoLWXvCA=; b=aQmHrJ0ZJ9okj2ZLGIebk4tthXo2fmrcGrplBRG2PAH3BzYhtKvHVvnCw401qyrdDpCE AJPmRYL6Kp3e18nyrr4G0SBE7jQXvOZyEzzRTFAB5X2BegT9GvEcjZJwSj1NJyvL436G S3u3ZPQZp1hPqxPm71hiNwSOhLF/ai8UJ7AxhL4yPwfDcu5c69wlQgGsh/QvsLWCUfqb SGN4kOYJBztHZ8MWCsml5T6btgBJLz5D7JYb8a62WGP2h47RYTMe7u0Td0NTv9DB4Hyb yqWT3RfOWnvc/0+3OmRgXna/l8kUmTUtzYq9aCkH6cJQIGg6Du8C4fy5wvFGw+6HYu2A 6A== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31g2jqt1mj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 06 Jun 2020 23:27:18 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 056NIBh6186046; Sat, 6 Jun 2020 23:27:18 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 31g2y3a7at-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 06 Jun 2020 23:27:18 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 056NRCQh030077; Sat, 6 Jun 2020 23:27:12 GMT MIME-Version: 1.0 Message-ID: Date: Sat, 6 Jun 2020 16:27:08 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Stefan Monnier Cc: Paul Eggert , Pip Cet , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: RE: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> <56bae185-9309-43f1-9727-11e89080cd12@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060188 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 impostorscore=0 cotscore=-2147483648 priorityscore=1501 spamscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006060188 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 19:27:21 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 23:27:24 -0000 > >> It might be worth making such a significant change if > >> modifiable string literals were an important feature > > They are, IMHO. A wonderful feature. >=20 > I find it very hard to believe. Me too. But that's my current vision, and I'm stickin to it, until I see some good arguments to the contrary. Show me why we need (ever) to treat Elisp strings as immutable, at least wrt their text properties. > Either you're misunderstanding what we're talking about, or you do have > some really off programming habits. >=20 > Could you show some examples of code that rely of that "wonderful > feature"? Extra points if such code is available in an existing > Elisp package. I don't have an example. I don't have any such habit. And we don't yet have consistently, clean mutable literal strings. Show me that we couldn't. Elisp strings can have properties. You don't see the properties when looking at code. Neither does the Lisp reader etc. I don't see why we would think of strings appearing in Elisp code, i.e., literals, the way we think of them in C, as fixed things, constant. It's natural that a programmer might think that way. But I don't see why it's important to the Elisp language that we treat them that way. Please explain why it is. What's lost by treating them the same way we treat a value returned by `make-string' or `copy-sequence'? The `make-text-button' example is maybe a good example of why we shouldn't need to bother to constantize them. Dunno; I didn't really follow that discussion. TBH, I haven't thought about this before this discussion. But I'm wondering now why we ever try to treat Elisp strings as constants - wrt their properties, at least - rather than as mutable objects. Sure, it's unusual to think this way. But it's pretty unusual for a language to have propertized strings in the first place. The case of strings is different from both conses and symbols (with their properties), admittedly. And? From MAILER-DAEMON Sat Jun 06 19:54:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhieM-000328-Ms for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 19:54:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhieL-00031w-Nw for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:54:53 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:60577) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhieK-0001ov-Lj; Sat, 06 Jun 2020 19:54:53 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 9BE4E100004; Sat, 6 Jun 2020 23:54:46 +0000 (UTC) From: Juri Linkov To: Tomas Hlavaty Cc: Arthur Miller , Steinar Bang , Richard Stallman , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Organization: LINKOV.NET References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> Date: Sun, 07 Jun 2020 02:30:36 +0300 In-Reply-To: <87a71hv584.fsf@logand.com> (Tomas Hlavaty's message of "Fri, 05 Jun 2020 18:37:31 +0200") Message-ID: <87k10jerlv.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.231; envelope-from=juri@linkov.net; helo=relay11.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 19:54:48 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 23:54:53 -0000 >> Maybe chromium-browser --print-to-pdf=doc.pdf --headless --disable-gpu >> --run-all-compositor-stages-before-draw --no-margins doc.html >> or using its wrapper chromehtml2pdf. > > there are alternatives which don't require malware: BTW, why browse-url.el still doesn't support the Brave web browser? Brave solved the problem of malware. It's one of the most secure and privacy-respecting web browsers. Unless someone presents a reason not to do this, I'm going to add Brave support to browse-url.el. From MAILER-DAEMON Sat Jun 06 19:54:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhieQ-00035e-3f for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 19:54:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38206) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhieP-00034n-6t for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:54:57 -0400 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:28991) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhieO-0001sW-Fi for emacs-devel@gnu.org; Sat, 06 Jun 2020 19:54:56 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 68C11240004; Sat, 6 Jun 2020 23:54:52 +0000 (UTC) From: Juri Linkov To: philip@warpmail.net (Philip K.) Cc: dgutov@yandex.ru, simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <87eeqtvrmq.fsf@bulbul> Date: Sun, 07 Jun 2020 02:46:16 +0300 In-Reply-To: <87eeqtvrmq.fsf@bulbul> (Philip K.'s message of "Fri, 05 Jun 2020 10:33:33 +0200") Message-ID: <87ftb7dbun.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=217.70.183.193; envelope-from=juri@linkov.net; helo=relay1-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 19:45:46 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2020 23:54:57 -0000 > Don't most people tend to use either shell, eshell or some other > terminal application? If I were to use shell, over eshell, I guess that > this would be somewhat annoying, at least by default. I wonder why people who prefer eshell, don't enable it with (fset 'shell 'eshell) Then the project menu could have just one entry 'shell'. > I was thinking that a "x" key could be added, which would invoke > execute-extended-command, but in the project root. Or as a more general solution a prefix key sequence could be added like recently was added a prefix key sequence 'C-x t t' to run the next command in a new tab, a similar key like 'C-x p p' could be used to run the next command in the project root. From MAILER-DAEMON Sat Jun 06 20:34:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhjGS-0003Pg-24 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 20:34:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhjGQ-0003PQ-Hn for emacs-devel@gnu.org; Sat, 06 Jun 2020 20:34:14 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:33161) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhjGP-0007p4-0z; Sat, 06 Jun 2020 20:34:14 -0400 X-Originating-IP: 111.89.103.91 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id DB25CFF802; Sun, 7 Jun 2020 00:34:04 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: "Why is emacs so square?" From: Jean-Christophe Helary In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> Date: Sun, 7 Jun 2020 09:33:59 +0900 Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> To: Juri Linkov X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.199; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 19:54:51 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 00:34:14 -0000 > On Jun 7, 2020, at 8:30, Juri Linkov wrote: >=20 >>> Maybe chromium-browser --print-to-pdf=3Ddoc.pdf --headless = --disable-gpu >>> --run-all-compositor-stages-before-draw --no-margins doc.html >>> or using its wrapper chromehtml2pdf. >>=20 >> there are alternatives which don't require malware: >=20 > BTW, why browse-url.el still doesn't support the Brave web browser? > Brave solved the problem of malware. It's one of the most secure > and privacy-respecting web browsers. Unless someone presents a reason > not to do this, I'm going to add Brave support to browse-url.el. A piece of software that actively promotes cryptocurrency use is a scam. = But maybe that's not a valid reason. --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sat Jun 06 20:40:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhjMw-0005FU-TK for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 20:40:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhjMv-0005F6-0o for emacs-devel@gnu.org; Sat, 06 Jun 2020 20:40:57 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:33015) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhjMt-0000d1-S0 for emacs-devel@gnu.org; Sat, 06 Jun 2020 20:40:56 -0400 Received: by mail-wm1-x332.google.com with SMTP id j198so11732081wmj.0 for ; Sat, 06 Jun 2020 17:40:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=F9F+nAVcm8NwrUorllafvQsVTgpX79sYEs59GJzqZO4=; b=WBkd+rWc2qKUKRwda6qWbA1EoV0WQ9VaojPj3gUvhKS2IzFNapgFxw76iMSuYol1qk xLDaqGmqmVcOlyyoxUPm31ZfjgCGcd1rh6/WVXBGffm0fenyKyRvyas+2sEr0ahxdX54 USCIaY/yKDHJGLGd1cY1tSStHFZxCAGveHU+Mp/qoPPfh+zOcr8PZcamPn0UTOQASWWj Wi+4D0K+lMs9kufRV2I/RERgPHLgtxjNOYN52Wad6LlhiZsNe2iZpQYbS/xaG8Ypoes6 8xOmRgBfkM3ZgWOqTRdBWXCSjoFZMRjdwcajqczLaQ2SCn8xv4/O6bHdRX5rPef5EI8h Px1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=F9F+nAVcm8NwrUorllafvQsVTgpX79sYEs59GJzqZO4=; b=FHm+3gz4rN5IoLReNU99SUXUdoud5Qq00aWcIKlevQ2W/N/4xSEFqEBpAd0xeJxLjl tJOF3x4lk1scxOegQdo8qE2INZOkpLtfGgGoc75ebm68MSGUKQVK5HIBOfwRF7h/vZDV t9cJbRDbnrEpJmiE5ghFUgWMRy1Z3hFViUGWh3+HZs98r1CXNkbTlkNmAiTCWn74jJrX bqWRR2kJMstF7/WL/H8MI9hF23g41HavsuTshOnKFm70Fn6WfS4y/jX+xwjj7DYcnwc3 9Gx1+P72twRIImNES4amlhj9hvWddeIA09QJ5Y80jHzvqYlshuJVabweXJB0U4G2PNTQ 3rdQ== X-Gm-Message-State: AOAM530cHrxjMt+4vIUWJSAGwl0uz4u3CXf+xIpSKgi37XP3UezWDRVH UVXkMwor/PGwE6mTTdXobd/Se0Fu X-Google-Smtp-Source: ABdhPJya6Xdubpy2Myvl/Eq5oSPnKgr17XfOhCuirXwEo0otRVyiMYMqF/oPet1M4JyEDbBJ/xKRUw== X-Received: by 2002:a1c:2d83:: with SMTP id t125mr1223063wmt.187.1591490453901; Sat, 06 Jun 2020 17:40:53 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y25sm20171454wmi.2.2020.06.06.17.40.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 06 Jun 2020 17:40:52 -0700 (PDT) Sender: DG Subject: Re: New feature in project.el: Remembering the previously used projects To: Juri Linkov , "Philip K." Cc: simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org References: <87eeqtvrmq.fsf@bulbul> <87ftb7dbun.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <48862f99-c174-71c1-877f-bcf35fc4363d@yandex.ru> Date: Sun, 7 Jun 2020 03:40:51 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87ftb7dbun.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=raaahh@gmail.com; helo=mail-wm1-x332.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 00:40:57 -0000 On 07.06.2020 02:46, Juri Linkov wrote: >> Don't most people tend to use either shell, eshell or some other >> terminal application? If I were to use shell, over eshell, I guess that >> this would be somewhat annoying, at least by default. > > I wonder why people who prefer eshell, don't enable it with > > (fset 'shell 'eshell) I thought the point of 'shell' was that 'eshell' doesn't handle all possible programs you could run in it? For those cases, people would run 'shell'. The above line would make that harder. > Then the project menu could have just one entry 'shell'. A slightly longer line can change the entry in project-switch-commands. >> I was thinking that a "x" key could be added, which would invoke >> execute-extended-command, but in the project root. > > Or as a more general solution a prefix key sequence could be added > like recently was added a prefix key sequence 'C-x t t' to run the > next command in a new tab, a similar key like 'C-x p p' could be used > to run the next command in the project root. It's a good idea, and we really should have a command like that. But, for commands that are present in the switch menu, it would still be more economical to use project-switch-project, right? I mean, as far as the total number of keypresses goes. BTW, I thought 'C-x p p' would be for 'project-switch-project'. But maybe people have a different idea, it's not a strong preference. From MAILER-DAEMON Sat Jun 06 21:40:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhkIT-0006Od-GR for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 21:40:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47552) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhkIR-0006OW-Rt for emacs-devel@gnu.org; Sat, 06 Jun 2020 21:40:23 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:52654) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhkIQ-0002sE-8M for emacs-devel@gnu.org; Sat, 06 Jun 2020 21:40:23 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id C6AB71600E1; Sat, 6 Jun 2020 18:40:18 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id N23VevFyamox; Sat, 6 Jun 2020 18:40:17 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id C993A1600B5; Sat, 6 Jun 2020 18:40:17 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id DQPDOgGJ7-8b; Sat, 6 Jun 2020 18:40:17 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 7927B1600E1; Sat, 6 Jun 2020 18:40:17 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Stefan Monnier Cc: Pip Cet , Drew Adams , "Basil L. Contovounesios" , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <205da0f6-2d15-249f-d1e2-ad1ae31002e6@cs.ucla.edu> Date: Sat, 6 Jun 2020 18:40:17 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 21:40:19 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 01:40:24 -0000 On 6/6/20 3:14 PM, Stefan Monnier wrote: > That makes me think there's been a fairly concrete proposal that has > been made and which I missed (since otherwise, it seems unclear how > you'd get to these conclusions). Can someone point me to it? There's no concrete proposal yet, in terms of published code. That being said, my idea is to change the Elisp interpreter to distinguish constant from mutable strings, and to have a runtime check in the few primitives (notably aset) that modify strings. String literals yield constant strings when evaluated. I wrote draft code to do this (this was after the long kerfuffle about mutability in the emacs-27 documentation), and the draft code has worked well so far. 'make check' passes, it can compile all the .el files and interactive use works fine for me. There is no runtime storage overhead. The CPU-time overhead is insignificant (i.e., so close to 0 that I can't measure it) in my usual benchmark of 'make compile-always' and from what I know about how Emacs and CPUs work I would expect similar results in other benchmarks (except for programs that mutate strings that they shouldn't :-). In the draft code there are no new primitives to create constant strings, test for mutability, or freeze strings. The only change in behavior visible to Lisp is that some currently undefined behavior becomes defined behavior. That is, when a program attempts to change a constant string an error is signaled, as opposed to the current undefined behavior when sometimes an error is signaled, sometimes Emacs dumps core, and sometimes Emacs behaves erratically afterwards. I am still testing the draft code, and am gradually shaking out its changes into master (you may have noticed some recent changes to alloc.c) that can be installed independently of the main change. There's no rush and I have other, more-urgent duties anyway. I am planning to publish the main change for discussion before installing it. From MAILER-DAEMON Sat Jun 06 22:56:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhlTf-0000EN-TP for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 22:56:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhlTd-0000E2-SI for emacs-devel@gnu.org; Sat, 06 Jun 2020 22:56:01 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:55435) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhlTc-00083F-4w for emacs-devel@gnu.org; Sat, 06 Jun 2020 22:56:01 -0400 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 1F6AD100003 for ; Sun, 7 Jun 2020 02:55:55 +0000 (UTC) From: Jean-Christophe Helary Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: pop-to-buffer / switch-to-buffer-other-window Message-Id: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> Date: Sun, 7 Jun 2020 11:55:52 +0900 To: Emacs Devel X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.178.231; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay11.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 22:55:57 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 02:56:02 -0000 When I have just one window open, switch-to-buffer-other-window = sometimes splits vertically and sometimes horizontally to display the = other window. In the documentation, there are plenty of references to "some window" = but little if anything about how that window is chosen/created. What is the rationale behind this lack of consistency ? Or is there some = consistency, for ex based on the mode ? --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sat Jun 06 23:36:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhm6x-0006JP-20 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 23:36:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57878) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhm6v-0006JJ-LD for emacs-devel@gnu.org; Sat, 06 Jun 2020 23:36:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44598) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhm6u-0006tI-Ol; Sat, 06 Jun 2020 23:36:36 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhm6t-0000iY-T1; Sat, 06 Jun 2020 23:36:36 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Cc: emacs-devel@gnu.org In-Reply-To: <20200606101834.GC28645@tuxteam.de> (tomas@tuxteam.de) Subject: collaborative editing Reply-To: rms@gnu.org References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606101834.GC28645@tuxteam.de> Message-Id: Date: Sat, 06 Jun 2020 23:36:35 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 03:36:37 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] The Subject used to be What is the most useful potential feature which Emacs lacks? I've changed it to try to separate this question from others. I have not done shared editing over the network, but lots of people do it -- in Etherpad and in Google Docs -- and it is clear that they find it useful. How about if we take for granted it is useful and skip the debate about that point? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 06 23:37:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhm84-00077N-O6 for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 23:37:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhm83-00077F-Jl for emacs-devel@gnu.org; Sat, 06 Jun 2020 23:37:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44625) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhm81-00073m-KH; Sat, 06 Jun 2020 23:37:45 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jhm80-0000pg-4Q; Sat, 06 Jun 2020 23:37:44 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Arthur Miller Cc: sb@dod.no, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Sat, 06 Jun 2020 15:44:02 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87v9k5n5yp.fsf@mbork.pl> Message-Id: Date: Sat, 06 Jun 2020 23:37:44 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 03:37:47 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] The process that was suggested for viewing the page image involved running several programs each time. A few seconds to start each and it could take half a minute. I use a machine that was made in 2008 or so. I use it because we can boot it with libreboot. I cannot predict when there might be a faster machine I could use. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 06 23:54:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhmNn-0001r5-9X for mharc-emacs-devel@gnu.org; Sat, 06 Jun 2020 23:54:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhmNl-0001nf-0a for emacs-devel@gnu.org; Sat, 06 Jun 2020 23:54:01 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:55692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhmNj-0002Ti-UW; Sat, 06 Jun 2020 23:54:00 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0573khgj020654; Sun, 7 Jun 2020 03:53:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=vyisdWOEw6s3gdEgHK0pooVXVZIfE9mTGt7o/vLFayU=; b=wHh6Zv5Dmv3vP0Lpn+LnPx9mrBIbiXciZHuAcibsRCxQbNakDwMQYU4DGiHh9brQ/2Ep BBghp3gsG7Lh5ROWjk4yJUu8CnwezKcFHQZWtkzhfZeclpNxtafEg4P4eKHcvkB2yqGH 9lE73BgHmNHf+LCxrOiEIvxOiDNItN/jScnnDt5CqpfkPMU33cCtuseX7tpbYTRAHDxq cqg+var/06uf+eFQ73nquY+rWy8osaTUrozEhx/DSVwS+gD2lFILv+J6U3aBxEPrzUoO VfIZUyogthjP8suzV32oxvgRWB1iV/OZpAf7J1Og9Sr+sfTTxt7vJX6NEVDezFKUzJie eg== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31g33ktcxg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 07 Jun 2020 03:53:32 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0573mRPP140655; Sun, 7 Jun 2020 03:53:31 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 31gn1wn1vv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 07 Jun 2020 03:53:31 +0000 Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 0573rOWH025360; Sun, 7 Jun 2020 03:53:25 GMT MIME-Version: 1.0 Message-ID: <59700189-7be2-4260-a22f-87fb2d0e3599@default> Date: Sat, 6 Jun 2020 20:53:20 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Juri Linkov , Tomas Hlavaty Cc: Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: RE: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=18 mlxscore=0 phishscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070028 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9644 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=18 adultscore=0 spamscore=0 cotscore=-2147483648 malwarescore=0 phishscore=0 mlxscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 priorityscore=1501 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070028 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 23:53:55 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 03:54:01 -0000 > BTW, why browse-url.el still doesn't support the Brave web browser? > Brave solved the problem of malware. It's one of the most secure > and privacy-respecting web browsers. Unless someone presents a reason > not to do this, I'm going to add Brave support to browse-url.el. +1 for Brave browser. From MAILER-DAEMON Sun Jun 07 02:18:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhoe0-00073U-8V for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 02:18:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50662) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhody-00072o-Ez for emacs-devel@gnu.org; Sun, 07 Jun 2020 02:18:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48019) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhodx-0005Jr-1c; Sun, 07 Jun 2020 02:18:53 -0400 Received: from [176.12.219.100] (port=54209 helo=[10.162.26.155]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jhodv-0004u5-HH; Sun, 07 Jun 2020 02:18:52 -0400 Date: Sun, 07 Jun 2020 09:18:48 +0300 User-Agent: K-9 Mail for Android In-Reply-To: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: pop-to-buffer / switch-to-buffer-other-window To: emacs-devel@gnu.org, Jean-Christophe Helary , Emacs Devel From: Eli Zaretskii Message-ID: <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 06:18:54 -0000 On June 7, 2020 5:55:52 AM GMT+03:00, Jean-Christophe Helary wrote: > When I have just one window open, switch-to-buffer-other-window > sometimes splits vertically and sometimes horizontally to display the > other window=2E >=20 > In the documentation, there are plenty of references to "some window" > but little if anything about how that window is chosen/created=2E >=20 > What is the rationale behind this lack of consistency ? Or is there > some consistency, for ex based on the mode ? Please see "Splitting Windows" in the ELisp manual, it describes how Emacs= decides whether to split vertically or horizontally=2E From MAILER-DAEMON Sun Jun 07 02:55:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhpDI-0007VH-4C for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 02:55:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53584) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhpDF-0007Qd-Pq for emacs-devel@gnu.org; Sun, 07 Jun 2020 02:55:21 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:48405) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhpDE-00041q-BI; Sun, 07 Jun 2020 02:55:21 -0400 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 8BC65100006; Sun, 7 Jun 2020 06:55:15 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: pop-to-buffer / switch-to-buffer-other-window From: Jean-Christophe Helary In-Reply-To: <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> Date: Sun, 7 Jun 2020 15:55:12 +0900 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.178.231; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay11.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 02:55:16 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 06:55:22 -0000 > On Jun 7, 2020, at 15:18, Eli Zaretskii wrote: >=20 > On June 7, 2020 5:55:52 AM GMT+03:00, Jean-Christophe Helary = wrote: >> When I have just one window open, switch-to-buffer-other-window >> sometimes splits vertically and sometimes horizontally to display the >> other window. >>=20 >> In the documentation, there are plenty of references to "some window" >> but little if anything about how that window is chosen/created. >>=20 >> What is the rationale behind this lack of consistency ? Or is there >> some consistency, for ex based on the mode ? >=20 > Please see "Splitting Windows" in the ELisp manual, it describes how = Emacs decides whether to split vertically or horizontally. Do you mean this: split-window &optional window size *side* pixelwise It just says that the side argument affects the function, not what in = pop-to-buffer causes that argument to be set. And I don't find any = reference to splitting in pop-to-buffer for that matter. --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sun Jun 07 03:51:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhq5z-000376-3z for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 03:51:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhq5y-00036t-0m for emacs-devel@gnu.org; Sun, 07 Jun 2020 03:51:54 -0400 Received: from mail-vs1-xe35.google.com ([2607:f8b0:4864:20::e35]:38200) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhq5x-0005bZ-6N; Sun, 07 Jun 2020 03:51:53 -0400 Received: by mail-vs1-xe35.google.com with SMTP id r11so7992775vsj.5; Sun, 07 Jun 2020 00:51:52 -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 :cc:content-transfer-encoding; bh=vbrVzZFzcrtOURFH5rcHnkK6P6spoul1xEkDtIADVag=; b=c7ZIwWz6qdbXFe4yOmQA21tdSwqW9mnGtr5GIUafTSZSQgcpIjZ4B6c6wp6qRIxeb3 Cqs3xU97KLXocSl9ZppGAlpDo7qqgkTni8arT1XX8reMwq/0hAvdhYOoh8rGFYaYYh8d gY6RL5OafXusEx6HDEJ+qt3dyym9V0lDqydgw6Ksi+zwy6Ay5oNLkXIroQ+1o81HZOvc BkW74Fg2z0xahgEGjOYK2jWGwnlVupPpQI0zDDWlQnBZphQPS1Rf0sY8PrGvM+p7qLPS 3CZ5J0IcokAQKhArbdI5sCx5zYQ/QZfAe3G5O5q8hYhABrzi1tkv2w1DbOVW3uuUD4aj hT/A== 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:cc:content-transfer-encoding; bh=vbrVzZFzcrtOURFH5rcHnkK6P6spoul1xEkDtIADVag=; b=SAY4nUznv+Ni2HHg1wc8ufYqaAU0NFbg0VxjtItAz4Dbdr8ICk64UdCzanZSuwFkpj mGX4pzaDBnew7JC0AKs96PzaaHETFpTfI9IHSXaHa2hsP1Cvb0vIv+VEcxS5Ocpt2+zx vw/HI/RH4FfAskSS+qWVeaej9mDuIbcGlKVl12psdAZSpHq0Vy9+4t7tNwdEgQEXrSu3 8HNQpzDVFQi4QmBVbk4Mwbm7eZmwAWfvcbfqfd6WiWHDYA0IlrpGHrTpOZFFK4Zl8ifF 22BpQbVsHr+t0kuR3az3imjsISkU+OzI2DN93sruF9wbmdhBDxjEDjiFJ2Z1VzTUzU0O DNeA== X-Gm-Message-State: AOAM532ylJ1deD2i9V5rXU4furz0KCj3mkggM5hw9lZWdZSOVkcLYdiU xQGDq8pT4Pr8FogPRLqg5PGw1dRugJ12onW56BE= X-Google-Smtp-Source: ABdhPJxOW4GTj0hINtUitY7PeU6wLDA9LVC2pmU4PzkuOUk83eD/6bRsNJfMJoSc4ymz0vkccNkBAxzyZJW5RlqJk8A= X-Received: by 2002:a67:c907:: with SMTP id w7mr12000740vsk.70.1591516311136; Sun, 07 Jun 2020 00:51:51 -0700 (PDT) MIME-Version: 1.0 References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> From: Yuri Khan Date: Sun, 7 Jun 2020 14:51:39 +0700 Message-ID: Subject: Re: "Why is emacs so square?" To: Juri Linkov Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::e35; envelope-from=yurivkhan@gmail.com; helo=mail-vs1-xe35.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 07:51:54 -0000 On Sun, 7 Jun 2020 at 06:55, Juri Linkov wrote: > BTW, why browse-url.el still doesn't support the Brave web browser? > Brave solved the problem of malware. It's one of the most secure > and privacy-respecting web browsers. Unless someone presents a reason > not to do this, I'm going to add Brave support to browse-url.el. But it=E2=80=99s not free software. From MAILER-DAEMON Sun Jun 07 04:04:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhqIR-0005Y4-PD for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 04:04:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60190) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhqIQ-0005WN-7R for emacs-devel@gnu.org; Sun, 07 Jun 2020 04:04:46 -0400 Received: from logand.com ([37.48.87.44]:59024) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhqIO-0007P2-U9; Sun, 07 Jun 2020 04:04:45 -0400 Received: by logand.com (Postfix, from userid 1001) id 281311ACD9A; Sun, 7 Jun 2020 10:03:37 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <83img4aegz.fsf@gnu.org> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> Date: Sun, 07 Jun 2020 10:03:35 +0200 Message-ID: <874krns3oo.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 04:03:37 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 08:04:46 -0000 Eli Zaretskii writes: >> From: Tomas Hlavaty >> Date: Fri, 05 Jun 2020 23:54:08 +0200 >> Cc: emacs-devel@gnu.org >> >> It seems that there is some code in Emacs dealing with unicode >> fonts in order to generate postscript files. Any pointers where >> to start with this? > > I think you should provide more details about the particular problem > you are trying to solve here, because I don't think I understand it. > Emacs generally knows only about fonts it uses for its own display, > and it needs to load the font before it can provide information about > it. Whereas you seem to be talking about fonts to be used in the PDF > file, not in Emacs display. I poked around a bit and it seems that what I did in emacs-pdf (pdf-buffer function) is similar to what ps-print-buffer function does in ps-print and ps-mule with ps-multibyte-buffer set to nil. Now I want something like ps-multibyte-buffer, e.g. pdf-multibyte-buffer so that I can use non-ASCII characters in the generated PDF. So I probably want to implement something similar to ps-multibyte-buffer cases of non-latin-printer, bdf-font and/or bdf-font-except-latin. There seem to be ps-bdf so maybe I have to look, if I can reuse something when generating PDF. >> b) After that, emacs-pdf will understand font metrics so it will be >> possible to do layout. > > I very much doubt you can do sensible layout in Lisp. shr.el tries, > but the result is slow and incomplete -- and it does that with text > displayed by Emacs itself, whereas you are talking about something > more ambitious. For printing, this might not be an issue. > If you want to do layout for PDF, I think one way forward would be to > implement a pdfterm.c "terminal" for Emacs, which produces PDF like > the existing *term.c backends do for supported display types. I'll have a look, thanks. >> c) There are functions frame-width and frame-height. Are there also >> functions something like buffer-width and buffer-height and or a >> way to compute x and y position relative to frame origin, which >> would allow me to position images exactly in the buffer similar to >> what w3m browser does? > > Yes, there are, but they need a window to compute these metrics. > Without a live window, "buffer width" is meaningless, because buffer > text doesn't define the fonts (more generally, the typefaces) used for > displaying the text. Only a window in which a buffer is displayed > provides enough typeface information to do these calculations. I see. There is frame-position but no window-position. Is there a way to get window position in a frame? >> 4) Emacs is missing some kind of canvas, where things could be drawn and >> which would handle pixel precise input. >> >> For example, I would like to browse OpenStreetMap in Emacs. I wrote >> a console based OSM browser osmq >> and web-based OSM browser at >> . I would prefer an Emacs based map browser. >> However, I have not figured out how to lay out images in Emacs in a >> grid and how to detect which image was clicked. A bonus would be, >> where exactly was clicked. Any ideas what should I look into? > > Emacs supports "hot spots" on images for this: a click on an image > returns information about pixel-resolution offset of the click from > the image origin. I think that's what you want, although I'm not 100% > sure. Yes. Is there an example how to start with this? > We also support displaying slices of images, in case that helps to > produce a smarter layout of images. Great. Is there an example? >> It seems to me that these points are precondition for a WYSIWYG document >> editor feature in Emacs. > > FWIW, I don't think these points are necessarily preconditions for > WYSIWYG features. They are important and useful features, but a > WYSIWYG document editor should IMO start with something whose > beginning we have in enriched-mode. That mode currently lacks the > ability of laying out text in variable-pitch typefaces, which I think > is the first extension of enriched-mode that should be worked on. > Followed by page layout and page breaks, intelligent sectioning > commands, etc. etc. And yes, printing is also important, whether it > is done by producing PDF or PostScript or any other intermediate > format. Interesting. Maybe the pdfterm.c you suggested is kind of canvas I wrote about. When there is all that complexity with pixel perfect drawing and layout, it would be shame to limit it to enriched mode. But it is still too early to make decisions in this direction. Thank you for your help and quick and helpful answers! From MAILER-DAEMON Sun Jun 07 04:40:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhqqZ-00025e-GR for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 04:40:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhqqY-00023v-8Z for emacs-devel@gnu.org; Sun, 07 Jun 2020 04:40:02 -0400 Received: from mail228c50.megamailservers.eu ([91.136.10.238]:57308 helo=mail36c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhqqW-0004r4-Py for emacs-devel@gnu.org; Sun, 07 Jun 2020 04:40:01 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591519198; bh=7F64lnjBkwyKbf9Y5hzvtNgzYmLg0dlK2Wq7L2KgROo=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=d02iCIeMXJj6iJISBBpwvIyXuRRrcphZ1GclUXh4bbQpJJonuNHtXs20erpzqVLYk sR4Wp63CGNYh/e5SDeDrqqsPwc57j/hELkMsJRG+N7gqR9zKJOk6VQcwPV2yYyucsX lTaVJlX94Av/x3pudLXkcOWHyGAAWXBM3iRtSoDc= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail36c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 0578dt6v018097; Sun, 7 Jun 2020 08:39:57 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: Use 65535 as scale factor for color-values on NS From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <20200606185734.GA16539@breton.holly.idiocy.org> Date: Sun, 7 Jun 2020 10:39:54 +0200 Cc: Emacs developers Content-Transfer-Encoding: 7bit Message-Id: <3252DE8A-A461-4795-AE13-986F55107C35@acm.org> References: <144C70D7-33AA-4840-89A6-205F1EDF4847@acm.org> <20200606185734.GA16539@breton.holly.idiocy.org> To: Alan Third X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F28.5EDCA787.0053:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=PeiBeRpd c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=hIj89exaAAAA:8 a=m_zmCmAsmznvjUey07kA:9 a=CjuIK1q_8ugA:10 a=LZ7w871ZH3oA:10 a=lS9wXHQM5UdnNJ4u63Ry:22 Received-SPF: softfail client-ip=91.136.10.238; envelope-from=mattiase@acm.org; helo=mail36c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 04:39:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 08:40:02 -0000 6 juni 2020 kl. 20.57 skrev Alan Third : > I'm not aware of any reason for this, and I don't see any immediate > problems with your (second) patch applied. Thank you! Pushed to master. From MAILER-DAEMON Sun Jun 07 05:10:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrJv-0000Cy-QC for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:10:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36076) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrJu-0000Cq-Pg for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:10:22 -0400 Received: from mail-ua1-x92f.google.com ([2607:f8b0:4864:20::92f]:45595) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhrJt-0001WJ-5C; Sun, 07 Jun 2020 05:10:22 -0400 Received: by mail-ua1-x92f.google.com with SMTP id g44so4459460uae.12; Sun, 07 Jun 2020 02:10:20 -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 :cc:content-transfer-encoding; bh=Aym2ADauD/lx83VBnk6zFZEru43LtU4suNGjzpzLi2g=; b=bzx9rTgkgTSVdX4GT3I3Yvt5cOovt+LTJ/IcUwv5NBXU3inOmQoxKRZ/iQU/Vt0CfO pwkyJbrn3D9p1kXtuvaIS0pwZGa2waCbhuyQ7OCSj67E6vXMn2XTpOamXPtn8B4UkSk7 V5BTlfRWf74nEE0QZoI7gglZKJoZQcJKDJ7orFELLh8JBnaMSXrdZgaKEcECbsmrMvgK 0ZK1Bccs1qKS75zwF4r6YpIoFx6To6M/uAl+HidI2qK7AfCQfDqeKlmRaUWQv58YTePo aas16PJ0jQgjDE/+t4RaVLRNP2CEN9odLzw/KDI3KBkrhm98cWWQQFE3bzew7lB4UP8d 3X7w== 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:cc:content-transfer-encoding; bh=Aym2ADauD/lx83VBnk6zFZEru43LtU4suNGjzpzLi2g=; b=cDjnqcKhHUc4/D2SO0xWIn7IwdbRJyuWT02qZI9e+wdWY8AlQfO/sLxuFzC3hubCzM ednnPbXjPAf6SXDLGrtNS5I2JcIB6BQoX8KfpKSIBTLzDw2HjyhTwR5dAI5WGA4rbkO/ fTIjih/LGGOKHelVFknw++7pKx6y5wDVItiVpmQ+uUmkFu45gYcBjl5XfUovLxkrACXS lisEW6sflYQwBlH6TWASo3tHQQDyDdvw8/B/eu9WjKl48KtHmnhYqk8j/SEPI8WDcTvG nA2hfl3yDt5sIndKP11V7AcL416GO/V+2Z0hdyGMoxDDMSSqJx/eqLbWCnSogSjS6YUE eQHA== X-Gm-Message-State: AOAM530b0TPgB9Cw03UnJq90VpxSMF5wn29azYhV8DZmL6YMInQd601Q v8OinhVfsNh2VvH0JSEt7LHWhQ8/SJVk5DjQhkQ= X-Google-Smtp-Source: ABdhPJxRb1blaqotSB+KL6fvCPNEiaM7Yd++2XxCWI5yst1++kcC7CM/mPyxNjm05/wcAwDAlPVwaBPJ76Eosgjua6Q= X-Received: by 2002:a9f:2636:: with SMTP id 51mr13249607uag.41.1591521019676; Sun, 07 Jun 2020 02:10:19 -0700 (PDT) MIME-Version: 1.0 References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> In-Reply-To: From: Yuri Khan Date: Sun, 7 Jun 2020 16:10:08 +0700 Message-ID: Subject: Re: "Why is emacs so square?" To: Juri Linkov Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::92f; envelope-from=yurivkhan@gmail.com; helo=mail-ua1-x92f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:10:23 -0000 On Sun, 7 Jun 2020 at 14:51, Yuri Khan wrote: > > On Sun, 7 Jun 2020 at 06:55, Juri Linkov wrote: > > > BTW, why browse-url.el still doesn't support the Brave web browser? > > Brave solved the problem of malware. It's one of the most secure > > and privacy-respecting web browsers. Unless someone presents a reason > > not to do this, I'm going to add Brave support to browse-url.el. > > But it=E2=80=99s not free software. Or is it, huh.[^1] For some reason, the FAQ on the main site[^2] has the question =E2=80=9CIs Brave free?=E2=80=9D, and the answer only talks ab= out free-as-in-beer. To find out about the free-as-in-freedom aspect, you have to notice the Github link in the footer. [^1]: https://github.com/brave/brave-browser/blob/master/LICENSE [^2]: https://brave.com/ From MAILER-DAEMON Sun Jun 07 05:14:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrNo-0001Xj-Kn for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:14:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrNm-0001XK-Pv for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:14:22 -0400 Received: from mail-ed1-x543.google.com ([2a00:1450:4864:20::543]:41316) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhrNm-0002Rh-2W for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:14:22 -0400 Received: by mail-ed1-x543.google.com with SMTP id m32so5714789ede.8 for ; Sun, 07 Jun 2020 02:14:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=kz29cip8dEZjCNSggifLZ8CNCg44tqMfOE8Mj5yCzss=; b=EjnUSWpWpI5j24rO9eCYZgN8citdOP51v8lJnbZ/UbkUs+Y0Zot2Pu2XCbgftPBK0e 7lhvbq0Qfq2FfmbVEyhmReXJFNPVUtljeA5lsIZ8+olGSxCFF8j0ysaG3d7FKaqP4C1/ 0lM1smJb8gAhkqoHSm2Vy4Qi3jUevlD1v/hR0Gs//eHSXVfvYGRAWWYmrl3fDCxXAc3a okITYvGxfAqtsSG8smdh0IUdAuFsccrOGVS+SlHxNzVilctBqdDKPBuMJ/Y+xSxkl4Nf Mxa9qMrYARcwCsbhs4bGHqZbUSooLsk7CTleiCLq3eTE8ZJHJJSDqJQ18RdEi30/Oa5+ 1I/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=kz29cip8dEZjCNSggifLZ8CNCg44tqMfOE8Mj5yCzss=; b=hVh+dEVTgr0HQCM3H/wKQmwieS6NxSMCOa6aM+M4EByoEyw5EkrUvboNhz1hAgagjH ppQS7B//12tsqK5m7EooMSU/EWx33BOT+x2jduLj+TPkqZ7Uji+AVhCS80DIGRVh5NSX 5Ssroju91WVqlCpOwvFBpgMM6U6CYKafUO+ffgzGoAoWbYo9Wew39pKoYwSWwJOL1MLb Lg0VramguhWOdP+m9XA8l7A5dBwnO0Y3K8ddk491P5eoAlf+R4radAC3FAT3gAt8wusM v0bbxUWM+l7gM8qxgEgsO/NmttGuKikdrp232xZX+faqfT0Dz8iRfZxwe/bFjDBWnOQv J4aQ== X-Gm-Message-State: AOAM532NoszW6c+2efokCTG3jhBxIb772VJeZcjaUeEaPgOCQVsy6tsf OVI5vDOGxUd93quJ4fC4o0pvl+u/6PU= X-Google-Smtp-Source: ABdhPJwvy6Ij6q1aS/N1tGfx0uFv8pk869YsAk3GSBUrKuZKykndHFTb3AaAOvPsDWUNgEQNI82sMA== X-Received: by 2002:a50:a8a2:: with SMTP id k31mr16598131edc.357.1591521259725; Sun, 07 Jun 2020 02:14:19 -0700 (PDT) Received: from chametz (lumumba.torservers.net. [77.247.181.163]) by smtp.gmail.com with ESMTPSA id v7sm9104168edq.82.2020.06.07.02.14.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 02:14:19 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: Stefan Monnier , Drew Adams , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> <31332591-f540-de69-26a8-03c0d8dd2c9d@cs.ucla.edu> Date: Sun, 07 Jun 2020 09:14:06 +0000 In-Reply-To: <31332591-f540-de69-26a8-03c0d8dd2c9d@cs.ucla.edu> (Paul Eggert's message of "Sat, 6 Jun 2020 12:49:50 -0700") Message-ID: <87h7vnxmox.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::543; envelope-from=pipcet@gmail.com; helo=mail-ed1-x543.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: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 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, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:14:23 -0000 Paul Eggert writes: >> consider quasi-quoted literals: would those be immutable? > > A string literal should not be modified, regardless of whether it's > quasiquoted. > > A subexpression of `X that contains no substitutions or splices yields conses > that should not be modified. > > These two rules are reasonably simple and are already documented, and neither > rule should be that hard to remember for the few people whose code is affected > by this issue. Okay. It's a situation I was unsure about myself, but if these are the rules, they are easy enough to remember. >> It would lead to some people developing a false sense of security > > "False sense" because programmers would start relying on Emacs to > catch trivial > mistakes involving modifying string literals? Horrors! (Programmers should let > those mistakes persist into hard-to-debug complex programs, as this will give > them much more of a challenge when debugging. :-) I'm not sure programmers would realize those errors are caught only at run time, rather than being detected at compile time, which they could be in many cases. From MAILER-DAEMON Sun Jun 07 05:18:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrRz-0003NS-49 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:18:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36654) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrRx-0003NH-CA for Emacs-devel@gnu.org; Sun, 07 Jun 2020 05:18:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49631) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhrRx-0003CT-1f; Sun, 07 Jun 2020 05:18:41 -0400 Received: from [185.165.34.104] (port=23688 helo=guerry) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jhrRp-0005NU-E5; Sun, 07 Jun 2020 05:18:33 -0400 Received: by guerry (Postfix, from userid 1000) id 654451A60829; Sun, 7 Jun 2020 11:18:31 +0200 (CEST) From: Bastien To: Eli Zaretskii Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org Subject: Re: GNU ELPA package discoverability Organization: GNU References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <875zcas71l.fsf@gnu.org> <83k10pcrjv.fsf@gnu.org> <87d06g385p.fsf@bzg.fr> <835zc4abdj.fsf@gnu.org> Date: Sun, 07 Jun 2020 11:18:31 +0200 Message-ID: <87sgf7w7x4.fsf@bzg.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:18:41 -0000 Eli Zaretskii writes: >> > I think "Install Add-On Packages" is better. >> >> Add-On and Packages sound a bit redundant to me, but it's okay. > > I don't think this will be redundant to newbies. It also isn't > necessarily redundant in general, since "packages" exist in the core > as well. E.g., "C-h p" finds "packages". Okay. >> My motivation while pushing for a change here is to make it easier >> for users to customize package-archives, something I've seen asked >> very often. > > My question was what will this menu item lead to. IOW, what command > will it invoke, and what UI will that command present to users? My initial idea was for this item to invoke a command like (lambda () (interactive) (customize-variable 'package-archives)) but you said that variable customization was not okay in a menu. So my other suggestion is to move the Help item "Finding extra packages" into this menu. This would be: Tools Install Add-On Packages List available packages (aka M-x list-packages RET) Find extra packages (aka C-h C-e) And I'd also move "Search built-in packages" there: Tools Install Add-On Packages List available packages (aka M-x list-packages RET) Find extra packages (aka C-h C-e) Search built-in packages (aka C-h p) WDYT? -- Bastien From MAILER-DAEMON Sun Jun 07 05:21:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrUj-0004Xo-Hy for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:21:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36892) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrUh-0004Xa-LX for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:21:31 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:41612) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhrUg-0003n4-Oh for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:21:31 -0400 Received: by mail-wr1-x42f.google.com with SMTP id j10so14197968wrw.8 for ; Sun, 07 Jun 2020 02:21:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=t412kdtkcRAqY5pLLg1VsMdAWUFRCHCD6azOwp0AIpA=; b=gG0FOB1apZcklmYaCtmaVqdi5jvjF/yKuAORY2LxJpU+ncLaJe+ynw50BLQ5Wx7YBR OIvGaM5Dp9xcOkSA5gxhnyprOp17Vj08+IoVro1DF9tkUCPBx+saaDYevedmR/ySoyNW KD3e+Ciw36mREqyTzyvRLhA9kyfaomR+SjGSC5O+JA88TO6VdDm5Lyb6ya+BKY5KHMwR IES2boqLFJUSRHlqEwjcfmRwXGhOvoEW3sI53izh5okrdOko3vTEe3rd51POpzqGN+VV iaQxEn2Bg3o7yiIOJkMPbXeM/eYwi7AAlI0jHeNFaetLKZTRYeKaqXmHIAZ9UzOEtJXl DUlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=t412kdtkcRAqY5pLLg1VsMdAWUFRCHCD6azOwp0AIpA=; b=ld48qkrrsWGXrlfWKAxwevZXM95w0bdKriIBzNLETxQ0DxSIVpi40mE56bLBLoRYfn nc5oeWnMysgwZ9d6m+FnVvFrkOR5Bu3knszXMz1KbXv6253sA7THZqgeghtWhxJe1ZAK u41VSmsimvqeX9V3146jp7m5NegHFS55mlQtfi61iso1YfeLpzS/k4MTDdhVvxdn/LcL MHYKnI+X9337D96y33lE6yP2zLxB1/NlEyF6ypceTmNT+FnxKQ1nymmcz56QvRhsendw ur9/rMHx1G/AxWB38RxloBHoIjLoQHEuMyQZswv1DCvwder7rAK35zR+z/j24g/glSGG /0uw== X-Gm-Message-State: AOAM533o6XEiau5e6YQt/utzMM3KUmXoMKqXItb0duPRiywEw4QQcV3r kGfB+j/M2ffz8UB4WW4Kwht7Q/bCl5k= X-Google-Smtp-Source: ABdhPJzDLcASaspvqabnKTxBg7l8E0iigj/D1VEhGOcu4+3I96lDw+JzLQ3fdPCi1gseaaxb8B7r2w== X-Received: by 2002:a5d:4490:: with SMTP id j16mr19582115wrq.276.1591521688918; Sun, 07 Jun 2020 02:21:28 -0700 (PDT) Received: from chametz ([51.158.111.157]) by smtp.gmail.com with ESMTPSA id l17sm19549853wrq.17.2020.06.07.02.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 02:21:28 -0700 (PDT) From: Pip Cet To: Paul Eggert Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> <87lfl0x9qi.fsf@gmail.com> <785d730e-23b2-dcad-105c-80ac5074b5dc@cs.ucla.edu> Date: Sun, 07 Jun 2020 09:21:17 +0000 In-Reply-To: <785d730e-23b2-dcad-105c-80ac5074b5dc@cs.ucla.edu> (Paul Eggert's message of "Sat, 6 Jun 2020 13:15:35 -0700") Message-ID: <87d06bxmcy.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=pipcet@gmail.com; helo=mail-wr1-x42f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:21:31 -0000 Paul Eggert writes: > On 6/6/20 12:41 PM, Pip Cet wrote: > >> What I'm fighting against is a certain model of >> immutability being installed into the Emacs source tree and effectively >> preventing better ones from ever having a chance, as well as turning out >> to be, as the vast majority of such models have, a problem rather than a >> useful feature. > > I'm quite conscious of those dangers. What I had in mind was something > far more > limited: just supporting runtime checking of attempts to modify strings that > either have undefined behavior if you mutate them now, or are close enough to > that category so that nobody will care about the difference (except to > be happy > when Emacs catches unlikely glitches in their programs). Okay, I'm looking forward to that proposal, and sorry for criticizing it before I'd understood it clearly. >> if we want that C API to be flexible enough to allow unusual >> applications (and isn't that what Emacs is all about?), it needs >> something more than just the obvious CHECK_MUTABLE (obj) macro. > > It sounds like you're thinking ahead to the non-string case. I am. > I'm > limiting myself > just to strings for now, as they're the most salient part of the problem (core > dumps and all). The core dumps definitely need to be fixed. I still don't understand precisely how far you're planning to go in protecting an immutable string's text properties, but you've convinced me that it's a win in practice even if we just protect the characters. > It should be OK to do that, and put off the > more-general issues > until later (if we ever do that at all). So this would be only strings, not cons cells? That makes sense to me. > The obvious check_string_mutable function doesn't need to be used very often: > only in the places where CHECK_IMPURE is used on strings now. The only other > primitive I've found the need for at the C level is freeze_string (to mark an > already-constructed string as being a constant). Just to be clear: there's no way to unfreeze a string, right? Because that would add considerable complexity and not be worth it, IMHO. From MAILER-DAEMON Sun Jun 07 05:28:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrb5-0006e8-6n for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:28:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrb3-0006dy-Bq for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:28:05 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:33544) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jhrb1-0004ks-RR; Sun, 07 Jun 2020 05:28:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date; bh=q0q3Fbr3R1OMg9zezD6NKoZoGZ5HlJ6BOtGPrSrCUNk=; b=hTDu3NzaHw/feooPhWfWpqNT+hCoJWoAZbuL7gWrWfR8sMjqLm/301723yLDCsfIju4Q16HLQi3XJoAHBMyI/+gOwTp7/CT4kGTRxjwAzHujGmQK5TZQJBG2m97d4DXmU3AyM6T2/o53is6Y9Io64HJEZ3vH9wQeESFq6w9t2l41c3mImm8w9/vzMvvH/oJyvokjTXG1PHga7mPLoW25n3kTQp/aXeWDjaL0yYz9w76DUuCP8hINnwE0iTcfd4mg7RQztDOR/ePwieDn7urr0rIBc+MjwMtJSce5IkVKGgTGK9lrnnOn+TO/NpIR/OhE4QeLXXqC0s4S+qzS09Eg7w==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jhraz-0004ba-60; Sun, 07 Jun 2020 11:28:01 +0200 Date: Sun, 7 Jun 2020 11:28:01 +0200 From: tomas@tuxteam.de To: Richard Stallman Cc: emacs-devel@gnu.org Subject: Re: collaborative editing Message-ID: <20200607092801.GB15198@tuxteam.de> References: <874krvup4i.fsf@gnu.org> <835zcag76g.fsf@gnu.org> <87ftbenz0p.fsf@gnu.org> <83wo4k8r9s.fsf@gnu.org> <20200606101834.GC28645@tuxteam.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="eJnRUKwClWJh1Khz" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 05:28:01 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:28:05 -0000 --eJnRUKwClWJh1Khz Content-Type: text/plain; charset=utf-8 Content-Disposition: inline On Sat, Jun 06, 2020 at 11:36:35PM -0400, Richard Stallman wrote: [...] > I've changed it to try to separate this question from others. Good idea, thanks! > I have not done shared editing over the network, but lots of people do > it -- in Etherpad and in Google Docs -- and it is clear that they > find it useful. How about if we take for granted it is useful > and skip the debate about that point? I didn't take the debate as being about /whether/ it is useful, but rather about /in which way/ it may be useful: from that angle, I think the debate itself is useful, as it may help to guide us shaping this feature. Myself, I'll give Rudel a try and look into the TLS point Stefan made, as a result of this debate. Cheers -- t --eJnRUKwClWJh1Khz Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7csyEACgkQBcgs9XrR2kYwwwCfdCuZzLQc0Xb2pJCn7xLdyRqL FZkAnih1Vf7imBBtFgMm4UJ+vxT31S5m =ePRJ -----END PGP SIGNATURE----- --eJnRUKwClWJh1Khz-- From MAILER-DAEMON Sun Jun 07 05:32:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhrfL-00084o-N5 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:32:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhrfJ-00084f-Nm for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:32:29 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:46296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhrfI-0005DJ-OM for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:32:29 -0400 Received: by mail-wr1-x429.google.com with SMTP id x6so14159923wrm.13 for ; Sun, 07 Jun 2020 02:32:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=BGEd6rr4VV0x9jwp9jYZkCcBpoqK+Dsa5PA3WL+mZtA=; b=NpvMCyx8ifBF5nP677U6cXAmli4ZxsnJEKKGsryPY3u7zFYksmHy9tnnQbbUZf8uPs ujkt8Hl7CFblkYgUq5FY34eRozPidAFrfP70L/2qZ9SdS4R4wBd/6kKkLhLZ5zP6vjq7 g+x4JBtT9v0KZe92yUd4OYA6Ai6TBjlszkB+k5DRZ1xAdT9N4ZOOeRFjFHLTMbg2RblX CteABYFATG/SZHiDIbifVMK/kceujNy7J3HEgNdv05cJzYHmd/5nkHxclhcKof8jwUXk Mtzy9PapCaS7chrpmhaRE9XdnK+Er1oSIAFKWrkkZSknjiT1H2woEYQWK+BVj5ksVa6I AsvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=BGEd6rr4VV0x9jwp9jYZkCcBpoqK+Dsa5PA3WL+mZtA=; b=MsVk984/SjEz+r1Ex7lWj15Igiw9WYBOkEf+iH9zrXg/Eu0+BjTqz/xu+dL5telmCY XP1vDf8SuZPNE6wICcsrUmCQTZJG3B/W7M89NSp8syyMp9o4Vh7OSPGJywKMk7s88qoo AYXGLZbiwfObqB6iLYV4uFwXfcqWLcrKcMMFQD+6IBaoid4Ks+UZ6BJmh18fvXeQ90uI ag5H1EGUklGwoBsoyrYlH01l4JI0nHv3i3L4AGtxqq4sjYkkJGddnHxfipk8UWbcL6jM 50F3jku9dyHjh0Qa6VelrPrZBe0IYVLDn0z2BrwJeT78U3oWaw1Mv/z0L99VQIUcIxP+ f2hQ== X-Gm-Message-State: AOAM530ZZRtu4vJ13lAqtf99Z2ymfBH6VSVYmdh6b8EHvyIMjgO/T2S0 VkMMiavOuX6+/yYSfys5kC76WQ/WAIk= X-Google-Smtp-Source: ABdhPJx6lGrpHCjQHuKDhutB283fA6M6vwRR01ATamP8yWvaw3cP7sE9Mow4ck62cDsOWSvlSkN4Fw== X-Received: by 2002:a5d:4490:: with SMTP id j16mr19616552wrq.276.1591522346994; Sun, 07 Jun 2020 02:32:26 -0700 (PDT) Received: from chametz ([185.220.101.213]) by smtp.gmail.com with ESMTPSA id g18sm18743702wme.17.2020.06.07.02.32.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 02:32:26 -0700 (PDT) From: Pip Cet To: Stefan Monnier Cc: Drew Adams , Paul Eggert , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> Date: Sun, 07 Jun 2020 09:31:58 +0000 In-Reply-To: (Stefan Monnier's message of "Sat, 06 Jun 2020 18:14:29 -0400") Message-ID: <878sgzxlv5.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=pipcet@gmail.com; helo=mail-wr1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:32:30 -0000 Stefan Monnier writes: >> If I expect a function to look at a string argument, but it actually >> modifies its argument, that's equally confusing. > > I hate mutability, yes. But mutability of literals amounts to > self-modifying code, which is yet a bit more evil. And, just once in a while, so very useful :-) You're right, though, mutability of literals is a more serious concern than mutability in general. >> If I modify data that's been used in a hash key, that's even more >> confusing. If I modify data in an image spec in a Lisp callback from >> the image backend, Emacs will crash. These cases deserve being >> thought about, too. > > We agree, but I'm not sure what it is you're suggesting we should do. Mostly: don't make it harder to experiment with mutability by pretending we already have anything like it. > We obviously can't make existing data types unilaterally immutable since > it would break way too much code. Are you suggesting we add new > constructors for "immutable cons", "immutable string", ...? > Or a `set-immutable` function? Not at this point, no. I can describe the code I'm playing with, but it's quite different and I'm not sure it's worth the considerable performance cost... >> The cost of this isn't negligible; the single bit which I expect will be >> kept for every string, cons cell, or vector isn't that significant, but >> so far what's been proposed would be complicated to implement, explain, >> and use. > > I'm not exactly sure what has been suggested, to be honest. > Are you referring to the idea of making literal strings immutable? > I'm not sure what is the implementation plan for such a thing. > It seems at least not completely straightforward. I think the issue has been resolved: if I understand correctly, Paul is probably going to propose an actual patch which makes strings immutable, and we can discuss it then. >> It would lead to some people developing a false sense of security and >> others becoming insecure and copying everything needlessly (and >> dangerously, for cyclic objects). And it would effectively prevent any >> competing system of mutability, I fear. > > That makes me think there's been a fairly concrete proposal that has > been made and which I missed (since otherwise, it seems unclear how > you'd get to these conclusions). Can someone point me to it? You're right, we should wait for such a proposal. From MAILER-DAEMON Sun Jun 07 05:58:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhs40-0006lH-FE for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 05:58:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38796) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhs3x-0006l6-3W for emacs-devel@gnu.org; Sun, 07 Jun 2020 05:57:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49844) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhs3w-00015z-Ac; Sun, 07 Jun 2020 05:57:56 -0400 Received: from [176.12.219.100] (port=54221 helo=[10.162.26.155]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jhs3u-0004eh-Vq; Sun, 07 Jun 2020 05:57:55 -0400 Date: Sun, 07 Jun 2020 12:57:51 +0300 User-Agent: K-9 Mail for Android In-Reply-To: <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: pop-to-buffer / switch-to-buffer-other-window To: emacs-devel@gnu.org, Jean-Christophe Helary From: Eli Zaretskii Message-ID: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 09:57:57 -0000 On June 7, 2020 9:55:12 AM GMT+03:00, Jean-Christophe Helary wrote: >=20 >=20 > > On Jun 7, 2020, at 15:18, Eli Zaretskii wrote: > >=20 > > Please see "Splitting Windows" in the ELisp manual, it describes how > Emacs decides whether to split vertically or horizontally=2E >=20 > Do you mean this: >=20 > split-window &optional window size *side* pixelwise >=20 > It just says that the side argument affects the function, not what in > pop-to-buffer causes that argument to be set=2E And I don't find any > reference to splitting in pop-to-buffer for that matter=2E Thrn I guess you should read "Choosing Window Options"=2E My point is tha= t this is described in the manual=2E From MAILER-DAEMON Sun Jun 07 06:16:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhsMM-0002UN-Ig for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 06:16:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhsMK-0002UC-MC for emacs-devel@gnu.org; Sun, 07 Jun 2020 06:16:56 -0400 Received: from logand.com ([37.48.87.44]:35226) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhsMJ-0004Cr-LZ; Sun, 07 Jun 2020 06:16:56 -0400 Received: by logand.com (Postfix, from userid 1001) id 708291ACD9A; Sun, 7 Jun 2020 12:16:53 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Jean-Christophe Helary , Juri Linkov Cc: Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Date: Sun, 07 Jun 2020 12:16:49 +0200 Message-ID: <87lfkzch9q.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 06:16:53 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 10:16:56 -0000 Jean-Christophe Helary writes: >> On Jun 7, 2020, at 8:30, Juri Linkov wrote: >> >>>> Maybe chromium-browser --print-to-pdf=doc.pdf --headless --disable-gpu >>>> --run-all-compositor-stages-before-draw --no-margins doc.html >>>> or using its wrapper chromehtml2pdf. >>> >>> there are alternatives which don't require malware: >> >> BTW, why browse-url.el still doesn't support the Brave web browser? >> Brave solved the problem of malware. It's one of the most secure >> and privacy-respecting web browsers. Unless someone presents a reason >> not to do this, I'm going to add Brave support to browse-url.el. > > A piece of software that actively promotes cryptocurrency use is a > scam. agree - cryptocurency burns the world - investors behind the brave browser seem questionable for example, today surfaced how the brave browser is hijacking links it seems to be malware with good marketing to fool people From MAILER-DAEMON Sun Jun 07 06:59:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jht1T-0000cF-Ak for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 06:59:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhqXf-0008AI-Ah for emacs-devel@gnu.org; Sun, 07 Jun 2020 04:20:31 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:35044) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhqXe-0001hq-EK for emacs-devel@gnu.org; Sun, 07 Jun 2020 04:20:30 -0400 Received: by mail-wm1-x32f.google.com with SMTP id q25so13393696wmj.0 for ; Sun, 07 Jun 2020 01:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=PFQK+H3SXgNjtT6Z6dqiWkZgGPwN/0v3ciOARmNAUHs=; b=ODY2zz8MPEnSW7nkhcGNAZ/MomnG4CMl1ZEeSE0waEPQaU+9iQ1tYu7rkVNY1Hwz1L T0sLSYQbIOlhZZ6kjV1Eqx4laN9WA+vWvAzRK25b2X0VSQMVc5ZkAvg9s5DT0fZwkNXN eexY3uTRqT+MChnsaXytYnSwpc1Ls7uakSVMrizbgZZHPNvOV9ADD3MnZGNl3gci/igQ hKohCdqWrRKOU42Jw+McXDJq9BEXfBAB9KSzHp+HqymS+UmX7n00sFduP3lxnVEYWWIf SENMEByALgU1Mi01TvGmSdfUBnsrgLOVuy7cf625MYufIf/4/BpM2D3DOgCCMzqq0RaS Bubg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=PFQK+H3SXgNjtT6Z6dqiWkZgGPwN/0v3ciOARmNAUHs=; b=KfWknVfC+4ONOe+tJhP65Fq+CcC6jc2bp9+m7cClls6HAqLkrtotjmOmiMQhVa6vvG czIyVnbtJvVUOarzHTd1gPdMG8Dx2mziCqAyGJZSVcDxrdVTI2Np82NleEndpIqHwlA3 80hfiZgDhx+sdfka2wt6fIzo2iuC6+bURld1L0sMKDFCeZXe2QU2kkEJ35OVb++xtP6a xc5Uq7OzoB4Ra6m0t3rNXQBhjFq/hQFtJQE6cs3ricIjI2908s28Gq4iCMefO+IKl39Q t6BR+huL2hWhTwTUJNqte2q+VHx6+iX61jd12f08LCbt1x5m9xRhmzvTENcJfg6lqI88 T9rw== X-Gm-Message-State: AOAM531wvoMTPRRUkZ2L43XGvAIDp6HDGaM5WkuJMbBKkHrbPg6Ll5sA kwXXJbjbfSZEJHaZhvH9oj+3Nofb8Zg= X-Google-Smtp-Source: ABdhPJxkzF61ljnTa05/SA1fHnPl3WQblwUu06qbNvRayp28tKNMoLECFl0URuJpI3gntbwqPrBiJw== X-Received: by 2002:a1c:66d5:: with SMTP id a204mr10644298wmc.134.1591518027865; Sun, 07 Jun 2020 01:20:27 -0700 (PDT) Received: from localhost (host86-128-12-16.range86-128.btcentralplus.com. [86.128.12.16]) by smtp.gmail.com with ESMTPSA id y37sm22367913wrd.55.2020.06.07.01.20.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 01:20:27 -0700 (PDT) From: Andrew Burgess To: emacs-devel@gnu.org Cc: Andrew Burgess Subject: [PATCH] Use deactivate-mark from cua-cancel Date: Sun, 7 Jun 2020 09:20:19 +0100 Message-Id: <20200607082019.255681-1-andrew.burgess@embecosm.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=andrew.burgess@embecosm.com; helo=mail-wm1-x32f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Sun, 07 Jun 2020 06:59:25 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 08:20:31 -0000 Create a config file ~/tmp/setup.el containing: (defun cursor-activate-mark () (setq cursor-type 'bar)) (add-hook 'activate-mark-hook 'cursor-activate-mark) (defun cursor-deactivate-mark () (setq cursor-type 'box)) (add-hook 'deactivate-mark-hook 'cursor-deactivate-mark) Start emacs like this: emacs -Q -l ~/tmp/setup.el ~/tmp/setup.el Now do the following: M-x set-mark-command M-x forward-paragraph C-g You should see that after `set-mark-command` the cursor changes from box to bar, then after the C-g (`keyboard-quit`) the cursor changes back to box. Now do: M-x cua-selection-mode M-x set-mark-command M-x forward-paragraph C-g In this case the cursor should still change from box to bar when the mark is set, but after the C-g the cursor will be left as a bar. The reason is that with `cua-selection-mode` enabled, C-g now calls `cua-cancel` instead of `keyboard-quit`. Currently `cua-cancel` looks like this: (defun cua-cancel () "Cancel the active region, rectangle, or global mark." (interactive) (setq mark-active nil) (if (fboundp 'cua--cancel-rectangle) (cua--cancel-rectangle))) It is the line: (setq mark-active nil) that is problematic, setting `mark-active` directly avoids the `deactivate-mark-hook`. I think that instead we should be calling `deactivate-mark`, and this is what this patch does. * lisp/emulation/cua-base.el (cua-cancel): Use deactivate-mark instead of setting mark-active directly. --- lisp/emulation/cua-base.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index 26a1a8955f..c4dcb76446 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -860,7 +860,7 @@ With numeric prefix arg, copy to register 0-9 instead." (defun cua-cancel () "Cancel the active region, rectangle, or global mark." (interactive) - (setq mark-active nil) + (deactivate-mark) (if (fboundp 'cua--cancel-rectangle) (cua--cancel-rectangle))) -- 2.25.4 From MAILER-DAEMON Sun Jun 07 07:21:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhtMT-0005uF-Lv for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 07:21:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43774) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhtMR-0005tE-Ov for emacs-devel@gnu.org; Sun, 07 Jun 2020 07:21:07 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:40175) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhtMQ-0005jX-8a; Sun, 07 Jun 2020 07:21:07 -0400 X-Originating-IP: 111.89.103.91 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 6AE281C0003; Sun, 7 Jun 2020 11:21:00 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: pop-to-buffer / switch-to-buffer-other-window From: Jean-Christophe Helary In-Reply-To: Date: Sun, 7 Jun 2020 20:20:56 +0900 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <4282B5A5-C5B0-4973-A254-8019872C125F@traduction-libre.org> References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.197; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay5-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 07:21:02 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 11:21:08 -0000 > On Jun 7, 2020, at 18:57, Eli Zaretskii wrote: >=20 > On June 7, 2020 9:55:12 AM GMT+03:00, Jean-Christophe Helary = wrote: >>=20 >>=20 >>> On Jun 7, 2020, at 15:18, Eli Zaretskii wrote: >>>=20 >>> Please see "Splitting Windows" in the ELisp manual, it describes how >> Emacs decides whether to split vertically or horizontally. >>=20 >> Do you mean this: >>=20 >> split-window &optional window size *side* pixelwise >>=20 >> It just says that the side argument affects the function, not what in >> pop-to-buffer causes that argument to be set. And I don't find any >> reference to splitting in pop-to-buffer for that matter. >=20 > Thrn I guess you should read "Choosing Window Options". My point is = that this is described in the manual. Interesting. There is this 'split-window-sensibly function that tries to = adapt to the display. But the impression I get from reading the manuals is that there is a = general preference for vertical splitting. The issue with is that with rectangular displays and considering that = most documents have a given reasonable width, choosing to split the main = window vertically is rarely the best solution in terms of screen space = use. I'll try to be more careful and see in which case I see unpleasant = behavior and see if I can do this about it. Thank you. --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sun Jun 07 07:59:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhtxI-00075Q-Sc for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 07:59:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhtxG-00074g-8u for emacs-devel@gnu.org; Sun, 07 Jun 2020 07:59:10 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:44553) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhtxF-00040P-A1; Sun, 07 Jun 2020 07:59:09 -0400 Received: by mail-wr1-x432.google.com with SMTP id y17so14392748wrn.11; Sun, 07 Jun 2020 04:59:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bIYyQwpEurPw0KW06To3ei2E5QU2KbTaPa3vvXVtnJE=; b=eM5uRp/HVwtNntZAzvfeEL5DMRKMgSSResV/uo+k/ZQHdBLnB2sewbljGnW82wmx2f wSpPTakjGgvOVjuORPMNbFoYgxlpIYN2+u7sURVzmLQrFUObFoqoz+B2bBLThcAswqPN M1CHJ+KvFON8kvtEL2kyG/rvGCN8AH2g+z2XME/NnSdr1JeI+YUUGyYwsu4rSriS0khB VlFkZm6wtqb03/v0dOGIhbT8rfUx4eI9yamaSByYHuiPZsQQXdmSJ664Gp3Ed2pTSeMt 23pRs+kQNXSzNu1Z6OG48JSU+djLmvhGtitsyFOx7haou0EiQzCm1r+TuFwPSfxqs3kC FApA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bIYyQwpEurPw0KW06To3ei2E5QU2KbTaPa3vvXVtnJE=; b=ZHZe9w32GKnPfHOh+KQnyZIH123bewJTl+50II+pgfnj2nlEp7aiXQjU4nxmnXlZkg kBzVMhOiwiYpTNPxm8tdQWBm2to4LYozaZ0K9UkawY3Nre3A52rbh5iHqwfk6OgQtb7s oyXqPeIBTKXXeszuNDjh35kWACjosRoWHRIuA+PfOvjYdkhaULmGLK5KmufXCrLQfGsq 3eYNcwSiBtNityglUnq+SaQ2eHJIkY6Z9S2eEGU+QA9zCZVZIqVegReQwCxkTKZC1m6M vo55NOo9OOrXajqH8cdRjeONvyvkga073b7lqjc2ATVVZbnln+3+pi1zOkw9wNnT7+G5 /7HA== X-Gm-Message-State: AOAM530XnE/CUQ/iHU48+76WbkjrWA0OELRz+SLM8wm2z+F24J7l4ybv 2ZpZ6Eqe7rLKxBcGXQyRWXJpXC6a X-Google-Smtp-Source: ABdhPJyCuLbkiH1CrCv0OMRWMBH6XDY0u9mW4CJ32ry0HB1LNGoKAVm/f3lr2Tn7R88LKh78K/1N6Q== X-Received: by 2002:adf:9507:: with SMTP id 7mr18439328wrs.63.1591531146971; Sun, 07 Jun 2020 04:59:06 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id k17sm18266102wmj.15.2020.06.07.04.59.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 07 Jun 2020 04:59:05 -0700 (PDT) Sender: DG Subject: Re: "Why is emacs so square?" To: Juri Linkov , Tomas Hlavaty Cc: Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <60515aaa-0d1e-598a-985d-850265c664ae@yandex.ru> Date: Sun, 7 Jun 2020 14:59:04 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=raaahh@gmail.com; helo=mail-wr1-x432.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: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 11:59:10 -0000 On 07.06.2020 02:30, Juri Linkov wrote: > BTW, why browse-url.el still doesn't support the Brave web browser? > Brave solved the problem of malware. It's one of the most secure > and privacy-respecting web browsers. Not so sure about that: https://news.ycombinator.com/item?id=23442027 From MAILER-DAEMON Sun Jun 07 08:10:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhu8g-0001wh-Bd for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 08:10:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhu8f-0001wX-HU for emacs-devel@gnu.org; Sun, 07 Jun 2020 08:10:57 -0400 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]:42303) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhu8e-0006H9-LY; Sun, 07 Jun 2020 08:10:57 -0400 Received: by mail-lj1-x233.google.com with SMTP id y11so15400149ljm.9; Sun, 07 Jun 2020 05:10:55 -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 :cc; bh=JXtKmFQtez/CW7nnripZ6+EwLwVnwigoWpBKAg58gsA=; b=rgV8Ul9Ua1221jjPbU4+KBWucArP07ayDnnERBiNq/MjUf4FW+zsyfOPcdWdgxsDoO RaYAwKqvgGVWze1IL5zapBDSGzp4mJgUKbRtrRkAeBcJ2AUpC63U9G+d/zRim8YEaFqk AXaxUzeYGWXipbuj9cpoQHPBb9UvFlxj42GgkWsq9aItMwutDHoBUz+hYV272m9uy4ww V6+hvb78bQFXh3SAuaVAtydcVCAfGHcRjnYVMujkuhkd/WiwIr9NHXUFPgXzZpCK6FDH HfCNMRzhuDw15th/7PVMRF9Vk+PJ2IPB1/FhNT/9igZLaIhfdi1IngQ2gES7/nierTDB GgVQ== 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:cc; bh=JXtKmFQtez/CW7nnripZ6+EwLwVnwigoWpBKAg58gsA=; b=Jn6LgJeqdTc4JxmX8og4+vZBPoaMAkckiI4x0BgkVtbSn8spwNky4/JHyqxHXRpmmr opaLiIZxnNiMV/6oVBW363HasCoJjC852av5tOWQicszECr+k4A0Cm3sIz3izzNT8SRK EMheVTkPnEYUFvpXFAIA6DwmnLFfkGqsgr730QTwUXWrOtG6tjB2qM1hP7nRk9rlrEwh Wp6dNZwkK+hdsfxK/nj0nzyetJO48hjZ0N/F9O5MMO0HsXPofGTVpFyLuKJB5sCD9wqe HqCkfnKLc/hk5T/OBIoJdhG6/jGSbnQJUVW2kRZahzTWvtJTwk68hik3LnXKvUzxg/5f hUTw== X-Gm-Message-State: AOAM533K2BAL9V56tCuuP3JkYxJfKATCo8X01Ax30c9JWj/9E5fov/1i T+Oi14N8dDJGiIbiSgfPNfB7uHdZNciBErP089yPEmc9 X-Google-Smtp-Source: ABdhPJyG0DHlh0+WKsXWbhtS+Vd+PXFUHJZHH1dXEGHGr8pIOG2jyhehXDNWtt0/6ebsF6TbIGV9NgwqDk3qjDFFSTY= X-Received: by 2002:a2e:a495:: with SMTP id h21mr9079482lji.436.1591531853517; Sun, 07 Jun 2020 05:10:53 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Philippe Vaucher Date: Sun, 7 Jun 2020 14:10:27 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: Richard Stallman Cc: Emacs developers Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::233; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x233.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 12:10:57 -0000 > > It is like `describe-function` > > (C-h f), but before you get to select a function you have to select a > > "topic" first. The topics are the clickable links at > > https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top. > > Once you select a topic, then you get to select a function but your > > choices are limited to the functions of said topic. > > It is worth a try. Let's see whether users find that helps them > find the information they are looking for. > > To find out whether users find it helpful, we might want to publish it > and ask users to try it. Well it is published, and I asked people to try it out? Or did you mean ELPA? > Here's an idea: make describe-function accept topic names as well as function > names. When the input is a topic name, it would follow up by doing what > you've implemented. If the minibuffer prompt explains this feature, > users might discover it on their own. And it won't require a new command. I see your point but that'd defeat the purpose of the package for me. I'd type "string" and have to figure out which one is a function and which one is a topic. I want less ambiguity, what you suggest adds more. Philippe From MAILER-DAEMON Sun Jun 07 10:21:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhwB9-0000Gj-Hp for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 10:21:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwB7-0000G2-PT for emacs-devel@gnu.org; Sun, 07 Jun 2020 10:21:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52164) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhwB6-0003HC-3B; Sun, 07 Jun 2020 10:21:36 -0400 Received: from [176.228.60.248] (port=3106 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhwB5-000695-AQ; Sun, 07 Jun 2020 10:21:35 -0400 Date: Sun, 07 Jun 2020 17:21:29 +0300 Message-Id: <8336777y8m.fsf@gnu.org> From: Eli Zaretskii To: Tomas Hlavaty Cc: emacs-devel@gnu.org In-Reply-To: <874krns3oo.fsf@logand.com> (message from Tomas Hlavaty on Sun, 07 Jun 2020 10:03:35 +0200) Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> <874krns3oo.fsf@logand.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 14:21:38 -0000 > From: Tomas Hlavaty > Cc: emacs-devel@gnu.org > Date: Sun, 07 Jun 2020 10:03:35 +0200 > > I poked around a bit and it seems that what I did in emacs-pdf > (pdf-buffer function) is similar to what ps-print-buffer function does > in ps-print and ps-mule with ps-multibyte-buffer set to nil. BDF fonts were OK when ps-mule.el and ps-bdf.el were developed, but nowadays I think you will find that many users will object to using bitmapped fonts in printed matter. (There were plans to develop ps-type1.el, but I don't think they materialized.) Caveat emptor. > There is frame-position but no window-position. Is there a way to get > window position in a frame? Is window-edges what you want? > >> For example, I would like to browse OpenStreetMap in Emacs. I wrote > >> a console based OSM browser osmq > >> and web-based OSM browser at > >> . I would prefer an Emacs based map browser. > >> However, I have not figured out how to lay out images in Emacs in a > >> grid and how to detect which image was clicked. A bonus would be, > >> where exactly was clicked. Any ideas what should I look into? > > > > Emacs supports "hot spots" on images for this: a click on an image > > returns information about pixel-resolution offset of the click from > > the image origin. I think that's what you want, although I'm not 100% > > sure. > > Yes. Is there an example how to start with this? I suggest to read "Click Events" and "Accessing Mouse" in the ELisp manual, I think the description there is clear enough to let you write code even without examples. > > We also support displaying slices of images, in case that helps to > > produce a smarter layout of images. > > Great. Is there an example? Likewise here: I suggest to read "Showing Images", where this is described. From MAILER-DAEMON Sun Jun 07 10:33:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhwMQ-0004sZ-0V for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 10:33:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33000) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwMO-0004sS-Qc for emacs-devel@gnu.org; Sun, 07 Jun 2020 10:33:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52419) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhwMN-0005Fg-Mb; Sun, 07 Jun 2020 10:33:15 -0400 Received: from [176.228.60.248] (port=3817 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jhwMM-00069p-BX; Sun, 07 Jun 2020 10:33:14 -0400 Date: Sun, 07 Jun 2020 17:33:10 +0300 Message-Id: <83wo4j6j4p.fsf@gnu.org> From: Eli Zaretskii To: Jean-Christophe Helary Cc: emacs-devel@gnu.org In-Reply-To: <4282B5A5-C5B0-4973-A254-8019872C125F@traduction-libre.org> (message from Jean-Christophe Helary on Sun, 7 Jun 2020 20:20:56 +0900) Subject: Re: pop-to-buffer / switch-to-buffer-other-window References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> <4282B5A5-C5B0-4973-A254-8019872C125F@traduction-libre.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 14:33:17 -0000 > From: Jean-Christophe Helary > Date: Sun, 7 Jun 2020 20:20:56 +0900 > Cc: emacs-devel@gnu.org > > But the impression I get from reading the manuals is that there is a general preference for vertical splitting. It's just the matter of tuning the two thresholds mentioned there. From MAILER-DAEMON Sun Jun 07 10:52:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhweu-0000Ju-2H for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 10:52:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwer-0000JR-WE for emacs-devel@gnu.org; Sun, 07 Jun 2020 10:52:22 -0400 Received: from mail-oln040092075071.outbound.protection.outlook.com ([40.92.75.71]:36984 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhweq-0000ji-5E; Sun, 07 Jun 2020 10:52:21 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrZ4BncYhOoRriF0yAmcQsDDGS3b6DND86LzkgCkUaifi8+kTMKkDGihGVFI1VGAqk/JzkksLIvqY/LyhWIIjxtLZEcEtV5KJzI95RtJNE2rYfm5zdlLP6U2YSpz3+aI1u4D2k0nuV5QFWsAtiSmaUlR6IXLE2LlA0QkuKP5b5EzdKbFWs1RLs4pY1TgmXxjV9tcTBoQ3wSQyh+/DG5zcOGt8kS7Cj3c1xA6Wn3mGToKKjlrd1hbPZ+5+AcJFfpEESEWOfms+MrPdEdzgyOPSa7YBX0CkVGKxBtShim9eU9dgQx959yaPQdrh2skMimrt2SmFbGoOL36BnngXQHjHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vsphyJXaKhDn9UivbYpWfgXjNx5tCD6R4HlAYnl0kew=; b=XgCaZlnx74Zs1Do1+EaJ4aJwan27P4LhvUiwLhA+5T/vJTXe3IFcAA00KkP2pgzlLCHaRzlbW0QL4vtsW4TTfnedIWsUDu64Swo/zAXIHPjR0UXVmAdjuroUYyLXkKC/gUA+witq+msvIxfooJsgzVvW57bFcDxvyhFNqV6rrwhmKit/HNaV0h27qjEAula1MXdZd6mFDnTsqxi05bfhXKUy4y/gfulLMui1JkKrsCsdqwqBPntRH4m41AFnyL1tivtEu9ehGhdCU7wxc2vALYH9vW9X1sWX5bFK/G4PrR84Z4zdyj1hgtnTXUUOO0/pK/RelV5yqh0OTwd44YDLYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vsphyJXaKhDn9UivbYpWfgXjNx5tCD6R4HlAYnl0kew=; b=RQz7oh/N8BRWnqksCdNPNsM42v293s+8y8FLVhPxnQhWjRLOJtThA8WpcOQ9qITOY9yIwl0uBZqRF5Dl2i+x7v88mRGjl1MrDIcBm15Os9TP/RDLTyHULXwLXhvgZIiiuNH9M128aCnaAlau0K/klS+dEUOVu4dz7/saYyFEUy9htksvfW0mQHC3RnzLYYceKDSXdHRcDLYN0Vx/aSjmRVn5/QbbcdyobBzf31DqybJ/N5Hn1FUMgqTp9toBicl7LJ6VhI2hhUnz4H2NGbZj+V8brWLht8TbuAeZMwzHwZ7PBmJdmh+t24X+fhXEBtGYnD5MZD3gaUCVTs6fBu4OJA== Received: from HE1EUR04FT061.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0d::4c) by HE1EUR04HT140.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0d::366) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sun, 7 Jun 2020 14:52:16 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:7e0d::43) by HE1EUR04FT061.mail.protection.outlook.com (2a01:111:e400:7e0d::306) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sun, 7 Jun 2020 14:52:16 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:CC375B1F72E3ED4AACEF25D3917D81C4A28CB53AD36797DBD5562455ACC86EE2; UpperCasedChecksum:D0DEB86761074A04901E14D622C5B997313055758B0E071A73DE5D23A3577CB1; SizeAsReceived:8510; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::49f0:2314:a959:bec5%7]) with mapi id 15.20.3066.023; Sun, 7 Jun 2020 14:52:16 +0000 From: Arthur Miller To: Richard Stallman Cc: sb@dod.no, emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87v9k5n5yp.fsf@mbork.pl> Date: Sun, 07 Jun 2020 16:52:14 +0200 In-Reply-To: (Richard Stallman's message of "Sat, 06 Jun 2020 23:37:44 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM6PR05CA0016.eurprd05.prod.outlook.com (2603:10a6:20b:2e::29) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <87o8pv53oh.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM6PR05CA0016.eurprd05.prod.outlook.com (2603:10a6:20b:2e::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sun, 7 Jun 2020 14:52:15 +0000 X-Microsoft-Original-Message-ID: <87o8pv53oh.fsf@live.com> X-TMN: [cc3YM2C/5fxyQ/+4gSUFabL7eEvBUwNv] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 21ec10dd-b8b7-4739-c95f-08d80af25e67 X-MS-TrafficTypeDiagnostic: HE1EUR04HT140: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eWha8IDqN+DpRgQbeMosVGVIvRLK0z0uJ4aF/XO1i/EidVXGg5fYaCgT5T3b2xY3US04GnT189cGeAa8HsaD+iVIozTmzIIf00yfZs15MiUJZwPposT367zuwA4qug8/ifG++7MalO6bNqb5U1bNZiw2rfwApJ6tsmJtjMm4uuu9k/g9RUSJXn0QgE/OrC8IKaP53EanM4bTR5xu3Fg7S1iLJyBnIi2DZRDlzQFiGDxFa5bXlH1TYvx1vV1ZI2a5 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: 1fGZbtb4loxmFLb3Aemq+V0PGL4sNPU10ze1a4CffCbqe2KvsZHcC1/DecvCsp4ZlamgzYixxEJKvKbcUp5OEux2ElPwZwoDuS/RqJz0646niChq9NK9VGOT7ZseW1RBGwjYCuYyShowqZ9s9OXT6Q== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21ec10dd-b8b7-4739-c95f-08d80af25e67 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2020 14:52:16.0645 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1EUR04HT140 Received-SPF: pass client-ip=40.92.75.71; envelope-from=arthur.miller@live.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 10:52:16 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 14:52:22 -0000 Richard Stallman writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > The process that was suggested for viewing the page image > involved running several programs each time. A few seconds to start each > and it could take half a minute. > > I use a machine that was made in 2008 or so. I use it because we can > boot it with libreboot. I cannot predict when there might be a faster > machine I could use. I understand. Have you heard about company called Purism and librem project? https://puri.sm/why-purism/ I am not sure if it is suitable enough, but they do run only free software, from boot (coreboot) to highest level; at least as I understand them. Also I believe they went to the length of ordering Intel cpus with intel's "management" backdoor disabled. Just as a tip. From MAILER-DAEMON Sun Jun 07 11:07:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhwtL-0003h2-K9 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:07:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35978) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwtK-0003gq-4Z for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:07:18 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:38837) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwtI-0003eC-J3; Sun, 07 Jun 2020 11:07:17 -0400 X-Originating-IP: 111.89.103.91 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 85AAF1BF203; Sun, 7 Jun 2020 15:07:09 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: pop-to-buffer / switch-to-buffer-other-window From: Jean-Christophe Helary In-Reply-To: <83wo4j6j4p.fsf@gnu.org> Date: Mon, 8 Jun 2020 00:07:07 +0900 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <4A063A0F-C208-4689-9E28-AB7DD56583D9@traduction-libre.org> <91CED84B-6628-4458-92E0-9A6AD7BCC9DF@gnu.org> <4BD7D31A-E321-433A-B561-20AB3953EAB2@traduction-libre.org> <4282B5A5-C5B0-4973-A254-8019872C125F@traduction-libre.org> <83wo4j6j4p.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.201; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 11:07:11 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:07:18 -0000 > On Jun 7, 2020, at 23:33, Eli Zaretskii wrote: >=20 >> From: Jean-Christophe Helary = >> Date: Sun, 7 Jun 2020 20:20:56 +0900 >> Cc: emacs-devel@gnu.org >>=20 >> But the impression I get from reading the manuals is that there is a = general preference for vertical splitting. >=20 > It's just the matter of tuning the two thresholds mentioned there. I can see that. My ideal ? behavior would be to keep the main window and send anything = informative on the side but anything I need to action in the front = window. So it's not really thresholds tweaking... I guess the default settings = are reasonable so I'll see what I have in my copy-pasted config that = interferes... --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sun Jun 07 11:08:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhwuW-0004bq-Sy for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:08:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36148) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwuV-0004bg-Hn for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:08:31 -0400 Received: from mout.gmx.net ([212.227.17.20]:34583) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwuU-0003sV-9Y for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:08:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591542507; bh=+QI8KwsX0jdAFjH0SpdDXFDVGYt9/EhwOMj29EhXs1Y=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=auCR0oLSYzUrn8mdwG7cZpO2NCMA1xend0FOKd50PKwmnJZdUHqwcGbax5Zq4imQ9 fewVxS1qNVhs7RcvqxV7SA7L2yrQFukcDXPB2tF1XwCMx+x02dHb64okNn94X7yRZX H6LiOCWMbnqO/V/0p1aSpLXn2J7zlD/XKlyOqZ5U= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.117.219]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MUXpQ-1jZFiF03Hs-00QRYd; Sun, 07 Jun 2020 17:08:27 +0200 From: Michael Albinus To: Deus Max Cc: emacs-devel@gnu.org Subject: Re: Tramp and crypted files References: <865zd1h3ru.fsf@duenenhof-wilhelm.de> <875zd15rze.fsf@gmx.de> <87wo5gjfbr.fsf@gmx.de> <87eermkdov.fsf@gmx.de> <87r1vlipg4.fsf@gmx.de> <86lflrttxn.fsf@duenenhof-wilhelm.de> <874ksdhdmp.fsf_-_@gmx.de> <87h7wcwbn9.fsf@aia00820.aia.gr> <87lfloou9y.fsf@gmx.de> <874ksbvwn0.fsf@aia00820.aia.gr> <871rn7rgtv.fsf@gmx.de> <87367kfbwa.fsf@aia00820.aia.gr> <87a71ryubz.fsf@gmx.de> <87r1v2em69.fsf@aia00820.aia.gr> Date: Sun, 07 Jun 2020 17:08:26 +0200 In-Reply-To: <87r1v2em69.fsf@aia00820.aia.gr> (Deus Max's message of "Fri, 29 May 2020 19:33:02 +0300") Message-ID: <87eeqqncb9.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:WsVLDjA8ek6PsmP23j5tdvYySr+49RPP234l2MhQNiXp+EzrLtN Lwir/VL5Pqoyk8N0IEWdA6yqLgM08vKwxqjxlKnZQpKnrnp0rMjUHPW1nOEiWPoyrVch1s3 eFx21ZhVpcXAKEv9clU00RB3Owf2z8FK7v8RNi4jF4KvJ7ghOzR+mvy2ocJuiYWVqtKCJ+f lHxhPSsqsno+YDG7GBbSA== X-UI-Out-Filterresults: notjunk:1;V03:K0:tC3UhKyVKEM=:kRAT4sthcLZAAbSCeKM2K4 kZjp3i4nMAoqdvvvbUdrK9WZao8VtvLQ99/zdyauLsPXAvZ+RmsDOvMHBTNLx51amZAxck+sv 1uYgjvRqUWanEOPNgP9WXr6i8h5F29hVch/2h/6U0/P56z1Uqy6pabmW73ivKwSTwES1j3gwn LjL7BFF4Kdgyo4ZTvWtHCIF4i+77cIJpI/NOa3CLiLDGI3uH4qCcOrSNO2201pQCntUoyhAAM J2mB+JBJqFL2h32ZmX7b1bbahRgV/xUe2QjI25oMr4igLui0rpjhEEz2MAmqDKjg4ml7C/O85 f3LkdHjOwYYNstQzglCLjjSYqCs+zgCjNn3YO4/rSensyhb1PTFpvmpvn99pO9SfWlrJM+bs1 3u0gmzSXbmNeMCuB9lhKYQdzuyIF6CS8sLJXwMvQV8xoyWLE3l4sBjY+IKnmQC7LCHqTL/Sid ILIbhKmCFPIVjABeVCQ3t6xdGc/zeBJV9yEnHiPibOxLRftx2IzYN1pjLtz0CbZ+qaMxIXGY9 a6UQAMyh1T1dnxVRI8m3cZzuXZSqTmVJ8nQzet2As0ucq1RKAt2YWF3mlUxtbyxokzbwQuWry iM+paXnPgOZcHVk+ggDShquQjB5X5s0BZASQZiMYQuRYi1gusmREZ5nAIB/HiVRXWdcZAOdpG Fe6Jm+i23JsCdqJRFRFLM+sxCUNeXXx3IxrhmDE1oC9eQbCObP8xMT0I/h3avjEC30ep6ZYut rQai0XGQNat1AH2t1n9VKOn6gWAZM6WhNDXMvFOP6Beq+30+pQC0VlFQx4+Wh6JWk9tQYtugD ENoqT4asVyP8UH+YP98eKnZuhzwiL/s3eX39T+6knR4FBI9yowNk8HqUWHT+YQKxft8/mf/DU 3hw+ExsiM2YpS+skwcgAmNRuniRUL1UYA6KL4ORKfecKcR2Hv9bvGDfTDSYS8pPsHdvJlrbNh 9FbvL35Ba2W3ZBuOO0mR4VzNONTL6cqCv2aIHcv0h3DRfaMxWk4tZuSw6eFnPCqNS2tuqCFDb WAKL4LdLVAag3BC5H/RK/3KYk0xhtEKbbP0JfT3rLQxti5t7XgTtUNGysBT9TxFLsD4XJ9MDF mrdDSsnU/3LtwZWMekYC+TwVW0hddKpEOYd2BET9BFyqw5qXsO8fC0YCpG5Pb0VRmDNTGA9HE LzbQXFC3T2QKsli9K7BKXIJkWed9QLFZDhG5T1fWPg8kF68a6L7IKIgwVnY2Om0pS3SHVpwe5 8htJOXt/gbZ3UmJ79 Received-SPF: pass client-ip=212.227.17.20; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 09:14:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:08:31 -0000 Deus Max writes: Hi, > Great! I need to reed up on the new tramp-crypt handler. Well, it took longer than expected due to other responsibilities. But now I have pushed to master the very first version of tramp-crypt.el. It isn't ready to be used in production, but it passes already the majority of tests in tramp-tests.el. I haven't updated tramp.texi yet, but the Commentary section in tramp-crypt.el should give you a first howto for application. Note that you can apply this for any remote directory. But for testing, I have created a local directory "/tmp/crypt", and I have used the remote directory "/ssh:hostnamegandalf:/tmp/crypt" - this makes it much easier to test. Tests on my nextcloud server look also promising, but this needs more polishing. The Emacs Makefile doesn't seem to recreate tramp-loaddefs.el automatically. In case you see compilation errors, try "make -C lisp autoloads" first. Comment welcome! Best regards, Michael. From MAILER-DAEMON Sun Jun 07 11:09:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhwvq-0004u5-64 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:09:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwvo-0004tg-UB for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:09:52 -0400 Received: from mout.web.de ([212.227.15.4]:41745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhwvn-00040n-Jw for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:09:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591542589; bh=RNH8wNHeAGYIskU3VaQFAtPFZd+Hlsc9j6n75afhhtc=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=C6GoSsNNzQvsAyTuqCbGYhDvlNn9wV5NULnCWOAREUsBAxCD+bQ5yfzw3VATWkrdI FGxljDjrn+MjACoQWlLONFN1GQIDdevXtepI0ddHCJG4+rfuc77NSk5cxxgv9YH4Nc m432/6IWq6EvBcPcdaRFPqILX7elM3hJrOoMpJ1g= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N7xeZ-1iw5C21NEx-0151VD; Sun, 07 Jun 2020 17:09:49 +0200 From: Michael Heerdegen To: emacs-devel@gnu.org Cc: Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> Date: Sun, 07 Jun 2020 17:09:48 +0200 In-Reply-To: <87tv0a5k5b.fsf@web.de> (Michael Heerdegen's message of "Thu, 21 May 2020 00:14:24 +0200") Message-ID: <87mu5ec3pf.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Provags-ID: V03:K1:B1VdkgYDYHB7wZowqJVSQOoiwg8J6uQ1VdQUsrb6HPSFCAEAwTA szKKDFD5+nC/2149/ijjYUi6VBzTvuC+NEX57KiKAaODZAlt+taR5rytDZ42y6/y+iVoPTt DThF9FjqPXZhWqXoEc0AnlpPLyVM7aUUC9lXDn2wJPN8P8jEOmwKQJ6mwFtRJweuSNskzqY b9gP4MbWeUEdddO1IVfvg== X-UI-Out-Filterresults: notjunk:1;V03:K0:C790qDOmcZU=:D96acKZZwIcqxwVCcTJCsJ q7Q5EDgS+mP69K5bEc5Z4aBvPHdnD5rNImcxBiXC9DF8dar7wF7VQcqjA4dxlVL91hK1t3zAm ocvQUUQ5iQ6xSw/ZpG6qDGjpzO7k8diWJIHOV+wMwINHFBipI/HQp7M9NrWJIKoNTVSOKB7xP vNt7Pja5mU8fBTtttmRt0INfCVwCuyJXDqeYaVNSRmuvSmRefLuHpHhhu6xUDSn/64i6Rmhp+ xmAB98rwtWGPssqPM5NFVO8VNXo+zqulQZfrF3jhw8nT7PgzjR8t4onu/OjOoVw9RRJcTotWH NP5YdmIeHZEUmPytoxlt297o4c6aovV7S2kHMpU5XvyQ+31qCizugrXjQKdipQlHXvoSOmNp4 3mLkxMBCoG6TZ6YtiAbc9neDMRaiujCttsciP7qlCk31Unlqor7Sz9Jn3tPOL2JEhgHxFhCad Bw5nvu3LtXu5NeW+gMKSjapt5HYly/daawGubRKaLxIHC+MQjaei113uQEtx0Nz9Bb69MMTZq JuRlJHSKgdgn6MPhL1bcqPFBfqoe4KwHRNuyKTpKFFNq3izA3iI7PyhGmWPM4C3T1w9LV4fnB nmx3L3NwzukSUkUfw67qEwN4+WvBnowdeRm9r7c4MDOWOaKBf10ufa6lsToGexkAqMT01yZsm epN3e5hJ2KYZhUfVod9ckdtYdkYdPer6W8o3f/U5mvhWStWv6RWQ3bn1nqCe6m5l1b4SF5zw3 ybjSzRpDZF6Orr7cuHHmLfDoHP6m3EvXRdDjvYBaNMihtnlU1QUWpbORw47TVUU9LmR5dDXYp 9wN1BNmLTR44OkO8IAYPq0KzgjztGYL8u9YErSLCHLMqjlsQS+pFARNMbCTf2GkcXocpZHx4S 6F1ovI+UedXog4na7Jn7hT61T1ixWS4q6LSnWZZEsHmc+mSBrF4m6mSebtbxkwH4SKCuXiUJ2 wklZKnP5l0LyE54htkkGPHLmzu9E3/DsS+W4/xZ4uglUKEHYaLvZJYmDCXS6Rpnek211vglB7 SvSy5DlUegPuDJgsyMeabUoRNflwQKNZr2nHI3WzHFNVscviCrNayEUGG3dLdEcXhrbBlUZRz H12jTNdLVMpVbDKjLJbpqdNFRVOLEC3SfyjdNn7FUK5LSk0Q1zQ9CoexEFzUtba/eteFXrW/W +AcURLO7qCnAiUquM5+WBT7yQCQQsavsb7vXH6Qm4bZwJrF7+uRXJFA3JUqtrHaHIJ6VokG3v FY7yvEvSJxvrR54BnssGiF4+da482iB8oeWlypA== Received-SPF: pass client-ip=212.227.15.4; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 10:45:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:09:53 -0000 --=-=-= Content-Type: text/plain Michael Heerdegen writes: > I'll install my suggested patch as well soon, sorry for the delay. Coming back to this: I've got a problem with the implementation: because eww retrieves asynchronously, jumping to the bookmark's position does not work, because when that is done, the buffer is not yet filled and rendered. I don't see a way to make this work that is not either an ugly hack or would involve changing and refactoring parts of the eww code. I don't really feel qualified. What would be needed at least would be to replace the hardcoded #'eww-render in the `url-retrieve' call in `eww' with a newly introduced variable `eww-render-function' I could bind. Or is there a better way? Here is what I have so far: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=WIP-Make-standard-bookmarks-work-for-eww-buffers.patch Content-Transfer-Encoding: quoted-printable =46rom 520ada35ad5804b01afa84fd258d59ecc567799f Mon Sep 17 00:00:00 2001 From: Michael Heerdegen Date: Wed, 25 Mar 2020 03:55:41 +0100 Subject: [PATCH] WIP: Make standard bookmarks work for eww buffers =2D-- etc/NEWS | 3 +++ lisp/net/eww.el | 58 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index ed4722b27f..3ddfbe3d25 100644 =2D-- a/etc/NEWS +++ b/etc/NEWS @@ -403,6 +403,9 @@ The function that is invoked when clicking on or other= wise following a 'mailto:' link in an EWW buffer can now be customized. For more information, see the related entry about 'shr-browse-url' above. +*** Support for bookmark.el. +EWW buffers can now be bookmarked with standard bookmarks. + ** Project *** New user option 'project-vc-merge-submodules'. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 2a70560ca7..3b1948649d 100644 =2D-- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -83,6 +83,13 @@ eww-bookmarks-directory :group 'eww :type 'directory) +(defcustom bookmark-eww-browse-url-function #'eww-browse-url + "Doc..." + :type '(choice + (function-item eww-browse-url :doc "Use eww") + (const :tag "Use value of `browse-url-browser-function'" nil) + function)) + (defcustom eww-desktop-remove-duplicates t "Whether to remove duplicates from the history when saving desktop data= . If non-nil, repetitive EWW history entries (comprising of the URI, the @@ -895,6 +902,8 @@ eww-mode (setq-local desktop-save-buffer #'eww-desktop-misc-data) ;; multi-page isearch support (setq-local multi-isearch-next-buffer-function #'eww-isearch-next-buffe= r) + ;; Emacs bookmarks support + (setq-local bookmark-make-record-function #'eww-bookmark-make-record) (setq truncate-lines t) (buffer-disable-undo) (setq buffer-read-only t)) @@ -1720,6 +1729,11 @@ eww-toggle-colors (defvar eww-bookmarks nil) +(defun eww--bookmark-title (title-string) + (replace-regexp-in-string + "\\` +\\| +\\'" "" + (replace-regexp-in-string "[\n\t\r]" " " title-string))) + (defun eww-add-bookmark () "Bookmark the current page." (interactive) @@ -1728,13 +1742,10 @@ eww-add-bookmark (when (equal (plist-get eww-data :url) (plist-get bookmark :url)) (user-error "Already bookmarked"))) (when (y-or-n-p "Bookmark this page?") - (let ((title (replace-regexp-in-string "[\n\t\r]" " " - (plist-get eww-data :title)))) - (setq title (replace-regexp-in-string "\\` +\\| +\\'" "" title)) - (push (list :url (plist-get eww-data :url) - :title title - :time (current-time-string)) - eww-bookmarks)) + (push (list :url (plist-get eww-data :url) + :title (eww--bookmark-title (plist-get eww-data :title)) + :time (current-time-string)) + eww-bookmarks) (eww-write-bookmarks) (message "Bookmarked %s (%s)" (plist-get eww-data :url) (plist-get eww-data :title)))) @@ -1888,6 +1899,39 @@ eww-bookmark-mode (buffer-disable-undo) (setq truncate-lines t)) +;;; Emacs bookmarks support + +(declare-function bookmark-make-record-default + "bookmark" (&optional no-file no-context posn)) +(declare-function bookmark-prop-get "bookmark" (bookmark prop)) +(declare-function bookmark-default-handler "bookmark" (bmk)) + +(defun eww-bookmark-make-record () + "Create an emacs bookmark record for an eww buffer. +This implements the `bookmark-make-record-function' type (which +see)." + (let ((url (plist-get eww-data :url))) + `(,(plist-get eww-data :title) + ,@(bookmark-make-record-default 'no-file) + (url . ,url) + (defaults . (,(eww--bookmark-title (plist-get eww-data :title)) + ,url)) + (handler . ,#'bookmark-eww-bookmark-jump)))) + +(declare-function bookmark-get-bookmark-record bookmark) +;;;###autoload +(defun bookmark-eww-bookmark-jump (bookmark) + "Bookmark handler for eww buffers." + (let ((browse-url-fun (or bookmark-eww-browse-url-function + browse-url-browser-function))) + (funcall browse-url-fun (bookmark-prop-get bookmark 'url)) + (when (eq browse-url-fun #'eww-browse-url) + ;;FIXME: this doesn't work because eww renders asynchronously: + (bookmark-default-handler + `("" + (buffer . ,(current-buffer)) . + ,(bookmark-get-bookmark-record bookmark)))))) + ;;; History code (defun eww-save-history () =2D- 2.26.2 --=-=-= Content-Type: text/plain Thanks, Michael. --=-=-=-- From MAILER-DAEMON Sun Jun 07 11:24:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhx9z-0001m1-H9 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:24:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhx9y-0001lr-RH for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:24:30 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:45262) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhx9x-0006ts-Fb for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:24:30 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4AE6E1002C8; Sun, 7 Jun 2020 11:24:27 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 82F83100257; Sun, 7 Jun 2020 11:24:21 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591543461; bh=5obJZWlckIEXzY6oCvCIioWB9bF5Ano5+W1zQBgZnJM=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=kEWpUCbMgz3NPWTY0JvWgiYsxACCT+uL9ykzoE3vtsUQo16lpvcXFvUvt6yS4lOA5 iaGNGO49K1jJt0A92HtcK/h7V/u85ORrpw9RZ4+0Kw7+ZDwrQtWOb1AjpPY/qqBAOn C4R0vcMuDJa/t/8JcMpw6g7NNzCCu9zwIADcU23VM1/mg5WU8YTxx1cl+ycYeGK39P ZCCDANrfFSUgdTVDWGQnOIw8jL+8gsHZIsH+HrA8CcyUKnvBBLlacVrOjvpLDCMWRI mrWf6K3arS9GgCkt2CbzVMmOXPfJbF5AQkv/lhvZUUC+gJAe7BrQ0lhoT5Rq9+ZzFr qjzVM1qzQRhtQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2DABC120480; Sun, 7 Jun 2020 11:24:21 -0400 (EDT) From: Stefan Monnier To: Paul Eggert Cc: Pip Cet , Drew Adams , "Basil L. Contovounesios" , emacs-devel@gnu.org Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button Message-ID: References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> <205da0f6-2d15-249f-d1e2-ad1ae31002e6@cs.ucla.edu> Date: Sun, 07 Jun 2020 11:24:15 -0400 In-Reply-To: <205da0f6-2d15-249f-d1e2-ad1ae31002e6@cs.ucla.edu> (Paul Eggert's message of "Sat, 6 Jun 2020 18:40:17 -0700") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.007 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 11:24:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:24:31 -0000 >> That makes me think there's been a fairly concrete proposal that has >> been made and which I missed (since otherwise, it seems unclear how >> you'd get to these conclusions). Can someone point me to it? > There's no concrete proposal yet, in terms of published code. That being said, > my idea is to change the Elisp interpreter to distinguish constant from mutable > strings, and to have a runtime check in the few primitives (notably aset) that > modify strings. Right, this loos like the easy part. > String literals yield constant strings when evaluated. This seems less obvious. How do you do that? [ I terms of semantics, I guess for strings it's fine but I can imagine some surprises if we try to apply the same idea to some other literals. ] Stefan From MAILER-DAEMON Sun Jun 07 11:30:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhxFm-0003Hc-DZ for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:30:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38464) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhxFk-0003HR-Ud for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:30:28 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39402) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhxFj-0008Dl-8h for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:30:28 -0400 Received: by mail-wr1-x441.google.com with SMTP id t18so14735035wru.6 for ; Sun, 07 Jun 2020 08:30:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=B1GFizOnfksYbUQ0XAC7x/o9hJJ2xzkaBnSHITE7DsA=; b=h4eV7YJrHh89/lR63DgoJvUJj7yZGR03UcvzgJZp/oKHj8zvKcm94aVOBtgivOFtQp 7i++x6Q2YeSEN8sgWSyGxIhXFyH5VQydPU0ehMeaEVswcxDk6qIWtbhGB5f/To3kX2yo Q2QMJSVQqNn+kN5D2za4XVHX+eAsVI1lVeI3lVUXe6OWjC82hH2MUYOXaWMugBMSNf/s Piymcv/+vQPUY+Z2nL5seO2fKeEth9Alg8bBHQKZ4isgWohaDzrq4gJXXIW+3GG+JhmP 6yoZSGs8IzP5RtWzZwM6RckFbgu03qEGmhBM3z4RAw6uRtLJDGocSTFPeaGJa9k24vr9 j6bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=B1GFizOnfksYbUQ0XAC7x/o9hJJ2xzkaBnSHITE7DsA=; b=F0z02ONI/nt2+7UVUiR9YWLbxw8glOL/fJYeHHBFxP7fPK7SADRZlwGF6LBlWzGr4t 1A0Jx+iIZ7DLZos8vlbd6SENrBUu6Ag7sk4QvO2MYvaq3MloaXipffwTnyPu/2Ftie1H Fkujc5i9Vc4deoFhQmzqHW7J+K3DJxabOFGRmqAYONodz7TRuxpyzYKqUDn1+ygmv6FL bwPRa36CtQrajDG9zdiWgtpwZi7+URl25FMYuGf3gV+gdlojJjDIMdT0ODylZG/m2xTO 3FylJScZFNpSg72L1F53MvfZ/yB370NwXp4sY+m8nHpKFgE9xBf6RDCAz1Iip9dmXl4A +z6w== X-Gm-Message-State: AOAM5304KwSZ2eU0EwJlOZnxUgJhPFhO9ANw2YUrMjbECHQADQsHGktc lXj3Kzlp8bFjgkUHMfLVHCo3Bg== X-Google-Smtp-Source: ABdhPJzGeaRz/RrE7FSkzwLrVusjszGwc35HEixe2fBpNYNv4oTTgv0Wm48yRbVlxQHSmGdadYYZbw== X-Received: by 2002:adf:dec5:: with SMTP id i5mr20440209wrn.16.1591543825304; Sun, 07 Jun 2020 08:30:25 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id k17sm18839261wmj.15.2020.06.07.08.30.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 08:30:24 -0700 (PDT) From: "Basil L. Contovounesios" To: Michael Heerdegen Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> Date: Sun, 07 Jun 2020 16:30:23 +0100 In-Reply-To: <87mu5ec3pf.fsf@web.de> (Michael Heerdegen's message of "Sun, 07 Jun 2020 17:09:48 +0200") Message-ID: <87mu5e3ncg.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::441; envelope-from=contovob@tcd.ie; helo=mail-wr1-x441.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:30:29 -0000 Michael Heerdegen writes: > Michael Heerdegen writes: > >> I'll install my suggested patch as well soon, sorry for the delay. > > Coming back to this: I've got a problem with the implementation: because > eww retrieves asynchronously, jumping to the bookmark's position does > not work, because when that is done, the buffer is not yet filled and > rendered. I don't see a way to make this work that is not either an > ugly hack or would involve changing and refactoring parts of the eww > code. I don't really feel qualified. > > What would be needed at least would be to replace the hardcoded > #'eww-render in the `url-retrieve' call in `eww' with a newly introduced > variable `eww-render-function' I could bind. Or is there a better way? There's eww-after-render-hook. Sample usage: https://emacs.stackexchange.com/a/36287/15748 > Here is what I have so far: Thanks, some minor comments from me. [...] > diff --git a/lisp/net/eww.el b/lisp/net/eww.el > index 2a70560ca7..3b1948649d 100644 > --- a/lisp/net/eww.el > +++ b/lisp/net/eww.el > @@ -83,6 +83,13 @@ eww-bookmarks-directory > :group 'eww > :type 'directory) > > +(defcustom bookmark-eww-browse-url-function #'eww-browse-url > + "Doc..." > + :type '(choice > + (function-item eww-browse-url :doc "Use eww") > + (const :tag "Use value of `browse-url-browser-function'" nil) > + function)) Isn't it strange having a boookmark-... variable defined in eww.el? [...] > +(defun eww--bookmark-title (title-string) > + (replace-regexp-in-string > + "\\` +\\| +\\'" "" > + (replace-regexp-in-string "[\n\t\r]" " " title-string))) Is the outer replace-regexp-in-string doing the same as string-trim? [...] > +(defun eww-bookmark-make-record () > + "Create an emacs bookmark record for an eww buffer. ^^^^^ ^^^ Capitalize Upcase > +This implements the `bookmark-make-record-function' type (which > +see)." [...] > +(defun bookmark-eww-bookmark-jump (bookmark) > + "Bookmark handler for eww buffers." ^^^ Upcase [...] Thanks, -- Basil From MAILER-DAEMON Sun Jun 07 11:33:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhxIC-0004Kh-QT for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 11:33:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38706) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhxIB-0004KV-4u for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:32:59 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:42352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhxI9-0000FP-RU; Sun, 07 Jun 2020 11:32:58 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 057FNJiT074740; Sun, 7 Jun 2020 15:32:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=HG1xnVIo9khX3zQp+MtiseR6l6xmFj6VHrbto25YOgo=; b=wowqCV38g2/0/lQfpXcYPbkUWq2QfiWu9bgNdaIESPVTi4CzARSJboojYh09hEgrKYDC Yd+3C99sZIjdCkyJCB9NsO/A6oYg2Nzrqs1nQc7W+CZtLqAHJGtQbw+U3YyBxZkhY6x5 ubMzED2yR+AqcLYgbBaE78uzc81gRd2Il6YWPTcOxzEOAekjdX2emPL/0d89rsUUuGKb UgMg6/6DMYdEIXISaw5GK6SVS2ULnMbV9leMZtjO3VC33cCiGq+u3AisxcMf09fRG0aO q27yqQcyZfhnzdoUSr2pjnkKi5iKRWk1Yi9p8Uf5YQmaom3GrjpsFdA6Bpowm1r0o9P2 Uw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31g2jqukqj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 07 Jun 2020 15:32:38 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 057FODC0049812; Sun, 7 Jun 2020 15:32:38 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31gn1ydj5u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 07 Jun 2020 15:32:37 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 057FWXki010805; Sun, 7 Jun 2020 15:32:33 GMT MIME-Version: 1.0 Message-ID: Date: Sun, 7 Jun 2020 08:32:29 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Dmitry Gutov , Juri Linkov , Tomas Hlavaty Cc: Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: RE: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> <60515aaa-0d1e-598a-985d-850265c664ae@yandex.ru> In-Reply-To: <60515aaa-0d1e-598a-985d-850265c664ae@yandex.ru> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9645 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=1 mlxscore=0 phishscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070118 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9645 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 impostorscore=0 cotscore=-2147483648 priorityscore=1501 spamscore=0 suspectscore=1 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070118 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 11:32:56 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 15:32:59 -0000 > > BTW, why browse-url.el still doesn't support the Brave web browser? > > Brave solved the problem of malware. It's one of the most secure > > and privacy-respecting web browsers. >=20 > Not so sure about that: >=20 > https://urldefense.com/v3/__https://news.ycombinator.com/item?id=3D234420= 27__;! > !GqivPVa7Brio!PGyydJ9-LLd8XIznjSJYn6c7uA9nqpwscDwdwqEeZPfto_aWii9FMcJ- > c7L01E0p$ Thanks for that link. Interesting discussion. I'm no expert on these things, but this remark there seems relevant: "Brave ads are opt-in, for people who would like to earn "shitty" cryptocurrency by clicking on them." I opted out, at the outset. Perhaps I'm not aware of some other behind-the-scenes behavior that's problematic. I didn't read all of the page you link to in detail, but my (maybe naive) impression is that if you opt out of ads that pretty much takes care of things. The only technical problem I've encountered with Brave, compared to Google Chrome, is that some dropdown/pulldown lists on some sites don't work. From MAILER-DAEMON Sun Jun 07 12:13:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhxvD-0000CM-3k for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 12:13:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhxvB-0000CB-HF for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:13:17 -0400 Received: from mout.web.de ([217.72.192.78]:55619) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhxv7-0000Ao-Sm for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:13:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591546390; bh=nYsB+eGxw7234ud1fcD2K43sxLI+98FovWS3y2QYqn8=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=s5BSfw2RJrt4tw36vayxHG3TJ/Q0zrqKa8YENgyARke0cD92WrKqHOXGWFXILjt94 KnpGwa8sJXi0eCidPNkPEv4w8SYxkdI1ZvQG7YZW3F1VsPsIj8AIImg0tbXCTS5n20 mloei1A+8JsM607yS7SV7ybr/sdTO5ELfyYWI1TE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MG994-1jj5z82cNY-00Ga5p; Sun, 07 Jun 2020 18:13:10 +0200 From: Michael Heerdegen To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> Date: Sun, 07 Jun 2020 18:13:08 +0200 In-Reply-To: <87mu5e3ncg.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 07 Jun 2020 16:30:23 +0100") Message-ID: <87img2c0rv.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:qDD+8O3MVeqqc4Ct30ZyY7tNsL1nvbMio2gW8/qZuV1VdgfMHdv 6sX8gJUeG2n9EU0eLiz/95PLZCNroqVMnBJchEcr4+1mSZjUDP+g8MPeBV4ojfXwOPsznwE vC/dSxsFILDdLkIGXaEd65NcU16XOI8l5WXk9UMC0rTzfz9+tCsvdOsNudItJrLnUp2eC1C 58wOY55HJVpGd340OjW+g== X-UI-Out-Filterresults: notjunk:1;V03:K0:lpMZ1gfik5k=:YbCg0TOUuQNiZeNg0KbNxT 7DDdvrADJpE7cjH6EbDgnaVB2lnmv5F6HEcwvfsH8tQcVoCOeJ3m22MOYvqIvAZMFprbRf860 bOeLmzsA1cRmeUH2uu7tHMZv/EeUeF/y4u0zy7t5wz3YAnjrd0rwxhGdZlgMm6x3c64h8p3Gt ndWY8PZ6sl1KDZG/i7eOMaqbrxgrcZENCIiehuuf6QS0euB1H04bd1oe+oRMgZixBkrHEd/So K3XKgPPTv9lj6O5vtWqPKtxAHa4+dPOQG74JBQHePVSXgOz5K6WEaHzqPWfcQBX5n1YQz6wMu nV+pgmUFCt/I0JwJfn2wYPpibcySu3eoyZUJ93B/oPeVkp4o1zZyApQQFe/0+v578KbQjwNFR Hb7UAfWDYuqt244FkleM9CKLP44kIl6NBKa6ZfPR6ZNi08oWTr8+HNk04YTNdZXUpdGQ6IQTw SGTeEM2xzftVsGdjcnSjsXN3sJmYFx2vbko0FJ2GYlwy1b+S55hPXIhSPtBx1cQeD+H54oTr3 Mx+c2DJiOsS6M57qsNIXkK13Ei/pfAdJwRhjBMJapRgDh+ig+mN4ACXrO2ehtpdB1EePWLMVV EE7aKnRN3o5XpSsDTZMyUDEA677OX33COXT61JA7dz9nAqYdxPMPlm9WgWzMVIjt7pXJwGUqf EpFd+6IUuIks5+CLsupTV/jyLPOW0W7APmNtZTnagrcDYBlUhS44eHS5jmmWpIY9ME2JSr9Q7 /3CzJe6Yi6RlsRpn2ni0SUV/TRxgFpboauUCtaCzJkJZcvqA5lmw5pZpux5QlhrXJ4Q7Jlqs9 weI0YugsXR7zhGoTuLFLk7IAmQjAkX/q72Ra8Dr/hESAht0ljaxRcA7Rtj9ReOfF9ry64gPwC Du2XE/LnrsO8kGlJNTOn1FjZlIc6YfthXBB7SBONyn3vX5JYosz5UmGUruhDki/85S78dWXrO HYX7+BINaL5g/q/61MuuPVoMGB3R2T3waUCoSGw2Q1XaqhdaHjDvXNNndd14sjtF4zu2LRvrx 7UPU0+eNgCgIMlAh7U2SegkF/BQz7jWBXREc3OgxPry48H/vzD2prKYKUMx0Sml0q0bllVQXm DAzJ1UN9LiZYoKG+TsyFEUgddz6a1ckvxkNjhMe1kPRhlClyr7s6jJxUUHMJvRlDLeqGvGwuU FKYUSGI3rrr3WZV4Kpu9lJW6aFZvhC2qCI9o4V3c2h+3BKdK3qq11vwe7hzf+l1KPctH0W0nB sJbWtiraYZa+EikN+9ugapsLYI/Ai12Iy9TY33A== Received-SPF: pass client-ip=217.72.192.78; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 12:13:11 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 16:13:17 -0000 "Basil L. Contovounesios" writes: > There's eww-after-render-hook. Sample usage: > https://emacs.stackexchange.com/a/36287/15748 Yes, I know about the hook. But just binding it will not be enough because the binding will be gone when it is consulted. We would have to add a self-removing function at least to the local binding of the hook. That's what I would call a hack. Didn't yet look at your other points, but thank you so far. Michael. From MAILER-DAEMON Sun Jun 07 12:31:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhyCz-0005xM-Pk for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 12:31:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhyCy-0005wk-SM for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:31:40 -0400 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]:37357) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhyCy-0003kk-0p for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:31:40 -0400 Received: by mail-qt1-x82a.google.com with SMTP id d27so12840421qtg.4 for ; Sun, 07 Jun 2020 09:31:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=qQaxUngV78aHUI//EphZA5+NSVylYz6zU2kvG7CdoGs=; b=OkL/J26Z17MC/2AGnrdkR8Ue3/5iHVS3WtXuTsaP3Z/bqdsLCl9a4YH6GhLdKdDye2 Y2Mf7F5dqsmx3UG2I8pFlFknf1cgGz4nqPZ+mb8cTOnnvXjID13+17fDOt4UtrM/BAed hlHhG5VN/YGJL74gGZovtkaZRIDEdoA11NUi9399ZAn//mWhqxuauV4A2eMY2Dy9WVMF VCzZXYnrZdOuPUUlAlzvMc44lS/PECacRXvk2FLZMl1I4Rd4k2CKcA+YlADAwnZo5HR6 GLY/0CGyBx2PKj+b71QQG8rh9t3Oo7qWVnDYMYEj6LeFvhzQNPFRnUlDIjaqYAd/9i/+ NdHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=qQaxUngV78aHUI//EphZA5+NSVylYz6zU2kvG7CdoGs=; b=GAGza9gMdtOcIx3LDlnHglpvotdIkEqoteK81NfHe3DrUNYcfyb6x+6YSkiu7u7fxE BWptOopxlfZuF7VKlTlmcgktpHj8lBraLKGv1sVMcSo3mXoKw6YAGJoYlM8tiy6A/Rpb 88GvZebUMuyOfTq5C3raRTe0Z96iG3aLGNSlrEnkDNQicSUPKhCwhNuQwYyMzIuv8QBv mYiT47KhPawABgGQz6v0z7TmfkfCfsJ7horliP3EalNnYdoVfHL3FUEm5Chp0Upd8rAL jXK53X6G9K+hAJ/ygVeBQNfw2oGc/0nqG3iIJgJAoO6cF432xoPdomHxJkzlRYZWjLqn IIdQ== X-Gm-Message-State: AOAM531l7S85OUGsrAxkcYfFXt0vQBfMNLf9gnR+2J4oECYZX2LoGeSz sG0kX9wh9CdYVlYSwx+TeiOeDpPX X-Google-Smtp-Source: ABdhPJwZNV87/U2cm6hpvMgEvSTXdcp14KAmEhwvUbqlnV/yIiXSpGYu0e+0RhqwQLiaQ5LoFVxvBQ== X-Received: by 2002:ac8:38b6:: with SMTP id f51mr18400834qtc.312.1591547496830; Sun, 07 Jun 2020 09:31:36 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:bda5:ac5c:1de0:b677? ([2601:184:4180:66e7:bda5:ac5c:1de0:b677]) by smtp.googlemail.com with ESMTPSA id y13sm5232849qto.23.2020.06.07.09.31.36 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 07 Jun 2020 09:31:36 -0700 (PDT) Subject: Re: eww and bookmarks To: emacs-devel@gnu.org References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <4c72290e-0ed0-cf6b-c172-a96bd13170af@gmail.com> Date: Sun, 7 Jun 2020 12:31:35 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87mu5ec3pf.fsf@web.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::82a; envelope-from=cpitclaudel@gmail.com; helo=mail-qt1-x82a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 16:31:41 -0000 On 07/06/2020 11.09, Michael Heerdegen wrote: > + (replace-regexp-in-string > + "\\` +\\| +\\'" "" Would string-trim for this? From MAILER-DAEMON Sun Jun 07 12:36:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhyHO-0007lP-BG for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhyHM-0007lG-S7 for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:12 -0400 Received: from logand.com ([37.48.87.44]:47522) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhyHI-0005A3-Rq for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:12 -0400 Received: by logand.com (Postfix, from userid 1001) id 6900D1ACD9A; Sun, 7 Jun 2020 18:36:07 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Michael Heerdegen , "Basil L. Contovounesios" Cc: Lars Ingebrigtsen , emacs-devel@gnu.org Subject: Re: eww and bookmarks In-Reply-To: <87img2c0rv.fsf@web.de> References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87img2c0rv.fsf@web.de> Date: Sun, 07 Jun 2020 18:36:05 +0200 Message-ID: <87v9k27s0a.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 12:36:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 16:36:13 -0000 Michael Heerdegen writes: > "Basil L. Contovounesios" writes: > >> There's eww-after-render-hook. Sample usage: >> https://emacs.stackexchange.com/a/36287/15748 > > Yes, I know about the hook. But just binding it will not be enough > because the binding will be gone when it is consulted. We would have to > add a self-removing function at least to the local binding of the hook. > That's what I would call a hack. eww-after-render-hook does not seem to be useable because it runs in the wrong buffer at the wrong time. I hit the issue when implementing the following use-case: 1) Open login page URL 2) Automatically fill in username and password 3) Automatically submit the login form My workaround something like this: (defun login-fn-delayed () (with-current-buffer "*eww*" (fill-in-username-and-password) (submit-login-form))) (defun login-fn () (interactive) (eww some-url) (run-with-timer "1 sec" nil 'login-fn-delayed)) It would be nice, if there was no need for run-with-timer and no need for (with-current-buffer "*eww*"...). From MAILER-DAEMON Sun Jun 07 12:36:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhyHx-0008Ih-IE for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44606) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhyHv-0008Fg-Tp for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:47 -0400 Received: from quimby.gnus.org ([2a01:4f9:2b:f0f::2]:49686) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhyHu-0005E7-FE for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:36:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=LuhVUJqPVsorBBIhs0JQIciYaRYT0liBIwMSnilyD3s=; b=aBHtWO+FUiKN6/8PTlXyTMtdqW h+EMWAsNtdbRuP9s3IGSv+u9FnZSYGQ+pURu4iBAMxVziarWoKqiUJM5zzwvhghB9JMj+k8xjQttB R+7IPKmL0KGItdvyqzbwX0mplzAmwFhbDSclGOt31cg/hBVvYThF2EFX/cPuMsQ/TtLk=; Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=marnie) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jhyHm-0000bt-Ms; Sun, 07 Jun 2020 18:36:41 +0200 From: Lars Ingebrigtsen To: "Basil L. Contovounesios" Cc: Michael Heerdegen , emacs-devel@gnu.org Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> Date: Sun, 07 Jun 2020 18:36:37 +0200 In-Reply-To: <87mu5e3ncg.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 07 Jun 2020 16:30:23 +0100") Message-ID: <87mu5ebzoq.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a01:4f9:2b:f0f::2; envelope-from=larsi@gnus.org; helo=quimby.gnus.org 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, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 16:36:48 -0000 "Basil L. Contovounesios" writes: >> +(defun eww-bookmark-make-record () >> + "Create an emacs bookmark record for an eww buffer. > ^^^^^ ^^^ > Capitalize Upcase I always write eww in lower-case. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From MAILER-DAEMON Sun Jun 07 12:41:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhyM8-0001HT-2s for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 12:41:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhyM6-0001HK-Mc for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:41:06 -0400 Received: from colin.muc.de ([193.149.48.1]:31559 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1jhyM5-00061B-Cv for emacs-devel@gnu.org; Sun, 07 Jun 2020 12:41:06 -0400 Received: (qmail 72659 invoked by uid 3782); 7 Jun 2020 16:41:01 -0000 Received: from acm.muc.de (p2e5d5bab.dip0.t-ipconnect.de [46.93.91.171]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sun, 07 Jun 2020 18:41:01 +0200 Received: (qmail 7032 invoked by uid 1000); 7 Jun 2020 16:41:00 -0000 Date: Sun, 7 Jun 2020 16:41:00 +0000 To: =?utf-8?B?TWljaGHvv70=?= Nazarewicz Cc: emacs-devel@gnu.org Subject: Regexp for c-or-c++-mode Message-ID: <20200607164100.GB6212@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.1; envelope-from=acm@muc.de; helo=mail.muc.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 12:41:02 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 16:41:06 -0000 Hello, Micha�. In c-or-c++-mode--regexp, there are several occurrences of [ \t\r] . These expressions notably lack \n. This seems strange, given how \n is the normal line terminator in Emacs and \r is a rarely used artefact. Is there any reason these expressions are like that, and if so please tell me that reason. If there is no such reason, I have a patch ready to put the \n's into the regexp. Thanks! -- Alan Mackenzie (Nuremberg, Germany). From MAILER-DAEMON Sun Jun 07 13:31:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhz8z-0002zN-Cz for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 13:31:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48734) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhz8y-0002z3-0v for emacs-devel@gnu.org; Sun, 07 Jun 2020 13:31:36 -0400 Received: from gateway33.websitewelcome.com ([192.185.147.108]:34226) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhz8w-00071f-OM for emacs-devel@gnu.org; Sun, 07 Jun 2020 13:31:35 -0400 Received: from cm10.websitewelcome.com (cm10.websitewelcome.com [100.42.49.4]) by gateway33.websitewelcome.com (Postfix) with ESMTP id 7DFCE720C for ; Sun, 7 Jun 2020 12:31:31 -0500 (CDT) Received: from host2007.hostmonster.com ([67.20.76.71]) by cmsmtp with SMTP id hz8tjksUrXGIkhz8tjKHsG; Sun, 07 Jun 2020 12:31:31 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=stephe-leake.org; s=default; h=Content-Type:MIME-Version:Message-ID:Date: Subject:To:From:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=PjOEbGm2QDtyIArak7mrMRBBhiLv/2JH60gRSm4Uq0M=; b=Rj5ygH5U9DNdgAfyIJO8sM3sa4 72WkiRmh4SYtSJkKB12nGvW+wjowUiOfd6jn2/ZM46nOIRlm/ypVvCshHg0FnCYUxSN3dyvf7B68r hQcmNiYYUpssjg4XLbZDdE9pyPs/UCowIBl3nTiuGCoQVIPtAUrYctjcmBiX/SJFwbn8YVxlf8vfA wXWDCtMPaH7uFulUlbObJm7pVXWMM4XIgGdmqhLHilXpqu9k2R5ngtbFB3iiEMVzLUTU7M79Ku2K+ H6d78kvGZVgMbjJaVy7D2o42fOd7iHBCOJ0Sl5U2Ri9fgDtDz+teolXCCPdEItZwZKcJH6Vcxi7a+ YxkII99A==; Received: from [76.77.182.20] (port=50785 helo=Takver4) by host2007.hostmonster.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1jhz8s-002vIn-Rm for emacs-devel@gnu.org; Sun, 07 Jun 2020 11:31:30 -0600 From: Stephen Leake To: emacs-devel Subject: wisi 3.1.3 not showing up in M-x list-packages Date: Sun, 07 Jun 2020 10:31:28 -0700 Message-ID: <86d06adbpr.fsf@stephe-leake.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (windows-nt) MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host2007.hostmonster.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - stephe-leake.org X-BWhitelist: no X-Source-IP: 76.77.182.20 X-Source-L: No X-Exim-ID: 1jhz8s-002vIn-Rm X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (Takver4) [76.77.182.20]:50785 X-Source-Auth: stephen_leake@stephe-leake.org X-Email-Count: 1 X-Source-Cap: c3RlcGhlbGU7c3RlcGhlbGU7aG9zdDIwMDcuaG9zdG1vbnN0ZXIuY29t X-Local-Domain: yes Received-SPF: neutral client-ip=192.185.147.108; envelope-from=stephen_leake@stephe-leake.org; helo=gateway33.websitewelcome.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 13:31:31 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_NEUTRAL=0.779, T_DKIM_INVALID=0.01, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 17:31:36 -0000 According to the git log at https://git.savannah.gnu.org/cgit/emacs/elpa.git/log/, the commit of wisi.el for version 3.1.3 was over 2 days ago, but it's not showing up in list-packages. There are no copyright errors; what is the problem? -- -- Stephe From MAILER-DAEMON Sun Jun 07 14:07:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhzhg-0000xy-S4 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 14:07:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhzhe-0000xq-Vp for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:07:26 -0400 Received: from mail-wr1-f47.google.com ([209.85.221.47]:47046) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhzhd-0004bq-Cj for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:07:26 -0400 Received: by mail-wr1-f47.google.com with SMTP id x6so14910192wrm.13 for ; Sun, 07 Jun 2020 11:07:24 -0700 (PDT) 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:cc:content-transfer-encoding; bh=Jr7PP4SgZxinzdHvk2Mx48UkZMYqxgMm0eNo1Ock1Qg=; b=a3xDAg9v+W7LJIbuhkMelWNFtEtZ9Cu1J6dduqeWAUuWJDmOh7BmcOOc7Q7eu3ypD8 45zX2aVmhzaFK79J5FxiMRMArJukhM2DEllUftG1Asbno/vybujQ8LqTpvN7hte/L1Ge e5Fnm7JEMr4DuxC32hjt9bxkexu6VNmYJ3E3gLqyzDGscK8WtM6ytuWmOVEn36S41xwp w+8/jLon5+OrgHmkpNAG4djuGHGXmFkyV5zazSgevD0Y3xfcZdBlG1KX/jpUQG4jDEaK if15nXXcr4ISgyPCHrxtPq1tbEMwqrq8UOhGjnCBRlmsAvPaswBbS8dQW/L2nyPwJIjy 6AhQ== X-Gm-Message-State: AOAM533xB2hURf3eVx3KkIusHx2m6joOnuvzmk3jyYlh6wpZ0JLW+w5b VNiAaQmtmfaSb6UAusLBIQgxmRjUtr9jrm317ic= X-Google-Smtp-Source: ABdhPJx27+JVq/Jq909BeEhSRkQM/hmXMya+Y7fzYOuwdbR9K/jUSMJAr4tt+xnU5NEMIC4Zqu6uAI6yblzzX04BIxE= X-Received: by 2002:a5d:4488:: with SMTP id j8mr19303695wrq.242.1591553243570; Sun, 07 Jun 2020 11:07:23 -0700 (PDT) MIME-Version: 1.0 References: <20200607164100.GB6212@ACM> In-Reply-To: <20200607164100.GB6212@ACM> From: =?UTF-8?Q?Micha=C5=82_Nazarewicz?= Date: Sun, 7 Jun 2020 19:07:12 +0100 Message-ID: Subject: Re: Regexp for c-or-c++-mode To: Alan Mackenzie Cc: emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=209.85.221.47; envelope-from=mnazarewicz@gmail.com; helo=mail-wr1-f47.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 14:07:23 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 18:07:27 -0000 On Sun, 7 Jun 2020 at 17:41, Alan Mackenzie wrote: > In c-or-c++-mode--regexp, there are several occurrences of > > [ \t\r] > > . These expressions notably lack \n. This seems strange, given how \n > is the normal line terminator in Emacs and \r is a rarely used artefact. I wanted the regex to match single-line rather than multi-line statements to avoid false positives. Though, other than #include lines, either will probably work equally well. --=20 Best regards =E3=83=9F=E3=83=8F=E3=82=A6 =E2=80=9C=F0=9D=93=B6=F0=9D=93=B2=F0=9D=93=B7= =F0=9D=93=AA86=E2=80=9D =E3=83=8A=E3=82=B6=E3=83=AC=E3=83=B4=E3=82=A4=E3=83= =84 =C2=ABIf at first you don=E2=80=99t succeed, give up skydiving=C2=BB From MAILER-DAEMON Sun Jun 07 14:19:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhzt6-000413-Ok for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 14:19:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhzt5-00040s-CD for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:19:15 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:36055) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhzt3-0006e9-Ro; Sun, 07 Jun 2020 14:19:14 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 302C080B6D; Sun, 7 Jun 2020 14:19:12 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id B8E5A8096B; Sun, 7 Jun 2020 14:19:10 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591553950; bh=bd+/48ZtFdNN1IrqAfhNd2qY+aQIzDT3RPBuKkGqrxQ=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=he3kmApnKrQdqm4T1sRMkJOP3TOQKVsuueXfAfot9JQ4oKLPbNISv9oew9J74slgg pvsvYco825ak8fcxDEtEG5oihGTbNakbjCxXe+yj4fdd/PRQ/K/oXmNSbnteSiGfPG W0Juwg/dlBoIJeauMH0iGp3U74LxOgAx0nbEBJCeT43vnf35T6W3KdD/a+l1eAtvxO 4EVU4EIxoLCHh4lcKTtLBpNHwSvZ+8ACGJeJgPW3UPJ+G8v+4HLNbQbAJKuIEEZ9EN i/8wyPKQktJXHT9DbdyOEJQ+HQoN2ai2ru1rpgBTqT88kUUnM9UQui8PvKpgrSzYY0 y3bqX8d9uOqrw== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id A90471203E4; Sun, 7 Jun 2020 14:19:09 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Message-ID: References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Date: Sun, 07 Jun 2020 14:19:07 -0400 In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> (Juri Linkov's message of "Sun, 07 Jun 2020 02:30:36 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.001 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 14:19:12 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 18:19:15 -0000 > BTW, why browse-url.el still doesn't support the Brave web browser? I know nothing about Brave, but I'm wondering instead why it is that browse-url.el would need special support for specific browsers. Can't it just run "the" browser, whichever it is? Stefan From MAILER-DAEMON Sun Jun 07 14:23:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhzxU-0005Dn-AP for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52766) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhzxS-0005DT-HS for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:46 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:37829) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhzxQ-0007L0-To for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:46 -0400 Received: by mail-wr1-x436.google.com with SMTP id x13so15010906wrv.4 for ; Sun, 07 Jun 2020 11:23:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=GN4xeov56hcfaM1GWmxtrilB97KfgApNNYQZJv7yEDA=; b=Z1uHkAh6JjKPk57OqnNessBNRPywlvHD1L+kiVNtytmpUp3R5BNZLxyEnpzqxdwW4c a603L4yBeQpxJgE1UlxO5VJSr5GGhDxWfnQ2TNC+koL5p/etZMWTkyOQeo5f0IyDHLPn tdFBbOKs6j51/X3w9I4CiSFV97olcZG/YfJnAxrLMzbiSeUAjeax6IDHe48FHrkS2+HT +LvPZ5WEIK5hM0ys24EBwSpwDZ3IgO5/d9bH/zBPRWWJVnG9rCw+BLxON1DDxGS6cRxT THZTN6smhsANnb9tpxDdypWCZ/ASeKryXhoEtKpWeZjyVGy+9byY+tgW8IvTnXvCnJSU HlBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=GN4xeov56hcfaM1GWmxtrilB97KfgApNNYQZJv7yEDA=; b=VnEoedBmpxWe9ISo2IVUM8f1WpTeZZroSBc9y8/4Ab5vic6/P4i7rjjRAMz2hrEm1m 7gIHE7+wnZK9RmxvnFThDt+3KOIYMG7mV41G4ZED+Djz047SyZT+EQYTaxKgCnLapL6X 8UtfCNNQZXZrAi8TpbS67ZIAv0dGYdfiaGMntaUTFT/9oXtYqgCS/XK1DKWMNaliNF/P DExmMGIW02fiLvm9IecB7FGIRCA/1TF8/YNYe0lfzm56gAKITXHOOz4wIji7A5NO3rJA oeEtfxgRtQtiPBirbwgeOxslxQ/RRWw7gvSpqFzcy744X3sgKuu5IGw3BTVlZMdbFNgT DJeA== X-Gm-Message-State: AOAM533vXf8fTn6ML0P5Rqd4+i0fQMjamiZ2lEktYt1nDfg1EHLx5uIt CIaHLtudMU9k91aAN3A3y9EB9Q== X-Google-Smtp-Source: ABdhPJxEwTWwIuMy7XOctJz51ujEISITDiJ3u6CF1kNd5guBVddptpwvyBbKvPV0JM4EAizABH1+sg== X-Received: by 2002:a5d:4f0d:: with SMTP id c13mr21091020wru.357.1591554221976; Sun, 07 Jun 2020 11:23:41 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id g18sm20203716wme.17.2020.06.07.11.23.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 11:23:41 -0700 (PDT) From: "Basil L. Contovounesios" To: Michael Heerdegen Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87img2c0rv.fsf@web.de> Date: Sun, 07 Jun 2020 19:23:40 +0100 In-Reply-To: <87img2c0rv.fsf@web.de> (Michael Heerdegen's message of "Sun, 07 Jun 2020 18:13:08 +0200") Message-ID: <87img220r7.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::436; envelope-from=contovob@tcd.ie; helo=mail-wr1-x436.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 18:23:46 -0000 Michael Heerdegen writes: > "Basil L. Contovounesios" writes: > >> There's eww-after-render-hook. Sample usage: >> https://emacs.stackexchange.com/a/36287/15748 > > Yes, I know about the hook. But just binding it will not be enough > because the binding will be gone when it is consulted. We would have to > add a self-removing function at least to the local binding of the hook. > That's what I would call a hack. Why? It's what minibuffer-with-setup-hook does, for example. If you really wanted to you could add a new hook/variable to provide the desired semantics directly, but it's not absolutely necessary. -- Basil From MAILER-DAEMON Sun Jun 07 14:23:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jhzxX-0005Hb-Gu for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhzxV-0005FB-NQ for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:49 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:42078) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jhzxV-0007Lm-08 for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:23:49 -0400 Received: by mail-wr1-x431.google.com with SMTP id p5so14977679wrw.9 for ; Sun, 07 Jun 2020 11:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=9gmVKH1t6dgHy7O1XXPihBP/z6mfEdSoXmNdTSekIWQ=; b=jbVqsj0J27qJ5DN04C6uTbFGgebqzIrcS8XKxmIOZ37zfiet2wI1dn2sVp0YooSezR 2LQ0oFs8ZOnGcmpz9Bp1AnVmegOX+g7dL8FTQzKQ+GEVE5l2+qUI9g3H5CvNMVNy3tIs JXa4TTKdkA58AtyaqeHFSGrX1M3e7JQTIVu8osUHJvZ7lxC/HUcF/6IxkZ910OrhhXKR iNGjfSF7Bb3oFp3jP8bD9QEMS0XMrsqH+7cZ9w1uUy1+A/EJ+ekLTBJuLr1gmgkj1j2N D/P8m/OnDz3UFO6ZGU7qbx6Ct1Vp92lIQf5bMMDcQFX6hZzKMbyY/neKGSJ9Om5YQ541 d2IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=9gmVKH1t6dgHy7O1XXPihBP/z6mfEdSoXmNdTSekIWQ=; b=ny2V8sf3NQZdsx9GQKI3KTmd/+hceTIZcRFWZzJZNbjkcLGhlH9f3HLiLTByNx+Sfl KQYvE8HMmLjRedoMyQCHWzzD9K19aWqb2NbvZIh2sE0H3Tm603Dl/AmgDabUNYoDEDTC uMT2GI+kr/683d151Ca/RC8fr1uhG+OhuBTKHqJP9IiOQoFTZAwLuV6PActtPC4lZwu4 azq9I/DrU+qz531zfDkVVzngL3UTfFmNHZeMisPrWA2cBQY2tfAXAY1Ij96HLFSUGPYr daGWtXfKoCaKnMDiGpvow/ezK+Vh2kfGa+oFS+W+cbku6OvWdrsgQPraOjGhlvO39JxA U85g== X-Gm-Message-State: AOAM533RFMKrr6cBnB8hQ8/xZoUjsn57WQLts6Z0KafVgfRrJ/u/7RlZ SvSwtGWXLbL154t9rTX6bv+VnA== X-Google-Smtp-Source: ABdhPJzGIRg87D1kWGriUk0n5xRxSqnKkjNioRjTZPsc6pp2ffl9ZbD5QNwyMF9Z5BcGdG5JEghKdw== X-Received: by 2002:adf:f208:: with SMTP id p8mr17851427wro.388.1591554227162; Sun, 07 Jun 2020 11:23:47 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id 67sm2770435wrk.49.2020.06.07.11.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 11:23:46 -0700 (PDT) From: "Basil L. Contovounesios" To: Lars Ingebrigtsen Cc: Michael Heerdegen , emacs-devel@gnu.org Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87mu5ebzoq.fsf@gnus.org> Date: Sun, 07 Jun 2020 19:23:45 +0100 In-Reply-To: <87mu5ebzoq.fsf@gnus.org> (Lars Ingebrigtsen's message of "Sun, 07 Jun 2020 18:36:37 +0200") Message-ID: <87h7vm20r2.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::431; envelope-from=contovob@tcd.ie; helo=mail-wr1-x431.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 18:23:49 -0000 Lars Ingebrigtsen writes: > "Basil L. Contovounesios" writes: > >>> +(defun eww-bookmark-make-record () >>> + "Create an emacs bookmark record for an eww buffer. >> ^^^^^ ^^^ >> Capitalize Upcase > > I always write eww in lower-case. Okay, but that's not consistently followed. C-h f eww RET: If called with a prefix ARG, use a new buffer instead of reusing the default EWW buffer. -- Basil From MAILER-DAEMON Sun Jun 07 14:27:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji00c-0007ff-NT for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 14:27:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53244) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji00b-0007fU-8U for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:27:01 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:55969) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ji00a-0007tt-Jf for emacs-devel@gnu.org; Sun, 07 Jun 2020 14:27:01 -0400 Received: by mail-wm1-x336.google.com with SMTP id c71so13147556wmd.5 for ; Sun, 07 Jun 2020 11:27:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=ohwMwe7slRD0STV9aQs/SOFM+2M6ThRvtgFJcrWY8cY=; b=wWi3PEOYjqcxn1tne00Mi80UimW3+pI9ogwnN4g/6ZLKbfaVyKgEkPbT1eWa6Nqnc/ LT+6wtdud4tUoSDCTS2Pg8aTkx7JY0VHUds/ljK2oeXM6lQAElcHB2YQ36Qq8UMUzz9+ U41cpMNjg/q24ui5LeNyndH2D8FocNIurIXfO3YOk808N9G3dmWY6Rb3iN20nt4Vqkfr UWic+XtLkrYkYQ0fPmT8C7bjgGGG4DeC5gb/B4Y+lfpxIoYmDDJCoxEbf4p8AGhAPruw GZEw8StcZTiITbrX1SEyIdzXQAOjXsbz8H7pPKESCbCx5K9hzLg/q9U0ZmnDTldoIVld KmNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=ohwMwe7slRD0STV9aQs/SOFM+2M6ThRvtgFJcrWY8cY=; b=K9Har61bG+aS6kX3XwFw8TJUSsNLN9fNDTPO+PooOIftr9GntL1GlX3kkoeUIic77g yd6GJDLcClVoLIladd4twVZZu7ntX23Y7fvnVAEXt9XZ4SgZ7mXAaUr+VCg2vFXWqr+V Bw2aGhajwMLAmoFUP/O306OYk6Jbi843apkJ52rKBZ73QTZPepRO//TOUOtjRRLwH90V lC/B/lzhJr9by/2yOlSvst2CXcEPEIwOroN5bK6JRojwHt6/VqoKAkr+boTIGO1PMmHE SwLw9HLXdxGxl7CqlNnGSCvNy4zxmB1gEOET4V6Ah1MNxoYFfmRm4GVR80Lanfia0Puq 5rQw== X-Gm-Message-State: AOAM531r3kns9IJn0Kc3cQOlQoStQOjtd1WfphXEJQhrjOVCwH0pQfVD xIKQiXzOi4usYpcosq95JcvRMA== X-Google-Smtp-Source: ABdhPJwzBwlE2xb4eL2ZsqXaA5czN9tNZHY9N0KHC4SR29QkFLRM/II0HA4nNm4XjOoxdtJIiu8muQ== X-Received: by 2002:a05:600c:4102:: with SMTP id j2mr10574067wmi.48.1591554418901; Sun, 07 Jun 2020 11:26:58 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id w15sm19960170wmk.30.2020.06.07.11.26.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 11:26:58 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: Juri Linkov , Arthur Miller , Steinar Bang , Richard Stallman , Tomas Hlavaty , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Date: Sun, 07 Jun 2020 19:26:57 +0100 In-Reply-To: (Stefan Monnier's message of "Sun, 07 Jun 2020 14:19:07 -0400") Message-ID: <87bllu20lq.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::336; envelope-from=contovob@tcd.ie; helo=mail-wm1-x336.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 18:27:01 -0000 Stefan Monnier writes: >> BTW, why browse-url.el still doesn't support the Brave web browser? > > I know nothing about Brave, but I'm wondering instead why it is that > browse-url.el would need special support for specific browsers. > Can't it just run "the" browser, whichever it is? Doesn't browse-url-default-browser try to DTRT already? -- Basil From MAILER-DAEMON Sun Jun 07 17:57:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji3IH-0000Ns-Lz for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 17:57:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji3IG-0000Nm-8H for emacs-devel@gnu.org; Sun, 07 Jun 2020 17:57:28 -0400 Received: from logand.com ([37.48.87.44]:57472) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ji3IF-0004cS-9d; Sun, 07 Jun 2020 17:57:27 -0400 Received: by logand.com (Postfix, from userid 1001) id 755BD1A162D; Sun, 7 Jun 2020 23:57:25 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <8336777y8m.fsf@gnu.org> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> <874krns3oo.fsf@logand.com> <8336777y8m.fsf@gnu.org> Date: Sun, 07 Jun 2020 23:57:21 +0200 Message-ID: <87eeqq7d4u.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 17:57:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 21:57:28 -0000 Eli Zaretskii writes: >> There is frame-position but no window-position. Is there a way to get >> window position in a frame? > > Is window-edges what you want? Yes, window-edges is what I was looking for, thanks. Now I can draw images in console exactly where they should be. However, there seem to be problem with get-buffer-window function: get-buffer-window returns one buffer or nil. This seems wrong because a buffer can be visible on many windows. Is there a function (or trick) which returns all windows, where a specified buffer is visible? From MAILER-DAEMON Sun Jun 07 18:03:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji3O2-0001Ue-9m for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 18:03:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46896) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji3O0-0001UG-V0 for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:03:24 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:49718) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji3Nz-0005kM-6W; Sun, 07 Jun 2020 18:03:24 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 057M2PZj045491; Sun, 7 Jun 2020 22:03:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=2caaUUsvanayciUBBivT/1hziVxbi5IS9Hp4teMKcMk=; b=pBvYC5EEc6mFcmQg+k8DJXrTd6HnYgjN5Tqb4170MDtYmyeFAcMjaQ0YOTADa3hTwf4T NgfbaLLeBq/hQLwuS8es1sS7QNJyNatKziIx51eWy/TlFmDuWOVPEyAwGItJzvJLktNH gF6VeCFwO8rtj/Qsiy2ryGoxEEBN4p6W5OjLN/tmLBS4RTkpBeoK4regYj5uhG2vFvgR XLCoxO9+mxTA4h74QwAYknBK348dW+rgdnzkv0RYwCM7DbiMj146RZuQeQk1T/x55l9K 7Zdpcb+aeSkm4W1hrEHdg/SJdEh7Vcg4iNr2D03SNWCLWXroWmeZRrUTZdkyVghn+ead GQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2120.oracle.com with ESMTP id 31g3smm1av-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 07 Jun 2020 22:03:19 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 057LsGmg168768; Sun, 7 Jun 2020 22:03:18 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3020.oracle.com with ESMTP id 31gmwp1a5b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 07 Jun 2020 22:03:18 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 057M3HF7015324; Sun, 7 Jun 2020 22:03:17 GMT MIME-Version: 1.0 Message-ID: <32d77329-3fba-4c25-b7ae-7ce6e6011244@default> Date: Sun, 7 Jun 2020 15:03:13 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Tomas Hlavaty , Eli Zaretskii Cc: emacs-devel@gnu.org Subject: RE: "Why is emacs so square?" References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> <874krns3oo.fsf@logand.com> <8336777y8m.fsf@gnu.org> <87eeqq7d4u.fsf@logand.com> In-Reply-To: <87eeqq7d4u.fsf@logand.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9645 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=18 spamscore=0 adultscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070172 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9645 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 cotscore=-2147483648 suspectscore=18 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=999 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070173 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 18:03:21 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 22:03:25 -0000 > get-buffer-window returns one buffer or nil. This seems wrong because a > buffer can be visible on many windows. (Typo - it returns one window, not one buffer.) > Is there a function (or trick) which returns all windows, where a > specified buffer is visible? `C-h f get-buffer-window-list' (get-buffer-window-list nil nil 'visible) From MAILER-DAEMON Sun Jun 07 18:10:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji3Ui-0002i1-KJ for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 18:10:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji3Ug-0002hv-WF for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:10:19 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:45044) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ji3Uf-0006ex-EU for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:10:18 -0400 Received: by mail-wr1-x433.google.com with SMTP id y17so15360862wrn.11 for ; Sun, 07 Jun 2020 15:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=RO506G10Q4fQntt3OKtP0AzRnpN798oSt4Gsh1Fmlbs=; b=OxxgIJ7htnfkKKFNJ4wgPPHJkkRGmtVUrHuJSfEczWI6E13fsJGhu6SZ6GiWZ73ak1 qTcphrvRaQWoHKUJYE9b1utsLxSL64/MxDRsAeaynWUyKlT7AbsX+bCf+UYsgZqRn6tx 8OnqChkZ9u3RJgrLPXAfqQxj12Zj5BHDPDpFYOzgtVrHR4hAkPBVuimcAP6itGUrw0wZ pJjFIZYmhcE2W1QMhhfcMdD6Ba8b6d3FlwIxxXoSzfW9VYm5a/kg6fofSyEbVt+jTNUn rokkvH7JtMDTp+IJ2HP5rqKHKer5gyT4/3pd41Jg5OxtOITX/5ceK7YvaFuNOKGy1MIq bvJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=RO506G10Q4fQntt3OKtP0AzRnpN798oSt4Gsh1Fmlbs=; b=gYcyakvn6lmm7VNgrpqSsDP/FZH/vUzECbjgebShP3hwaph6pHvz2bYLmUugiTOtPx pqZWF+UvcAi2ezHcQddoSjnMft6ryUCheLr9edWnAONhLnRNQytTiCH2NCCgIA8v1y4W N/XH3VAq3valSIr171gz8kV3I+fyR7bfQ/+Us98hvGpmsLGmBOBL1DyFEQR+mrbkzejT r805Sg3b6rjBg4w5H66t1ygJq0Trt3KnS1jHexD2GSZZaciAxW3ijQOZrkJ8sBsd/zLC VnlIGV4VjYtwcsB7gJ1lsjXzKG/H7snX9AmuXl9oUBACOuLqWxNW0YV2+iI3towuTWFZ 6AEA== X-Gm-Message-State: AOAM5313MoCcngKwj60q74TDeAeega93IpE5cJzh1ZZh11RVBY/lSUF+ ZvTBLwD86l4twd1co7y17idFcq8n0yOXiw== X-Google-Smtp-Source: ABdhPJxP8u6+gTyAGCV7icZcozECE/CdS2Zwvj1fy7WAhPGAe2jbK4A6v4sUSQ7+G53rAJT3Fn0RDw== X-Received: by 2002:a5d:554b:: with SMTP id g11mr20545728wrw.260.1591567814852; Sun, 07 Jun 2020 15:10:14 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id p1sm20732258wrx.44.2020.06.07.15.10.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 15:10:14 -0700 (PDT) From: "Basil L. Contovounesios" To: emacs-devel@gnu.org Cc: Stefan Kangas Subject: Re: master 80abaea: Use lexical-binding in lunar.el and add tests References: <20200607190128.16579.5580@vcs0.savannah.gnu.org> <20200607190130.38C4E20A2E@vcs0.savannah.gnu.org> Date: Sun, 07 Jun 2020 23:10:13 +0100 In-Reply-To: <20200607190130.38C4E20A2E@vcs0.savannah.gnu.org> (Stefan Kangas's message of "Sun, 7 Jun 2020 15:01:29 -0400 (EDT)") Message-ID: <87r1uqo7cq.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::433; envelope-from=contovob@tcd.ie; helo=mail-wr1-x433.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 22:10:19 -0000 stefankangas@gmail.com (Stefan Kangas) writes: > branch: master > commit 80abaea1d9c6f1e53fe88befe16de3b219cdd919 > Author: Stefan Kangas > Commit: Stefan Kangas > > Use lexical-binding in lunar.el and add tests > > * lisp/calendar/lunar.el: Use lexical-binding. > (lunar-phases, diary-lunar-phases): Silence byte-compiler. > * test/lisp/calendar/lunar-tests.el: New file. I'm seeing the following test failure: --8<---------------cut here---------------start------------->8--- cd test; make lunar-tests make[1]: Entering directory '/home/blc/.local/src/emacs/test' GEN lisp/calendar/lunar-tests.log Running 5 tests (2020-06-07 23:05:51+0100, selector `(not (tag :unstable))') passed 1/5 lunar-test-eclipse-check (0.000202 sec) passed 2/5 lunar-test-new-moon-on-or-after (0.002254 sec) passed 3/5 lunar-test-new-moon-time (0.000106 sec) passed 4/5 lunar-test-phase (0.000145 sec) Test lunar-test-phase-list backtrace: signal(ert-test-failed (((should (equal (lunar-phase-list 3 1871) '( ert-fail(((should (equal (lunar-phase-list 3 1871) '(((3 20 1871) "1 (if (unwind-protect (setq value-12 (apply fn-10 args-11)) (setq form (let (form-description-14) (if (unwind-protect (setq value-12 (apply (let ((value-12 'ert-form-evaluation-aborted-13)) (let (form-descrip (let* ((fn-10 #'equal) (args-11 (condition-case err (let ((signal-ho (let ((calendar-latitude 40.1) (calendar-longitude -88.2) (calendar- (closure (t) nil (let ((calendar-latitude 40.1) (calendar-longitude ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name lunar-test-phase-list :documentation ert-run-or-rerun-test(#s(ert--stats :selector (not (tag :unstable)) ert-run-tests((not (tag :unstable)) #f(compiled-function (event-type ert-run-tests-batch((not (tag :unstable))) ert-run-tests-batch-and-exit((not (tag :unstable))) eval((ert-run-tests-batch-and-exit '(not (tag :unstable))) t) command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/calendar/lunar-tests command-line() normal-top-level() Test lunar-test-phase-list condition: (ert-test-failed ((should (equal (lunar-phase-list 3 1871) '...)) :form (equal ((... "9:03pm" 0 "") (... "11:46pm" 1 "** Eclipse **") (... "7:20am" 2 "") (... "10:57pm" 3 "** Eclipse possible **") (... "12:06pm" 0 "") (... "4:49pm" 1 "") (... "3:57pm" 2 "") (... "7:29am" 3 "") (... "3:46am" 0 "") (... "6:02am" 1 "")) ((... "11:03pm" 0 "") (... "1:46am" 1 "** Eclipse **") (... "9:20am" 2 "") (... "12:57am" 3 "** Eclipse possible **") (... "2:06pm" 0 "") (... "6:49pm" 1 "") (... "5:57pm" 2 "") (... "9:29am" 3 "") (... "5:46am" 0 "") (... "8:02am" 1 ""))) :value nil :explanation (list-elt 0 (list-elt 1 (arrays-of-different-length 6 7 "9:03pm" "11:03pm" first-mismatch-at 0))))) FAILED 5/5 lunar-test-phase-list (0.000611 sec) Ran 5 tests, 4 results as expected, 1 unexpected (2020-06-07 23:05:51+0100, 0.173134 sec) 1 unexpected results: FAILED lunar-test-phase-list --8<---------------cut here---------------end--------------->8--- In case it matters, my time zone is (format-time-string "%Z %z") ; => "IST +0100" Any ideas? Thanks, -- Basil From MAILER-DAEMON Sun Jun 07 18:57:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4EI-0002DO-VA for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50796) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EH-0002D6-Kx for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:25 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:40033) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EG-00062C-Ed; Sun, 07 Jun 2020 18:57:25 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id E06E420002; Sun, 7 Jun 2020 22:57:18 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Organization: LINKOV.NET References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> <60515aaa-0d1e-598a-985d-850265c664ae@yandex.ru> Date: Mon, 08 Jun 2020 01:31:20 +0300 In-Reply-To: <60515aaa-0d1e-598a-985d-850265c664ae@yandex.ru> (Dmitry Gutov's message of "Sun, 7 Jun 2020 14:59:04 +0300") Message-ID: <87r1uq1paf.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.200; envelope-from=juri@linkov.net; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 18:57:21 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 22:57:25 -0000 >> BTW, why browse-url.el still doesn't support the Brave web browser? >> Brave solved the problem of malware. It's one of the most secure >> and privacy-respecting web browsers. > > Not so sure about that: > > https://news.ycombinator.com/item?id=23442027 Oh, I thought it would be a good option. From MAILER-DAEMON Sun Jun 07 18:57:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4EK-0002Et-4l for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EI-0002DD-ET for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:26 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:52179) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EH-00063t-Oj; Sun, 07 Jun 2020 18:57:26 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 5E6DB20003; Sun, 7 Jun 2020 22:57:22 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: Tomas Hlavaty , Steinar Bang , Richard Stallman , Arthur Miller , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" Organization: LINKOV.NET References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Date: Mon, 08 Jun 2020 01:31:44 +0300 In-Reply-To: (Stefan Monnier's message of "Sun, 07 Jun 2020 14:19:07 -0400") Message-ID: <87pnaa1p9r.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.200; envelope-from=juri@linkov.net; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 18:57:21 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 22:57:26 -0000 >> BTW, why browse-url.el still doesn't support the Brave web browser? > > I know nothing about Brave, but I'm wondering instead why it is that > browse-url.el would need special support for specific browsers. > Can't it just run "the" browser, whichever it is? There is a lot of cruft accumulated in browse-url.el mostly for old browsers with different handling of command line arguments for "new-window-is-tab" logic. But it seems nowadays only three options should be sufficient: - use the default browser found by browse-url-default-browser; - or use Emacs browser eww; - or allow to specify a browser program name with additional arguments. From MAILER-DAEMON Sun Jun 07 18:57:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4EO-0002Lf-BF for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EM-0002J3-Sx for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:30 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:42959) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4EL-00064S-Sw for emacs-devel@gnu.org; Sun, 07 Jun 2020 18:57:30 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id D325CFF802; Sun, 7 Jun 2020 22:57:25 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: "Philip K." , simenheg@runbox.com, contovob@tcd.ie, emacs-devel@gnu.org Subject: Re: New feature in project.el: Remembering the previously used projects Organization: LINKOV.NET References: <87eeqtvrmq.fsf@bulbul> <87ftb7dbun.fsf@mail.linkov.net> <48862f99-c174-71c1-877f-bcf35fc4363d@yandex.ru> Date: Mon, 08 Jun 2020 01:38:44 +0300 In-Reply-To: <48862f99-c174-71c1-877f-bcf35fc4363d@yandex.ru> (Dmitry Gutov's message of "Sun, 7 Jun 2020 03:40:51 +0300") Message-ID: <878sgy1oy3.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.199; envelope-from=juri@linkov.net; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 18:57:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 22:57:31 -0000 >>> I was thinking that a "x" key could be added, which would invoke >>> execute-extended-command, but in the project root. >> Or as a more general solution a prefix key sequence could be added >> like recently was added a prefix key sequence 'C-x t t' to run the >> next command in a new tab, a similar key like 'C-x p p' could be used >> to run the next command in the project root. > > It's a good idea, and we really should have a command like that. > > But, for commands that are present in the switch menu, it would still be > more economical to use project-switch-project, right? I mean, as far as > the total number of keypresses goes. Indeed, these shortcuts make key sequences much shorter. Perhaps 'project-switch-project' even could use 'set-transient-map' with a normal keymap? > BTW, I thought 'C-x p p' would be for 'project-switch-project'. But maybe > people have a different idea, it's not a strong preference. Maybe, it seems the prefix 'C-x p' is free to use for project commands. From MAILER-DAEMON Sun Jun 07 19:24:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4eM-0006zT-Ej for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 19:24:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52542) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4eL-0006zL-BP for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:24:21 -0400 Received: from mail-qt1-f173.google.com ([209.85.160.173]:45483) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ji4eK-0001fU-Dc; Sun, 07 Jun 2020 19:24:21 -0400 Received: by mail-qt1-f173.google.com with SMTP id y1so13324853qtv.12; Sun, 07 Jun 2020 16:24:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :cancel-lock:date:message-id:mime-version; bh=e9MPXEo9v+V8Is5TRvyvwdg7TLUugqFJtRGPjnnSRGE=; b=m5tW86nSyZ9r6PLup4N4XEf0P7+27rjJyAFSH397hIb0TkgqN6lJolGEvKe9AhT9oA b9JvTmdD6VtFSY3UJnjAfIBtnzkK+Zs1VKgoB7h1Ou5HN50dsKmN5Yjev7BrKzC2lOQU 3ZrPVZK+jWhQON0tvimdDpfZjo9y5t8Ra6f0o40iyouHXN+AT9TU3DaY4lCPEPavKfO9 Ojh1z9Ni43czi4VsvZs/9iiUmO0dJVEeZAWadN8hrUtL1dN+remK1ePJXMs/9gaNEHyd QsNd8j1j1SR6Ow07XKMpfR1+8ofnhyKGsldbVQw1FqGcuuZJm6J5UVd2NPPggB792Rfe BY6A== X-Gm-Message-State: AOAM5305MCK6iOC5qs3pz1eIWS6xAPa1KR4sligJBLiKVcPrCXSm8FNH 9/ythjIyrAwqR2KYc1LsiJdjx+tYj9Y= X-Google-Smtp-Source: ABdhPJytyvpUozL1u52BHNn0N8TOpsm0+0l1hlP9wq1ukE3/tIvtVpd3yuGSGvHJVdiFnOCdeQO8CA== X-Received: by 2002:ac8:6897:: with SMTP id m23mr20267516qtq.379.1591572258982; Sun, 07 Jun 2020 16:24:18 -0700 (PDT) Received: from sacsa.n800.arm.processor.yandex.fm ([190.236.255.173]) by smtp.gmail.com with ESMTPSA id 207sm5252558qki.134.2020.06.07.16.24.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2020 16:24:18 -0700 (PDT) From: andres.ramirez To: Juri Linkov Cc: Stefan Monnier , Arthur Miller , Steinar Bang , Richard Stallman , Tomas Hlavaty , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-Reply-To: <87pnaa1p9r.fsf@mail.linkov.net> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> <87pnaa1p9r.fsf@mail.linkov.net> Cancel-Lock: sha1:JqfK7cTyVZeI/4/duhmgPHifLoI= Date: Sun, 07 Jun 2020 23:24:14 +0000 Message-ID: <86mu5epiht.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=209.85.160.173; envelope-from=rrandresf@gmail.com; helo=mail-qt1-f173.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 19:24:19 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FREEMAIL_FROM=0.001, NML_ADSP_CUSTOM_MED=0.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 23:24:21 -0000 Hi Juri. >>>>> "Juri" == Juri Linkov writes: Juri> nowadays only three options should be sufficient: Juri> - use the default browser found by browse-url-default-browser; Juri> - or use Emacs browser eww; Or use emacs not default browser (w3m). Not default browser. But arguably has more features. Juri> - or allow to specify a browser program name with additional arguments. Best Regards From MAILER-DAEMON Sun Jun 07 19:26:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4gE-00087B-PF for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 19:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4gC-000872-KO for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:26:16 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:35883) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4g8-000273-68; Sun, 07 Jun 2020 19:26:16 -0400 X-Originating-IP: 111.89.103.91 Received: from [10.0.1.13] (pl22363.ag1313.nttpc.ne.jp [111.89.103.91]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 649AC20002; Sun, 7 Jun 2020 23:26:02 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: "Why is emacs so square?" From: Jean-Christophe Helary In-Reply-To: <87pnaa1p9r.fsf@mail.linkov.net> Date: Mon, 8 Jun 2020 08:24:57 +0900 Cc: Stefan Monnier , Arthur Miller , Steinar Bang , Richard Stallman , Tomas Hlavaty , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <4F7BFDA4-D9F6-42E3-A7B6-ED8397DC8B6D@traduction-libre.org> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> <87pnaa1p9r.fsf@mail.linkov.net> To: Juri Linkov X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=217.70.183.200; envelope-from=jean.christophe.helary@traduction-libre.org; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 18:57:21 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 23:26:16 -0000 > On Jun 8, 2020, at 7:31, Juri Linkov wrote: >=20 >>> BTW, why browse-url.el still doesn't support the Brave web browser? >>=20 >> I know nothing about Brave, but I'm wondering instead why it is that >> browse-url.el would need special support for specific browsers. >> Can't it just run "the" browser, whichever it is? >=20 > There is a lot of cruft accumulated in browse-url.el mostly for old = browsers > with different handling of command line arguments for = "new-window-is-tab" logic. > But it seems nowadays only three options should be sufficient: >=20 > - use the default browser found by browse-url-default-browser; > - or use Emacs browser eww; > - or allow to specify a browser program name with additional = arguments. That makes sense. --=20 Jean-Christophe Helary @brandelune http://mac4translators.blogspot.com From MAILER-DAEMON Sun Jun 07 19:37:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4rG-0001bJ-Q3 for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 19:37:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4rE-0001b4-Nq for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:37:40 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:52554) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4rD-0003jv-Dz for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:37:40 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 3C1C31600DE; Sun, 7 Jun 2020 16:37:36 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id oZFgPulbu_Wx; Sun, 7 Jun 2020 16:37:35 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8D7DC1600E1; Sun, 7 Jun 2020 16:37:35 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 18DstcAVQl3C; Sun, 7 Jun 2020 16:37:35 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 5F18B1600DE; Sun, 7 Jun 2020 16:37:35 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Pip Cet Cc: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <1742051d-ff33-fe97-d0ee-83f55847d98a@cs.ucla.edu> <87lfl0x9qi.fsf@gmail.com> <785d730e-23b2-dcad-105c-80ac5074b5dc@cs.ucla.edu> <87d06bxmcy.fsf@gmail.com> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <3ade7178-6ea6-f06a-61bf-824589b6eff3@cs.ucla.edu> Date: Sun, 7 Jun 2020 16:37:35 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87d06bxmcy.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 19:37:36 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 23:37:40 -0000 On 6/7/20 2:21 AM, Pip Cet wrote: > Just to be clear: there's no way to unfreeze a string, right? Right. From MAILER-DAEMON Sun Jun 07 19:42:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji4vy-0002ki-BG for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 19:42:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4vw-0002k5-Du for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:42:32 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:53146) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji4vv-0004he-KQ for emacs-devel@gnu.org; Sun, 07 Jun 2020 19:42:32 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 664881600DE; Sun, 7 Jun 2020 16:42:30 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id kPCnf-6myQYf; Sun, 7 Jun 2020 16:42:29 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9697D1600E1; Sun, 7 Jun 2020 16:42:29 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id YvA8JBYmb1lZ; Sun, 7 Jun 2020 16:42:29 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 3F92A1600DE; Sun, 7 Jun 2020 16:42:29 -0700 (PDT) Subject: Re: master f51f963: Fix some side-effecting uses of make-text-button To: Stefan Monnier Cc: Pip Cet , Drew Adams , "Basil L. Contovounesios" , emacs-devel@gnu.org References: <20200604223056.17078.81265@vcs0.savannah.gnu.org> <20200604223058.1850020A26@vcs0.savannah.gnu.org> <87eeqtiy4x.fsf@tcd.ie> <87img51y04.fsf@gmail.com> <5c66eeb5-a513-0443-4316-e41aae118677@cs.ucla.edu> <87img4zjy7.fsf@gmail.com> <170bedfa-7119-4d6a-9d4f-e94ba0f7cc2b@default> <87pnacxbnk.fsf@gmail.com> <205da0f6-2d15-249f-d1e2-ad1ae31002e6@cs.ucla.edu> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <9eea99fd-a77d-8c14-4c8b-a6210da878cf@cs.ucla.edu> Date: Sun, 7 Jun 2020 16:42:28 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/07 19:37:36 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2020 23:42:32 -0000 On 6/7/20 8:24 AM, Stefan Monnier wrote: >> String literals yield constant strings when evaluated. > This seems less obvious. How do you do that? Well, perhaps my terminology wasn't the best. The basic idea is that when 'read' scans a string literal, it yields a constant string rather than a mutable one. Similarly for when you load string literal from an .elc file, or restore a string from a dump where the string came from a string literal, etc. So evaluating a string literal gives you a constant because string literals are self-quoting and they are constants already. From MAILER-DAEMON Sun Jun 07 23:31:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji8Vy-0007kY-Li for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 23:31:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41710) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji8Vx-0007kJ-RY for emacs-devel@gnu.org; Sun, 07 Jun 2020 23:31:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38998) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ji8Vx-0001dV-0B; Sun, 07 Jun 2020 23:31:57 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1ji8Vv-0006Dd-BK; Sun, 07 Jun 2020 23:31:55 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Tomas Hlavaty Cc: eliz@gnu.org, emacs-devel@gnu.org In-Reply-To: <874krns3oo.fsf@logand.com> (message from Tomas Hlavaty on Sun, 07 Jun 2020 10:03:35 +0200) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> <874krns3oo.fsf@logand.com> Message-Id: Date: Sun, 07 Jun 2020 23:31:55 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 03:31:58 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] We certainly should have a pdf-print-buffer. One way would be to call ps-print-buffer and then run ps2pdf. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sun Jun 07 23:32:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji8Vz-0007lk-VC for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 23:31:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji8Vy-0007kM-2R for emacs-devel@gnu.org; Sun, 07 Jun 2020 23:31:58 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38997) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ji8Vu-0001dI-VQ; Sun, 07 Jun 2020 23:31:54 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1ji8Vu-00063q-19; Sun, 07 Jun 2020 23:31:54 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Yuri Khan Cc: juri@linkov.net, tom@logand.com, sb@dod.no, arthur.miller@live.com, emacs-devel@gnu.org In-Reply-To: (message from Yuri Khan on Sun, 7 Jun 2020 14:51:39 +0700) Subject: Re: "Why is emacs so square?" Reply-To: rms@gnu.org References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Message-Id: Date: Sun, 07 Jun 2020 23:31:54 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 03:31:58 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] ISTR that Brave _is_ free software, but has a malfeature. So we would not want to propose its use. I've been misinformed about this before -- we would want someone to check carefully. Someone could make a modified version without that. Does this exist? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sun Jun 07 23:35:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1ji8ZH-0001ZM-Kc for mharc-emacs-devel@gnu.org; Sun, 07 Jun 2020 23:35:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42470) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ji8ZG-0001Xu-Eu for emacs-devel@gnu.org; Sun, 07 Jun 2020 23:35:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39135) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ji8ZG-0002lv-3T; Sun, 07 Jun 2020 23:35:22 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1ji8ZD-0008A8-P6; Sun, 07 Jun 2020 23:35:19 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Philippe Vaucher Cc: emacs-devel@gnu.org In-Reply-To: (message from Philippe Vaucher on Sun, 7 Jun 2020 14:10:27 +0200) Subject: Re: Prefixed manual describe-function and api overview Reply-To: rms@gnu.org References: Message-Id: Date: Sun, 07 Jun 2020 23:35:19 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 03:35:22 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > It is worth a try. Let's see whether users find that helps them > > find the information they are looking for. > > > > To find out whether users find it helpful, we might want to publish it > > and ask users to try it. > Well it is published, You sent mail about it to emacs-devel. That will inform Emacs developers, but only a tiny fraction of the uers. What I mean by "publish it" is to inform lots of users. > > Here's an idea: make describe-function accept topic names as well as function > > names. When the input is a topic name, it would follow up by doing what > > you've implemented. If the minibuffer prompt explains this feature, > > users might discover it on their own. And it won't require a new command. > I see your point but that'd defeat the purpose of the package for me. > I'd type "string" and have to figure out which one is a function and > which one is a topic. I can't follow you there. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Mon Jun 08 01:41:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiAXe-0003Wi-0G for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 01:41:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiAXc-0003Wa-MT for emacs-devel@gnu.org; Mon, 08 Jun 2020 01:41:48 -0400 Received: from logand.com ([37.48.87.44]:57562) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jiAXb-0007PF-NW; Mon, 08 Jun 2020 01:41:48 -0400 Received: by logand.com (Postfix, from userid 1001) id 4F4B71AC31B; Mon, 8 Jun 2020 07:41:44 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) From: Tomas Hlavaty To: Drew Adams , Eli Zaretskii Cc: emacs-devel@gnu.org Subject: RE: "Why is emacs so square?" In-Reply-To: <32d77329-3fba-4c25-b7ae-7ce6e6011244@default> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87zh9hrxfj.fsf@logand.com> <83img4aegz.fsf@gnu.org> <874krns3oo.fsf@logand.com> <8336777y8m.fsf@gnu.org> <87eeqq7d4u.fsf@logand.com> <32d77329-3fba-4c25-b7ae-7ce6e6011244@default> Date: Mon, 08 Jun 2020 07:41:42 +0200 Message-ID: <87bllu6rmx.fsf@logand.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 01:41:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 05:41:48 -0000 Drew Adams writes: >> get-buffer-window returns one buffer or nil. This seems wrong because a >> buffer can be visible on many windows. > > (Typo - it returns one window, not one buffer.) yes, sorry about that >> Is there a function (or trick) which returns all windows, where a >> specified buffer is visible? > > `C-h f get-buffer-window-list' > > (get-buffer-window-list nil nil 'visible) great, thank you! From MAILER-DAEMON Mon Jun 08 02:49:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiBbN-00089O-26 for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 02:49:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiBbL-00089H-Ub for emacs-devel@gnu.org; Mon, 08 Jun 2020 02:49:43 -0400 Received: from mail-yb1-xb32.google.com ([2607:f8b0:4864:20::b32]:42995) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiBbK-0001C9-ON for emacs-devel@gnu.org; Mon, 08 Jun 2020 02:49:43 -0400 Received: by mail-yb1-xb32.google.com with SMTP id t9so8625411ybk.9 for ; Sun, 07 Jun 2020 23:49:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:in-reply-to:references:mime-version:date:message-id:subject:to; bh=/bg+4ubfwvNq3gZB64vLooSrbMn9rXwN5oPxSX/L5e4=; b=JTkJiy8bOtkvVfKdA0zga+02AEwytscQG3qySCX/ncVjvdaqoxCVgcGvrOCc8fw/0U enKcxBnncf3fIp8dEa63jIL7TlmaF77SE8EUqqRRG39C3hHPMXYmWBQK3GBiRMcG35As TZVnpIdQdGrie58j2Wlqf7zdu+8Zm1IaD1KBflLXvL4OuYAko6+K+kj6w7fbMmIT7u1+ LCUvyqEj1Ld/ZvEthljovfpRcn7f+lXhMNCkm8ZJ4t86ZL9s/ueKJPFPa4oocwUaQUP2 u/0IgbB6v5Q2M0AtoHN7J7vXiDPyX3LPOarFRrl8RjwbdXyyavueGIa3ptbmdHfHXksQ A6FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:in-reply-to:references:mime-version:date :message-id:subject:to; bh=/bg+4ubfwvNq3gZB64vLooSrbMn9rXwN5oPxSX/L5e4=; b=gPPQ9IImqKWKUEae2DAGLfRu6N47g9+3gEB+GPmjNyvCepXFuzoC5Kusr1ls4LGunf dN8dmM6S3RHLNP6C+bxGKLS/VrwHaslF8mqobTk5c64tzlE8pk0IAvauWryS1XkX8lYK i8lDTomGIEDV3iPYBvsnk5vsVP/Ua5ULn9lXiQUub2F6i9ThM0W9OWWIUWxzV5jnd1X6 1o8ARFnrWrJp/37z8OakVgLdRm5ZWj8YKrr35mIqkFXrQj6gvig9sZyx5A80h7pptD2L 66qxgfxpY38JRLhmQYT88qsO7mVmkdqVnCl16HBbAdaJMnm/aKODTPCcZOYim9g0Hzy+ U4yA== X-Gm-Message-State: AOAM532kLcx4dlg6UvRH1E5AASs5c/m/3k398I+CMeqA+9EXtxpFicEm CcPfsG1ij7wT5MGb6+XXGgBw90D9g/v2Zk3SMfc= X-Google-Smtp-Source: ABdhPJwp3bZovG29L/bCY0Bw4EO1GxDTitL/VUKxMrn6uJNinNBQVxMRiQOyB8FPyffqnuKSst7BPOKUZjxHd93h3uM= X-Received: by 2002:a25:5306:: with SMTP id h6mr24900876ybb.466.1591598981211; Sun, 07 Jun 2020 23:49:41 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 7 Jun 2020 23:49:40 -0700 From: Stefan Kangas In-Reply-To: <87r1uqo7cq.fsf@tcd.ie> References: <20200607190128.16579.5580@vcs0.savannah.gnu.org> <20200607190130.38C4E20A2E@vcs0.savannah.gnu.org> <87r1uqo7cq.fsf@tcd.ie> MIME-Version: 1.0 Date: Sun, 7 Jun 2020 23:49:40 -0700 Message-ID: Subject: Re: master 80abaea: Use lexical-binding in lunar.el and add tests To: "Basil L. Contovounesios" , emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::b32; envelope-from=stefankangas@gmail.com; helo=mail-yb1-xb32.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 06:49:44 -0000 "Basil L. Contovounesios" writes: > I'm seeing the following test failure: Thanks for pointing this out. > Test lunar-test-phase-list condition: > (ert-test-failed > ((should > (equal > (lunar-phase-list 3 1871) > '...)) > :form > (equal > ((... "9:03pm" 0 "") > (... "11:46pm" 1 "** Eclipse **") > (... "7:20am" 2 "") > (... "10:57pm" 3 "** Eclipse possible **") > (... "12:06pm" 0 "") > (... "4:49pm" 1 "") > (... "3:57pm" 2 "") > (... "7:29am" 3 "") > (... "3:46am" 0 "") > (... "6:02am" 1 "")) > ((... "11:03pm" 0 "") > (... "1:46am" 1 "** Eclipse **") > (... "9:20am" 2 "") > (... "12:57am" 3 "** Eclipse possible **") > (... "2:06pm" 0 "") > (... "6:49pm" 1 "") > (... "5:57pm" 2 "") > (... "9:29am" 3 "") > (... "5:46am" 0 "") > (... "8:02am" 1 ""))) > :value nil :explanation > (list-elt 0 > (list-elt 1 > (arrays-of-different-length 6 7 "9:03pm" "11:03pm" first-mismatch-at 0))))) > FAILED 5/5 lunar-test-phase-list (0.000611 sec) Hmm, so there is a difference of two hours. Yet I attempt to set the timezone like this in the tests: `(let ((calendar-latitude 40.1) (calendar-longitude -88.2) (calendar-location-name "Urbana, IL") (calendar-time-zone -360) (calendar-standard-time-zone-name "CST") (calendar-time-display-form '(12-hours ":" minutes am-pm))) Does anyone see if I'm missing to set something important here? > In case it matters, my time zone is > > (format-time-string "%Z %z") ; => "IST +0100" Here, I have: (format-time-string "%Z %z") ; => "CEST +0200" Which does not make it clearer to me why we have a two hour difference... Best regards, Stefan Kangas From MAILER-DAEMON Mon Jun 08 04:23:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiD4F-0001dw-Gm for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 04:23:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiD4E-0001cq-B5 for emacs-devel@gnu.org; Mon, 08 Jun 2020 04:23:38 -0400 Received: from mout.gmx.net ([212.227.15.15]:47247) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiD4D-0006kU-3s; Mon, 08 Jun 2020 04:23:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591604614; bh=quCjwDSI4jUnH7g696aUnUoKKjbcG7M8/671zVJGhcg=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=HWFpsk5klTeMLE6hrSHtrABYgXwhBX+p86WHuX3RVM2SOn5GXkqbeLD7D8j9RKinl kVDtJUY9U8QUn5oFLvY+nahaf4hoVMNXmFPZ2sQPXhvE1TS9eepU0d7Vu3VsPSy+Tv otVh13rjJ8/mgezwhSOJRDyg5brJeJhZY4OMFjOM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.117.219]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MhD6W-1j50dQ2uJe-00eOia; Mon, 08 Jun 2020 10:23:34 +0200 From: Michael Albinus To: emacs-devel@gnu.org Cc: Glenn Morris Subject: Re: master e42e98e: * test/lisp/net/tramp-tests.el: tramp-crypt-file-name-p not autoloaded. References: <20200607173808.13106.38086@vcs0.savannah.gnu.org> <20200607173810.1649F20A2E@vcs0.savannah.gnu.org> Date: Mon, 08 Jun 2020 10:23:33 +0200 In-Reply-To: <20200607173810.1649F20A2E@vcs0.savannah.gnu.org> (Glenn Morris's message of "Sun, 7 Jun 2020 13:38:09 -0400 (EDT)") Message-ID: <87a71em0e2.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:mYZfYI0mi6FqCnRzxWQiUKEtVZrCLzn7WBNJpzM9+Af1KBf+3DL OADmJRthCFfy94Y7rY6q/P6tPG0L+n8arpPFP8LswZSpH580W6AQhZPNo42R6wNtv/WJ0g3 hp0iBTxTS4iJBsbNl2QZJojH/uWRLwQTJTX3HP8lC0x69WDYsGO5QZVufHSEOg5xWDePnM0 VNmSW9XB7knXBcbyhun/A== X-UI-Out-Filterresults: notjunk:1;V03:K0:Dlj1Yx9g/CA=:G8ivWoNsU0Zs6J+dHGgBHY AVda7wCz7lOAlaDzLvWzSJTkv1BGyD9e3DdIw5saikfE5hCu886K2LrdKjxIHyBWBckwK3ALj EJv3FcNZPy3WNx4LN/RlSjI8Z7q3Yo9jzu8UMfGWwU5WadNSVQam1iY/BLbIhh6Y3S8RAFPcL 9s8bmrCohmwOko+coeY+F3YYY4+QtdgyH2xVcd4qKcSxVSP5U7Nya8a+LxawXlBO+gBSnKhSX aJuQxHJ+eSTkseapXyW40zz8OPzE1rQIF4cYTnkeetoFSOxKvaYLz3Tbukw1b2SwkYbJXP8QQ wiW6R86TXeZIyChEBPVRG3cEKQLgKqwVXLEJJ3apNj5W0hUDsngKN6MJuM8O80wPNiJSCaoFW 1QYFl6uXFy3Cjew76aL2z0W42eGZGphah98wR7CzKdPq5bfywcXNetEWpQj0CauzPVlMlUcCg ogpD96ExEXr1QZFxWvbJ7njhoEO7J+YKQPLTmSGnJkQ3sonuh/SD/rnVTQZN0zj+luPrhzmCZ 3SfI4S1yqP8yrwrwV1PXMXswmDBPO2wemnMbr4Lf8kmjBLoTOv8DN0t4Rg+dhf49OliIK1EQo F3SHqdHy+RMGLpG6rqF00HGNJ43eqVbHMB22ecR6Ql3jMY/HiOo9aHYgC/acTouSToDoEcxmJ Z2l6Bm48JkgQJ4GjStasO1Xo/nqyg89n3UYxFJAcYDIo71XuBl1b3KadzgdNdSWRxGx2lRsa2 mGrf4305DED+39jP4cOQwukw1vuZ6jkKhK6T/bIcglSIepPIDg7sMh7QKgvCSSyS5haFn6E7r NiM7onh8AxKEhq3Wqs7chfphlyiwkB4O9qWhGeh19q4023IiFO2mN6H0ip7HialV+JQaAx/xJ j8m/OYBdY5oSxu9fvx2SYUeSZldmPXzOglIZc7UGM2IphIvJ2th7fuflOk6oQIaisrroG/XNB tTYD4HffhN7JY+CC8sUbl7tIYv3RZ44PYF8gkTHbF2hvdp/m19EIgDajIAPZqzw8Xx/w6yG0d 1to8u12sPBk/AnK+lq7bz4styYvbG6tN8SyishXAmR8UXc+ycH1JJvIwfbLttvMT6XcbaYTPk WqmzySpuv48ss1ZvheIKZPCxIvu4J8+DFntOw6jowhR5Klb/oMU5ZMAs2UD2WFoGr4cxNKM5C PyAQRoI8mPhGaQ2+X1yJZVRLPmeh9lh22DnuHh/EC6yFWK9jvyvCjs9R8DdG+/XFjp7zySXoA SZGfWi6Wr++B9lve8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.15.15; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 04:23:35 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 08:23:38 -0000 rgm@gnu.org (Glenn Morris) writes: Hi Glenn, > diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el > index 7faa409..25faf4e 100644 > --- a/test/lisp/net/tramp-tests.el > +++ b/test/lisp/net/tramp-tests.el > @@ -5595,6 +5595,8 @@ This does not support some special file names." > (string-equal > "docker" (file-remote-p tramp-test-temporary-file-directory 'method)= )) > > +(require 'tramp-crypt) > + > (defun tramp--test-crypt-p () > "Check, whether the remote directory is crypted" > (tramp-crypt-file-name-p tramp-test-temporary-file-directory)) Thanks for the hotfix! I've pushed a patch which ought to fix it like the other Tramp backends. As I wrote in another message, maybe you need to run "make -C lisp autoloads" first, because sometimes Emacs' Makefile doesn't generate tramp-loaddefs.el when it's needed. Best regards, Michael. From MAILER-DAEMON Mon Jun 08 08:26:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiGrZ-0002AS-Er for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 08:26:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39526) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiGrY-00028S-7G for emacs-devel@gnu.org; Mon, 08 Jun 2020 08:26:48 -0400 Received: from mail-ot1-x331.google.com ([2607:f8b0:4864:20::331]:37910) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiGrW-00032x-Kx for emacs-devel@gnu.org; Mon, 08 Jun 2020 08:26:47 -0400 Received: by mail-ot1-x331.google.com with SMTP id n70so976753ota.5 for ; Mon, 08 Jun 2020 05:26:45 -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 :content-transfer-encoding; bh=F0oMstVS60iOj3x3tW86UciDLTeRPkCti0KyT2OvfK4=; b=MqdPVi8XtvfgGPrzlhrX1DY1b9P64WTSDu0dwGLS2tyV/JnmmxFaH2f8ArjUEiBHuc UKk11KLhxgPOQlyTz1JG9yYstB2z2LeBa26P27JyCUtbfgTg+FbXlxwLuF2Ep2JpPQDc HKZ3EYRwY5wtNIduqxrn2NKFtRGCagVAjS4yAcYzqgVENsL790WD2XYLiNWBdYdz1dSu tFlxjirs5f1mqCkV7KDUgsyJq6OfbwSg+HgS7gsARazN32+Ux4kHVHLROpbpeAkF8B/c OHuV0cFDLwfVvWEdysST7dPpwNAO+yVmvc92SsMnA5gb7qQO5PVyeekfnFedRdCP/hvn eDRw== 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:content-transfer-encoding; bh=F0oMstVS60iOj3x3tW86UciDLTeRPkCti0KyT2OvfK4=; b=gJzrAaSKOgRkC8xYScpbwByPtf/uFhbhKQXmVcykZjay/bSzwDXtRfusyHs+k4Q8gs HpH0KFrsDHKec+jU6UJht5u/6yzfxhE9uhYfw6xwzvX+HsZ8jVf7Q6uOv4I1iOE6pi6C 7fGGKFQkh122fHLJ6V++J71Whr9SQldUwd6LvvLUi7CZ6XdJqo65aGnkTz4dm0RgbiUr BpPxZLKOpRCbGZJwvgHpJKt2o5193LVii5tbAXmu1b9PlcLHI7BH1kFjfuuM1eqJ09CR HgDHsyWAm4tm2yjUiZp3AY2gbravd6xsHemAl4MWsELqdpBxOteRp9s/amGnPxK0VD4H YfQg== X-Gm-Message-State: AOAM5319XTczX4THmUREpjr9d4FgIyOJgurlunFGlaGfC7yQsViNgCQu e63TW6/0eWYk978F4GtLRFB6Ze+zfR6LYoDosyovnV/Drn8= X-Google-Smtp-Source: ABdhPJzETWq17qHjULyNhDVTgSLnfo93jQ6CJEiOw6DFsI9JQSRdTgLi/05vG2CD1Di3ftO7/PKsSOsfLnDEoj+EAEw= X-Received: by 2002:a9d:6a44:: with SMTP id h4mr17831274otn.287.1591619204871; Mon, 08 Jun 2020 05:26:44 -0700 (PDT) MIME-Version: 1.0 References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> In-Reply-To: <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> From: Pip Cet Date: Mon, 8 Jun 2020 12:26:08 +0000 Message-ID: Subject: Re: master 64e25cd: More robust NS hex colour string parsing To: emacs-devel@gnu.org, =?UTF-8?Q?Mattias_Engdeg=C3=A5rd?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::331; envelope-from=pipcet@gmail.com; helo=mail-ot1-x331.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 12:26:48 -0000 On Mon, Jun 8, 2020 at 12:07 PM Mattias Engdeg=C3=A5rd wrote: > branch: master > commit 64e25cde324b2e270acf82958abb59018e67f841 > Author: Mattias Engdeg=C3=A5rd > Commit: Mattias Engdeg=C3=A5rd > > More robust NS hex colour string parsing > > Invalid arguments to color-values, such as "#abcdefg" or "#1234", or > valid ones like "#111222333", should not yield nonsense values. > > * src/nsterm.m (ns_get_color): > Only accept "#RGB" strings with 1-4 digits per components, equal numb= er > of digits each, and no trailing characters. Parse 12-bit colours > correctly. > --- > src/nsterm.m | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/src/nsterm.m b/src/nsterm.m > index 1953138..3dc7e1d 100644 > --- a/src/nsterm.m > +++ b/src/nsterm.m > @@ -2399,20 +2399,23 @@ ns_get_color (const char *name, NSColor **col) > scaling =3D (snprintf (hex, sizeof hex, "%s", name + 4) - 2) / 3; > else if (name[0] =3D=3D '#') /* An old X11 format; convert to n= ewer */ > { > - int len =3D (strlen(name) - 1); > - int start =3D (len % 3 =3D=3D 0) ? 1 : len / 4 + 1; > - int i; > - scaling =3D strlen(name+start) / 3; > - for (i =3D 0; i < 3; i++) > - sprintf (hex + i * (scaling + 1), "%.*s/", scaling, > - name + start + i * scaling); > - hex[3 * (scaling + 1) - 1] =3D '\0'; > + int len =3D 0; > + while (isxdigit (name[len + 1])) > + len++; > + if (name[len + 1] =3D=3D '\0' && len >=3D 1 && len <=3D 12 && len = % 3 =3D=3D 0) > + { > + scaling =3D len / 3; > + for (int i =3D 0; i < 3; i++) > + sprintf (hex + i * (scaling + 1), "%.*s/", scaling, > + name + 1 + i * scaling); > + hex[3 * (scaling + 1) - 1] =3D '\0'; > + } > } I believe there's very similar code for the X case, where we also translate #fff to rgb:f/f/f. That code has annoyed me lately by producing nonsensical GCC warnings, maybe you'd like to replace it with yours? Having two different versions of this seems superfluous (I'm not doubting the correctness of your version, which I guess means I'm doubting that of mine). From MAILER-DAEMON Mon Jun 08 08:42:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiH6g-0007tK-TS for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 08:42:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiH6e-0007t9-Pm for emacs-devel@gnu.org; Mon, 08 Jun 2020 08:42:24 -0400 Received: from mail.hostpark.net ([212.243.197.30]:39218) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiH6d-0005dT-Rz; Mon, 08 Jun 2020 08:42:24 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.hostpark.net (Postfix) with ESMTP id 9D6E316593; Mon, 8 Jun 2020 14:42:18 +0200 (CEST) X-Virus-Scanned: by Hostpark/NetZone Mailprotection at hostpark.net Received: from mail.hostpark.net ([127.0.0.1]) by localhost (mail1.hostpark.net [127.0.0.1]) (amavisd-new, port 10124) with ESMTP id AWaz9gm5oz4m; Mon, 8 Jun 2020 14:42:18 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.hostpark.net (Postfix) with ESMTPSA id 2539E164A9; Mon, 8 Jun 2020 14:42:18 +0200 (CEST) From: Jonas Bernoulli To: "Basil L. Contovounesios" , Eli Zaretskii Cc: monnier@iro.umontreal.ca, johnw@gnu.org, emacs-devel@gnu.org Subject: Re: Un-deprecating oset In-Reply-To: <87lfl0jgay.fsf@tcd.ie> References: <87eery1xhe.fsf@bernoul.li> <87a72d42h2.fsf@bernoul.li> <87a726tg3c.fsf@bernoul.li> <877dx1rt78.fsf@bernoul.li> <83zh9wujkx.fsf@gnu.org> <83sgfougls.fsf@gnu.org> <874krsxn48.fsf@tcd.ie> <87img8ulmu.fsf@tcd.ie> <837dwkabjw.fsf@gnu.org> <87lfl0jgay.fsf@tcd.ie> Date: Mon, 08 Jun 2020 14:42:17 +0200 Message-ID: <87eeqpzq3a.fsf@bernoul.li> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=212.243.197.30; envelope-from=jonas@bernoul.li; helo=mail.hostpark.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 08:42:18 X-ACL-Warn: Detected OS = ??? 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 12:42:25 -0000 Thanks again! From MAILER-DAEMON Mon Jun 08 10:42:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiIz6-0000BS-9A for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 10:42:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiIz4-0000Au-IW for emacs-devel@gnu.org; Mon, 08 Jun 2020 10:42:42 -0400 Received: from mout.web.de ([212.227.15.14]:41031) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiIz3-0008MU-8v for emacs-devel@gnu.org; Mon, 08 Jun 2020 10:42:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591627357; bh=EfaAGYRxryF9pIm4d0IRa7lnd37J08Q+/Ex76hRbnbg=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=lL6SxtaUZxwWL2BMnJFsYM8PD/WwlvLVdSFI7zNG6tWtLzP0aj5wNa9Dt4fjdktJR Fu/XaqJOKTnNt5FtZRJe5tm35SBidX9oWMJTyYxkUhCQYIh2KxloG5ksNdFKqpQJsR 6xIp/c3rsbDlq0H81AXFTi/jpNdXSDsZcTrZkpbI= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MNtP9-1jbRDi15XH-007WWp; Mon, 08 Jun 2020 16:42:37 +0200 From: Michael Heerdegen To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> Date: Mon, 08 Jun 2020 16:42:36 +0200 In-Reply-To: <87mu5e3ncg.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 07 Jun 2020 16:30:23 +0100") Message-ID: <87tuzlwrdv.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:qcEkXb+iAcD2KYupOk2buZKlFfXSQ9gHbDlX5J2rp6IOzBZUyDZ 5YgnhiMOgo5igOtIVwuH/9NSzgOYgTAVnRPpjDT9b1+o2H+lb2bg6IUvUdH5wNfl9SSwsK2 bDdWzDVmkVmg3gSHTPJHh+Hw2HH3dH79PoPmO2/vbTFUt7f60Q6QC/B0M5Cz9/qlP3lisyO 32wxLm8FkmGSqLHJQ2n9g== X-UI-Out-Filterresults: notjunk:1;V03:K0:NGtVQM2a3xQ=:6KeYLQ87yzeP7WLztpyJWN WMHWIEQ7oxOXvyhMB81820pFRyFlW1eGXfMBUr0vkggX/38di+c9cD3L5hH0K/jaXV/Pf4h6+ tgtL0xjNO707jeDcVUXkJi55Ol9wAjETvwWkNgaq3FY64Psp9T7dZ1eaxuLqt7b4ER8vYWZ3e YJk5WKHDPql43Mwd46Znyuipx42dUUrQF/ok9zlf2DUgHynG+y/r+znZ7f6vabPyBke0G+GQY Z8t6DahK333FETcCNNx2WDmm6vQ+J1SVUPKM0nk8W3D2WwMzgTtCOyHRyZtKbN3ocFjTa7jZ7 OvhDNinIcvUGAt6TRgGAI8k7LJfYma6Q2Kti2cFIHEPmEPbcr4vGTEAK+7afRbqlGwLOQmUag y2XOfxH/3dNXvoO58aUt2EeSLWOvRIK6MuvCna2HHnfzYIM/48RNrcuTZeMHeIn8J2cD/Kwa2 Ff8eFYK7+MMDZCV9vxVrgyRNCFZt7jWTkggVKQX+749ovI30G3fdb/mTnrIt4YmFRsjbJ3Y0D Cwkhq/KuMR6NIYx7rLeHICxiTfiktOmnKo4UFlbJNMJo7QKibhdocSsCoGYnJSE/OD1WF+IPM r28a2hpDJkEQZsc5v9DkoYd8SsetfsSBrcDd1/Uho0fIJBp/Owl7vDgtwB+L7MmeJ9WF68f7I 7QFGmb5RIeY9AH4DFTp0HUntSsTqCJREzfLZl55WPQJXL3b5SeoSKEESRTH0InzP3WSnemjzk VRRZ/Ox3aVbd7mF628dyQnbfJ3LZLbzOUcFgEkeemg9SchVpdRabQxwoY3MlXTBK72OZQ6jZU a8/I9fRjeX5nPO+HNXBtEZDfLdFlu1piGhcJcOZnIogRkZiGSmBY0whwDDl+EvZlOG3arzPJg FMOsHU9ZPo0r01VVASuiJhfUhWNLO2IpyOR8fnDOJOpn2xirs5zBrDUCbeP8HpgOcTz5yE3o3 z7wHIAu7HBPrAalzPOQ0VaGLopQZdAQj+uh/CaV//Ml87EpKmwnpakTWJyZKmvDKSclCyV9fL eu4xFOLslF4sLmbalVRHH2fwU5tp/1C60IpjgLLQPVHQYRrSmb+FvRhHo+A7wfocGwUy3ha6B 24txyOfU2OidXGMESX2meGoNYcmGnzs/NA+0H3/yrnzYoUWz4buOwhbzcdaH1rUJTsM/lNNi8 MOFyfflKrTC/0ybEm7xHiUZ1WnYYCU2PvbpO9gBUV5+JNAzwTUMwxgizqkZdUcmSM5aKHBqxm kQ97ewcaqVqXChTTAgQS5xFqS++pxoFaDEJpNLw== Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.15.14; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 10:42:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 14:42:42 -0000 "Basil L. Contovounesios" writes: > > +(defcustom bookmark-eww-browse-url-function #'eww-browse-url > > + "Doc..." > > + :type '(choice > > + (function-item eww-browse-url :doc "Use eww") > > + (const :tag "Use value of `browse-url-browser-function'" ni= l) > > + function)) > > Isn't it strange having a boookmark-... variable defined in eww.el? Yes. OTOH I wanted to avoid the risk of confusion with eww bookmarks and not call it "eww-bookmark-...". Suggestions? > > +(defun eww--bookmark-title (title-string) > > + (replace-regexp-in-string > > + "\\` +\\| +\\'" "" > > + (replace-regexp-in-string "[\n\t\r]" " " title-string))) > > Is the outer replace-regexp-in-string doing the same as string-trim? Is it? I didn't touch that code, I only moved it for factoring. > > +(defun eww-bookmark-make-record () > > + "Create an emacs bookmark record > ^^^^^ > Capitalize Done. > > for an eww buffer. > > ^^^ > > Upcase Is it ok to leave it downcased? Thanks, Michael. From MAILER-DAEMON Mon Jun 08 10:50:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiJ6A-00057Q-Mm for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 10:50:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57542) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiJ68-00055k-Fo for emacs-devel@gnu.org; Mon, 08 Jun 2020 10:50:00 -0400 Received: from mout.web.de ([212.227.17.11]:56201) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiJ67-00018p-An for emacs-devel@gnu.org; Mon, 08 Jun 2020 10:50:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591627796; bh=fz/9uhZTXoCBEaltHoYEOYBcrWG1qAd3xibsllTtolU=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=DRNJ9haDzFrMlMAsgwCXTRoXp+n1DkQcyBYM+xrWebJJAg7cNRap7VKfkn6j/HABI mVHZIXin3gYYhivXG0SBml3R/VQHzzJGvXlihMM8CtKTDNy8AC91+w2cFkpfNW35jl wCJmJ+t8oH/q8bHL3gf0vDxOXWFLO83Yf2pBPsKM= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MRF3W-1jL7wG0zci-00NN6p; Mon, 08 Jun 2020 16:49:56 +0200 From: Michael Heerdegen To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87img2c0rv.fsf@web.de> <87img220r7.fsf@tcd.ie> Date: Mon, 08 Jun 2020 16:49:55 +0200 In-Reply-To: <87img220r7.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 07 Jun 2020 19:23:40 +0100") Message-ID: <87pna9wr1o.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:9fbt5JvknTtRoERMV8ihnowZS3Q9Z687aIGJO9lzPB+wPI7Isf9 7bv6cfs4WRprQ4Xo+ojI3fGurNuy74TErusIlasBHAjT4K7abM6k60xPX1iYK2GskQHGmVJ ruP4sE3ygYH0xt2xLR383zet74f5ke3sacYMbG/V579UONOMqXyJIwdeNamwwOtUtHm0Sme 4rX1yiXPVAUfa1BTKbdsQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:XxyD0NGeO2E=:sf3epT4vN7jdZ0Be4sM9ca QPGkYjYhq5FcQfUIGq7WP9r8/MRwh5C0S11AmWe1IB+FYR7YUyPmjGq3rpl++ujKpITQF+ZJF piBraNROdmf2T7kiRK35Ff8lPgI4Pt5UEXmaVn/W1hjX8JSruyipIn205ypWzNjvTkwWkGDxQ py4VPOMyG/c90w0AjDgBM9Br8fcyef/IhksiLsJlalkkg6o9TWHdbFzDnklpEECShXg+SdzGo xoVhEFRoELaR0S/6FK8lqrjvbMz0ThZYWokA7V5A7UE9SCkLo0g5+RfPUcZTGDFs/mXeoC1lh l7xNGcuTfLW3JVJYHB1hykJ7WSjEZ19jvXUK6DcV0btn1kLPDsCSXrxfOfKfYiadiUFS7ck4c kp2wpGeeUuT62F8xfYzreuR3gQieOQ9wtcPX0Q6PvKwhItKNKW7I3O74OQneWEEC3BTbB4Eo9 1rVgBaX3enFKjlGGUrHzXeyHKK9Fbp1undTK5nKwaU7wz5jocZPx9nx4ZU2DYS4Sq6noiD7iF rrkifCRtDisksSgb9o0kI1U794Wuk07YaF7tjUNaWHZKEEeP/Sz/wJm7h6WCPMIFB6w4lLMzG rCjEN6UjCMYt1LDdeuGUOCFVrom1Z8x54y2vLiXNAL8oehOFhoBMh5bh7GXO58qCiYPYe4iOn akrkjmvbkZ3pfGuSj5b41MJfnNtwomdqACjHA/qyTzWQh4hqIfZS2ewqqcKiUcM0ODgGleI7s p8DtqZ+MayAAJ2A+m5PZGEOyblwcbU+CzIBAyngNjHqQy/Bisn1Nw3r+KPppO/84TVmrvfCKU 2QTza8BMwo/dWznhig1yHYU8AkfeFjJMDEIJQY/I636wYEYtOHk4+ffzGTocdsB/ho0TTFDGG qKscDV/qB+JuP3rMchdYtJQ33UCAA1Wqo2rQh3Irx6tBUqy37MF3MRlS/Vnz5TMRhfRC8Kcl5 5NACCI0J1P3x2F8elVFJXq59i2jLnn9xIGyipiHsMccH5Ufr/mb+4b322uy6GGA2GSalU42ub ZEtmNeMPt9YYridXksXYUGehZMtHiM+Mwtaet44CflDk1poYGc+9JwrxsxOR85Y455WNl7r0l fKJTs5vrSlkBFqdHtUulh12ZPApuN3SHWzXraN3iZVXpHj/De6udk+kruHCyBGNWIHMZGol9w +T2r1+X3GehVVMtlzp4PpZFdrRds4/FXQU6euu8LTAupLKgubK1npDjpQoMriiv3JRhcReGjT 5wcn8YtkUziuDV3pZ Received-SPF: pass client-ip=212.227.17.11; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 10:49:57 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 14:50:01 -0000 "Basil L. Contovounesios" writes: > > Yes, I know about the hook. But just binding it will not be enough > > because the binding will be gone when it is consulted. We would have to > > add a self-removing function at least to the local binding of the hook. > > That's what I would call a hack. > > Why? It's what minibuffer-with-setup-hook does, for example. That can use `unwind-protect' because it has not to wait an undefined period of time (until the page has been retrieved asynchronously). So we would have to consider what could happen if the user aborts loading the page, the url can't be retrieved, there is an intermediate error, and such. That's why I think using the callback of `url-retrieve' would be better/cleaner. Michael. From MAILER-DAEMON Mon Jun 08 12:15:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiKQe-00086x-Ha for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 12:15:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiKQW-00083P-O7 for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:15:10 -0400 Received: from mail239c50.megamailservers.eu ([91.136.10.249]:46640 helo=mail56c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiKQU-00029T-Ti for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:15:08 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591632903; bh=HbITecMvl7Gvm3UYEHeTj38H91C+dwFl4NVhgHNvWn0=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=epMJdW7uqzPdHsrThWfOApv45SXFcynHvAc+p/mVy2qYzrP78X008ULL8dcih+/pL HdNpJT4q2+IG7Vkedc8JIC7fvjNRYGVbSCb5dcJpDVU64Ypo0D0aDtUxZgjqzZ1QSt rcOQIdbAX0HUp51hiOlZQAqAH94f6QQ/96g77oK4= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail56c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 058GF0A8010922; Mon, 8 Jun 2020 16:15:02 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: Date: Mon, 8 Jun 2020 18:15:00 +0200 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> To: Pip Cet X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F17.5EDE638F.008B:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=UqsdyN4B c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=ZEvRb3mWdAbgCnYlOFwA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.10.249; envelope-from=mattiase@acm.org; helo=mail56c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 12:15:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 16:15:10 -0000 8 juni 2020 kl. 14.26 skrev Pip Cet : > I believe there's very similar code for the X case, where we also > translate #fff to rgb:f/f/f. That code has annoyed me lately by > producing nonsensical GCC warnings, maybe you'd like to replace it > with yours? Having two different versions of this seems superfluous Thought crossed my mind too. I'm not sure if it makes sense to share the = code that transforms #RRGGBB to rgb:RR/GG/BB; it's not a very natural = abstraction, and just why are we doing this string transformation step = in the first place. The X11 backend does it so that it can use Xlib for the rest, which is a = dubious saving since the string-munging code isn't much simpler than = what would be needed to parse the original string to RGB values right = away. The Windows code looks more robust, except that it appears to apply a = funny numeric conversion for 4, 12 and 16 bits/colour. It doesn't look = quite right at all. We should probably have a single, correct parser for the numeric colour = strings #RGB, rgb:R/G/B, and rgbi:R/G/B instead of three subtly broken = ones. X11 and NS additionally have their own formats that I suppose we = need to retain for compatibility. From MAILER-DAEMON Mon Jun 08 12:54:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiL2X-0000Au-Lt for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 12:54:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44954) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiL2T-00009w-Vy for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:54:22 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:43777) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiL2S-0000do-TM for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:54:21 -0400 Received: by mail-wr1-x42b.google.com with SMTP id l10so18169756wrr.10 for ; Mon, 08 Jun 2020 09:54:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=/5lCz7MMy6BUY94dfTz04IDQLUQc72zMkZVimokkxlQ=; b=NEZuouE2dLxLIyxz64+6oLgRkOZ+sICY0LNdmz1I6xb0uTeL9Jfq2Vv7uiehocbltH I1Ac1NKUlDVlrqWnI5PVzsWRElonRdr2QZMrwnF6XfBQnS/Li3X8S7zZ6/k5SHw078xi AtqNOWTVKuuLQvH4Z1DWt/E1t2uO85qxJ6GdqVVDoBu3yyOckR/Wj9ptKbh7pnxMwlee FYSeZjhwVWYIuKl439SBhW3JE44uEJ+bPMqlHblzfOdBVQGBSr8wOddpQ0i7jVsOC1Cs QWyGfxbQkacmU1dyVhDLlEFm18ilaizdFj5UKPy7sfwPBEmTqHiVbh34wJ3aEauz17Cs J5tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=/5lCz7MMy6BUY94dfTz04IDQLUQc72zMkZVimokkxlQ=; b=hyFE/9YWKqhVRPhPRDuKwg0xNTuM5o0th/Isefr99k5kX34wXJiSnpuOM85SnKSvw1 hlnZsSeOumWVbS34rBraxn7SrW6e0DuMgtiSyYZzZ6sVR4tI0mPS0Ji31OCm3I9v2fv2 /eKDVGb9Cp8hA8xu70qjhwO0Si0nT3iRo4AbiGa0gwYfBCkx/MoRgJliH9zV/chtp5ww 1kVH0KoyMYVJUml55qqz2Xy7J4ya9x+i73sAOzhMtRE/nLJCfxGLdWA6R1hTmpG8+LQE +OZyNXzMfmKasO+cGOvC1GcUP2u3qPeWWKnWla06VxbfcT2/kdnV9dVltMA1oeloe2/Q d2KA== X-Gm-Message-State: AOAM533Z39C6Au6yYckoA142HRC5QvXdqEp82yb5pJqjJU0ARb8KqXAT yyDkqxLsdUoxLQS3GFyDZAPYog== X-Google-Smtp-Source: ABdhPJxyJkr4OYp0pCh1PyM2zRFYIR1rStRkfQjD+2EC+5GeEknRBFtMrPT2bQqTDsOcN109hrfsnw== X-Received: by 2002:a5d:4286:: with SMTP id k6mr23591781wrq.140.1591635259008; Mon, 08 Jun 2020 09:54:19 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id d9sm316194wre.28.2020.06.08.09.54.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2020 09:54:17 -0700 (PDT) From: "Basil L. Contovounesios" To: Michael Heerdegen Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87img2c0rv.fsf@web.de> <87img220r7.fsf@tcd.ie> <87pna9wr1o.fsf@web.de> Date: Mon, 08 Jun 2020 17:54:16 +0100 In-Reply-To: <87pna9wr1o.fsf@web.de> (Michael Heerdegen's message of "Mon, 08 Jun 2020 16:49:55 +0200") Message-ID: <87mu5d1osn.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42b; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42b.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 16:54:23 -0000 Michael Heerdegen writes: > "Basil L. Contovounesios" writes: > >> > Yes, I know about the hook. But just binding it will not be enough >> > because the binding will be gone when it is consulted. We would have to >> > add a self-removing function at least to the local binding of the hook. >> > That's what I would call a hack. >> >> Why? It's what minibuffer-with-setup-hook does, for example. > > That can use `unwind-protect' because it has not to wait an undefined > period of time (until the page has been retrieved asynchronously). > > So we would have to consider what could happen if the user aborts > loading the page, the url can't be retrieved, there is an intermediate > error, and such. That's why I think using the callback of > `url-retrieve' would be better/cleaner. Could you store the desired callback or other values in eww-data? -- Basil From MAILER-DAEMON Mon Jun 08 12:58:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiL6R-0006zR-OW for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 12:58:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiL6P-0006vj-Tn for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:58:25 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:53075) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiL6P-0001dF-4z for emacs-devel@gnu.org; Mon, 08 Jun 2020 12:58:25 -0400 Received: by mail-wm1-x334.google.com with SMTP id r9so216889wmh.2 for ; Mon, 08 Jun 2020 09:58:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=JN/m/WQVuhTi+uVbVHtJ2iIP4d4i0XjUxEfp2ElmhuI=; b=AhpnFMsjgqlVvzAP0kSey7SBA+f/mEQAuZsDlSzBKFsbjErrPppnYKf3XUqrHSDOs4 HVc8pNCL3IW2q4atxXpDVRL0+7gQdLIwcGzOxtEcDgTIXEcDboSy7y2xcp6jIGYt4tId TZHrs9+xfz0hQ714FOLeigAsKVvffjKfzhzjn0nbgu9XdinjjqYpuesaREe8thZwoVrH n3VxlJeJH4KJSXoio/CLO4Hb8P9PYD9tvdkyXVtLlvtKKoVJpKjQEadmKbLGmZfWmE5l 1URAvqJfQDRE/BwmRKpvQn8W4X6cILa94vAnV8rkFketw2GYhYWRpoG195tsRt15doKq A6Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=JN/m/WQVuhTi+uVbVHtJ2iIP4d4i0XjUxEfp2ElmhuI=; b=V6GIf8fmLunourX3wJaOW9+u3NNYqfc1lu1re8Z1KKztz+VdKrTIASFlnqTOVD6vM0 4BzwiMOEAiQ9nlNgBto73P1PU87oPWpwn/BRM2ycyu49pkmfwx/Es5il9RKB1sOrFrUC hdv2Vyz2ok+AE0SZFisQ4N57jI8ugz5uAwxJecHJbl1kdfaMK4Fiy9IxuFNFQRQ6xiW9 RCasgJ+65vy0B/I/rFFV2SiL9/qzS81EhOtzSZNVDKOAGLyE+f4Fdpn6AlplwXAUyiV+ UL7Z2qpussq/ZRHSlYrUKbAJUowjCM25T2UsbnNlDDet/ZDU2K3PK1m7Jt5L3PfpWRdL O/hQ== X-Gm-Message-State: AOAM533pCTIXLMOfklVPM75fyNHpCi8ZBuEe0znoW5tQf3Gkfi7+qoEu LiaHe0rXXMKHdeMpVFY3jIx78g== X-Google-Smtp-Source: ABdhPJys9k+syD/GVHiiLH6n5FUL9lhG3bbCH30C6E0YdhGWkXbFkVffTRhdm5992n6vVtc5bDs/4g== X-Received: by 2002:a1c:9dc7:: with SMTP id g190mr259906wme.129.1591635502537; Mon, 08 Jun 2020 09:58:22 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id s7sm306551wrr.60.2020.06.08.09.58.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2020 09:58:22 -0700 (PDT) From: "Basil L. Contovounesios" To: Michael Heerdegen Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87tuzlwrdv.fsf@web.de> Date: Mon, 08 Jun 2020 17:58:21 +0100 In-Reply-To: <87tuzlwrdv.fsf@web.de> (Michael Heerdegen's message of "Mon, 08 Jun 2020 16:42:36 +0200") Message-ID: <87bllt1olu.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::334; envelope-from=contovob@tcd.ie; helo=mail-wm1-x334.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 16:58:26 -0000 Michael Heerdegen writes: > "Basil L. Contovounesios" writes: > >> > +(defcustom bookmark-eww-browse-url-function #'eww-browse-url >> > + "Doc..." >> > + :type '(choice >> > + (function-item eww-browse-url :doc "Use eww") >> > + (const :tag "Use value of `browse-url-browser-function'" nil) >> > + function)) >> >> Isn't it strange having a boookmark-... variable defined in eww.el? > > Yes. OTOH I wanted to avoid the risk of confusion with eww bookmarks > and not call it "eww-bookmark-...". Suggestions? Is the proposed bookmark.el support not meant to supersede EWW's current bookmark system? Anyway, what about eww-browse-bookmark-function? >> > +(defun eww--bookmark-title (title-string) >> > + (replace-regexp-in-string >> > + "\\` +\\| +\\'" "" >> > + (replace-regexp-in-string "[\n\t\r]" " " title-string))) >> >> Is the outer replace-regexp-in-string doing the same as string-trim? > > Is it? I didn't touch that code, I only moved it for factoring. That's what it looks like to me, but you can obviously leave it alone for now. >> > +(defun eww-bookmark-make-record () >> > + "Create an emacs bookmark record >> ^^^^^ >> Capitalize > > Done. > >> > for an eww buffer. >> > ^^^ >> > Upcase > > Is it ok to leave it downcased? That's what Lars asked for, so yes. -- Basil From MAILER-DAEMON Mon Jun 08 13:37:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiLiY-0004VQ-KZ for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 13:37:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiLiV-0004TM-MX for emacs-devel@gnu.org; Mon, 08 Jun 2020 13:37:48 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:38541) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiLiU-0000Kx-Pd for emacs-devel@gnu.org; Mon, 08 Jun 2020 13:37:47 -0400 Received: by mail-pj1-x1029.google.com with SMTP id d6so133739pjs.3 for ; Mon, 08 Jun 2020 10:37:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=AzFCjqXtkifkQZk1Wp2AkwywkJAhYGSBRjjWEGrZGhg=; b=cNv38q8gbho9v/KUe6ysRA6h7WVfEppGT8hkuGELHPIOcdBEBxQ0sW3/qsyeLK40dp xdh8xxUrhFeB7oF7lkZnLxoDNWWj02oq/4Dr+H//u7YfVoF4D+nxlYcaKT2MAvHd7ndM rxjay934CT5hHX3YLp7uKML9cHJnVgfgfkUEBDqCe+/6HgUI2+ttz2S/J838j4G8c3d5 oG1XoY57k8Y8UXQGtBtdprcoCFP6gbf0G0PhHiuxIODOKpkU8U8Mknk3ni1dRSZ6wiAY H9dXTkZgqG85psL0HLgpcH6I2FSOQAkISeucIojmD92oeNq7FbgXFyb19hdAk88qQV9L a3cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=AzFCjqXtkifkQZk1Wp2AkwywkJAhYGSBRjjWEGrZGhg=; b=ZCfRAS1QwnfTdvZ8ZeK/iPWkUob1Pt36TUc57i+9Unb5jMFiS7CWYr32SIKqAFgIju aAmKbR9/H0DXd7gKhGEnVnXz7n5okWAzMd2IUpUmYtOjZYcjRAm8YFanA0DRuxZvl9Sq YOI1Q8mTTVD8oocdNeQHdou40WtsnHubXQoV0sENdKVRVYCmFrNYL5R/hPRUb/4On9Rt rgevU6iPLk+5cEUq8k8J6hAmRRLXqZ+9oqLfjv8UtjKblUjb5xwsnEEem0zn6QQb/6c9 ylL8n6hcfzwRVYzSmYkKMh3KCPr6njm1QAgwSFdbyoW7wMFMdjAIADPQ3wT6T6AkTnDi f1dQ== X-Gm-Message-State: AOAM530eGkb7Yhs+NFoTKsA2GJcqhpppyqeoNn5wIhbFQVrGBwiaT112 AVj20+0TCXZa5tXbECnffynbLQ== X-Google-Smtp-Source: ABdhPJzmSgCpnj5tLkwEllRCn7w1cFm1JeDQYilOb8QoB2GsNOr8MsXxTj4yABA5WrbycMlnr7mArg== X-Received: by 2002:a17:902:8c84:: with SMTP id t4mr17005529plo.315.1591637862524; Mon, 08 Jun 2020 10:37:42 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id w73sm7981241pfd.113.2020.06.08.10.37.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2020 10:37:40 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id 5E18DC21323; Mon, 8 Jun 2020 10:37:39 -0700 (PDT) From: "T.V Raman" To: Richard Stallman Cc: ams@gnu.org (Alfred M. Szmidt), andreas.roehler@online.de, emacs-devel@gnu.org, kfogel@red-bean.com, excalamus@tutanota.com, philip@warpmail.net, drew.adams@oracle.com Subject: REmacs was Re: GNU Emacs raison d'etre References: <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <87lflcg0k9.fsf@red-bean.com> <0f1cd319-fa8c-4453-b909-fdd36f337906@default> <87zh9scdf8.fsf@warpmail.net> Date: Mon, 08 Jun 2020 10:37:39 -0700 In-Reply-To: (Richard Stallman's message of "Sun, 31 May 2020 03:07:14 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=raman@google.com; helo=mail-pj1-x1029.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: -175 X-Spam_score: -17.6 X-Spam_bar: ----------------- X-Spam_report: (-17.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 17:37:48 -0000 The "Why emacs" section in the remacs project README is one of the best articulations I've read recently of the goodness that Emacs' embodies. https://github.com/remacs/remacs Richard Stallman writes: s> [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > I suspect there is no deep meaning behind it, the BEL was common way > > back then to mean abort, or alert. TECO and DDT both used C-g for > > abort, > > Are you confident of that? I don't remember, but if your memory is > clear, that is probably the reason. -- From MAILER-DAEMON Mon Jun 08 13:49:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiLu8-0001RR-SE for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 13:49:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiLu5-0001Pw-Vb for emacs-devel@gnu.org; Mon, 08 Jun 2020 13:49:45 -0400 Received: from sonic302-3.consmr.mail.bf2.yahoo.com ([74.6.135.42]:44411) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiLu4-0002Ds-8C for emacs-devel@gnu.org; Mon, 08 Jun 2020 13:49:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591638581; bh=yjRb9qhq4CoMhYNhN8uG6nFInD5W2Jl4A+gxJNM/iJ0=; h=Date:From:Reply-To:To:Subject:References:From:Subject; b=BF6M/O0gRrsMQUB2jOcFjEXppS3dt7gss3X3JhPpshNfLScujeGsxbqzO4Um1Y4+5KQMJjIXHhj8xnjbaFl+34zY06KSufYLxyra1fxzwf/MxBYhC70NWd02Ss3Kzzu+pf4CaGCsJXSgwMeHdEbdL3KEDO5pYviKoX9PC+U7dXmDz6/aGQ3gxUrbw9y6H1rpbRQHGf7IQmLgzwosf7tezddV+1SwDzDaCxcGV6Xx8fo1Tt2QWMcWwimWIiGVfTcPNZo0KrIBtezUS7UTqQlyNHMbRH7SMN1LFw0d8WynySmrZ+CZk0d5aZv69xWZfS8UG3VoIahsNCFD4MSADG144g== X-YMail-OSG: rS.FtOUVM1nzM9IiseT5LNxSmCtwi6NLWEZgAzo.8TD85LMbZQ8S2U9h2yeu_Pk 8NwilfwJfOLjfZSY7zCtEefZfg6fFs8eTvfEQY31ib9dbHav9mrMHvPf.Fv.G8lQwt_k5lA5eImt agUwDSaFbXrKV0yNYFIj3eL9nEC.uODC0GNlTmLuWbGJmKefw9z40rMG72QtTC.eIkgyz40B5E0Z sBzb6KWYWe.8hYjqdfTMebQcADrF1CwzWxmqDPBcUNRmwBdvQwBkiFg5UAHWi8SaPYwj_3VxXhKt XemGa4W2UjyPXewavcTR5t3PZbrhuUH27dlL_0yNCEnqevFwVxktOxn7xo9FaDPDw7ybRzwIthch NupB2RJyUR364Cqe4n4sFPoBo.8WCJlxYWZdfTIf2BatX8HT.e_Ge9vbhVYMsv0BuP4fS.Swf3_b tY4ufqudIvnCwQg00YYGXHpphVQ2pEr_w_Ht9OckT5VpEO8kHAA0lODfO6hNOb0_1FKJcmQHKbvS iAf0b_DaU5Z8_OKJCKnlQg2cVqhmApuZweZbe_FvEhJBxrxZiGT8jciVfAQTc.Wy7xzKPb6G4VZ8 aaJdAk2dXZwp9clPCzgMreH8Ij2tO4kzalAlVtOWZbl0z_i2xq6HamuXJqRzM6n.Hfi0t4n2dbJp USepfNTe4ezZ17VsBz0TxYfsxPNFS0wEZA0OhSKEwbaiHHE2koV8u2giF4eF2q0GWmCcs01HGdQV lAbqkaT.OCANvBKnJ_bt9ODv0rcnry3URTedCYXe2gGrG_AjrgJYwfak8b2I9.doISPzaPj3Se0B KIDc7xEyiscr1.0Btzx9w0avYQLbgKGPAFfOOMnmTc5gEDx7.G3Lx_xYGGLxVlrNhDs6LjKoIO9c JtAamsmp2M5esIygSCElSYfw7jcOPQeoqW08NnKeJWbKWR1vnGzMABGi.iV1OkjgNGwvE_5KIibv QuYJ5gJ0X56eapnDLuXgiLFJSh56UdsfWlPW2bogDCoGyWRaCnWZh9kIr8k4KiaEqb6b9XhJqs66 RcuBjUw.VUDHI8vHYptah_imU0oupFfWp730IDd51mMajVFl1QgpnPMYmJwUhIT8P.utmWFTUttK jQG5eE.venWlYVYa_RRfDdqqlfUrXY5FJO4vXSjM2yohUXjmTcoXao6MsSoZ6CWgb4iP7IE6V_wI SMz.FR.JRXST7voIsZMtCKHYSg7w_4DOW3qHMke5_c.quHXUSlB4nkoHJrog8EsLKlKLBmymHgh. gslDvrqHC.bobUCr9nd9UfS1ddpDf1xHYh5kioOXjBCXxJj96e34Q5g.jGJL9sTkWHduzyq50xhT Rd7LmzLeDIgd.jtqH8Fba Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Mon, 8 Jun 2020 17:49:41 +0000 Date: Mon, 8 Jun 2020 17:49:40 +0000 (UTC) From: Ergus Reply-To: Ergus To: "emacs-devel@gnu.org" Message-ID: <389165503.759660.1591638580779@mail.yahoo.com> Subject: If undo-only why not a redo-only? MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_759659_1767660319.1591638580777" References: <389165503.759660.1591638580779.ref@mail.yahoo.com> X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 1186 Received-SPF: pass client-ip=74.6.135.42; envelope-from=spacibba@aol.com; helo=sonic302-3.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 13:49:41 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: 6 X-Spam_score: 0.6 X-Spam_bar: / X-Spam_report: (0.6 / 5.0 requ) BAYES_50=0.8, 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, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 17:49:46 -0000 ------=_Part_759659_1767660319.1591638580777 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi: I've seen that we have an undo-only command and a way to customize a variable to do so for undo-redo. Is it too complex to implement the same to do a redo-only equivalent in order to bind that to a different key if the user wants so? There are different external packages for that, but they add some unneeded complexity and are somehow buggy. Best,Ergus ------=_Part_759659_1767660319.1591638580777 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi:

I've seen that we have an undo-only command and a way to customize a variable to do so for undo-redo.

Is it too complex to implement the same to do a redo-only equivalent in order to bind that to a different key if the user wants so?

There are different external packages for that, but they add some unneeded complexity and are somehow buggy.

Best,
Ergus
------=_Part_759659_1767660319.1591638580777-- From MAILER-DAEMON Mon Jun 08 14:11:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiMEk-0006Y9-Mm for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 14:11:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMEj-0006Xy-AF for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:11:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:12217) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMEh-0005wH-QC for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:11:04 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id CEDBC80B6D; Mon, 8 Jun 2020 14:11:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0762C8057E; Mon, 8 Jun 2020 14:11:00 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591639860; bh=gJVdhShYEPlas1fuxc7wLg4ADdmyRFJSTSzKj5vn2Q8=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=kUHEkKpnvW8Fc8G2q7msGuhdB0vdVPbn0JzL/MMcjmbNsI8/SOGHZwAAWWmJR6Lc5 v57a+7MtL8Jk4l5M2N0Eg1JBeBLMDulp43acNocjwZcw2cffLUJQ3Q2lpz7YZuVJfn +Ppa3obrGm4gDdNmXW/4uvvqzDr78w3K1dFcnnr07tmxEwJkH17WHyot5caVqw7jPz TUUbja9XdgFQsOWe8dETgDGWatcd0CNM+Gj+2O4V/yRQhLNNsn7POYJlNpBKTdjYoR bOJc26AixAMEmjt9cxHW0g8mxeXNYP2YcHchqbx2W3C7rx0d12hbpWDZyUFMqzQRh5 uJfsRJcdmGEig== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 660B51207EB; Mon, 8 Jun 2020 14:10:59 -0400 (EDT) From: Stefan Monnier To: Ergus Cc: "emacs-devel@gnu.org" Subject: Re: If undo-only why not a redo-only? Message-ID: References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> Date: Mon, 08 Jun 2020 14:10:58 -0400 In-Reply-To: <389165503.759660.1591638580779@mail.yahoo.com> (Ergus's message of "Mon, 8 Jun 2020 17:49:40 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.001 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 14:11:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 18:11:05 -0000 > I've seen that we have an undo-only command and a way to customize > a variable to do so for undo-redo. > Is it too complex to implement the same to do a redo-only equivalent in > order to bind that to a different key if the user wants so? I don't understand what you're asking for. Could you give some examples of what you'd like to see? The current code is designed so you can have a "plain old undo+redo" system by using the commands `undo-only` and `undo-redo`. Stefan From MAILER-DAEMON Mon Jun 08 14:29:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiMWn-0005P5-EZ for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 14:29:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMWl-0005Nz-GR for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:29:43 -0400 Received: from minsky.hcoop.net ([104.248.1.95]:44354) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMWk-0000G4-Lc for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:29:43 -0400 Received: from [49.204.180.123] (helo=localhost) by minsky.hcoop.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1jiMWi-0007Cr-OF; Mon, 08 Jun 2020 14:29:41 -0400 From: Yagnesh Raghava Yakkala To: Pip Cet Cc: emacs-devel@gnu.org Subject: Re: Kerning and ligatures References: Date: Mon, 08 Jun 2020 23:59:38 +0530 Message-ID: <878sgx76nh.fsf@yagnesh.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=104.248.1.95; envelope-from=hi@yagnesh.org; helo=minsky.hcoop.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 14:29:41 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 18:29:43 -0000 Hello Pip, > Can someone help with the Telugu "hello"? I wonder whether there > should be a gap, and how much of one, between =E0=B0=B8=E0=B1=8D=E0=B0=95= =E0=B0=BE and =E0=B0=B0=E0=B0=82 in =E0=B0=A8=E0=B0=AE=E0=B0=B8=E0=B1=8D=E0= =B0=95=E0=B0=BE=E0=B0=B0=E0=B0=82? No, there shouldn't be any gap as they are part of single word.=20 Thanks., -- YYR From MAILER-DAEMON Mon Jun 08 14:42:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiMif-00047o-Ku for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 14:42:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMid-00041u-VU for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:41:59 -0400 Received: from sonic306-2.consmr.mail.bf2.yahoo.com ([74.6.132.41]:35276) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiMib-0002Jz-LK for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:41:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591641716; bh=g1PJOVk2GnaLi6xktTNZXSvncjKfhjYME8XlN1sqh2k=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=KtvmCuSaRyIonE1/bQrU/kkGKIyeT9AVfCPYrWd6a+8hr2LRWQp7m/IDtrW92VTTQUPce+WHie54gDyuiRnNoMoFRg3csCqXmldGf3LlZzDkGEn1HeKbJ3Mg0ffrAUs+RyarRhej9yo43Jv1OSc7XbeD58NAHlef3c1wPRzYvPN7ObR2QUWDZ/wzD/HaG5vUb2sFJQYlSPGCXZ2iR4xSGya8Yzzzn0n1SSKLPoLGRl1ctr4/79o8ILrjszbFUM1B8b6ROKBZki21uwnVX2mPr8k5pajq+SHvFhbBQigyDmyvkeF5X42q4icOM33UeDpY6xgLvFhH0tgvup01LsfvaQ== X-YMail-OSG: rtet._oVM1meUfIKCMvCbNDhTAfX4G0HyoOvhuAVSLf1G3iMBall.GzBISDLSkb oaLp7NcPJ2sgl__szR1ttMlrJAhecxRnIA2iKq8WFTUc8rotrMClOIDuXbZC8w9Cj0nDEh2OPtip zSujEcOI97HK5REY3ICNo9FNLCX2ofy85wg_Fdh1NIdvSNDFwvY2l_N_cknyEUyZoRcZTcWqjuiZ pY9iAB3tDP5qkiwIeOJI7SNx1PleV647amo1lYEX1HnS.RBc0mDjoSKIMR5RLNx7o89PxcHBU.Bu X9f8AQlS.MYH4SEOu03NWlzG8sQw3Zj1Rzui5eOZbRvIKZssXrvHHzzBxOCongT8R4bvc3lqJgHT H61qrVkOzS7KCshRH0q.nngIUZl8270hxzrTpmb94lBBepFi6KedOvAQFxhnSR9wcv_zRGnTgtCZ _tlPjI2GUVP18BDB6hh83zKMFZ3k9lfAdSvNKUfMkYJ1bif9oXjpoVmjzmdQeQKiAXLLOcJvy9qY JLC4tNdiapw__dbkgGrcQPu2zkij6SdfVjRiZuV0TsFHLu5Eq.pMpfACL3dUDS1CFTR0yjNSrN2O _CojLpEvpw0p5wMK7nflMGl8V5vkzeO1Ua9LU.yNNWFqw9Y_apQ4zpc7yW8.5yDpE8O7IeZSBAHg xqnpoxAM7rzlRdd4iAF5J5wRqzFwdXRIAFMiKIxw4RBhblZdCZ6jAF2P0sYNOyQOYMnaIvSZ7hmC HMpMLiCog1IX0n4xaxeMhBBnyf.ZrLOb83Hofzto1__S6vSuRNzzW9QvNrMQa6.bF2Kmwyl3V9q4 SF7gOxIEgYTaSPTln6Gr47mQbRWaAiJNJpqrdnJrOe1xC9glXCkObw95ex4Gjzd.yYRMxQcO9JrR dELsZSAWzNbhQJzrmuyonoaF1mhKvtJlhiQHa8OC_SSQzlVDjEk.eFc0iHff6_ZNDtu5.bM_Vle0 pFfrSolZFr4TsvbpoO1qhh9clmjDGPD0CpXiqQNQ5PyYdk2igmkTrD7_IqKHEURf8EqA08rrykNp 2qZusEYt1U8gLV4.o5iMPowbQ.bVrnZhqs6a__3up1DaDRuYNPjX_3OvFncBwRkkDef6AdEjqE8w bYGDzZii3qNByDP6EqVZW5aGb7ZBKugmY5zpkUakVrsMIv_3DFRUi5E285Z0iu_me91VDyxsHQGB voubbmAec_TDPTKJfdVCKb9vlknlv6y3HalVDcwy4436DVaEFYoaLZ9YJJfAlYaxdbomWfut4ohF ayRlkPNNWL2VyZIeOJ2D4dQSDwOqqFcJh.W.42g99AGpo4brOeNh.HuGMHOO8o2KUerxPc5z5D9M 3V_YkipM- Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.bf2.yahoo.com with HTTP; Mon, 8 Jun 2020 18:41:56 +0000 Date: Mon, 8 Jun 2020 18:41:53 +0000 (UTC) From: Ergus Reply-To: Ergus To: "monnier@iro.umontreal.ca" Cc: "emacs-devel@gnu.org" Message-ID: <501629768.766282.1591641713168@mail.yahoo.com> In-Reply-To: References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> Subject: Re: If undo-only why not a redo-only? MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_766281_528676114.1591641713167" X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 4023 Received-SPF: pass client-ip=74.6.132.41; envelope-from=spacibba@aol.com; helo=sonic306-2.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 14:41:56 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 18:42:00 -0000 ------=_Part_766281_528676114.1591641713167 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Stefan: It is actually simple. The idea is to have more or less what undo-fu provid= es but in vanilla. I don't actually know if it is possible to do that for r= edo with what we already have there. (Probably yes and I don't know how) The idea is to navigate only in one direction until the initial opposite ac= tion. or the other with the *-only commands, without the danger of switchin= g unintentionally from undo to redo or vice-versa. If there is not more und= o or redo or the next action is the opposite (redo/undo), just stop and do = nothing (print a message maybe) Basically I don't want to depend of undo-fu anymore for such a basic editin= g functionality as we already have the half of the work and because it trie= s to reinvent part of the wheel in my opinion. Does it makes sense? -----Original Message----- From: Stefan Monnier To: Ergus Cc: emacs-devel@gnu.org Sent: Mon, Jun 8, 2020 8:10 pm Subject: Re: If undo-only why not a redo-only? > I've seen that we have an undo-only command and a way to customize > a variable to do so for undo-redo. > Is it too complex to implement the same to do a redo-only equivalent in > order to bind that to a different key if the user wants so? I don't understand what you're asking for. Could you give some examples of what you'd like to see? The current code is designed so you can have a "plain old undo+redo" system by using the commands `undo-only` and `undo-redo`. =C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan ------=_Part_766281_528676114.1591641713167 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi Stefan:

It is actually simple. The idea is to have more or less what undo-fu provides but in vanilla. I don't actually know if it is possible to do that for redo with what we already have there. (Probably yes and I don't know how)

The idea is to navigate only in one direction until the initial opposite action. or the other with the *-only commands, without the danger of switching unintentionally from undo to redo or vice-versa. If there is not more undo or redo or the next action is the opposite (redo/undo), just stop and do nothing (print a message maybe)

Basically I don't want to depend of undo-fu anymore for such a basic editing functionality as we already have the half of the work and because it tries to reinvent part of the wheel in my opinion.

Does it makes sense?

-----Original Message-----
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Ergus <spacibba@aol.com>
Cc: emacs-devel@gnu.org <emacs-devel@gnu.org>
Sent: Mon, Jun 8, 2020 8:10 pm
Subject: Re: If undo-only why not a redo-only?

> I've seen that we have an undo-only command and a way to customize
> a variable to do so for undo-redo.
> Is it too complex to implement the same to do a redo-only equivalent in
> order to bind that to a different key if the user wants so?


I don't understand what you're asking for.
Could you give some examples of what you'd like to see?

The current code is designed so you can have a "plain old undo+redo"
system by using the commands `undo-only` and `undo-redo`.


        Stefan



------=_Part_766281_528676114.1591641713167-- From MAILER-DAEMON Mon Jun 08 14:44:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiMl6-0006eI-0t for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 14:44:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58254) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiMkv-0006ci-HU for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:44:25 -0400 Received: from sonic314-14.consmr.mail.bf2.yahoo.com ([74.6.132.124]:32838) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiMkq-0002gW-Hi for emacs-devel@gnu.org; Mon, 08 Jun 2020 14:44:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591641855; bh=IlZJl60IHv63UCJ3i7js9VIqk9RAlk1HA+wditT2wso=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=fxiDiUMBAMRu4QVjJOke8tE7uyeH4xv0elCa6TnrkziAI1uf+76anqUYjD0NSjsepCrE5T3Sqjvl59I5PO7hLlhGEVKivpErTdwHFWcqeIHSjIXXp3MnGpdUVCBvv/zdLz6TwPKGEMViH8TP9voIStnFBtEG4Th92kTdH9POt97gI2hsGHL+rVZPd8zd7Ww60IuSZN8Mf9jv4vbQ/KO9D9q+UulDnVylc2A1GV3Od4XoeE102jPJmkwmcPHHFJLY754hMAW3jL1LaCoatOYbcmZyVJ2blHqcuOALEDsusyejrUklSnmqVAJrLYVKDG9YiDvc9lr8zC+TzkehMLZtnA== X-YMail-OSG: BosgtLsVM1nrxZ1VsbbN03Ee_PC_5eBgJmqGUWzeEfdSEYgtEn5QKuPMqPZ95Dz P_NLEExY2LfLWIjBSxMOBVA4LYG0uSlgvAzvvtGwqmjsKZYXfgvOi6vjKYO3YFnUxQV6DzGlhlko 0Jf16AvNvXLzTN34hZ_IBci8hX8_mMLzlj_.HWSWFIEma50gPKq8SWA0rxOGcJiS15hpiDEq.CxQ Wvm0N6Q.xUJH15iGmoktE0iTjxexkB70.DTc.xZAr2cLlIbgaiXbIytF5oEHSD6bu1vSdFgdb22u i41ijKLY2A4R43EJvHwaMpQTVM7LlBZLpvw9UZhAIfHUR1aCzWcrE1emAeCoMg2Hbtw0lclwqja7 BINdOvagB9HhW_3Zy1EydfCgm.pUgaukegcBW7umSITfeKzJqxsEtkF9x2Ma_jZG6ppVHG04RgPW gIJrmFW_Xx0.r81Ilq8zgPBwe9AKoO5H6QmqIWE.yxNHmM2WiN6k.Gs6jDBk0aMMD.sQDdQmcorM qjVRnCUvtERQ_osCIQtxm6n_MkPL3gMiW8el.xbHlCNG_plhhABuEORcRG2yprcMH9HN8vaozngp k.th6N4PipaCJmwwJzw_7_Q8vISh8BCT0uk7roWsOjYwCcF.MeeJF97lvX6zXPUGqKnWW3DUPWC1 xcuTN_vAH6WQLmxYYdUbsI53gS47Av..HckZK6KK3.E23gNjSo62_cg3r5WEzC.lbL3yzIOACtMl vrQKbJn30P3HJ1SAYX.EqMPWbU1qfshRt7anWcOAAq4xh9tWTBowcjCwqRAaw_Is8Tbbn43pOg30 .hbFpc6tGvIiieWqNvWi5pY4Ah3TDjRwDYuhj1rJz0A.WhwonA4YYYxL3ckP4yB6WDceQfOuL53O d.4cb8Pz8JKKGelsdPduced2vMpeIRgd9So.mbAAeef0lAM7oNewwjZ.N4UlmTwN92Roq5qGwNr1 aLWMzqng8xlJUyhXLl58Px7Bck5MRY2b_lT0M70E0.PcAfssXlvmKd2c8oXxbL7XfRd_hnRTN0Rx wRaVp6Cj0xfmNpyDQris2oWlcG0NjuMJo9oFVkBBNRL.OSQVGV6WR.nDr0tmI43KEvZYVRFm4F9a gwzkgTSNct2y.cN5Ne7TO5JL56ZS25Djvg3E8DaoxEMZNSI8cBBPNRO5LMIpc07.27q.IXbqQ2SB wecruHvk0Bo5De3phLiS_l3u9iQxRKgw286rmtlW_nfib5K5WTbrZDFOg3ZyrN2nfz9Hnu2LN506 K16ab1GUYr2eOGYFP9JrbNgLL7j4G0mxSWTdKEvvKZ8UO5rcEKoNVSP2Y75nqV8rnOO.MZdi8fn0 OJYoFWba.bcAr1w-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.bf2.yahoo.com with HTTP; Mon, 8 Jun 2020 18:44:15 +0000 Date: Mon, 8 Jun 2020 18:44:12 +0000 (UTC) From: Ergus Reply-To: Ergus To: "monnier@iro.umontreal.ca" Cc: "emacs-devel@gnu.org" Message-ID: <1690188073.781284.1591641852132@mail.yahoo.com> In-Reply-To: References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> Subject: Re: If undo-only why not a redo-only? MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_781283_473133854.1591641852130" X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 2525 Received-SPF: pass client-ip=74.6.132.124; envelope-from=spacibba@aol.com; helo=sonic314-14.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 14:44:15 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 18:44:29 -0000 ------=_Part_781283_473133854.1591641852130 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable BTW:=C2=A0https://gitlab.com/ideasman42/emacs-undo-fu -----Original Message----- From: Stefan Monnier To: Ergus Cc: emacs-devel@gnu.org Sent: Mon, Jun 8, 2020 8:10 pm Subject: Re: If undo-only why not a redo-only? > I've seen that we have an undo-only command and a way to customize > a variable to do so for undo-redo. > Is it too complex to implement the same to do a redo-only equivalent in > order to bind that to a different key if the user wants so? I don't understand what you're asking for. Could you give some examples of what you'd like to see? The current code is designed so you can have a "plain old undo+redo" system by using the commands `undo-only` and `undo-redo`. =C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan ------=_Part_781283_473133854.1591641852130 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
BTW: https://gitlab.com/ideasman42/emacs-undo-fu


-----Original Message-----
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Ergus <spacibba@aol.com>
Cc: emacs-devel@gnu.org <emacs-devel@gnu.org>
Sent: Mon, Jun 8, 2020 8:10 pm
Subject: Re: If undo-only why not a redo-only?

> I've seen that we have an undo-only command and a way to customize
> a variable to do so for undo-redo.
> Is it too complex to implement the same to do a redo-only equivalent in
> order to bind that to a different key if the user wants so?


I don't understand what you're asking for.
Could you give some examples of what you'd like to see?

The current code is designed so you can have a "plain old undo+redo"
system by using the commands `undo-only` and `undo-redo`.


        Stefan



------=_Part_781283_473133854.1591641852130-- From MAILER-DAEMON Mon Jun 08 15:28:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiNRE-0000FG-JL for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 15:28:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34736) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiNRB-0000F4-U2 for emacs-devel@gnu.org; Mon, 08 Jun 2020 15:28:02 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:31950) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiNR9-0001P0-UM for emacs-devel@gnu.org; Mon, 08 Jun 2020 15:28:01 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5481710025B; Mon, 8 Jun 2020 15:27:58 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id DCCB21002C8; Mon, 8 Jun 2020 15:27:56 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591644476; bh=c+nvgVSC63zFEYWeGsumQdMGyMVucH6gBWuZctgx6Ow=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Kptt8+Pg0ykvmggVvZpppgJsQMgK9mIxsihY/YsWjK0TzSg8GmPa8DDiPKlnVQZRk 57+Snf0TQHmGInZAlIkz0BtWpQOa8om3d58okRVNoi0i2fiyBsG4/nIWASibFylRwk KipjJ4e5N4G7Ib8xQPiLXceW9UYd+rwCvCmfTLArWWgBI3g/6VW8eMVIrxNIT76T9Q fjyDzgszovtT+//cOnXvkdbMvV4p1N6bQ67VvBXV+C6Uf72wAB9UBDXEsp8P0E1t5E 1bxhgkF6GuZ4gZgfTossEnQ0tVMnD6+opXFsTkeMnuyu3dpfZi5lnZbizH8VOwAoFx sP9d3P7CyuzxQ== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9EFCE1205E1; Mon, 8 Jun 2020 15:27:56 -0400 (EDT) From: Stefan Monnier To: Ergus Cc: "emacs-devel@gnu.org" Subject: Re: If undo-only why not a redo-only? Message-ID: References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> <501629768.766282.1591641713168@mail.yahoo.com> Date: Mon, 08 Jun 2020 15:27:55 -0400 In-Reply-To: <501629768.766282.1591641713168@mail.yahoo.com> (Ergus's message of "Mon, 8 Jun 2020 18:41:53 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.003 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 14:11:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 19:28:02 -0000 > The idea is to navigate only in one direction until the initial opposite > action. or the other with the *-only commands, without the danger of > switching unintentionally from undo to redo or vice-versa. If there is not > more undo or redo or the next action is the opposite (redo/undo), just stop > and do nothing (print a message maybe) Yes, that's what `undo-only` and `undo-redo` attempt to provide, IIUC. Have you bumped into problems with them? Stefan From MAILER-DAEMON Mon Jun 08 15:42:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiNfB-0006BZ-VD for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 15:42:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36168) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiNf9-0006BG-As for emacs-devel@gnu.org; Mon, 08 Jun 2020 15:42:27 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:37477) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiNf6-0003hI-QD for emacs-devel@gnu.org; Mon, 08 Jun 2020 15:42:27 -0400 Received: by mail-wm1-x335.google.com with SMTP id y20so794368wmi.2 for ; Mon, 08 Jun 2020 12:42:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=esavara-cr.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=Mc/gMOo3+xSr2y2X4Q38wqhm5iwQ7Gl7s2w7jrBFVfQ=; b=IR38LbQjolcMEHuXfSLpJZlwrGKKYQ3tfTkuXrtqp3mKphIfWdClv9sc3ky1gRcZAi W4pSksMQHgUyCcdViUHsO3ZrKZ+LoMvZ8+Kvxoh7KwTOtrOYZVXDYzArLgC4M1HjevUJ cGIvshBz41qxSN3SZJUSYOV+FRKOQ8y6wspkg8U+XcQPWscBF6+54Co96NlDjPwVrGnF 0sW5/V+Zt/hGo/DmPG1j3yL+nY//KXe/xWkE7RiTIMgmIBtssAXceNmp48pn/VLys9PQ OJsRGndug5H3ho2a0HxLv/Z4RtbBemIXq25KKY8aWVkFvsVhQe1SeMcSVibHfibBB2b+ 30VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Mc/gMOo3+xSr2y2X4Q38wqhm5iwQ7Gl7s2w7jrBFVfQ=; b=oxqA2gi6PaWx5dC1N6bKoJmnANrGVwO7rsDeLZm1AN6lLW4D7vLimwhQJYTu0koHFa ty+LLLamKegowJSlhObZmtwOzjpFFuAz+cR5j0eRHYjk+56bcC0vhMZb4RDOaRJ67rnK 6hHZ6bDQdCEheroHKBRyX/UZuiHzxqQC1+AUjbjy0LHvQ9+n4H+d22zI+jrpEHGyP30m yZBqXO2nF08hytSJGhYS2VqnA5qFb64EaN8GA/9jwlLsJd/ZISgP7+yQIt5+Zs0btp4J FsxEidi5FTaqhFQlw/DXPczrFgafs0ZvoC/7NDQ9sZOLb3TUwAQEUsdAwktpDEua+mNi r3dg== X-Gm-Message-State: AOAM530Y2g2Jb6338W8EaWQJyuHmCOABIw73mMMk9AhV1GFBBEyEChL8 sWJyVkFzJi23X+EXxCoEaREZgA0FcITPEZrlA194O4Pytxk= X-Google-Smtp-Source: ABdhPJyLdUxmYiFyD/QLeqxrhHmvGcb6hJA1f+GEw3AkHXzqPtsl9jZsmLGJjSEd5y9ioNYMYV/xRfVgWqIeSdhJk1g= X-Received: by 2002:a1c:e40a:: with SMTP id b10mr257658wmh.41.1591645342231; Mon, 08 Jun 2020 12:42:22 -0700 (PDT) MIME-Version: 1.0 From: Jorge Javier Araya Navarro Date: Mon, 8 Jun 2020 13:41:46 -0600 Message-ID: Subject: emacs-tree-sitter 0.8.0 released! To: emacs-devel Content-Type: multipart/alternative; boundary="0000000000003b80a205a797cf64" Received-SPF: none client-ip=2a00:1450:4864:20::335; envelope-from=jorge@esavara.cr; helo=mail-wm1-x335.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 19:42:27 -0000 --0000000000003b80a205a797cf64 Content-Type: text/plain; charset="UTF-8" >From the original Reddit post on r/emacs: https://ubolonton.github.io/emacs-tree-sitter/installation/ - Documentation for end-users (docs for APIs are coming later). - Query-based syntax highlighting. Basic support for common languages. Advanced highlighting for Rust and Python. - Support for installation with straight.el. --0000000000003b80a205a797cf64 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From the original Reddit post on r/emacs:

https://ubolonton.github.io/emacs-tree-sitter/i= nstallation/

- Documentatio= n for end-users (docs for APIs are coming later).

- Query-based syntax highlighting. Basic support for com= mon languages. Advanced highlighting f= or Rust and Python.

- Support f= or installation with straight.el.
--0000000000003b80a205a797cf64-- From MAILER-DAEMON Mon Jun 08 16:42:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiOay-0003wq-Ut for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 16:42:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42482) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiOaw-0003wX-PN for emacs-devel@gnu.org; Mon, 08 Jun 2020 16:42:10 -0400 Received: from smtprelay02.ispgateway.de ([80.67.31.25]:37387) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiOav-00052z-7s for emacs-devel@gnu.org; Mon, 08 Jun 2020 16:42:10 -0400 Received: from [46.244.206.193] (helo=condition-alpha.com) by smtprelay02.ispgateway.de with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) (envelope-from ) id 1jiOai-0004Qv-O8; Mon, 08 Jun 2020 22:41:56 +0200 Message-Id: <866ca4b62cf30015aa28bfb9a2566dff@condition-alpha.com> From: Alexander Adolf To: Thomas Fitzsimmons Cc: Jean-Christophe Helary , emacs-devel@gnu.org Subject: Re: [Proposal] New EUDC backend for macOS address book In-Reply-To: References: <8da7df5281e91d8a351f97c0837d79b7@condition-alpha.com> <298df6a619aa45393b0ae9250123faef@condition-alpha.com> Date: Mon, 08 Jun 2020 22:41:56 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Df-Sender: YWxleGFuZGVyLmFkb2xmQGNvbmRpdGlvbi1hbHBoYS5jb20= Received-SPF: pass client-ip=80.67.31.25; envelope-from=alexander.adolf@condition-alpha.com; helo=smtprelay02.ispgateway.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 16:42:04 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 20:42:11 -0000 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Thomas, Emacs Developers, Thomas Fitzsimmons writes: >>> [...] >>> You can make the changes to eudc.texi, create a patch, then reply to >>> this message with the patch attached. >>> [...] Apologies for the delay! Please kindly find the patch attached. What I did: =E2=80=A2 Under "Overview", I added a new @section, paralleling what already existed for BBDB. =E2=80=A2 Since the backend is not enabled by default, I have also added a = new @section under "Installation". That new section, besides telling how to enable the macOS Contacts backend, also describes the two available backends, and how they differ. The text also deprecates the pre-existing eudcb-mab.el, and recommends the new eudcb-macos-contacts.el for new configurations. Looking forward to your thoughts, --alexander --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=eudc.texi.patch diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi index 66867cbc58..0cea3126a0 100644 --- a/doc/misc/eudc.texi +++ b/doc/misc/eudc.texi @@ -85,6 +85,8 @@ LDAP, Lightweight Directory Access Protocol CCSO PH/QI @item BBDB, Big Brother's Insidious Database +@item +macOS Contacts @end itemize The main features of the EUDC interface are: @@ -110,6 +112,7 @@ Interface to BBDB to let you insert server records into your own BBDB database * LDAP:: What is LDAP ? * CCSO PH/QI:: What is CCSO, PH, QI ? * BBDB:: What is BBDB ? +* macOS Contacts:: What is macOS Contacts ? @end menu @@ -186,6 +189,31 @@ performing queries on multiple servers. EUDC also offers a means to insert results from directory queries into your own local BBDB (@pxref{Creating BBDB Records}) + +@node macOS Contacts +@section macOS Contacts + +@url{https://support.apple.com/guide/contacts/welcome/mac,, macOS +Contacts} is the rolodex-like application that ships with the macOS +operating system@footnote{Apple have changed the names of their +operating system and some applications over time. macOS used to be +called Mac OS X in the past, and the Contacts application was +previously called Address Book.}. It is tightly integrated with the +other Apple applications (Mail, Calendar, etc.), and can synchronise +contacts information between Apple devices via CardDAV servers (such +as e.g. iCloud). + +EUDC considers macOS Contacts as a directory server back end just like +LDAP or PH/QI servers, though the macOS Contacts application always +resides locally on your machine. The point in this is not to offer an +alternate way to query your macOS Contacts database (the macOS +Contacts application itself provides much more flexible ways to do +that), but rather to offer an interface to your local directory that +is consistent with the interface to external directories (LDAP, +PH/QI). This is particularly interesting when performing queries on +multiple servers. + + @node Installation @chapter Installation @@ -214,6 +242,7 @@ email composition buffers (@pxref{Inline Query Expansion}) @menu * LDAP Configuration:: EUDC needs external support for LDAP +* macOS Contacts Configuration:: Enable the macOS Contacts backend @end menu @node LDAP Configuration @@ -339,6 +368,42 @@ and the @file{.emacs} expressions become: (customize-set-variable 'ldap-host-parameters-alist '(("" auth-source t))) @end lisp + +@node macOS Contacts Configuration +@section macOS Contacts Configuration + +macOS Contacts support is added by means of @file{eudcb-mab.el}, or +@file{eudcb-macos-contacts.el} which are part of Emacs. + +@file{eudcb-mab.el} reverse engineers the format of the database file +used by the macOS Contacts app, and accesses its contents directly. +While this may promise some performance advantages, it comes at the +cost of using an undocumented interface. Hence, users of +@file{eudcb-mab.el} are recommended to double check the compatibility +of @file{eudcb-mab.el} before upgrading to a new version of macOS. +@file{eudcb-mab.el} is retained for backwards compatibility with +existing configurations, and may be removed in a future release. + +@file{eudcb-macos-contacts.el} uses the public scripting interfaces +offered by the Contacts app via the macOS +@url{https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptX/Concepts/osa.html,, +Open Scripting Architecture (OSA)}. To accomplish this, +@file{eudcb-macos-contacts.el} uses an external command line utility +named +@url{https://developer.apple.com/library/archive/documentation/OpenSource/Conceptual/ShellScripting/AdvancedTechniques/AdvancedTechniques.html#//apple_ref/doc/uid/TP40004268-TP40003521-SW44,, +osascript}, which is included with all macOS versions since 10.0 +(which was released 2001). @file{eudcb-macos-contacts.el} is hence +recommended for all new configurations. + +To enable a macOS Contacts backend, first `require' the respective +library to load it, and then set the `eudc-server' to localhost in +your init file: +@lisp +(require 'eudcb-macos-contacts) +(eudc-macos-contacts-set-server "localhost") +@end lisp + + @node Usage @chapter Usage --=-=-=-- From MAILER-DAEMON Mon Jun 08 17:18:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiPAT-0005m5-3Z for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 17:18:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47332) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiPAR-0005lr-4R for emacs-devel@gnu.org; Mon, 08 Jun 2020 17:18:51 -0400 Received: from sonic309-14.consmr.mail.bf2.yahoo.com ([74.6.129.124]:45042) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiPAN-0002qN-5K for emacs-devel@gnu.org; Mon, 08 Jun 2020 17:18:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591651124; bh=1acSxiC56T/QAvuMwQmWJ6ea+P/YDRptbwyWNEONBjw=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=qmqLao44d4TBzypRKowavaHE8xeXYqfq0I4kTc224pFHAi9VxHm1OvmO7iByQ4aYUdHs6+223sA30v08D0LaUGy6BktjC34NDKocxDz2P4cSYcBomXkbaM3FO71gTxjSmdPdziRpR7ZABX/fQ7JcTR986XuZGoAKrFLoRNhIPCSMfZ73x6pAvl6wpH9HNdkyLx7EyDgmnC8Ji+gSr46uHpYTzzvgYYnUUWHo47uiw8/ujO8vtTeQBd5kl4U6AKAzKSR6d8M6MuKuF8GHNxr2kTAcYMkIcIXXiiAPRkKPp5mHkIrBOGf6C8TQQbGRZ2ZIUqE30qI6IqcOxhY1elNcoA== X-YMail-OSG: SBT0vAYVM1k.xdsuHvS7LY4gZeOxnX51lQ6CQh53xoKcL49RbGmZlZBDbEVfHPF meg.Bp4LuqbvziMXqglFu1D5vFQ9p2oSvokKpy7TSHt5URCQ2cdX5ml4_aUmZ3pvX1OPTWu7YcYS br2eBTK7ZqyjWJPI96MWpSM200i0PbVvKCnvpeu62PNLqSPoSL9wgq1l1q8fds_jSh0ORtTuu_zD W9UqebM5eb800nTGr3JZ2Y1D83ljsnTeGVB.r2umCps_bQWPs5j1i3YowiKc3N9GV1OEAvNCgbxG ImlAYfqE6THlL4vERVFTY_Vze6pGjo_oimlA5bUeXLe53_cXcZ63aWyQRNGNXhwg0cMd1FT9HzUe zzFtOWSVnRzEr2VwAQV0T3R0I04TJDbvgI4VU8EpGlqn5WXccUnumG6Bw2111AtApEPjVYKQ0Bny xV4rLVsPO4N2C5t1zaJxoM.jJzaVbxWUbBsPP9foJ7hWesIYNelnxkCghgCM53DwuM_0rmgZxTpf 2EVKUyEsbeY.qHRLn8u49TFjSDHJVLlD4I8YHn8Y5sXQidT9LSVMmrYPmo8WG3L2gLXxw44wZjx6 1N8x6KLPrCP03gYVcnlfwwUr1IomFpeXDQY1E9vT2c6RvQy5XkjGRqSzZdINykYdCGdNt1ryUcZ3 sl4ObBDZbNXLLtVcji1rQSoofL6qA7IGz1_ldDoEUKnNvBNAr_fPltd5kXH5yxjQJxU8IaoKyCn6 81L7fPapdyFFm4P3YbuRh5jxfXxqCk0SPd1pLeXGMiAy7GoBZG9E_NVNNkQGLtclK9B30LmkjoAN B.IncuyMGTY60kYBXTkW3FC7cGtEWElfKxO7b_VOGCAa4xRAisSDMEbq_7OM51VPN1aqmClyc3JC hMNseTXiUeuhauMW0lpaf3HuZ.Y2kwcRdAUR9NU2RKs9g6lzQqBWUGn2v.nIrBmQiJvHyECF_.X7 8VuRFskpjAQzrZ8BCFdTEPkzv0Dj2xZJTrpq0DyNlNkkr7C3_8FxFfIOmb4DndLjnRe8dC4pOppF 0jC4vkSrBv5HY98LOc7_6BSfMCkwOI.GailkVo1UBBNb7EdIhcVj6YRvx_sA5Cbs0CIcRk9kkz2H VW5dYLeqNkGC8iVkC0n_DiAgycbIemHmcsy7lDbUQnn5pGSoiokg2C9qgdVoqakaUm1PKq8CIJfX xkREUhb82jVRk5bITrhYsU6cFi_7e0A4W2d5HN7iJUDYHGJRuC3msIIXbRnacmbnB.Y.nXYsFmaB sxUdQUEvcNN3WN3B2cFypZ8BTfV14BSKDjXfPyECCZzYtnUNz8t_wne_UxNYCL2qjZ9dGVb3Ei_h DekdftjaBmk.W0ddKwxr_HKCBuG1q6s7aEbReATRnGwM- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.bf2.yahoo.com with HTTP; Mon, 8 Jun 2020 21:18:44 +0000 Date: Mon, 8 Jun 2020 21:18:43 +0000 (UTC) From: Ergus Reply-To: Ergus To: "monnier@iro.umontreal.ca" Cc: "emacs-devel@gnu.org" Message-ID: <1524408396.841056.1591651123991@mail.yahoo.com> In-Reply-To: References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> <501629768.766282.1591641713168@mail.yahoo.com> Subject: Re: If undo-only why not a redo-only? MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_841055_2040194826.1591651123989" X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 3893 Received-SPF: pass client-ip=74.6.129.124; envelope-from=spacibba@aol.com; helo=sonic309-14.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 17:18:45 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jun 2020 21:18:51 -0000 ------=_Part_841055_2040194826.1591651123989 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Ohh, now I got it.=20 Sorry, but the name `undo-redo` was not clear for me at all (it seems more = appropriated for the normal emacs undo as it actually does undo and redo) a= nd the function documentation was confusing itself "Undo the last ARG undos= " (it seems a prophecy of an oracle ;p ) also I didn't find anything more e= xplicit in the manual either. Actually there are some useful undo related f= unctions in simple.el I wasn't aware of and I just discovered looking into = it. Maybe it would be fine to rename it or provide an alias more "symmetric= " like `redo-only` or just `redo`? So the only missing functions available in undo-fu are undo-fu-[redo/undo]-= all but I have never used them so I don't actually care them. Thanks for everything.Ergus -----Original Message----- From: Stefan Monnier To: Ergus Cc: emacs-devel@gnu.org Sent: Mon, Jun 8, 2020 9:27 pm Subject: Re: If undo-only why not a redo-only? > The idea is to navigate only in one direction until the initial opposite > action. or the other with the *-only commands, without the danger of > switching unintentionally from undo to redo or vice-versa. If there is no= t > more undo or redo or the next action is the opposite (redo/undo), just st= op > and do nothing (print a message maybe) Yes, that's what `undo-only` and `undo-redo` attempt to provide, IIUC. Have you bumped into problems with them? =C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan ------=_Part_841055_2040194826.1591651123989 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Ohh, now I got it.

Sorry, but the name `undo-redo` was not clear for me at all (it seems more appropriated for the normal emacs undo as it actually does undo and redo) and the function documentation was confusing itself "Undo the last ARG undos" (it seems a prophecy of an oracle ;p ) also I didn't find anything more explicit in the manual either. Actually there are some useful undo related functions in simple.el I wasn't aware of and I just discovered looking into it. Maybe it would be fine to rename it or provide an alias more "symmetric" like `redo-only` or just `redo`?

So the only missing functions available in undo-fu are undo-fu-[redo/undo]-all but I have never used them so I don't actually care them.

Thanks for everything.
Ergus




-----Original Message-----
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Ergus <spacibba@aol.com>
Cc: emacs-devel@gnu.org <emacs-devel@gnu.org>
Sent: Mon, Jun 8, 2020 9:27 pm
Subject: Re: If undo-only why not a redo-only?

> The idea is to navigate only in one direction until the initial opposite
> action. or the other with the *-only commands, without the danger of
> switching unintentionally from undo to redo or vice-versa. If there is not
> more undo or redo or the next action is the opposite (redo/undo), just stop
> and do nothing (print a message maybe)

Yes, that's what `undo-only` and `undo-redo` attempt to provide, IIUC.
Have you bumped into problems with them?



        Stefan


------=_Part_841055_2040194826.1591651123989-- From MAILER-DAEMON Mon Jun 08 22:38:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiU9K-0008QB-8h for mharc-emacs-devel@gnu.org; Mon, 08 Jun 2020 22:38:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiU9H-0008PW-2o for emacs-devel@gnu.org; Mon, 08 Jun 2020 22:37:59 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33321) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jiU9F-0000lo-7X; Mon, 08 Jun 2020 22:37:57 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jiU9E-0001Sr-55; Mon, 08 Jun 2020 22:37:56 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Adam =?iso-8859-1?Q?Sj=C3=B8gren?= Cc: emacs-devel@gnu.org In-Reply-To: <87ftbyokll.fsf@tullinup.koldfront.dk> (emacs-devel@gnu.org) Subject: Re: long-standing GTK bug Reply-To: rms@gnu.org References: <83zhbcg6s4.fsf@gnu.org> <87r1wng2ki.fsf@linaro.org> <83o8rrenn1.fsf@gnu.org> <87blnr6uck.fsf@tullinup.koldfront.dk> <87wo5kumkn.fsf_-_@tullinup.koldfront.dk> <86ftc5hc8j.fsf@gmail.com> <87d079io10.fsf@tullinup.koldfront.dk> <87ftbyokll.fsf@tullinup.koldfront.dk> Message-Id: Date: Mon, 08 Jun 2020 22:37:56 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 02:37:59 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Please forgive me for taking so long to respond. I am backlogged 500 messages I have not yet seen. I just saw your message today. > > If you remove the workaround in frame.c and remove the call to > > emacs_abort() when using GTK in x_connection_closed() in xterm.c, and > > the connection to a display is terminated while Emacs has a window on > > that display, you'll still get an endless stream of warnings from GLib, > > i.e. "the GTK bug". > I have been looking further into it, and I think I now understand what > happens. Ideally the GTK developers would fix this. Apparently a long time has gone by and they have not done so. I suppose there is a reason why. Does anyone know what it is? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Tue Jun 09 02:17:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiXZh-00072B-DO for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 02:17:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiXZf-000722-S3 for emacs-devel@gnu.org; Tue, 09 Jun 2020 02:17:27 -0400 Received: from mout.gmx.net ([212.227.17.20]:33165) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiXZd-0003y2-0i for emacs-devel@gnu.org; Tue, 09 Jun 2020 02:17:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591683441; bh=90xduISvfP0o3ZgQBU3JT+mxrPTBgXpy/Sv2hdjC1ec=; h=X-UI-Sender-Class:From:To:Subject:In-Reply-To:References:Date; b=Qi7ijaKDuEQR625rSLC0Gz7/Nyqie2u/6A+lkeQZrEHoGTpsH7Lc0bDVAJEfT/IbS VA5l0m11b42uyKsMAckMjEQ2QjFzirjvrA2rJW61bz43n7Lk+q3vT+MCAsdAZZitJ1 pYWLiImKXwf4coF5UA+JNsyvX+ohb0sJejJGfwRE= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from no.workgroup ([46.94.158.150]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MWzfl-1jSuM438Qb-00XJw1; Tue, 09 Jun 2020 08:17:21 +0200 From: Gregor Zattler To: emacs-devel@gnu.org Subject: Re: feature/native-comp, comp-deferred-compilation: no recompilation when .elc newer than .eln? In-Reply-To: References: <875zcxgx8f.fsf@no.workgroup> <877dxczwsy.fsf@no.workgroup> <87ftc0nqtv.fsf@no.workgroup> Mail-Followup-To: emacs-devel@gnu.org Date: Tue, 09 Jun 2020 08:17:17 +0200 Message-ID: <87pna8rceq.fsf@no.workgroup> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:4yw9946QY4wrn3wnB7oIZqdQwPAK0NnYgbiE8m1NajztFqlF0nP v5fJYu2c949lTLHxH5q13BAW1Rw2vqkUhmmeg4f6cUSFHCD2usRmYXPmz+SiZzITEejLBf6 gHl88IcmzC/FpK2kY+kjgyOGw4A+OEMF6mvvTpG2PuY9WxqeA1YzyeN8Xe2sIlRb0+kGZmJ tOmwwbL5S5ZvIKDfyQvJw== X-UI-Out-Filterresults: notjunk:1;V03:K0:48ly9HOt9sM=:Tgqc3RDhwZfm1FwMIeXz2e Kdr1gRjK/X6XHb6vkRJHhnL8wGjwxuFOwQhkIdI/Jrr+2VqhnNoZSsr94ULoeJ+wxqFa6spOl Wx/CsfQc3e5qzDBCON4CqUgWL6G/CK2GBtjhCweohdwx6mThsCcPHhbti47zTBOsbCxwbYQBk Y7PH7xgntExEf4EuKMe7yUH7vH9nXIJSUJ8uB1p0Ti0sT5Y/3W8CHwBsFylWBbcQx+zMc2lMG 2FcQhEPAY+GgRNOrJbOCAj722SPbw6WqNVjb2i7P0hlq0xucmWArqLxKxmioa/73IUnrgiVsm m4ns1YHNVQKTrN2P6iwQlVe1K/dbh4FIQrW345SHtatYoYhtFJ/QKE+qKlUkl318aHsXe4EyI 8buHs1W97hdP5TAq/naDaYNjjFT1vTtKIzuizIcMAFAmmCnfUhbFwGlo/sYmnxaiEsCVf3jzW uXMi7ib5SWGzLE/Jj19HWnb6S09w+Y06O7EdK1k4snp/K5aPDHEAeyuCK2ox11Er1uJ9kXPQF sGvaHILVPKTBqSqw98Kl6whUXj21cBfbvjuiXOfSR+2UAfkrrC4uRf+MWuZJmcud4MtYMzl5+ cpzk8LmIXl/Q8ZsGSgqPyPZPE02exCbRKEI2+LLEB6E8uAj2An1LE/EqiUMzX6jZfT4Wh6dV+ qGIc3YKqON+QChD/mrqonm64QSJdystvJIgONDhBPkvGn0en51LtqAyP7EmlOJNtSBfMTJQ+w RZPHFfqv0eYKjZov93WJqWUvGLo3JQcr2M3AAibp341BAw+fQD06UH4gOv2qKx8QfCILIvJZm 9aR8LMBLpsH8hSQwmPhOOCiFHTsM4AjLcEdZ77jSvhXBAfPfHgYI3sf0hfTuhXbMqzPTbd2Pt Vr+zEQ8Ti0iQkq/vBMkkf8Ol8881CLij2InBp2ffWFhb+y83xNHzog84NBvKlVTH15GEmTGGy MxZPrHRoZuS12u3A/04HBQIBCT55g8SpOyPMZG9oJfoGULnXTfFTcqZt9ude7Nk8LxGI1E7Da iNC9EbgM250yRFvhVQ93Zd/vLz8CLgECPnRD9iYnWkRvKOXm9z/AOG4ZYlVdRho0+cx+bbHl4 8QE9s6LD6O/s1q14FoSe+rRvONjSpNnbDN9D60D+097HYRPvyTite5wcVwud9xCwaIx7eA0Mt bPYj9CMIrynrOn+sxXH92QJDq22Czy4+fVEhvABWMDFxkl9tmH2aQ5OFfO8eK7rnCpewE= Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.17.20; envelope-from=telegraph@gmx.net; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 02:17:22 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 06:17:28 -0000 Hi Andrea, * Andrea Corallo [2020-06-06; 21:51]: > This issue should be fixed by Nico's patch e38678b268 "Reduce the number > of files probed when finding a lisp file." > > Hope works for you, in case does not please complain :) I will test in the next days. Ciao; Gregor =2D- -... --- .-. . -.. ..--.. ...-.- From MAILER-DAEMON Tue Jun 09 09:01:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jidsX-0001vg-GG for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 09:01:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46456) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jidsV-0001vU-Th for emacs-devel@gnu.org; Tue, 09 Jun 2020 09:01:19 -0400 Received: from mail-il1-x133.google.com ([2607:f8b0:4864:20::133]:41930) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jidsT-0003ay-LG for emacs-devel@gnu.org; Tue, 09 Jun 2020 09:01:19 -0400 Received: by mail-il1-x133.google.com with SMTP id c75so8288203ila.8 for ; Tue, 09 Jun 2020 06:01:16 -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 :cc; bh=17mBF+vAf0evuioKk9o3j2bn/EmowoDUMVWC9mlgkZ8=; b=m4MhBClsjwUQtPJsaTZhZSluM67GEup8Ce17G66ayq5zaqqmlokibqQFDJ5k+qPv/f /R2/sdeN0Gs3YP9VUa7k5J6gcothT91CkyTqsMt+5bvGKWNG5Xb/VEAFrofyHXzhhRYH swa+tvKTM7HhOl5zFD4VEI5Gjk1aNCYKsiI2/PuslRmPFsvMJ1beD3anxyESEAT02E5O iLgu0h+ba1oSFMaAQG/eV8Qf0fyXtjL8Z4meJzk58r8jeErflwfGcbGAcCvO6/XQrtIt ltlNZSjWAoNbvQvHD+Gq367l3VhJEHZ21LVjMJ0aoWeFZLo3/ueNx/zoqm6nQbDOdB7N 4www== 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:cc; bh=17mBF+vAf0evuioKk9o3j2bn/EmowoDUMVWC9mlgkZ8=; b=ZMeE+gUbvA4Cn+jjZrGRIAsxh2iahmj6unM2wu41QQ6s11WHAa+0pZanhdN5HufLhW hCUDFlsWMXtuhTcprp1AG1wQDo+IVQPWS3ksNpwaLt3X+mRvhlZf4uckjgmkzNex5Yne /XMcg77jGRFc6eTIo1nTbNkqG+oMHVCxGozzB0ouaMhpfAEj3otwty/Buiq1PqeZMSGn WB2w969Ld1RzWumX8h8f0vrFgZs6U6eokfvSqUyb/ECtZhb+12VinLeSs7yVhj28eT0P wyUW9gWM92/1P0l7b2EX6KInQHxBg5t0H9gW/4Tmdjs3oP29vZulY2OkGsYysV2ZZ2EY CApA== X-Gm-Message-State: AOAM530xclIvk22mQ6ON+NlLX7LdyhDxIuHgsA6OVdkrl8gEqw68ByO8 0Iz1YzkVKBlJ5KLCEhm60z/SDj/ZbtA0yngEiAE= X-Google-Smtp-Source: ABdhPJxMS91qDbnGX0q8JKVQZzKs6OlOAdZQwUSIsZwRrDQoSvodOD4UPudRfmhSZzDqn+O68J5oFuuxm9qmBxRQqpY= X-Received: by 2002:a05:6e02:c:: with SMTP id h12mr25751534ilr.125.1591707676001; Tue, 09 Jun 2020 06:01:16 -0700 (PDT) MIME-Version: 1.0 References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> <501629768.766282.1591641713168@mail.yahoo.com> <1524408396.841056.1591651123991@mail.yahoo.com> In-Reply-To: <1524408396.841056.1591651123991@mail.yahoo.com> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Tue, 9 Jun 2020 14:01:06 +0100 Message-ID: Subject: Re: If undo-only why not a redo-only? To: Ergus Cc: Stefan Monnier , emacs-devel Content-Type: multipart/alternative; boundary="0000000000009d4be405a7a6526f" Received-SPF: pass client-ip=2607:f8b0:4864:20::133; envelope-from=joaotavora@gmail.com; helo=mail-il1-x133.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 13:01:20 -0000 --0000000000009d4be405a7a6526f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 8, 2020, 22:19 Ergus wrote: > Ohh, now I got it. > > Sorry, but the name `undo-redo` was not clear for me at all > Can't resist pointing out that that is quite understandable. The "prefix-with-library" name convention is fraught with these little misunderstandings. It's arguably the last bad option we have now, but we would need a proper namespace system to fix them: renaming can only do so much. Jo=C3=A3o --0000000000009d4be405a7a6526f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Jun 8, 2020, 22:19 Ergus <spacibba@aol.com> wrote:
Ohh, now I = got it.

Sorry, but the name `undo-redo` was not clear for me at all=C2=A0

Can'= t resist pointing out that that is quite=C2=A0 understandable. The "pr= efix-with-library" name convention is fraught with these little misund= erstandings. It's arguably the last bad option we have now, but we woul= d need a proper namespace system to fix them: renaming can only do so much.=

Jo=C3=A3o
--0000000000009d4be405a7a6526f-- From MAILER-DAEMON Tue Jun 09 10:33:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jifJf-0006Nx-CA for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 10:33:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jifJd-0006LX-QN for emacs-devel@gnu.org; Tue, 09 Jun 2020 10:33:25 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42488) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jifJc-0002rp-8g; Tue, 09 Jun 2020 10:33:24 -0400 Received: from [176.228.60.248] (port=1150 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jifJU-0000xk-EO; Tue, 09 Jun 2020 10:33:16 -0400 Date: Tue, 09 Jun 2020 17:32:58 +0300 Message-Id: <83a71c71id.fsf@gnu.org> From: Eli Zaretskii To: rms@gnu.org Cc: asjo@koldfront.dk, emacs-devel@gnu.org In-Reply-To: (message from Richard Stallman on Mon, 08 Jun 2020 22:37:56 -0400) Subject: Re: long-standing GTK bug References: <83zhbcg6s4.fsf@gnu.org> <87r1wng2ki.fsf@linaro.org> <83o8rrenn1.fsf@gnu.org> <87blnr6uck.fsf@tullinup.koldfront.dk> <87wo5kumkn.fsf_-_@tullinup.koldfront.dk> <86ftc5hc8j.fsf@gmail.com> <87d079io10.fsf@tullinup.koldfront.dk> <87ftbyokll.fsf@tullinup.koldfront.dk> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 14:33:26 -0000 > From: Richard Stallman > Date: Mon, 08 Jun 2020 22:37:56 -0400 > Cc: emacs-devel@gnu.org > > > > If you remove the workaround in frame.c and remove the call to > > > emacs_abort() when using GTK in x_connection_closed() in xterm.c, and > > > the connection to a display is terminated while Emacs has a window on > > > that display, you'll still get an endless stream of warnings from GLib, > > > i.e. "the GTK bug". > > > I have been looking further into it, and I think I now understand what > > happens. > > Ideally the GTK developers would fix this. Apparently a long time has > gone by and they have not done so. I suppose there is a reason why. > Does anyone know what it is? AFAIU, they concluded that Emacs doesn't use GTK as a well-behaving GTK application should, and so they decided not to fix this problem. From MAILER-DAEMON Tue Jun 09 11:19:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jig2O-0007u8-1g for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 11:19:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jig2L-0007rV-OL for emacs-devel@gnu.org; Tue, 09 Jun 2020 11:19:37 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:41642) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jig2K-0003Wb-0m for emacs-devel@gnu.org; Tue, 09 Jun 2020 11:19:37 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 059FISjG103265; Tue, 9 Jun 2020 15:19:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=jN8yBGTGCUghsb6/SlI6CPH1CP7aoI0rihWFUR2InF0=; b=PwdaGcPt5JL/FzjCCxYxEThAiOcFze1NCj5mF86Na+NDoCemr9vGjsQ+tXp6UCUwMMYq ZusdJaEq4w0spkqFxSzk5nLKbYeB8+6fytfUlx3da71fKHnQUpGClXmF+msu4Cn5hTTd HQLERKrklBL+hCcs93Jrm06YnJ2jEnCgROmArhLQ9RO0MF+qNdB3R+2891P392fgBdba ve5mb5jkpTVW2lhEhzYx1CTRrdiJJq8hnFnjJlcluKEJDF8sElLZaGbmiZExD8NzKqP1 aMLzE7/vw/cUvZ5D4a7/vls3vVB+N+UPYMn9QJkOGo0JmtL1armtV53JzRVGY4LFQWeR aw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2120.oracle.com with ESMTP id 31g3smw9rb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 09 Jun 2020 15:19:28 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 059FINfs122532; Tue, 9 Jun 2020 15:19:28 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31gn263x5a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 09 Jun 2020 15:19:27 +0000 Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 059FJQaT004379; Tue, 9 Jun 2020 15:19:26 GMT MIME-Version: 1.0 Message-ID: Date: Tue, 9 Jun 2020 08:19:25 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Ergus Cc: Stefan Monnier , emacs-devel Subject: RE: If undo-only why not a redo-only? References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> <501629768.766282.1591641713168@mail.yahoo.com> <1524408396.841056.1591651123991@mail.yahoo.com> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9647 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 mlxscore=0 phishscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006090117 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9647 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 cotscore=-2147483648 suspectscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=999 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006090117 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 11:19:32 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 15:19:38 -0000 >> Ohh, now I got it.=20 >> Sorry, but the name `undo-redo` was not clear for me at all=C2=A0 > > Can't resist pointing out that that is quite=C2=A0 understandable. > The "prefix-with-library" name convention is fraught with > these little misunderstandings. It's arguably the last bad > option we have now, but we would need a proper namespace > system to fix them: renaming can only do so much. I was thinking the same thing. Using hyphen to separate both pkg prefix and other parts of a name is confusing. Better, perhaps, to use something like `/' or `:' as pkg separator, while waiting for a real, namespace solution. But didn't you mean "least bad", not "last bad". Surely it's not the last one that can be found. ;-) From MAILER-DAEMON Tue Jun 09 11:21:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jig4X-0000hX-2N for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 11:21:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jig4W-0000hN-Ad for emacs-devel@gnu.org; Tue, 09 Jun 2020 11:21:52 -0400 Received: from mail-io1-xd2d.google.com ([2607:f8b0:4864:20::d2d]:44143) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jig4U-0003xj-T3 for emacs-devel@gnu.org; Tue, 09 Jun 2020 11:21:52 -0400 Received: by mail-io1-xd2d.google.com with SMTP id p20so23102442iop.11 for ; Tue, 09 Jun 2020 08:21:50 -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 :cc; bh=8uHv2KvcQ1227SLLld2nDJvE5UH09oTh3xqynZ2AGGU=; b=rz2nB9Pi1+K7hFpl43tMkJkIJDJpM46bvPGbyA/x+Z/6df9Us0ghladjpCPTFikl/c MzELcPExSehkPTw4IkuIp5QG/l1e9x25Z1Gsnn+7gV2XpSajV4VRLyRa/rlB8zCrUGtX wqvWMAB/8f5QWCfB3VnIHzDPz9fXSgQvdY/c65H11PCMRIqnKC9zkzEdf1hc5vy3PqAN 3vKCrrmPRgTJRfg9OXUBJ4Hh4vnnfdzk6l9bL36DYxK3VfV9GPyR7RuVXpB8F7+oDPCK xcxRFMT4Gy70FfvO9UEpZyyxxSSvt0tMvxshdfwsqRrq2yoWfOiNJZJiFzRGtUxNfW8B UGHA== 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:cc; bh=8uHv2KvcQ1227SLLld2nDJvE5UH09oTh3xqynZ2AGGU=; b=o0poy+LxKzFAASyCqJMVelsb1GKO1Nak9h6ua0efT6nFMxfe/QPi9jEzFE8DI7nxXF 9Tn/iWwRhURFVc77kNL7dfcBw6wmnifnOWvuJEGVAaiSeN2e3LVz1oN9vPH8n5IId17w 3Q8cPDfXjaeulIJicmVu8f72iWQ8ByKuGLEsII4i0JbBrofgHtyfYMLjD8JBbBIlsr7a +GZghL1fX18JeGRori7VovoWxp8WWWVyHvP9kE7mAgGi+a1yxkGWIwhJS6UuSZ/j2C16 mByrYuk/qER6WoLYASNZznHVFo10QAPksemJldO0BIfkvtaOYi0aqfGT4aN9MEVqKPYc 7Kuw== X-Gm-Message-State: AOAM533D/XLd/podacJZ4B6q4RBmjeg0fdd1TM+wrQcKzFiK+pWlWhyq F0USusKdgO4a1Nzu1A6a1fh4jlN4n2K2Mkhg/8g= X-Google-Smtp-Source: ABdhPJwGF1O9L1GZoyHEmxYQPOE2P+os7Oxshn58TTr8N/BBboezK3ewGMbiWn2NA67ixAMCvJXKXdfEDH22cfGUNaw= X-Received: by 2002:a02:ce8a:: with SMTP id y10mr27425679jaq.136.1591716109607; Tue, 09 Jun 2020 08:21:49 -0700 (PDT) MIME-Version: 1.0 References: <389165503.759660.1591638580779.ref@mail.yahoo.com> <389165503.759660.1591638580779@mail.yahoo.com> <501629768.766282.1591641713168@mail.yahoo.com> <1524408396.841056.1591651123991@mail.yahoo.com> In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Tue, 9 Jun 2020 16:21:38 +0100 Message-ID: Subject: Re: If undo-only why not a redo-only? To: Drew Adams Cc: Ergus , Stefan Monnier , emacs-devel Content-Type: multipart/alternative; boundary="0000000000004be8d005a7a84900" Received-SPF: pass client-ip=2607:f8b0:4864:20::d2d; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2d.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: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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, FROM_EXCESS_BASE64=0.979, 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-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 15:21:52 -0000 --0000000000004be8d005a7a84900 Content-Type: text/plain; charset="UTF-8" On Tue, Jun 9, 2020 at 4:19 PM Drew Adams wrote: > > But didn't you mean "least bad", not "last bad". Surely it's > not the last one that can be found. ;-) > Ehe, thanks, I did mean "least". Indeed, as we know, it's always possible to do worse... --0000000000004be8d005a7a84900 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Jun 9, 2020 at 4:19 PM Drew Adams <drew.adams@oracle.com> wrote:
<= div class=3D"gmail_quote">

But didn't you mean "least bad", not "last bad".=C2= =A0 Surely it's
not the last one that can be found. ;-)

Ehe, thanks, I did mean "least".=C2=A0 Indeed, as we know, =
it's always possible to do worse...
--0000000000004be8d005a7a84900-- From MAILER-DAEMON Tue Jun 09 16:13:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jikcM-000450-2e for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 16:13:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59734) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jikcJ-00042b-C1 for emacs-devel@gnu.org; Tue, 09 Jun 2020 16:13:03 -0400 Received: from colin.muc.de ([193.149.48.1]:59894 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1jikcH-0006CA-Uu for emacs-devel@gnu.org; Tue, 09 Jun 2020 16:13:03 -0400 Received: (qmail 56625 invoked by uid 3782); 9 Jun 2020 20:12:57 -0000 Received: from acm.muc.de (p4fe15c32.dip0.t-ipconnect.de [79.225.92.50]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Tue, 09 Jun 2020 22:12:56 +0200 Received: (qmail 5618 invoked by uid 1000); 9 Jun 2020 20:12:55 -0000 Date: Tue, 9 Jun 2020 20:12:55 +0000 To: =?utf-8?Q?Micha=C5=82?= Nazarewicz Cc: emacs-devel@gnu.org Subject: Re: Regexp for c-or-c++-mode Message-ID: <20200609201255.GB7104@ACM> References: <20200607164100.GB6212@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.1; envelope-from=acm@muc.de; helo=mail.muc.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 16:12:57 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 20:13:04 -0000 Hello, Micha�. On Sun, Jun 07, 2020 at 19:07:12 +0100, MichaÅ‚ Nazarewicz wrote: > On Sun, 7 Jun 2020 at 17:41, Alan Mackenzie wrote: > > In c-or-c++-mode--regexp, there are several occurrences of > > [ \t\r] > > . These expressions notably lack \n. This seems strange, given how \n > > is the normal line terminator in Emacs and \r is a rarely used artefact. > I wanted the regex to match single-line rather than multi-line statements > to avoid false positives. Though, other than #include lines, either will > probably work equally well. I don't fully understand. Why have you got the \r there? > -- > Best regards > ミãƒã‚¦ “ð“¶ð“²ð“·ð“ª86†ナザレヴイツ > «If at first you don’t succeed, give up skydiving» -- Alan Mackenzie (Nuremberg, Germany). From MAILER-DAEMON Tue Jun 09 20:53:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiozy-0005KS-50 for mharc-emacs-devel@gnu.org; Tue, 09 Jun 2020 20:53:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiozw-0005KK-L4 for emacs-devel@gnu.org; Tue, 09 Jun 2020 20:53:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54212) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jiozv-0006z8-71; Tue, 09 Jun 2020 20:53:43 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jiozu-0005FD-4f; Tue, 09 Jun 2020 20:53:42 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Eli Zaretskii Cc: asjo@koldfront.dk, emacs-devel@gnu.org In-Reply-To: <83a71c71id.fsf@gnu.org> (message from Eli Zaretskii on Tue, 09 Jun 2020 17:32:58 +0300) Subject: Re: long-standing GTK bug Reply-To: rms@gnu.org References: <83zhbcg6s4.fsf@gnu.org> <87r1wng2ki.fsf@linaro.org> <83o8rrenn1.fsf@gnu.org> <87blnr6uck.fsf@tullinup.koldfront.dk> <87wo5kumkn.fsf_-_@tullinup.koldfront.dk> <86ftc5hc8j.fsf@gmail.com> <87d079io10.fsf@tullinup.koldfront.dk> <87ftbyokll.fsf@tullinup.koldfront.dk> <83a71c71id.fsf@gnu.org> Message-Id: Date: Tue, 09 Jun 2020 20:53:42 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 00:53:44 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > Ideally the GTK developers would fix this. Apparently a long time has > > gone by and they have not done so. I suppose there is a reason why. > > Does anyone know what it is? > AFAIU, they concluded that Emacs doesn't use GTK as a well-behaving > GTK application should, and so they decided not to fix this problem. Did they say how a well-behaved program would do this job? If there a way Emacs could do that? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Wed Jun 10 01:04:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jisuE-0003Q3-Ox for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 01:04:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jisuD-0003N5-Ef for emacs-devel@gnu.org; Wed, 10 Jun 2020 01:04:05 -0400 Received: from mail-qk1-x731.google.com ([2607:f8b0:4864:20::731]:46079) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jisuB-0006pL-Bi for emacs-devel@gnu.org; Wed, 10 Jun 2020 01:04:05 -0400 Received: by mail-qk1-x731.google.com with SMTP id q8so878300qkm.12 for ; Tue, 09 Jun 2020 22:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fitzsim-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=DTFVe3xLhYXYnS1z3LLu/FKaetf387f0zrTGZN+nHuc=; b=f5vmgobrWYWbJwxuxvqTT9OolmERDy6Bt42Zh43ipzMUgMbm3Sb34k3aJuwlYdcKZ2 mwfl3dZ7ll9aDAOh5kT39UJgntWiblGb+g00dypZ0CvkdBbg2j5Mxetnb+FZv4dgRkRq +QGC2ynz0pvCEBGcJQpAGNm819mmtNINIG1cSL3B22V8iMFhSqnz636Zi7uxEbvL5mPl SHAzQzAJJIivc2YpPZw8eZxlDThU7zcBjEQG89vXCAS+e1gvGRhISVmJFpYbTAJ77XMH 80cCIH5RTmra3+0/YaRnzRm/uXaYvO2j3lbXVU+4Mbam0dW4V79zcCXfLRjnPxUrWHy8 7Pkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=DTFVe3xLhYXYnS1z3LLu/FKaetf387f0zrTGZN+nHuc=; b=M6ekcX95uSStfIs8FO7fx1Lc7zSAjbA/CMQQCblTbYwmtBoZDqhJ/DzDGE1L762Mw6 vA6nNzUMCts4SrrDND+IhOif3d2fNh/SrO+prctK/GnKo83L27SdQDCbGBrBD3sdYbm0 4UWjv4Y9751XgpRBGWhlHkXOnGlaoteDDd7EwEbfCqzE2sOxLhw1Z01Lwnh3Ag0vHCmW 33NhY8kz4WLDs+AZc75TgOTbjowrVFOILfQA3JoQ6L0Y7ipx1AClssaGcWiXpr5E84qw i+QaSBPLZs10q6Ibyxo5yVqVwVkKuPALoah5ulk47Xnyq7JklcmNZ/MyNSG/LJXyV7BJ QTEw== X-Gm-Message-State: AOAM53209+vmS6+54qFzvALOGJAiNCWOR9ijx897UAw9opQRc7qnDoC6 4/IHnwVof+XMp+aFMf5xeJ1eou5WFyc= X-Google-Smtp-Source: ABdhPJwAMgOU79gO+6fguDO2TU9iQpNmp/fWwYPkd/ZXL9I3EkiY3oGsyVQA7gb+iD13M7Whi5SmdQ== X-Received: by 2002:a37:847:: with SMTP id 68mr1398814qki.102.1591765439700; Tue, 09 Jun 2020 22:03:59 -0700 (PDT) Received: from localhost.localdomain (69-165-165-189.dsl.teksavvy.com. [69.165.165.189]) by smtp.gmail.com with ESMTPSA id j5sm13333399qtc.72.2020.06.09.22.03.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 09 Jun 2020 22:03:58 -0700 (PDT) From: Thomas Fitzsimmons To: Alexander Adolf Cc: Jean-Christophe Helary , emacs-devel@gnu.org Subject: Re: [Proposal] New EUDC backend for macOS address book References: <8da7df5281e91d8a351f97c0837d79b7@condition-alpha.com> <298df6a619aa45393b0ae9250123faef@condition-alpha.com> <866ca4b62cf30015aa28bfb9a2566dff@condition-alpha.com> Date: Wed, 10 Jun 2020 01:03:57 -0400 In-Reply-To: <866ca4b62cf30015aa28bfb9a2566dff@condition-alpha.com> (Alexander Adolf's message of "Mon, 08 Jun 2020 22:41:56 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2607:f8b0:4864:20::731; envelope-from=fitzsim@fitzsim.org; helo=mail-qk1-x731.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 05:04:05 -0000 Hi Alexander, Alexander Adolf writes: > Hello Thomas, Emacs Developers, > > Thomas Fitzsimmons writes: > >>>> [...] >>>> You can make the changes to eudc.texi, create a patch, then reply to >>>> this message with the patch attached. >>>> [...] > > Apologies for the delay! Please kindly find the patch attached. > > What I did: > > =E2=80=A2 Under "Overview", I added a new @section, paralleling what alre= ady > existed for BBDB. > > =E2=80=A2 Since the backend is not enabled by default, I have also added = a new > @section under "Installation". That new section, besides telling how > to enable the macOS Contacts backend, also describes the two available > backends, and how they differ. The text also deprecates the > pre-existing eudcb-mab.el, and recommends the new > eudcb-macos-contacts.el for new configurations. Thanks for writing this. > diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi > index 66867cbc58..0cea3126a0 100644 > --- a/doc/misc/eudc.texi > +++ b/doc/misc/eudc.texi > @@ -85,6 +85,8 @@ LDAP, Lightweight Directory Access Protocol > CCSO PH/QI > @item > BBDB, Big Brother's Insidious Database > +@item > +macOS Contacts > @end itemize >=20=20 > The main features of the EUDC interface are: > @@ -110,6 +112,7 @@ Interface to BBDB to let you insert server records in= to your own BBDB database > * LDAP:: What is LDAP ? > * CCSO PH/QI:: What is CCSO, PH, QI ? > * BBDB:: What is BBDB ? > +* macOS Contacts:: What is macOS Contacts ? > @end menu >=20=20 >=20=20 > @@ -186,6 +189,31 @@ performing queries on multiple servers. > EUDC also offers a means to insert results from directory queries into > your own local BBDB (@pxref{Creating BBDB Records}) >=20=20 > + > +@node macOS Contacts > +@section macOS Contacts > + > +@url{https://support.apple.com/guide/contacts/welcome/mac,, macOS > +Contacts} is the rolodex-like application that ships with the macOS > +operating system@footnote{Apple have changed the names of their > +operating system and some applications over time. macOS used to be > +called Mac OS X in the past, and the Contacts application was > +previously called Address Book.}. Probably leave out the links to apple.com throughout. > [...] It is tightly integrated with the > +other Apple applications (Mail, Calendar, etc.), and can synchronise > +contacts information between Apple devices via CardDAV servers (such > +as e.g. iCloud). Can you remove the above sentence, since it's not relevant to the Emacs integration? > +EUDC considers macOS Contacts as a directory server back end just like > +LDAP or PH/QI servers, though the macOS Contacts application always > +resides locally on your machine. Looks good. > [...] The point in this is not to offer an > +alternate way to query your macOS Contacts database (the macOS > +Contacts application itself provides much more flexible ways to do > +that), but rather to offer an interface to your local directory that > +is consistent with the interface to external directories (LDAP, > +PH/QI). I would leave this sentence out. I expect some users will find it useful as an alternate way of querying macOS Contacts, so as not to need to switch to the other application, and for other reasons. I don't want the manual to imply that it's not worth extending your EUDC backend in that direction, e.g., allowing writing complex queries in Elisp. I think the long term goal should be to make EUDC/Emacs better than these external tools at managing contact information. > [...] This is particularly interesting when performing queries on > +multiple servers. > > + > + > @node Installation > @chapter Installation >=20=20 > @@ -214,6 +242,7 @@ email composition buffers (@pxref{Inline Query Expans= ion}) >=20=20 > @menu > * LDAP Configuration:: EUDC needs external support for LDAP > +* macOS Contacts Configuration:: Enable the macOS Contacts backend > @end menu >=20=20 > @node LDAP Configuration > @@ -339,6 +368,42 @@ and the @file{.emacs} expressions become: > (customize-set-variable 'ldap-host-parameters-alist '(("" auth-source t)= )) > @end lisp >=20=20 > + > +@node macOS Contacts Configuration > +@section macOS Contacts Configuration > + > +macOS Contacts support is added by means of @file{eudcb-mab.el}, or > +@file{eudcb-macos-contacts.el} which are part of Emacs. > + > +@file{eudcb-mab.el} reverse engineers the format of the database file > +used by the macOS Contacts app, and accesses its contents directly. > +While this may promise some performance advantages, it comes at the > +cost of using an undocumented interface. Hence, users of > +@file{eudcb-mab.el} are recommended to double check the compatibility > +of @file{eudcb-mab.el} before upgrading to a new version of macOS. > +@file{eudcb-mab.el} is retained for backwards compatibility with > +existing configurations, and may be removed in a future release. Nice summary. > +@file{eudcb-macos-contacts.el} uses the public scripting interfaces > +offered by the Contacts app via the macOS > +@url{https://developer.apple.com/library/archive/documentation/AppleScri= pt/Conceptual/AppleScriptX/Concepts/osa.html,, > +Open Scripting Architecture (OSA)}. To accomplish this, > +@file{eudcb-macos-contacts.el} uses an external command line utility > +named > +@url{https://developer.apple.com/library/archive/documentation/OpenSourc= e/Conceptual/ShellScripting/AdvancedTechniques/AdvancedTechniques.html#//ap= ple_ref/doc/uid/TP40004268-TP40003521-SW44,, > +osascript}, which is included with all macOS versions since 10.0 > +(which was released 2001). @file{eudcb-macos-contacts.el} is hence > +recommended for all new configurations. > + > +To enable a macOS Contacts backend, first `require' the respective > +library to load it, and then set the `eudc-server' to localhost in > +your init file: > +@lisp > +(require 'eudcb-macos-contacts) > +(eudc-macos-contacts-set-server "localhost") > +@end lisp I think you should move this how-to paragraph to just under the one that begins "Contacts support is added [...]". Users interested in the history can read on. You can probably list/describe eudcb-macos-contacts.el before eudcb-mab.el, since it's the more recommended option. Thomas From MAILER-DAEMON Wed Jun 10 07:35:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiz1B-0002mQ-6s for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 07:35:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40370) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiz1A-0002m6-08 for emacs-devel@gnu.org; Wed, 10 Jun 2020 07:35:40 -0400 Received: from mail-wm1-f44.google.com ([209.85.128.44]:37370) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiz18-0006dv-Ka for emacs-devel@gnu.org; Wed, 10 Jun 2020 07:35:39 -0400 Received: by mail-wm1-f44.google.com with SMTP id y20so1507582wmi.2 for ; Wed, 10 Jun 2020 04:35:33 -0700 (PDT) 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:cc:content-transfer-encoding; bh=OdjUjsXPwtyPA25D8dOWlIf2JrWbgEIDqHLGBTFQ9CI=; b=o2lBr1EFJbb6rdGdXBqs1VAL0YmBdxDCnVxjxD4GoEcqNRWHRTSbx22a9mfEsyrR8O JCCFHwLt9jDaZfBGthJbEj5deIrL68llc1ONFKsg2vhV6xdH5Czx5mFBYJgsNaZxhV2q eT/BVdsQCnXgpMkabhQear7pYxr9n5F9fF7lttHovNFVyVupy8YNENcOOomfhUsl7z7x AZl2o/i3scWfPiUDjf/HyOWkW0Nq3b2afJyil7poBrRzWAaBuahfkrUIFwzu+XKTl+3r Abt7t/OyI+5e9ERiGXkoFKZg1TIZ25CcqmaWYU5Sk9ipeVAkZfXUhRITJ/VeoJ7BnQhM OOlg== X-Gm-Message-State: AOAM532FVIU3+dKLuIsEzHxaMTNWL5Gu0+mlkYVGBaa6qu+I4nMVKY5d jxwNpy9UQBr87pFoBSajlVcakzyAwm888w6Ks6UuqA61wCs= X-Google-Smtp-Source: ABdhPJwaMEMqv8xKvz286sSFLQHhgEzsHVg6MWZyiV+pD07/0Dtg81B06IcRqeQtlZwjurAu1Sj1m/jlyFhCluO7pUU= X-Received: by 2002:a05:600c:224f:: with SMTP id a15mr2740258wmm.166.1591788929928; Wed, 10 Jun 2020 04:35:29 -0700 (PDT) MIME-Version: 1.0 References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> In-Reply-To: <20200609201255.GB7104@ACM> From: =?UTF-8?Q?Micha=C5=82_Nazarewicz?= Date: Wed, 10 Jun 2020 12:35:19 +0100 Message-ID: Subject: Re: Regexp for c-or-c++-mode To: Alan Mackenzie Cc: emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=209.85.128.44; envelope-from=mnazarewicz@gmail.com; helo=mail-wm1-f44.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 07:35:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 11:35:40 -0000 On Tue, 9 Jun 2020 at 21:13, Alan Mackenzie wrote: > On Sun, Jun 07, 2020 at 19:07:12 +0100, Micha=C5=82 Nazarewicz wrote: > > On Sun, 7 Jun 2020 at 17:41, Alan Mackenzie wrote: > > > In c-or-c++-mode--regexp, there are several occurrences of > > > > [ \t\r] > > > > . These expressions notably lack \n. This seems strange, given how = \n > > > is the normal line terminator in Emacs and \r is a rarely used artefa= ct. > > > I wanted the regex to match single-line rather than multi-line statemen= ts > > to avoid false positives. Though, other than #include lines, either wil= l > > probably work equally well. > > I don't fully understand. Why have you got the \r there? I suppose you=E2=80=99re right. It should be [ \t\v\f] instead to catch all non-new-line white-space characters. Or [ \t\v\f\r\n] to catch all white-space characters. --=20 Best regards =E3=83=9F=E3=83=8F=E3=82=A6 =E2=80=9C=F0=9D=93=B6=F0=9D=93=B2=F0=9D=93=B7= =F0=9D=93=AA86=E2=80=9D =E3=83=8A=E3=82=B6=E3=83=AC=E3=83=B4=E3=82=A4=E3=83= =84 =C2=ABIf at first you don=E2=80=99t succeed, give up skydiving=C2=BB From MAILER-DAEMON Wed Jun 10 07:40:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jiz5y-0006f5-P2 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 07:40:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiz5w-0006cO-SY for emacs-devel@gnu.org; Wed, 10 Jun 2020 07:40:36 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:51554) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jiz5v-0007lv-Qq for emacs-devel@gnu.org; Wed, 10 Jun 2020 07:40:36 -0400 Received: by mail-wm1-x32c.google.com with SMTP id u13so1514878wml.1 for ; Wed, 10 Jun 2020 04:40:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:gmane-reply-to-list:date:in-reply-to :message-id:mime-version:content-transfer-encoding; bh=vki8Qa2S0MAmGFLF8FFUE403HHhp8sVYQyLLJRJB2rw=; b=NS+6JzfB8PTAPLdlayN6HY1Y3lfKWn40iMdKGJYq8fH3VsqJWo8C1ZQeDg59CswlNz GVDGniL9Uu7jF26mInAdIrCKm6mFrPaRLspCFYkMsFwSVJhCEpKqmBwWgQpGbScpfixz axLPRNV16aTCoOBFUGPQMIkHuO8n+8vB4ImNst0grfVyQqSypwuqlKa4IlYwUJ2OyK/7 Jps7XDIfaSsM71k6PECM56ECWVwplgCZPdnmm5RapTOk2Qc+UsYlz/2ufr9TVRZYzGZJ HG3Nxc1zuqXDnU0S/3VcO8Kdifdnf4d3verb0UulFg0F3BWvH2Z/E8m1W9SUIHk3tttn V8uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references :gmane-reply-to-list:date:in-reply-to:message-id:mime-version :content-transfer-encoding; bh=vki8Qa2S0MAmGFLF8FFUE403HHhp8sVYQyLLJRJB2rw=; b=rR1gO1tzuQG5SIpld+EhQzGtZbx8NYTD17OgNatIHcI5AhSNPn91i0Vz9yQhynbDeh COrpXWM08z0RsmItqZh7GDE+urWjx3dNLJJKj5fFj4KgCAxHw1xMoWuKyFmwv7j7nfpS ftPaAogBO48Qya9ThGvoQYpZkFQ8aaA8bu2IXE0HytaYPXCbQ+TO1268ISln50ZRItkx QWo0QmwSDT7IGGO/BMd5qZOiQUy7VFp8nP+P8Uff8MkTXE/L16riAzLVYlYUcoNVGBai 9Yycyw7XSUEcffkbrljaQmD3xSgvckPAB7avJFtaAfsJOmRyE7H5gTEiYE2wBs46UNMf CiYA== X-Gm-Message-State: AOAM53002DQ8Ld4ZDvxygYU9L+GbMPHzZWKHhyHFHWVkH4qj/u1sBSv+ 3W2YwezADSKGuKlOCXHugpgqw5nF X-Google-Smtp-Source: ABdhPJw/OmIf8E7xE1H2r9YBtKBTsSKljkQDJrjgvZOABydwNNyNatcEgxs/SUnAqkto7Z2yAqbnnw== X-Received: by 2002:a1c:1d44:: with SMTP id d65mr2747380wmd.179.1591789227763; Wed, 10 Jun 2020 04:40:27 -0700 (PDT) Received: from rpluim-mac (vav06-1-78-207-202-134.fbx.proxad.net. [78.207.202.134]) by smtp.gmail.com with ESMTPSA id t129sm7196192wmf.41.2020.06.10.04.40.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 04:40:26 -0700 (PDT) From: Robert Pluim To: =?utf-8?Q?Micha=C5=82?= Nazarewicz Cc: Alan Mackenzie , emacs-devel@gnu.org Subject: Re: Regexp for c-or-c++-mode References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> Gmane-Reply-To-List: yes Date: Wed, 10 Jun 2020 13:40:21 +0200 In-Reply-To: (=?utf-8?Q?=22Micha=C5=82?= Nazarewicz"'s message of "Wed, 10 Jun 2020 12:35:19 +0100") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=rpluim@gmail.com; helo=mail-wm1-x32c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 11:40:37 -0000 >>>>> On Wed, 10 Jun 2020 12:35:19 +0100, Micha=C5=82 Nazarewicz said: Micha=C5=82> On Tue, 9 Jun 2020 at 21:13, Alan Mackenzie w= rote: >> On Sun, Jun 07, 2020 at 19:07:12 +0100, Micha=C5=82 Nazarewicz wrote: >> > On Sun, 7 Jun 2020 at 17:41, Alan Mackenzie wrote: >> > > In c-or-c++-mode--regexp, there are several occurrences of >>=20 >> > > [ \t\r] >>=20 >> > > . These expressions notably lack \n. This seems strange, given= how \n >> > > is the normal line terminator in Emacs and \r is a rarely used a= rtefact. >>=20 >> > I wanted the regex to match single-line rather than multi-line sta= tements >> > to avoid false positives. Though, other than #include lines, eithe= r will >> > probably work equally well. >>=20 >> I don't fully understand. Why have you got the \r there? Micha=C5=82> I suppose you=E2=80=99re right. It should be [ \t\v\f] ins= tead to catch Micha=C5=82> all non-new-line white-space characters. Or [ \t\v\f\r\n] = to catch Micha=C5=82> all white-space characters. [[:blank:]] ? Robert From MAILER-DAEMON Wed Jun 10 08:02:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jizQe-0004r2-C4 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 08:02:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44352) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jizQc-0004ng-Eg for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:01:58 -0400 Received: from mout.web.de ([212.227.15.4]:51477) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jizQa-0003W6-Ms for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:01:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591790514; bh=JQpUGgdaxx08yrqyurUxivEjS6qcBZbUJNgQOc6Nr88=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=WWA4tE30+p8RABSo4uMhz1sN0mhpw8gcq60Jbz4LAdxDde9tPRv5jJObNgO7iHeFb Q5cbK7rirHgzuaKRs2UAb4a/cmj6CKijivoxytoI0bl/6zhv42VwPfH+DvTASi5jZL VpyXXP0tIJ/GKBTuibh0UI472r6umrXlkSk2kbbA= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0Lo0YS-1jGGJV3cs4-00g2HB; Wed, 10 Jun 2020 14:01:54 +0200 From: Michael Heerdegen To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87img2c0rv.fsf@web.de> <87img220r7.fsf@tcd.ie> <87pna9wr1o.fsf@web.de> <87mu5d1osn.fsf@tcd.ie> Date: Wed, 10 Jun 2020 14:01:52 +0200 In-Reply-To: <87mu5d1osn.fsf@tcd.ie> (Basil L. Contovounesios's message of "Mon, 08 Jun 2020 17:54:16 +0100") Message-ID: <87d067i0y7.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:WvuiJ2Z+qReSHCEy7CQ6CgWiH8mntKWnS9LW3v5b0JPLwyt2vj7 ccoJv8JqOHNj0CRgymHykLU9TPkx9G+AwONVCC68m4FUYvZKylbqiMXdXzfRZYuB+fqcOU6 BgIIo6eHPX0ZCbaRZZ7ib6OjYasIkegCeEZlH0wPs+pBQH8MTL4HVGqrHqEFexx5568NPAg agzQ1O8q99o45zSGY7XVw== X-UI-Out-Filterresults: notjunk:1;V03:K0:gOIZFNhdXBc=:sOqmR3kO5weuGf/5GMEkV+ qvc/r3disIk9QzTv2gdPXTLu7zTucpOiBtNSnkepcm4e7yKe/gkwoBJYErK3Y9sfvFwV7OpVH Kg4hsFAXBK0mPw1xWDn2EdWdpyIjzjDtp+ZkLvnEuXsT1ImkmHDSF5QK3clQKWoRGUZPIjaYd Lh7O3hX9i6wsl5sfCp8TcRO6i5DA2806bLcjx74xjCrNNuugk8U/vzAvF7SMAjQ5DM7ANqJeE wDZGueMgMHWLz5yhrBFTtITwFeRtAlnphmYmPhmbMut3CV2ISXzRVv0KXAJN9V5RiVR9oWFbV WXjjV/DncE9ruuPvObqDNQy80HsuiB3r9mJmo+8wmhNAEeHAPOykL8loTQn3XbZxBN3eoPErR WK3XXdBn8NjAltXUsaguu2Mx6p7cgLbd7rTIBSaCLU9bTXUN3noV9pHKdnCQM+P+KJV6cStLq EVfVI2ZeEhTi8MR2wlH2H2BRuf3L9k4RyrjstliAwj8+qcq9UW4gIBSjkfpE5/hbGdyTsF7SE 7psqZIkHtBEnBsAJPzJUrGLf8nyqQ6Y1s6ywF1o7HxExEPP/DgoehqK2aZUzeSwatyG+ZfHyW 5yRCH06ePeCPIEeC+jyW/7RJKHYBrWTOT8NCEqXQaCRSvjFoeRl54bRalLzUvr6z8zqtafadr 7lQdIjyeiG5F6Ai11z4pTccc8nKRlTmOlC8fh6hpmiOjWLKql85p7DLl6s0gRGw9iEut+1r4k 82kHtpNB9SaJg51VrGOEdGpWtj/w9RLFLvFIOj7d9chzQaArcrPGOjgZcDvvD6uJzXKIntOeN RcygIyoku8+0eN9ngSCsbGkw8JHkoMNi3Q3nWi7nO9SmNfn+VOcCc+smxTfzgXn8nhSRjW7Ry BbrmV9c3xhw0sz6CHrldzH7YMzGfK3r0NgRVvoI/Dg6e9yQX3vBA7p/x3fyW7i8JaikuU4w73 gpOG6o0OdVensIVUtuUGwmx2s9ICjrugLs5dUb+tR7wj0rE+RZJVSzVeRHqFCK/+uIpUw9V42 CakJyqyadXzvBTJzqs8aPyGmhYVV94NLaGE0U/DIAIweO30Bd18esgzUUk9z6I9of/6g1Pq+o qOB90UE2WEj0eFUxIFwA20FsgxkuIIANi5+ruJCyeVXGyCZEBi38NOw1r0GePlTl/vQxOPlOP +G+AY8aEtyAVniV1PbThZ/znNrpX14Z+/VkW6022Dpd3GputbMQGIpxOkRhDkS+Hcg74eD5lI +r2UlWcUpBW8kP6J3BEWcjWosErwQ+S/e3qdDSg== Received-SPF: pass client-ip=212.227.15.4; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 08:01:55 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 12:01:59 -0000 "Basil L. Contovounesios" writes: > > So we would have to consider what could happen if the user aborts > > loading the page, the url can't be retrieved, there is an intermediate > > error, and such. That's why I think using the callback of > > `url-retrieve' would be better/cleaner. > > Could you store the desired callback or other values in eww-data? I guess. But it's not the solution I would prefer. BTW, `eww-render' already has a POINT argument. Not quite enough for our purpose, though. Another alternative: we could make the callback arg of the `url-retrieve' call in `eww' a closure remembering the value of `eww-after-render-hook'. That would make binding the hook variable work as expected. Michael. From MAILER-DAEMON Wed Jun 10 08:07:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jizVZ-0003mq-80 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 08:07:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jizVX-0003ib-IK for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:07:03 -0400 Received: from mout.web.de ([212.227.15.3]:34277) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jizVW-0004zb-KB for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:07:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1591790819; bh=IjCpMueY3GMgLmTZHz27oGnGBBdMvoxqZsQm7ytipuM=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=WOmlivUc2OXUSWWqkONQr4WMNLDhl1116+TB7j2/Ku4fygy8kViUgGWdQot+mC4ED 3mc3ULFB2Gok8K3pnhpv4HyeZ79MBNhr3QqvY+hm5Nfj0Eub5ia4LJ3Q7R5DqK6kil CDiWrlkraK824peQzLP9lkcEMVdOsC/VH27NvT24= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([94.217.119.187]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MXoca-1jQGIZ2nme-00Y6tU; Wed, 10 Jun 2020 14:06:59 +0200 From: Michael Heerdegen To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Lars Ingebrigtsen Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87tv0a5k5b.fsf@web.de> <87mu5ec3pf.fsf@web.de> <87mu5e3ncg.fsf@tcd.ie> <87tuzlwrdv.fsf@web.de> <87bllt1olu.fsf@tcd.ie> Date: Wed, 10 Jun 2020 14:06:58 +0200 In-Reply-To: <87bllt1olu.fsf@tcd.ie> (Basil L. Contovounesios's message of "Mon, 08 Jun 2020 17:58:21 +0100") Message-ID: <878sgvi0pp.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:xIHUc0gnW2SnFCqqvxo1rgMqLhCHdjnZaDU6xoXqGqBJ4D4Ozxm cDDw1zVzRRd/SmqZU5WjVrJZP89SzejE3P8CnzchBwSYnut14SOVFzdWK8FgS/xw/OzfuBX //N/O6SR972cTrs8nPS59qi6YxJizF6aHouyQ2cIOTC9E6AB3xAALdD8l9qDsec2ogBTPRK ziddUjxGDDSktsINnZ06w== X-UI-Out-Filterresults: notjunk:1;V03:K0:rB7B1tcFgZI=:3zdVRBKj1UW/OS9ypx31sQ fqu648JDJ8OA+Zq7idbzBt9JaNgZTRd9fP3sBCOY0rqWKwTZDCpFnqjyyLy4qe2FwN3VkX8bl 4fGJX+1ZOK7XsxKtRnHOwfcFiQKJSaSK4f7NT/FlKjEnDyxPZ10YmoJ95ET3Z+ElGBwHFJMsa FfLX+s670+OzzphRobTjNzvwQT2kLGkyAa2t/YR9WjizkdRSNUDLtbsHdGUJn3gGzeaDSiNPT cktZcY1kHWbCREX7dl7H8JTfJEjozHYUgfWXMVk3NFnQuEX+BSkb62AR+J+i7nPIJlfhFQiyB TpSHpXmyAZESHfYSFaY8vb2GQw3I/IgQ9C4/Otf1rU4jx1Xja1WGZqe7qmLCBesl4mWUruTpt K1N4zJeNwi68xIkrkjWk1hFyqyD8JidFYW5CKTbAsal89H8pMNGiqw37k3jhP9ry9pg9Vm+Da F5ye7DG5nZ88GzQ1CXryMCku9Uhcs3sfxAdNVt6tpxNuAeFQ/CwtJS8uQMZtgQTfPtHI1q9Ay 1nY3TaDpX5CEOhTRSU1lcSfFTGLEB4/VNnkASG4K1PuONwiBwQIIl1byDYmy4y+sbKuXMeP7F cqrgqA6lY+zjUyJy4xEMfvnZT64c3PhLoGHlRJYh8ntTchNSt9X5SZZIaahaf35UchWFHGW4q eOehlvSDFB66+CEctCfenEmPMxocyF29xuo3uVAmqMdjlbryQ8uxZsbJy+kVUVXUrtMV8hfA/ Wat8BGVS7MACtGoHOd3FTiYmAhoJ2EwQHS8lEhxwFZk0buZollcZp2gXNCayzYo/mFQVm+rDz 1j6ofKz47wHaZ3cmq3qtvnyh/K3OOcH7gLXa9FfS8vEw7zYPzPunzl78chW9Ic6LiQQ8MFEmx Uq29pIibeUygGi/0oxj7d+OpeKIXsWPj1/q6RDNSik8wl4XsQFdqDytA/Co7OTrvGAhFdmRsX +s1EBq090HuCQ8zBsBaAC0BiZVNKyhLVRXQRP40XDijOytZVx1aady9+KWBQxYex/kTHWoNSo jBuSrAojD8pqMtonljMZFL57UclM96UbNDASrxibWCA+wRUTCTpllcnC35g50iqd5N5Px7s9v w4110ECZDtk9Vt2EMbbnvG6uVEROD/LiXSh3Tvfj2dyeq6OOJpbS7KJVnvwI+CYCdzZnhsQFq zdjJngnn2v/n+jd3lpY/rNwTnq+kudtNB12IrOToIfjsLdE7LvM2pkTKTbdyJZQ9Gx1v/8woy OW8sakyeMylKcS5FL Received-SPF: pass client-ip=212.227.15.3; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 07:42:04 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 12:07:04 -0000 "Basil L. Contovounesios" writes: > Is the proposed bookmark.el support not meant to supersede EWW's current > bookmark system? In the long run, maybe. I will not do that now. Personally, I don't feel bad about eww having a separate bookmarking mechanism like any other browser. Michael. From MAILER-DAEMON Wed Jun 10 08:44:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj05M-000789-Om for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 08:44:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53720) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj05K-00073c-6v for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:44:02 -0400 Received: from sonic302-2.consmr.mail.bf2.yahoo.com ([74.6.135.41]:38970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj05I-0004JA-4r for emacs-devel@gnu.org; Wed, 10 Jun 2020 08:44:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591793035; bh=VpIfOfuZeOhaEizAOgMKlyMbEuumTVOUGkMHZabE4HY=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=tpE8wdAUnOzyxd8Bbo5jf1rbSEjWCRkrIQH+8qPXIRgIrJArgrxoS0nPCagTyP6ohQccTXqVvTEBf7+8fxg4uZLoy6HCcpVt3768Yz+dShDk5faAt7P9Vx+hIfeKuB8peiceI6qktFOluLEovK0BFSL/88uvY5HzCHIN8zXDgv9L/joeeZHGtliNkq6/uQ76HFqYQKcytFsQWZeuCK7Z/mOS1rkEBHAvcwW1PWiIUI4WJDLvo9eEOv+WKoPYx9feEBvKEuclDQN2ZJj+XqlK91hpNvmmBDwT6g+B5BNcwHFi3vKqvPxHeYiUkVdIqL+V7vATcsss41NHYaGxS4gkwg== X-YMail-OSG: jNntNzMVM1nZKocPUq4natNyw9_vhnd30BnMvUvlAhSY2oJGVcmHYX27DBuwoXw txaizgkBzOe0yikTjTKCkcRDw_v5v9lQlLFxLqlVdcNvxBu0JOl.PiN4DA68r5.w4QeUXoARgFOX _ZT3NkYvl1fPVvM0SnsW4SSlJx4RssgvKpCcPdcBGmTn6HHt0IfxVmCaof4rj0cH4yihsQBCCZ5I hW5mwlR5uAfZPcIoytM3xT.hogwrjhAuXi5IxAPKCWkZCt3uHLHNT_J4sUyixnClO6lGy3_ZOWp4 G6b.2iy2GVW.OA2zH4ywtVbw2p97q121Ss_qardGbEWRLrxsY7TheATc.h_2dqcjp.jOz_VxDPqt BstDfmLcvUfwiNGI5qNWMD1goAgqe1ZANOtJ0gUe1JS_4Q8aVln1_IvEhlvnJ4jIr.UuSAaUjVuL 2lhv1GC_n7ifvK1Z_mQ5QOicnVAkc4OCV703HMvxeiPCHr82gOm8fHn6Jyu_SwBdOjwiE9nNFDY2 H7Cn4WD.sOFzqrDXQ2J4_2YSFebyQRVc_JT5kOf6bcLqkK6DMwdAIPRWXI0psQd1IsliKlGVnrLj ZgRpJtuMMQkygI6GcXLyStUhBkqoMmkmOfo8jauSQ3YnKOTZ6nvx91cFhqBSzdfViNHhritVq4w5 OcwzSsrsUBTleeQYIF2s.Ul6YsA2.HPIfI3uSmtGNj4sTYLoDmEpC7qH7TwZQrYr9fOIqW0JRTS6 .wdrPevwjp2rIxw2lPr8VunFYAQbLmsRIS1aJwulVtkkBkP84_0pCFtGBLuTtyjA9VNyy0dvsM3. pFVYUIXS0K9IvoxwZeA8qbwoyBcmon8rIZNwTxsrbpXnLluh0C4_8IJiWpuzA3LwYCpxL3Kruc3S F6jnnRltyGvTweyLJQOyLsRfTKvvTRQ2M1TcDQK5EkI7842htNzlydUmDi_oaM5014MjxIOPD1KK 8XPrGPMWh8K1yEwiSm_yHgz1IH.8wEhgHNU5NwqdyNVeGSmCwAaksdgYx6Fpwlqb61UCspGCTIfi DdBS8E4.1FybMeMbbdGf6Y3CQ8GZbOksVQDgOS7tpJAFK4N5I6zUPbyLo6JMLG8JSmStpA8foUxQ 071RViHVq5GR_TBOa1UYQ0ovsgvUCtahiyKvNwXsOhYSqR3TjulGPBlLnsEtDbeHqg2VnkFw5Efl 0rjFHjJMOzDcV.3ANR69LJJalu5RaSSrCHSwSJs0qhQ5P2BO.A0cBoFnDGRc9y96xv4Jx8kqkF7. hL7a4KAn3WkBELXDdHIsRx34b9HCjoa6Ly9Ffmqog1DVXhOZo8U4sX.AgLdM0PYbosv8lrTB3IDI - Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Wed, 10 Jun 2020 12:43:55 +0000 Date: Wed, 10 Jun 2020 12:43:53 +0000 (UTC) From: Ergus Reply-To: Ergus To: "juri@linkov.net" Cc: "emacs-devel@gnu.org" Message-ID: <708761156.1474071.1591793033632@mail.yahoo.com> In-Reply-To: <87k10jerlv.fsf@mail.linkov.net> References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> Subject: Tab-bar autoclose question MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_1474070_1102901798.1591793033631" X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 1487 Received-SPF: pass client-ip=74.6.135.41; envelope-from=spacibba@aol.com; helo=sonic302-2.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 08:43:56 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_50=0.8, 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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 12:44:02 -0000 ------=_Part_1474070_1102901798.1591793033631 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Juri: I am wondering if maybe there is a simple method to autohide/autoclose the = tabbar in some condition. For example, when I close all the other tabs and = there is only one. Is it a straightforward/out_of_the_box method to customize that?=C2=A0 Best,Ergus ------=_Part_1474070_1102901798.1591793033631 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi Juri:

I am wondering if maybe there is a simple method to autohide/autoclose the tabbar in some condition. For example, when I close all the other tabs and there is only one.

Is it a straightforward/out_of_the_box method to customize that? 

Best,
Ergus
------=_Part_1474070_1102901798.1591793033631-- From MAILER-DAEMON Wed Jun 10 09:58:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj1Fc-0003zi-FT for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 09:58:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj1FX-0003wr-LV for emacs-devel@gnu.org; Wed, 10 Jun 2020 09:58:39 -0400 Received: from mail-wm1-f50.google.com ([209.85.128.50]:54667) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj1FW-0006df-6J for emacs-devel@gnu.org; Wed, 10 Jun 2020 09:58:39 -0400 Received: by mail-wm1-f50.google.com with SMTP id g10so1923050wmh.4 for ; Wed, 10 Jun 2020 06:58:32 -0700 (PDT) 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:cc:content-transfer-encoding; bh=OzewHZsMVwnLtYsV/wictzHhz7OuBZSm6/ZdrSmMn1c=; b=rMDynQRAmLNzTpzsyBwcbMYUP4T8L+0g5I6eiGZ0jeSQjOg3iA/R1OxZQdzFz/mJLr AdfafLIsbKK8u4+m9iz3rwCfDAzIZwb4v4S6Y7Kw5AO5geEkCEZ8c22aKfCH0dOT9ZhH m+cCUN5BBlXYEJvRKWouApSYn9gaqDbTyWeFHpzp8e60fJmAt7bJNztA+i6KNFkZ30HQ hdwYCbxgJD7pVT76gnSrMJyxBrgacB2UUomabDLF4s1AUxT5rAXVcOQ2U/hMxh00WAYn m4ovL9xclP6now/IlLFVAd96KJQ5hE7HMD4xE7QDUMZsKtHuOuU0++zPX3CyE+bzmt7O 6p5Q== X-Gm-Message-State: AOAM530641gjoDXhQsx7h7PRGz2TZe7WbwpXFYri84yl1iM32y1wOOox QnSV5UBYsY3tcDnzhujbpsxAlcI86zrJ266MTEo= X-Google-Smtp-Source: ABdhPJxpPpGeID9zDvNoLeCjwyXtYknjrBRvTBk919rsJuFHjFVyAPmkZYPJaZryb84EfZb2wyrM+gCDB64jKKF0hFU= X-Received: by 2002:a05:600c:4401:: with SMTP id u1mr3330001wmn.36.1591797510256; Wed, 10 Jun 2020 06:58:30 -0700 (PDT) MIME-Version: 1.0 References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> In-Reply-To: From: =?UTF-8?Q?Micha=C5=82_Nazarewicz?= Date: Wed, 10 Jun 2020 14:58:18 +0100 Message-ID: Subject: Re: Regexp for c-or-c++-mode To: Robert Pluim Cc: Alan Mackenzie , emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=209.85.128.50; envelope-from=mnazarewicz@gmail.com; helo=mail-wm1-f50.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 09:58:31 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 13:58:39 -0000 On Wed, 10 Jun 2020 at 12:40, Robert Pluim wrote: > Micha=C5=82> I suppose you=E2=80=99re right. It should be [ \t\v\f] i= nstead to catch > Micha=C5=82> all non-new-line white-space characters. Or [ \t\v\f\r\n= ] to catch > Micha=C5=82> all white-space characters. > > [[:blank:]] ? [[:blank:]] is defined in terms of Unicode properties so that would catch things which C does not consider white-space. --=20 Best regards =E3=83=9F=E3=83=8F=E3=82=A6 =E2=80=9C=F0=9D=93=B6=F0=9D=93=B2=F0=9D=93=B7= =F0=9D=93=AA86=E2=80=9D =E3=83=8A=E3=82=B6=E3=83=AC=E3=83=B4=E3=82=A4=E3=83= =84 =C2=ABIf at first you don=E2=80=99t succeed, give up skydiving=C2=BB From MAILER-DAEMON Wed Jun 10 10:15:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj1W2-0003hl-0G for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 10:15:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj1Vz-0003hV-Py for emacs-devel@gnu.org; Wed, 10 Jun 2020 10:15:39 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:54747) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj1Vw-0002ki-3r for emacs-devel@gnu.org; Wed, 10 Jun 2020 10:15:37 -0400 Received: by mail-wm1-x331.google.com with SMTP id g10so1979631wmh.4 for ; Wed, 10 Jun 2020 07:15:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-transfer-encoding; bh=mk4ZAbTZN8R6M2MJTHLmNyYOkB+b9oD6JsgQxJo/1vM=; b=aIcf4NLKriHxYguhDRLfHynCnvfryCSH3ljJw1qunxqVjmb5Hz4/lsMpwFokrfL6V1 9/9AJmEZG6jNfbO7DY1vwC/LiWF/xlpYuI0yEJ1NxEYFuf6uGPp8W58W4jXLPNq6H08j TlyLEmGFSLLUgvDQCJXoajWtMvuQMToTUmWVe74hmn20k8SZGjzT9pyj7eIrSZEiRfoU 2IA5AP8h59c1eczlJuJe2T8yEiLiG3B0k1DnjPbANWqPg36Pbkokc1VQ2iF/n5wS74bH cD9+Wyqqyr3oObmJLkRqKEigFBnqfZnFERISlISWhtUtQxF4GN0YCvG5s0IwLktQ/mKU XxEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:mime-version:content-transfer-encoding; bh=mk4ZAbTZN8R6M2MJTHLmNyYOkB+b9oD6JsgQxJo/1vM=; b=k2dq1xVjq6qpCNR1UPjzQ7YtWaeA5c9zEpV+2HN9eQiPA6zV37szom8xY3omJZ8Uao AcHBgSPPM+f2yELrOyK+w7lNn9nF6LdP0Y4Cfc+es6ukPjrnNHTYB2vPn9QEGbjQbU00 ybGNZZJDGaARrrUa6NLyqE5DkF5X80UUzuMQeCeyDP70swkhRtLBpzv1Y1+fgIA/HrUi zioC/jV8UOmmoy+aM3fRgtFMlYnb9FhJ0E9oCOikom8NpcGA70DtdW16mY4gdq7QQtxj wcJcXUWGwMkni2ycoqrP/CqDCPTw0v5OkVHLZf5dYRg6KT7n8TfSRCyY+WBfNluFwDUt liPw== X-Gm-Message-State: AOAM531D+g40qll0dbK2RiVmniqUMegqfssTHHk7Prj6AqHchrNhoa1b lUgCEsOeq0APecrfUrLqawM62RCl X-Google-Smtp-Source: ABdhPJyCbI8peW0wkME3ca8y0Zj5+pGz0FKLab+WSzhdVDXGUgFvC9Ki+sdzsw3b7GNHw+wvB8zxnw== X-Received: by 2002:a1c:e20a:: with SMTP id z10mr3242859wmg.63.1591798525724; Wed, 10 Jun 2020 07:15:25 -0700 (PDT) Received: from rpluim-mac (vav06-1-78-207-202-134.fbx.proxad.net. [78.207.202.134]) by smtp.gmail.com with ESMTPSA id k14sm8355745wrq.97.2020.06.10.07.15.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 07:15:24 -0700 (PDT) From: Robert Pluim To: =?utf-8?Q?Micha=C5=82?= Nazarewicz Cc: Alan Mackenzie , emacs-devel@gnu.org Subject: Re: Regexp for c-or-c++-mode References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> Date: Wed, 10 Jun 2020 16:15:21 +0200 In-Reply-To: (=?utf-8?Q?=22Micha=C5=82?= Nazarewicz"'s message of "Wed, 10 Jun 2020 14:58:18 +0100") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=rpluim@gmail.com; helo=mail-wm1-x331.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 14:15:40 -0000 >>>>> On Wed, 10 Jun 2020 14:58:18 +0100, Micha=C5=82 Nazarewicz said: Micha=C5=82> On Wed, 10 Jun 2020 at 12:40, Robert Pluim wrote: Micha=C5=82> I suppose you=E2=80=99re right. It should be [ \t\v\f] ins= tead to catch Micha=C5=82> all non-new-line white-space characters. Or [ \t\v\f\r\n] = to catch Micha=C5=82> all white-space characters. >>=20 >> [[:blank:]] ? Micha=C5=82> [[:blank:]] is defined in terms of Unicode properties so t= hat would Micha=C5=82> catch things which C does not consider white-space. [[:space:]] then, which uses the buffer's syntax table. Robert From MAILER-DAEMON Wed Jun 10 10:34:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj1o9-00046d-8n for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 10:34:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj1o8-00046U-6y for emacs-devel@gnu.org; Wed, 10 Jun 2020 10:34:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41494) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jj1o6-0008Dg-MQ; Wed, 10 Jun 2020 10:34:22 -0400 Received: from [176.228.60.248] (port=2094 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jj1no-0004wK-Sz; Wed, 10 Jun 2020 10:34:12 -0400 Date: Wed, 10 Jun 2020 17:33:49 +0300 Message-Id: <83sgf356sy.fsf@gnu.org> From: Eli Zaretskii To: rms@gnu.org Cc: asjo@koldfront.dk, emacs-devel@gnu.org In-Reply-To: (message from Richard Stallman on Tue, 09 Jun 2020 20:53:42 -0400) Subject: Re: long-standing GTK bug References: <83zhbcg6s4.fsf@gnu.org> <87r1wng2ki.fsf@linaro.org> <83o8rrenn1.fsf@gnu.org> <87blnr6uck.fsf@tullinup.koldfront.dk> <87wo5kumkn.fsf_-_@tullinup.koldfront.dk> <86ftc5hc8j.fsf@gmail.com> <87d079io10.fsf@tullinup.koldfront.dk> <87ftbyokll.fsf@tullinup.koldfront.dk> <83a71c71id.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 14:34:24 -0000 > From: Richard Stallman > Cc: asjo@koldfront.dk, emacs-devel@gnu.org > Date: Tue, 09 Jun 2020 20:53:42 -0400 > > > AFAIU, they concluded that Emacs doesn't use GTK as a well-behaving > > GTK application should, and so they decided not to fix this problem. > > Did they say how a well-behaved program would do this job? I believe that should be quite clear to someone who is familiar with how GTK applications should be written. (I'm not one of those experts.) > If there a way Emacs could do that? I think someone is working on an Emacs configuration that will support only GTK, and that configuration should then be able to do that. From MAILER-DAEMON Wed Jun 10 11:33:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj2jl-0004HE-69 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 11:33:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44148) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj2jj-0004EU-LZ for emacs-devel@gnu.org; Wed, 10 Jun 2020 11:33:55 -0400 Received: from quimby.gnus.org ([2a01:4f9:2b:f0f::2]:56666) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj2ji-0006UO-Aq; Wed, 10 Jun 2020 11:33:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=pVVEIWhP/1z4YzgijtYJmucLT3HiGZURHUAq2RcvCHQ=; b=T2frG+4eObrXQSK7x2/Q5nP17I Y7RhGJXIC2sxrYOj7FNLn5ufflrDSB8BCK546wrALGhItChhe+FVtrcA1DrpfOt1EP8x0SiYb7ehu BPYmj4ZI2yYwB9hVwf6WCruL9Mme3jJajmWstu/Z8N7HWpl8xUYAYEkNQTFeEFDfISGY=; Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=marnie) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jj2jS-0005hS-89; Wed, 10 Jun 2020 17:33:48 +0200 From: Lars Ingebrigtsen To: Stefan Monnier Cc: "Tassilo Horn" , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> Date: Wed, 10 Jun 2020 17:33:37 +0200 In-Reply-To: (Stefan Monnier's message of "Tue, 19 May 2020 11:02:02 -0400") Message-ID: <878sgv9bqm.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a01:4f9:2b:f0f::2; envelope-from=larsi@gnus.org; helo=quimby.gnus.org 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 15:33:56 -0000 Stefan Monnier writes: > So there's some finer judgment going on. > Adding oneself to `auto-mode-alist` is considered as acceptable. > I think adding oneself to `browse-url-default-handlers` falls into the > same category. Yeah, I agree -- especially since this is an ELPA package, and not something a user might just load to futz around with... (I guess I'm somewhat sensitive to the issue because I poke around in a bunch of files and have a tendency to load them just to make skipping around in them easier with `M-.'. It's so, so annoying to find that just loading a file suddenly makes Emacs behave differently... but that's a problem for developers, and shouldn't take precedence over what's good for users.) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From MAILER-DAEMON Wed Jun 10 11:39:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj2pI-00010D-Im for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 11:39:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj2pH-000104-Rj for emacs-devel@gnu.org; Wed, 10 Jun 2020 11:39:39 -0400 Received: from quimby.gnus.org ([2a01:4f9:2b:f0f::2]:56766) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj2pH-0008Me-6K; Wed, 10 Jun 2020 11:39:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=OlvGtl66lIHy1K5yqgXVotKGBFTUSgqkkIrA/FEXNmI=; b=ghTgIySKO69hFia6Z75/dHMJKW lt4q4bmJCu55l4z3C8OyaQWvHbzQJxUTf3VqfsUrgWhsLu8+/ry7W4/xeMIUQcvB9aThXoTddeaFe WkhJ73ln8Adji6FQoO45hDCu1HEjkoqKDpeTZww0wyA2pohV4usypp+vxHOKFP4Oc2Bw=; Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=marnie) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jj2p9-0005jg-VF; Wed, 10 Jun 2020 17:39:35 +0200 From: Lars Ingebrigtsen To: Michael Heerdegen Cc: ams@gnu.org (Alfred M. Szmidt), orontee@gmail.com, npostavs@gmail.com, drew.adams@oracle.com, emacs-devel@gnu.org Subject: Re: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87zha21i17.fsf@gmail.com> <87pnau45wp.fsf@web.de> <87pnatlo1h.fsf@gmail.com> <87zh9wljig.fsf@web.de> <87k10za187.fsf@web.de> Date: Wed, 10 Jun 2020 17:39:31 +0200 In-Reply-To: <87k10za187.fsf@web.de> (Michael Heerdegen's message of "Tue, 26 May 2020 04:17:44 +0200") Message-ID: <874krj9bgs.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a01:4f9:2b:f0f::2; envelope-from=larsi@gnus.org; helo=quimby.gnus.org 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 15:39:40 -0000 Michael Heerdegen writes: > Lars, we are wondering why you implemented a separate bookmarking > mechanism for eww instead of relying on the existing Emacs bookmarks. > Could you give us some background? Do eww bookmarks offer some feature > that vanilla bookmarks don't support? Or did you just want to have > something separate? There's two reasons -- I had no idea that bookmark.el existed. Well, OK, that's the main reason. The other is that ever web browser has a bookmark facility, and that's not usually mixed in with, well, other stuff. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From MAILER-DAEMON Wed Jun 10 12:27:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj3ZZ-0001fd-7s for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 12:27:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj3ZY-0001fN-8W for emacs-devel@gnu.org; Wed, 10 Jun 2020 12:27:28 -0400 Received: from sonic316-11.consmr.mail.bf2.yahoo.com ([74.6.130.121]:42710) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj3ZW-0005FB-3W for emacs-devel@gnu.org; Wed, 10 Jun 2020 12:27:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591806443; bh=aNjT+YCCMr+2s0zRPvYQRHTDCnQS6myKKAXpmoOiWO8=; h=Date:From:Reply-To:To:Subject:References:From:Subject; b=TJ2Hz4t67fdKAi/KPQawvEhWrfCMZj7BYvarYdXRdIUi/I+jZP6M1yQKBKDL+4pqvZBR8wc1y85CcTdx1/BhTJUM/7gks147YdbdQn//cm0Pk1AHNgONSyzxN9youmTDsLdvlCS+LTNhJF4TqPO5GqF8kp5ybNsK8lL+RYwgX5dssg485nK1GJEnVTU0W+oHZiduXtymaqHU216S+1yXp08v8dZrIC9Jr8EvAF0DyRwEVZDJ4RMlW/TsLarg53f27VCPs0LXN5NsLK/gfp5IsRQUgVDlfQdmrjqB3/8H47+cuzREsDRmH5sEFrrpeMV1R6iDvlGoVmLgjDFIgY0yFg== X-YMail-OSG: 698oPv8VM1nFQTmq8GTvapa32yc4RzEt_KABlXDTEKrUwvbR00EP.qBlIMSRsYm eYQCVyrgB4gvkNmapSO4b8oJww8IEe47YBnzml0ldBnY2FIpQ5liOOfcyx5W8aOZM_iS26fyThKP ABFSeEvB7yS0ueRPWycvlUwIvwzJb_41RSi77ozqHocEaycwsKP6wPg7vn8mFgZXDg6itUlWZVB1 AejnOfj_I3jK8hpaMZFchNosdrdaW10igttUhcSlgEDhMF8SlAvAPZ.gEePIwrY7eqaPVEzUK3dE on88EmWBsET62T3kZP.7OB1sc.FFqouVMqa4do2pCiIB6IFeZ4NYCJws6t_mlJexy1sDqgimAKbE KjVlkCc.cm5DXpmlMkb9cL8T2ThdNU3eRoE4MmOYtfel314OyoQd.FjX.eNKJilcw_k3dyPxwOol _R5rJN7UZB4xsOjD8oB.MToKGfyg_djVfd2Ng8LYKLLS7klQjt6jwLOonWUClDltjQ7W7K4VAXmf NnUZUe0MuYakblzGIQzzi8GAxGF1wbTLQaTHWmg4nqCFWsJuq2d96.MLexKkUgFSOc0dP9dh0nvS BzLFiiL2yA.SOSud_z4SeyZbFrnLaCQCfb5v6QQ1yjj5i7UiYCnhKuw9cy0zqLUkBv5qDSLN8FGY Uzjnx.bFSKlJ34KL9Oe_PkF4R3J0r535eBoQUWy0r9Q92D6dUF50UeUuRrkhFcnjOYBRbm8G9Efj 5iYOZwDyCXpafGsaKToH.K3kDY2ELP69gGGm71xhVlp5bKG2WZfSCmuCEp10O9IqEDmmIEVCATjb 6ASoLRvG2YVv.69C2dGW04BbFONVieW51Fo_rqCLrJpbVZMq_hJWreSiuKB7c4NiE1aBp5Iy8nY6 f5Ak.IIdXe27MQFqxQe.PIhs3t35wMg018XPIpMj73GSK3u2.uEJbZ2N2krAwcTBcD.u462DGgTI yyhdPkUsqNwt_5yCmDQI36yoZKzuo4PviSe4sUFLNn8pYo0PFelwtx0u8O.inK13UFRPXt5KLjs8 NDDM.rZqr3xpyMV.frsJtHsxqDTYkFwjezVg50m9VoyE7hZBNDPwdy7xp91ocEaEqswvP9iOEK8R TPXxm3K9uhemKZ96pwJIA1HW2MRzAedgRnx9LIRZLmjQ9eZPIeUnw1ytmZs28d3OIESeR30NpKlp os1RZ_UQLpoBXpWBl_eFqfDYSuwJTpnGOQeZF2jKkzKl2GRP3uHBqYoweOVqEVv9IQPgCOMou5LQ 8TvLuAaXZbubcnGtB4j92UxygKtrXdz5rg5hSyTf9dGCQQQO3BBwXHCDEnBlnnvbOIh6Hp01.fw- - Received: from sonic.gate.mail.ne1.yahoo.com by sonic316.consmr.mail.bf2.yahoo.com with HTTP; Wed, 10 Jun 2020 16:27:23 +0000 Date: Wed, 10 Jun 2020 16:27:18 +0000 (UTC) From: Ergus Reply-To: Ergus To: "emacs-devel@gnu.org" Message-ID: <1704199899.1577092.1591806438580@mail.yahoo.com> Subject: vertical fido-mode MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_1577091_190526473.1591806438579" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 4233 Received-SPF: pass client-ip=74.6.130.121; envelope-from=spacibba@aol.com; helo=sonic316-11.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 12:27:23 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 16:27:28 -0000 ------=_Part_1577091_190526473.1591806438579 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Joao. The last 2 days I have been wondering if it will be too complex (or potenti= ally error prone) to customize fido to show the candidates vertically (like= in ivy). In ido mode it was more or less easy to do just changing the separator, but= that created so many issues that multiple packages were created to "fix" t= hem. I could be interested in this feature ONLY if it doesn't add too much = complexity to fido-mode. Just now I tried: (fido-mode t) (setq icomplete-separator "\n"=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0icomplete-h= ide-common-prefix nil=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0icomplete-in-buffer = t) So far it seems to be working with some expected tiny issues no so complex = to fix: 1) An extra '{' and missing new line (see picture) that overlaps the cursor= and in vertical mode is confusing. (There is not separator between the cur= sor and the list of candidates) 2) The arrows could need to change bindings as in vertical mode and should do what and are doing now. 3) Maybe TAB should complete the current candidate in place (the first cand= idate or the common part of all candidates), in any case not open the *Comp= letions* buffer? Because the completion candidates are already there (this = is in general for fido mode), it will be more familiar for Bash users for e= xample. Best,Ergus ------=_Part_1577091_190526473.1591806438579 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi Joao.

The last 2 days I have been wondering if it will be too complex (or potentially error prone) to customize fido to show the candidates vertically (like in ivy).

In ido mode it was more or less easy to do just changing the separator, but that created so many issues that multiple packages were created to "fix" them. I could be interested in this feature ONLY if it doesn't add too much complexity to fido-mode.

Just now I tried:

(fido-mode t)

(setq icomplete-separator "\n"
         icomplete-hide-common-prefix nil
         icomplete-in-buffer t)


So far it seems to be working with some expected tiny issues no so complex to fix:

1) An extra '{' and missing new line (see picture) that overlaps the cursor and in vertical mode is confusing. (There is not separator between the cursor and the list of candidates)

2) The arrows could need to change bindings as in vertical mode <up> and <down> should do what <left> and <right> are doing now.

3) Maybe TAB should complete the current candidate in place (the first candidate or the common part of all candidates), in any case not open the *Completions* buffer? Because the completion candidates are already there (this is in general for fido mode), it will be more familiar for Bash users for example.

Best,
Ergus

------=_Part_1577091_190526473.1591806438579-- From MAILER-DAEMON Wed Jun 10 12:58:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj43d-0004dv-R8 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 12:58:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45256) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj43c-0004aK-B8 for emacs-devel@gnu.org; Wed, 10 Jun 2020 12:58:32 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:8981) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj43Z-0003QG-V7; Wed, 10 Jun 2020 12:58:31 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id C5AE24416FA; Wed, 10 Jun 2020 12:51:56 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A3D344416F2; Wed, 10 Jun 2020 12:51:54 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591807914; bh=bTugFLUHFmJepiIGUork6oySk0qcDwgXjcMFXidv4Ao=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=HMvUV60ZWIqy8O8dtzO1YTPScWOfLhWcseEbTmcE0eBQU2IlTU3tVPwkvlcWxN0D8 Xssrofk7tCrYnSu+D6/y4SSedeM+gXNtibhL9rOFseZGiaWGJ2f/arg7SaoQYCSuP0 Jo5cBKvArNxCBep0oNawahuVVIC76mm0W5a90aqLv+DYHUO7AeJnjBe8aD1By7eMlN lzjsmu3sp3zwDXkpXrpN3QyT1UYH7Ax1M9cs/6p/q8Ym43XFyrDqVdtu2UDuW8fJme 8Os6HQDdLC4W5KfZPchX4GaMlRhAYn9vbdvjVGFLOJCDDouHFY6YvX7pxzBJP7H7cE thUaKkKUJX1NA== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 3E2C3120175; Wed, 10 Jun 2020 12:51:54 -0400 (EDT) From: Stefan Monnier To: Lars Ingebrigtsen Cc: "Tassilo Horn" , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. Message-ID: References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> Date: Wed, 10 Jun 2020 12:51:52 -0400 In-Reply-To: <878sgv9bqm.fsf@gnus.org> (Lars Ingebrigtsen's message of "Wed, 10 Jun 2020 17:33:37 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 12:51:57 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 16:58:32 -0000 > (I guess I'm somewhat sensitive to the issue because I poke around in a > bunch of files and have a tendency to load them just to make skipping > around in them easier with `M-.'. It's so, so annoying to find that > just loading a file suddenly makes Emacs behave differently... but > that's a problem for developers, and shouldn't take precedence over > what's good for users.) Now that Emacs sometimes loads a file just to find potential completions in `C-h i` this is something that affects not just "hardcore developers" but any random end user. So we should definitely take these problems seriously. Stefan From MAILER-DAEMON Wed Jun 10 13:03:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj48U-0008Rh-7N for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 13:03:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj48R-0008QV-SR for emacs-devel@gnu.org; Wed, 10 Jun 2020 13:03:31 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:65001) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj48P-0004jh-82 for emacs-devel@gnu.org; Wed, 10 Jun 2020 13:03:30 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 54B724416FD; Wed, 10 Jun 2020 12:53:58 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B9CEC4416F8; Wed, 10 Jun 2020 12:53:56 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591808036; bh=KOY8IBxW6HhuS3hDy/OOhWcIFNxYCYRlRF/it1oHbSU=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=koguyILJs81aBjzkQrcgN8WTTd5lptTLNDOMMoYacl2ZVAjQAnJHqyZrCvJSp+T3F vdFxIk144mWNSd6UhfS9M/Qh1B2Hk7y0/ewA54FlMH0DCjPBDR3db2v4vDYnNemONE 5BZixziwvf59dQC46BdJQiWmmp8OFb61LrKQC6Uzy8MeK2w3cpxIoZwNK//XcwWdeg Ne2hHU8Gw2Javz7HNwYuQ2doZUkGjHRKzfzenJ/SHIddQTZRnQJnzSmlk3ukXxOioW 0Lc/5h45Kbg5G5Mpjn8DqO3O4l3RFCzF7zmzi+vn25TBy+V5AvFZyzvceHjhkifJ1d RZauYiomhS9/Q== Received: from alfajor (unknown [157.52.17.179]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E2AFD1207FB; Wed, 10 Jun 2020 12:53:55 -0400 (EDT) From: Stefan Monnier To: Ergus Cc: "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Message-ID: References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> Date: Wed, 10 Jun 2020 12:53:51 -0400 In-Reply-To: <1704199899.1577092.1591806438580@mail.yahoo.com> (Ergus's message of "Wed, 10 Jun 2020 16:27:18 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 12:51:57 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 17:03:32 -0000 BTW, I think the icomplete-vertical functionality could/should be supported directly by complete.el. Stefan Ergus [2020-06-10 16:27:18] wrote: > Hi Joao. > The last 2 days I have been wondering if it will be too complex (or > potentially error prone) to customize fido to show the candidates vertica= lly > (like in ivy). > > In ido mode it was more or less easy to do just changing the separator, b= ut > that created so many issues that multiple packages were created to "fix" > them. I could be interested in this feature ONLY if it doesn't add too mu= ch > complexity to fido-mode. > Just now I tried: > > (fido-mode t) > > (setq icomplete-separator "\n"=A0 =A0 =A0 =A0 =A0icomplete-hide-common-pr= efix nil=A0 =A0 =A0 > =A0 =A0icomplete-in-buffer t) > > So far it seems to be working with some expected tiny issues no so comple= x to fix: > > 1) An extra '{' and missing new line (see picture) that overlaps the curs= or > and in vertical mode is confusing. (There is not separator between the > cursor and the list of candidates) > 2) The arrows could need to change bindings as in vertical mode and > should do what and are doing now. > 3) Maybe TAB should complete the current candidate in place (the first > candidate or the common part of all candidates), in any case not open the > *Completions* buffer? Because the completion candidates are already there > (this is in general for fido mode), it will be more familiar for Bash use= rs > for example. > > Best,Ergus From MAILER-DAEMON Wed Jun 10 14:26:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj5R6-0006wb-Cs for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 14:26:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49008) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj5R3-0006rk-Qb for emacs-devel@gnu.org; Wed, 10 Jun 2020 14:26:49 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46298) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jj5R3-0006t2-2K; Wed, 10 Jun 2020 14:26:49 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:56065) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jj5R2-0008TH-7X; Wed, 10 Jun 2020 14:26:48 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id D1B1927C0064; Wed, 10 Jun 2020 14:26:47 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Wed, 10 Jun 2020 14:26:47 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudehiedguddvjecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeegrdehgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec8636.dip0.t-ipconnect.de [93.236.134.54]) by mail.messagingengine.com (Postfix) with ESMTPA id 19E593280065; Wed, 10 Jun 2020 14:26:45 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier Cc: Lars Ingebrigtsen , Michael Albinus , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> Mail-Followup-To: Stefan Monnier , Lars Ingebrigtsen , Michael Albinus , Emacs developers Date: Wed, 10 Jun 2020 20:26:41 +0200 In-Reply-To: (Stefan Monnier's message of "Wed, 10 Jun 2020 12:51:52 -0400") Message-ID: <87eeqmsroe.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 18:26:50 -0000 Stefan Monnier writes: >> (I guess I'm somewhat sensitive to the issue because I poke around in >> a bunch of files and have a tendency to load them just to make >> skipping around in them easier with `M-.'. It's so, so annoying to >> find that just loading a file suddenly makes Emacs behave >> differently... but that's a problem for developers, and shouldn't >> take precedence over what's good for users.) > > Now that Emacs sometimes loads a file just to find potential > completions in `C-h i` this is something that affects not just > "hardcore developers" but any random end user. > > So we should definitely take these problems seriously. Since we seem to agree that this specific case is allright, may I initiate a new debbugs release with that change? (Feel free to do it yourself if you want.) Bye, Tassilo From MAILER-DAEMON Wed Jun 10 15:01:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj5yc-0006Rk-DY for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:01:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56286) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj5ya-0006P0-Ff for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:01:28 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:38421) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj5yZ-0005Vu-4B for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:01:28 -0400 Received: by mail-wm1-x32e.google.com with SMTP id f185so2828123wmf.3 for ; Wed, 10 Jun 2020 12:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/JbA6MEifVg+K8YREVLuo1KceoH6DgpCb/zNqi1Cw1o=; b=Te6dkfcFGJy1x/b4fi2DQ3y/53XAjEZgrw1/6gy8jplIKdKvZJm2r1aBK18KgRRb4l qIThEs6Sp0Ed7CshgjaRi73N8eSUEAbWA1qlRBiJ6/OW3BXGBtQwTpP4PBfKkOg32cGh Qeb/MA6LbOVqajXh4LntesKQzU9+HEUBtdmX5FNE+ibvV2wfbsmxGafq2eL6Ww6nQDoG oyjCdRum3j1Kiei20CCk/8/qImbuAg3qKIIo8s5n+XPKCXhMYc7jmdHe35g4U6AmYXTx ihiyEc7lonq1U38Zfgl2YY/R4cchbdvR0UISHGYPlAcUDQRV/4loSH1S4Fm3qO9gnr0i urqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/JbA6MEifVg+K8YREVLuo1KceoH6DgpCb/zNqi1Cw1o=; b=nyAU1gmWxW2VF8lHzsjDjwpuVWzXn6GoV/pRFPXlwx8u3eZd32ezFkYp3cpcFbW2eU d6IU4bGYic+QrWc3Cvj0nL+Sg+jEB9Q/cQreBJXxGEeeIWuZFGen5ndkI4jnyj/SeP4s dauDz9Hv+iHr1lLzdRnWAmPAVmV4BDuJh4ZoyGZxHsnyDpHVWu5eWeD0u38XNKpDk0a1 cjt2H3eUTOfKCdD1joo9lkgio//+QxpkGiD5uWO1R9TGXAsi1oEb5+ZYn24BSQsNAZaN l/BC5IEYz+SO062x9oO7u6LDEdxmcuSyMHEvUEBy6zEOZy/p3JVa84lmyjRgwTc0GY1v 8yLw== X-Gm-Message-State: AOAM533ZMJTruQQ/W8mgnV86/B2HyLsKwKDKGNGtgs4Qk+7z5lnUET3h Ly4g0wMvq//VuK1EbaDxpnVwhs0g X-Google-Smtp-Source: ABdhPJzQed2wVRUzA2Wyzact12blbn1YwcITF/1nxIuPMQyN12ZUrGzCzbd2End6+rgQEa0Ts/oTxw== X-Received: by 2002:a1c:740e:: with SMTP id p14mr4781631wmc.155.1591815678540; Wed, 10 Jun 2020 12:01:18 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d2sm1029775wrs.95.2020.06.10.12.01.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Jun 2020 12:01:17 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode To: Stefan Monnier , Ergus Cc: "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> From: Dmitry Gutov Message-ID: <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> Date: Wed, 10 Jun 2020 22:01:16 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:01:28 -0000 On 10.06.2020 19:53, Stefan Monnier wrote: > I think the icomplete-vertical functionality could/should be supported > directly by complete.el. Someone could contact the author of https://github.com/oantolin/icomplete-vertical for copyright assignment (and either incorporate the mode, or just some parts of it), in order not to have to solve the same problems all over again. From MAILER-DAEMON Wed Jun 10 15:07:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj64H-0004Lj-2s for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:07:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57520) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj64F-0004JG-Fv for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:07:19 -0400 Received: from mout.gmx.net ([212.227.17.20]:44439) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj64D-0006ce-Vv for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:07:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591816031; bh=XlRnEIfXWoYuxsxmcKpj8+fK7aiFLeteeyVKUBMRLWw=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=T8F/gBxOyJbrcIcyOopANTfoyHE7C0IFM0TyWeC5VjW723XVFHLdgGh+/mjhFTDfE +gKnY6Twb8Fv0x2m7Wx+sEEJRyogPEM3q4dVZme1VwFk54S0wrsKiLuBo112VILLVv 0U80ud/lle+Un2Kh04KVk/bTUjwQXHXCPGT1hJng= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([79.140.117.219]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mz9Z5-1ixCAe1nP9-00wCMu; Wed, 10 Jun 2020 21:07:11 +0200 From: Michael Albinus To: Stefan Monnier Cc: Lars Ingebrigtsen , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> Date: Wed, 10 Jun 2020 21:07:10 +0200 In-Reply-To: <87eeqmsroe.fsf@gnu.org> (Tassilo Horn's message of "Wed, 10 Jun 2020 20:26:41 +0200") Message-ID: <87y2oueo4h.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:pmntHj/xvcX16y1OOrXMJbNGR1Fi2VaoYL0FcJh/5a5k8hIogaZ LBlZQ98BiZjMQw4YLGoqOVS2vZGUBAfhILiHhDDvcZgF8ozT1I7AC/n7y2ji/IRzxBfv31L VydamXOz7Xr6/utXjuofbv96fkbBZqonffzAuBRmzSNDOpd8YftLOiSj+WPayibJnmOowvw xdyRvmBeofCUFJ1281tAA== X-UI-Out-Filterresults: notjunk:1;V03:K0:hJp/u1zVePY=:ZBy3JYXm9J/hv6vO4xsvh9 28Sbdh5ALJSCZZd1QsE8Wpx0zFbHnKv9HYGaVd9Ft5e9Lcga1dG5/sRWDsD0y3/v5MNpmk0mk yrHIWGIF1XUE8MVn2y6tCMACn2tDuh7Dqkoq8yoaphcC9O2zpzX5XkF5qKk3lDufRUwbkGupI 5TLAHecrt+2xGw5+joPRyMyH3hnZSunNjJ2EujgxhQ9q8QEHxz1/3K8vIUjR2vkmwklI8wLrX T3Z5opeDWwJ8LwqBZ0MOaFBJGR0tZX/2PvQYJd29wJn4hX6bzeCjDNpqKEBD1KDmvZAPkFKEH mWZXiSHdIa9jaBG7ieqKpDdXF0VS84h6gYDtIrJ0YlYh1spdOzkisKq6Mv9NQLzjwFnpL3W4C WuC0qPvThBu3ARa/alG2mZP3i5I/8TaOtnHlca+CxV+rSrEAs/7yXKdKxnvhBFOevHo3EvdoW Czj4jv2w0xx3GOJf9msZWgjhJ+/wIUVVAGGQgZ3QEt/P7YIVln2zmA+lWNyZnKk5w+7GKH2tk Xw6IAaxhfeGDH31PywS6McEBm/6BCKCCIXxgKQGQDdkCSVN1cpDDfhYBCy+2wAwyPlhJyVyb9 BNiRmGnSxxHgPsg/HNDp7jk5GBMUKF0fSggxhbVYC/I1yeNrQ8cdbI/gkaiRO4uIA9X5ilqn4 MSzjsCgwDrgbZaN19JXRQjQGJ8hZxHEnBJgvHIzPJCLtjMn9VH1GPJfXKrXsx63xN6ZKRk2+6 RV/xk7tIx/cWtrUhWLNDTagQdIAIo0zumsmyGG4AyF+ua+zCT1OD+HuF0dd0uDi1XYOOTLJRy vH0DKqpD6EsQCyu7/pFkhcN0O5eOLEpDmWgXCJJCK0QYg05nDVcDY/k69pSyxGd/FAPAc0ELV 5RIOrQLfYt8EnRrcFat8eBMb9z2fppG4lTJRPFA4Q17wp9n10s/zUpcHnytJmfTtHGXr7ugpC M3Obud3oCarVJXydrke8apAZKcA8CIu78o2XhfgASOVpSoOtH4u9fA8jGaCKYQ2lKxkbsrWUJ rEqiEpE4JK2dX+TyhnMRK41RB2OcrQvxTlJtfLhEJ5fvYQb25Qyo0bhwWwnSQq3hlo1q8oFJM MY7S12a0OoQYefxVgPfwUmHv/m1Q1/Qd6py6kOKhc0cMj2vlGhwci2g4CwQFM1OijOAPQ/bE4 mevaSEvqenZx8f9R+Wnshbd9CYuCs2fF3/7nUX/2Eg9P8KCnlo5kGAp+oyq85W+MJG2EIsMGx 2Tb6hkHu9NIQakQix Received-SPF: pass client-ip=212.227.17.20; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:07:15 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:07:19 -0000 Tassilo Horn writes: I Tassilo, >> Now that Emacs sometimes loads a file just to find potential >> completions in `C-h i` this is something that affects not just >> "hardcore developers" but any random end user. >> >> So we should definitely take these problems seriously. > > Since we seem to agree that this specific case is allright, may I > initiate a new debbugs release with that change? (Feel free to do it > yourself if you want.) I have no objection in making a new debbugs release, but I also have no opinion in the discussed problem. Don't know, if everybody "seem to agree". > Bye, > Tassilo Best regards, Michael. From MAILER-DAEMON Wed Jun 10 15:11:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj68K-0007WL-QH for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:11:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj68J-0007Ve-Aj for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:11:31 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:13217) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj68G-0007qP-SO for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:11:29 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 71B2A44170C; Wed, 10 Jun 2020 15:11:26 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 11B774416F5; Wed, 10 Jun 2020 15:11:25 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591816285; bh=1eO+aD9+XHOMzQQd7F06Rg1qWBLet+UcEBpgEuqGOes=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=O2g28uLINMmMt39P8kZmir24BxZlXfEIeX83HpbEUkaDv06kgJgQCLGrz4C+pH61g CD5MZW9FBEarfwjA4z/OYjqxkOiS7MeI4ufj3PFK49b6+GFK+qdezwMMhU1/JwFbWK 3pDfmzmB1j7rwqgXHwzwSRqBNV0NvTfKUZI4H+tXDcm8RKnqaiE+QT1doXrbMTC6pg oUDmVnXJeWPc02luqUV6Zq5of0abxJJOpP8jGFFjiDJDk+RipjEMxSPMZaamVhQahh WZ+kjsdc1nuQhgl0HZrWJD0I4oejs3uOBXhKFwCdic1WytwMPqAcCViF5kDu02gSqk CjO5r4+JHvp1Q== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D14DC120497; Wed, 10 Jun 2020 15:11:24 -0400 (EDT) From: Stefan Monnier To: Lars Ingebrigtsen Cc: Michael Albinus , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. Message-ID: References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> Date: Wed, 10 Jun 2020 15:11:24 -0400 In-Reply-To: <87eeqmsroe.fsf@gnu.org> (Tassilo Horn's message of "Wed, 10 Jun 2020 20:26:41 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:11:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:11:31 -0000 > Since we seem to agree that this specific case is allright, may I > initiate a new debbugs release with that change? (Feel free to do it Yes, of course, Stefan From MAILER-DAEMON Wed Jun 10 15:20:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6Gm-0003sI-3a for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:20:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60158) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6Gk-0003rd-Lb for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:20:14 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:8838) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6Gj-0000bc-44 for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:20:13 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 6B89510033A; Wed, 10 Jun 2020 15:20:10 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 77167100091; Wed, 10 Jun 2020 15:20:08 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591816808; bh=RacnLTTQr2C85a0YPlFBVsT41sLG+vdFAEDsiiTFSPs=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=nQbR+UW6e11UdHMNHuVBPEy4ydbkjfRbHx9j5K4jNIKyooELHrlU10rDlALJBhv1v NagIgBtLKYM8PSvAhPIdLjoN1BuCNPH0DGqqoYvMOcGIPnA5PKSDtwHFyF/NC/edsd /bjBk0Iej4GsOhFL0mT0eIa9IAZulgZTYo8HeeuukvPfV/ftow2D7HAdNN8a8kEjV8 9g+5UE6AHfF32JDZjze1IjNCNDlHB+MyDoshzoCvwUETxJbF5fQspttXoGTMj62V8i JN+JvdGmzVE1YfEnGFQpADZYVQUainJKC5vy4nFtRQ38wp3g4NPI5UlifIUltMKyjT mBXhc3tAU0SKQ== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2C4741203AD; Wed, 10 Jun 2020 15:20:08 -0400 (EDT) From: Stefan Monnier To: Mattias =?windows-1252?Q?Engdeg=E5rd?= Cc: emacs-devel@gnu.org Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) Message-ID: References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> Date: Wed, 10 Jun 2020 15:20:05 -0400 In-Reply-To: <20200610181239.947C4204DF@vcs0.savannah.gnu.org> ("Mattias =?windows-1252?Q?Engdeg=E5rd=22's?= message of "Wed, 10 Jun 2020 14:12:39 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.089 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:11:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:20:14 -0000 > +(defun color-dark-p (rgb) > + "Whether RGB is more readable against white than black. > +RGB is a 3-element list (R G B), each component in the range [0,1]. > +This predicate can be used both for determining a suitable (black or white) > +contrast colour with RGB as background and as foreground." > + (unless (<= 0 (apply #'min rgb) (apply #'max rgb) 1) > + (error "RGB components %S not in [0,1]" rgb)) > + ;; Compute the relative luminance after gamma-correcting (assuming sRGB), > + ;; and compare to a cut-off value determined experimentally. > + ;; See https://en.wikipedia.org/wiki/Relative_luminance for details. > + (let* ((sr (nth 0 rgb)) > + (sg (nth 1 rgb)) > + (sb (nth 2 rgb)) > + ;; Gamma-correct the RGB components to linear values. > + ;; Use the power 2.2 as an approximation to sRGB gamma; > + ;; it should be good enough for the purpose of this function. > + (r (expt sr 2.2)) > + (g (expt sg 2.2)) > + (b (expt sb 2.2)) > + (y (+ (* r 0.2126) (* g 0.7152) (* b 0.0722)))) Could we arrange to share the code with `color-srgb-to-xyz` (in `color.el`)? > + (< y (eval-when-compile (expt 0.6 2.2))))) Where does this 0.6 come from? I don't see it in https://en.wikipedia.org/wiki/Relative_luminance [ I don't doubt it's a good choice, but I think we should document where these thing come from. ] Stefan From MAILER-DAEMON Wed Jun 10 15:34:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6Uk-0007vE-5R for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:34:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6Ui-0007v1-Vk for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:34:40 -0400 Received: from mail1457c50.megamailservers.eu ([91.136.14.57]:56670 helo=mail267c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6Uh-0003To-DW for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:34:40 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591817674; bh=vB82X6Ne0+7L5OlDWNj+YIsdFRG7NciFYp+TYPRMRyI=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=OuXuH/0GZ+LykWqjHjggfrxTnVgx5tlTT/kgwwJTmdo9zwMv06UcUfDFb8owaxUiT hMqtOFq2tqu3mjVCocVwZiV/6R40/zqcmvCF4VzRjrGpFHLDUbr+Jx6XTYqlzxDF/E 4V5GJ0R2NTzPWHoyMvrmYDta+84AVYn1QmAI1x+o= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail267c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05AJYW71016947; Wed, 10 Jun 2020 19:34:34 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: Date: Wed, 10 Jun 2020 21:34:31 +0200 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <6A0771E4-917D-4196-BF2A-3958864AD2A7@acm.org> References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> To: Stefan Monnier X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F15.5EE13568.0019, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=Cf92G4jl c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=iRZporoAAAAA:8 a=H3pK27fstoTZ-KxkmrkA:9 a=CjuIK1q_8ugA:10 a=NOBgFS-JBQ2l-kSd6-zu:22 Received-SPF: softfail client-ip=91.136.14.57; envelope-from=mattiase@acm.org; helo=mail267c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:34:35 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:34:41 -0000 10 juni 2020 kl. 21.20 skrev Stefan Monnier : > Could we arrange to share the code with `color-srgb-to-xyz` (in = `color.el`)? We could, but I thought it useful to have the freedom to tweak the = coefficients (and the gamma conversion) as required for this specific = purpose, rather than being stuck with the theoretical CIE luminance from = sRGB. This gives us more degrees of freedom than just having the cut-off = value as modifiable parameter. Experiments with some alternative coefficients and exponents showed = fairly good results, but I went with the safer set of numbers for the = initial version. > Where does this 0.6 come from? It's documented above, "a cut-off value determined experimentally". I = can move the comment closer to the number. From MAILER-DAEMON Wed Jun 10 15:45:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6f5-0003fV-3R for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37238) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6f3-0003fF-4h for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:21 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:52184) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj6f1-0005YD-Mc for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:20 -0400 Received: by mail-wm1-x334.google.com with SMTP id u13so2936018wml.1 for ; Wed, 10 Jun 2020 12:45:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=btnpxfKEuRrpCxC3LDovWDmp/2fLz6+0HbiQpdd+VQM=; b=1flq5uZKRpOYdA92LmnMAMPlhmB8KT2JAsaBOY2LZZu7STFRSvNVyNdrN6CunYO9nP JF+Lp5Q11RU+nE8Mai5E1Xv/9l5HocXhIIjNdfho9dLYfI3YMRhLBJ38lzb9ueXuGojM aoItIJjC41gqC+Xk/P+qI8FVoZNuEMrmeCvuu1vwYqRVIoD0BNUX3aFX44EiTEMkPsCZ KIDwaECDAAiNxm5rTjjnfh2Ys6FA8sNV3anOe3xpYRFEIiWQWllZAcRcpJwSTRJCaNoi yHrCYTGPedeXnoLEhKxeSGgzkN2MlJJflb2Dh92SyR5nhLeFLCxNmmZyu0DXfzF8sIex zgzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=btnpxfKEuRrpCxC3LDovWDmp/2fLz6+0HbiQpdd+VQM=; b=Rwy1tIhFxw0l7jP+JNUv3/04E8dHsu9nmdF4EGy5jNtT0tlNVxTFhmUI2Pe1xAET8z 00lA79UxCCbWEdlMzRuHlMA0sJcaHir5E7cYGYv76CiQ2lzsyVAfULKpJH8mQ7JZ9eJa Aql8cZ3suJGr4DKtBCNXygKg/eTMB7S/VKB3BpgS1SjiujDgbGdFEIlJ2HcI8XamyOFR 4hnl+ZhAZjIo3I9LxgN1nbnC/ACFcImFgwil2TVkx9k05wdVSZLOWFacPYjwgLPOcviq COWqrkvDMzbYtJ63Jz1uAfiJQURHf9eV1Q+CToB83mSoCgiaA+uuX0DWLxSGenlXAQx3 2oyg== X-Gm-Message-State: AOAM530NVcLM3Wwm0YOUv9dv9Y9uV+7l3eflBbmwhEyApMhRpVqoRZ2Y g9IV+P9FB5UI/COGnz2l/bmLbg== X-Google-Smtp-Source: ABdhPJwh9jD6/1ymMVidshIn8ZuQL4g9ZsOu73tqg76TeMWu5kGUffBSH6tiviaeQywHfgglR5pxkw== X-Received: by 2002:a1c:808d:: with SMTP id b135mr4543597wmd.94.1591818316638; Wed, 10 Jun 2020 12:45:16 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id u13sm839665wmm.6.2020.06.10.12.45.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 12:45:16 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: Stefan Monnier , Ergus , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> Date: Wed, 10 Jun 2020 20:45:14 +0100 In-Reply-To: <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> (Dmitry Gutov's message of "Wed, 10 Jun 2020 22:01:16 +0300") Message-ID: <874kripuwl.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::334; envelope-from=contovob@tcd.ie; helo=mail-wm1-x334.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:45:21 -0000 Dmitry Gutov writes: > On 10.06.2020 19:53, Stefan Monnier wrote: >> I think the icomplete-vertical functionality could/should be supported >> directly by complete.el. > > Someone could contact the author of > https://github.com/oantolin/icomplete-vertical for copyright assignment > (and either incorporate the mode, or just some parts of it), in order not to > have to solve the same problems all over again. Done, but note that icomplete-vertical modifies icomplete to achieve this goal, whereas I think Stefan is talking about making vertically listed completions in the minibuffer more of a first class citizen. -- Basil From MAILER-DAEMON Wed Jun 10 15:45:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6f9-0003jI-CM for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37266) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6f7-0003i5-Q8 for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:25 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:36424) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj6f6-0005Zr-Ow for emacs-devel@gnu.org; Wed, 10 Jun 2020 15:45:25 -0400 Received: by mail-wm1-x32d.google.com with SMTP id d128so2943639wmc.1 for ; Wed, 10 Jun 2020 12:45:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=BY2v/dHgmCjAMlFK9eysjDf3aOMSR19ceWCtMP5kgAM=; b=1yXF7a7xmsSsGqKUJpUgXPt7CBrSCrYxh2/tMt84sSYy6gGG5NxR+KNueLM09ZkfHU hx/g9QhEXmi1scXgN4s9e+89+Xv/Jpk0SOPk7FMhpLv4dEi7jYCQLebikrQtIvsRy7nf zbm6nGXY8KNjm4MimfSW2Nzjz05XuC84/dgsBR7h4eUuWsLu5oH9rRGVfiXYfUisORZt LWORdLWAZhVVct2FYuH7ypbuhvjj+KeNCSbcIX6aQH1EndPJWHYvMpbGlhiAIHdbJRE9 5HFMPvYr1OGeEGUThteRwD/h0XNUTXRCYoAxpGmaANyzFEPgrPDIHdzpYEdBcz3p2YO5 nexg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=BY2v/dHgmCjAMlFK9eysjDf3aOMSR19ceWCtMP5kgAM=; b=friYpZio5A4TnjzL5e0mPJL5Ir+j9Vgn6pivC6FdihGTynsC9Y93s0iQWsDIQu000u y7ucK0VGesJMAfNgoxXEVUlNyB9J9Ko7ILCfvFSn4gMKzW+jkx2oJgeaRFRVigT39vmB cMoVhpt4EqHMLy9Gjv88oIltLdm2Qpcmw+h0PgC+y328OzGFR7cBKWE8471N5r84WlJo hF3lkjlO2S7WlRvvFcIue7k5Jfn9CLmr+eTHXoFdN6ydNIZ3XSFZIdQilce208oHJP86 1xrgPQd3/YfOicClPFxuZpz2bJhR9WQi8GLLwoezhU+g+2nQ8BdhMxbX9rwJ4HBFSHX4 24Cw== X-Gm-Message-State: AOAM531SCXn4iZ8BywQrGZeS/vmfYIBtMfVjK2yb8CZmDhJKAQLlezjy LAlsaO6YHhZ7rCaPLz6c3ShugA== X-Google-Smtp-Source: ABdhPJzNYRGzM6AAGBSmUxOF3BnirJQ0swi12fWhjchuua225aR0IS7ZVeZELutd6/ZMHOVsbrrzmA== X-Received: by 2002:a7b:cf35:: with SMTP id m21mr4798707wmg.181.1591818322230; Wed, 10 Jun 2020 12:45:22 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id i3sm1169144wrm.83.2020.06.10.12.45.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 12:45:21 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: Ergus , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> Date: Wed, 10 Jun 2020 20:45:20 +0100 In-Reply-To: (Stefan Monnier's message of "Wed, 10 Jun 2020 12:53:51 -0400") Message-ID: <873672puwf.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::32d; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32d.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 19:45:26 -0000 Stefan Monnier writes: > I think the icomplete-vertical functionality could/should be supported > directly by complete.el. +1. -- Basil From MAILER-DAEMON Wed Jun 10 16:02:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6vN-0002dH-SK for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:02:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40278) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6vH-0002ax-7d for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:02:07 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:64835) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6vF-0000A9-LY for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:02:06 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0CCE280B39; Wed, 10 Jun 2020 16:02:03 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 21CAB807F4; Wed, 10 Jun 2020 16:02:01 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591819321; bh=qZkeMddX54lOfZfimOSPKft5KfUA4lni5FpTUMilqXo=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=a4CA97Bst4AZ9XA5DLDckFhaSA+wghi5Mjs5TXKotzU74v0HXwgTYW5c25kN6/+KF 5f4drkOiBGPPpMrRbbuOtTYG8KC946z4gQAxGI31GYuVlLp3oumQigdydZ/yrdP1Ny oq/I84YqIC/qpzqzHLf2By0dtfjKQoInKec7gmUpzgAnYi7gvx6NonOY6X/5f8UqiO qjcuxbzcUh/avNVCy1bsumbJylyvuJp76Kb6ZpM22GQpl12L9/yGwcJ9DhWswcKaOb JqxYvEXK1b/FOhpA//Io08ToIly9UENH37aECvYaME8bm7Ctk9inL0t0vcrcvRUJ9W ccCxVZez2H94Q== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9A405120484; Wed, 10 Jun 2020 16:02:00 -0400 (EDT) From: Stefan Monnier To: Mattias =?windows-1252?Q?Engdeg=E5rd?= Cc: emacs-devel@gnu.org Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) Message-ID: References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <6A0771E4-917D-4196-BF2A-3958864AD2A7@acm.org> Date: Wed, 10 Jun 2020 16:01:59 -0400 In-Reply-To: <6A0771E4-917D-4196-BF2A-3958864AD2A7@acm.org> ("Mattias =?windows-1252?Q?Engdeg=E5rd=22's?= message of "Wed, 10 Jun 2020 21:34:31 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.092 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:11:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:02:07 -0000 >> Where does this 0.6 come from? > It's documented above, "a cut-off value determined experimentally". I saw that part, but I was expecting a description of (or a pointer to) the experiment. Since it depends on the actual color, the human subject, the monitor, and the ambient lighting (i.e. the search space is very large), I expect these experiments took a significant amount of work, so I'd expect some trace of it written down somewhere. Stefan From MAILER-DAEMON Wed Jun 10 16:05:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj6yS-0006E6-3U for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:05:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41214) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6yQ-0006Bc-2H for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:05:22 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:43900) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj6yN-0000w4-Nc; Wed, 10 Jun 2020 16:05:20 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05AK2JGS136510; Wed, 10 Jun 2020 20:05:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=cM7JvrnyNU9azh224gGopbVVYIdrpXzhuti8rAsRy3I=; b=F3EsaRzWbj5wx3yAthUaW3C/13sLIv2R9JEe3514Ngb3rPzUzvqZow1K74/afvVTtMVf gN+vNf2gLk/P81QCrEkcSttdqUz5owR3XplZfZcewbnyrj/UFFcfbcDuoT8YmrcDv5ik 8qXbZUxq4EnU5NAXsssz/t/UT5Ff551XSR9Xo/YgTG4yR7xb6LUtqghH9KrvxLvCHIk1 Fp8HM4FCrjRNyue6C+NyBD40Gqj0sQBVMZ8wXQelfbPkVFM+/+MlO2e+6CpLPXL0GF54 LXqPOqqJdv6+6ZwUrDc/OfpkCba9asKCAJUudOqmqM2LsYSvkuaXdO+ZBt/39k+ccnFy Ug== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31g2jrccc8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 10 Jun 2020 20:05:13 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05AK2RkV019223; Wed, 10 Jun 2020 20:03:13 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31gn29wwpx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 10 Jun 2020 20:03:13 +0000 Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05AK38kq011808; Wed, 10 Jun 2020 20:03:11 GMT MIME-Version: 1.0 Message-ID: <7710412d-f153-4153-8351-da73b1a6f1cf@default> Date: Wed, 10 Jun 2020 13:03:08 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Lars Ingebrigtsen , Michael Heerdegen Cc: ams@gnu.org, emacs-devel Subject: RE: eww and bookmarks References: <87k1163jz5.fsf@gmail.com> <87zha21i17.fsf@gmail.com> <87pnau45wp.fsf@web.de> <87pnatlo1h.fsf@gmail.com> <87zh9wljig.fsf@web.de> <87k10za187.fsf@web.de> <874krj9bgs.fsf@gnus.org> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9648 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 mlxscore=0 phishscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006100149 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9648 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 impostorscore=0 cotscore=-2147483648 priorityscore=1501 spamscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006100149 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 16:05:15 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:05:22 -0000 Dunno why, but this message of mine seems never to have made it to the mailing list (?). Maybe this time will be luckier. ___ > > > Could you give us some background? Do eww bookmarks offer some featu= re > > > that vanilla bookmarks don't support? Or did you just want to have > > > something separate? > > > > There's two reasons -- I had no idea that bookmark.el existed. Well, > > OK, that's the main reason. > > > > The other is that ever web browser has a bookmark facility, and that's > > not usually mixed in with, well, other stuff. >=20 > [Still dunno why I'm not seeing emacs-devel@gnu.org in the cc list for a = few > posts, and I have to add it manually because Reply All doesn't find it.] >=20 > FYI/FWIW - >=20 > When you use ordinary Emacs bookmarks (e.g. bookmark.el > or Bookmark+), there's no requirement to mix bookmarks > of different types. So EWW bookmarks that are "normal" > (i.e. Emacs bookmarks, not what EWW calls "bookmarks") > need not be "mixed in with, well, other stuff." >=20 > You can organize bookmarks in different ways. One way > is to use different bookmark files - you can have a file > just for your EWW bookmarks, or just EWW bookmarks for > certain purposes. You can have any number of bookmark > files, and it's simple to switch among them. >=20 > If you use Bookmark+, there are several other ways to > organize bookmarks, including: >=20 > * Different bookmark-list displays (which can themselves > be bookmarked, BTW, as can bookmark files). So even if > the current bookmark file has bookmarks of different > kinds you can show and act on different sets of them, > using different listings. [1] [2] [3] >=20 > * You can tag bookmarks, and view/list or act on only > those that have a given tag or set of tags. Tags allow > organizations other than just flat sets or trees. Tags > provide the most flexible way to organize bookmarks. [4] >=20 > * You can sort bookmarks in the bookmark-list display in > various ways, including according to type (e.g. all EWW > bookmarks first). [5] >=20 > * You can filter the bookmark-list display, to show only > bookmarks that satisfy some condition(s) (e.g. being an > EWW bookmark). And you can omit bookmarks from display > that satisfy some conditions (as in Dired file omitting). > [6] [7] > ___ >=20 >=20 > [1]: https://www.emacswiki.org/emacs/BookmarkPlus#BookmarkListDisplay >=20 > [2]: https://www.emacswiki.org/emacs/BookmarkPlus#bookmark-listBookmarks >=20 > [3]: https://www.emacswiki.org/emacs/BookmarkPlus#BookmarkFileBookmarks >=20 > [4]: https://www.emacswiki.org/emacs/BookmarkPlus#BookmarkTags >=20 > [5]: https://www.emacswiki.org/emacs/BookmarkPlus#SortingBookmarks >=20 > [6]: https://www.emacswiki.org/emacs/BookmarkPlus#FilteringBookmarks >=20 > [7]: https://www.emacswiki.org/emacs/BookmarkPlus#OmittingBookmarks From MAILER-DAEMON Wed Jun 10 16:29:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj7Lo-000754-1A for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:29:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7Lm-00073d-J6 for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:29:30 -0400 Received: from mout.gmx.net ([212.227.17.22]:60543) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7Ll-00060c-BB for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:29:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1591820966; bh=WSrCehxrS/aJPFnf8GIU4NrhYZfWYWeUniksVbWp/VM=; h=X-UI-Sender-Class:From:To:Subject:In-Reply-To:References:Date; b=F0+kLa0msZR2ztAWNC4dt8WTlOeVL1vcyGpmto3GIrO7860sqA8Eq1ymO3e//YRM7 /Rjr8KFQCIfcLzGHy9bN9aFz26QP3WADwv6s4llUP8Q6B+1mpMI7YBXLR8apR+82ag 7qZlpMB2xps42FloNR6y6AGg+Nhc0CHDmWKDJtfU= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from no.workgroup ([84.185.108.10]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MaJ81-1jNvrU44lZ-00WBXR; Wed, 10 Jun 2020 22:29:26 +0200 From: Gregor Zattler To: emacs-devel@gnu.org Subject: Re: feature/native-comp, comp-deferred-compilation: no recompilation when .elc newer than .eln? In-Reply-To: <87pna8rceq.fsf@no.workgroup> References: <875zcxgx8f.fsf@no.workgroup> <877dxczwsy.fsf@no.workgroup> <87ftc0nqtv.fsf@no.workgroup> <87pna8rceq.fsf@no.workgroup> Mail-Followup-To: emacs-devel@gnu.org Date: Wed, 10 Jun 2020 22:29:22 +0200 Message-ID: <87wo4epsv1.fsf@no.workgroup> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:jqzP5E4OMKjLWBsuLhKykQT5oe8SbE3Mz9J+i15IU3zpvYI7rwV xpz2IuK1SlMOg3Y6YnvhC4z/QwdSyc/jqk01kz55L9PyNmBICfBLnAKSyJmYWUZ5992oZTf om7o3PhXYPSqgiHv/OBl1Gp2Ss6XpKFstd3C+sEvj5rmUy3PYERYTcJniN/Oj2lz6RziiFj //a0cEwqelOpGFyWR4uSw== X-UI-Out-Filterresults: notjunk:1;V03:K0:uNFpY8O9ydA=:Ws6RBVt+A2ZtTsoGefwDpV OqOJ8KiHWwrgOpfA/Smcv4Js2vy6LF+vLQ9hfPmxVcNYQhVgovcmcbrgUeQkhXyQSBDZv7gWc sYW3dCT8c86e4fDdNkkSmJoNK4O5r5cxmy8Jzb3a33BVHbWtGyy5pKwHORxFzTOzaY5r1aTqJ u7NJChtlmHlhOcpFc9uyEnv26JxvrRuxAa6XUL+47nka6OmrsNrh+37ajpAswJUkV0MYUQHU6 evwImNNFn2c5C0N4MFXyDn8A/CETqmn7q3+va82D9DuVpIv0Vw69VCdlFuw4Su9BEK8Ea4ZVj iP+KpNGjiryTJf2iDAkAxtvMxpCx3LdzyoJfFwn9D3OUNxmPBfMJyXZraRc/IJ6w0IU0TO5JM 7xLNKN3cj+hjsgWfU5x3iWsHg2QiaZP7dBs20EaeHg5Mt7xBemwkZ0ko/AYYxLa2Md9y1nqFt 7YGTstQoWBG8Lir5f7Ceb+ysc3XcF/OQB1HjalzIX7ZlwVC8NA2YnYexb0sUKDH/kYGTu1dD/ MXQAwOOV4aMZsQwICXTDI0gcsqjP39LFpp7Z2rtvcL4qFJSvhhi1kPLpw8tyKdKXxDFCoIZMx DM8917zyDRAKZDFR2kbqgmnsGWMbDhcf72PB/Omo8FNQirLoe14dx6ZcPrsHJXRexgPWGd6lj laP6w+onilUHOp8+SorbFaL4YWaC6Fj2nGTTvXkJr4Q2R5LKc3IGwa0kfK6emBVAjJzZANykN OK465hdjSvXTgGWiMjvAP5hkFi2rtJZyNOUtKV55B9X2WImC6V+D4sOXeCRPB1pkQnH+0kRuB 6XIptp4x8wbCBzwHp1iscxG/2puTIRYEGFog5PErFYBqNrNKZIjwCdr1w9rahgDnXhQmQKurJ 9FC2bG9LRJ0OEugOkTtXLK32Zu690RM9XzG5e4ddf75+Ez45bvphnI6t1ZmzAQV3NM9r6JLsP vVh9SIQmoSnOjHG6WDeXEY04g2W7ZhlhazVwUS0X3i7kgSktmqRKJbItzrSadSiMgXAZ4hsc7 vgfg3ONQakI3+WAPT0pasjtleD8ShBDBr1g/49DUxJiTjdmafLkF4/tX0DjwFsqjuawV2T+rx X8vuSNSl6Q0atP0SdSxh5yaXESYkD7JMQNKpQqD5iG9x3TkN/jZlzWXMPkRmCosKVgV2dDhs9 7+Y42593drWdoiu2qNus33oeIEGZCQo74FI5s/aEsirPUm/tEJJ9+9sNMR6mKWEcjQdgaJizj TWXDpS3uyIr5no7PA Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.17.22; envelope-from=telegraph@gmx.net; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 16:29:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:29:30 -0000 Hi Andrea, * Gregor Zattler [2020-06-09; 08:17]: > * Andrea Corallo [2020-06-06; 21:51]: >> This issue should be fixed by Nico's patch e38678b268 "Reduce the numbe= r >> of files probed when finding a lisp file." >> >> Hope works for you, in case does not please complain :) > > I will test in the next days. it worked, but only after the 3rd invokation of emacs: 1. I recompiled emacs, checked out an old version of org mode with a certain bug, compiled that, used it with the new emacs, this produced an org.eln file with the specific bug. Which I experienced while using org-mode. 2. I killed emacs, checked out newest org-mode, compiled it, started emacs, used org-mode, org.el was not shown in the async compile buffer, and the bug was still present and the eln file was older than the el an elc files. 3. I killed emacs, started it again, used an org-file, now org.el showed up in the async compile buffer, but the eln file was as old as before and the bug was present. 4. I killed emacs. Had a look again for the org.el[cn]? files: now the eln file was newest, I used org-mode and the bug was gone. I understand, that a new elc file is used in emacs, the compilation to eln happens async and when finished the eln file is not loaded over the elc file. Therefore I have to restart emacs in order to actually use the eln file. I do not understand why my org-usage in step 2 didn't trigger the compilation of the eln file. Reloading the eln file instead of the already loaded elc in 3 would be cool, but not that important, since the elc file is feature-wise equivalent with the eln fiie. Ciao; Gregor =2D- -... --- .-. . -.. ..--.. ...-.- From MAILER-DAEMON Wed Jun 10 16:45:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj7bV-00015K-1u for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:45:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50482) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7bT-00014n-UD for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:45:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49193) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jj7bT-0000ol-De; Wed, 10 Jun 2020 16:45:43 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:38965) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jj7bS-0007zm-9z; Wed, 10 Jun 2020 16:45:43 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id E271227C0054; Wed, 10 Jun 2020 16:45:41 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Wed, 10 Jun 2020 16:45:41 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudehiedgudehjecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe elhfduuedvvdduteetgedtffehuedutdejtefhjeetgeethffftdffgfduveekffenucff ohhmrghinhepghhnuhdrohhrghenucfkphepleefrddvfeeirddufeegrdehgeenucevlh hushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhorhhnodhm vghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdekieejfeekjeekgedqieefhedvle ekqdhtshguhheppehgnhhurdhorhhgsehfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec8636.dip0.t-ipconnect.de [93.236.134.54]) by mail.messagingengine.com (Postfix) with ESMTPA id ACCA83280060; Wed, 10 Jun 2020 16:45:40 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier , Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> Mail-Followup-To: Stefan Monnier , Emacs developers Date: Wed, 10 Jun 2020 22:45:38 +0200 In-Reply-To: <87y2oueo4h.fsf@gmx.de> (Michael Albinus's message of "Wed, 10 Jun 2020 21:07:10 +0200") Message-ID: <871rmmwsy5.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:45:44 -0000 Stefan Monnier writes: >> Since we seem to agree that this specific case is allright, may I >> initiate a new debbugs release with that change? (Feel free to do it > > Yes, of course, Done, thanks! Now that this is done, I would like to make `bug-reference-mode' usable for emacs dev without user configuration. Wouldn't it make sense (mostly for us Emacs contributors) to make "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s" the default value of `bug-reference-url-format' (which has no default value right now)? Then you could simply enable `bug-reference-mode' wherever you want (especially in MUAs like rmail/Gnus/mu4e) and bug#17171 become clickable and opened immediately in debbugs if installed or in your browser. Bye, Tassilo From MAILER-DAEMON Wed Jun 10 16:53:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj7iy-0002nv-TE for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:53:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7iw-0002nf-2A for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:53:26 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:40876) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj7iu-00029F-ND for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:53:25 -0400 Received: by mail-wr1-x42f.google.com with SMTP id h5so3864164wrc.7 for ; Wed, 10 Jun 2020 13:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=7ND+GHzCmQ8Ux9E8YjegirJA/Es+TbySXpAh3OriA7M=; b=FWjzzwff1ik4uU5cPPM71SGlUEDKJ7p1DwiGuu84E/rVGr+GpEClwYRJrxPht8A1NO P8qW1fKcscHnkjSZzDhX/iEkCGJ7ML646zQLCqJOXdkkul9YEkw1TZmJdk7Xr6MJVd2O yTPo+Mrz14YfdXgpBHBdthbXn1DaN0F5R8R9vv53VatYDJfTTytHMzL9rAS47kSw6wR5 V8yhpmBcCp/q61xB7NdcW9dTeg+fuj60IVfq8AHvb5PhuhqFMuR8om3UqFM/I4Rn9S1C UDOef1/0uNIt73VSk9FlTqTjChoTX18SeEccrfSwjyjjdmU/4SZbuVZ5rC7iUuVHCmmm AP0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=7ND+GHzCmQ8Ux9E8YjegirJA/Es+TbySXpAh3OriA7M=; b=suK5z13eLqMu0aL3Oemnv4M308M7yms4osKn/w/nOAhyGCciG1+216Umq5pCPfaBS2 sjHsNceQjcxgfldE7oCj3+T+TbdjtwIrsp8TN+GW06RHX9vIEDxUW3fIuWGxyuHUYFEb NEUeuQoQAcNYdRopPJH7K6tN5bkCHH2bvz8BNSuaTF+tjMXf+YpwoUYAhzylZg9aeC0f 0vhpqzhhl/V+er1dqgYOpFGUlFTbUXdQ8mRz8ZJCUH7ybnJJX0SD4yCgJLBwQ+Qzgofe zcNMv/jb7iRjKoY1VK5mnIYZVNY8DLh8UYYXrsM2NRKYZbfy9/22EjrAYbd3ySH0DqiU /1sw== X-Gm-Message-State: AOAM530FimV0yOJgQcRlWnYHPqNU05iI6CTK77V1IW1uTkJRu05/6q9B 3UtePuAiXNx9hlZeOf7N/X7o9+xqxvU= X-Google-Smtp-Source: ABdhPJz3jVRQGBh26SOMT0HYVthgATxHeXcOufXnn2qKsV0JqlUBJhrakheQFS9bFH6OHy6ok/vChA== X-Received: by 2002:a5d:4bcb:: with SMTP id l11mr6011239wrt.363.1591822402686; Wed, 10 Jun 2020 13:53:22 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id v28sm1534777wra.77.2020.06.10.13.53.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 13:53:22 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> <871rmmwsy5.fsf@gnu.org> Date: Wed, 10 Jun 2020 21:53:21 +0100 In-Reply-To: <871rmmwsy5.fsf@gnu.org> (Tassilo Horn's message of "Wed, 10 Jun 2020 22:45:38 +0200") Message-ID: <87bllqfxry.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42f; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42f.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:53:27 -0000 Tassilo Horn writes: > Now that this is done, I would like to make `bug-reference-mode' usable > for emacs dev without user configuration. Wouldn't it make sense > (mostly for us Emacs contributors) to make > > "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s" AKA "https://debbugs.gnu.org/%s" > the default value of `bug-reference-url-format' (which has no default > value right now)? Then you could simply enable `bug-reference-mode' > wherever you want (especially in MUAs like rmail/Gnus/mu4e) and > bug#17171 become clickable and opened immediately in debbugs if > installed or in your browser. -- Basil From MAILER-DAEMON Wed Jun 10 16:58:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj7oF-0006lG-I6 for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 16:58:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53300) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7oD-0006kI-77 for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:58:53 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:26416) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj7oB-0003B4-PE for emacs-devel@gnu.org; Wed, 10 Jun 2020 16:58:52 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id A5D24805C1; Wed, 10 Jun 2020 16:58:48 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 11BA38009D; Wed, 10 Jun 2020 16:58:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591822727; bh=/CbpnF008KPLH9MSl6aNtlZrBi8MxvsVw+uaBAAfeDw=; h=From:To:Subject:References:Date:In-Reply-To:From; b=i80ZpNRvnf+sCqX9vzOL4E8VRnKF0zBLVCNd3TbHJvvmE1YqUAI4cc1WXTpK1iLRR zABKwmc84oHjTX8w1pu8FnjVakOcoqNa6SEdEz44U98G+jmrLTTDDRVvCjgWulspXB s6KnBOPk5t2VtYosZpNsV7MVHRQNnDEbUkdvICb7g/o/24SEIABrlmBObGkLofe1L8 /Vy9upAyIkLFHetBMl5+Tmz6F0NtmK3/jfJmrfET7xM0dU/xOytBytUcmZJ8J3+NUB oJ+wsaTUADYOqzUryXC6aMRgIdKfMJQnh5l4n2e1gIseY2OJaU2o1dHiqDgJEbq685 j17J/Hpoe9l1A== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D628012079C; Wed, 10 Jun 2020 16:58:46 -0400 (EDT) From: Stefan Monnier To: Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. Message-ID: References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> <871rmmwsy5.fsf@gnu.org> Date: Wed, 10 Jun 2020 16:58:45 -0400 In-Reply-To: <871rmmwsy5.fsf@gnu.org> (Tassilo Horn's message of "Wed, 10 Jun 2020 22:45:38 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.092 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 15:11:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 20:58:53 -0000 > the default value of `bug-reference-url-format' (which has no default > value right now)? Then you could simply enable `bug-reference-mode' > wherever you want (especially in MUAs like rmail/Gnus/mu4e) and > bug#17171 become clickable and opened immediately in debbugs if Right, but bug#345 also becomes clickable in places where it has nothing to do with Emacs :-( `debbugs.el` could configure Gnus/Rmail/mu4e to set this var when viewing a message sent to emacs-devel, tho. Stefan From MAILER-DAEMON Wed Jun 10 17:54:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj8fi-0007Jo-Om for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 17:54:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj8fg-0007JX-Ol for emacs-devel@gnu.org; Wed, 10 Jun 2020 17:54:08 -0400 Received: from sonic311-14.consmr.mail.bf2.yahoo.com ([74.6.131.124]:38847) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj8fe-00055i-7E for emacs-devel@gnu.org; Wed, 10 Jun 2020 17:54:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591826043; bh=fTxmDUN0qFku/WDuyaC3j9wxq4lXbAQUdKUSKgmetXQ=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=H61f+dSd6zW2qFznZejr1eTChZKyvOVFHdmrWww6l+LsBVTZHwCzHdV+8fDl7xoyns2dUv+xrnzKXTtcwawQ9VQNvmYsuROdTxCYfNKJBg2mjmpWsPjtqOMmUb9FFqIskTXBFldKAOiNAFqvsGzhmOnNYlnk6o+9pEPVF/rX3SXZzMwA40NnzPPl9vEpYbihBp72I6Kyo+g+8KyBTgm/mTCESz/gXpXhcHci00JICCE7ZDCe4GQcQV9fbBmDoTNiz4tc1TLEuCna126Mb1CaO1iIkiYON4nykEXRO7JSC4Gk9BCqBUmS4qsjeha6mItJItlJsCM+dEKPAXko7HkFIg== X-YMail-OSG: eo_T3HMVM1kGST.7_DfO8b66YSAKoiGoBvWZlNs3tloZRCCyjm3KTLKXUhKQcnr ThazR8.eda9rWjR9ID_Dt__z4_KajACCC4eS29Jd38Jl4s.YzX0GhOiQneAILEDOArlgf0XAZIea oZcygY1d63S6anbo_.z9tUaMZ8yTr4HvwLrgh.ZauNJL6st.Y1AaKhA23ycXJW4r1axB6DW1yZB6 lLIzxNBIHpKy.IsbARtlAzyfYUykLklU.55jPoI2PxgNFXM3QTZpcvxMa3RqWXlFhXggX5_WvEF8 LP1cUQORkLlc_wybseTxBsp4xMMc0WMETCAKX.rk9udPYNQ9uJ6bYlvtx5_kjVR672Zy.REpZD5L nHcG28nWcmY7pm719J3FPc_sYQ3DbfnylswH3djzio1qTOJJbk7jXnFgY4JPAJlzFY_NgmlG6zed 7_QX2XfUFrIKiaYHA6jF5tRv9RvolqtiTUupeUra690ZRq.dApN1kRG1keXLJCDHIHjCo8Ti6OR5 wKows9RSfkb.MjOwk0aQF_S4aTAb.eLgV31issPbn8K85Pq7eok7ysggrZ7tKEjbkEEB2blGrE.M Rz4YUWAPFHE.fh2OwQRIe1um2dKBQ7oFttx0bdfs8Bs.PRc22bHP1hUlp9aD9DPvW8mRvmNM_L.J dx7YVPceeSvvNeHMyv_M3BBfBvZU19ZSthdpBgMlheYuA_y3Q9aVUtpSN357pmZFMyzxEDWC9q84 I3WYhS9rjCdz0CoCaCoxJV6HaH81aFSpD8eqdYzB7OosPpR2lds5kG29rT92QKfhDM6QKpqszOsS CLbzcOgq1Gdikm0O6m4fkHY1o.QJjtk5qVGEkYjcd_Bb2rpAklu0QleWfJvp12Y3NW_yUle1cN5V uRHsxdFbR.AmZw_wjv1I75SeCJhnUc1ndwI88XRvTDsW7L3WZYiaIdZRvLsi20E3VpQ7NuJsHUA9 pcFjPdVJ09hEuLFK4zBFR.Hjh7xiVrxtJ8srkAmpCItE0DMY_AMIcE_Eb_I0S9rpk82leFwoF8Hm JZnv8RMUve86.Du7yWtQtAtD9jPxr9ci9iUYd8FqrlZFFArr0EMplTluUtIoiKauUK0Krgp53CRs a_nDnOh29fh8GciDUgxnaEGOTz4b65yzy.V4Ll4VPpYJ5t2XeKrL9LdHBLMyhOh2eE8lczz47UPi DXw_Fll1ENWuququHBboQ9GccHcXkevjurei5SwIUAkuQ1mbrldoTnhBSibj3VD9VrK26G6FPs5_ FtDnYsDyoiaordh4bMCT4OgmBO8mStabjCwnoxKmh67IYK7gi3rKCABBkUBnWa1un2ok.7dGgRnN VEDKMPP85Kk1ii.Hqu2xhdzLESrE.S4S6.4MgWxf9Gw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.bf2.yahoo.com with HTTP; Wed, 10 Jun 2020 21:54:03 +0000 Date: Wed, 10 Jun 2020 21:54:01 +0000 (UTC) From: Ergus Reply-To: Ergus To: "dgutov@yandex.ru" , "monnier@iro.umontreal.ca" Cc: "emacs-devel@gnu.org" Message-ID: <795146083.1708851.1591826041689@mail.yahoo.com> In-Reply-To: <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> Subject: Re: vertical fido-mode MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_1708850_1258424475.1591826041688" X-Mailer: WebService/1.1.16072 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Content-Length: 4172 Received-SPF: pass client-ip=74.6.131.124; envelope-from=spacibba@aol.com; helo=sonic311-14.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 17:54:03 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 21:54:09 -0000 ------=_Part_1708850_1258424475.1591826041688 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Yes, that's a good.idea.=C2=A0 But as I see the code in=C2=A0icomplete-vertical-mode; it relies in a hook = (icomplete-vertical-minibuffer-setup) and an advice (icomplete-vertical-for= mat-completions) which in principle we don't need with a very simple modifi= cation of icomplete-completions and=C2=A0icomplete-minibuffer-setup. If=C2= =A0icomplete-completions produces the formated output it will be more effic= ient=C2=A0and clean than adding an advice or do a reformat. There are also some customizable options that for a simple working vertical= mode we shouldn't need (like=C2=A0icomplete-vertical-separator-alist or a = face icomplete-vertical-separator) unless we want to add them now. So in my opinion maybe we can provide the vertical mode in a simpler way ju= st improving=C2=A0icomplete-completions and some other small changes here a= nd there. WDYT? -----Original Message----- From: Dmitry Gutov To: Stefan Monnier ; Ergus Cc: emacs-devel@gnu.org Sent: Wed, Jun 10, 2020 9:01 pm Subject: Re: vertical fido-mode On 10.06.2020 19:53, Stefan Monnier wrote: > I think the icomplete-vertical functionality could/should be supported > directly by complete.el. Someone could contact the author of=20 https://github.com/oantolin/icomplete-vertical for copyright assignment=20 (and either incorporate the mode, or just some parts of it), in order=20 not to have to solve the same problems all over again. ------=_Part_1708850_1258424475.1591826041688 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Yes, that's a good.idea. 

But as I see the code in icomplete-vertical-mode; it relies in a hook (icomplete-vertical-minibuffer-setup) and an advice (icomplete-vertical-format-completions) which in principle we don't need with a very simple modification of icomplete-completions and icomplete-minibuffer-setup. If icomplete-completions produces the formated output it will be more efficient and clean than adding an advice or do a reformat.

There are also some customizable options that for a simple working vertical mode we shouldn't need (like icomplete-vertical-separator-alist or a face icomplete-vertical-separator) unless we want to add them now.

So in my opinion maybe we can provide the vertical mode in a simpler way just improving icomplete-completions and some other small changes here and there. WDYT?

-----Original Message-----
From: Dmitry Gutov <dgutov@yandex.ru>
To: Stefan Monnier <monnier@iro.umontreal.ca>; Ergus <spacibba@aol.com>
Cc: emacs-devel@gnu.org <emacs-devel@gnu.org>
Sent: Wed, Jun 10, 2020 9:01 pm
Subject: Re: vertical fido-mode

On 10.06.2020 19:53, Stefan Monnier wrote:

> I think the icomplete-vertical functionality could/should be supported
> directly by complete.el.


Someone could contact the author of
https://github.com/oantolin/icomplete-vertical for copyright assignment
(and either incorporate the mode, or just some parts of it), in order
not to have to solve the same problems all over again.


------=_Part_1708850_1258424475.1591826041688-- From MAILER-DAEMON Wed Jun 10 17:56:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj8i3-0008Te-NE for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 17:56:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj8i2-0008TR-8c for emacs-devel@gnu.org; Wed, 10 Jun 2020 17:56:34 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:51869) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj8i1-0005nf-Br for emacs-devel@gnu.org; Wed, 10 Jun 2020 17:56:33 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 3042E240002; Wed, 10 Jun 2020 21:56:29 +0000 (UTC) From: Juri Linkov To: Ergus Cc: "emacs-devel@gnu.org" Subject: Re: Tab-bar autoclose question Organization: LINKOV.NET References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87tuzqmskt.fsf@mail.linkov.net> <87a71hv584.fsf@logand.com> <87k10jerlv.fsf@mail.linkov.net> <708761156.1474071.1591793033632@mail.yahoo.com> Date: Thu, 11 Jun 2020 00:55:13 +0300 In-Reply-To: <708761156.1474071.1591793033632@mail.yahoo.com> (Ergus's message of "Wed, 10 Jun 2020 12:43:53 +0000 (UTC)") Message-ID: <874kripr7a.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=217.70.178.230; envelope-from=juri@linkov.net; helo=relay10.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 17:56:31 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 21:56:34 -0000 > I am wondering if maybe there is a simple method to autohide/autoclose the > tabbar in some condition. For example, when I close all the other tabs and > there is only one. > > Is it a straightforward/out_of_the_box method to customize that? Please try to customize ‘tab-bar-show’ to the value ‘1’ that means to hide the tab-bar when it has only one tab. From MAILER-DAEMON Wed Jun 10 18:00:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jj8la-0001of-MY for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 18:00:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37258) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jj8lY-0001oJ-Vm for emacs-devel@gnu.org; Wed, 10 Jun 2020 18:00:13 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:33504) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jj8lX-0006aa-K1 for emacs-devel@gnu.org; Wed, 10 Jun 2020 18:00:12 -0400 Received: by mail-wm1-x32e.google.com with SMTP id j198so5604410wmj.0 for ; Wed, 10 Jun 2020 15:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=vXJacQRVNn+UVWAuMaa5MfAQ5rs7MgC+VVeJ+REdm7U=; b=fniNAPMW2gTt/8ruZBaG81ASFNclpf8b1fwkON6TIeeI+lykRkbrIDz73tmuClQSR8 4BnLYjmoSI4ZyaJsa6G20oYRJGNuxZd7TbXuxnLuJ2zAMd5HvmRRFNmSw4IZAEY9oVh0 ztCb1qErXZ1oSv2epEEixD2U25Zo/0sljt2EQb6adRjvNs8r+2z2kXLEew21CXRtiPRT 6bQY1T+aGP3yJfmBpZLA6WuP08qWhA38M92lRYJZkDnxn657bMk2m7448pPMiLNGrTCL STBYhNPeybwk4T0fkR8NhVdiRnIoUuEf/dWCVFn2ZHdQvR3XJvEPcuzcMK1c6kaEYv2S md2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=vXJacQRVNn+UVWAuMaa5MfAQ5rs7MgC+VVeJ+REdm7U=; b=TUZvZaCeLs15PKJ3DWnznOA65NiYuPdGMcvsVlOCOJopOhHevWB4aKdNWkBX/vm0Jd 8N1aOrWCYto5E9UMtNO7XW9t214PXW42fLELJUuXD6mlOCZkpKBWZ1k8a/pEQY6ec8Xz ylPikmBmsIu6CoGHLPSSG/aCauMmXf9M8DGFxl8wbPjPelMPQAhgEzL2aHu8wzHnhcRC B7DbnKaNeUIX6JQBjUts1SW4FmaX0PVjVcye2uPuouNE5WwXx7x5KuImTYbOS6CyRgtT 1vH9B5RltIZrqAQE/IhTYljhCvrCbSoUtq+VE8IFMqndliM2Qu57hJu24mHt1b8uPhse Ypwg== X-Gm-Message-State: AOAM533RAChz+/QzqnBzx58C6fOZSHM3UCB6VEjFuaWp75lzSjv2Pf6c XfE32zJqjTA7ug1qZ/zSG6rwISgl X-Google-Smtp-Source: ABdhPJwSNy3GaNeK28AxdmeBnDicXajiVvoM4NehMFIuV3BXRfcOKZKkxJS48bs7yrSSX6EUdt/+Wg== X-Received: by 2002:a1c:230a:: with SMTP id j10mr4995576wmj.124.1591826403344; Wed, 10 Jun 2020 15:00:03 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id t8sm1580310wro.56.2020.06.10.15.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Jun 2020 15:00:02 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode To: Ergus , "monnier@iro.umontreal.ca" Cc: "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> From: Dmitry Gutov Message-ID: Date: Thu, 11 Jun 2020 01:00:01 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <795146083.1708851.1591826041689@mail.yahoo.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 22:00:13 -0000 On 11.06.2020 00:54, Ergus wrote: > So in my opinion maybe we can provide the vertical mode in a simpler way > just improving icomplete-completions and some other small changes here > and there. WDYT? It could also add a different way to "select" a previous or next completion: instead of rotating the list, move the highlight (and some fringe indicator, maybe). I'm not sure of the extra complexity that would bring, though. From MAILER-DAEMON Wed Jun 10 19:20:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjA1X-0000WY-Fz for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 19:20:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjA1U-0000Vk-VH for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:20:44 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:40131) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjA1T-0005sh-7r for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:20:44 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 17E561BF203; Wed, 10 Jun 2020 23:20:36 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> Date: Thu, 11 Jun 2020 02:08:56 +0300 In-Reply-To: (Dmitry Gutov's message of "Thu, 11 Jun 2020 01:00:01 +0300") Message-ID: <87y2ouldrr.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 19:20:39 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 23:20:45 -0000 >> So in my opinion maybe we can provide the vertical mode in a simpler way >> just improving icomplete-completions and some other small changes here >> and there. WDYT? > > It could also add a different way to "select" a previous or next > completion: instead of rotating the list, move the highlight (and some > fringe indicator, maybe). Or show vertical completions in the *Completions* buffer and use the current icomplete keys to navigate the *Completions* list from the minibuffer. From MAILER-DAEMON Wed Jun 10 19:23:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjA3z-0002AX-Rn for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 19:23:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjA3y-0002A3-8b for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:23:18 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:38094) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjA3x-0006aX-4F for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:23:17 -0400 Received: by mail-wr1-x430.google.com with SMTP id e1so4191269wrt.5 for ; Wed, 10 Jun 2020 16:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=ZqWfAA8lxcqL9EBJBt4qLzZYThBsrpN/8RVxun6uKo4=; b=hPpu/DWTb+yvZ9LFP/XYgCWKywwEPtUghm4sAtKkY+gVb8R+T1g1/q2Aq5pCNfWkKj HrWXXwBigAtcfh1QlF/r0hu1EegBomPi1Y5mMCHXt8Jr/PiTdDqQZjM16l5TX8VBs6Lt ctAf1GFtDlz6UZGt8/2pbBjW+EELH8TkLXoc3q5WbeCekBBmDT4qUla17vpJkJr0uQZd HtyHRrSGjWNz1ZzkNWyhRe+Mqov1d3VNkxKrjqkQvs2u72tnNm+YphDpHINDeuUIvKBV dgvT0CwTBsGz2WOhetm/qCzL6nrWA6xqvPU/4se3NSrbiNcqumI4VSGpOzBSdCS5bGCJ Y/Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=ZqWfAA8lxcqL9EBJBt4qLzZYThBsrpN/8RVxun6uKo4=; b=iLysDhOotFb/T36O/nFemWT5j9unrKHANOkDgku+GS94o7KZq4rdmdIf9i1C0nbD14 jyBQEes27+AzF52yyAqBT4wRpH0Qv3nP492jo2w5OQEWUgXUBGeARl2G1IcdcnsmplsL 5ksucZnzQdT7M46nY4GaujxQD3p0/hKiDccvZr7fVdz6peH+1xMOCOPnGME86rCs2dd+ asc8RvB1BNrJTmxdvPRUKZYA/BXrSD9txCJ4m26Q5loww5TiDXkqJF2zACXxPhIiWrcR rRIwTnf8tfHbTCLaLxfetQsWkLpAcp6BtZLC88f5sd2AwJwQXBNW/WK93swcTBR0tNoK i8MQ== X-Gm-Message-State: AOAM530taPYQeBMmzrWZ+f4NBquCnrVa4kg9KcLxqsAi4VRzimQv7jKn muwDoZlrP3Br6htNcA/f01zfmvBl X-Google-Smtp-Source: ABdhPJwrv8Hc02qwBUY1Wr4LiD3KGt5RKeuykm1MI2Lb2OX0OXF0Uf0JyUBJBoCMoiFi4DMLsw6Quw== X-Received: by 2002:adf:afc7:: with SMTP id y7mr6172354wrd.173.1591831388850; Wed, 10 Jun 2020 16:23:08 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id h29sm1991370wrc.78.2020.06.10.16.23.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Jun 2020 16:23:08 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode To: Juri Linkov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> Date: Thu, 11 Jun 2020 02:23:06 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87y2ouldrr.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=raaahh@gmail.com; helo=mail-wr1-x430.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 23:23:18 -0000 On 11.06.2020 02:08, Juri Linkov wrote: > Or show vertical completions in the*Completions* buffer and use the > current icomplete keys to navigate the*Completions* list from the minibuffer. I could be wrong (not having seen the result), but IMHO that's not what the majority of icomplete-vertical users are expecting. They/us expect something more like Ivy. From MAILER-DAEMON Wed Jun 10 19:42:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjAMo-0002vu-Ly for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 19:42:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59816) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjAMm-0002v2-Se for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:42:44 -0400 Received: from mail-wr1-f46.google.com ([209.85.221.46]:38128) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjAMl-0001gS-IL for emacs-devel@gnu.org; Wed, 10 Jun 2020 19:42:44 -0400 Received: by mail-wr1-f46.google.com with SMTP id e1so4221728wrt.5 for ; Wed, 10 Jun 2020 16:42:37 -0700 (PDT) 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:cc:content-transfer-encoding; bh=JCasgA1W/7FqjV9Z0p7viVk32HZXabUfOMa4Z3PABRY=; b=HP0lwYivIUtKXTIiVKOM7QqgiSbwtLK1lXw2jIxFSflFm2jdmSRszy4THFgZQxGC7i 8cBIEb1wz6MarqpdlQl+EObowdkE83N/PD7iuzSyoGh7bJGvd8sNG9y86MCJAZDHa6fl oWul2QyLaI0HfJ5itWIOzlz9jq77Uud7zazEMj8tuFOwC+8hxwrOegIMJDrzeSC8Xbbu 7gPPFW2qRaBeudN+wfY50GyqwYUlj9G+qR2yqFEq8fQPcidqdek9P+B88DJBGspwysTY FN2sGOE0QRF34epv3cLJ7rOuG/V7ZMGfXjUmE9K1lGJF3AyOglv8LME24X9enpz6MnjP A/ZA== X-Gm-Message-State: AOAM532U+x6PYCAFXxWoL7qwWscnt4FTrNhydvwx4Ph6AlyTpGr5oEcO jtKNjuMt5EkS2AI20DD1cxKlCxxa1DT/HfQqUmU= X-Google-Smtp-Source: ABdhPJxeHulWtr7n+2Ty9rUxinQAqvYA67tcnpfc8ofRLdoXgNZgppuEjaP2RhWrcFwoPy/jIP+s/0n9u1KtSG/OOko= X-Received: by 2002:a5d:4705:: with SMTP id y5mr5879283wrq.98.1591832556370; Wed, 10 Jun 2020 16:42:36 -0700 (PDT) MIME-Version: 1.0 References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> In-Reply-To: From: =?UTF-8?Q?Micha=C5=82_Nazarewicz?= Date: Thu, 11 Jun 2020 00:42:25 +0100 Message-ID: Subject: Re: Regexp for c-or-c++-mode To: Robert Pluim Cc: Alan Mackenzie , emacs-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=209.85.221.46; envelope-from=mnazarewicz@gmail.com; helo=mail-wr1-f46.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 19:42:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jun 2020 23:42:45 -0000 On Wed, 10 Jun 2020 at 15:15, Robert Pluim wrote: > > >>>>> On Wed, 10 Jun 2020 14:58:18 +0100, Micha=C5=82 Nazarewicz said: > > Micha=C5=82> On Wed, 10 Jun 2020 at 12:40, Robert Pluim wrote: > Micha=C5=82> I suppose you=E2=80=99re right. It should be [ \t\v\f] i= nstead to catch > Micha=C5=82> all non-new-line white-space characters. Or [ \t\v\f\r\n= ] to catch > Micha=C5=82> all white-space characters. > >> > >> [[:blank:]] ? > > Micha=C5=82> [[:blank:]] is defined in terms of Unicode properties so= that would > Micha=C5=82> catch things which C does not consider white-space. > > [[:space:]] then, which uses the buffer's syntax table. The regex under discussion needs to adhere to C syntax but is (may be) used outside of cc-mode and thus should not rely on syntax table being set up for C. --=20 Best regards =E3=83=9F=E3=83=8F=E3=82=A6 =E2=80=9C=F0=9D=93=B6=F0=9D=93=B2=F0=9D=93=B7= =F0=9D=93=AA86=E2=80=9D =E3=83=8A=E3=82=B6=E3=83=AC=E3=83=B4=E3=82=A4=E3=83= =84 =C2=ABIf at first you don=E2=80=99t succeed, give up skydiving=C2=BB From MAILER-DAEMON Wed Jun 10 21:34:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjC7A-0006V8-Ct for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 21:34:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjC78-0006Uj-Fv for emacs-devel@gnu.org; Wed, 10 Jun 2020 21:34:42 -0400 Received: from sonic307-3.consmr.mail.bf2.yahoo.com ([74.6.134.42]:42994) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjC76-0006cH-QB for emacs-devel@gnu.org; Wed, 10 Jun 2020 21:34:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591839278; bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=; h=From:Date:From:Subject; b=f0pXDGoIoxUZa32NsudMo9RZwQKG+eg9yKj4S307PBvU23LgaxSuunLBdRqQwZyINz7cfZolTyL+VjzBDm64m6/9hYYW9nj2XDriXormhStEN8H0ghjQcly7npTCxNoFNpUWPdk8ATN53fzNw8dlOYmih9H3bQDaEEeOwtOD1VSmxvibvT73sW8S/Ke6EvmsT+LBvtSajwkffvNTInKTFykH1Cek9UIjSBlkOnhfyv1ui062NG3xZ4Pcz5kyl6dqDb5w911Z1PJ+Vn8syuAtVeouRCxGH7m2Up6Aas0vahe/BZwaneT0fdkB08rz1WKAg+ODwb46mxidJjIIbf/+ew== X-YMail-OSG: xkvvGlIVM1l0CS4EPkR0NhOiYLo6kyFNqWZe9_uFmP.LvWAGgxpheXf1joi8MoT cCN5MEYBBHWt0IvgD57RD63Z2VvWVCbFPiDbmWqBDPzUdcf8ac4YE.bPZUH.pd21I6lHzyM6yIUu zYlXAutEi6jEcHy0jjuraJ7j0P3_kTr.1KVp7dWBARdUWknJ.Dmi.TkUHJamP4iBOe2pDuTeCNZH 8LalemedsH8MempSvYt2ESX0u8sOPdOGgBrbS6jYE.xSbufURBzz2aeT2vVdVdRFzs8B76JK8hQw o_6CcPk8lrjVUai1c7M_FbpzY1VAavgvYw1nkZjvNW92veJGiS2M58lLrga5kNcrhpPrVBy1.NNF uu99M35X_zH81w4mfZwfHvNbXqjy0Y7QuxLCkjzWptiKi6_EiD4nYBhT1pd3RSrXd_91giVw2p2Q pRcuuBs6WWWX8KYkT9rttbl37fmrtZoxkD_.W0LGG5SC1R4l2ISUtklfsACzXOQeVMgQ6Z34dT8g xht3OuNal3lMY.DjuGMR81eTvEZmrbaFKu2Dmro03xAIefQP.gzUqK2GYsJMjh7BDxufvjm7Qy_E RpjmT7bGSijPboLcII07opMfeChXa1rmk3heqGyMVFC6HIQsMLhogbBkmJNzCRvS7l15VKMwHvfH 85nkQcZYcP6jrQ04ANF7H_HZCsqC39siNTZ6kTcQ2LBEaxulGE6RCjPzWNUtio5z0dX9dmdL8k_5 v36vJ.GLsQO9o1vxl5Gkg1C9gS0yJ31dCj1KglY2l.ilzgFH0g8OVp1LTvrktYQTnbi7Q1RljFEH shsq6xQidfCqI4kfYxeYSAm3rBKolTHT.RP1piaTukAuU0Y7rc1M6GqeXEZOVSYH7k5TA7xEEnqt dI2I5UMs1Ojo.jACA_yTt20zrkORWl_UFgZNRNW1TQTIU7.LMzjRdPR3o20qAcmxXIoP8WbIvrqR MzHctkO7wTZ4NLTY4sCcz2DfwgHCbU7j4h9M.BX9KRMR720fDxpI1E_PfDma6kYRa29ssjQcjOHK f3AKCg4zEL.75j89GE_co5_In7rN4sQxb.vIncPBEOO7..h044v1qjTscjtQSdcfzQZOaeBTbZkt M4BBplAeQZGwxvg4MyxLTSOG6R4UcRyTJmlGoHuLfj10yQzIjoq2DDR.T1.UnMvHnpaKNlaqEXto OgNEXu9R7d5FOd2JPefSfR635PS3RimOFnH9cueYQHAgrw6kYDMJCPqX0VoGuo.MjKOYV3qBSvXG Qx2q2iyZP_qBZeubA8rTdrN18swRpu.jZwRTQKwM6NovZSe.hqzvLTS0uLLTwL2UR_it.4iezfGr Er_hnKTn2c53paJ879if9glQ23s00MbnmPjXJ.SOqUQS5Bq_Hwlw.0s2aEc3e8xF1awBoqXJ_dH6 z7oyx Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 01:34:38 +0000 Received: by smtp417.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 3c9505319d2043ca57ce047a43bf0465; Thu, 11 Jun 2020 01:34:35 +0000 (UTC) From: spacibba@aol.com Date: Thu, 11 Jun 2020 01:34:35 +0000 (UTC) X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 1 Received-SPF: pass client-ip=74.6.134.42; envelope-from=spacibba@aol.com; helo=sonic307-3.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 21:34:38 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: 35 X-Spam_score: 3.5 X-Spam_bar: +++ X-Spam_report: (3.5 / 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, EMPTY_MESSAGE=2.32, FREEMAIL_FROM=0.001, MALFORMED_FREEMAIL=1, MISSING_HEADERS=1.021, MISSING_MID=0.497, MISSING_SUBJECT=1.799, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action Message-Id: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 01:34:42 -0000 From MAILER-DAEMON Wed Jun 10 21:40:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjCCv-0000M6-CT for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 21:40:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjCCt-0000Lx-Tl for emacs-devel@gnu.org; Wed, 10 Jun 2020 21:40:39 -0400 Received: from sonic311-15.consmr.mail.bf2.yahoo.com ([74.6.131.125]:45903) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjCCs-0007Wl-HO for emacs-devel@gnu.org; Wed, 10 Jun 2020 21:40:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591839637; bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=; h=From:Date:From:Subject; b=AI7XHYohpQi75RZnNCiENSEpII6BkFm72Vx0jCrkePLQE6N3w45Z2Zc8XK4GNHltKI29IKnzjawv+PlnmpnGA6WftEnlRIJfy0paPXjxt9ce1Ki8Agh5EqgBvuXBQk09yJZt6Ybr1zAPpMbtkoAcXjMuOxzFIbojH9cKNbHs3853kwFVlbgozp2HuZrBCn7oXVjte0Cwim59BNjA5ZvLDVx7+JT0Bwki3yCc+19KlVNAJVNBdYqiQJZuiJPNBeFA8dRzkZTB6Kz8VjXg8REhb/Nmk9DArFt3Bi/rWZDJyXuBFAlDMK98AF4fqvo5hwuhzjfUV0y7AYtfaQljU2/VSw== X-YMail-OSG: YLcK5kgVM1lyw3Jc.Lu6eyn9Y.YBu5VhdGzCZ.gNkZ78U9HUbC4lPSjo0HrliRW c_SKI8M0GcyvVxzqiAK.E3l5VuGNjr03z5.IVLSlaPFqn7O6O7go.nRzZKDFe4gJ..aR00s7nKO. frp2YqWsAvb6jVl4PqzFiE0ttiZG9wsAfhIjqV4Xd31L8ad8061J3_Rw1QOT0uuPQjMdgeuAiLGI c2vD0VkUNLtFYm7T85G10uWzmsdCbPBsbZgINAF55kQbD5xxpfCeV_ovvmlMQAcdZoBy38uTT4GK dcOA_WgTxUfLKdmgB6eWGYWJJSJjtjrZU6L_MGpN1yFL8H.Xmfl28Lw56_9pH9oJ4L6X4x8xRRnM RWTis8uv7ytQS8qp4JwApY.U4JtySHfQ8qKfv0OnvQo5zknhuhcMTwDgFbvGFR.HTLM0ShkHaa3v oiFOJ31PBYKG5A2ucVIsK7YEqhrM9did2_DVogq.uLsxroyzypo48zDptT0zwvq5gIw1OH14OGny VqM4.SQVpfwrQf94fC1jSfLHyIUntO4L2hylnH8nwUDNzd5CMQ_ZTrKa1ho5lIOOUU18d3S1Triy yuoTOFwMD3ILy0LbtogciAywngJwNTD.oTaWcprFmLeSfcgdoYxGhI353t2PwKZ9jWgkMkMgx2Pi YFZJ1KoE3qDHzyLb3KmJ14xFoDhWnN2YIyxjRSdJrrhTFWjKEVJjsgJBqbQhWFewQSooid9jJklq wu7.hsr9kwRbES8PH.eachDMCEnrpYjavgDJ.DIx07wOoqpz8ai5hqQM5CLcGcjjSBeZ11Gz3kxw jlxukpCyKPilrOKWNPZ1P.KCRjeWwQfo.zw5Jz.oeaD4VYC8NbQClDD3EfcXRbNf0qaPlKf6.puj orDo11QDb49DxOaNUWd9M1FAV9ljKLBuzv3SqcpCQ2G3hUR6nFWrj6wF7W66RdVAFX5ol7oyK6ZK CxB8PoVYvEIv6qGQhUpeS.6341O1fxJNsBFQQmstk5XAqLNEx8WbetJhBniCLx3Wm_HqPaotRy5D N4CPECRuCzLWgYIRlTeDXkgsD5Uko1giv_SpvaTPF3G3I3eejnrYz.hPuneVEMU0MaZYOPHTMRN0 qAL55tid5Pc8HfeFnk0FU4jDjmlJ5iGPL2RB6q0w8Pn5AfVfxsTkxAsfkKOWJeATuT6xnfSjEn8Z Bncxn0A5RnwQPB3B9b_f.SlmfrhrV60cxMHbvOEW4R_WExSqeWltnphFvotdi2.arV04dPCIMzea QOorxn.in4v3F3PPJHJa5yGwrsnJg4aYww.lFiz5qj9PIwZX.ZW9qIEcYCGkx8qKQVJO6ncUJ_YK q1Z.sf3suc2y6.qXQ.GTMZ.DJlG7nhEwZiPRsWB3NY2SXsKh8iaFx6l7nzJshgSXTZV9p2hZ_mRC n.FZW9X7ZqpajSw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 01:40:37 +0000 Received: by smtp425.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 362d37b35b19cd53b25844c1007131f9; Thu, 11 Jun 2020 01:40:36 +0000 (UTC) From: spacibba@aol.com Date: Thu, 11 Jun 2020 01:40:36 +0000 (UTC) X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 1 Received-SPF: pass client-ip=74.6.131.125; envelope-from=spacibba@aol.com; helo=sonic311-15.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 21:40:37 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: 35 X-Spam_score: 3.5 X-Spam_bar: +++ X-Spam_report: (3.5 / 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, EMPTY_MESSAGE=2.32, FREEMAIL_FROM=0.001, MALFORMED_FREEMAIL=1, MISSING_HEADERS=1.021, MISSING_MID=0.497, MISSING_SUBJECT=1.799, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action Message-Id: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 01:40:40 -0000 From MAILER-DAEMON Wed Jun 10 22:24:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjCtm-0000oS-3u for mharc-emacs-devel@gnu.org; Wed, 10 Jun 2020 22:24:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43758) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjBV2-0001w2-4A for emacs-devel@gnu.org; Wed, 10 Jun 2020 20:55:20 -0400 Received: from gauss.matem.unam.mx ([132.248.17.1]:56214) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jjBV0-00077c-7z for emacs-devel@gnu.org; Wed, 10 Jun 2020 20:55:19 -0400 Received: from penguin (unknown [187.170.50.210]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: omar) by gauss.matem.unam.mx (Postfix) with ESMTP id D059454220 for ; Wed, 10 Jun 2020 19:55:12 -0500 (CDT) From: =?utf-8?Q?Omar_Antol=C3=ADn_Camarena?= To: emacs-devel@gnu.org Subject: Re: vertical fido-mode Date: Wed, 10 Jun 2020 19:55:09 -0500 Message-ID: <87a71apgk2.fsf@penguin> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=132.248.17.1; envelope-from=omar@matem.unam.mx; helo=gauss.matem.unam.mx X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/10 20:55:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Wed, 10 Jun 2020 22:24:56 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 00:55:20 -0000 Hi! I'm the author of icomplete-vertical. I'd be very happy to see the icom= plete-vertical functionality included in Emacs, and Ergus is completely cor= rect: > But as I see the code in icomplete-vertical-mode; it relies in a hook (ic= omplete-vertical-minibuffer-setup) and an advice (icomplete-vertical-format= -completions) which in principle we don't need with a very simple modificat= ion of icomplete-completions and icomplete-minibuffer-setup. If icomplete-c= ompletions produces the formated output it will be more efficient and clean= than adding an advice or do a reformat. That's exactly what should be done: not include the icomplete-vertical pack= age as is, but instead make small modifications of the existing icomplete p= ackage to incorporate the changes. > There are also some customizable options that for a simple working vertic= al mode we shouldn't need (like icomplete-vertical-separator-alist or a fac= e icomplete-vertical-separator) unless we want to add them now. Again, Ergus is completely right! Those, with the benefit of hindsight, are= over-engineered and shouldn't be included in Emacs. Heck, they shouldn't e= ven be in icomplete-vertical. (I've learned that lesson and although I subs= equently wrote a few more completion UIs, I didn't include options analogou= s to those.) --=20 Omar Antol=C3=ADn Camarena From MAILER-DAEMON Thu Jun 11 01:15:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjFYi-0007Ly-7t for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 01:15:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjFYg-0007LZ-Ru for emacs-devel@gnu.org; Thu, 11 Jun 2020 01:15:22 -0400 Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]:44400) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjFYf-00027e-Qu for emacs-devel@gnu.org; Thu, 11 Jun 2020 01:15:22 -0400 Received: by mail-ua1-x92a.google.com with SMTP id c9so1678773uao.11 for ; Wed, 10 Jun 2020 22:15:16 -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 :cc:content-transfer-encoding; bh=YhsweI7L6cBCJQtohgB39qbdiE2eBwUax0fNBwFMlGg=; b=LfPfivTUFC6zvctlAnSG3F+r+qOf5yJCLiGBte4/jIV4W0FqfiXNUj1BJ+dGi3Ak34 mAcj42Fbll4j/LlTAJOJGWNxX7RJrb5im74r8HeT3SLPqGzkRY8ZCpPCo8Y79raZ8qiE DyexMyNm9gz3TH5V7BytPwza81PQ8X/uCOtKI6LoFxRs9gKDXTC6edoBd1R5HOQWkyCb GvV21f2OWz5j578vsXTA172YUXX9D4mG3A+Bp5+Wp7Bnzz9bfPgf66LBg4Us9jeOIMCN ZMlvuOGy8OffB148u9QubXn7O8tlUoWgex5q+14TwyQcycAThxSZ0cjBnbgqd1tVnnU6 AKjg== 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:cc:content-transfer-encoding; bh=YhsweI7L6cBCJQtohgB39qbdiE2eBwUax0fNBwFMlGg=; b=HOcIh6iKWDI5aocrlboY/w0/wTpMhj4VNYCX1cwI9zDXykkRFw+wNpvkTZq3HNlvch ysp1zGxmz/Zuf7CZwU0RBgeDPIRjJqyIito1u6lHLsGEHP3sWjMZAVbXFgHmlbgs2RHM f2W+5kUZIf8s2YeGkYrjEJ7o/l/6k2UPkMrKgo75fpvBdDcd9eavGcWkScY6AzHozOUt b7Zk8i+Cw6ca5eZ7j/KslUfzhYuPs6JVDRTQWJ3QBhnMTqsC+1Z/RkLH8LvjUNGUaBI+ j564fUnZ1Ar68qZ9MzI3iQmc0NlqG6NJ0gXuFibbRdONfs5pJzNX6F4XUqe/IJTuaa9H DxDQ== X-Gm-Message-State: AOAM532ij9wHnr79rxokSBAPEpZJ5J3XewhzKRJZ5TWAIhVAm5wPbDQs yJ53dUuYmMta1v8ovbqp9AFa5sKASV7Si7YYT+4= X-Google-Smtp-Source: ABdhPJz54iH6ntFTpmPBF1F6BeL0nol361jXlQ6SKJdzOKUqFyNuAe4xyRNk5fI1dSikGaNYK43ETdmF4XJThW5SGwI= X-Received: by 2002:a9f:222a:: with SMTP id 39mr5244636uad.24.1591852515541; Wed, 10 Jun 2020 22:15:15 -0700 (PDT) MIME-Version: 1.0 References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> In-Reply-To: From: Yuri Khan Date: Thu, 11 Jun 2020 12:15:03 +0700 Message-ID: Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) To: Stefan Monnier Cc: =?UTF-8?Q?Mattias_Engdeg=C3=A5rd?= , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::92a; envelope-from=yurivkhan@gmail.com; helo=mail-ua1-x92a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 05:15:23 -0000 On Thu, 11 Jun 2020 at 02:20, Stefan Monnier wro= te: > > +This predicate can be used both for determining a suitable (black or w= hite) > > +contrast colour with RGB as background and as foreground." > > + ;; and compare to a cut-off value determined experimentally. > > + ;; See https://en.wikipedia.org/wiki/Relative_luminance for details. > > + (< y (eval-when-compile (expt 0.6 2.2))))) > > Where does this 0.6 come from? > I don't see it in https://en.wikipedia.org/wiki/Relative_luminance Instead of comparing the relative luminance against an experimentally determined cutoff, why not do the actual calculations of contrast ratio against black and white? The formula for contrast ratio is: C =3D (L1+0.05) / (L2+0.05) [1] where L1 and L2 are relative luminances of the brighter and the darker colo= rs. So contrast against black is (L+0.05) / 0.05 and contrast against white is 1.05 / (L+0.05). Solving for the middle ground L where these give the same result: (L+0.05) / 0.05 =3D 1.05 / (L+0.05) (L+0.05)^2 =3D 1.05 * 0.05 L+0.05 =3D (1.05 * 0.05)^0.5 L =3D (1.05 * 0.05)^0.5 - 0.05 =E2=89=88 0.18 corresponding to a gray aroun= d #767576 Experimentally, I find white and black over #767576 about equally easy to read; over a light gray #cccbcc (L=3D0.6), black is much more readable than white. [1]: https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio From MAILER-DAEMON Thu Jun 11 03:26:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjHbY-0006dS-Jl for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 03:26:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51292) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjHbW-0006dI-SU for emacs-devel@gnu.org; Thu, 11 Jun 2020 03:26:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57696) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjHbW-00047P-5H; Thu, 11 Jun 2020 03:26:26 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:54729) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jjHbV-0002Xe-01; Thu, 11 Jun 2020 03:26:25 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 70AE827C0054; Thu, 11 Jun 2020 03:26:24 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Thu, 11 Jun 2020 03:26:24 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudehjedguddvtdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 7E566328006B; Thu, 11 Jun 2020 03:26:23 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier Cc: Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> <871rmmwsy5.fsf@gnu.org> Mail-Followup-To: Stefan Monnier , Emacs developers Date: Thu, 11 Jun 2020 09:26:22 +0200 In-Reply-To: (Stefan Monnier's message of "Wed, 10 Jun 2020 16:58:45 -0400") Message-ID: <87pna6vza9.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 07:26:27 -0000 Stefan Monnier writes: >> the default value of `bug-reference-url-format' (which has no default >> value right now)? Then you could simply enable `bug-reference-mode' >> wherever you want (especially in MUAs like rmail/Gnus/mu4e) and >> bug#17171 become clickable and opened immediately in debbugs if > > Right, but bug#345 also becomes clickable in places where it has > nothing to do with Emacs :-( Yes, that's true. And essentially that's the case right now, too, except that "clicking" it (C-c RET) is no no-op whereas it would open a wrong (emacs) bug then. > `debbugs.el` could configure Gnus/Rmail/mu4e to set this var when > viewing a message sent to emacs-devel, tho. Nah, what does that have to do with debbugs really? The task is to set the right `bug-reference-url-format' automatically. How the bug report is opened later on is handled by `browse-url-handlers' and `browse-url-default-handlers'. How about adding a defcustom `bug-reference-guess-url-format-functions' and a defvar `bug-reference-guess-url-format-default-functions' being lists of zero-arg functions guessing the right `bug-reference-url-format' from things like VCS URL of the current file, Gnus group, rmail, etc. Again the "default" one would be for making Emacs (packages like Gnus) hook in, the other is for the user. I'd be willing to work on that. Bye, Tassilo From MAILER-DAEMON Thu Jun 11 05:41:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjJhl-0002T2-Cg for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 05:41:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjJhj-0002R6-GH for emacs-devel@gnu.org; Thu, 11 Jun 2020 05:40:59 -0400 Received: from colin.muc.de ([193.149.48.1]:16899 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1jjJhi-00072w-0l for emacs-devel@gnu.org; Thu, 11 Jun 2020 05:40:59 -0400 Received: (qmail 5211 invoked by uid 3782); 11 Jun 2020 09:40:54 -0000 Received: from acm.muc.de (p4fe15d82.dip0.t-ipconnect.de [79.225.93.130]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 11 Jun 2020 11:40:53 +0200 Received: (qmail 10456 invoked by uid 1000); 11 Jun 2020 09:40:53 -0000 Date: Thu, 11 Jun 2020 09:40:53 +0000 To: =?utf-8?Q?Micha=C5=82?= Nazarewicz Cc: Robert Pluim , emacs-devel@gnu.org Subject: Re: Regexp for c-or-c++-mode Message-ID: <20200611094053.GA5703@ACM> References: <20200607164100.GB6212@ACM> <20200609201255.GB7104@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.1; envelope-from=acm@muc.de; helo=mail.muc.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 05:40:54 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 09:40:59 -0000 Hello, Micha�. On Thu, Jun 11, 2020 at 00:42:25 +0100, MichaÅ‚ Nazarewicz wrote: > On Wed, 10 Jun 2020 at 15:15, Robert Pluim wrote: > > >>>>> On Wed, 10 Jun 2020 14:58:18 +0100, MichaÅ‚ Nazarewicz said: > > MichaÅ‚> On Wed, 10 Jun 2020 at 12:40, Robert Pluim wrote: > > MichaÅ‚> I suppose you’re right. It should be [ \t\v\f] instead to catch > > MichaÅ‚> all non-new-line white-space characters. Or [ \t\v\f\r\n] to catch > > MichaÅ‚> all white-space characters. > > >> [[:blank:]] ? > > MichaÅ‚> [[:blank:]] is defined in terms of Unicode properties so that would > > MichaÅ‚> catch things which C does not consider white-space. > > [[:space:]] then, which uses the buffer's syntax table. > The regex under discussion needs to adhere to C syntax but is (may be) > used outside of cc-mode and thus should not rely on syntax table being > set up for C. How about using simply [ \t]? The \r doesn't really add any utility, just confusion, and there seem not to have been any problems with c-or-c++-mode so far. Like you said, including the "bigger" whitespace characters might lead to false positives. > -- > Best regards > ミãƒã‚¦ “ð“¶ð“²ð“·ð“ª86†ナザレヴイツ > «If at first you don’t succeed, give up skydiving» -- Alan Mackenzie (Nuremberg, Germany). From MAILER-DAEMON Thu Jun 11 09:03:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjMs5-0003wG-TJ for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:03:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjMs3-0003rt-7O for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:03:51 -0400 Received: from sonic317-26.consmr.mail.bf2.yahoo.com ([74.6.129.81]:39310) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjMs1-0002qQ-9C for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:03:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591880626; bh=P8JO3jsK5ibWGhNtY6I3o5/tI7AOE5WOocloePJMgs0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=DteHFZgD93oriFfgRxKqBV3VDtNGtv8/ptH2e82fq/K1h5YJnPBE9bfvTrGP5PIM6qrQMv9QpkRTuYmDFkxfxmBLfa6wQF73KNQuxfDhYhvfDlB1xFeMeyosbtzSX/vuNmL7zGrUQ1SAuEjLzhhMzp9npMkEXyHiggwW5rz/3zYucs2lBEQqbJM9saXAHXGqS5FeoKEnNcG8lW5mJ7QENpbdhrF53Yura4ToNDjwNUlcckt7/J3paoa/aOaqmzmmZn5/NfDiUzlB7Smvd0ny2eNxUOn4IvLcsDeRS3E3dlfZtzMRBjFi7sLZAoxUvt1pyqnQWtq5AJ9dcAMKZzR7OA== X-YMail-OSG: HUbs5M0VM1ne4NzIH8SYTc9jRwgfkvvGkrBd4c6O0pcLkUmxpm72TJvhq3IN07B uB_M3kDgwUdgfM.MeLjGEXy.aEls9__LzKV_Mr36ENIljp6QW6GKKy0qFkRyM2LjG_tGGu2Qr6TN 6JvIkmM3K65GnuGBrh4uFZVUXbZIarUqAMZfiY49j9NZ1vHijqBw4WPUgAvWZ3eMUbdu.tlQ1rZA sBp0LEfTEY0pp31yKzvIKMkHNUwjZJrlG3kGvzUDbbT9HWIgpgTRdm7ZjNwImW6p7VgeN5UNHQG3 UQq3YQ2YxA5YT2qBWawLtuH1u_sf0oviLX1VBqEm.UKTi_.oMUX9nERzXE64hSiZEfPEYvOwiOGD 1trEq30ew5_0NwDxFgaa1OG_GLTmDJD77W0J7KgjImE30npQMZo5VdjK4WTQq_qsBbIztE04_WDq Leotn0KJQCpnK6tLc_R1ComjmMAQNjKfPigv8VL5hapfHAKUe0ScfJP4YxcqpyBLf2L.fvhoBeFF lqCHN.imY74b36qt_gZU08NRDLTJfs9D1OATds.IVRrIIMvNBVv_FgPkOrrvKPMeUsZ8LkU3xsSp dFDy56U5aKKS3rpam9.4WPhHfZHadCEj.DSZ2Bk9KDP4w.YhQ3qitqtl3cb3EeTwjEv9IwTIn2N_ xSgul..bAMUwrvIAnN9WKlXZep0SJd6.WAuUfUy0Hrle7PA60Ib7vgFyChJAqpWA4FdkqPIwl1eq CJWmd4Enm1O6Sg1bdILOjao7dxz6mBQkNraDdr_gydfSShgx3vpHMYIhjEZadBzqVgk.ym6Md1qj HGDWNk3mxvaSWHzHlY5bNlnhNr0YGYoW.NLKAKbqTiJ8UojNfMLupHNtBdMR98B0CGTnIAdZWyXP uApji93YLgCUJLA8w9eIwPaQboGnlI8KpUmfLLtPTH.W.dRI.12oNtT_e_plggclLqpSNDjpPD6M UV0nF_s7USNlzfLOH5g6vy3P0NwHB_1ims4.cjlodhyx7LGucfsTqL.ie9jVtz9fuwatz25rp5wT vNIVnPwl5YkhfbR1Z2_6FIm441Y7H.pFb0JimVArI0rCglz27sLgFEh_roDO0Ps1m7tQJR8CqZ7U Qp4mBCQ8oxls14JKarZmNvkvRvoasUjma5NRtDV8fOvoStkdYmAKnVZm4OuznE.HEet66RJ8RSdO skQEcD7bqzl.lDnRm9waohAvpjFb4sZeZ4NUwCrK7DGYiSiQNpTgLJ580v1O49VGTI4R3sT_kmwB Q7o4ggq4weZSQT2xwJrUFHgbnSnibkmOyBT8qV3ZXWCQZfEt0sF0kO7SufCmUsxU44PY56YKHHNH 7vtXG7KN43HDHPlUlZEX5aMjLBf5JpuCA0CVzT1wYC4yCHN2QjMxbzIbH0t7jY_4MPK4N1LuMzgO 5ZC60WevgJC4BxO7ymRYJm8oXLWNJ7p4- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 13:03:46 +0000 Received: by smtp416.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 9f3175871c8490d6bbd69b26c6facd05; Thu, 11 Jun 2020 13:03:44 +0000 (UTC) Date: Thu, 11 Jun 2020 15:03:41 +0200 From: Ergus To: Omar =?utf-8?Q?Antol=C3=ADn?= Camarena Cc: emacs-devel@gnu.org Subject: Re: vertical fido-mode Message-ID: <20200611130341.zwxcpwtwaxrq2qwm@ergus> References: <87a71apgk2.fsf@penguin> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <87a71apgk2.fsf@penguin> User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 1745 Received-SPF: pass client-ip=74.6.129.81; envelope-from=spacibba@aol.com; helo=sonic317-26.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 09:03:46 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:03:51 -0000 Hi Omar! Good to know that you agree with the needed changes as I proposed them. Are you willing to implement them? If so, do you have a copyright assignment? I am available to help you with anything you need (I am not a good lisper any way). But I am really interested into see this functionality in vanilla for fido-mode. Best, Ergus On Wed, Jun 10, 2020 at 07:55:09PM -0500, Omar Antol�n Camarena wrote: >Hi! I'm the author of icomplete-vertical. I'd be very happy to see the icomplete-vertical functionality included in Emacs, and Ergus is completely correct: > >> But as I see the code in icomplete-vertical-mode; it relies in a hook (icomplete-vertical-minibuffer-setup) and an advice (icomplete-vertical-format-completions) which in principle we don't need with a very simple modification of icomplete-completions and icomplete-minibuffer-setup. If icomplete-completions produces the formated output it will be more efficient and clean than adding an advice or do a reformat. > >That's exactly what should be done: not include the icomplete-vertical package as is, but instead make small modifications of the existing icomplete package to incorporate the changes. > >> There are also some customizable options that for a simple working vertical mode we shouldn't need (like icomplete-vertical-separator-alist or a face icomplete-vertical-separator) unless we want to add them now. > >Again, Ergus is completely right! Those, with the benefit of hindsight, are over-engineered and shouldn't be included in Emacs. Heck, they shouldn't even be in icomplete-vertical. (I've learned that lesson and although I subsequently wrote a few more completion UIs, I didn't include options analogous to those.) > >-- >Omar Antol�n Camarena > From MAILER-DAEMON Thu Jun 11 09:10:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjMyU-0001sn-5T for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:10:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55340) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjMyS-0001sP-9M for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:10:28 -0400 Received: from sonic313-13.consmr.mail.bf2.yahoo.com ([74.6.133.123]:33519) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjMyQ-0004fU-63 for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:10:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591881023; bh=GFQk67GAw7ZRtIEb/aK2/OUNIKHFsLqZrPF/d7eUZ5c=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=QqHz2PjJhKdKyb39rdn3Nl1zo3f68sZuhnR9S1gFeaPiMn/suN5flus/rHO1JB8kICn/W1XbI8YHxLPVsysRNg2wsEAsniKgO6r/pAnvTSVbrqD+rgsdXWaUlCwY0WzN7i/yX92ooFSCt48tlpxPXiFYvWNxLhEsDsePvDIxEHtR9iYahYrOqDpuAPaHqJ+8f35NpdTwmHLB4TnXN1q+/zomGx2NuSo4/txK5xQzPF1ZwCxs0Yil8a9VCndhYyQ2MgbSraeBW4uPTzmA5mk9WHcdcKagxWXXUAAje6RF+2ho1Dcg8HUIWXMJrccGuizwaE0FRdjFpHtWdftWGqEIQg== X-YMail-OSG: DpHuZ2UVM1kpSKmrVbcWcinj0HACvi8QssUuDy8pTxpnoXOyYq9rWJIvowZFB1X jtxO_4JpehucQXosM5yqAh5c7scVV3D7CjKaQ5d3r8Q9bic6uXBZDTbJvJRnMDr4BG3o5W1CWSHa pGmdtpeOm70S_LwdkBCu3WvDL1FZOJ5q1tBdMEeMjXknxC6f_bBGGM7tCtgvr1IT44wq5fzz49ty EW9iaBeTywPwLND7IqKO8aqgz6xV0M4CexJTUV9icrvBmcVOGUTYzsomyI7oDVp.jr.JKumpcFqw 7ZCygckGkVvqaMJYejoQg3ojYfnlYU20oKPDjF4yXbC2WXNalsmrTHv5zR4CtTIUslGTcMUeRRPF fLPTFH3lp3tlJwYX2fCWm3RkJKE7tg_m8Dulwd3PT.HP24cngN0tM6fw6cmdPoALZsae.E1jlWH_ 6QTUszxJGVZUWbszSyoVItSBaghNBWFqxOta0nF53m5ES1Jat4cBuYrEEHHSmoliRR7cVjegt4jd 3uClnBDN3eGZSzENEkh6hSWWo_8SDZP0lFh1jGClINviIyxWdHkwpyFCrw3VMvpiVVTEZCsEqHDB pj2GWW6fcuLTJQ8UxCN3Dr9CAq3SiV9h_mbul82EYbPjQD6VMZgF0gtFK_hNZqW3OhmvbNb2wy1e tUxfkdLVH_BXqN50E1Bsb2KCPrt40WrKLSjOjz6cpDKcs0ZjJ6.j4RrbLDtCXJ2fnHnx05sPSu5o YKAznDBo.RaRBg.ns2e51w7f3S0TJtsGLr5ZUu7CZ4jwHGnj1OUoBTCqQKoiN1f8dFbOSXqNMLjS 1KNo3cd_SxrSAfMfsznPJgcus59tjeLQDgFE.XtpSrIhcNZGMTA3PDQNfDNxztfT9YknsbmuGjJG VfgJfa1PcFPZKyI8tMLE6qHmxpjmePQP585IxEkovoH0rO_MNOfmWIr19h6kXMYbdXgxWLqTHfZw TyVCDpHphMiUV_FGlzGIiD9U2j__w7vJPeEvmlICoHiNZYoPL6TyshRuLpWEyTJQiouv3gMb7yFP JmLLJmOhL3HbmJB2KB8YEdpFTEocGFE7We9kKJmwq_U4_xScE0QBnH6n3_WsZJxHYY6h.LdwZ508 rC6HInAjRbzBzj6D4vaSM50Fef85_st5bMiHlXK6nxNe..nlCgDusofp6j4XsxENcX5Sboj44ccJ vh3bfbfar2CQ1Yqln9kCMyY_R6fgGjni47NLc8T5_BA873KLwGV0mEp8C.M3vdz7yrHyQYlKcqk3 LuUJXGvx7E1_gLlC93N8okRlT0TMPWmlO70uUWVpZSb.HFWK_D2EEs3hnA_bdrVYV.cK7WzFROib uBs1yso5SNxL9t.EdRPCU4gSbP2l87yPutp.gzScjyNzSse_ilxKloDuxAb.HuryxghxXw0_8 Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 13:10:23 +0000 Received: by smtp427.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 4208d9896873eba1c8b5e34972421e09; Thu, 11 Jun 2020 13:10:20 +0000 (UTC) Date: Thu, 11 Jun 2020 15:10:18 +0200 From: Ergus To: Juri Linkov Cc: Dmitry Gutov , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Message-ID: <20200611131018.74d2x62edpmefpxv@ergus> References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <87y2ouldrr.fsf@mail.linkov.net> User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 988 Received-SPF: pass client-ip=74.6.133.123; envelope-from=spacibba@aol.com; helo=sonic313-13.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 09:10:23 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:10:28 -0000 On Thu, Jun 11, 2020 at 02:08:56AM +0300, Juri Linkov wrote: >>> So in my opinion maybe we can provide the vertical mode in a simpler way >>> just improving icomplete-completions and some other small changes here >>> and there. WDYT? >> >> It could also add a different way to "select" a previous or next >> completion: instead of rotating the list, move the highlight (and some >> fringe indicator, maybe). > >Or show vertical completions in the *Completions* buffer and use the >current icomplete keys to navigate the *Completions* list from the minibuffer. > Yes, that's like a zsh completion experience. But in my opinion it is more like a *Completions* buffer functionality right? (add bindings and autoinsert to the Complete buffer) I am not sure it should be in icomplete. Personally I consider that the *Completions* buffer conflicts with the completion list shown from fido or icomplete and shouldn't be shown when using icomplete, fido, ido as it is not shown in ivy or helm. From MAILER-DAEMON Thu Jun 11 09:22:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNAL-0000wP-6F for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:22:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNAJ-0000vv-Oc for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:22:43 -0400 Received: from sonic303-2.consmr.mail.bf2.yahoo.com ([74.6.131.41]:46474) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjNAH-0008Ar-Ih for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:22:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591881759; bh=BgTqTqAlZZ6zoL6aJcVN9fzWDVsxipnY+w72Zt3mAlw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=GsdfGuRaEkzY39pWgAsxr+LGbKeoTuelDQxZ8pYwuc5xquxZu4r0iABfEtycrxvcxOLPFcUCtcYrJU7LvoBGyjvLiKOj3QpZXBcIHNsaLMx6GBBoG1ssTrV3iE9Zx8HFW0E6m1TW3ka2XpdzPGswA6aq2hR1K8ImmwWZZnJzm2KNKKeMHXL8QLBcgNFs0XuI6g5rR1HSBTNhVSr1C1JOWF0eZYu6OMZ8inuLmQFtZUEUJiu7/kSjS8HaeTd8CgJH6qVPopmP9Pc13cJ9iDHxCAT7QiIwE04hdsAtknJ5ckgNi4o22xEjI1vd+ae+t8ltXcDvpfLgtibNDg3bsgwFwQ== X-YMail-OSG: ZqFLupQVM1lM3a618JvVI39FdauC.3C6AsfmK0J2FFFNEluFSlUq8hgjIhEqOeM K6P4k59nYyKFu0Dx9iP4vZ6lm_kA3Rrcuty_5U26M8n0ljjKcN_HzTj4Fj3.nPm973.eZitD5osD KeSDK0YbWgceZL00oxmXSMZsFoACWopNgR02_73fxHnSD0H9nXXBB1cGkG6u1g5pMDfLn7o.P_bd L2XBowN4H6S56Nsdp1hd3vQ.csPaldPhIOJ.fnkJDfxvMfmbBOphCpwQRb.ocrdryn9usNRYfbet pPQSKztbgV4CC4E.PbhqaYmbSJOZVkds4S1XfHgJz0EfhAgornFMJJIlcPilAdysGyr1ZLs3QnGB sL3h_5ELug9wcIU2y7auYaUI_JUhu0uaEDA4VR8gBRHTfsBMW38wLxIIEbc7CnCJMU1nyj1vIBLW _3QE6sX3WhvGZYFzct9On7DlZEGJemfTY_34q9zbGpNSRHWDEy4oD6SnTp7QLADNhF2C5LNVJLPX jACpJS1y4H4KyDGybAvw3IrkU8jmZFvPrgl6titYz16YwaqR1hj3KIPrLmQfXs6DGHSgtXrLpLRL wic1aOgdTqRLw8l52YwM7IKhikHxPHbNFrYMkcvPR1YQjbPz7MYbPx_23VqvCTb8HGLxu7U1jMCI BynLzlAMlS8Uqnkdc7hwAdqk1s.Wbe5iMLOnJw3V8qWFyBtFScchwJX2nHjG977Sf9Y4zx4Gl3bO AbsmztFM1Ss6dQvq0UJ5NFoCKG6oAQVqWQhQaRCsxTTkYDUv84rfRCnTSs08IHbXJfEsscMGsLyt uwJyDioi73jINNHZAXjnzm2V8N1tTAGewRGLTXRx39.iIC.FO1C4QrgkngLkbD2f9tEgOSC937CS fEgkzC.w9D18kP12Y3jrU6d.RZBINjbmU8Ghpo6Fqnj15akDYiytp5Zy2blJs6AasDtbytastF9M iNHxXitmZdT1BcBh2Ls9ezJ2M4ukdZ.DDNgN.kXxkKXE.Khh10d5dv1TuXvgCv.UcGQcmqkZSBJA XzFjjc6t9CXna1FHV.EVAglfh7vCy6ILWfDA_yQJwzYk025UO3V5dvoUMjarnTz5ng28rVOgZD1g pSedhhi4.sDeHjvSYO38gVELcfWx5wt6zYdqYdFoz0GxaFxWEpfU7t_qXYPUL1v6ftFSBavqQNu1 3Y7QlVx_bwTnaYrPHqyoMobzSNl_cWKnJufEZS66sHaZIL4GgahkAPArBdOFpHAt.7Wn.s00N2t3 5KGEc64BpFu0vRzXgUGJyA3At6ndxIy9foapOdjer..Ur0tbW4UbfcL0AzUEYaNkAAXmWSPMwDpS RgTUFDdom_urahAarlkd6qZZGP_JWK8kWWWGw0xuztB4s7PtWsUY9EiXhJR3ux50E2i3Z9kHM Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 13:22:39 +0000 Received: by smtp416.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 7517b721b477cf795e7d6b851379dbfd; Thu, 11 Jun 2020 13:22:36 +0000 (UTC) Date: Thu, 11 Jun 2020 15:22:34 +0200 From: Ergus To: Dmitry Gutov Cc: Juri Linkov , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Message-ID: <20200611132234.nbluayofcxh23cwg@ergus> References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 822 Received-SPF: pass client-ip=74.6.131.41; envelope-from=spacibba@aol.com; helo=sonic303-2.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 09:22:39 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:22:44 -0000 On Thu, Jun 11, 2020 at 02:23:06AM +0300, Dmitry Gutov wrote: >On 11.06.2020 02:08, Juri Linkov wrote: >>Or show vertical completions in the*Completions* buffer and use the >>current icomplete keys to navigate the*Completions* list from the minibuffer. > >I could be wrong (not having seen the result), but IMHO that's not >what the majority of icomplete-vertical users are expecting. They/us >expect something more like Ivy. > I agree with the expected (ivy like) experience, but I would prefer not to add too much complexity to icomplete. Ivy started as a simplified version of icomplete (< 800 lines) and it grow up to thousands of lines (>7000). So for the moment I think that vertical layout could be enough right? If the user wants ivy there is ivy (btw: maybe ivy should be in elpa but that's another topic). From MAILER-DAEMON Thu Jun 11 09:29:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNGc-0006VF-HL for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:29:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNGb-0006V8-Jh for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:29:13 -0400 Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]:39383) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjNGa-00022B-Pr for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:29:13 -0400 Received: by mail-oo1-xc34.google.com with SMTP id x17so1219249oog.6 for ; Thu, 11 Jun 2020 06:29:07 -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 :cc; bh=RpaoedyKGpGmt/Th9r8nWIxzRsivoDyN48WAIhMEuHs=; b=bKCn5B0Xqdus4b7kreI0y9g7N0Qe4VLLuCWbCcIWUvSyg3oyuXwaskHi3+BKLz+p4C ilbmor362zerxXuBizWFXAc0TnIIFv0xSjVwxIDCNqJvd7yWZxbqTYYM6QyMG18R/9IY XJ5lwhCSfNZf/mpam0F4o2tWBMIh1j9eBHb6osVCzPgZC41UNa3/05om7l6x1KpicJs8 ImwKRWroWpG8yX+SEG3BuAf/MfaH5Da2d89f7AdpFaPWr5r5h1tHpWiDd4h5SZeQaxxm aM/m9vfW87BcDDMUuhN0CkbrMjEMi54+133MZXrgbSABNhhiWtD2+sw7B6dr9J/QAHd3 zlaA== 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:cc; bh=RpaoedyKGpGmt/Th9r8nWIxzRsivoDyN48WAIhMEuHs=; b=QYtYl5gTZXAEA1zs5KbVllsKIB40ncP41tgWIKMglh4AUaVyFUyBTlbaz28LPWMFkU IF+ViJ/xSQ7q/Zf8PoRrxUukEColIAOStGyWgXSIspdF1T4Kpjve19q5+8ywn9rxyFCF Ixl3/Jb07KQODwuZ8aLj50St+QIbBGJnz7mb/tBwEpJ9DuSakSMSxqz6l8Qtl3/uHMe2 Z9GRXEEz/kBIUuBTt2DZnd4plaIhmfnkLuWkvV0xCcu+xHhYJTrNYcp1YSzJYueMJBbG +rGN+olN0n2LhI3QdFEaFnBNRWSz4L+t5BURoDaILOk9r+6uiuUZY9xuOKfz0pbDb+Nm tMrw== X-Gm-Message-State: AOAM531BN5UjVrutBlNk9wJ5xU4QJaA3uY68VycA6ISkfCroQ0uGV1yZ IpvjD1PtCuIy75b+jZ6vI0CrxaXjEy5nxRKSmao= X-Google-Smtp-Source: ABdhPJxXLOsoH1Gniq4Ehe3l7p/+n8EAU3fevM1zi+P73n8ZhZhz1Wqerov6RdTS/ymcX1EigAwFwOAupZsNXrMO3s4= X-Received: by 2002:a4a:d6c6:: with SMTP id j6mr6480607oot.26.1591882146591; Thu, 11 Jun 2020 06:29:06 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> In-Reply-To: <20200611132234.nbluayofcxh23cwg@ergus> From: Noam Postavsky Date: Thu, 11 Jun 2020 09:28:50 -0400 Message-ID: Subject: Re: vertical fido-mode To: Ergus Cc: Dmitry Gutov , Juri Linkov , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::c34; envelope-from=npostavs@gmail.com; helo=mail-oo1-xc34.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:29:13 -0000 On Thu, 11 Jun 2020 at 09:22, Ergus wrote: > (btw: maybe ivy should be in elpa but that's another topic). Looks like it already is in GNU ELPA: https://elpa.gnu.org/packages/ivy.html From MAILER-DAEMON Thu Jun 11 09:40:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNRw-0005M8-1d for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:40:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNRt-0005Gi-Qx for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:40:53 -0400 Received: from sonic317-26.consmr.mail.bf2.yahoo.com ([74.6.129.81]:41825) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjNRs-000636-DE for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:40:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591882850; bh=3dP9Sdz3wvlex6JWagPIG+dPV/Q04kDuUTNYsTXeIvk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=YoTKoay+YdVxCSjf5tWM/rn3O3xgLAP8Y1t9/lCXT/XunkX8AjUogiNj0wvx1XwlJjkvXWSnn3wDl43coR8+AHcw6rQXRdMVSBh0kRYdrYhBa1abHlxFjVL3fMCTtFq+PhopTaBaCKXBCl0keIED30hR5YtvHa9x1IW7iiJuklkX0TajSMlrO5Ei9MMu0P35juSFgZVWhTaHyOHoSqGBEuNlH9uRMR//8yshQieyPEbjgQO7QfQY8eYlB6WTH+3w8PZyymKUVv/DDdnnsnTij5WzMsbWUdkoTBbF6JhcEcZlw4l6ccaiAIulpAmv4cE1cn3qL0HvH2vapWgEhxyzaw== X-YMail-OSG: EP6TDFQVM1kfE3ibsM4fIlLWJnfuwqfCSA8LrwZzFnx7TzPzOJPQyOJh.wWUim9 iEwzSdZEAGPYSorcxr7PgFK_iQPZNxzMZgyzNsWPJKxqd6EXqXLYWXiYevtE0ig99_sAJWdVdN5Z nITFj9VBwNkNPKO5NnKnqGZMg9Ny_m5LaYHaKoBcCGv4mtFhH.Ld2DmiM_Z_deOMWrBz8bmCGp8P C270XRSlYUlWtt1jHH34KcG14GGB2GHKm6C_22FnFHfIkgRJl55nHxgpK7w55UvchcQ0jDyyQHxl biWNuNvz1IbJwaeg5.Kx1_KSvlPT3bZJwi2EA9jmyZZ1R8BJfzpl.9_xCnACRant9LV2cb8rQty4 fJ1qN_1LvYqcu1WahklJPRC8xYXjC6tCDhASeOM6yyafbC04ITmqVcICZlF2tIoQEUz58kGt3CNa AGD7ZPhn5OEsOnKVd87sycioFlvFKt2_E5u7gISWBnjNjM3DfpEemKNiJfudQMuUppbUDHe5Q4_q KKa4_bP5oZtSEW6k65Dc5E12yDMnLHt_5F0MjdWFEVUvN8ACG7AitMeI5kzRUp2m_utA1sdT_i2w Pu8LhzJcEI_0I3Kl4XzkCdwzQxeHeEUSenMqS4z3DSpv3QGIAtU6pVyj2TYfwxmaU42CmqIlPzbT FmIxCqNKmQqRuTAL8XieAid47_0F1.JN7g2zVk9uv8EdKXOrItjWuEAkciEyMMwqHyvmTkZjJRFU CJ4k7cGuM2CwgQlsXEuNVZab8ek0L_7m7RD7AmLAyUgrgxdlyymvq1OAfttmTTuB2cfhGc5z94I0 Kj.lH7KXYZ84O.g_5NSyrysQ__rFXRgG1GxEFZSjhfMrMX8sS.SD6aZ4PKoCuDfsVZGV2Z4arHIS 6AqiRCxg_nC9LmHwFB5HE2_7EgnFkcUTczdE97sl58kmxnQAG26MJKHk_qBK6vkWiFLGoikqjvYv 0z_rHV6x1c2VgV7b2YlKJ_rDEQwxRqXHIJ6gb5m.W.b_7XS.Sn5QOCwRxKTlTAs2hSjbYvDHbRIS cwqhSQjPgSqXk4_1WJyF3V9Zn66yam0di_K5FA0766kTQQ.VkpFj__DXuIgy0L3awBkvNvfUaDyF mkbdV5b5MOLlN5IGLB6qUOCDjrPVWhxUkiotfxmsEu2okRtwyYPgx_87LtUjI2FR4IkVe5YEtkVL hkH4rphQQwdhs.OQzSV93x.8sigrmSONLYqoyv3Eiqw1gxfoao3v3cz1ANN.llP_oC_Vzft07A69 _6_.QB3e3egf4OF2ytNbPiSRHrEh3k1M0w3tgl8kTIUi9FPWnvgDNxAoE3sGpKz5qPwIf4.NpVVh eUKd6aX_KwCL4iQYHp34qsV2SS2M2FFKItnpHv9Gd2a52HdIan2CD3oRYlkfKfu36p9zQNnjmJ5E PtnKRFBV6cJAGasxeWQRMtcwxG1cTfjiCyDU- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 13:40:50 +0000 Received: by smtp420.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 0e0b6f05fe409424f841e7bb745a6ce9; Thu, 11 Jun 2020 13:40:44 +0000 (UTC) Date: Thu, 11 Jun 2020 15:40:42 +0200 From: Ergus To: Noam Postavsky Cc: Juri Linkov , "emacs-devel@gnu.org" , "monnier@iro.umontreal.ca" , Dmitry Gutov Subject: Re: vertical fido-mode Message-ID: <20200611134042.wjokdvm2dx3us2dn@ergus> References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 443 Received-SPF: pass client-ip=74.6.129.81; envelope-from=spacibba@aol.com; helo=sonic317-26.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 09:03:46 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:40:54 -0000 On Thu, Jun 11, 2020 at 09:28:50AM -0400, Noam Postavsky wrote: >On Thu, 11 Jun 2020 at 09:22, Ergus wrote: > >> (btw: maybe ivy should be in elpa but that's another topic). > >Looks like it already is in GNU ELPA: https://elpa.gnu.org/packages/ivy.html > Right, sorry. I thought it was in melpa. Better then. If we want some of the ivy functionalities in icomplete should we contact the ivy maintainer for contribution? From MAILER-DAEMON Thu Jun 11 09:53:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNeJ-0008NS-Al for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 09:53:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49884) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNeI-0008NJ-6G for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:53:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:35150) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNeG-0000b8-KO for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:53:41 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5838D100419; Thu, 11 Jun 2020 09:53:38 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 9B4B610033A; Thu, 11 Jun 2020 09:53:36 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591883616; bh=jqYwkb9KkBWoiE+zzNlOMy/xUeFqKiA7BIOw+Fvv624=; h=From:To:Subject:References:Date:In-Reply-To:From; b=kkA078gbKPmP+Wr33J4TBoZ7lq3nloCuitaSeeUjuGoQqJag9oPHAvvTFLODgCFz+ quDBwxj6m4bwy7uRvsmJZmwXfOtb3GVInUTkCQB2pwOTyAXV9bMDwWpDyGlhFsORF0 kqQJ7EeXRxdgtAqTdslAPysanXcG8jsLI7Hj7ancAJBxC7hFaCigscQOC6OOqocxfZ WegJsK3HrP9OY1pw2kMfv/HiA7yuWpqK8zqA+xBuKEPVDnbz+BMIDE9gQSa/T/z+Hc qJUJGzbhKsjaReympQ9kOv4HRrdy/8OPetMUkakSXoZ5hUkOFF8/tuesVk40v0tk/S sxcJ8N0PaTiSg== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 746B2120648; Thu, 11 Jun 2020 09:53:36 -0400 (EDT) From: Stefan Monnier To: Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. Message-ID: References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> <871rmmwsy5.fsf@gnu.org> <87pna6vza9.fsf@gnu.org> Date: Thu, 11 Jun 2020 09:53:35 -0400 In-Reply-To: <87pna6vza9.fsf@gnu.org> (Tassilo Horn's message of "Thu, 11 Jun 2020 09:26:22 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.090 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 09:53:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:53:42 -0000 > How about adding a defcustom `bug-reference-guess-url-format-functions' Sounds good. Stefan From MAILER-DAEMON Thu Jun 11 10:07:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNry-0002gP-J1 for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 10:07:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNrw-0002g6-Nn for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:07:48 -0400 Received: from sonic316-11.consmr.mail.bf2.yahoo.com ([74.6.130.121]:33245) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjNrt-00048V-Rm for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:07:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1591884464; bh=w/hzMQC1rgtID54381YRudoqkJxqd7BHwuQKAqq/pik=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=LYJPcpFuw4HPWV5YfceH71mT+SB0RdDNgFu/lqYu1Fzg1bVmKGius7V1Reh3LpTYJwo9VcNscjPQaPWq/4Ogr6uvh4VeQz1683rpPqdWMf042LfCu+kbBHfWJJAtdXB5z2TW7GneJ9Z/8WvDhHMISlJJseJ9mSqVwQ+oOSpbc5u8W7nUB5AvBHl5V0kmsAn172dUd7FHFkeOlSrGZ4tync2KqTJQUttEmww02zP2jAhv2zPRJnu0Exz44w1Upjv6hqe2+b0D4L51e0dEZ5ZENBhzkq0cTMWv1C+zJPg8Kc+0y+RUs3wAzSSVGus5RHluWJIGFgjknrksyC9MsmYVIA== X-YMail-OSG: k0oksDsVM1lNoNb.UupapcjH_SMooLyynuJUzaMKB8ielT2RgjjW.0inbFp1nIM 3H7GQ1d2d2mA.czxzJZ24hEb.VAzOXF0GHoj.zKqBN9gPwwyZxsneWpwlyXCQpesGCsC3Kys1vJW tCeQx3jCUOUYQgpfoGFNsFjnY570VRQGq18VezafLjevUgYyBJJuB3PAUpr658aziDVcfnlC8rc2 YvwRbGQRM.8v7oiqlP1evDJzyVefCL3GHqPYs4JED9ZEnch0r5OD9B_yDkmczWHkygudotSAU7KK D3V1j32dIZu4N_24XZhe.CbcUwep1pKZI01OL9ZaEeyqsZaXRcbY6RiuqMXpEGF6JIfActmwWH3Y a.UzliI3eXXAE1_asvFSWoPGz0wU_2WjkKDwR4lqYyJB2CJDLv45gVNVvAPZRhO5JfdfcfPELM4j j1WKkO9169wXWg7KJfy6dch05yoEWRwKQlsTmcBNFrnJaDUrSX9Zm.C5mOeek_9qNqwEPIJB1fr7 bcHEaRm28TtO2tKHnMoB7hZnFcPBAa7AUAhMQGE1QaEzGY0UBn4WWGST3UvmABQP59ez7_rqZx0D XefgjGXdx33mfC.fj3QFhVMyV8bW65qF8pqW9VIcGbjN3Wug7vzq08REnRgfHcgQ0xQvIvFtJktx EVih7DSwoDDeQdVQ.dvUVSeRs7DnP744gtdEiw84j1upNDr0PGV6ih8FKRa9IhK3VqxVI2Slbdzc DnOydT7lcSnZzrH.j0UORgZL7Ywz9sor4OAgn2k4_LyPVRfvy9mbU0wAfs1NnPFh97EEKJWHncDL EK4F3BExCrwcc_q8.GKzX08JKtGksQtr.UJL1Ey2p8N7I5aOuJZHVANtz7_zvl1MkCAJl5aSdf8q Bpu5odeqXNQzMF_GxkxQNwPGe63eOvTNNO3lZXSmrZljFNlYSYULWefXFlPRED499y2Z3RmLZyMB G2bP_Gh96jtWY0ACYDibRsqLFm0ctE0vFi2zD63dls_vKvBIUYeuDqxYld47Q_Aknl3BQXWb74M6 wq1OpW7C.AdgVIpV0ucBRyU9ShjDv9vALjnjYMyc6J12eZg11nx1I9guEZA9Xpi6isUHA5NwnVef 7Wr1T9quHvBSGkMkeUeGIQslVihp.KJTcYM2YEi4vZ876JxY.ei36KM84Wi9QUwEwwRh6fBdlYxA OKHsYh7e6iyudlkw2x34iBKxHkvG4aBmprUji.DsqUU8WWuJZ_6LLAa..USGkSzjRfBG.aCvxlj2 R20BO6PY0FxFXQqUVfo2V6nXj2Qprt1Ay63Ff8Gf0KUDDQv7VnbtKExyqsItJVbOYdbG9RybyJmH K1.FQHHE0YI88aq_HELV3uS.TCywtp13c4U4VhoEfe1huR5o.WM7iJTdS2FklY0yvAEWWEy1E2s4 Ww4mpawdbMB4LaDEkkK0bV0mOzNxP3S9dnSZK Received: from sonic.gate.mail.ne1.yahoo.com by sonic316.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Jun 2020 14:07:44 +0000 Received: by smtp413.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 0284bded72db7bd38a95f8f0a9443553; Thu, 11 Jun 2020 14:07:39 +0000 (UTC) Date: Thu, 11 Jun 2020 16:07:37 +0200 From: Ergus To: Omar =?utf-8?Q?Antol=C3=ADn?= Camarena Cc: Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , emacs-devel@gnu.org Subject: Re: vertical fido-mode Message-ID: <20200611140737.meujpruhz2ew4643@ergus> References: <87a71apgk2.fsf@penguin> <20200611130341.zwxcpwtwaxrq2qwm@ergus> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16072 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.6) Content-Length: 2062 Received-SPF: pass client-ip=74.6.130.121; envelope-from=spacibba@aol.com; helo=sonic316-11.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 10:07:45 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 14:07:49 -0000 On Thu, Jun 11, 2020 at 08:44:47AM -0500, Omar Antol�n Camarena wrote: >Yes, I'd be happy to make the changes. What does that look like >logistically? Sending patches to this mailing list asking for review? >(Sorry, I know this must be explained somewhere but I haven't done much >research about how to contribute to Emacs yet.) > Once you have the copyright Eli will give you write access to the main repo if you have a contribution to add. Usually you create a feature/something branch where you add your changes. Once the big guys (Eli, Stefan, Basil) approves/correct the changes; you merge your branch into the master branch. You could also send patches to the mailing list, but you'll need a copyright to be accepted, but they can be reviewed. Usually a completed feature requires the implementation, some lines in the NEWS file and some lines in the manual... but don't worry the guys will help you in the process. In the mean time I recommend you to create an emacs fork somewhere else to start working if you prefer (because the copyright sometimes last for some days/weeks). >I don't have a copyright assignment yet, but some kind folks are educating >me about how to procure it over at the icomplete-vertical repo. > >https://github.com/oantolin/icomplete-vertical/issues/14 > Good, just fill the form, you will receive an email with a document to sign, scan and resend and in some days you will receive the copyright. >As an aside, have you tried non-fido icomplete? There is one simple change >that makes it infinitely better in my opinion: fido forces a >completion-style choice on you, icomplete gives you freedom to choose for >yourself! (I shouldn't say so because I'm the author but I love the >orderless completion-style: https://github.com/oantolin/orderless.) Fido is actually a "simple package". It is almost a config with some custom defaults for icomplete The idea behind fido was to create a fully functional ido substitutor based on icomplete so Joao tried to reproduce ido's behavior as much as possible.. Welcome on board! From MAILER-DAEMON Thu Jun 11 10:10:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjNuC-0004Vf-VO for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 10:10:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNuA-0004Tg-Qz for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:10:06 -0400 Received: from ciao.gmane.io ([159.69.161.202]:33922) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNu9-0004WK-Oh for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:10:06 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jjNu6-0007VJ-Rf for emacs-devel@gnu.org; Thu, 11 Jun 2020 16:10:02 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org To: emacs-devel@gnu.org From: Ted Zlatanov Subject: questions about correct reveal-mode usage to hide passwords Date: Thu, 11 Jun 2020 14:09:55 +0000 Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos Message-ID: Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:L4ciHUMACEtt9FurnfURPT2kRh4= X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 10:10:03 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 14:10:07 -0000 Hello, Following up on some old threads, I am trying to convert `authinfo-mode' (which Lars wrote) into a proper minor mode that can be used anywhere. I named the new minor mode `auth-source-reveal-mode' because in the Emacs scope, it will primarily live in auth-source.el and be used for visually hiding passwords in netrc/authinfo/JSON files. I am including the change below, and it's also in the branch scratch/tzz/auth-source-reveal-mode I ran into two problems with converting `authinfo-mode': * it doesn't update when the buffer is changed, but rather does one initial scan to install the overlays and then turns on `reveal-mode'. So further editing doesn't update, e.g. "password xyz" edited to "pass xyz" doesn't remove the hiding on xyz. I tried to add after-change functions but they don't seem to work well. Managing the overlays is a bit of a chore. It feels like reveal-mode should have a more automatic way of tracking this but I couldn't find it. I would appreciate some help there. * it doesn't have JSON support, so I'll need to add that. Re-parsing the entire buffer is too expensive. Is there a way to scan a smaller region using the built-in JSON parser? Or should I drop down to regular expressions to match "password": "xyz"? Currently that's a (debug) TODO and not as important as the above. (While researching this, I compared notes with the external packages hidepw-mode and password-mode. One[1] uses font-lock mode to adapt to change dynamically, which works well for live editing, but you can't see the password when you're editing it. The other[2] also doesn't seem to handle editing changes.) [1] https://github.com/jekor/hidepw/blob/master/hidepw.el [2] https://github.com/juergenhoetzel/password-mode/blob/master/password-mode.el Thanks! Ted -------------------------------------------------------------------- ;;; Tiny minor mode for editing .netrc/.authinfo modes (that basically ;;; just hides passwords). (defcustom auth-source-reveal-regex "password" "Regexp matching tokens or JSON keys in .authinfo/.netrc/JSON files. The text following the tokens or under the JSON keys will be hidden." :type 'regexp :version "27.1") (defcustom auth-source-reveal-json-modes '(json-mode js-mode js2-mode rjsx-mode) "List of symbols for modes that should use JSON parsing logic." :type 'list :version "27.1") (defun auth-source-reveal--propertize (start end hide) (save-excursion (goto-char start) (if (member major-mode auth-source-reveal-json-modes) ;; JSON modes (debug) ;; non-JSON modes (save-restriction (narrow-to-region (min (point-at-bol) start) (max (point-at-eol) end)) (cl-dolist (o (overlays-in (point-min) (point-max))) (when (overlay-get o 'display) (delete-overlay o))) (while (re-search-forward (format "\\(\\s-\\|^\\)\\(%s\\)\\s-+" auth-source-reveal-regex) nil t) (when (auth-source-netrc-looking-at-token) (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) (auth-source-reveal--display overlay hide) (overlay-put overlay 'reveal-toggle-invisible #'auth-source-reveal--display)))))))) (defun auth-source-reveal--display (overlay hide) (if hide (overlay-put overlay 'display ;; Make a string of * of the same size as the original (propertize (make-string 6 ?*) 'face 'warning)) (overlay-put overlay 'display nil))) (defun auth-source-reveal-after-change-function (start stop n) (auth-source-reveal--propertize start stop auth-source-reveal-mode)) ;; (progn ;; (setq auth-source-reveal-json-modes '(emacs-lisp-mode lisp-interaction-mode)) ;; (auth-source-reveal-mode t)) ;; (auth-source-reveal-mode -1) ;;;###autoload (define-minor-mode auth-source-reveal-mode "Toggle password hiding for auth-source files using `reveal-mode'. If called interactively, enable auth-source-reveal mode if ARG is positive, and disable it if ARG is zero or negative. If called from Lisp, also enable the mode if ARG is omitted or nil, and toggle it if ARG is toggle; disable the mode otherwise. When auth-source-reveal mode is enabled, password will be hidden using an overlay. See `auth-source-password-hide-regex' for the regex matching the tokens and keys associated with passwords." ;; The initial value. :init-value nil ;; The indicator for the mode line. :lighter " asr" :group 'auth-source (auth-source-do-trivia "Setting auth-source-reveal-mode to %S" auth-source-reveal-mode) (if auth-source-reveal-mode (add-hook 'after-change-functions #'auth-source-reveal-after-change-function nil t) (remove-hook 'after-change-functions #'auth-source-reveal-after-change-function t)) (auth-source-reveal--propertize (point-min) (point-max) auth-source-reveal-mode) (reveal-mode (if auth-source-reveal-mode 1 -1))) From MAILER-DAEMON Thu Jun 11 10:21:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjO5c-0001Kq-1E for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 10:21:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjO5b-0001Ki-5a for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:21:55 -0400 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]:43733) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjO5a-0007Li-Cf for emacs-devel@gnu.org; Thu, 11 Jun 2020 10:21:54 -0400 Received: by mail-qk1-x732.google.com with SMTP id v79so5671023qkb.10 for ; Thu, 11 Jun 2020 07:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=GTnS+fKgUG//J2h9P8jDikl0Rg8Kw4wk/TfE/seTSWs=; b=VJ3R45+zsDMyRjVxIgtT/AAeivYshmKXR4S4cgpFCOHt7DOHifXcHdjQCqo7UNe3aR OIsP9aIpPwP0lZ2JETUB+6pBnLchVXoRkyCtKlkAc1bmm962fUHNBtGxE5sdQymLZ7uQ HVrvrYrd+N2wtqjx3IVCIZjPzTpnhp/WGxlO15vuiTDFhJTbxIdrTDPcjKcJQ6g44aAG ENVIxzMWidO5Bs87Y4mlfM7rK6+xS71hiepJeEilyZFgHzOlV/7qGULI+nrOcHVbpXKS ZdniUSCZmPaCFPPAeoigyMMJ+ylJV86ousZURRvNWnFlODV+d21Z7ALA6WsZRdPea+rg HTbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=GTnS+fKgUG//J2h9P8jDikl0Rg8Kw4wk/TfE/seTSWs=; b=LmUNgmVv6/MjbYKdqlD+u5I/J+wGGt87XG5hTqy4sjB7+UnSBzsc5qGW+/FI8+G94D TBPeGy9Q2yCAhgc5KHWww+lMSPmWaT9GB+KLU++l3icK9ozVsXEK64OV4HdKp/xuOTi9 TSrbxuInch6lMGpEzIhuAUmqYNnOHeJlVP4g+YF0TE9oPgT++W1lJCDkBR97/UozeGhQ BrXFx/diqkCqalRefUUYkWZqmKElzSZrdnbDOWLRr9cfOW0c3yEFBCNBU1m/WHuWwz4t dKaB4gp/8t8HuWvojw7j0imfsK6696/BU57Okp8We/mIBIyKQfEB/xDFWDA8tmVuTWrW NZFg== X-Gm-Message-State: AOAM533chV9qXRqz7uj021Mlz4S3r2tfza7fj5uetpPnwsE+0fCYE10L oO8rwKVS3CGba7jjcnY7JZRN64zd X-Google-Smtp-Source: ABdhPJwmfd4+xMguEQGHkg1FspOErrIZmjkVOHvP0P4wwAB3zm0oeCCOg0vsxwrY4i1bMXkpGI0c/w== X-Received: by 2002:a05:620a:20d6:: with SMTP id f22mr8020910qka.294.1591885307438; Thu, 11 Jun 2020 07:21:47 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:7d16:396:5437:aae1? ([2601:184:4180:66e7:7d16:396:5437:aae1]) by smtp.googlemail.com with ESMTPSA id m94sm2559546qtd.29.2020.06.11.07.21.46 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 11 Jun 2020 07:21:46 -0700 (PDT) Subject: Re: questions about correct reveal-mode usage to hide passwords To: emacs-devel@gnu.org References: From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Thu, 11 Jun 2020 10:21:45 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::732; envelope-from=cpitclaudel@gmail.com; helo=mail-qk1-x732.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 14:21:55 -0000 On 11/06/2020 10.09, Ted Zlatanov wrote: > One[1] uses font-lock mode to adapt to > change dynamically, which works well for live editing, but you can't see > the password when you're editing it. font-lock is the perfect way to implement this, and it should be easy to tweak it to reveal passwords at point. Look at how prettify-symbols-mode works for inspiration (it uses fontlock and it removes the font-locking when prettify-symbols-unprettify-at-point is set) From MAILER-DAEMON Thu Jun 11 10:49:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjOWM-0007mr-7k for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 10:49:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjNW0-0002bD-Gw for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:45:08 -0400 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]:34217) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjNVz-0006vb-LI for emacs-devel@gnu.org; Thu, 11 Jun 2020 09:45:08 -0400 Received: by mail-qt1-x82a.google.com with SMTP id u17so4568281qtq.1 for ; Thu, 11 Jun 2020 06:45:00 -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 :cc; bh=aV0/NcPIPb0VbvQ0cD//kvOPJ/jA5ufPnbncqreZotQ=; b=s3olT4IXCNRf6bnAMPCtJelx1zPd/EC/Bd19yJOi6BKgK1J1qQ8grBViYG+uPDSIm1 bCpR+SWMwpV/purJsmkglfICE8YTPf6GFne4g5Oe7DgvpYS5nLAjis8Gb0+Bjd1b3uub YOAjFc/AjAYgTqQkuKiOFn9nSCf5AxArJ3gN7b4kaIFDVNtgDgmKMK88k9Il4jU4hTLW bp8OmcaXm30v2CNHtL0xE9XjqzqU85dELx+XN6J0RwIQcfMdGEAZQEz44ok98E6YNDE2 kBKla1pyZ7RPtXbzX5xE5uJfDBIBSTQ9cw+vNMW6COurxu1tsuB5GOlnUEfPgMXI4URk ludQ== 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:cc; bh=aV0/NcPIPb0VbvQ0cD//kvOPJ/jA5ufPnbncqreZotQ=; b=Q2KkcKmBHu0WnVFWj5KAvMoWi3KvdlFXl98YertSBndPbcvugqUSf6E4Boyw7sdGrj 4lBnRSu4N8lTNCuHP13lUTFABq540c40k8RXevH2K0gO+oBJ6z/diizmpyFuXqlD5qD7 tvslBHEANB94TX1iFzmKYAnNqotFp9mjLOL1jDLGnz+ZdJ9IxWU5xbfkVz3xdy4eJrss AI1RQnPGr/TMeTcJGpYfaqCV107u281P2imBru99sXvkFzVsHQ/U36suJ29IBpki1RtD rO8ytyolq1/X1JwVXywIYXYhsdCVpO4Jf2+eybQhRLlw+NFQB5iupRB/S0M8PAZximWp eHGA== X-Gm-Message-State: AOAM531DEaffCtj95CQN10g0iO2b4kizIljWdPU3MrewPW7ePuzqdAMA Ejh4MXGP0XcEJZ5ixTndDGNAqolN5IVWDdO0cY8= X-Google-Smtp-Source: ABdhPJyCwBsGZwbAm1z4eZSAOMzeL/aoic7ydaS8dDWolLwb162luEB/yivrWWxdasd6zB0yzs0hY4l3M6x1iaNQC+8= X-Received: by 2002:ac8:36ec:: with SMTP id b41mr8652663qtc.53.1591883099543; Thu, 11 Jun 2020 06:44:59 -0700 (PDT) MIME-Version: 1.0 References: <87a71apgk2.fsf@penguin> <20200611130341.zwxcpwtwaxrq2qwm@ergus> In-Reply-To: <20200611130341.zwxcpwtwaxrq2qwm@ergus> From: =?UTF-8?Q?Omar_Antol=C3=ADn_Camarena?= Date: Thu, 11 Jun 2020 08:44:47 -0500 Message-ID: Subject: Re: vertical fido-mode To: Ergus Cc: =?UTF-8?Q?Omar_Antol=C3=ADn_Camarena?= , emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="000000000000ac1eb805a7cf2ac8" Received-SPF: pass client-ip=2607:f8b0:4864:20::82a; envelope-from=omar.antolin@gmail.com; helo=mail-qt1-x82a.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2020 10:49:32 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 13:45:08 -0000 --000000000000ac1eb805a7cf2ac8 Content-Type: text/plain; charset="UTF-8" Yes, I'd be happy to make the changes. What does that look like logistically? Sending patches to this mailing list asking for review? (Sorry, I know this must be explained somewhere but I haven't done much research about how to contribute to Emacs yet.) I don't have a copyright assignment yet, but some kind folks are educating me about how to procure it over at the icomplete-vertical repo. https://github.com/oantolin/icomplete-vertical/issues/14 As an aside, have you tried non-fido icomplete? There is one simple change that makes it infinitely better in my opinion: fido forces a completion-style choice on you, icomplete gives you freedom to choose for yourself! (I shouldn't say so because I'm the author but I love the orderless completion-style: https://github.com/oantolin/orderless.) --000000000000ac1eb805a7cf2ac8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Yes, I'd be happy to make=C2=A0the changes. What does= that look like logistically? Sending patches to this mailing list asking f= or review? (Sorry, I know this must be explained somewhere but I haven'= t done much research about how to contribute to Emacs yet.)

I don't have a copyright assignment yet, = but some kind folks are educating me about how to procure it over at the ic= omplete-vertical repo.

<= a href=3D"https://github.com/oantolin/icomplete-vertical/issues/14">https:/= /github.com/oantolin/icomplete-vertical/issues/14

As an aside, have you tried non-fido icomplet= e? There is one simple change that makes it infinitely better in my opinion= : fido forces a completion-style choice on you, icomplete gives you freedom= to choose for yourself! (I shouldn't say so because I'm the author= but I love the orderless completion-style: https://github.com/oantolin/orderless.)
--000000000000ac1eb805a7cf2ac8-- From MAILER-DAEMON Thu Jun 11 11:53:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjPVw-0007Rl-EU for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 11:53:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40552) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPVt-0007N5-Cv for emacs-devel@gnu.org; Thu, 11 Jun 2020 11:53:09 -0400 Received: from mail-qv1-xf2b.google.com ([2607:f8b0:4864:20::f2b]:42985) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjPVr-0006Em-FB for emacs-devel@gnu.org; Thu, 11 Jun 2020 11:53:09 -0400 Received: by mail-qv1-xf2b.google.com with SMTP id p15so2838757qvr.9 for ; Thu, 11 Jun 2020 08:53:01 -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 :cc; bh=Es/yPm2URMogI2xBjVfFyoek2wTe4trU9t26ffth02Q=; b=BAIMGjBTh+LfcSQjl7IFR0HCuPH+5OKI2NvO9+2wsJC1eBhwZNGaOpZI4Y9o81CVqg gE+UjISR+fzKqioJ22ep6uQCVw+Ry+r+Q3sODK3F2SHCONZN6rSunK1URWcFm3RVKHfs 1bTp4oE1jWGMmRi1OI711qblSJh4n5p8KZr+23YIuQLLPj8T6RrROyqbV4Yofh1v9SHk m0wKO2H3L4ocxPssHtgbFnfdZTJEgVg6Fqx0n19ASk1KpLauCvqA7ucR6RUPbuMmDqXG b4X8PhGxRwcsQplKLUTkW5WNz8UUryYPk8xKbFkbvUqee4sHy7+umRXZUJCGXrIClJmt odyw== 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:cc; bh=Es/yPm2URMogI2xBjVfFyoek2wTe4trU9t26ffth02Q=; b=OmnjmLGe3v+tOaGVL6N92nT1ch22Ivs3GVA4eprT2yDspsVULwghcBarEt5Gw9iHcB WA+Pgiit+1OsVOuD2AW7TEYIARFfDYZkuFopEOvk0gryZ4A74hRZXZ2hVmaZuhYGMw49 iySrfVCUN4CQIf4+7LDrF39JK2KzNTqrhrXy5WTfueX+hIyTuUTWHl9wVpSySD6CO82C +Hkzxi4wPITSHa2co3V1nIV3Z/nVt9pRad3fylmvPh9R6jPnx/9LkNacPgwtL9AhCsuX OUkTA151+2hhY8W+NQV0tAFd1Pv66y3g8nOIvszOv9rPdOyjIlqeqRNXENW1VujICy6O OJYg== X-Gm-Message-State: AOAM5312OFBFT71M2Iz1R4PtVwBgLHbsFR+wYonW8LtDa0S1a+w8ZZIt 1kz5xdfzC+GYIpnXSiR3SkEyVaadJChW+G7RWNQ= X-Google-Smtp-Source: ABdhPJx9ffl+PXLyhvSxIQG6JZ2XOUdsEPa0Lhsu5qCVdt8bQtBh1LWeE/4BQR4SbhIPKgSTM8yNKXOJySHvHKawaYo= X-Received: by 2002:a05:6214:11a1:: with SMTP id u1mr8461317qvv.91.1591890780525; Thu, 11 Jun 2020 08:53:00 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <20200611134042.wjokdvm2dx3us2dn@ergus> <871rmlfvr0.fsf@protesilaos.com> In-Reply-To: <871rmlfvr0.fsf@protesilaos.com> From: =?UTF-8?Q?Omar_Antol=C3=ADn_Camarena?= Date: Thu, 11 Jun 2020 10:52:49 -0500 Message-ID: Subject: Re: vertical fido-mode To: Protesilaos Stavrou Cc: Ergus , Noam Postavsky , Juri Linkov , "emacs-devel@gnu.org" , "monnier@iro.umontreal.ca" , Dmitry Gutov Content-Type: multipart/alternative; boundary="0000000000007e999e05a7d0f4f2" Received-SPF: pass client-ip=2607:f8b0:4864:20::f2b; envelope-from=omar.antolin@gmail.com; helo=mail-qv1-xf2b.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_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 15:53:09 -0000 --0000000000007e999e05a7d0f4f2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I just want to add that there is nothing icomplete-specific in either orderless or embark. Indeed, they can both be used with the default minibuffer completion or even with 3rd party completion UIs such as Selectrum. On Thu, Jun 11, 2020 at 10:49 AM Protesilaos Stavrou wrote: > Ergus [2020-06-11, 15:40 +0200]: > > > If we want some of the ivy functionalities in icomplete should we conta= ct > > the ivy maintainer for contribution? > > For the sake of completeness, Omar Antol=C3=ADn Camarena already develops > packages that extend Icomplete in ways that make it more Ivy-like. > > * 'orderless' pattern matching :: Completion style that offers > out-of-order matches, while also supporting multiple methods (regexp, > flex, string, initials).[0] > > * 'embark' contextual custom actions :: Minibuffer commands that act on > the current candidate or the entire list of candidates. These are > implemented as keymaps.[1] > > [0]: https://github.com/oantolin/orderless > [1]: https://github.com/oantolin/embark > > -- > Protesilaos Stavrou > protesilaos.com > --=20 Omar Antol=C3=ADn Camarena --0000000000007e999e05a7d0f4f2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I just want to add that there is nothing icomplete-specifi= c in either orderless or embark. Indeed, they can both be used with the def= ault minibuffer completion or even with 3rd party completion UIs such as Se= lectrum.

On Thu, Jun 11, 2020 at 10:49 AM Protesilaos Stavrou <public@protesilaos.com> wrote:
Ergus <spacibba@aol.com> [2020-0= 6-11, 15:40 +0200]:

> If we want some of the ivy functionalities in icomplete should we cont= act
> the ivy maintainer for contribution?

For the sake of completeness, Omar Antol=C3=ADn Camarena already develops packages that extend Icomplete in ways that make it more Ivy-like.

* 'orderless' pattern matching :: Completion style that offers
=C2=A0 out-of-order matches, while also supporting multiple methods (regexp= ,
=C2=A0 flex, string, initials).[0]

* 'embark' contextual custom actions :: Minibuffer commands that ac= t on
=C2=A0 the current candidate or the entire list of candidates.=C2=A0 These = are
=C2=A0 implemented as keymaps.[1]

[0]: https://github.com/oantolin/orderless
[1]: https://github.com/oantolin/embark

--
Protesilaos Stavrou
pro= tesilaos.com


--
Omar Antol=C3=ADn Camarena
--0000000000007e999e05a7d0f4f2-- From MAILER-DAEMON Thu Jun 11 12:08:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjPkV-0003bk-DY for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 12:08:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48308) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPkT-0003Xd-Tt for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:08:14 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:55227) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjPkR-00023i-NV for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:08:13 -0400 Received: by mail-wm1-x32f.google.com with SMTP id g10so5455891wmh.4 for ; Thu, 11 Jun 2020 09:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=XE6vQ46IaBCYXL+8F+/82Nr1KOVoHLBUqkAo8orrxIE=; b=yA+YcX5f35gZXVy6CM58lf3IsEAir8C+msDLENg6vbVB6yQIM3S/lDxqVh829VmNMD NHW3Jvl2R9ToE0/jEAlDXRSmSwFdUoCOgHgv9o3u8BJ468LDwytz/notcWsD8Mo14Jqo 8lEnOTozfhGBLpZn49dwvC0a5+SdjMnOx4by60tqhSRPM5Sdj7IMU/r2kdH+5lqcSVee /YbD3jZSHPIRtDhHCQJQK6NYqNwT1qS7hgHtUEvOUmv7oAWLSSWjmKmYJ4ZkFzrmp8aG N2+mIUrOrxS2eH3nOhxppuzwi3QyATF/RYHOlMW8LaMkg22OvoJjM06lIvvtFdVOEQOq DNXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=XE6vQ46IaBCYXL+8F+/82Nr1KOVoHLBUqkAo8orrxIE=; b=oY3qNIz4lXkEc5n+qJy6xpCWTbS+ojQfaodYg5m9ElneSFIe2Zj/BxGJFhX8KnyHWx NL9SPRJOUbvjKpVzMbAtEBOa5RZtGfQDL0wSY0Gkn1VmfPXAGsgI/9aPU7l6iTotKklx yTApOaJe7/LQLsoDthqONCCiMGlHnOv+5Q5UlxERLUshjVC3liSj+y2XfbtE2UWIb6+b VrYQ0xKZVU6E2c2uYQWdeLRYON32pQ1PMshiCKp3JU8IgnuCEEak49oK9TbUg4vBVvdY z8sDT7EdO/xzvb84zBoa9ZMMUgWP3QrRzGqcL6SEyRk7m5YqiVOrzleN1Jqv68305GD9 K7tA== X-Gm-Message-State: AOAM5321J5XU+ZEEd2dWcGYDLu/6WdonVzdA6FJl8zYvCYutTZm8Ydz4 ujy4dRWBZaqQdzcSWnJRBrx9aQ== X-Google-Smtp-Source: ABdhPJzJCDShSsOy7/vJNVgbDixfkR79rgB0qLip7KqqtdRmsXnTemwRqTHDTMcVCeq/zhbBs2fCsQ== X-Received: by 2002:a7b:c0c8:: with SMTP id s8mr9255273wmh.134.1591891688431; Thu, 11 Jun 2020 09:08:08 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id y37sm6284391wrd.55.2020.06.11.09.08.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 09:08:07 -0700 (PDT) From: "Basil L. Contovounesios" To: Richard Stallman Cc: emacs-devel@gnu.org Subject: Re: Support for multiple batteries References: Date: Thu, 11 Jun 2020 17:08:05 +0100 In-Reply-To: (Richard Stallman's message of "Wed, 26 Feb 2020 22:38:56 -0500") Message-ID: <87tuzhy49m.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::32f; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32f.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 16:08:14 -0000 Richard Stallman writes: > Has proper support for multiple batteries in battery.el > been reimplemented yet? I use that case, and I wrote the > old code to handle it. What exactly do you mean by "proper" support? AFAICT only two battery status backends currently support multiple sources of information: battery-linux-sysfs and battery-linux-proc-acpi, for Linux sysfs and ACPI support, respectively. The way they handle multiple batteries is by merging multiple data into a single report. Is this what you mean by "proper" support, or do you envision some other way to report on multiple batteries? My patch in https://debbugs.gnu.org/39491#55 also adds support for multiple power sources to battery-upower, for UPower support. It is possible that the other backends also support multiple batteries if the single source they query is already summarising data from multiple batteries, but I'm not familiar enough with APM, pmset, or MS Windows to say. -- Basil From MAILER-DAEMON Thu Jun 11 12:12:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjPoO-0002og-87 for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 12:12:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPoL-0002gC-Pj for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:12:13 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:51205) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjPoK-0003Gc-2Q for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:12:13 -0400 Received: by mail-wm1-x342.google.com with SMTP id u13so5483943wml.1 for ; Thu, 11 Jun 2020 09:12:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=qZoykGYRaIx4HJ85ggC2vU0wqAWsFsFjpWzw4FVic4Q=; b=JWmXsEtH0Kdkbjl8xtfVQXan5DoUvSRMzWjZQWbWZ+omqkkd/C4MSBQn1pYNPPpYyV /X/qTQM2Yy/796kf0HeH/mcrN4DoTnK4R/gza8rVQO2qyY5XJdO5M6EokReSzj0fqBTz tL7OUM6eXgzeDQmiTEHddxqmGchkFSnHwxL3HzEedaitU8jqSKdtAkmFQsSkM2YV73mV RV7jkEAHFnpHGnMy+6NdGpurm54VSZaSbzIiAs4CXhMMF2oWZOM1EedYqajApmE21+jf 6jJdAgcFP3+2OBCOfOkx/YEAkINqEleOJ9n/WHg5FuJ71MXXt7yjYI5+h4VhZluu1Sos Zm2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=qZoykGYRaIx4HJ85ggC2vU0wqAWsFsFjpWzw4FVic4Q=; b=Zlzd3SnE4t4asi3YxphqZQMniIkowJPGgL6cZ+Fb9zRGMxR5+GYp8GJNUnMZFyFsgm kxgPc4A2k6ysHlanrBKDdIAZ7TiUfObZLKeLQ0Oq1TY64P545XsuJiCVzIOf9KqIFSiI XdpSkhJdSuN6LkgEuI1PtTec6xAuQckNmyAXHl9cb2XfrIl13Zsn/UcHQYDsxKD+WXPv qoO3lczu2Ad8q5Ykmg2XbuBVsdDXOk6OV3+qEa1+0UiplF5ksZxsQeWYUJExJ80/AGWf QGif3W+9bJEFfF8VWEmrWKKi1p2vOlsT2JCmjzq2koLP8EeSQncox/COfIz2Z6P4ak4h ZY+g== X-Gm-Message-State: AOAM533/Ask6IGr0T3ZHOP1Q49ewgYYEjZLK/xX/S/URWZy655AXszf2 Hbu9S7R+sPtG8eeUExunt446sA== X-Google-Smtp-Source: ABdhPJzNLiqXnIBTzLB9XzBm0djBrgjw3KEIjpY0q1KLu9jIaItseYFO7Qfck79JFxC3HEB7PRD8ig== X-Received: by 2002:a1c:9ec5:: with SMTP id h188mr8801971wme.9.1591891930580; Thu, 11 Jun 2020 09:12:10 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id d5sm6003454wrb.14.2020.06.11.09.12.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 09:12:09 -0700 (PDT) From: "Basil L. Contovounesios" To: Michael Albinus Cc: Stefan Monnier , Andreas Schwab , Eli Zaretskii , Evgeny Zajcev , emacs-devel Subject: Re: [PATCH] battery.el, upower fixes References: <83lfpsoj1v.fsf@gnu.org> <87ftfq3y7p.fsf@gmx.de> Date: Thu, 11 Jun 2020 17:12:08 +0100 In-Reply-To: <87ftfq3y7p.fsf@gmx.de> (Michael Albinus's message of "Tue, 04 Feb 2020 21:16:10 +0100") Message-ID: <87eeqly42v.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::342; envelope-from=contovob@tcd.ie; helo=mail-wm1-x342.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 16:12:14 -0000 Michael Albinus writes: > Stefan Monnier writes: > >> I think there's a possibility that the set of devices changes over time >> (e.g. on my machine (battery-upower-device-list) currently only shows >> battery_BAT0, but I can insert a second battery and I'd expect the list >> to then include a battery_BAT1 as well). So maybe we should instead >> allow a special value (e.g. nil) to mean "autodetect" and then do the >> autodetection dynamically. WDYT? > > Usually, D-Bus services send a signal when a device is added/removed. IIUC > https://upower.freedesktop.org/docs/UPower.html, > org.freedesktop.UPower.DeviceAdded and org.freedesktop.UPower.DeviceRemoved > serve for that purpose. So you shall subscribe to those signals and > handle them accordingly. Now done in https://debbugs.gnu.org/39491#55. -- Basil From MAILER-DAEMON Thu Jun 11 12:15:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjPrI-0000Hm-Tz for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 12:15:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPrH-0000Ew-OB for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:15:15 -0400 Received: from mail178c50.megamailservers.eu ([91.136.10.188]:47476 helo=mail70c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPrF-0003vR-4b for emacs-devel@gnu.org; Thu, 11 Jun 2020 12:15:15 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591892105; bh=0w4wMdIHYf/JZa7YY6sBBWO+bCV68KLuvxUZt8BqQ1A=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=JrqFC6Qut1B3GI6Tvj1K+2SZRMVPme+Z+uVHTtgEMulvqAA0tBWTNb0eFitwJ8Bxf aGnIY7NPMR+WHPK59FGwHnWexzhEkKHBEskKyIBJvC+F4JhsWlITSNPXAlln5627EU khrbgR9C1aCRkGfEbZU4qvV+hncdGpvUnHBwOrbk= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail70c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05BGF2id013670; Thu, 11 Jun 2020 16:15:04 +0000 Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: Date: Thu, 11 Jun 2020 18:15:02 +0200 Cc: Stefan Monnier , Emacs developers Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> To: Yuri Khan X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F17.5EE2580E.003C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=OKBZIhSB c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=iRZporoAAAAA:8 a=NkH0z-YEYWxvJnkjA_MA:9 a=7Zwj6sZBwVKJAoWSPKxL6X1jA+E=:19 a=QEXdDO2ut3YA:10 a=NOBgFS-JBQ2l-kSd6-zu:22 Received-SPF: softfail client-ip=91.136.10.188; envelope-from=mattiase@acm.org; helo=mail70c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 12:15:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 16:15:16 -0000 11 juni 2020 kl. 07.15 skrev Yuri Khan : >=20 > On Thu, 11 Jun 2020 at 02:20, Stefan Monnier = wrote: >>=20 >> Where does this 0.6 come from? This is an excellent question and so is Yuri's, so I'm going to try to = answer both at the same time. Originally, 0.6^2.2=3D0.325 was chosen in order to preserve the = greyscale behaviour of the otherwise dubious R+G+B<0.6 criterion used by = Emacs in various places, with the assumption that at least the = brightness was carefully chosen. This appears to be sort-of true. > L =3D (1.05 * 0.05)^0.5 - 0.05 =E2=89=88 0.18 corresponding to a gray = around #767576 Yes, and moreover Y=3D0.18 corresponds to a lightness of 50%, so I very = much thought that it would be better than 0.325. However, the machines = and screens I've looked at (various LCD and CRT displays, macOS, Linux, = etc) don't bear that out. For example, white text is decidedly more = readable than black onto a background of #8b7500 (gold4) everywhere. Of = course, your equipment may be different! (I'll be more careful to keep a lab notebook next time -- mostly do that = for paid work/research only.) > Experimentally, I find white and black over #767576 about equally easy > to read; over a light gray #cccbcc (L=3D0.6), black is much more > readable than white. Unfortunately I only have access to my Mac right now, but here I find = white to be somewhat easier to read than black against #767576 as = background. That colour certainly looks darker than the balance point. As it turned out, however, the exact cut-off value matters a lot less = than anticipated. The most important property of contrasting colour = selection is not picking the slightly better one but avoiding a = disastrous choice, and there is a fairly wide interval of cut-off values = that do reasonably well; a lot of colours in the middle work with either = black or white. In addition, although different screens and systems vary in their = calibration and policy, it doesn't seem to matter much in this case. = When the colours move, so does white, keeping the relations roughly the = same. Precision may be more important when the same predicate is used for = selecting prearranged palettes for use against 'light' and 'dark' = backgrounds. This still needs to be investigated. From MAILER-DAEMON Thu Jun 11 13:06:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjQed-0001e6-O6 for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:06:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59786) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjQea-0001cw-1v for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:06:12 -0400 Received: from mout02.posteo.de ([185.67.36.142]:48017) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjQeX-0007s6-Ru for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:06:11 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id 58B322400FB for ; Thu, 11 Jun 2020 19:06:05 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 49jVcX1dtmz6tmf for ; Thu, 11 Jun 2020 19:06:03 +0200 (CEST) From: Andrew Schwartzmeyer Content-Type: multipart/alternative; boundary="Apple-Mail=_2AC6A153-C7A0-4BE4-A953-68EC0F0BA34B" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: vertical fido-mode Date: Thu, 11 Jun 2020 10:06:01 -0700 References: To: emacs-devel@gnu.org In-Reply-To: Message-Id: X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=185.67.36.142; envelope-from=andrew@schwartzmeyer.com; helo=mout02.posteo.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 13:06:05 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:06:13 -0000 --Apple-Mail=_2AC6A153-C7A0-4BE4-A953-68EC0F0BA34B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Funnily enough: > On Jun 11, 2020, at 9:00 AM, emacs-devel-request@gnu.org wrote: >=20 > As an aside, have you tried non-fido icomplete? There is one simple = change that makes it infinitely better in my opinion: fido forces a = completion-style choice on you, icomplete gives you freedom to choose = for yourself! (I shouldn't say so because I'm the author but I love the = orderless completion-style: https://github.com/oantolin/orderless = .) I came to emacs-devel a few weeks ago for a way to use orderless in = fido, and Jo=C3=A3o kindly showed me: (add-hook 'icomplete-minibuffer-setup-hook (lambda () (setq-local completion-styles '(orderless = partial-completion)))) Which makes fido-mode use different completion styles. So it=E2=80=99s = not necessarily forced, it=E2=80=99s just not as easy as modifying a = defcustom. Cheers, Andy P.S. I=E2=80=99m replying from the digest for the first time, hoping the = threading isn=E2=80=99t screwed up.= --Apple-Mail=_2AC6A153-C7A0-4BE4-A953-68EC0F0BA34B Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Funnily enough:

On Jun 11, 2020, at 9:00 AM, emacs-devel-request@gnu.org wrote:

As an aside, have you tried = non-fido icomplete? There is one simple change that makes it infinitely = better in my opinion: fido forces a completion-style choice on you, = icomplete gives you freedom to choose for yourself! (I shouldn't say so = because I'm the author but I love the orderless completion-style: https://github.com/oantolin/orderless.)

I came to emacs-devel a few weeks ago for a way to use = orderless in fido, and Jo=C3=A3o kindly showed me:

(add-hook = 'icomplete-minibuffer-setup-hook
    =         (lambda ()
  =             (setq-local completion-styles = '(orderless partial-completion))))

Which makes fido-mode use different = completion styles. So it=E2=80=99s not necessarily forced, it=E2=80=99s = just not as easy as modifying a defcustom.

Cheers,

Andy

P.S. I=E2=80=99m replying from the = digest for the first time, hoping the threading isn=E2=80=99t screwed = up.
= --Apple-Mail=_2AC6A153-C7A0-4BE4-A953-68EC0F0BA34B-- From MAILER-DAEMON Thu Jun 11 13:29:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjR0w-0006Mc-Ft for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:29:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40784) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjR0u-0006MW-OX for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:29:16 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:40943) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjR0t-0004JM-3v for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:29:16 -0400 Received: by mail-wm1-x329.google.com with SMTP id r15so5821873wmh.5 for ; Thu, 11 Jun 2020 10:29:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=t3Nyfp8sHo+QtZ5htpXqWWPCSyPOEzNKfrfUKnCldsI=; b=Yj4L3PmjASqqo02jEHT4laA4VOoSHutzJfMCAfwxCLZN9GqrSlY5PKGhFXp15KqUlO TPAKZSqvqpKXyM53601V2l5m8Gj5H+xqlim21CrhxhiASdf5r0CTBVd9WXcGcF+Z4ahf 7mU7He9g3POnoAFiYKTZ/V3KpGPdkLcFUdt8FKI/6Bg4rmi+pIHwq0beAKKAqiifCaCA B2KqP6xaHd5Fa7QBRdnctMQxEcOIqGItNsPv9VNQfD3E0VqyzR/Udfw5llBbzVq/TAT3 cSmvUaTqO6k0TLHhnlvSKJiTlmlRCGqu8oaea6fMI1zSqig2ef5HLrb90Q9HSJowf9p3 I0tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=t3Nyfp8sHo+QtZ5htpXqWWPCSyPOEzNKfrfUKnCldsI=; b=V26wFPoD36n/9tcUicU/XV9mbG5+k6anlYYoDHi1Q+26BzSr1fgJMril/SmYJ5AsMW YhgeJ0ZVpx5AcLqjiOxWpVSX+jctTmuBJO3rIsrvT5PmBAK12ZmBAeLucA2UBlJuSlt0 Cp8WdpnAX0IyOEpCPWmEqbx1ydQm6zcEY9l++BGa0lczZN+N13gl813sBTtdC1gGsvAP tYbwwht7VCYba1qcATA/bb1ChBGhpEf8SEh2wUc+59t8gR646aLTip4Nd4PQaE5AZ9FN 7sFLqXMT5HXXW5v72SioKVh6pkXF5Y+qQhP/BL9DeeCqUWED2AWzrKRJW2ib08Ts0GVp 0gCw== X-Gm-Message-State: AOAM531wdHTTpt0DiboOyfvGKJcQWQkjDnuXTsfZClVfLtWKygu6e5v7 vrj+cMSkDFfT6A+3X081BXNi1Q== X-Google-Smtp-Source: ABdhPJy6k8RNXBhI7R3sEYdmOgPzJvHJVw/Eb1xa+FY8VvXkCqkWW7eVhN1QedAYg2Sn4OhGOT8HrQ== X-Received: by 2002:a1c:5fd4:: with SMTP id t203mr8639508wmb.184.1591896553565; Thu, 11 Jun 2020 10:29:13 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id x66sm4972200wmb.40.2020.06.11.10.29.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 10:29:12 -0700 (PDT) From: "Basil L. Contovounesios" To: Ergus Cc: Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , emacs-devel@gnu.org Subject: Re: vertical fido-mode References: <87a71apgk2.fsf@penguin> <20200611130341.zwxcpwtwaxrq2qwm@ergus> <20200611140737.meujpruhz2ew4643@ergus> Date: Thu, 11 Jun 2020 18:29:11 +0100 In-Reply-To: <20200611140737.meujpruhz2ew4643@ergus> (Ergus's message of "Thu, 11 Jun 2020 16:07:37 +0200") Message-ID: <87wo4deck8.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::329; envelope-from=contovob@tcd.ie; helo=mail-wm1-x329.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:29:17 -0000 Ergus writes: > Once the big guys (Eli, Stefan, Basil) approves/correct the changes; > you merge your branch into the master branch. I've indeed been eating a bit too much junk lately but I wouldn't call myself big. ;) Unless there's a fellow herb around I haven't noticed? -- Basil From MAILER-DAEMON Thu Jun 11 13:31:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjR2u-0007Ig-Qc for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:31:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPSR-0004FN-A7 for emacs-devel@gnu.org; Thu, 11 Jun 2020 11:49:35 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:41579) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjPSP-0005Bi-Kv for emacs-devel@gnu.org; Thu, 11 Jun 2020 11:49:34 -0400 X-Originating-IP: 213.7.164.105 Received: from kronos (213-164-105.netrunf.cytanet.com.cy [213.7.164.105]) (Authenticated sender: stavrou@protesilaos.com) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 4E981FF808; Thu, 11 Jun 2020 15:49:26 +0000 (UTC) From: Protesilaos Stavrou To: Ergus Cc: Noam Postavsky , Juri Linkov , "emacs-devel@gnu.org" , "monnier@iro.umontreal.ca" , Dmitry Gutov , =?utf-8?Q?O?= =?utf-8?Q?mar_Antol=C3=ADn_Camarena?= Subject: Re: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <20200611134042.wjokdvm2dx3us2dn@ergus> Date: Thu, 11 Jun 2020 18:49:23 +0300 In-Reply-To: <20200611134042.wjokdvm2dx3us2dn@ergus> (Ergus's message of "Thu, 11 Jun 2020 15:40:42 +0200") Message-ID: <871rmlfvr0.fsf@protesilaos.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 Received-SPF: none client-ip=217.70.183.199; envelope-from=public@protesilaos.com; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 11:49:29 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2020 13:31:19 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 15:49:35 -0000 RXJndXMgPHNwYWNpYmJhQGFvbC5jb20+IFsyMDIwLTA2LTExLCAxNTo0MCArMDIwMF06DQoNCj4g SWYgd2Ugd2FudCBzb21lIG9mIHRoZSBpdnkgZnVuY3Rpb25hbGl0aWVzIGluIGljb21wbGV0ZSBz aG91bGQgd2UgY29udGFjdA0KPiB0aGUgaXZ5IG1haW50YWluZXIgZm9yIGNvbnRyaWJ1dGlvbj8g DQoNCkZvciB0aGUgc2FrZSBvZiBjb21wbGV0ZW5lc3MsIE9tYXIgQW50b2zDrW4gQ2FtYXJlbmEg YWxyZWFkeSBkZXZlbG9wcw0KcGFja2FnZXMgdGhhdCBleHRlbmQgSWNvbXBsZXRlIGluIHdheXMg dGhhdCBtYWtlIGl0IG1vcmUgSXZ5LWxpa2UuDQoNCiogJ29yZGVybGVzcycgcGF0dGVybiBtYXRj aGluZyA6OiBDb21wbGV0aW9uIHN0eWxlIHRoYXQgb2ZmZXJzDQogIG91dC1vZi1vcmRlciBtYXRj aGVzLCB3aGlsZSBhbHNvIHN1cHBvcnRpbmcgbXVsdGlwbGUgbWV0aG9kcyAocmVnZXhwLA0KICBm bGV4LCBzdHJpbmcsIGluaXRpYWxzKS5bMF0NCg0KKiAnZW1iYXJrJyBjb250ZXh0dWFsIGN1c3Rv bSBhY3Rpb25zIDo6IE1pbmlidWZmZXIgY29tbWFuZHMgdGhhdCBhY3Qgb24NCiAgdGhlIGN1cnJl bnQgY2FuZGlkYXRlIG9yIHRoZSBlbnRpcmUgbGlzdCBvZiBjYW5kaWRhdGVzLiAgVGhlc2UgYXJl DQogIGltcGxlbWVudGVkIGFzIGtleW1hcHMuWzFdDQoNClswXTogaHR0cHM6Ly9naXRodWIuY29t L29hbnRvbGluL29yZGVybGVzcw0KWzFdOiBodHRwczovL2dpdGh1Yi5jb20vb2FudG9saW4vZW1i YXJrDQoNCi0tIA0KUHJvdGVzaWxhb3MgU3RhdnJvdQ0KcHJvdGVzaWxhb3MuY29tDQo= From MAILER-DAEMON Thu Jun 11 13:33:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjR56-0001VN-GK for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:33:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42624) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjR54-0001U6-SQ for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:33:34 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:34247) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjR52-0005LR-SR for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:33:34 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 75F0F4417D3; Thu, 11 Jun 2020 13:33:30 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0D5834417C5; Thu, 11 Jun 2020 13:33:29 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591896809; bh=ak8OPXFP7y6V8S5PKv8pJV9U6MhXNT6p+s+NczluTuw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=DhlJtpebsA2UFMfY8l8fISx9Q5ihJSoGNGqC+MyqgSjhpvQOBGQgg2tJ0fn6sw3/M Mxa+WaSTcdzE9mteNtaWXr97AlNcfbaRE1ouEwwELAKZu9PZRtZZURgFizetQGHxiQ rUSnHx2prXFSh6jmUgHogdbJoYKEUPQ2FDgx9nZI0OKL5X4FGMcFYhhSl++4JtdVYf nJtla3vCu9zvHWR0EW9Lj40muBdyVOfdFetFqhwTuj7Ae5M2wEoRbg0k0Tkijs8LSc f9GT/2KGMlu1DI0fFYCNpz1XL7sN00hvjRKz44hDnFOfEfxpfzkb4A8ZhfLNtJlh7m D0JPk0nadvnew== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id CCA51120689; Thu, 11 Jun 2020 13:33:28 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?Cl=E9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Message-ID: References: Date: Thu, 11 Jun 2020 13:33:27 -0400 In-Reply-To: (=?windows-1252?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Thu, 11 Jun 2020 10:21:45 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 13:33:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:33:35 -0000 >> One[1] uses font-lock mode to adapt to >> change dynamically, which works well for live editing, but you can't see >> the password when you're editing it. > font-lock is the perfect way to implement this, and it should be easy to I'd recommend using jit-lock rather than font-lock. It might be a case of bikeshedding, but I think it will be both easier to implement and more robust. Stefan PS: I assume it installs *overlays* rather than text properties. From MAILER-DAEMON Thu Jun 11 13:37:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjR8z-0005PI-Pc for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:37:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjR8x-0005Ot-Dw for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:37:35 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:54885) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjR8v-0006Ev-Bt for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:37:35 -0400 Received: by mail-wm1-x334.google.com with SMTP id g10so5703574wmh.4 for ; Thu, 11 Jun 2020 10:37:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=BU036I+B4ulXmJWMeOGJHHk5Tz0gULWx/4caA8o7vi8=; b=QNrd6nGwA/csFN3D0OPUI6tVZFSBKEXAlnsuL864COsb4Ihao6kUUvwM7d9MA63D+B lqkS1TLX8KHbmUQaHT5fQ7SAlrN0EkI5UVBtMJqYOfeKEwUgj6yyczhokKPR28tD14MO QK7YvFvmFUg9Tqq7GrDq3/7wkxpM5umH3I4QB+5IHDfs+3gHTz8DyVgtIxt/v1nXM5Em f9HX0egRxZM0CiFM/eIWa4N7rQOQv+BbLBCGq3QSJEQWU6hvFpJhI8i9cyxpipYqUNIT N2R5/J3LQyV7S5T/thzDjrtEENizfm34QqvZr46vSWX88f4/j7qYqFbMnHeVhgFFc+yv HNrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=BU036I+B4ulXmJWMeOGJHHk5Tz0gULWx/4caA8o7vi8=; b=Cs4UxNjk11RlfniMKyQyTq2OgFAsCTS6L3yuwEO8F1xtEWJPFJ2yQsTF/bW+2WvlsS LLtbDRi33eDVRTw+U6TNnqmoEMl3bSrjGV6SYL+NkhiD34GWJ9Gyid7bax3Ucdl7sVua 146+e05PoAYmsII6e9whE5ZPuQXcHBEw9arnZBfewJN7ifKU4X96jxQ+c9VggcgCFH0N Keuuo+D4Gg8jYKkAUCsNCMzk8xZGmIfptplWGw3DbCWiJIFtSuWbl5x1jnhVKeyWEbCJ 3XkDwoQMuAnJpgmLHQtu2+naFkcHZ8u+WXyuBksfS/jwRDuPO89rjPefL+jcDpoEc+w4 sTkQ== X-Gm-Message-State: AOAM532059hm18gnkbFMUpYXVfGF3OfBt0sCUWvjhK1Ds70QBIbfn/sr 3bz+DUysuPx/qYwUygAChElL4w== X-Google-Smtp-Source: ABdhPJwLArNJzHRsToBEFA/EdmwKlYOlSlsBiSnmwdZh1bF03xl5rbyzv7kX6EIJJgju4fNHLD46CQ== X-Received: by 2002:a1c:a901:: with SMTP id s1mr9744964wme.66.1591897051438; Thu, 11 Jun 2020 10:37:31 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id b132sm5116738wmh.3.2020.06.11.10.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 10:37:30 -0700 (PDT) From: "Basil L. Contovounesios" To: Protesilaos Stavrou Cc: Ergus , Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , Noam Postavsky , "emacs-devel@gnu.org" , "monnier@iro.umontreal.ca" , Dmitry Gutov , Juri Linkov Subject: Re: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <20200611134042.wjokdvm2dx3us2dn@ergus> <871rmlfvr0.fsf@protesilaos.com> Date: Thu, 11 Jun 2020 18:37:29 +0100 In-Reply-To: <871rmlfvr0.fsf@protesilaos.com> (Protesilaos Stavrou's message of "Thu, 11 Jun 2020 18:49:23 +0300") Message-ID: <87h7vhec6e.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::334; envelope-from=contovob@tcd.ie; helo=mail-wm1-x334.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:37:35 -0000 Protesilaos Stavrou writes: > Ergus [2020-06-11, 15:40 +0200]: > >> If we want some of the ivy functionalities in icomplete should we contact >> the ivy maintainer for contribution?=20 > > For the sake of completeness, Omar Antol=C3=ADn Camarena already develops > packages that extend Icomplete in ways that make it more Ivy-like. > > * 'orderless' pattern matching :: Completion style that offers > out-of-order matches, while also supporting multiple methods (regexp, > flex, string, initials).[0] > > * 'embark' contextual custom actions :: Minibuffer commands that act on > the current candidate or the entire list of candidates. These are > implemented as keymaps.[1] > > [0]: https://github.com/oantolin/orderless > [1]: https://github.com/oantolin/embark And for even more complete completeness: in general Ivy does its own thing rather than trying to reuse core completion tools, so its desirable features can be copied without necessarily needing to import much, if any, code. --=20 Basil From MAILER-DAEMON Thu Jun 11 13:43:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjREg-0007dF-0g for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:43:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46940) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjREd-0007cV-Qe for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:43:27 -0400 Received: from mail-qk1-x72d.google.com ([2607:f8b0:4864:20::72d]:39671) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjREa-0007bH-0J for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:43:27 -0400 Received: by mail-qk1-x72d.google.com with SMTP id w3so6396529qkb.6 for ; Thu, 11 Jun 2020 10:43:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=cK3nh0YKpw52RQDD8KdLYGX845esebWbkLMISS7JDn8=; b=iPP30xRkiU9Mh2h54XxmIzMfZ1+SonmMUdo3WqdI+s5JPY9mMm8o9VICJ3oJWB2rbg 8QRv9I5K6mt3ggdvXM9YeJ0tqfywGXUIwewMT6hwc9oidv5adkuqkEXZ4a3QrS7Al2yB hbeqqEn/hLhI7Rqo7IFxx06sAE9GqR15seEseLlO7Vwc+EtZ1l4G9bHHRxXVLXO5VrIG 9XN07tv6d8vETSAJvmgW6fQwQxQOtQiyKjAmc5wgZRZuzdjLydC6mYyLHKOtf/IxSLIG RdyfodKGsD3E+oB128Zix0oYuajQ1Abk2BLVdHE7rsLw7D0ID8xFyjHiovs1UaihGKux S40Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=cK3nh0YKpw52RQDD8KdLYGX845esebWbkLMISS7JDn8=; b=l+T4cu657kQ15kqxwqNkUXPLi5vxUmlJgQ7wEYhcN9ZliiCAOAq/wJSymNtLkAn3KK oNy0Hqp8lRM7nQ55mwD8OEAaJhr1r7FvpTImyH7paeJUHLJ5IbBsMA7NxhT2b7m33ADc gCpXCKcvpTc6u7Ks6/vOxo6P3cYtlvI2ewvIMbLeafLzDiHo7ricx5RlTCQIL0qSyihp O6wy1kHBD0/CTgF8GkTtQJLGAMthl+hcpcLhk4B7cI2Wgv9hPs2pMjQASY+C6awKeTjb Qs71IEhE0d8loE+9TCPVO9H9h6MjMdpxTWh+lLOyoqrXZyLXJ6OzCqOVrRr9y0QEV6ek W/dQ== X-Gm-Message-State: AOAM533bhUoztbnJdXfclDv6PAIFmQ4qOQ+cdYs+10rqHd4GTRQyjXRr WjvkqFpjrCd/39XlGi1/VE6TqJS+ X-Google-Smtp-Source: ABdhPJz6Fe/ZVkZYSB5U4AKJDb1oz+UuAtPICJHstuk59180QEwf4UGqe6/bBSpO1qlkFjzJNqdhLA== X-Received: by 2002:a37:4594:: with SMTP id s142mr9506984qka.183.1591897396789; Thu, 11 Jun 2020 10:43:16 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:7d16:396:5437:aae1? ([2601:184:4180:66e7:7d16:396:5437:aae1]) by smtp.googlemail.com with ESMTPSA id l69sm2786209qke.112.2020.06.11.10.43.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 11 Jun 2020 10:43:16 -0700 (PDT) Subject: Re: questions about correct reveal-mode usage to hide passwords To: Stefan Monnier Cc: emacs-devel@gnu.org References: From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> Date: Thu, 11 Jun 2020 13:43:14 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::72d; envelope-from=cpitclaudel@gmail.com; helo=mail-qk1-x72d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:43:28 -0000 On 11/06/2020 13.33, Stefan Monnier wrote: >>> One[1] uses font-lock mode to adapt to >>> change dynamically, which works well for live editing, but you can't see >>> the password when you're editing it. >> font-lock is the perfect way to implement this, and it should be easy to > > I'd recommend using jit-lock rather than font-lock. > It might be a case of bikeshedding, but I think it will be both easier > to implement and more robust. Hmm. I meant font-lock-keywords and text properties (which will benefit from jit-lock, of course), rather than hooking up directly into jit-lock and using overlays. Is there something wrong with the text-properties approach? From MAILER-DAEMON Thu Jun 11 13:49:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjRKA-0002RP-7J for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 13:49:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjRK8-0002RB-CJ for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:49:08 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:26197) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjRK6-0008IR-0h for emacs-devel@gnu.org; Thu, 11 Jun 2020 13:49:07 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B71514417D6; Thu, 11 Jun 2020 13:49:03 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 3AD704417B2; Thu, 11 Jun 2020 13:49:02 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591897742; bh=pPTTB41BbjkdM6TWG2O+vfmcq3h9x6fH1veYpy2jQTc=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=AAE/cFEteUyy5cHFPcJFyOAX870tCbdWpZkybpMQ8pH/npNc7I+C0eRDSJW7Cd55m kI2HMwxfrRFJcyWRpP6mrkmydtM0mAFCCQd9Wpd0HwmpUDz3hv5+5PhbzqbvDXNVEJ dvSxTruwMlLnsTNO1AVtCFRhuDys87iQ3bTMGp9w/eQKugSll++CLGaJAB6xLNC5EK GLlylCHXXL9Yt1zMIts/M/2Og7R9b38IVPuchB38qC5om9Y2fOjd2byf24naf1iIPG fYPBvNvOAhYObNIobLExsOkc72UB7V02z2TVnQGQtLlJWiplX5S/zk4lA+DD+6f8B5 fS+Tje6bEy8pA== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F24FC120497; Thu, 11 Jun 2020 13:49:01 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?Cl=E9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Message-ID: References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> Date: Thu, 11 Jun 2020 13:49:00 -0400 In-Reply-To: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> (=?windows-1252?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Thu, 11 Jun 2020 13:43:14 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 13:33:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 17:49:08 -0000 >>>> One[1] uses font-lock mode to adapt to >>>> change dynamically, which works well for live editing, but you can't see >>>> the password when you're editing it. >>> font-lock is the perfect way to implement this, and it should be easy to >> >> I'd recommend using jit-lock rather than font-lock. >> It might be a case of bikeshedding, but I think it will be both easier >> to implement and more robust. > > Hmm. I meant font-lock-keywords and text properties (which will benefit > from jit-lock, of course), rather than hooking up directly into jit-lock and > using overlays. Is there something wrong with the text-properties approach? It's just that using `font-lock-keywords` is fiddly, and then you also have to set `font-lock-extra-managed-props`, ... And next thing you know a user wants to use your thing but doesn't want font-lock coloring, ... Stefan From MAILER-DAEMON Thu Jun 11 14:31:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjRzR-0006hZ-HN for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 14:31:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjRzQ-0006hR-AO for emacs-devel@gnu.org; Thu, 11 Jun 2020 14:31:48 -0400 Received: from ciao.gmane.io ([159.69.161.202]:58792) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjRzO-0001BI-Pa for emacs-devel@gnu.org; Thu, 11 Jun 2020 14:31:47 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jjRzK-0004QF-Vs for emacs-devel@gnu.org; Thu, 11 Jun 2020 20:31:42 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org To: emacs-devel@gnu.org From: Ted Zlatanov Subject: Re: questions about correct reveal-mode usage to hide passwords Date: Thu, 11 Jun 2020 18:31:36 +0000 Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos Message-ID: References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:ab1hqCnGvhVuK2u63T2ZoUX0AFs= X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 13:58:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 18:31:48 -0000 On Thu, 11 Jun 2020 13:49:00 -0400 Stefan Monnier wrote: >>> I'd recommend using jit-lock rather than font-lock. >>> It might be a case of bikeshedding, but I think it will be both easier >>> to implement and more robust. >> >> Hmm. I meant font-lock-keywords and text properties (which will benefit >> from jit-lock, of course), rather than hooking up directly into jit-lock and >> using overlays. Is there something wrong with the text-properties approach? SM> It's just that using `font-lock-keywords` is fiddly, and then you also SM> have to set `font-lock-extra-managed-props`, ... SM> And next thing you know a user wants to use your thing but doesn't want SM> font-lock coloring, ... jit-lock seems to require lots of extra work compared to adapting prettify-symbols-mode and asking the user to add extra settings. jit-lock is not tied to regexp lookups, which is OK with me (a scanning function is better for my specific need, since secrets are often contextual). The cleanest example I saw was glasses.el but that mode doesn't reveal the transformed text when you're inside the text. Is there an example using jit-lock that behaves like prettify-symbols-mode in the following cases? * transforms the text when outside it * temporarily shows the original text when inside it or on its right edge * updates when the user makes changes Thank you again Ted From MAILER-DAEMON Thu Jun 11 14:50:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjSHD-0000Cq-TF for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 14:50:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSHA-00005K-Ji for emacs-devel@gnu.org; Thu, 11 Jun 2020 14:50:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39294) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjSH9-0004xm-SO; Thu, 11 Jun 2020 14:50:07 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:44663) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jjSH9-0001PO-88; Thu, 11 Jun 2020 14:50:07 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 9225227C0054; Thu, 11 Jun 2020 14:50:06 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Thu, 11 Jun 2020 14:50:06 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudehledguddthecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 882B93060FE7; Thu, 11 Jun 2020 14:50:05 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier Cc: Emacs developers Subject: Re: [elpa] master 2a29130: Make debbugs install a handler in browse-url-default-handlers. References: <20200507122008.22755.28768@vcs0.savannah.gnu.org> <20200507122010.213B720A15@vcs0.savannah.gnu.org> <87o8qzvrqg.fsf@gnus.org> <214c3d1f-c0b3-4e70-8f73-e3efa53d9bb9@beta.fastmail.com> <87o8qkruim.fsf@gnus.org> <878sgv9bqm.fsf@gnus.org> <87eeqmsroe.fsf@gnu.org> <87y2oueo4h.fsf@gmx.de> <871rmmwsy5.fsf@gnu.org> Mail-Followup-To: Stefan Monnier , Emacs developers Date: Thu, 11 Jun 2020 20:50:03 +0200 In-Reply-To: <871rmmwsy5.fsf@gnu.org> (Tassilo Horn's message of "Wed, 10 Jun 2020 22:45:38 +0200") Message-ID: <87mu59mo84.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 18:50:09 -0000 Tassilo Horn writes: >>> Since we seem to agree that this specific case is allright, may I >>> initiate a new debbugs release with that change? (Feel free to do >>> it >> >> Yes, of course, > > Done, thanks! Have I done something wrong? I increased the Version to 0.23 but still the current ELPA version is 0.22. Bye, Tassilo From MAILER-DAEMON Thu Jun 11 15:14:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjSeZ-0001KN-0u for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35406) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSeX-0001KG-Qy for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:17 -0400 Received: from mail-il1-x12d.google.com ([2607:f8b0:4864:20::12d]:44601) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjSeW-0001u7-5p for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:17 -0400 Received: by mail-il1-x12d.google.com with SMTP id i1so6499559ils.11 for ; Thu, 11 Jun 2020 12:14:09 -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 :content-transfer-encoding; bh=jsoJ3o5P6FWorneT2rsxMIyr7XsgSmR+doO14TW9EJ4=; b=XlUztJNeeK086fc6jbQUl21n75xdJMXJ/p6npf5ae1KQFoW/xNLe54byd73m325DR4 btigAO7tAdbjPlB0V9fYcsHfffXcR2pikrgOhVvs9F9KTjQ88RP5OEBoynp2hYOveCRZ F41snWKOuq5xFmehbJdGjUZqZ5DR2fvRp9uHEV+F/Z20zIA31MES5rVG4cLiYk18ckAX dvtoGlfSoCmWuBQxZok9ZZuzJZJFsgBRNYGCAN3cbJ/mQFci3K13D9aYUuTz2nPwQjjz vPJdLRKjSh5KiGCTjJlHdfpnpYWD8ejI1kvAcQHtpaeti7jTxfzshqfq7PdSjKXOXPLl Js7g== 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:content-transfer-encoding; bh=jsoJ3o5P6FWorneT2rsxMIyr7XsgSmR+doO14TW9EJ4=; b=ATl8Y23zvGT9vi1NFjEaVBh9OwXc/RQie6PkUUnEfWOw38njynEeZzU7TGwdLT08sB HrsmTwDgnh+iqImgHcASafGTm9MtW6eMTnQqtdpLJHwmhtC706VWis8SD9Y53Kb4IFnr CZ08HbKwiXyS1HwiN04nbbq23JlLt8FrPbVUCFmBsHLGfdw18AAfkspRuRmr9iJe4OVU k+spu15wzy4PgTbx3iuCb53i7gMmEWLLES3k8zbrAkU2BnkzOG52RhMtdvHYeeGYRGPd h6IUcQbRkuUGJBCifXZ6IbIwLr1Y5R7nshLuSc2wyj9E2pp6UZMMvTH2z2ajutbLxxG4 qwCQ== X-Gm-Message-State: AOAM533DghLYRIYXeEcfuoIBw7Wx2AEwREybjaOzye2/kscqDLogTs0T qSYP0xDrvW3Ron9Pot2QCGWA+9zOw9acesWpcgU= X-Google-Smtp-Source: ABdhPJyrgNhN4aiM+iY84cB9Of3rWSBvn/r5aR9GuVVJlFBX7M0bTO9CQQHhN24/IuiPjMTcJgPd9UgKK078rfg8/gc= X-Received: by 2002:a92:de41:: with SMTP id e1mr9380030ilr.199.1591902848767; Thu, 11 Jun 2020 12:14:08 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Thu, 11 Jun 2020 20:13:57 +0100 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: Philippe Vaucher , emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::12d; envelope-from=joaotavora@gmail.com; helo=mail-il1-x12d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 19:14:18 -0000 Hello Philippe, [I take the liberty from answering to emacs-devel, since you seem to be requesting that I weigh in on your work, which is public] > I'm surprised not to hear from you on this. Maybe you missed it? > > IIRC you were the one pushing for me to implement it, maybe I misremember= . You don't. I have variable amounts of energy to invest in Emacs development, and I didn't think my input would be crucial here. Sorry about that, and thank you for your work. I read your email, but was discouraged from trying your program since you made it depend on s.el and dash.el which are libraries I don't use and steer clear of. Certainly with 120 lines of code you can write it without s.el and dash.el, especially now that you've supposedly become accustomed with Emacs's API's. But I read the code. You approach is completely different from what I imagined: I was thinking of creating new sections in the manual itself, or creating a whole new manual, without having to actually write the contents for it. It could be called the "Elisp API manual", or some better name. One could visit that API manual from inside and from outside Emacs, just as one does now with the normal Manual. A minimal amount of Elisp code would allow some C-h function to take me there. In other words, as you know, a manual in Emacs is extracted from the Texinfo source (.texi files) into various output formats. I was thinking about code that performs this extraction into a new output (a new manual, or a new section in the existing Elisp manual) including all those formats. Without needing to touch the (.texi) files themselves. Maybe this could be done with a special Texinfo macro, maybe redefining its built-in @defun macro, which is what Emacs uses to introduce a function definition. That was my idea. Hope this helps, Jo=C3=A3o T=C3=A1vora From MAILER-DAEMON Thu Jun 11 15:14:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjSen-0001XJ-Vi for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35528) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSem-0001Vl-2y for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:32 -0400 Received: from mx.sdf.org ([205.166.94.20]:56439) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSej-00020t-Tm for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:14:31 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 05BJ5fP4016352 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO) for ; Thu, 11 Jun 2020 19:05:41 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 05BJ5fl4022352; Thu, 11 Jun 2020 19:05:41 GMT From: Andrea Corallo To: emacs-devel@gnu.org Subject: Re: feature/native-comp, comp-deferred-compilation: no recompilation when .elc newer than .eln? References: <875zcxgx8f.fsf@no.workgroup> <877dxczwsy.fsf@no.workgroup> <87ftc0nqtv.fsf@no.workgroup> <87pna8rceq.fsf@no.workgroup> <87wo4epsv1.fsf@no.workgroup> Date: Thu, 11 Jun 2020 19:05:41 +0000 In-Reply-To: <87wo4epsv1.fsf@no.workgroup> (Gregor Zattler's message of "Wed, 10 Jun 2020 22:29:22 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 15:05:42 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 19:14:32 -0000 Gregor Zattler writes: > Hi Andrea, > * Gregor Zattler [2020-06-09; 08:17]: >> * Andrea Corallo [2020-06-06; 21:51]: >>> This issue should be fixed by Nico's patch e38678b268 "Reduce the number >>> of files probed when finding a lisp file." >>> >>> Hope works for you, in case does not please complain :) >> >> I will test in the next days. > > it worked, but only after the 3rd invokation of emacs: > > 1. I recompiled emacs, checked out an old version of org > mode with a certain bug, compiled that, used it with the > new emacs, this produced an org.eln file with the > specific bug. Which I experienced while using org-mode. > > 2. I killed emacs, checked out newest org-mode, compiled it, > started emacs, used org-mode, org.el was not shown in the > async compile buffer, and the bug was still present and > the eln file was older than the el an elc files. > > 3. I killed emacs, started it again, used an org-file, now > org.el showed up in the async compile buffer, but the eln > file was as old as before and the bug was present. > > 4. I killed emacs. Had a look again for the org.el[cn]? > files: now the eln file was newest, I used org-mode and > the bug was gone. > > I understand, that a new elc file is used in emacs, the > compilation to eln happens async and when finished the eln > file is not loaded over the elc file. Therefore I have to > restart emacs in order to actually use the eln file. Well the .eln should be loaded over the .elc, but happen in a transparent way. > I do not understand why my org-usage in step 2 didn't > trigger the compilation of the eln file. Is a little hard do undestand what is going on from here. Actually this mechanism (the one that triggers the compilation) will be radically simplified once the dynamic scope support comes in. I've a branch for that already and I've 'just' to make it work :) I suggest we rediscuss this with the new mechanism in place given it should substitute the current one. Thanks for trying the branch! Andrea -- akrl@sdf.org From MAILER-DAEMON Thu Jun 11 15:21:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjSlY-0005Jl-Dt for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 15:21:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40306) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSlW-0005JC-5t for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:21:30 -0400 Received: from mail-qk1-x741.google.com ([2607:f8b0:4864:20::741]:42420) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjSlT-0003wG-Br for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:21:29 -0400 Received: by mail-qk1-x741.google.com with SMTP id l17so6703938qki.9 for ; Thu, 11 Jun 2020 12:21:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=RMUkhjvw850U0iSLNjuEG4ycTN+t7haEXN1zD/U694Q=; b=IXF5pz78/sQ+Xg/I8lY5HScI2ATkBDgCMCNmLeMOF6d0xLepepzT1E9fLfKQChujgU ZHHNNnqXGs8nGRH7aanw3M8woei6FdR7JWR/g9twyyFUPEK9QLN9Y50qQAoAbktJRVW9 hfruvUO0JPl/k2M5Xl0S3nM0bmbr13RVWZTIc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=RMUkhjvw850U0iSLNjuEG4ycTN+t7haEXN1zD/U694Q=; b=px/jFrwlKHUrr6RkiYqQPdnOGibRQ/nvWZw8XIrT//Ef0JQgFr4JoapeX2w5QHbCMp yquIxKSxXUXQBXp9YL2zPwFGYKZE47PEZXkI0JhFmBl8GA/YDjteoa8jft0k9scUCngb W7HZqBQaT1/txAMlqqW/AO60Jl7nGkG76ebniIlHayyNI7H0FKokpIeQ1UCBBjiOkaK1 M5ZNtxa+wnI6utu5KudYraxutjDsYSuUVPFdr7Dc0jzPZ7WMQZY4IP8JV/xo1a2svpjf OZWZbcZ4LDxlo16Pb2MtxLbuIQ2Sj5Ql06mNS9NAKtOkYA3RwiRehMRu5wJRcYEv7Agm aVDQ== X-Gm-Message-State: AOAM531Eoime3wFPDBkq1MOu2/sq5I8u6WmIZbfyjk7NBzxyrhcTgxHd t58VsblkuVOvzWYE7OA8iXQZ/2fA7c48JQ== X-Google-Smtp-Source: ABdhPJwXue51dNEHe13Q2CC91OoLe3EhSaMT7O+JHaRaXqT32ne1TXKbjtDObiELdlFT3zJrYngHuw== X-Received: by 2002:a37:688e:: with SMTP id d136mr9551051qkc.486.1591903280644; Thu, 11 Jun 2020 12:21:20 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id r77sm2729941qke.6.2020.06.11.12.21.19 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 11 Jun 2020 12:21:19 -0700 (PDT) From: Ted Zlatanov To: Bruno =?iso-8859-1?Q?F=E9lix?= Rezende Ribeiro Cc: Rudolf Adrian Kral , GNU Emacs Developers Subject: Re: [PATCH] Enable passwords to be functions in erc-services Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <87sgi24ry5.fsf@gmail.com> <87h7xugisx.fsf@oitofelix.com> <87o8s1gug1.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Thu, 11 Jun 2020 19:21:18 +0000 In-Reply-To: <87o8s1gug1.fsf@gnu.org> (Amin Bandali's message of "Thu, 09 Apr 2020 00:21:50 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::741; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x741.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 19:21:30 -0000 On Thu, 09 Apr 2020 00:21:50 -0400 Amin Bandali wrote: AB> +1. Rudolf, what do you think about sending a new version with examples AB> using the auth-source library, and maybe even the newer auth-source-pass AB> as well? erc.el uses auth-source.el so I agree this makes sense to add to erc-services.el. Compared to Rudolf's proposed patch, I think this will have the advantage of less code and easier integration for the user. Maybe something like this (in the authinfo+.json format) would work for the users? machine MyService login myuser password mysecret machine freenode login user1 password secret1 machine freenode login user2 password secret2 [ { "machine": "MyService", "login": "myuser", "password": "mysecret" }, { "machine": "freenode", "login": "user1", "password": "secret1" }, { "machine": "freenode", "login": "user2", "password": "secret2" } ] so then you'd just call: (auth-source-search :host "MyService" :user "myuser") auth-source-pass.el provides a backend for auth-source.el, so it will be usable like all the other storage backends (.gpg files, plain files, JSON files, Secrets API, etc). I don't think any extra work will be required on the ERC side or the user side. Ted From MAILER-DAEMON Thu Jun 11 15:23:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjSnJ-0006Vs-Ac for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 15:23:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41230) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjSnH-0006SW-PF for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:23:19 -0400 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:45099) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjSnF-0004Th-KO for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:23:19 -0400 Received: by mail-vs1-xe2b.google.com with SMTP id d21so4002896vsh.12 for ; Thu, 11 Jun 2020 12:23:11 -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 :cc:content-transfer-encoding; bh=/o0RklyXqbLwOZsaze1Z3IbclzE3QbJ9e/mmFL/PYmQ=; b=umKpeGnibtvT3LT8cmbt9nC4btUC85sUlmLDiRN+fW0Ia7o549vraJpY74GaWhjL0H 6kmpnWa8Q54Vs4djCduxTRIbVAwK8GxxGJXWEjxnOJ87DkmWZOJqR0uDcoQo7Al/7XO+ Dnajlrkepe0hPiqU2jLC5bNaw+LF7aRvf0qBN/q/vCXoV1gs/ty4tNMXuVR5vqORhhQF 84WqOOs4GIOPM4JUElOV4+q6Tv/kUMD6oeYzEI6IQqQKWkPpqAphX5c6ap6e7BAbdRHW RmVCU57AL9Ym3mytmYeSR9k+v0oD+bSVkUY6bqWq6rFe1ONG7OtzjeLufcJ8D9lz1AaU 4J6Q== 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:cc:content-transfer-encoding; bh=/o0RklyXqbLwOZsaze1Z3IbclzE3QbJ9e/mmFL/PYmQ=; b=F4xZ/Phq28u0R/F6c+KNUNY7cg9zMAsy63mwWto0dmcDfgj352SvI6XBAVH570D30P 43JbBZ/i4dIBFTpjpMAQJmo754iQ7PbEoXLYZUbiBCVKelGMpy1vLPTSLou7ttHoIOql xWlwI7WQFZN1UxTw+c34WzQ2fkjXe/dv68XRw0rVA4nUaLMadAgEp+5AFEjXbK2I+AzQ Sffnyvm2LzTJXbxC5mY8WJcMtweKU8Efbqk51M9/43EsmJQ32HFRWKci9rvJwdfG5E2n BJW6kd+H2fiYRY0lBV70tBV3ureozVXWgu3jMRPtYLdhXta8+BgdgwQw4/cTBtIpmv1R mhJw== X-Gm-Message-State: AOAM532nX1TIif+XIyiFTb47zv4IbPnfc9HyOstbVvcADmwsfoQNG5ox ZBvafDq7oOPywnUkMy9cSMNCKbJD9Pa85P8kzTU= X-Google-Smtp-Source: ABdhPJxDxXycS/devpB9iCnkLWo7MvBq/2aVRBXrB2OUqKPiT7kGrNVtM47p+3+/L/iime6xXBGabE9vBgO7uCCi3Ws= X-Received: by 2002:a67:8a83:: with SMTP id m125mr7938703vsd.199.1591903390737; Thu, 11 Jun 2020 12:23:10 -0700 (PDT) MIME-Version: 1.0 References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> In-Reply-To: From: Yuri Khan Date: Fri, 12 Jun 2020 02:22:58 +0700 Message-ID: Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) To: =?UTF-8?Q?Mattias_Engdeg=C3=A5rd?= Cc: Stefan Monnier , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::e2b; envelope-from=yurivkhan@gmail.com; helo=mail-vs1-xe2b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 19:23:20 -0000 On Thu, 11 Jun 2020 at 23:15, Mattias Engdeg=C3=A5rd wro= te: > For example, white text is decidedly more readable than black onto a back= ground of #8b7500 (gold4) everywhere. Of course, your equipment may be diff= erent! My equipment (which is two myopic and slightly astigmatic eyes looking through corrective glasses at a 24=E2=80=B3 IPS-based Dell P2415Q running a= t native resolution and with contrast and brightness knobs tuned to not be painful but still pass the tests at ) says that shade of gold in fact performs okay in all four scenarios: gold on black, gold on white, white on gold, black on gold. > Precision may be more important when the same predicate is used for selec= ting prearranged palettes for use against 'light' and 'dark' backgrounds. T= his still needs to be investigated. WCAG recommends a color contrast of at least 4.5 for most uses of text below 18pt (or 14pt bold). The range of color contrast (1 to 21) and the inherent properties of real numbers (4.5^2 =3D 20.25) suggest that there is only a fairly narrow band of colors that satisfies that contrast level against both white and black. Further, if you were to pick a palette consisting of white, black, and multiple colors from that band, you=E2=80=99d get another problem. Namely, = all your text is the same relative luminance. That means you have to distinguish e.g. syntax elements solely by their hue. Users with color vision anomalies might not even be able to do that. A good palette meets or exceeds the recommended contrast ratio against the background for all text colors, and provides at least *some* variation in relative luminance of text colors. From MAILER-DAEMON Thu Jun 11 15:51:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjTEg-0000F4-BB for mharc-emacs-devel@gnu.org; Thu, 11 Jun 2020 15:51:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjTEe-00009R-8m for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:51:36 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:47180) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjTEb-0002j0-Sb for emacs-devel@gnu.org; Thu, 11 Jun 2020 15:51:35 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 2106080292; Thu, 11 Jun 2020 15:51:31 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 6F95E80A1F; Thu, 11 Jun 2020 15:51:29 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1591905089; bh=+hOvJ3vQBXHK6GCABwPDpyOR1NXyUTZTQ73GU0FQiIQ=; h=From:To:Subject:References:Date:In-Reply-To:From; b=inruqWkvzONEBXn3zmbOArar6dZHLrIt0m8TRsFZDTOTatsCKgm4KoEtcPEY4CsyP yfqZggckePbUNWkBq++QCEAvqHCHyEFOMitMKbh4CFY+K0d/PDHzLqFXE2m2k1aHQL 3sdD2YVQV90PnWUs8HUDg7nEYG3Y9xFiTUV26jjdREmGZaTc7LJRpTXI0bi4/Qv5OQ pvg9G8Z8Nlgk10f/Hl1EnsYAnLq//gcz+u/fDmkdJQvRsJtYX8C2gzh+WImV96+4Zh NKnLbSkpis1fMSJNmiwhiyJI28xJ2ExFeUhf42Mws0vrCauQj9LOOUN98LFA6vBoz4 AeVxU9CB42Thg== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id C6401120604; Thu, 11 Jun 2020 15:51:28 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Message-ID: References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> Date: Thu, 11 Jun 2020 15:51:27 -0400 In-Reply-To: (Ted Zlatanov's message of "Thu, 11 Jun 2020 18:31:36 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.092 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 15:51:31 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2020 19:51:36 -0000 > Is there an example using jit-lock that behaves like > prettify-symbols-mode in the following cases? > > * transforms the text when outside it > * temporarily shows the original text when inside it or on its right edge > * updates when the user makes changes Maybe if you look at the `csv-align-mode` in GNU ELPA's `csv-mode.el` (tho it mixes the job of aligning columns and of truncating/hiding the text of columns that are too wide). Stefan From MAILER-DAEMON Fri Jun 12 10:19:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjkWK-00059q-TA for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 10:19:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36892) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjkWJ-000599-7g for emacs-devel@gnu.org; Fri, 12 Jun 2020 10:18:59 -0400 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]:44058) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjkWH-00040G-Gm for emacs-devel@gnu.org; Fri, 12 Jun 2020 10:18:58 -0400 Received: by mail-lf1-x136.google.com with SMTP id w15so5557921lfe.11 for ; Fri, 12 Jun 2020 07:18:50 -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 :cc:content-transfer-encoding; bh=C+sXfrN/tQRqfa6gZXoDkN5EvOcWvjGFHGbj3Y+Fdp0=; b=qE2hJiuZqcppWnHzWHI6+2fZ4tlUnkmsOIVOhmpy/8v1XE/afK6K1zv9TDSvdxHDMD tLzZifLtoiw2C/lEUR2AMdwROCBRkzlfeFNCzzZNtlGc4LE4MugqngM4/HUDS5iQO/KO qAAIVtn4BUqg1gQ5iXFUrCA2DaxZz9+Fv7yD9aSVIjcZeXTqFcPpLIP5SqGe8vXnPQdU B3ZIo1NyZdm8is1W7P89WLZCb32tJdRQqLtWgZ/F3HUzqhkGOLyvk8/ylYYAiilUM4E9 RLfDq/Of3hKbpFR/NGmrN28v7H4+CIV6/HQxVdvLnR2yCVMnkBYgcIIUgvx8UgMwUGq3 8KDw== 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:cc:content-transfer-encoding; bh=C+sXfrN/tQRqfa6gZXoDkN5EvOcWvjGFHGbj3Y+Fdp0=; b=BxrcMMWNNCI6wOfxjxe6bfnQmmUjnWCXP+d45u/C0oXuqEJOlIJF+OGXQ1ueevp8ZT AbxgfxkjtcUxIECveCX5l/c9UkZL+K/B+U3AyvCJJLs8vjD5xZU2tQuFyYh4jmWkX0U2 6iXhhggTJtaVi+BrtDgzN24PbLH2xN1Qr65uNAvxQAhg0YdR4M7ioXcX05AzSh0rD4i1 BtVziI2LqLEZWzGHZOHz1o+4Q2nJumtoRo38OYNxTzc6dMG6yf74UA84zr9U7olxCsxq BiSIyNsKn4jVxoGAtG62jD/mkF+BSDNSGuDIKNbwEB7KlPGxesXv/pCPlJxGz0jmg4bf +Veg== X-Gm-Message-State: AOAM532SdKxnF39yO1P9JJmKbvbRf+UGM8XMlmoiJic6lEeCjWIcZNJ3 1qIeH2zhll2Jala/pimmnR2sfiAVBJL2v1nd3mo= X-Google-Smtp-Source: ABdhPJw63pSAgkU1flaARruGkLcPHzxR1Wr+ihM6hS9zA09UPAl7wP7CBdsl/p5y2a3Hkj6o+g9h+MUMdu2ycPBLk+w= X-Received: by 2002:ac2:4569:: with SMTP id k9mr7025474lfm.105.1591971529057; Fri, 12 Jun 2020 07:18:49 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Philippe Vaucher Date: Fri, 12 Jun 2020 16:18:22 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::136; envelope-from=philippe.vaucher@gmail.com; helo=mail-lf1-x136.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 14:18:59 -0000 > [I take the liberty from answering to emacs-devel, since you > seem to be requesting that I weigh in on your work, which is > public] > > > I'm surprised not to hear from you on this. Maybe you missed it? > > > > IIRC you were the one pushing for me to implement it, maybe I misrememb= er. > > You don't. I have variable amounts of energy to invest in Emacs > development, and I didn't think my input would be crucial here. > Sorry about that, and thank you for your work. Thanks for your feedback :-) > I read your email, but was discouraged from trying your program > since you made it depend on s.el and dash.el which are libraries > I don't use and steer clear of. Certainly with 120 lines of code you > can write it without s.el and dash.el, especially now that you've > supposedly become accustomed with Emacs's API's. Yeah, I can rewrite it without dash/s.el. It was just the fastest way for me to get something working. As I said if there is interest, I can rewrite it without these dependencies. So far I'm not sure there is interest beyond me and probably some people outside of emacs-devel. > You approach is completely different from what I imagined: I was > thinking of creating new sections in the manual itself, or creating > a whole new manual, without having to actually write the contents > for it. It could be called the "Elisp API manual", or some better name. > One could visit that API manual from inside and from outside Emacs, > just as one does now with the normal Manual. A minimal amount of > Elisp code would allow some C-h function to take me there. Well there's two things: the "prefixed" `C-h f` and the "Elisp API manual". I think the prefixed `C-h f` (prefixed-manual-describe-function) is pretty much exactly what I want as a user. About the "Elisp API manual" (prefixed-manual-overview), this is really just a rough draft and it needs much more work. This one I have less interest in, but thanks for your description of what you'd like it to be. > In other words, as you know, a manual in Emacs is extracted from the > Texinfo source (.texi files) into various output formats. I was thinkin= g > about code that performs this extraction into a new output (a new manual, > or a new section in the existing Elisp manual) including all those format= s. > Without needing to touch the (.texi) files themselves. Maybe this could > be done with a special Texinfo macro, maybe redefining its built-in > @defun macro, which is what Emacs uses to introduce a function > definition. That was my idea. Well I don't know texi files yet, but I think it'd be fairly easy to write some helper elisp that generates what you want based on my code, or some variations of. I'm not sure I have time for that, this project was more of me musing around with what emacs would look like with a prefixed api, before resuming with the s.el concrete proposal. I don't think I have enough time to implement your idea, but we'll see who knows. > Hope this helps, > Jo=C3=A3o T=C3=A1vora It does ;-) Philippe From MAILER-DAEMON Fri Jun 12 11:50:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjlx7-0001Sa-Lz for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 11:50:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52390) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjlx5-0001Rn-FV for emacs-devel@gnu.org; Fri, 12 Jun 2020 11:50:43 -0400 Received: from mail150c50.megamailservers.eu ([91.136.10.160]:40694 helo=mail50c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjlx3-0005Qg-3Z for emacs-devel@gnu.org; Fri, 12 Jun 2020 11:50:43 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591977036; bh=/PEP4X/p6yNOKAElznj2K6D4LHhBfi+vR1PGE55nVn0=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=M6KoZMX/fdhnaWy+R1bLG5D/1EKpQBHQ9I0/HcBlpimgD4pZCNQC5Flkx7rXbh79W CVZ3Wyqmvn468Zz8dZ1bv/+215qh5RONSJKmKL4h4OW99aNIKl0U+kcCmRDSIXY+VP 4LgApJeg6xd1URuUm3G69a62FgOp1o5ttkQfH7aw= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail50c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05CFoWAe025785; Fri, 12 Jun 2020 15:50:34 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Message-Id: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> Content-Type: multipart/mixed; boundary="Apple-Mail=_EB755992-E2FD-40AE-B803-404CDFE8B466" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) Date: Fri, 12 Jun 2020 17:50:32 +0200 In-Reply-To: Cc: Stefan Monnier , Emacs developers To: Yuri Khan References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1B.5EE3A3C6.003C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=NoevjPVJ c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=I8twSn5vt4Fg28AA-OYA:9 a=CjuIK1q_8ugA:10 a=XRvUXlFVGjt75wj9k9sA:9 a=1OfwrDeanrQA:10 Received-SPF: softfail client-ip=91.136.10.160; envelope-from=mattiase@acm.org; helo=mail50c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 11:50:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 15:50:43 -0000 --Apple-Mail=_EB755992-E2FD-40AE-B803-404CDFE8B466 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 11 juni 2020 kl. 21.22 skrev Yuri Khan : > My equipment [...] says that shade of gold in fact > performs okay in all four scenarios I have no reason to doubt your observations. Let's try a plebiscite! * * * Dear Emacs developer or user, Please load the attached code (any Emacs version), and run M-x = contrast-compare with various cutoff values on your favourite system, to = find what value is best for readability of the colour names (first = column). Colours with luminance (last column) below the cutoff will be use white = text, others black. It is mainly Emacs in graphical (non-TTY) mode that = is of interest. Please reply (to emacs-devel or to me) the following pieces of = information: * the cutoff value you found optimal * system information: window system, screen, anything you think is = relevant * whether you use a light or dark background in your Emacs --Apple-Mail=_EB755992-E2FD-40AE-B803-404CDFE8B466 Content-Disposition: attachment; filename=color-contrast.el Content-Type: application/octet-stream; x-unix-mode=0644; name="color-contrast.el" Content-Transfer-Encoding: 7bit ;;; -*- lexical-binding: t -*- (defconst contrast-default-cutoff 0.325) (defun contrast-compare (cutoff) "Compare black and white text on various colours." (interactive (list (string-to-number (read-from-minibuffer "Cutoff value: " (number-to-string contrast-default-cutoff))))) (with-current-buffer (get-buffer-create "*Contrast comparison*") (erase-buffer) (let ((cols nil) (seen (make-hash-table :test 'equal))) (dolist (name (defined-colors)) (let ((cv (color-values name))) (unless (gethash cv seen) (puthash cv cv seen) (push (cons cv name) cols)))) (insert (format "cutoff = %f\n" cutoff)) (dolist (c (reverse cols)) (let* ((cv (car c)) (name (cdr c)) (hex (apply #'format "#%02x%02x%02x" (mapcar (lambda (x) (/ x 256)) cv))) (rgb (mapcar (lambda (x) (/ x 65535.0)) cv)) (r (expt (nth 0 rgb) 2.2)) (g (expt (nth 1 rgb) 2.2)) (b (expt (nth 2 rgb) 2.2)) (y (+ (* r 0.2126) (* g 0.7152) (* b 0.0722))) (fg (if (< y cutoff) "#ffffff" "#000000"))) (insert (propertize (format " %-20.20s " name) 'face (list :background name :foreground fg)) (propertize (format " %s " hex) 'face (list :background name :foreground "#ffffff")) (propertize (format " %s " hex) 'face (list :background name :foreground "#000000")) (format " %.5f\n" y))))) (let ((pop-up-windows t)) (display-buffer (current-buffer))))) --Apple-Mail=_EB755992-E2FD-40AE-B803-404CDFE8B466-- From MAILER-DAEMON Fri Jun 12 12:02:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjm8j-000164-3F for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 12:02:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjm8h-00012z-3h for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:02:43 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:41769) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjm8e-0008Go-Kp for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:02:42 -0400 Received: by mail-wr1-x42c.google.com with SMTP id j10so10264140wrw.8 for ; Fri, 12 Jun 2020 09:02:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=7ncUZGTQsWJ3Q3wk6vCU/dEb3BXLFgovr+HBhVS35hE=; b=PijJIoYYEJeD3wovPh1YllE98QNPG5mksTJ2i3cHGebVxdjTH0dH+wWOCDow6/ACCy bvZ9Gnba2m3bVJ9Nt+lRgjsOzqykZFWRO5HLBlOrpBjRBf4G6So6b5Q0BwaE8MkdIc2F yxSpoL33DhExVU07btoNoI3q2Me3NbHMFDQ6/MoodEh0bDIJxQLPhao8cRHNm9UsDmuS z2vMg51lSC2rOX4JkuN8xTYC8vV/ALLecniJp32Wm+j8WkEWIQ/chdPtXfc7s/jqgydj VBV/1O5CIv5Is62lNitQhbp2LwQeuNAy3pzo6Me07hRsthv4z22vOYO/Yr98c5nR5Wd5 WliQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=7ncUZGTQsWJ3Q3wk6vCU/dEb3BXLFgovr+HBhVS35hE=; b=bZu5m3SOJUb+h+V98qnCjBWn6XwNUA7Lzv80ZU3dUrxE5LFBJdEOi4xPHkvDSbUW68 M9Flp8PdpBqxoQa27aSDyDjRhroMhqlM69VvkgT/xrl++uPeKujtgsdUb1+sij/zJmL/ BRxEuBthYFr3Tc/z7cK+X3XVLlSd/doRRknOfHFYS2f83IJZaFX/EgBNPQaOQjfv1gO/ Z5DHu7a7303iQEVAsmgMjYiuqN8Gw43dBmxAnN9cvQ4YarYeWv7UwfFuDLvk/jJzc+9D 9k8d6ybBuFhkAfsBXGwZxh0QtqAZhwBiwC/Jz20qyr9NMcReqvUaLwQYHRvXZ/wMDQYF G7dg== X-Gm-Message-State: AOAM531HMk7izvfePQDEBTIHxaXC2xn51h9MFXh0CAW4H8BGR1tByGN8 d4551iPpJvFLk/baejCtWsQvYgltEMc= X-Google-Smtp-Source: ABdhPJyzJinf71rziRAMa8hCWdl77Rup1MBbYHuOGmp7mEWsN4EJ9jD6cKm0AaeJlgVLfMM0QvTF+Q== X-Received: by 2002:a5d:4d01:: with SMTP id z1mr16781352wrt.29.1591977752480; Fri, 12 Jun 2020 09:02:32 -0700 (PDT) Received: from krug ([2001:818:d820:9500:824a:171:15a:2213]) by smtp.gmail.com with ESMTPSA id b8sm10994835wrs.36.2020.06.12.09.02.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:02:31 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Philippe Vaucher Cc: emacs-devel Subject: Re: Prefixed manual describe-function and api overview In-Reply-To: (Philippe Vaucher's message of "Fri, 12 Jun 2020 16:18:22 +0200") References: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) Date: Fri, 12 Jun 2020 17:02:29 +0100 Message-ID: <87zh98xofe.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=joaotavora@gmail.com; helo=mail-wr1-x42c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 16:02:43 -0000 Philippe Vaucher writes: >> You approach is completely different from what I imagined: I was >> thinking of creating new sections in the manual itself, or creating >> a whole new manual, without having to actually write the contents >> for it. It could be called the "Elisp API manual", or some better name. >> One could visit that API manual from inside and from outside Emacs, >> just as one does now with the normal Manual. A minimal amount of >> Elisp code would allow some C-h function to take me there. > > Well there's two things: the "prefixed" `C-h f` and the "Elisp API > manual". I think the prefixed `C-h f` > (prefixed-manual-describe-function) is pretty much exactly what I want > as a user. In my opinion, you're confusing/conflating two things, again: - The ability to have, at a glance, nicely documented, and nicely discoverable, the list of the functions associated with a certain data type, or a certain topic.; - To have that organization be provided by the existing or a new prefix convention; It seems we both want the first objective. But you seem want it with -- or by means of -- the specific side-effect of the second. I don't that side-effect at all, and this was already discussed extensively, I think. Therefore my proposal, the "thing I was pushing for" is a way to have the first objective without what I (and others) view as the drawbacks of the second. >> In other words, as you know, a manual in Emacs is extracted from the >> Texinfo source (.texi files) into various output formats. I was thinki= ng >> about code that performs this extraction into a new output (a new manual, >> or a new section in the existing Elisp manual) including all those forma= ts. >> Without needing to touch the (.texi) files themselves. Maybe this could >> be done with a special Texinfo macro, maybe redefining its built-in >> @defun macro, which is what Emacs uses to introduce a function >> definition. That was my idea. > > Well I don't know texi files yet, but I think it'd be fairly easy to > write some helper elisp that generates what you want based on my code, That would be very strange IMO, to write this in Elisp. It would be even stranger to write it based on your code. That said, everything can be written in anything. > or some variations of. I'm not sure I have time for that, this project > was more of me musing around with what emacs would look like with a > prefixed api Indeed, that's nothing like I want. I don't want a "prefixed API" at all. I want a nicely documented and discoverable API. Personally, except for some cases here and there, I think this already exists. I don't have much trouble navigating the existing manual and the documentation mechanisms, I'm personally fine with the ones I know. But that's not the case with you. You were (or still are) very confounded by them. Therefore, I suggested a documentation source that would help you, and presumably many more users like you, to learn Emacs's existing Elisp API. I suggested this because that would presumably solve your difficulties and wouldn't interfere negatively on the organization and working methods of users like me. Furthermore, I also suggested you do that work yourself, because you're the person that originally brought the problem to the table and argued extensively about it. Jo=C3=A3o From MAILER-DAEMON Fri Jun 12 12:17:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjmN9-0006lE-Oj for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 12:17:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjmN7-0006kv-Vq for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:17:37 -0400 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]:44478) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjmN3-000336-Vk for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:17:37 -0400 Received: by mail-qk1-x72a.google.com with SMTP id c14so9461149qka.11 for ; Fri, 12 Jun 2020 09:17:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=Ka+rtkLqophSzToqKNwnQWgoHlTO3gO8aOe2HKRiSTM=; b=bQAeXXaVnCEjl2g4ZqFJnvOQuiXYmdz5DQcyrLp2AOsvYXWfLaGvsmuKhfKhD2rtXH 2MV0mh116wH0ESkfolIcRCocsBR20F+nP5pHtOHRWzdmkQwIKyFcFc9he03TWyvxoSoY onrq9WhYvG8NhhLPLD3usYBkQjbdvAdofjsuw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=Ka+rtkLqophSzToqKNwnQWgoHlTO3gO8aOe2HKRiSTM=; b=be5zgaVFw6WTN8YY0mQ0NNP+/Aqu3Fq4WAXuF8ONdDAcbityUoIpFc1g6IMN6oh4OQ wdNvh9iqbW7jTv7y66pMPmmTAznki6tk+LtI9izZC5nZxpvx3xe94b6KYy1mGY2QQh7H 3WMe65DXfE4MdcYlQq2c0gUWD+184KN5MihJpjmIGTB8JvDhN+f5ub0DnEUVk/bYiVVJ 0EUx7PNn7B9SOpGVPeTvu5a8fax6IBOKF+HaBaI2JjJusu11uN4sTns//mBulpWHM6jS NSX+CAbBveocxuuQVi1hJyyNZqJP3FmfrCwj9OTRWBBsp+PLmoXUb84tBczbEfHkBFF8 Y1sQ== X-Gm-Message-State: AOAM533PWPMtl8wCmd+NdY+cur1nFSDn+LbZHrL8l7kF342LzjUnN3u1 2n0DpmVs3kYOstpuSy/G8FBX7dLewRIFHA== X-Google-Smtp-Source: ABdhPJxqNDpgyCjfhjbAs3Y8JgAwUR4jy1qCiiFknsuwLOv8SLzUiz9ZTWXKw3LsUlpIPyhcFvazbQ== X-Received: by 2002:a37:4048:: with SMTP id n69mr3644243qka.344.1591978647698; Fri, 12 Jun 2020 09:17:27 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id d78sm4754630qkg.106.2020.06.12.09.17.26 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Jun 2020 09:17:26 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 12 Jun 2020 16:17:25 +0000 In-Reply-To: (Stefan Monnier's message of "Thu, 11 Jun 2020 15:51:27 -0400") Message-ID: <4krg9s2y.fsf@lifelogs.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::72a; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x72a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 16:17:38 -0000 On Thu, 11 Jun 2020 15:51:27 -0400 Stefan Monnier wrote: >> Is there an example using jit-lock that behaves like >> prettify-symbols-mode in the following cases? >> >> * transforms the text when outside it >> * temporarily shows the original text when inside it or on its right edge >> * updates when the user makes changes SM> Maybe if you look at the `csv-align-mode` in GNU ELPA's `csv-mode.el` SM> (tho it mixes the job of aligning columns and of truncating/hiding the SM> text of columns that are too wide). Hi Stefan. Thank you for the suggestion. I spent a few hours in that direction, but prettify-symbols-mode was just too easy to extend... I've pushed my proposed patch to scratch/tzz/auth-source-reveal-mode as follows: * allow regexps in prettify-symbols-alist using a new extended format. I wasn't sure here if I should go with the current format, and the replacement lookup does extra string-match calls, so it's not ideal. This specific extension was requested fairly often, looking back at the last few years on various Emacs forums. * define a new local variable prettify-symbols-compose-replacer for the function that looks up and replaces the symbol * create the new auth-source-reveal-mode that behaves as proposed, both in JSON and in netrc/authinfo buffers. It warns if prettify-symbols-unprettify-at-point is nil, since I think the experience is much less pleasant without it. It doesn't check syntax as carefully as prettify-symbols-mode. * document the composition layout format enough that users can customize auth-source-reveal-hider to show a fancy string instead of a single character. I think this will appeal to prettify-symbols-mode users in general, since I have seen quite a few hacks for it in various Emacs forums and even a helper library https://github.com/Ilazki/prettify-utils.el/blob/master/prettify-utils.el * the new code in auth-source.el and prog-mode.el is much less than the other approaches I tried, and much much less confusing. I like that :) Let me know if you have strong objections or any suggestions, otherwise in a day or two I'll document and push this patch. Thank you Ted From MAILER-DAEMON Fri Jun 12 12:22:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjmS9-00020S-GQ for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 12:22:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjmS8-00020M-LI for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:22:48 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:49404) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jjmS6-0003yM-Bo for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:22:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=From:In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:To:Date; bh=nm00zW2BbVUm58n1faLA3zaABHY8ux3GVfk5rn7E15w=; b=XyztBrEHz3qMyGYQnsYfPq0XHd65G133OQIguGP4rXOHEG60cC12xCFOICIVpMS9Mfwk+AQS5zwuk1F4YX6gpqHl3Ec4jU6JFatimI7eEKB9q2KBN3AhbqVuf5hopY8S5r+kaU584A+EDa4Ne5MabVRSUWFfx0SdQIGK4U9pzseDE14YC1BWONViu8+Zn//IFrNBqszF7cErEl4NC5H06xDXr4tuJUM5V3mD8aBo21nlTsBZHAflBlX5d5UdCXyEkTaUM2ML/CY7m+HSUdRmlo9mjIJZmzQmdunKdmCwvXgwm1EEpIAsjk4ZcA8HpujvEzbCQ0KSAevbVhkK7y4VlQ==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jjmRx-0000iU-Tl for emacs-devel@gnu.org; Fri, 12 Jun 2020 18:22:37 +0200 Date: Fri, 12 Jun 2020 18:22:37 +0200 To: emacs-devel@gnu.org Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) Message-ID: <20200612162237.GA29484@tuxteam.de> References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="pWyiEgJYm5f9v55/" Content-Disposition: inline In-Reply-To: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> User-Agent: Mutt/1.5.21 (2010-09-15) From: Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 12:22:38 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 16:22:48 -0000 --pWyiEgJYm5f9v55/ Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Jun 12, 2020 at 05:50:32PM +0200, Mattias Engdeg=C3=A5rd wrote: > 11 juni 2020 kl. 21.22 skrev Yuri Khan : >=20 > > My equipment [...] says that shade of gold in fact > > performs okay in all four scenarios >=20 > I have no reason to doubt your observations. Let's try a plebiscite! >=20 > * * * >=20 > Dear Emacs developer or user, >=20 > Please load the attached code (any Emacs version), and run M-x contrast-c= ompare with various cutoff values on your favourite system, to find what va= lue is best for readability of the colour names (first column). >=20 > Colours with luminance (last column) below the cutoff will be use white t= ext, others black. It is mainly Emacs in graphical (non-TTY) mode that is o= f interest. >=20 > Please reply (to emacs-devel or to me) the following pieces of informatio= n: >=20 > * the cutoff value you found optimal You mean: where the color name is most readable against all backgrounds? 0.375 (although 0.325 gives fine results too) > * system information: window system, screen, anything you think is releva= nt X on Gnu/Linux, thinkpad X230 with the cheaper screen (no IPS) > * whether you use a light or dark background in your Emacs Dark Emacs (but not too dark, #333333-ish) Cheers -- tom=C3=A1s --pWyiEgJYm5f9v55/ Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl7jq80ACgkQBcgs9XrR2kZERACfePMDdKH7QTALc6YRIhevUDRp uvEAn3/Hk+k0YfzrogXeMUoS+Ejo3T7z =6QPN -----END PGP SIGNATURE----- --pWyiEgJYm5f9v55/-- From MAILER-DAEMON Fri Jun 12 12:35:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjmeM-0002Ph-CD for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 12:35:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjmeL-0002Ok-NS for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:35:25 -0400 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]:39173) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjmeI-0006wX-EU for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:35:25 -0400 Received: by mail-qk1-x72a.google.com with SMTP id w3so9556120qkb.6 for ; Fri, 12 Jun 2020 09:35:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=262lxgbEm6wqmARKYWkJNq5wSLHFpdl1L+4Isw0KthY=; b=KJxq6mwO7TljP3L5GvkDZK3CrHHO7ZkXhcY2T236qNKSXxYHmUFI/R8k988Pwifyq+ Sm8ezQ6nprbgstIiuv4XCgtPN7tSjbSf3GwVr1TQZ7ft4Kqd0c/qD/gKEvIB/XZOc30C NovqaorzBZYd4/2OxrToVeINOIV3EMLQr2xfd4zq8qaqzLGz1tqpRepG+hKasU88xnvM L02iX4/HBPD+mB9/mhqf+4FFDC2omccVbpQW1K9pfdsTThJ9rTTJdjATRxOg2z9V0bgc txddlaZIaZRLer2wUSWztVAVQSEkw1pZ1d1vzwWYBMZOxzzSO/apQZpgROZHl2WemWN7 RQ3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=262lxgbEm6wqmARKYWkJNq5wSLHFpdl1L+4Isw0KthY=; b=AFqjkqKMxStRaQyErTKSNnas9WE2jFm4rqvCBEjjPvnnHMoxx9YvjXKp6y2WhQfhj2 68aXsIDxmjiOmzOL0NWjCRAPmmrH8cmjqNT9Uz9XixZML1G7SMY7IbonC384MY7uua9y xSjLKOqIjxenxZIrZ05/QZ+Jhh6Uek29XFjkVCHXCuKK+ucjmyP35mEHFKLSOlfPPF35 5F898+vQZKrYcKNiW+DxQeWB3kuDT604otzOYIGyF/LyhDd3LrdtDmj91qomyuD5BHhK dnRtQVf7HLAGfjqv9rv49QNfNQfQUMIT9bLOxYI0Ehe6cJ0i9JqmXYUa0TpPlW23wWgC pJPQ== X-Gm-Message-State: AOAM532GrX1fsjEbA0xk0ZUt56hRahloJDf6uv+foE1yI8nfLtQGINnb o5e8UGvZDAPF7DQfYZr3bCGlMzau X-Google-Smtp-Source: ABdhPJwiiL++mnxbJ9pStZQNm9n1/Ks2l5z2DSaWfJGkcPDhQ6jBsYYT4dLTpXeEzBDa8MmjyM/63A== X-Received: by 2002:a37:9a57:: with SMTP id c84mr3968267qke.248.1591979714292; Fri, 12 Jun 2020 09:35:14 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:7d16:396:5437:aae1? ([2601:184:4180:66e7:7d16:396:5437:aae1]) by smtp.googlemail.com with ESMTPSA id 207sm4792593qki.134.2020.06.12.09.35.12 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 12 Jun 2020 09:35:13 -0700 (PDT) Subject: Re: questions about correct reveal-mode usage to hide passwords To: emacs-devel@gnu.org References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> <4krg9s2y.fsf@lifelogs.com> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <1864384a-e0a4-8fa0-1185-4393bc104b17@gmail.com> Date: Fri, 12 Jun 2020 12:35:11 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <4krg9s2y.fsf@lifelogs.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2607:f8b0:4864:20::72a; envelope-from=cpitclaudel@gmail.com; helo=mail-qk1-x72a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 16:35:25 -0000 On 12/06/2020 12.17, Ted Zlatanov wrote: > Let me know if you have strong objections or any suggestions, otherwise > in a day or two I'll document and push this patch. If you go this route, I would recommend extracting functionality shared between this and prettify-symbols-mode into a separate library; otherwise, won't you have conflicts between the password-hiding patterns and the prettification patterns? Additionally, I'd be surprised if turning of prettification also revealed passwords. From MAILER-DAEMON Fri Jun 12 12:59:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjn23-00022r-D0 for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 12:59:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55204) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn20-0001xq-FD for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:59:53 -0400 Received: from mail1458c50.megamailservers.eu ([91.136.14.58]:48842 helo=mail267c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn1u-0002fm-Tk for emacs-devel@gnu.org; Fri, 12 Jun 2020 12:59:52 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591981180; bh=ogdl6/2AtiA/Qo1xoi0SRFisUYUlVcVEEjDOBf7/VXw=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=iQ2lkqNUbrX9uHIvR+bcWNwYrN6P36UrXS7n+ZR8f2l8BZt0jNKPdKbVm6qo7p4hs 2T+o6NQgdBPbUGYJzZBsT5qOBIZmO2Dlct9jkA3EpkGaRBCPJZbpK1H1W4kP4fak1N GO1IKm+Ds+R8M1dtQXZ9Ez4HKm7HrQ5B20RlhSQM= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail267c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05CGxb59024478; Fri, 12 Jun 2020 16:59:39 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_17A52FA6-1B50-4295-A89A-61E420771BC8" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing Date: Fri, 12 Jun 2020 18:59:36 +0200 In-Reply-To: Cc: emacs-devel@gnu.org To: Pip Cet References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F29.5EE3B3DF.0019, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=Cf92G4jl c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=E1qGL8Nz7Ylk_U2rP2YA:9 a=CjuIK1q_8ugA:10 a=KvZA1l_tbj4A:10 a=3AzUsQxcQTNn1yNZmDYA:9 a=B2y7HmGcmWMA:10 Received-SPF: softfail client-ip=91.136.14.58; envelope-from=mattiase@acm.org; helo=mail267c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 12:59:42 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 16:59:53 -0000 --Apple-Mail=_17A52FA6-1B50-4295-A89A-61E420771BC8 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii 8 juni 2020 kl. 14.26 skrev Pip Cet : > Having two different versions of this seems superfluous We had four versions. Here is a patch replacing them all. Only really tested for NS; someone needs to check the X and Windows backends. --Apple-Mail=_17A52FA6-1B50-4295-A89A-61E420771BC8 Content-Disposition: attachment; filename=0001-Consolidate-RGB-string-parsers.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Consolidate-RGB-string-parsers.patch" Content-Transfer-Encoding: quoted-printable =46rom=20b18f1384091b03af8ce5c7cd96d6a78919303036=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2012=20Jun=202020=2018:12:37=20+0200=0A= Subject:=20[PATCH]=20Consolidate=20#RGB=20string=20parsers=0A=0AUse=20a=20= single=20parser=20of=20colour=20strings=20in=20the=20#RGB,=20rgb:R/G/B=20= and=0Argbi:R/G/B=20formats,=20replacing=20four=20existing=20ones.=20=20= Previously,=0Aerror-checking=20was=20spotty,=20handling=20of=20the=20= rgbi:=20format=20not=20always=0Apresent,=20and=20normalisation=20of=20= the=20result=20was=20sometimes=20incorrect.=0A=0A*=20src/dispextern.h:=20= New=20prototype.=0A*=20src/xfaces.c=20(parse_hex_comp,=20= parse_float_comp,=20parse_color_spec)=0A= (Fcolor_values_from_numeric_string):=20New=20functions.=0A*=20= test/src/xfaces-tests.el=20(xfaces-color-values-from-numeric-string):=0A= New=20test.=0A*=20lisp/term/tty-colors.el=20(tty-color-standard-values):=0A= Use=20color-values-from-numeric-string,=20replacing=20old=20parser.=0A*=20= src/nsterm.m=20(ns_get_color):=0A*=20src/w32fns.c=20(x_to_w32_color):=0A= *=20src/xterm.c=20(x_parse_color):=20Use=20parse_color_spec,=20replacing=20= old=0Aparsers.=0A---=0A=20lisp/term/tty-colors.el=20=20|=20=2058=20= +--------------=0A=20src/dispextern.h=20=20=20=20=20=20=20=20=20|=20=20=20= 2=20+=0A=20src/nsterm.m=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2059=20= +++++----------=0A=20src/w32fns.c=20=20=20=20=20=20=20=20=20=20=20=20=20= |=20157=20++-------------------------------------=0A=20src/xfaces.c=20=20= =20=20=20=20=20=20=20=20=20=20=20|=20112=20++++++++++++++++++++++++++++=0A= =20src/xterm.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2049=20= ++++--------=0A=20test/src/xfaces-tests.el=20|=20=2023=20++++++=0A=207=20= files=20changed,=20176=20insertions(+),=20284=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/term/tty-colors.el=20b/lisp/term/tty-colors.el=0Aindex=20= 39ca2d3627..d50509e105=20100644=0A---=20a/lisp/term/tty-colors.el=0A+++=20= b/lisp/term/tty-colors.el=0A@@=20-923,62=20+923,8=20@@=20= tty-color-standard-values=0A=20COLOR=20(see=20the=20info=20node=20= `(emacs)=20Colors'),=20regardless=20of=20whether=0A=20the=20terminal=20= can=20display=20it,=20so=20the=20return=20value=20should=20be=20the=0A=20= same=20regardless=20of=20what=20display=20is=20being=20used."=0A-=20=20= (let=20((len=20(length=20color)))=0A-=20=20=20=20(cond=20((and=20(>=3D=20= len=204)=20;;=20HTML/CSS/SVG-style=20"#XXYYZZ"=20color=20spec=0A-=09=09= (eq=20(aref=20color=200)=20?#)=0A-=09=09(member=20(aref=20color=201)=0A-=09= =09=09'(?0=20?1=20?2=20?3=20?4=20?5=20?6=20?7=20?8=20?9=0A-=09=09=09=20=20= =20=20=20?a=20?b=20?c=20?d=20?e=20?f=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?A=20?B=20?C=20?D=20= ?E=20?F)))=0A-=09=20=20=20;;=20Translate=20the=20string=20"#XXYYZZ"=20= into=20a=20list=20of=20numbers=0A-=09=20=20=20;;=20(XX=20YY=20ZZ),=20= scaling=20each=20to=20the=20{0..65535}=20range.=20=20This=0A-=09=20=20=20= ;;=20follows=20the=20HTML=20color=20convention,=20where=20both=20"#fff"=20= and=0A-=09=20=20=20;;=20"#ffffff"=20represent=20the=20same=20color,=20= white.=0A-=09=20=20=20(let*=20((ndig=20(/=20(-=20len=201)=203))=0A-=09=09= =20=20(maxval=20(1-=20(ash=201=20(*=204=20ndig))))=0A-=09=09=20=20(i1=20= 1)=0A-=09=09=20=20(i2=20(+=20i1=20ndig))=0A-=09=09=20=20(i3=20(+=20i2=20= ndig))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(i4=20(+=20= i3=20ndig)))=0A-=09=20=20=20=20=20(list=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i1=20i2)=20= 16)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20= =20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20(substring=20= color=20i2=20i3)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A= -=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20i4)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09= =20maxval))))=0A-=09=20=20((and=20(>=3D=20len=209)=20;;=20X-style=20= rgb:xx/yy/zz=20color=20spec=0A-=09=09(string=3D=20(substring=20color=200=20= 4)=20"rgb:"))=0A-=09=20=20=20;;=20Translate=20the=20string=20= "rgb:XX/YY/ZZ"=20into=20a=20list=20of=0A-=09=20=20=20;;=20numbers=20(XX=20= YY=20ZZ),=20scaling=20each=20to=20the=20{0..65535}=0A-=09=20=20=20;;=20= range.=20=20"rgb:F/F/F"=20is=20white.=0A-=09=20=20=20(let*=20((ndig=20(/=20= (-=20len=203)=203))=0A-=09=09=20=20(maxval=20(1-=20(ash=201=20(*=204=20= (-=20ndig=201)))))=0A-=09=09=20=20(i1=204)=0A-=09=09=20=20(i2=20(+=20i1=20= ndig))=0A-=09=09=20=20(i3=20(+=20i2=20ndig))=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(i4=20(+=20i3=20ndig)))=0A-=09=20=20=20=20=20= (list=0A-=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20= =20=20=20(substring=20color=20i1=20(-=20i2=201))=2016)=0A-=09=09=20=20=20= =2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i2=20(-=20= i3=201))=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20= =20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20(1-=20i4))=2016)=0A-=09=09=20=20=20=2065535)=0A= -=09=09=20maxval))))=0A-=09=20=20(t=0A-=09=20=20=20(cdr=20(assoc=20color=20= color-name-rgb-alist))))))=0A+=20=20(or=20= (color-values-from-numeric-string=20color)=0A+=20=20=20=20=20=20(cdr=20= (assoc=20color=20color-name-rgb-alist))))=0A=20=0A=20(defun=20= tty-color-translate=20(color=20&optional=20frame)=0A=20=20=20"Given=20a=20= color=20COLOR,=20return=20the=20index=20of=20the=20corresponding=20TTY=20= color.=0Adiff=20--git=20a/src/dispextern.h=20b/src/dispextern.h=0Aindex=20= 0b1f3d14ae..e1d6eddc41=20100644=0A---=20a/src/dispextern.h=0A+++=20= b/src/dispextern.h=0A@@=20-3514,6=20+3514,8=20@@=20#define=20= RGB_PIXEL_COLOR=20COLORREF=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Lisp_Object);=0A=20extern=20bool=20tty_defined_color=20(struct=20frame=20= *,=20const=20char=20*,=20Emacs_Color=20*,=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20bool,=20= bool);=0A+bool=20parse_color_spec=20(const=20char=20*,=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20unsigned=20short=20= *,=20unsigned=20short=20*,=20unsigned=20short=20*);=0A=20=0A=20= Lisp_Object=20tty_color_name=20(struct=20frame=20*,=20int);=0A=20void=20= clear_face_cache=20(bool);=0Adiff=20--git=20a/src/nsterm.m=20= b/src/nsterm.m=0Aindex=203dc7e1db7c..0e405fc017=20100644=0A---=20= a/src/nsterm.m=0A+++=20b/src/nsterm.m=0A@@=20-2341,9=20+2341,6=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20See=20= https://lists.gnu.org/r/emacs-devel/2009-07/msg01203.html.=20=20*/=0A=20= {=0A=20=20=20NSColor=20*new=20=3D=20nil;=0A-=20=20static=20char=20= hex[20];=0A-=20=20int=20scaling=20=3D=200;=0A-=20=20float=20r=20=3D=20= -1.0,=20g,=20b;=0A=20=20=20NSString=20*nsname=20=3D=20[NSString=20= stringWithUTF8String:=20name];=0A=20=0A=20=20=20NSTRACE=20= ("ns_get_color(%s,=20**)",=20name);=0A@@=20-2386,51=20+2383,31=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20=20}=0A=20=0A=20=20=20/*=20First,=20check=20for=20some=20= sort=20of=20numeric=20specification.=20=20*/=0A-=20=20hex[0]=20=3D=20= '\0';=0A-=0A-=20=20if=20(name[0]=20=3D=3D=20'0'=20||=20name[0]=20=3D=3D=20= '1'=20||=20name[0]=20=3D=3D=20'.')=20=20/*=20RGB=20decimal=20*/=0A+=20=20= unsigned=20short=20r16,=20g16,=20b16;=0A+=20=20if=20(parse_color_spec=20= (name,=20&r16,=20&g16,=20&b16))=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20= NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20nsname];=0A= -=20=20=20=20=20=20[scanner=20scanFloat:=20&r];=0A-=20=20=20=20=20=20= [scanner=20scanFloat:=20&g];=0A-=20=20=20=20=20=20[scanner=20scanFloat:=20= &b];=0A-=20=20=20=20}=0A-=20=20else=20if=20(!strncmp(name,=20"rgb:",=20= 4))=20=20/*=20A=20newer=20X11=20format=20--=20rgb:r/g/b=20*/=0A-=20=20=20= =20scaling=20=3D=20(snprintf=20(hex,=20sizeof=20hex,=20"%s",=20name=20+=20= 4)=20-=202)=20/=203;=0A-=20=20else=20if=20(name[0]=20=3D=3D=20'#')=20=20=20= =20=20=20=20=20/*=20An=20old=20X11=20format;=20convert=20to=20newer=20*/=0A= -=20=20=20=20{=0A-=20=20=20=20=20=20int=20len=20=3D=200;=0A-=20=20=20=20=20= =20while=20(isxdigit=20(name[len=20+=201]))=0A-=20=20=20=20=20=20=20=20= len++;=0A-=20=20=20=20=20=20if=20(name[len=20+=201]=20=3D=3D=20'\0'=20&&=20= len=20>=3D=201=20&&=20len=20<=3D=2012=20&&=20len=20%=203=20=3D=3D=200)=0A= -=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20scaling=20=3D=20= len=20/=203;=0A-=20=20=20=20=20=20=20=20=20=20for=20(int=20i=20=3D=200;=20= i=20<=203;=20i++)=0A-=20=20=20=20=20=20=20=20=20=20=20=20sprintf=20(hex=20= +=20i=20*=20(scaling=20+=201),=20"%.*s/",=20scaling,=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20name=20+=201=20+=20i=20*=20= scaling);=0A-=20=20=20=20=20=20=20=20=20=20hex[3=20*=20(scaling=20+=201)=20= -=201]=20=3D=20'\0';=0A-=20=20=20=20=20=20=20=20}=0A+=20=20=20=20=20=20= *col=20=3D=20[NSColor=20colorForEmacsRed:=20r16=20/=2065535.0=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20green:=20g16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= blue:=20b16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20alpha:=201.0];=0A+=20= =20=20=20=20=20unblock_input=20();=0A+=20=20=20=20=20=20return=200;=0A=20= =20=20=20=20}=0A-=0A-=20=20if=20(hex[0])=0A+=20=20else=20if=20(name[0]=20= =3D=3D=20'0'=20||=20name[0]=20=3D=3D=20'1'=20||=20name[0]=20=3D=3D=20= '.')=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20unsigned=20int=20rr,=20gg,=20= bb;=0A-=20=20=20=20=20=20float=20fscale=20=3D=20(1=20<<=20(scaling=20*=20= 4))=20-=201;=0A-=20=20=20=20=20=20if=20(sscanf=20(hex,=20"%x/%x/%x",=20= &rr,=20&gg,=20&bb))=0A+=20=20=20=20=20=20/*=20RGB=20decimal=20*/=0A+=20=20= =20=20=20=20NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20= nsname];=0A+=20=20=20=20=20=20float=20r,=20g,=20b;=0A+=20=20=20=20=20=20= if=20(=20=20=20[scanner=20scanFloat:=20&r]=20&&=20r=20>=3D=200=20&&=20r=20= <=3D=201=0A+=20=20=20=20=20=20=20=20=20=20&&=20[scanner=20scanFloat:=20= &g]=20&&=20g=20>=3D=200=20&&=20g=20<=3D=201=0A+=20=20=20=20=20=20=20=20=20= =20&&=20[scanner=20scanFloat:=20&b]=20&&=20b=20>=3D=200=20&&=20b=20<=3D=20= 1)=0A=20=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20r=20=3D= =20rr=20/=20fscale;=0A-=20=20=20=20=20=20=20=20=20=20g=20=3D=20gg=20/=20= fscale;=0A-=20=20=20=20=20=20=20=20=20=20b=20=3D=20bb=20/=20fscale;=0A+=20= =20=20=20=20=20=20=20=20=20*col=20=3D=20[NSColor=20colorForEmacsRed:=20r=20= green:=20g=20blue:=20b=20alpha:=201.0];=0A+=20=20=20=20=20=20=20=20=20=20= unblock_input=20();=0A+=20=20=20=20=20=20=20=20=20=20return=200;=0A=20=20= =20=20=20=20=20=20=20}=0A=20=20=20=20=20}=0A=20=0A-=20=20if=20(r=20>=3D=20= 0.0F)=0A-=20=20=20=20{=0A-=20=20=20=20=20=20*col=20=3D=20[NSColor=20= colorForEmacsRed:=20r=20green:=20g=20blue:=20b=20alpha:=201.0];=0A-=20=20= =20=20=20=20unblock_input=20();=0A-=20=20=20=20=20=20return=200;=0A-=20=20= =20=20}=0A-=0A=20=20=20/*=20Otherwise,=20color=20is=20expected=20to=20be=20= from=20a=20list=20*/=0A=20=20=20{=0A=20=20=20=20=20NSEnumerator=20= *lenum,=20*cenum;=0Adiff=20--git=20a/src/w32fns.c=20b/src/w32fns.c=0A= index=20e595b0285a..ab864332e7=20100644=0A---=20a/src/w32fns.c=0A+++=20= b/src/w32fns.c=0A@@=20-864,161=20+864,14=20@@=20x_to_w32_color=20(const=20= char=20*=20colorname)=0A=20=0A=20=20=20block_input=20();=0A=20=0A-=20=20= if=20(colorname[0]=20=3D=3D=20'#')=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(colorname,=20&r,=20&g,=20&b))=0A=20= =20=20=20=20{=0A-=20=20=20=20=20=20/*=20Could=20be=20an=20old-style=20= RGB=20Device=20specification.=20=20*/=0A-=20=20=20=20=20=20int=20size=20= =3D=20strlen=20(colorname=20+=201);=0A-=20=20=20=20=20=20char=20*color=20= =3D=20alloca=20(size=20+=201);=0A-=0A-=20=20=20=20=20=20strcpy=20(color,=20= colorname=20+=201);=0A-=20=20=20=20=20=20if=20(size=20=3D=3D=203=20||=20= size=20=3D=3D=206=20||=20size=20=3D=3D=209=20||=20size=20=3D=3D=2012)=0A= -=09{=0A-=09=20=20UINT=20colorval;=0A-=09=20=20int=20i,=20pos;=0A-=09=20=20= pos=20=3D=200;=0A-=09=20=20size=20/=3D=203;=0A-=09=20=20colorval=20=3D=20= 0;=0A-=0A-=09=20=20for=20(i=20=3D=200;=20i=20<=203;=20i++)=0A-=09=20=20=20= =20{=0A-=09=20=20=20=20=20=20char=20*end;=0A-=09=20=20=20=20=20=20char=20= t;=0A-=09=20=20=20=20=20=20unsigned=20long=20value;=0A-=0A-=09=20=20=20=20= =20=20/*=20The=20check=20for=20'x'=20in=20the=20following=20conditional=20= takes=20into=0A-=09=09=20account=20the=20fact=20that=20strtol=20allows=20= a=20"0x"=20in=20front=20of=0A-=09=09=20our=20numbers,=20and=20we=20= don't.=20=20*/=0A-=09=20=20=20=20=20=20if=20(!isxdigit=20(color[0])=20||=20= color[1]=20=3D=3D=20'x')=0A-=09=09break;=0A-=09=20=20=20=20=20=20t=20=3D=20= color[size];=0A-=09=20=20=20=20=20=20color[size]=20=3D=20'\0';=0A-=09=20=20= =20=20=20=20value=20=3D=20strtoul=20(color,=20&end,=2016);=0A-=09=20=20=20= =20=20=20color[size]=20=3D=20t;=0A-=09=20=20=20=20=20=20if=20(errno=20=3D=3D= =20ERANGE=20||=20end=20-=20color=20!=3D=20size)=0A-=09=09break;=0A-=09=20= =20=20=20=20=20switch=20(size)=0A-=09=09{=0A-=09=09case=201:=0A-=09=09=20= =20value=20=3D=20value=20*=200x10;=0A-=09=09=20=20break;=0A-=09=09case=20= 2:=0A-=09=09=20=20break;=0A-=09=09case=203:=0A-=09=09=20=20value=20/=3D=20= 0x10;=0A-=09=09=20=20break;=0A-=09=09case=204:=0A-=09=09=20=20value=20/=3D= =200x100;=0A-=09=09=20=20break;=0A-=09=09}=0A-=09=20=20=20=20=20=20= colorval=20|=3D=20(value=20<<=20pos);=0A-=09=20=20=20=20=20=20pos=20+=3D=20= 0x8;=0A-=09=20=20=20=20=20=20if=20(i=20=3D=3D=202)=0A-=09=09{=0A-=09=09=20= =20unblock_input=20();=0A-=09=09=20=20XSETINT=20(ret,=20colorval);=0A-=09= =09=20=20return=20ret;=0A-=09=09}=0A-=09=20=20=20=20=20=20color=20=3D=20= end;=0A-=09=20=20=20=20}=0A-=09}=0A-=20=20=20=20}=0A-=20=20else=20if=20= (strnicmp=20(colorname,=20"rgb:",=204)=20=3D=3D=200)=0A-=20=20=20=20{=0A= -=20=20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=204;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= unsigned=20long=20value;=0A-=0A-=09=20=20/*=20The=20check=20for=20'x'=20= in=20the=20following=20conditional=20takes=20into=0A-=09=20=20=20=20=20= account=20the=20fact=20that=20strtol=20allows=20a=20"0x"=20in=20front=20= of=0A-=09=20=20=20=20=20our=20numbers,=20and=20we=20don't.=20=20*/=0A-=09= =20=20if=20(!isxdigit=20(color[0])=20||=20color[1]=20=3D=3D=20'x')=0A-=09= =20=20=20=20break;=0A-=09=20=20value=20=3D=20strtoul=20(color,=20&end,=20= 16);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09=20=20=20=20break;=0A= -=09=20=20switch=20(end=20-=20color)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20= case=201:=0A-=09=20=20=20=20=20=20value=20=3D=20value=20*=200x10=20+=20= value;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20case=202:=0A-=09=20= =20=20=20=20=20break;=0A-=09=20=20=20=20case=203:=0A-=09=20=20=20=20=20=20= value=20/=3D=200x10;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20= case=204:=0A-=09=20=20=20=20=20=20value=20/=3D=200x100;=0A-=09=20=20=20=20= =20=20break;=0A-=09=20=20=20=20default:=0A-=09=20=20=20=20=20=20value=20= =3D=20ULONG_MAX;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(value=20=3D=3D=20= ULONG_MAX)=0A-=09=20=20=20=20break;=0A-=09=20=20colorval=20|=3D=20(value=20= <<=20pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=20= 2)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A= -=09=09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20= =20=20=20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20= ret;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20= =20=20break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A+=20=20=20=20= =20=20unblock_input=20();=0A+=20=20=20=20=20=20/*=20Throw=20away=20the=20= low=208=20bits=20and=20return=200xBBGGRR.=20=20*/=0A+=20=20=20=20=20=20= return=20make_fixnum=20((b=20&=200xff00)=20<<=208=20|=20(g=20&=200xff00)=20= |=20r=20>>=208);=0A=20=20=20=20=20}=0A-=20=20else=20if=20(strnicmp=20= (colorname,=20"rgbi:",=205)=20=3D=3D=200)=0A-=20=20=20=20{=0A-=20=20=20=20= =20=20/*=20This=20is=20an=20RGB=20Intensity=20specification.=20=20*/=0A-=20= =20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=205;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= double=20value;=0A-=09=20=20UINT=20val;=0A=20=0A-=09=20=20value=20=3D=20= strtod=20(color,=20&end);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09= =20=20=20=20break;=0A-=09=20=20if=20(value=20<=200.0=20||=20value=20>=20= 1.0)=0A-=09=20=20=20=20break;=0A-=09=20=20val=20=3D=20(UINT)(0x100=20*=20= value);=0A-=09=20=20/*=20We=20used=200x100=20instead=20of=200xFF=20to=20= give=20a=20continuous=0A-=09=20=20=20=20=20range=20between=200.0=20and=20= 1.0=20inclusive.=20=20The=20next=20statement=0A-=09=20=20=20=20=20fixes=20= the=201.0=20case.=20=20*/=0A-=09=20=20if=20(val=20=3D=3D=200x100)=0A-=09=20= =20=20=20val=20=3D=200xFF;=0A-=09=20=20colorval=20|=3D=20(val=20<<=20= pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=202)=0A= -=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A-=09= =09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20=20=20= =20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20ret;=0A= -=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20=20=20= break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A-=20=20=20=20}=0A= =20=20=20/*=20I=20am=20not=20going=20to=20attempt=20to=20handle=20any=20= of=20the=20CIE=20color=20schemes=0A=20=20=20=20=20=20or=20TekHVC,=20= since=20I=20don't=20know=20the=20algorithms=20for=20conversion=20to=0A=20= =20=20=20=20=20RGB.=20=20*/=0Adiff=20--git=20a/src/xfaces.c=20= b/src/xfaces.c=0Aindex=20cf155288bd..471c49ae52=20100644=0A---=20= a/src/xfaces.c=0A+++=20b/src/xfaces.c=0A@@=20-220,6=20+220,7=20@@=20= Copyright=20(C)=201993-1994,=201998-2020=20Free=20Software=20Foundation,=20= Inc.=0A=20#include=20"sysstdio.h"=0A=20#include=20=0A=20= #include=20=0A+#include=20=0A=20=0A=20#include=20= "lisp.h"=0A=20#include=20"character.h"=0A@@=20-819,6=20+820,116=20@@=20= load_pixmap=20(struct=20frame=20*f,=20Lisp_Object=20name)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Color=20Handling=0A=20=20= ***********************************************************************/=0A= =20=0A+/*=20Parse=20fractional=20hex=20digits=20at=20S=20ending=20right=20= before=20E.=0A+=20=20=20Set=20*DST=20to=20the=20value=20normalised=20to=20= 65535=20and=20return=20true=20on=20success,=0A+=20=20=20false=20= otherwise.=20=20*/=0A+static=20bool=0A+parse_hex_comp=20(const=20char=20= *s,=20const=20char=20*e,=20unsigned=20short=20*dst)=0A+{=0A+=20=20int=20= n=20=3D=20e=20-=20s;=0A+=20=20if=20(n=20<=3D=200=20||=20n=20>=204)=0A+=20= =20=20=20return=20false;=0A+=20=20int=20val=20=3D=200;=0A+=20=20for=20(;=20= s=20<=20e;=20s++)=0A+=20=20=20=20{=0A+=20=20=20=20=20=20int=20digit;=0A+=20= =20=20=20=20=20if=20(*s=20>=3D=20'0'=20&&=20*s=20<=3D=20'9')=0A+=20=20=20= =20=20=20=20=20digit=20=3D=20*s=20-=20'0';=0A+=20=20=20=20=20=20else=20= if=20(*s=20>=3D=20'A'=20&&=20*s=20<=3D=20'F')=0A+=20=20=20=20=20=20=20=20= digit=20=3D=20*s=20-=20'A'=20+=2010;=0A+=20=20=20=20=20=20else=20if=20= (*s=20>=3D=20'a'=20&&=20*s=20<=3D=20'f')=0A+=20=20=20=20=20=20=20=20= digit=20=3D=20*s=20-=20'a'=20+=2010;=0A+=20=20=20=20=20=20else=0A+=20=20=20= =20=20=20=20=20return=20false;=0A+=20=20=20=20=20=20val=20=3D=20(val=20= <<=204)=20|=20digit;=0A+=20=20=20=20}=0A+=20=20int=20maxval=20=3D=20(1=20= <<=20(n=20*=204))=20-=201;=0A+=20=20*dst=20=3D=20(unsigned)val=20*=20= 65535=20/=20maxval;=0A+=20=20return=20true;=0A+}=0A+=0A+/*=20Parse=20= floating-point=20number=20at=20S=20ending=20right=20before=20E.=0A+=20=20= =20Return=20the=20number=20if=20in=20the=20range=20[0,1];=20otherwise=20= -1.=20=20*/=0A+static=20double=0A+parse_float_comp=20(const=20char=20*s,=20= const=20char=20*e)=0A+{=0A+=20=20char=20*end;=0A+=20=20double=20x=20=3D=20= strtod=20(s,=20&end);=0A+=20=20return=20(end=20=3D=3D=20e=20&&=20x=20>=3D=20= 0=20&&=20x=20<=3D=201)=20?=20x=20:=20-1;=0A+}=0A+=0A+/*=20Parse=20S=20as=20= a=20numeric=20colour=20specification=20and=20set=20*R,=20*G=20and=20*B.=0A= +=20=20=20Return=20true=20on=20success,=20false=20on=20failure.=0A+=20=20= =20Recognised=20formats:=0A+=0A+=20=20=20=20"#RGB",=20with=20R,=20G=20= and=20B=20hex=20strings=20of=20equal=20length,=201-4=20digits=20each=0A+=20= =20=20=20"rgb:R/G/B",=20with=20R,=20G=20and=20B=20hex=20strings,=201-4=20= digits=20each=0A+=20=20=20=20"rgbi:R/G/B",=20with=20R,=20G=20and=20B=20= numbers=20in=20[0,1]=0A+=0A+=20=20=20The=20result=20is=20normalised=20to=20= a=20maximum=20value=20of=2065535=20per=20component.=20=20*/=0A+bool=0A= +parse_color_spec=20(const=20char=20*s,=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20unsigned=20short=20*r,=20unsigned=20short=20*g,=20= unsigned=20short=20*b)=0A+{=0A+=20=20int=20len=20=3D=20strlen=20(s);=0A+=20= =20if=20(s[0]=20=3D=3D=20'#')=0A+=20=20=20=20{=0A+=20=20=20=20=20=20if=20= ((len=20-=201)=20%=203=20=3D=3D=200)=0A+=20=20=20=20=20=20=20=20{=0A+=20=20= =20=20=20=20=20=20=20=20int=20n=20=3D=20(len=20-=201)=20/=203;=0A+=20=20=20= =20=20=20=20=20=20=20return=20(=20=20=20parse_hex_comp=20(s=20+=201=20+=20= 0=20*=20n,=20s=20+=201=20+=201=20*=20n,=20r)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20(s=20+=201=20+=201=20*=20= n,=20s=20+=201=20+=202=20*=20n,=20g)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20&&=20parse_hex_comp=20(s=20+=201=20+=202=20*=20n,=20= s=20+=201=20+=203=20*=20n,=20b));=0A+=20=20=20=20=20=20=20=20}=0A+=20=20=20= =20}=0A+=20=20else=20if=20(strncmp=20(s,=20"rgb:",=204)=20=3D=3D=200)=0A= +=20=20=20=20{=0A+=20=20=20=20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20= =20=20return=20((sep1=20=3D=20strchr=20(s=20+=204,=20'/'))=20!=3D=20NULL=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20(sep2=20=3D=20strchr=20= (sep1=20+=201,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20&&=20parse_hex_comp=20(s=20+=204,=20sep1,=20r)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20(sep1=20+=201,=20sep2,=20= g)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20= (sep2=20+=201,=20s=20+=20len,=20b));=0A+=20=20=20=20}=0A+=20=20else=20if=20= (strncmp=20(s,=20"rgbi:",=205)=20=3D=3D=200)=0A+=20=20=20=20{=0A+=20=20=20= =20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20=20=20double=20red,=20= green,=20blue;=0A+=20=20=20=20=20=20if=20((sep1=20=3D=20strchr=20(s=20+=20= 5,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20=20&&=20(sep2=20=3D= =20strchr=20(sep1=20+=201,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20= =20=20=20&&=20(red=20=3D=20parse_float_comp=20(s=20+=205,=20sep1))=20>=3D=20= 0=0A+=20=20=20=20=20=20=20=20=20=20&&=20(green=20=3D=20parse_float_comp=20= (sep1=20+=201,=20sep2))=20>=3D=200=0A+=20=20=20=20=20=20=20=20=20=20&&=20= (blue=20=3D=20parse_float_comp=20(sep2=20+=201,=20s=20+=20len))=20>=3D=20= 0)=0A+=20=20=20=20=20=20=20=20{=0A+=20=20=20=20=20=20=20=20=20=20*r=20=3D=20= lrint=20(red=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20*g=20=3D=20= lrint=20(green=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20*b=20=3D=20= lrint=20(blue=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20return=20= true;=0A+=20=20=20=20=20=20=20=20}=0A+=20=20=20=20}=0A+=20=20return=20= false;=0A+}=0A+=0A+DEFUN=20("color-values-from-numeric-string",=0A+=20=20= =20=20=20=20=20Fcolor_values_from_numeric_string,=20= Scolor_values_from_numeric_string,=0A+=20=20=20=20=20=20=201,=201,=200,=0A= +=20=20=20=20=20=20=20doc:=20/*=20Parse=20STRING=20as=20a=20numeric=20= colour=20and=20return=20(R=20G=20B).=0A+Recognised=20formats=20are:=0A+=0A= +=20#RGB,=20where=20R,=20G=20and=20B=20are=20hex=20strings=20of=20equal=20= length,=201-4=20digits=20each=0A+=20rgb:R/G/B,=20where=20R,=20G,=20and=20= B=20are=20hex=20strings,=201-4=20digits=20each=0A+=20rgbi:R/G/B,=20where=20= R,=20G=20and=20B=20are=20numbers=20in=20[0,1].=0A+=0A+The=20result=20is=20= normalised=20to=20a=20maximum=20value=20of=2065535=20per=20component.=0A= +If=20STRING=20is=20not=20in=20one=20of=20the=20above=20forms,=20return=20= nil.=20=20*/)=0A+=20=20(Lisp_Object=20string)=0A+{=0A+=20=20unsigned=20= short=20r,=20g,=20b;=0A+=20=20return=20(parse_color_spec=20(SSDATA=20= (string),=20&r,=20&g,=20&b)=0A+=20=20=20=20=20=20=20=20=20=20?=20list3i=20= (r,=20g,=20b)=0A+=20=20=20=20=20=20=20=20=20=20:=20Qnil);=0A+}=0A+=0A=20= /*=20Parse=20RGB_LIST,=20and=20fill=20in=20the=20RGB=20fields=20of=20= COLOR.=0A=20=20=20=20RGB_LIST=20should=20contain=20(at=20least)=203=20= lisp=20integers.=0A=20=20=20=20Return=20true=20iff=20RGB_LIST=20is=20OK.=20= =20*/=0A@@=20-7018,4=20+7129,5=20@@=20syms_of_xfaces=20(void)=0A=20=20=20= defsubr=20(&Sinternal_face_x_get_resource);=0A=20=20=20defsubr=20= (&Sx_family_fonts);=0A=20#endif=0A+=20=20defsubr=20= (&Scolor_values_from_numeric_string);=0A=20}=0Adiff=20--git=20= a/src/xterm.c=20b/src/xterm.c=0Aindex=207989cecec7..2a7c9d0a14=20100644=0A= ---=20a/src/xterm.c=0A+++=20b/src/xterm.c=0A@@=20-2389,44=20+2389,23=20= @@=20#define=20HEX_COLOR_NAME_LENGTH=2032=0A=20Status=20x_parse_color=20= (struct=20frame=20*f,=20const=20char=20*color_name,=0A=20=09=09=20=20=20=20= =20=20XColor=20*color)=0A=20{=0A+=20=20/*=20Don't=20pass=20#RGB=20= strings=20directly=20to=20XParseColor,=20because=20that=0A+=20=20=20=20=20= follows=20the=20X=20convention=20of=20zero-extending=20each=20channel=0A= +=20=20=20=20=20value:=20#f00=20means=20#f00000.=20=20We=20want=20the=20= convention=20of=20scaling=0A+=20=20=20=20=20channel=20values,=20so=20= #f00=20means=20#ff0000,=20just=20as=20it=20does=20for=0A+=20=20=20=20=20= HTML,=20SVG,=20and=20CSS.=20=20*/=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(color_name,=20&r,=20&g,=20&b))=0A+=20= =20=20=20{=0A+=20=20=20=20=20=20color->red=20=3D=20r;=0A+=20=20=20=20=20=20= color->green=20=3D=20g;=0A+=20=20=20=20=20=20color->blue=20=3D=20b;=0A+=20= =20=20=20=20=20return=201;=0A+=20=20=20=20}=0A+=0A=20=20=20Display=20= *dpy=20=3D=20FRAME_X_DISPLAY=20(f);=0A=20=20=20Colormap=20cmap=20=3D=20= FRAME_X_COLORMAP=20(f);=0A=20=20=20struct=20color_name_cache_entry=20= *cache_entry;=0A-=0A-=20=20if=20(color_name[0]=20=3D=3D=20'#')=0A-=20=20=20= =20{=0A-=20=20=20=20=20=20/*=20Don't=20pass=20#RGB=20strings=20directly=20= to=20XParseColor,=20because=20that=0A-=09=20follows=20the=20X=20= convention=20of=20zero-extending=20each=20channel=0A-=09=20value:=20#f00=20= means=20#f00000.=20=20We=20want=20the=20convention=20of=20scaling=0A-=09=20= channel=20values,=20so=20#f00=20means=20#ff0000,=20just=20as=20it=20does=20= for=0A-=09=20HTML,=20SVG,=20and=20CSS.=0A-=0A-=09=20So=20we=20translate=20= #f00=20to=20rgb:f/0/0,=20which=20X=20handles=0A-=09=20differently.=20*/=0A= -=20=20=20=20=20=20char=20rgb_color_name[HEX_COLOR_NAME_LENGTH];=0A-=20=20= =20=20=20=20int=20len=20=3D=20strlen=20(color_name);=0A-=20=20=20=20=20=20= int=20digits_per_channel;=0A-=20=20=20=20=20=20if=20(len=20=3D=3D=204)=0A= -=09digits_per_channel=20=3D=201;=0A-=20=20=20=20=20=20else=20if=20(len=20= =3D=3D=207)=0A-=09digits_per_channel=20=3D=202;=0A-=20=20=20=20=20=20= else=20if=20(len=20=3D=3D=2010)=0A-=09digits_per_channel=20=3D=203;=0A-=20= =20=20=20=20=20else=20if=20(len=20=3D=3D=2013)=0A-=09digits_per_channel=20= =3D=204;=0A-=20=20=20=20=20=20else=0A-=09return=200;=0A-=0A-=20=20=20=20=20= =20snprintf=20(rgb_color_name,=20sizeof=20rgb_color_name,=20= "rgb:%.*s/%.*s/%.*s",=0A-=09=09digits_per_channel,=20color_name=20+=201,=0A= -=09=09digits_per_channel,=20color_name=20+=20digits_per_channel=20+=20= 1,=0A-=09=09digits_per_channel,=20color_name=20+=202=20*=20= digits_per_channel=20+=201);=0A-=0A-=20=20=20=20=20=20/*=20The=20rgb=20= form=20is=20parsed=20directly=20by=20XParseColor=20without=0A-=09=20= talking=20to=20the=20X=20server.=20=20No=20need=20for=20caching.=20=20*/=0A= -=20=20=20=20=20=20return=20XParseColor=20(dpy,=20cmap,=20= rgb_color_name,=20color);=0A-=20=20=20=20}=0A-=0A=20=20=20for=20= (cache_entry=20=3D=20FRAME_DISPLAY_INFO=20(f)->color_names;=20= cache_entry;=0A=20=20=20=20=20=20=20=20cache_entry=20=3D=20= cache_entry->next)=0A=20=20=20=20=20{=0Adiff=20--git=20= a/test/src/xfaces-tests.el=20b/test/src/xfaces-tests.el=0Aindex=20= 5ed16c9e51..ea349445a6=20100644=0A---=20a/test/src/xfaces-tests.el=0A+++=20= b/test/src/xfaces-tests.el=0A@@=20-24,4=20+24,27=20@@=20= xfaces-color-distance=0A=20=20=20(should=20(equal=20(color-distance=20= "#222222"=20"#ffffff")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(color-distance=20"#ffffff"=20"#222222"))))=0A=20=0A+(ert-deftest=20= xfaces-color-values-from-numeric-string=20()=0A+=20=20(should=20(equal=20= (color-values-from-numeric-string=20"#f05")=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20'(#xffff=20#x0000=20#x5555)))=0A+=20=20(should=20= (equal=20(color-values-from-numeric-string=20"#1fb0C5")=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20'(#x1f1f=20#xb0b0=20#xc5c5)))=0A+=20=20= (should=20(equal=20(color-values-from-numeric-string=20"#1f8b0AC5e")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(#x1f81=20#xb0aa=20= #xc5eb)))=0A+=20=20(should=20(equal=20(color-values-from-numeric-string=20= "#1f83b0ADC5e2")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(#x1f83=20#xb0ad=20#xc5e2)))=0A+=20=20(should=20(equal=20= (color-values-from-numeric-string=20"#1f83b0ADC5e2g")=20nil))=0A+=20=20= (should=20(equal=20(color-values-from-numeric-string=20"#1f83b0ADC5e20")=20= nil))=0A+=20=20(should=20(equal=20(color-values-from-numeric-string=20= "#12345")=20nil))=0A+=20=20(should=20(equal=20= (color-values-from-numeric-string=20"rgb:f/23/28a")=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20'(#xffff=20#x2323=20#x28a2)))=0A+=20=20= (should=20(equal=20(color-values-from-numeric-string=20= "rgb:1234/5678/09ab")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20'(#x1234=20#x5678=20#x09ab)))=0A+=20=20(should=20(equal=20= (color-values-from-numeric-string=20"rgb:0//0")=20nil))=0A+=20=20(should=20= (equal=20(color-values-from-numeric-string=20"rgbi:0/0.5/0.1")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'(0=2032768=206554)))=0A+=20=20= (should=20(equal=20(color-values-from-numeric-string=20= "rgbi:1e-3/1.0e-2/1e0")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20'(66=20655=2065535)))=0A+=20=20(should=20(equal=20= (color-values-from-numeric-string=20"rgbi:0/0.5/10")=20nil)))=0A+=0A=20= (provide=20'xfaces-tests)=0A--=20=0A2.21.1=20(Apple=20Git-122.3)=0A=0A= --Apple-Mail=_17A52FA6-1B50-4295-A89A-61E420771BC8-- From MAILER-DAEMON Fri Jun 12 13:08:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjnAL-0007M3-LQ for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 13:08:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58180) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjnAK-0007HA-C1 for emacs-devel@gnu.org; Fri, 12 Jun 2020 13:08:28 -0400 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]:36999) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjnAI-0004Rj-JY for emacs-devel@gnu.org; Fri, 12 Jun 2020 13:08:28 -0400 Received: by mail-qt1-x82a.google.com with SMTP id d27so7684007qtg.4 for ; Fri, 12 Jun 2020 10:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=IJeV3eoqxc02DwFIx2aEt2SSI27IWtYupagfX4r8CJk=; b=E7lYjlciOzbogz1JdHqJeegCVTbdwPAYO+i0GkFrxmHKvabsiwcUADX8GzJ8Z5RPme 7XT+23vMYzOvHZVnce0ygAdzz8ZKGspTrHCVIbkBj/TRrZhs5/UQS/qjGUPF5JnLv91O PgYANUPn6wngnw5OyCW2GXdThQ9QUpZaRiiEM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=IJeV3eoqxc02DwFIx2aEt2SSI27IWtYupagfX4r8CJk=; b=nVhpI3TbRiuS979n+EMYJiOdlNvWaw+DBJIs8Kd5r2n2zwFmReRzOAoLfsycoWBaNN FXI6fLcwaD+cWCyCmPdPHrREoMd0a6vvsnD/42s/NCg5RLc5CBRbLalFL8x7BXjFhcEL m4jjrde15IJDntW7w2mU7YeLk+QYLa0ocvVcJm0ULC3o+ERfAm2+/S+1OdMRgCuN8fqy ogME1Oq5/YB4zR4vuq/Jd/jYmgAUmmuJnGAXkYXBCrki+BcCmliiOm3vg66kw2o4gUBk hFjiw1ObyXUGImamHJK5zLAVqFJ7ytA2bD4OiOhhHbFfzPKjc5AM3DBIu9shEEf1G7Rd aSoQ== X-Gm-Message-State: AOAM532Cm9VHgkoM5gGdzE3GPXur/M2/MYhupIBpV8VaEvtKPKGbuYPn 9DOKdbxdjiNcHX1bVKrRzski5bz3U823kA== X-Google-Smtp-Source: ABdhPJx31ETFBk7ssEAfC1VHYWH+bnfKOIZw/dzc4Uadb3OG89QnnLFLbpqLbZKmIGEAkcSkb7oYRg== X-Received: by 2002:aed:3fb4:: with SMTP id s49mr4212232qth.16.1591981698862; Fri, 12 Jun 2020 10:08:18 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id l2sm5724342qtc.80.2020.06.12.10.08.17 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Jun 2020 10:08:17 -0700 (PDT) From: Ted Zlatanov To: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> <4krg9s2y.fsf@lifelogs.com> <1864384a-e0a4-8fa0-1185-4393bc104b17@gmail.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 12 Jun 2020 17:08:17 +0000 In-Reply-To: <1864384a-e0a4-8fa0-1185-4393bc104b17@gmail.com> (=?iso-8859-1?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Fri, 12 Jun 2020 12:35:11 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2607:f8b0:4864:20::82a; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x82a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 17:08:28 -0000 On Fri, 12 Jun 2020 12:35:11 -0400 Cl=E9ment Pit-Claudel wrote:=20 CP> On 12/06/2020 12.17, Ted Zlatanov wrote: >> Let me know if you have strong objections or any suggestions, otherwise >> in a day or two I'll document and push this patch. CP> If you go this route, I would recommend extracting functionality shared= between CP> this and prettify-symbols-mode into a separate library; otherwise, won'= t you CP> have conflicts between the password-hiding patterns and the prettificat= ion CP> patterns? Additionally, I'd be surprised if turning of prettification a= lso CP> revealed passwords. You're describing what I thought reveal-mode would do. It's a good point, and factoring the functionality out to a library makes a lot of sense. Let's see if Stefan and others agree with the approach--remember, he recommended using jit-lock. Once we have a solid foundation for this functionality, I'm happy to start on the library. Ted From MAILER-DAEMON Fri Jun 12 13:33:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjnZ1-0002by-2V for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 13:33:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39384) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjnYz-0002bj-Mo for emacs-devel@gnu.org; Fri, 12 Jun 2020 13:33:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40328) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjnYz-00008j-67; Fri, 12 Jun 2020 13:33:57 -0400 Received: from [176.228.60.248] (port=3686 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jjnYy-00008n-Gd; Fri, 12 Jun 2020 13:33:56 -0400 Date: Fri, 12 Jun 2020 20:33:45 +0300 Message-Id: <83r1uk429y.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Fri, 12 Jun 2020 18:59:36 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 17:33:57 -0000 > From: Mattias Engdegård > Date: Fri, 12 Jun 2020 18:59:36 +0200 > Cc: emacs-devel@gnu.org > > 8 juni 2020 kl. 14.26 skrev Pip Cet : > > > Having two different versions of this seems superfluous > > We had four versions. Here is a patch replacing them all. Were the 4 versions identical or different? If the latter, what were the differences, and which of the features that call them will from now on behave differently? From MAILER-DAEMON Fri Jun 12 14:33:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjoUs-0001le-Jp for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 14:33:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37732) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjoUr-0001lM-EN for emacs-devel@gnu.org; Fri, 12 Jun 2020 14:33:45 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37444) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjoUp-0001zS-7r for emacs-devel@gnu.org; Fri, 12 Jun 2020 14:33:45 -0400 Received: by mail-wm1-x341.google.com with SMTP id y20so9164568wmi.2 for ; Fri, 12 Jun 2020 11:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=cd9bsLZftWMWvkz1DxHmrWKmfFP4wCQ/lO7nfMqpLUI=; b=fxBA+JgNz51jCaNZP58Mp4ukTEkDP4ETCMcNVN391TXIDdzJHOEN4Brqh0pLtZi7RS RLCQ2tbB+AwHc/VHs0LmWtC6r/OHbAPO92b7TG6rN/5jP19N8vMocmgjOCebwRHf3biR JNgGhwIrp58XxJ2AVdnhfKElyQE+RLGYHbQLQYOiLjXCoa5igKnY8RjCi/JwXGUYozVO ZiME7QRwoxdsJMLUQgIBDWFxJHbgkHtMsclzVJ5TGj/r7Sr3Q3T2K6P/uDelb05mjasY yDRvmMbBGYs8uaMgNrJuv1XKwmqkF2Wto2XW8OZ+gF9s623HbH4SdzTS/RHmYSpm6pIm lqiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=cd9bsLZftWMWvkz1DxHmrWKmfFP4wCQ/lO7nfMqpLUI=; b=WNZlq+5cy0MNX5Fw40+7rSbEL/eQoxxJ+9tzfNvniy8n6NAsopCxccr5Ldi+UlNGqd oYfqJvo1XpUl7htXJwyyH0YZKlbhB9v8UORgqSD2chm/NbkU2xGLjhXXvIkXiaF5Wz3U iEF8KZUA5tVT4zSF+9rAQfI6DDG356r89ADXPyvIwV+OEpE2k+YNh/B4Ik8glli8W2ir 8PiU4z3kZ197KVQyEt57NsEn9/yRGB+UK+MOTqDxFoBW+UvXTAIrmr2LuOPC8gyMIBpV 3nVIc0FNZ9298abyemqMgpaOZYPLc7J8B8KVhfL3CTOXZRIx5PD+k/HS4INfMIl2zzZ9 5onA== X-Gm-Message-State: AOAM532Y8M0ca9Auv7u5GbjkWktqeAbrEiJh+xIJYXOtQq/ZT1B0j9Aj jwhVuRMbwFzMf5S0NA4fahdlTw== X-Google-Smtp-Source: ABdhPJxh2PeTYU0sF8rXtwpT2EX3jwhGwfTqiHL3lYZk50fKU5PxiWXfbWoI6TAQOUQtOwO7CimyCQ== X-Received: by 2002:a7b:cb91:: with SMTP id m17mr265332wmi.126.1591986819539; Fri, 12 Jun 2020 11:33:39 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id f11sm11113648wrj.2.2020.06.12.11.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 11:33:38 -0700 (PDT) From: "Basil L. Contovounesios" To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: Pip Cet , emacs-devel@gnu.org Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> Date: Fri, 12 Jun 2020 19:33:37 +0100 In-Reply-To: ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Fri, 12 Jun 2020 18:59:36 +0200") Message-ID: <87tuzgnnge.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::341; envelope-from=contovob@tcd.ie; helo=mail-wm1-x341.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 18:33:45 -0000 Mattias Engdeg=C3=A5rd writes: > Only really tested for NS; someone needs to check the X and Windows backe= nds. I get this warning: xterm.c:2379: warning: macro "HEX_COLOR_NAME_LENGTH" is not used [-Wunuse= d-macros] 2379 | #define HEX_COLOR_NAME_LENGTH 32 Otherwise seems to compile and run fine. I tried: 0. emacs -Q 1. M-x list-colors-display RET 2. M-x set-background-color RET #abc RET Is there something else I should be doing to test this? Thanks, --=20 Basil In GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo versio= n 1.16.0, Xaw3d scroll bars) of 2020-06-12 built on thunk Repository revision: 54efe18959591faa1087051c878abe470f53a28f Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12008000 System Description: Debian GNU/Linux bullseye/sid Configured using: 'configure 'CC=3Dccache gcc' 'CFLAGS=3D-O2 -march=3Dnative' --config-cache --prefix=3D/home/blc/.local --with-x-toolkit=3Dlucid --with-file-notification=3Dyes --with-x' Configured features: XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP From MAILER-DAEMON Fri Jun 12 14:36:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjoXt-0004kt-1p for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 14:36:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjoXr-0004kk-6A for emacs-devel@gnu.org; Fri, 12 Jun 2020 14:36:51 -0400 Received: from mail-vs1-xe2a.google.com ([2607:f8b0:4864:20::e2a]:44851) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjoXp-0002Um-Hm for emacs-devel@gnu.org; Fri, 12 Jun 2020 14:36:50 -0400 Received: by mail-vs1-xe2a.google.com with SMTP id c1so5830833vsc.11 for ; Fri, 12 Jun 2020 11:36:43 -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 :cc:content-transfer-encoding; bh=SjYLP6dvk58jMMRELJ0dUrHclevqrxcagBGZGmUf0cU=; b=jKVpdkg1YpLfifQYn35G1JPhGEMBGgjdL5C+Pn/GjV1z0LO56n5izVzVnMiqHdVkQK jgVDhMCjsw4RQ6h7ZzLS0Fale/CSV9Yt9IHgyuEubhAhcMSu6ovmwu2WMCLypVtcDCSH 1pT7lmfZaL3HisjJrsRmiQnFdxMLJBwFHnCaFgGXhJBHbS1cBVVfdj1Sl0wSzF+B5ROz O6iV08K1Ev4hACitb8eHBBtA7928jA0ZJ8TgdboqwQdb093I+sj/T2ev14pskDjbO9MP CeBXeVPeLt9+EVzUT9r5gwWs8/5LT73466qUwz2UlpuAoKQ6xthzFlvzVa45YtmB1wcz FG1A== 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:cc:content-transfer-encoding; bh=SjYLP6dvk58jMMRELJ0dUrHclevqrxcagBGZGmUf0cU=; b=cIbNc/UzX8cUioaYh5Z+ICAZ+F0qSETtgh29J1/LT2/KhBivusdjzHNWirHzDbEwNG D1TJ1hA37wdz68faTWfLSJMQdBEoe9jIBCmmH0Oq3cMzLIjCfO8B5K5P7rJB+OYrYzDf mqGVR1QIQELPVRpb4JBiZ/t+5M9fVhIZyCYXxlPRaJ+PyjDyrn4lafZRT8uY9HM79klu FK7VX6hAy4VWbKtj0XJgF+Lvb8mAjAhvboO5S24lCO9BUanYxfUh+kAw/D/lzfPUGqvm 8Wp1yI4rj1J2zCekM+oiJXtEUT5HjJgKjH2iur0lJ8zPbylBrE3u7dB5XWOOVah62zHg Kq5g== X-Gm-Message-State: AOAM533MHTFhizZjn45fCP52MkgWjW13/sEfBTqXRmScXLtnbJl9e7sU EuJt7RzQMwgnRa9F2+jLCvFh1WfIvFzrWXgywCg= X-Google-Smtp-Source: ABdhPJz7tnjnn8D1vVrUH3upRAE0RVvb70Dka+Pywd96j9YaAJwCIjiNFTulhTpBN1d64lYPuINzoqGOIygRHebcX6o= X-Received: by 2002:a67:f289:: with SMTP id m9mr11785653vsk.70.1591987002643; Fri, 12 Jun 2020 11:36:42 -0700 (PDT) MIME-Version: 1.0 References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> In-Reply-To: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> From: Yuri Khan Date: Sat, 13 Jun 2020 01:36:30 +0700 Message-ID: Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) To: =?UTF-8?Q?Mattias_Engdeg=C3=A5rd?= Cc: Stefan Monnier , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::e2a; envelope-from=yurivkhan@gmail.com; helo=mail-vs1-xe2a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 18:36:51 -0000 On Fri, 12 Jun 2020 at 22:50, Mattias Engdeg=C3=A5rd wro= te: > Please load the attached code (any Emacs version), and run M-x contrast-c= ompare with various cutoff values on your favourite system, to find what va= lue is best for readability of the colour names (first column). > Please reply (to emacs-devel or to me) the following pieces of informatio= n: > > * the cutoff value you found optimal > * system information: window system, screen, anything you think is releva= nt > * whether you use a light or dark background in your Emacs Despite science calling for .18, I find that my subjective optimal cutoff is somewhere between .25 and .31, even if I change the formulae to more accurately model the piecewise gamma correction of sRGB: - (r (expt (nth 0 rgb) 2.2)) + (R (nth 0 rgb)) + (r (if (<=3D R 0.03928) + (/ R 12.92) + (expt (/ (+ R 0.055) 1.055) 2.4))) (same for g and b.) I am on GTK+3/X11, Dell P2415Q (HiDPI IPS), RGB-subpixel slight-hinted Cousine font at 10.5pt, on overall dark gray background (#414042). From MAILER-DAEMON Fri Jun 12 15:00:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjoud-0007OW-7b for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:00:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjoub-0007Na-3w for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:00:21 -0400 Received: from mail157c50.megamailservers.eu ([91.136.10.167]:43202 helo=mail51c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjouX-0006RK-9b; Fri, 12 Jun 2020 15:00:20 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1591988413; bh=AaDA2UFqndkVt5oPO3E4q+pEmerXj0ZVXavhn0aHfDE=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=pBIz5tDsU6Vv7gez+ojPXvtpVgaQnGnIreLPofWSImzCOPhzC68OExETuGr2TU8F+ b9rlEWBOB9pLRX1tHRJF4PJCieCiA8Xm/YzQ5llvGtqs2qqrkyX2ybBkoITDJrxu9Q NJXolSEL/N0qVbSfIPgoz+Xh4a8dxf8Xab2x8QQE= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail51c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05CJ0BO3030040; Fri, 12 Jun 2020 19:00:13 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83r1uk429y.fsf@gnu.org> Date: Fri, 12 Jun 2020 21:00:10 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F26.5EE3D05A.0018, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=MOMeZ/Rl c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=rBoHcYwisWiZEQPK3xgA:9 a=CjuIK1q_8ugA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.10.167; envelope-from=mattiase@acm.org; helo=mail51c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 15:00:14 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:00:21 -0000 12 juni 2020 kl. 19.33 skrev Eli Zaretskii : > Were the 4 versions identical or different? If the latter, what were > the differences, and which of the features that call them will from > now on behave differently? They were not semantically equivalent but clearly intended to be. Only = the X and Windows versions accepted the rgbi: format; most if not all = had bad error-checking (simple typos silently giving nonsense values), = and the Windows version appears to have normalised incorrectly in some = cases (this is from reading the code with no Windows machine handy). The new code should parse a superset of what the old code did, detect = more mistakes, and be as accurate as we can make it. From MAILER-DAEMON Fri Jun 12 15:04:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjoyy-0003Xh-Um for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:04:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55326) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjoyt-0003WD-LH for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:04:50 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:44686) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjoyr-00072e-Jr for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:04:47 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05CJ310k196484; Fri, 12 Jun 2020 19:04:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type; s=corp-2020-01-29; bh=XqHyGJW1jRyGvHA1/naVoycKYTbGKbj3oV69Jw2EBiI=; b=te3HRbJnPk4kHgljv/aoYpflqnFGyepQiMDJkRo9x/7veq2YkRvMX98pqu4MznnsXZMt SBKRz98TbXFEshOkYDIPAUM69XGu1Jae0NR6guuq3CdBxdUb9SAwb6JLqgq1ua2fhCTk U+4gmCYv5qFKChR71yDbJAtuAeD1E5IKoY9DTWHzTj4NufTPOQHkbVWzimm+dfFxZDIC E+GB5ZA4o0I9EGlkQc8MGzIV2R6JzAbfEHWG+tK/xeN/NvPsMmRIWq8taRB4ikJxRm/y rIP1uzd9fwG+u0RlGm+QeWNLbjI6zFVnwlipJNr9D3za+YgJCqHrM4H9JAdGstOWhgVO OQ== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by aserp2120.oracle.com with ESMTP id 31jepp8brc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 12 Jun 2020 19:04:42 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05CJ2SiF125836; Fri, 12 Jun 2020 19:02:40 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 31mfgyr0a0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 12 Jun 2020 19:02:40 +0000 Received: from abhmp0009.oracle.com (abhmp0009.oracle.com [141.146.116.15]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05CJ2cVd015503; Fri, 12 Jun 2020 19:02:38 GMT MIME-Version: 1.0 Message-ID: <68429610-f9e0-4566-8ed4-0b1a42fe030f@default> Date: Fri, 12 Jun 2020 12:02:36 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?iso-8859-1?B?TWF0dGlhcyBFbmdkZWflcmQ=?= , Yuri Khan Cc: Stefan Monnier , Emacs developers Subject: RE: master 68ae6fa: Improved light/dark colour predicate (bug#41544) References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> In-Reply-To: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: multipart/mixed; boundary="__1591988558131185241abhmp0009.oracle.com" X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9650 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006120137 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9650 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 clxscore=1015 phishscore=0 impostorscore=0 malwarescore=0 mlxscore=0 cotscore=-2147483648 adultscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006120138 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 15:04:44 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:04:51 -0000 --__1591988558131185241abhmp0009.oracle.com Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable > Please load the attached code (any Emacs version), and run M-x contrast- > compare with various cutoff values on your favourite system, to find what > value is best for readability of the colour names (first column). >=20 > Colours with luminance (last column) below the cutoff will be use white t= ext, > others black. It is mainly Emacs in graphical (non-TTY) mode that is of > interest. >=20 > Please reply (to emacs-devel or to me) the following pieces of informatio= n: >=20 > * the cutoff value you found optimal > * system information: window system, screen, anything you think is releva= nt > * whether you use a light or dark background in your Emacs Emacs 26.3, MS Windows 10, fairly old Dell monitor. With emacs -Q, so light background:=20 Cutoff 0.325 (default) is OK. .2, .4, .5, and .6 are all OK.=20 To me, showing the same color in both black & white, next to each other, was the most helpful for deciding. I looked mostly at the grays, and looked at their hex codes, which are shown in both black & white. Based on that, I'd say that that gray60 is about the crossover point: black or white foreground are equally readable for gray60 and immediate neighbors. And that corresponds to your default cutoff of about 0.325. See attached screenshot. Around that area, white text was generally more visible/noticeable, but it was less _readable_. But it makes no difference, with that comparison, whether the frame background is light or dark. Why? because the areas to be compared provide their own background - the frame background is seen only with the rightmost (decimal-number) field. --__1591988558131185241abhmp0009.oracle.com Content-Type: image/png; name="throw-color-contrast-grays.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="throw-color-contrast-grays.png" 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 --__1591988558131185241abhmp0009.oracle.com-- From MAILER-DAEMON Fri Jun 12 15:09:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjp3X-0004Qt-6q for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:09:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjp3V-0004Md-BG for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:09:33 -0400 Received: from gateway21.websitewelcome.com ([192.185.45.89]:18224) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjp3T-0007kw-9X for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:09:32 -0400 Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway21.websitewelcome.com (Postfix) with ESMTP id 57CEE401A2C55 for ; Fri, 12 Jun 2020 14:09:11 -0500 (CDT) Received: from host2007.hostmonster.com ([67.20.76.71]) by cmsmtp with SMTP id jp38jxLqnBb5djp39jHOls; Fri, 12 Jun 2020 14:09:11 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=stephe-leake.org; s=default; h=Content-Transfer-Encoding:Content-Type: MIME-Version:Message-ID:In-Reply-To:Date:References:Subject:To:From:Sender: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=fQShwP3CWIN6u9u8mDoje+nyy/YU2eP15Oui4neP/3Y=; b=gzSRw22w5eY4fsoAvoEYzF9UNF /15PwFE6+a6maoX1KZbEqtHZqAXYfO3zCVntDFqoAcdr6IlWzeaK8fsCQRkZmOCZJJ4AKD1yJv5x5 Xn+ktcPSxJ8pjabGA0bqtEICYzAwmcYH7FdCPwl9kTZDdlrEHAokEh+0p0+nusay90dT95HeS6G0b hyW3RaXpP0IK8mKJ0hQUwJNl050sNIgMSwVgp6IY6FajYCI8mt9yaAOlv5k9GQe1de6GDpg8vqg+w QwYt2QFEZQVMXSvFEKD1+ka726JxGXo+EKEfhpPtiyNMjpVeaKGf3mQzPxwR2L8tN4qROWYeXgGON v01L+PiQ==; Received: from [76.77.182.20] (port=52665 helo=Takver4) by host2007.hostmonster.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1jjp38-003vk2-LY for emacs-devel@gnu.org; Fri, 12 Jun 2020 13:09:10 -0600 From: Stephen Leake To: emacs-devel Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> Date: Fri, 12 Jun 2020 12:09:06 -0700 In-Reply-To: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> ("Mattias \=\?utf-8\?Q\?Engdeg\=C3\=A5rd\=22's\?\= message of "Fri, 12 Jun 2020 17:50:32 +0200") Message-ID: <86v9jwksod.fsf@stephe-leake.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (windows-nt) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host2007.hostmonster.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - stephe-leake.org X-BWhitelist: no X-Source-IP: 76.77.182.20 X-Source-L: No X-Exim-ID: 1jjp38-003vk2-LY X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (Takver4) [76.77.182.20]:52665 X-Source-Auth: stephen_leake@stephe-leake.org X-Email-Count: 1 X-Source-Cap: c3RlcGhlbGU7c3RlcGhlbGU7aG9zdDIwMDcuaG9zdG1vbnN0ZXIuY29t X-Local-Domain: yes Received-SPF: neutral client-ip=192.185.45.89; envelope-from=stephen_leake@stephe-leake.org; helo=gateway21.websitewelcome.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 15:09:11 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NEUTRAL=0.779 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:09:33 -0000 Mattias Engdeg=C3=A5rd writes: > * the cutoff value you found optimal 0.325 works for me; I found it hard to see any difference between 0.2 and 0.5 (some colors did switch from light to dark foreground, but they were equally readable. I did not spend much time studying all the colors. > * system information: window system, screen, anything you think is > relevant=20 Windows 8, LG IPS LED display, 2560 x 1440, 27 inch diagonal > * whether you use a light or dark background in your Emacs (:background "light goldenrod yellow" :foreground "black") --=20 -- Stephe From MAILER-DAEMON Fri Jun 12 15:11:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjp5H-0007yi-L1 for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:11:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57724) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjp5G-0007vi-4J for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:11:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41750) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjp5F-0008WR-P9; Fri, 12 Jun 2020 15:11:21 -0400 Received: from [176.228.60.248] (port=1661 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jjp5E-0004fZ-Tk; Fri, 12 Jun 2020 15:11:21 -0400 Date: Fri, 12 Jun 2020 22:11:10 +0300 Message-Id: <83pna43xrl.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Fri, 12 Jun 2020 21:00:10 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:11:22 -0000 > From: Mattias Engdegård > Date: Fri, 12 Jun 2020 21:00:10 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > 12 juni 2020 kl. 19.33 skrev Eli Zaretskii : > > > Were the 4 versions identical or different? If the latter, what were > > the differences, and which of the features that call them will from > > now on behave differently? > > They were not semantically equivalent but clearly intended to be. Only the X and Windows versions accepted the rgbi: format; most if not all had bad error-checking (simple typos silently giving nonsense values), and the Windows version appears to have normalised incorrectly in some cases (this is from reading the code with no Windows machine handy). > > The new code should parse a superset of what the old code did, detect more mistakes, and be as accurate as we can make it. Thanks, but I don't think I understand the answer well enough to make up my mind regarding the proposed code. The error checking aside, are the return values of the original code the same as of the proposed unified code? If not, which of the 4 current versions differ, and how? From MAILER-DAEMON Fri Jun 12 15:16:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjp9v-0006xn-6F for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:16:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59444) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjp9t-0006sc-Je for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:16:09 -0400 Received: from mail-qv1-xf30.google.com ([2607:f8b0:4864:20::f30]:43552) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjp9r-0000hj-VE; Fri, 12 Jun 2020 15:16:09 -0400 Received: by mail-qv1-xf30.google.com with SMTP id dp10so4858930qvb.10; Fri, 12 Jun 2020 12:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=pVhzdNW8SXC8KjBp2NewWBKqlINn9hj6o/T2f/Ulucs=; b=CgBdTA6Ch7gd5VLVnvfS0sfEE+ADS+RsgPT5Rf85WnpKQHO+OOYNmgZ3IJmyUmjiVq 8Q5HqVJ9+JQ1/ZExcEN4ndvzcLAvXBjw4FVJgaViWm/KJi3C45nj058Z+LxnOaNaNbjG 0FLJBMV2encP7p8iX7iQPT6RM+fmGYPo/CJH7ulIhnjH9P9ouGhgkIBIHYX5k8jFeBZf Oo58lgQ1QmxBDbXFuBvyTz2/nAusck//o+wqjNLwdbvktSbkAFDCeBJGFH/F3Ojl2ED5 OJalXTUzG//UmmSuUfnYKVxyOUS/dbFQE6in7Q1L1Lc7KQVGqubf8HYTronXAixVUj7L B7xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=pVhzdNW8SXC8KjBp2NewWBKqlINn9hj6o/T2f/Ulucs=; b=ts5iMWmpZkODjdNffGRAd1kzfaX9Jndegkv6p09rgnYD+XD1Jg/DHqethHIHMmEpOX w6QfBsw9uALC0Pzxxg7BJ3nnMzZafoJ6F63g9zBrTD0Pj1gbHk8efgwtWJXHkUg2tb8s dKz/gFqIQN9H63uxYrlza0kQ8CKiD6oWaxGBk/FOs+jL3tcDaTpWoGPJQz17Ucp0DiZG FGh7B9RYpoSHqRI4QnPgYCz9DVKeBmvXJ0YomLlljpOR9AGXU5S9D1W5vsQBImNmo7V5 /R/FubMAUBIvE20uXfs/WpTfgoodXIJ1943cZ3UO+U9rxgmpCQ2HWrSP0gO/dHzgPGYU 2zHQ== X-Gm-Message-State: AOAM532JFkv0swtblbvUr/0E2+NzMzQfC0eNVmsT7Y2qM15bGBt6ZMG3 Ue3Ukow27PBbdyAmjHwsjIcKH8yyGmd2yA== X-Google-Smtp-Source: ABdhPJxhjRwk7X6qeuYb7lOBaRX8x+4Sks3CWZF6Fsj5d5m9EngbXVeEPKMI7FxMNEhMIBNGd4NNNg== X-Received: by 2002:a0c:f1c7:: with SMTP id u7mr14299801qvl.181.1591989354382; Fri, 12 Jun 2020 12:15:54 -0700 (PDT) Received: from chametz ([185.220.101.199]) by smtp.gmail.com with ESMTPSA id d9sm5153302qtq.56.2020.06.12.12.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 12:15:53 -0700 (PDT) From: Pip Cet To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: Eli Zaretskii , emacs-devel@gnu.org Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> Date: Fri, 12 Jun 2020 19:15:46 +0000 In-Reply-To: <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Fri, 12 Jun 2020 21:00:10 +0200") Message-ID: <87a718w0wt.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::f30; envelope-from=pipcet@gmail.com; helo=mail-qv1-xf30.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:16:09 -0000 Mattias Engdeg=C3=A5rd writes: > 12 juni 2020 kl. 19.33 skrev Eli Zaretskii : > >> Were the 4 versions identical or different? If the latter, what were >> the differences, and which of the features that call them will from >> now on behave differently? > > They were not semantically equivalent but clearly intended to be. Only quite recently; the X version was changed to use the standard scaling convention (#fff means white) a while back, and at the time I preferred the approach of still letting Xlib handle the request, and passing through whatever nonsensical values we might have gotten after the '#' verbatim. That said, I think there's currently a standard interpretation of 16-bit color values (sRGB or something close enough), and I see no harm in your proposed change provided that this is so (I think it's probably a good idea to have things in one place so we can change it to a better color representation once the technology is there. L-a-b is essentially equivalent to RGB, except the components may be negative (not all of them, obviously), so if we move to using three floats for representing a color, they shouldn't be required to be strictly in the [0,1] range.) From MAILER-DAEMON Fri Jun 12 15:25:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjpIv-0004N3-AQ for mharc-emacs-devel@gnu.org; Fri, 12 Jun 2020 15:25:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34272) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjpIt-0004MC-Ct for emacs-devel@gnu.org; Fri, 12 Jun 2020 15:25:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41975) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjpIs-0002Ib-S1; Fri, 12 Jun 2020 15:25:26 -0400 Received: from [176.228.60.248] (port=2526 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jjpIs-0005mm-18; Fri, 12 Jun 2020 15:25:26 -0400 Date: Fri, 12 Jun 2020 22:25:14 +0300 Message-Id: <83o8po3x45.fsf@gnu.org> From: Eli Zaretskii To: mattiase@acm.org CC: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: <83pna43xrl.fsf@gnu.org> (message from Eli Zaretskii on Fri, 12 Jun 2020 22:11:10 +0300) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2020 19:25:27 -0000 > Date: Fri, 12 Jun 2020 22:11:10 +0300 > From: Eli Zaretskii > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > The error checking aside, are the return values of the original code > the same as of the proposed unified code? If not, which of the 4 > current versions differ, and how? Also, the return value in case of error seems to change the externally-visible behavior: > +If STRING is not in one of the above forms, return nil. */) > + (Lisp_Object string) > +{ > + unsigned short r, g, b; > + return (parse_color_spec (SSDATA (string), &r, &g, &b) > + ? list3i (r, g, b) > + : Qnil); > +} At least tty-color-standard-values seems to never return nil for an RGB spec, but now it will, right? Can its callers cope with such a return value? And I wonder how the other callers of parse_color_spec will behave if it detects an error and returns false. Did you audit the code of the callers to see if this could cause trouble? From MAILER-DAEMON Sat Jun 13 00:02:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjxNV-0000e1-Pr for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 00:02:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjxNT-0000ds-QF for emacs-devel@gnu.org; Sat, 13 Jun 2020 00:02:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51065) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjxNS-0005TH-St; Sat, 13 Jun 2020 00:02:42 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jjxNR-0004Sy-GT; Sat, 13 Jun 2020 00:02:41 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org In-Reply-To: <87tuzhy49m.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: Support for multiple batteries Reply-To: rms@gnu.org References: <87tuzhy49m.fsf@tcd.ie> Message-Id: Date: Sat, 13 Jun 2020 00:02:41 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 04:02:44 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > AFAICT only two battery status backends currently support multiple > sources of information: battery-linux-sysfs and battery-linux-proc-acpi, > for Linux sysfs and ACPI support, respectively. Could you clear up for me what "currently" means in this context? I don't know what code was changed in January or so -- only that the change led to incorrect reports, on a Thinkpad T400s with two batteries inserted. > The way they handle multiple batteries is by merging multiple data into > a single report. I am not sure what that means, concretely. Is this what you mean by "proper" support, Proper support means at least giving a good estimate for how long before the machine runs out of energy, and a good estimate of the actual fraction of maximum charge the batteries can hold. The code from last October could do that. When I type M-x battery in the version as of October 2, it displays something like Power BAT, battery Discharging (98.1% load, remaining time 4:04) where the numbers depend on the energy capacity of each battery and the current charge of each battery, as well as the actual current or power. That is what I think is crucial for M-x battery. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 13 00:05:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjxPq-0002gn-4v for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 00:05:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59528) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjxPp-0002gh-Ap for emacs-devel@gnu.org; Sat, 13 Jun 2020 00:05:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51174) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjxPp-0005qS-02; Sat, 13 Jun 2020 00:05:09 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jjxPl-0004hL-Uo; Sat, 13 Jun 2020 00:05:06 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Mattias =?iso-8859-1?Q?Engdeg=C3=A5rd?= Cc: yuri.v.khan@gmail.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org In-Reply-To: <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> (message from Mattias =?iso-8859-1?Q?Engdeg=C3=A5rd?= on Fri, 12 Jun 2020 17:50:32 +0200) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) Reply-To: rms@gnu.org References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> Message-Id: Date: Sat, 13 Jun 2020 00:05:05 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 04:05:09 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] A "plebiscite" means counting votes. That is not a good way to decide which features to include. You have asked people to give important information about what works well or badly for each of them. That is a useful thing to do, because using their responses it may be possible to figure out a solution that works ok for all users, or nearly all users. It may also be possible to figure out a good rule for choosing between one behavior and another. That could work well for everyone. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 13 00:21:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jjxfG-0000Vz-V5 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 00:21:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40724) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjxfF-0000Sc-NY for emacs-devel@gnu.org; Sat, 13 Jun 2020 00:21:05 -0400 Received: from mout02.posteo.de ([185.67.36.142]:46273) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjxfC-0007vR-HQ for emacs-devel@gnu.org; Sat, 13 Jun 2020 00:21:05 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id B7FA32400FC for ; Sat, 13 Jun 2020 06:20:58 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 49kPXn17Jkz9rxP; Sat, 13 Jun 2020 06:20:56 +0200 (CEST) From: Andrew Schwartzmeyer Content-Type: multipart/alternative; boundary="Apple-Mail=_89E14239-0744-4696-BCA0-259847F8B65C" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: icomplete-fido-backward-updir litters kill-ring Message-Id: Date: Fri, 12 Jun 2020 21:20:54 -0700 Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: emacs-devel@gnu.org X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=185.67.36.142; envelope-from=andrew@schwartzmeyer.com; helo=mout02.posteo.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 00:20:59 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 04:21:06 -0000 --Apple-Mail=_89E14239-0744-4696-BCA0-259847F8B65C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hello, Please tell me if this should be redirected to the bug report mailing = list. It=E2=80=99s less a bug and more an undesired behavior. While = using fido-mode, I noticed my kill-ring just getting littered = with=E2=80=A6stuff. Turns out that icomplete-fido-backward-updir uses = zap-up-to-char, which kills instead of deletes: (defun icomplete-fido-backward-updir () "Delete char before or go up directory, like `ido-mode'." (interactive) (if (and (eq (char-before) ?/) (eq (icomplete--category) 'file)) (zap-up-to-char -1 ?/) (call-interactively 'backward-delete-char))) (defun zap-up-to-char (arg char) "Kill up to, but not including ARGth occurrence of CHAR. Case is ignored if `case-fold-search' is non-nil in the current buffer. Goes backward if ARG is negative; error if CHAR not found. Ignores CHAR at point." (interactive "p\ncZap up to char: ") (let ((direction (if (>=3D arg 0) 1 -1))) (kill-region (point) (progn (forward-char direction) (unwind-protect (search-forward (char-to-string char) nil nil = arg) (backward-char direction)) (point))))) Since the function zap-up-to-char does a kill, if you=E2=80=99ve typed = out a path /foo/bar/baz/, then decide to look elsewhere and hit DEL DEL = DEL, they all get killed (not just deleted). We could an optional arg to zap-up-to-char so that it can call = delete-region instead of kill-region, or duplicate the code in it, or = something else entirely. Jo=C3=A3o, what do you think? Perhaps this was intended behavior, but it = doesn=E2=80=99t seem like it. Thanks, Andy P.S. With Emacs 28 I=E2=80=99m super happy with how much 3rdparty stuff = I=E2=80=99m getting to replace with GNU code, either built-in or in = ELPA. Like fido-mode :)= --Apple-Mail=_89E14239-0744-4696-BCA0-259847F8B65C Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Hello,

Please tell me if this should be redirected to the bug report = mailing list. It=E2=80=99s less a bug and more an undesired behavior. = While using fido-mode, I noticed my kill-ring just getting littered = with=E2=80=A6stuff. Turns out that icomplete-fido-backward-updir = uses zap-up-to-char, which kills instead of = deletes:

(defun icomplete-fido-backward-updir ()
  "Delete char before or go up directory, like = `ido-mode'."
  (interactive)
  (if (and (eq (char-before) ?/)
           (eq = (icomplete--category) 'file))
      = (zap-up-to-char -1 ?/)
    = (call-interactively 'backward-delete-char)))

(defun = zap-up-to-char (arg char)
  "Kill up to, but = not including ARGth occurrence of CHAR.
Case is = ignored if `case-fold-search' is non-nil in the current = buffer.
Goes backward if ARG is negative; error if = CHAR not found.
Ignores CHAR at point."
  (interactive "p\ncZap up to char: ")
  (let ((direction (if (>=3D arg 0) 1 -1)))
    (kill-region (point)
= (progn
  (forward-char = direction)
  = (unwind-protect
      = (search-forward (char-to-string char) nil nil arg)
=     (backward-char direction))
=   (point)))))

Since the function zap-up-to-char does a kill, if you=E2=80=99ve= typed out a path /foo/bar/baz/, then decide to look elsewhere and hit = DEL DEL DEL, they all get killed (not just deleted).

We = could an optional arg to zap-up-to-char so that it can call = delete-region instead of kill-region, or duplicate the code in it, or = something else entirely.

Jo=C3=A3o, what do you think? Perhaps this = was intended behavior, but it doesn=E2=80=99t seem like = it.

Thanks,

Andy

P.S. With Emacs 28 I=E2=80=99= m super happy with how much 3rdparty stuff I=E2=80=99m getting to = replace with GNU code, either built-in or in ELPA. Like fido-mode = :)
= --Apple-Mail=_89E14239-0744-4696-BCA0-259847F8B65C-- From MAILER-DAEMON Sat Jun 13 03:26:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk0Z2-00054M-Fa for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 03:26:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk0Z0-00054C-Hg for Emacs-devel@gnu.org; Sat, 13 Jun 2020 03:26:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54107) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk0Z0-0001in-0k; Sat, 13 Jun 2020 03:26:50 -0400 Received: from [176.228.60.248] (port=3007 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk0Yr-0002Gm-4L; Sat, 13 Jun 2020 03:26:41 -0400 Date: Sat, 13 Jun 2020 10:26:32 +0300 Message-Id: <83h7vf4eaf.fsf@gnu.org> From: Eli Zaretskii To: Bastien Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org In-Reply-To: <87sgf7w7x4.fsf@bzg.fr> (message from Bastien on Sun, 07 Jun 2020 11:18:31 +0200) Subject: Re: GNU ELPA package discoverability References: <4e937898-ae46-710a-cbca-e452a1156fa1@yandex.ru> <2e630dc7-ba1d-e4c9-74b3-4da976db1e82@yandex.ru> <87imglg51l.fsf@gnu.org> <83d06txuv4.fsf@gnu.org> <871rn9l35o.fsf@gnu.org> <83tv05waob.fsf@gnu.org> <874ks5gtca.fsf@gnu.org> <87h7w4oh5x.fsf@sachachua.com> <87o8qclael.fsf@gnu.org> <877dwzo1nm.fsf@sachachua.com> <87pnajrvb4.fsf@bzg.fr> <83367eg6x4.fsf@gnu.org> <875zcas71l.fsf@gnu.org> <83k10pcrjv.fsf@gnu.org> <87d06g385p.fsf@bzg.fr> <835zc4abdj.fsf@gnu.org> <87sgf7w7x4.fsf@bzg.fr> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 07:26:50 -0000 > From: Bastien > Cc: Emacs-devel@gnu.org, sacha@sachachua.com, rms@gnu.org > Date: Sun, 07 Jun 2020 11:18:31 +0200 > > My initial idea was for this item to invoke a command like > (lambda () (interactive) (customize-variable 'package-archives)) > but you said that variable customization was not okay in a menu. I think it would be strange. We already have "Customize Emacs" in the menu bar, so having another item that leads to customization of a single variable would be weird. > Tools > Install Add-On Packages > List available packages (aka M-x list-packages RET) > Find extra packages (aka C-h C-e) > > And I'd also move "Search built-in packages" there: > > Tools > Install Add-On Packages > List available packages (aka M-x list-packages RET) > Find extra packages (aka C-h C-e) > Search built-in packages (aka C-h p) > > WDYT? If we want to move "C-h p" there, the parent item should be "Add-On Packages", without the "Install" part. From MAILER-DAEMON Sat Jun 13 05:24:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk2Oc-00025z-Rn for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 05:24:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk2Oc-00025r-9s for emacs-devel@gnu.org; Sat, 13 Jun 2020 05:24:14 -0400 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]:44493) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk2OZ-0002Z2-G6 for emacs-devel@gnu.org; Sat, 13 Jun 2020 05:24:14 -0400 Received: by mail-lj1-x22c.google.com with SMTP id c17so13712266lji.11 for ; Sat, 13 Jun 2020 02:24:05 -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 :cc; bh=VDKCiuZOwFbIufawIEHo9645+bL+FW4F0HAhWWmVDEs=; b=uIjoyUePvf/wag36T/GXgE9xV6Dc4cKwaYrGTO4U50bpR1py/GxOEbJ0rkLBE91K9o Qq47hzuZORFB69Tn3s14nXikKCDrOReiGErViLVism249FRJe5p88KXTp40Cw6lAwQzB Q6EWzaIcWmts4dPQ5JwQ1uvLbeR8fJ3UOlJUdEbxjpqbMEGMSwsf0+Lhwvq8vy461rk6 pnwqWeRydSNIpNtUjHXSmeIUZzvoB6dN+hl95/FSOZr3+R6fOeNI0UgK73cht7FjdIys nNSp6HId8bbkfckNjl6+iwrN7QuTS7TmdjzcoEkzUAlq1te2fYZbBRMNcF8NRCmQW0Z0 P50g== 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:cc; bh=VDKCiuZOwFbIufawIEHo9645+bL+FW4F0HAhWWmVDEs=; b=JEs2/myLkcWDRs6Dq4aMch/g9917804LQuwrHi8C7O0bDOHK+GReWdquyoj9a9qhq2 XklFvj+fz7KbFVsCorYhUTdzDpEO4332aoQOVTJB82wy8R8eQYxH2tUsDM5QwBEdP7tK SS//WvLn4sbNigHphtpNQs6EEjf1cJmMeEQNWjU6aqqYZ6DSuEaQOz0i8Et/NFFzwe9l 1QbcZ8VW4P7e3aua5riLOW6gED284VySN9VsIc7mN58x+Px1jwGhb5MBpFisNHMdlB3Z c5u6DwiCPGSLLbN5pj8E65LfeECoz1Ce11lF1VBBThRezbhx14ynHt+XADy+hcWSKxd3 m0ZQ== X-Gm-Message-State: AOAM531Qj9qs189zL/IptIoOqMbecORURa3zFG9r7gXh+j2tsfOaQPAn TtMpvDVaS0l57tebWgLffEtVurhj0ZnNLOiJ0wY= X-Google-Smtp-Source: ABdhPJxh/YtsoZi6SR/QmfyvxTCiIVJswYP6CRg3WUGaMnglFCCGndwCn2ml8HGU8TNkXtcZWBphW16AHvzWm7Grf2U= X-Received: by 2002:a2e:998f:: with SMTP id w15mr8565529lji.463.1592040243965; Sat, 13 Jun 2020 02:24:03 -0700 (PDT) MIME-Version: 1.0 References: <87zh98xofe.fsf@gmail.com> In-Reply-To: <87zh98xofe.fsf@gmail.com> From: Philippe Vaucher Date: Sat, 13 Jun 2020 11:23:37 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x22c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 09:24:14 -0000 > >> You approach is completely different from what I imagined: I was > >> thinking of creating new sections in the manual itself, or creating > >> a whole new manual, without having to actually write the contents > >> for it. It could be called the "Elisp API manual", or some better name. > >> One could visit that API manual from inside and from outside Emacs, > >> just as one does now with the normal Manual. A minimal amount of > >> Elisp code would allow some C-h function to take me there. > > > > Well there's two things: the "prefixed" `C-h f` and the "Elisp API > > manual". I think the prefixed `C-h f` > > (prefixed-manual-describe-function) is pretty much exactly what I want > > as a user. > > In my opinion, you're confusing/conflating two things, again: > > - The ability to have, at a glance, nicely documented, and nicely > discoverable, the list of the functions associated with a certain data > type, or a certain topic.; > > - To have that organization be provided by the existing or a new prefix > convention; I understand the distinction. I agree to a certain degree. I just find it inefficient to implement these separately. The discoverability should be in the language itself. The more it is in the language, the less you need to document and maintain it, and all tooling benefit from it. I understand it's the point of view of a minority around here, that's ok. > It seems we both want the first objective. But you seem want it with -- > or by means of -- the specific side-effect of the second. I don't that > side-effect at all, and this was already discussed extensively, I think. > Therefore my proposal, the "thing I was pushing for" is a way to have > the first objective without what I (and others) view as the drawbacks of > the second. Yes. I think implementing the first objective without the second is just more work and more things to maintain. and because I'm lazy I prefer to do less work. > >> In other words, as you know, a manual in Emacs is extracted from the > >> Texinfo source (.texi files) into various output formats. I was thinking > >> about code that performs this extraction into a new output (a new manual, > >> or a new section in the existing Elisp manual) including all those formats. > >> Without needing to touch the (.texi) files themselves. Maybe this could > >> be done with a special Texinfo macro, maybe redefining its built-in > >> @defun macro, which is what Emacs uses to introduce a function > >> definition. That was my idea. > > > > Well I don't know texi files yet, but I think it'd be fairly easy to > > write some helper elisp that generates what you want based on my code, > > That would be very strange IMO, to write this in Elisp. It would be > even stranger to write it based on your code. That said, everything can > be written in anything. Okay, I guess that's because Texinfo is a language of its own. Yeah ok then I understand your point, you want a texinfo macro that generates the "elisp api overview" so you have the manual-first option. I prefer the code-first option, where the code is the source of truth and things are generated the maximum possible from it instead of having to maintain two separate systems, which can easily become out of sync. I understand that's not how Emacs works and it's not conceivable to change this, but I hope you understand where I come from. We'll see if I find time to write that texinfo macro. Regards, Philippe From MAILER-DAEMON Sat Jun 13 06:17:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk3E0-000323-Hq for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 06:17:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57712) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3Dz-00031R-3v for emacs-devel@gnu.org; Sat, 13 Jun 2020 06:17:19 -0400 Received: from mail83c50.megamailservers.eu ([91.136.10.93]:50866 helo=mail18c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3Dw-0002gT-Ln; Sat, 13 Jun 2020 06:17:18 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592043432; bh=IA5+ymyKtMRh1ZGo2rTzv+8apHoeWx46L8DJFPr9NHg=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=eBdix1xgDM/n2OKjgZ0bsdc63cq/rZ6YcsF93E6+DaYHMM2M3tuZdVC/VgtaRFx6r GJtkHj9rQ1SVjNmqAA+BdPK2r3b5zlG0uKYlbgmGPJEqSNoL3gTEfUFAs4dOz1vlsb 3hMqS/N5NUo3ligZAhVisMImigog2ukL7mhRRJWU= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail18c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DAH9V1009795; Sat, 13 Jun 2020 10:17:12 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83pna43xrl.fsf@gnu.org> Date: Sat, 13 Jun 2020 12:17:09 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F15.5EE4A743.005A, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=K8Zc4BeI c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=lHsJ8FAhMERQ2Ay51c8A:9 a=CjuIK1q_8ugA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.10.93; envelope-from=mattiase@acm.org; helo=mail18c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 06:17:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 10:17:19 -0000 12 juni 2020 kl. 21.11 skrev Eli Zaretskii : > The error checking aside, are > the return values of the original code the same as of the proposed > unified code? Returned values for well-formed input are identical, except the low bits = in some cases on Windows (try "#123"); that bug has been fixed. Malformed arguments are now consistently rejected. Previously they were = only sometimes, depending on the platform and the nature of the error. > At least tty-color-standard-values seems to never return nil for an > RGB spec, but now it will, right? Can its callers cope with such a > return value? Not sure what you mean here. Mind giving a concrete example? > And I wonder how the other callers of parse_color_spec will behave if > it detects an error and returns false. Exactly the way they do now when they detect an error: treated as a = colour not recognised. From MAILER-DAEMON Sat Jun 13 06:40:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk3ap-0007yT-GU for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 06:40:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39982) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3an-0007wr-VT for emacs-devel@gnu.org; Sat, 13 Jun 2020 06:40:54 -0400 Received: from mail1443c50.megamailservers.eu ([91.136.14.43]:59254 helo=mail264c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3al-00077q-Qk; Sat, 13 Jun 2020 06:40:53 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592044847; bh=THH5HLtJSikOyJ+tSgYJ5cQaoUf1tI3DDBf46vmbcTw=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=fD10GvFoLMRIAeYL3UASmG1b2/r+Nlb7jE8rkgvmo4ZyvqqUOjc65ycCuenZGzI/X yzJaqoMobou2EjL52qBW8X0uUrLko9QHqAzBXcGZF4fjbo0vI7nqxF3y5DVAP2k+h+ YpJCVKGXD2n4q1BRQscTaazcITZsW29adzfuSW6I= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail264c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DAejM1032232; Sat, 13 Jun 2020 10:40:46 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87a718w0wt.fsf@gmail.com> Date: Sat, 13 Jun 2020 12:40:45 +0200 Cc: Eli Zaretskii , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <87a718w0wt.fsf@gmail.com> To: Pip Cet X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1D.5EE4ACB8.0006, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=PPNxBsiC c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=nIji5eky4BrDQD_8p-UA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.14.43; envelope-from=mattiase@acm.org; helo=mail264c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 06:40:48 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 10:40:54 -0000 12 juni 2020 kl. 21.15 skrev Pip Cet : > Only quite recently; the X version was changed to use the standard > scaling convention Thanks for the perspective, and for driving through the reform at the = time. The suggested patch obviously builds on top of your work. I got fed up with silently getting nonsense from mistakes like #12345 -- = lax error checking is just unhelpful. There are probably a lot more duplication and inconsistencies between = the backends, which is to be expected in a system that evolved during a = long period of time. From MAILER-DAEMON Sat Jun 13 06:55:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk3pO-0000DV-KX for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 06:55:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3pM-0000Af-Qj for emacs-devel@gnu.org; Sat, 13 Jun 2020 06:55:56 -0400 Received: from mail1442c50.megamailservers.eu ([91.136.14.42]:33336 helo=mail264c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk3pJ-0000zH-0y for emacs-devel@gnu.org; Sat, 13 Jun 2020 06:55:56 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592045748; bh=JRpYwh9hk6P/KPED3AIWmRNIzRV9L4bmSi/XHXEo9Vg=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=QczmmNascYriB16rdIYP9PE7gXSWoV5CDfedNMbTFqndlNayBh4S50cXTyeVMN7u4 3SQ6yCfSLCjt3eTvK4dzGT72Ox2ps9PUzPbul50WoOMwbXBIlx34AtDtZvo/h9Seq1 Mi4uFmYwEp3MnPaahcO+4lyVQLjJxEnZ1i5pCoD0= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail264c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DAtjTL028407; Sat, 13 Jun 2020 10:55:46 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: Date: Sat, 13 Jun 2020 12:55:44 +0200 Cc: Stefan Monnier , Emacs developers Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> To: Yuri Khan X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F28.5EE4B058.001B, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=PPNxBsiC c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=pGLkceISAAAA:8 a=IWG-QM4Vg1VuXY_icyAA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.14.42; envelope-from=mattiase@acm.org; helo=mail264c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 06:55:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 10:55:57 -0000 12 juni 2020 kl. 20.36 skrev Yuri Khan : > Despite science calling for .18, I find that my subjective optimal > cutoff is somewhere between .25 and .31, even if I change the formulae > to more accurately model the piecewise gamma correction of sRGB: Thanks for the report, and yes, I did test with the exact sRGB gamma = curve and noticed almost no significant differences. The only differences in the standard colour table are: #999999 (grey60), = #ee7600 (darkorange2), #ee7621 (chocolate2) and #bc8f8f (rosybrown), all = categorised as 'light' with power 2.2 and 'dark' with the exact sRGB = gamma function, assuming a cutoff of 0.325. It's really hard to say = which one is right. From MAILER-DAEMON Sat Jun 13 07:48:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk4eH-0001rb-MV for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 07:48:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42718) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4eF-0001or-Nd for emacs-devel@gnu.org; Sat, 13 Jun 2020 07:48:31 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:51332) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk4eD-0000x4-AR for emacs-devel@gnu.org; Sat, 13 Jun 2020 07:48:31 -0400 Received: by mail-wm1-x32c.google.com with SMTP id b82so1681392wmb.1 for ; Sat, 13 Jun 2020 04:48:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=tnT2nxhU6Z6ljN17BjFrWsC5pfEOEmGZKfwgwlkprJ8=; b=ule9/z1DXzvH3dqLSojYPgavRC7cCE5WmdiMW8HMyyabyY2J85KhMNOSnQKHYo8rr3 o/FQvlcOXaO7sNXQ+d8FRcL/F/+UgbrykB8uVgJGbo38IM8AlzB2Le64vTixkIrDG7/x 1iLqqaDm67hYggVcBQtrZnpFNHV1kQenQbrNreN7hBzE8FrBJkJyhUu93a4+oTqTFsG6 25YTBUnErZj6znRqtvvDDllfOgMba37CWURmCK2UmQbY/VZvb75BKWt7NSW7wxTD89PR gMXKsHGDlrF9Io9GGxNhTwwoZL3tPX+NRHMZc/Zb/gJZGLhFz8MYHJyEFC1uybuKXXzu BuvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=tnT2nxhU6Z6ljN17BjFrWsC5pfEOEmGZKfwgwlkprJ8=; b=f5UnNuz9YfHGg75zXIu5S2WjNju+/1OBNt1wHjymeYtDvjDC6H6xp9Nl/Zjss0DcIC ufNACILLc8/oI0aG3ALKBstalcSbAWo7r0NuWXqnLxChFHfftDPUVRcauhVI/ybNFTPM U6TR/r8vCapRwcDMBhqW5IPpiEAfH3Ale53rlM38hxuln7RRMkFL2qtIzjCwu3mzNTC5 guObTbzEFKP8qQ14FeeC1slEPP6isTwFNlmidvojV8uEUjFIFPLC9CB7yqx1evR460CB RDy7JpGURFcVCC8IE8sFrnMPapilYJzT/XQBVntc5915Et7m1oAzSX4feq/1+m8XU6Dc GdmQ== X-Gm-Message-State: AOAM532DZDrmg8l3nb/b79fqebdv1LEfeLrRywPvmpTUE9mzPMSU+9Fp 9/hoaOmGsQWasM/lcz63xFvXl0vd8XQ= X-Google-Smtp-Source: ABdhPJydtlffsAyCCW8oFX5zQWmsY+mxRPakMeQJAcOgg3Ira4I3GLlU4DHw+8ttlmQzowsNAJCklA== X-Received: by 2002:a1c:3c08:: with SMTP id j8mr3583329wma.158.1592048906784; Sat, 13 Jun 2020 04:48:26 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id 67sm15173507wrk.49.2020.06.13.04.48.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 04:48:26 -0700 (PDT) From: "Basil L. Contovounesios" To: Richard Stallman Cc: emacs-devel@gnu.org Subject: Re: Support for multiple batteries References: <87tuzhy49m.fsf@tcd.ie> Date: Sat, 13 Jun 2020 12:48:24 +0100 In-Reply-To: (Richard Stallman's message of "Sat, 13 Jun 2020 00:02:41 -0400") Message-ID: <874krfnq47.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::32c; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32c.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 11:48:32 -0000 Richard Stallman writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > AFAICT only two battery status backends currently support multiple > > sources of information: battery-linux-sysfs and battery-linux-proc-acpi, > > for Linux sysfs and ACPI support, respectively. > > Could you clear up for me what "currently" means in this context? I > don't know what code was changed in January or so -- only that the > change led to incorrect reports, on a Thinkpad T400s with two > batteries inserted. The battery.el package provides a user option battery-status-function which determines how to query the system for information on its power sources. When battery.el is loaded, it checks for the availability of various system features in order to set the user option to the most sensible default out of a known set of possible values. Each of these values is a function (a "backend") which returns an alist of all relevant battery information, such as load, time to discharge, etc. Emacs 26.1[1] introduced a new possible value for battery-status-function, namely battery-upower, which gets its information from a UPower[2] D-Bus service (daemon) running on the system[3]. This backend was disabled by default, i.e. in order to use it, a user would have to manually set battery-status-function to battery-upower. In early February[4], the battery-upower code was improved and battery-status-function was changed to default to battery-upower if the system provides a UPower service. This can be perceived as a regression on multi-battery systems because battery-upower currently assumes a single battery, whereas the previous defaults of battery-status-function on modern GNU/Linux systems (battery-linux-sysfs and battery-linux-proc-acpi) support multiple batteries. The patch in [5] adds support for multiple batteries to battery-upower as well, so that it can remain the default backend when applicable. [1]: * lisp/battery.el: Add 'battery-upower' -- very fast battery status. 05a969265c 2016-12-02 12:17:38 +0200 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=05a969265cabdf361492ed471f1a8dc369840401 [2]: https://upower.freedesktop.org/ [3]: https://www.freedesktop.org/wiki/Software/dbus/ [4]: Make 'M-x battery RET' work out-of-box for UPower users. d8f4317f03 2020-02-06 09:13:19 -0500 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d8f4317f03be69cfaf6a60bda228996590fd92b5 [5]: https://debbugs.gnu.org/39491#55 > > The way they handle multiple batteries is by merging multiple data into > > a single report. > > I am not sure what that means, concretely. The current multi-battery-aware backends, battery-linux-sysfs (which uses the /sys/class/power_supply filesystem) and battery-linux-proc-acpi (which uses the /proc/acpi filesystem), iterate over each battery file, collecting and summing various relevant data, and then return them as aggregate values. For example, they sum the current energy and energy-when-full of each battery, and divide the former by the latter to get the combined load percentage. > Is this what you mean by "proper" support, > > Proper support means at least giving a good estimate for how long > before the machine runs out of energy, and a good estimate of the > actual fraction of maximum charge the batteries can hold. The code > from last October could do that. > > When I type M-x battery in the version as of October 2, > it displays something like > > Power BAT, battery Discharging (98.1% load, remaining time 4:04) > > where the numbers depend on the energy capacity of each battery and > the current charge of each battery, as well as the actual current or > power. > > That is what I think is crucial for M-x battery. In that case I think the patch in https://debbugs.gnu.org/39491#55 fixes the regression you observed by making the new default backend, battery-upower, behave like the other multi-battery-aware backends in this regard. BTW, the reason battery-upower makes sense as a default is because the UPower standard provides a uniform interface[6] over various system interfaces such as the /sys/class/power_supply filesystem, and it also supports asynchronous battery status change notifications which can be used by battery.el to update its mode line string without polling. [6]: https://xkcd.com/927/ HTH, -- Basil From MAILER-DAEMON Sat Jun 13 08:00:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk4pV-00084D-E4 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 08:00:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4pU-00081m-43 for emacs-devel@gnu.org; Sat, 13 Jun 2020 08:00:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:55824) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk4pT-0002jP-Oa; Sat, 13 Jun 2020 08:00:07 -0400 Received: from [176.228.60.248] (port=3898 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk4pR-0001CW-BP; Sat, 13 Jun 2020 08:00:06 -0400 Date: Sat, 13 Jun 2020 14:59:56 +0300 Message-Id: <83a71741mr.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sat, 13 Jun 2020 12:17:09 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 12:00:08 -0000 > From: Mattias EngdegÃ¥rd > Date: Sat, 13 Jun 2020 12:17:09 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > 12 juni 2020 kl. 21.11 skrev Eli Zaretskii : > > > The error checking aside, are > > the return values of the original code the same as of the proposed > > unified code? > > Returned values for well-formed input are identical That's good to know, thanks. > except the low bits in some cases on Windows (try "#123") I don't think I understand what I should try; please elaborate. > Malformed arguments are now consistently rejected. How exactly are they rejected? I see the return value of parse_color_spec, but what happens in its callers, and what happens on the Lisp levels when those callers are called? > > At least tty-color-standard-values seems to never return nil for an > > RGB spec, but now it will, right? Can its callers cope with such a > > return value? > > Not sure what you mean here. Mind giving a concrete example? The first two branches of the 'cond' would always return a list before your changes, but after your changes they could return nil if color-values-from-numeric-string (not the best name, btw) returns nil and the input is of one of the two forms parsed by those two branches. From MAILER-DAEMON Sat Jun 13 08:06:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk4vW-0003aK-94 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 08:06:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4vT-0003Xr-KN for emacs-devel@gnu.org; Sat, 13 Jun 2020 08:06:19 -0400 Received: from forward106o.mail.yandex.net ([2a02:6b8:0:1a2d::609]:33736) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4vP-0003hR-8d; Sat, 13 Jun 2020 08:06:18 -0400 Received: from mxback1j.mail.yandex.net (mxback1j.mail.yandex.net [IPv6:2a02:6b8:0:1619::10a]) by forward106o.mail.yandex.net (Yandex) with ESMTP id 54FB25060B2B; Sat, 13 Jun 2020 14:59:24 +0300 (MSK) Received: from myt5-aad1beefab42.qloud-c.yandex.net (myt5-aad1beefab42.qloud-c.yandex.net [2a02:6b8:c12:128:0:640:aad1:beef]) by mxback1j.mail.yandex.net (mxback/Yandex) with ESMTP id TaGPHewzYH-xN8qdx5M; Sat, 13 Jun 2020 14:59:24 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592049564; bh=hE1eTlYD4AD6Nb/NFaOCiRtjlDcc6Y5UvuzJtk/I1oQ=; h=In-Reply-To:To:From:Subject:References:Date:Message-ID; b=v4/RZ532XwOu1ZDbKBfM1F8HEQvvTp89TE0cxHS7zIMSX9R+4BpWi4RX4Dxi6YxQJ Z7zb1FL1C3KbuVEhV5J9cNRrnvaDTgoYnZpGG75HXnVmU2r4Y+rkOys0SIRcJI/PeQ vAP/m8z9EzucfWLVrHUY0w/f3c2VVNSgtcLb5RyQ= Authentication-Results: mxback1j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt5-aad1beefab42.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id O7VIwnRHmn-xMpOED9X; Sat, 13 Jun 2020 14:59:23 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sat, 13 Jun 2020 14:59:21 +0300 In-Reply-To: References: <863691n4xl.wl-me@enzu.ru> <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::609; envelope-from=hi-angel@yandex.ru; helo=forward106o.mail.yandex.net 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 12:06:19 -0000 On Thu, 2020-04-23 at 19:07 +0200, Stefan Kangas wrote: > Eli Zaretskii writes: > The reasons why package authors would not want to include it, on the > other hand, > could obviously vary. Some of the reasons I have seen are > unfortunately very shallow: > > - Misconceptions about how hard it is to work with emacs-devel. Hello! As someone who does not contribute to Emacs for the sole reason it is *way* harder than in any other project I'm aware of (although well in line with other GNU projects, but even among them Emacs takes the lead) I want to emphasize this is not a "shallow reason". It all comes down to Emacs development not being automated. Which puts down too much strain on contributors (not mentioning Emacs maintainers here, because last time this discussion happened (1.5 year ago I think), Eli ensured me that they are okay. Fair enough: I'm not a Emacs maintainer, not gonna speak for them). 1. There are many wrong ways to send a patch; and the correct one is the most non-obvious. Most popular mistakes I think come down to copy- pasting the patch into email client. Most modern email clients require lots of tinkering before they work fine with plain text, otherwise they'll screw patch up in various ways (breaking lines, replacing whitespace, removing whitespace, you name it). Okay, so usually email-based projects recommend using git-send- email. Recently I sent a patch like this¹ and got a complaint it doesn't look like what git-format-patch would produce (is that maybe a hint maintainers are being strained too?). Huh, wrong way again? I'll give you some examples so you'd see the format looks exactly what other email-based project use/used: one from Mesa project² (well, before they moved over to Gitlab-based development) and another one from kernel³. What's the correct way? Well, apparently it is either to combine in some way git-send-email and git-format-patch, or it is to attach a patch to email. "To attach", who would've thought? Attaching patches is frowned upon in all other email-based projects because it is hard to review it, Idk why Emacs even allows that… Okay, let's get back to all those "great packages not included in Emacs": YOU CAN NOT SEND THEM PATCH WRONG. Sorry for caps, I want to make sure it is visible: there is no way I'll send a patch, say, to company-mode, and will get a reply "Dude, your patch does not apply here"! They use either (open-source btw) Gitlab or (proprietary) Github. You can use command line or web-browser to send patches — either way, it all becomes a thing called merge/pull request, and making sure it is correct is all automated. Zero efforts from package maintainers or contributors. 2. Unusual requirements from commit messages: no other projects require writing down a list of functions I changed just for the fun of it. This is what there diff is for! Let me guess where the requirement came from: I remember seeing that Emacs maintainers accept even patches with a bunch of unrelated changes, like 1. renaming a variable, 2. refactoring a code, 3. adding a new feature. No serious project would accept such patches, but apparently Emacs decided to hack that around, and are instead requiring that people write down each function name and its change in commit message. Okay, you want this — but could you at least automate it! And no, some Emacs function does not cut it, people not necessarily use git from Emacs. I personally don't. Please, use git hoooks, because this is what everyone is *forced* to use, you can't possibly miss a git hook. And please, make sure that when people do git-commit-amend, the function names are updated accordingly. Full automation, to make sure this unusual unique requirement of Emacs development stays as unobtrusive as possible. 3. FSF assignment: yeah, it is easy to get. But as a package maintainer, would I want more contributions or only having code from elite members of FSF? I'd go for the former. If some package user found some corner case in a function in my package and wants to contribute it now, and I stop them "go assign some copyright and don't appear at my project without that", this is a punch into motivation. They may do it or not, it depends. 4. Patches are discussed on a bugtracker. Good news: contributors probably won't care. Bad news: as a package maintainer I'd not want to give up my abilities to 1. Close outdated discussions 2. See the diff between current and previous patchset version 3. Immediately see which patchset is the current version. 4. Automatically run CI on the new uploaded version of the patchset. 5. Immediately merge the patchset once I'm fine with the changes. 5. As a contributor, when I stumble upon a bug I could fix in software, first thing I usually do is go check it is not fixed in latest code and that there's no pending merge/pull requests that seem to fix that same thing. So, for example, I want to see pending patchsets to python-mode, can I do that with Emacs "bug-patch-tracker"? No, with debbugs.gnu.org you can either find pending patchsets, or you can make a text search, but over everything: bugs, patchsets, closed or not… P.S.: I have a feeling, people on Emacs-devel don't consider these to be anything but nuance. Well, I've got FSF assignment for contributing to Emacs, and since then I have many times stumbled upon things I could try to improve. But every time it happens, I remember how hard it is to contribute here, and dismiss myself with "no, not worth it". The patch from two weeks ago¹ was the exception just because when I stumbled upon that problem, I immediately figured it is likely a one-liner fix. As it currently stands, I'd strongly recommend against moving packages from gitlab/github to Emacs upstream. 1: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=41684 2: https://lists.freedesktop.org/archives/mesa-dev/2018-December/210803.html 3: https://lists.gt.net/linux/kernel/3588040 From MAILER-DAEMON Sat Jun 13 08:07:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk4wF-00041K-Di for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 08:07:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4wD-0003zY-Mf for emacs-devel@gnu.org; Sat, 13 Jun 2020 08:07:05 -0400 Received: from mout.gmx.net ([212.227.17.20]:48719) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk4wB-0003wK-Jy for emacs-devel@gnu.org; Sat, 13 Jun 2020 08:07:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592050020; bh=G91IJhqXe5f+k+ytUQwRE5u/xZtFsBNQ/fpfzbxDiAU=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=gEwWhCvWgaNU5bnvAaZNqFEoqy5fABPvcDzhA+UpSOSkf+gpmiNkKx3wlEnbJR+X6 OwOxulBXjAdWGRop6s68kV3Nj8CTAjMfIQBxIyzVpi/HNJ3QQNtqLoEGZEYts1IdNP Ci3AIH5cV5IiNih5q78FnDOwoTDQ7DXQAKtxB880= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from aceraspire5 ([79.167.208.222]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MjjCF-1j50si3Z0t-00lG2z; Sat, 13 Jun 2020 14:07:00 +0200 From: Deus Max To: Michael Albinus Cc: emacs-devel@gnu.org Subject: Re: Tramp and crypted files References: <865zd1h3ru.fsf@duenenhof-wilhelm.de> <875zd15rze.fsf@gmx.de> <87wo5gjfbr.fsf@gmx.de> <87eermkdov.fsf@gmx.de> <87r1vlipg4.fsf@gmx.de> <86lflrttxn.fsf@duenenhof-wilhelm.de> <874ksdhdmp.fsf_-_@gmx.de> <87h7wcwbn9.fsf@aia00820.aia.gr> <87lfloou9y.fsf@gmx.de> <874ksbvwn0.fsf@aia00820.aia.gr> <871rn7rgtv.fsf@gmx.de> <87367kfbwa.fsf@aia00820.aia.gr> <87a71ryubz.fsf@gmx.de> <87r1v2em69.fsf@aia00820.aia.gr> <87eeqqncb9.fsf@gmx.de> Date: Sat, 13 Jun 2020 15:06:53 +0300 In-Reply-To: <87eeqqncb9.fsf@gmx.de> (Michael Albinus's message of "Sun, 07 Jun 2020 17:08:26 +0200") Message-ID: <877dwbp3tu.fsf@aia00820.aia.gr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:rL4mrNAQg0X5V24+sJwf8W8rPb68kCgwqXG2RBykGxVbM7hwLXH N66cnm/+QARdXtViyqsoKa3rd+vhvIWQK6mZJvpg8+SXLM3eh0eanUqvWbi/7Jn3ejppsna sb0PPYwvpp3CWT8gGdOVGX2P1sNAsc9kd98d0Bn1LkxDPTS539ECQoHrUqNK1q5iBYPKiwU YZfYxFEcF/NdsB6mWbAFA== X-UI-Out-Filterresults: notjunk:1;V03:K0:GxMkBU/oQ4c=:L+nVkJfeacl+zc7IwZ8Xfn ip8eNoy8L1ovO4Ir6rSYWc9w8UYIHIylx7vTN5pjnXPspv3U0hzcyu1KavfOjJPr8xesf9zQn 27hdjxkAdL/miGzMjxOoLDjy9hWm1zOmBKKjjrTOahfMIe6eVvNIV0i3KyVOPO6Z7Z07xeoeW HZS/bXk2rvRcaCicHaf2x52au7zkpeParnk03MrIIekes81s4EXcIj2ihscF3e4PS9otWbsRb CuwH6pz76XCCPz5XzttZsboMh1zqVFd4OGoGzbXPRn+oqYufpPIJ561s5aSa1n7CvTseoPZpO HWn9RjcGB7kJfT0ZEuQefYBJy/riA7814WmfhfceLge2SCtZSUFLp3E1QPfKGTKACf74eTw4S otn9z384Ko1s1jCUftpa0g/cXzSYe8SZYEwkk6C69LbGHeYqstQlF3Vyi0L6UhJehDQBZW6Jj Nzz1RUYIgI48ysHRSWNwyLfsyKg3JhkbrVVfJs3Xn5hV8nMpu3jzpeaQiZXF+vWfRRor6fJSi yBbrbiRRkafVnzzL6i1z2XV/mNE1gLPr44oxtPggzhqDxy2bRY9Qws3jOEXZ+lV75EJKeQA+F gmkuXu3OceXvrmZCH2sDJchwOLwLAPq/8dL0GRkh0Fv8q416xKen/GGz8aey6kLzvCnJxnZXO K09aad7VP1uHMXc/ipbjnngO14nTaVjLGV597qMf7lGm8b4J6yuz0uCpfHD/6R26ShwyMsAY/ Eu/+j7pT+NlMA38kR70nZ4yrMPY3zRAAddh4EsKRraTbGWC8uSa3Xvb/weUvsPyfeRnHbXSkK WW0F/cHVbXF0NK8xRcrK4fm1eLbeUObVBTjMWfnhROkl3EHDJh9dz094mWGYQH0RWWE5CtY3Z d867GA4Mia4YufUpMshuxGkoZzNXsLx9Mj3u9+q/JvJ1dOuMFX1SAZhJhUBB9QbNn43WDEuEm pvd+HjaOVigqNHkCQymU9FduD/lo8g6DIarsLJ8NJJtLh19wzlNKM5eDwK+7miqxAyHiPk+Gk chc+fmLy/QNHkHLEJbtUrEUz656dfrRZABI4x6WDykbaq1elmEBQEhlXDwKosE4iq/+enmGFB P7I/kZJqfZrFzLFgBcPD8iV1223jFOoWtGrExOHqw5qXzFfkE4UNkPMZm3T3wi64OklwuIz0R 2nKulgTWew47OqkOhkK/zaYlCgy2y8k7QSdZg0eP3Tg4pQ1RMrHB+VRj/lNTy4iRWVJfE= Received-SPF: pass client-ip=212.227.17.20; envelope-from=deusmax@gmx.com; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 08:07:00 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 12:07:05 -0000 On Sun, Jun 07 2020, Michael Albinus wrote: > Deus Max writes: > > Hi, > >> Great! I need to reed up on the new tramp-crypt handler. > > Well, it took longer than expected due to other responsibilities. But > now I have pushed to master the very first version of tramp-crypt.el. > > It isn't ready to be used in production, but it passes already the > majority of tests in tramp-tests.el. I haven't updated tramp.texi yet, > but the Commentary section in tramp-crypt.el should give you a first > howto for application. > > Note that you can apply this for any remote directory. But for testing, > I have created a local directory "/tmp/crypt", and I have used the > remote directory "/ssh:hostnamegandalf:/tmp/crypt" - this makes it much > easier to test. Tests on my nextcloud server look also promising, but > this needs more polishing. > > The Emacs Makefile doesn't seem to recreate tramp-loaddefs.el > automatically. In case you see compilation errors, try "make -C lisp > autoloads" first. > > Comment welcome! > > Best regards, Michael. Hi Michael, Sorry for the late reply, but other priorities have distracted me. I have even fallen behind on reading the mailing list ! I would be happy to test and comment, but will need some time to settle the other priorities. I'll come back in a week or so. DeusMax From MAILER-DAEMON Sat Jun 13 08:50:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk5c3-0007Q3-3N for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 08:50:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk5c1-0007Pu-Fa for emacs-devel@gnu.org; Sat, 13 Jun 2020 08:50:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:56359) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk5c0-0002Cz-OC; Sat, 13 Jun 2020 08:50:16 -0400 Received: from [176.228.60.248] (port=2983 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk5c0-0000lf-03; Sat, 13 Jun 2020 08:50:16 -0400 Date: Sat, 13 Jun 2020 15:50:05 +0300 Message-Id: <837dwb3zb6.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> (message from Konstantin Kharlamov on Sat, 13 Jun 2020 14:59:21 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <863691n4xl.wl-me@enzu.ru> <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 12:50:17 -0000 > From: Konstantin Kharlamov > Date: Sat, 13 Jun 2020 14:59:21 +0300 > > Okay, so usually email-based projects recommend using git-send- > email. Recently I sent a patch like this¹ and got a complaint it > doesn't look like what git-format-patch would produce (is that maybe a > hint maintainers are being strained too?). Huh, wrong way again? FTR: that wasn't a complaint, it was a gentle request for the future. Your patch was committed, before I sent that request, even though committing it required some extra manual work on my part. We recommend using git-format-patch because it makes applying the patch easier and less error prone. It never occurred to me that a routine recommendation would be interpreted as a "complaint", let alone trigger a 950-word rant. From MAILER-DAEMON Sat Jun 13 09:15:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk60q-00030V-Dx for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 09:15:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49212) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk60o-0002xg-TX for emacs-devel@gnu.org; Sat, 13 Jun 2020 09:15:54 -0400 Received: from mout.gmx.net ([212.227.15.15]:50453) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk60m-0006YO-S3 for emacs-devel@gnu.org; Sat, 13 Jun 2020 09:15:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592054149; bh=NB7nSrOiwFlbOi5iUS0J38BLGTOg8KqbmoOPKwQcZIg=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=euR2QVEqxfhsujhckxaNIwk3bCP23BR+yMp+fVJzjqlJ6ncT8e08SPtbG9I6VLpWI HBbQRbk/ufeXTbV24Sh1QdGu+dYw17SOBezLwOkXghcJC8Ee3DCty/lIoypjfYAmJ2 wsI1a4wuLyZo3kxdLR+3zxUWZ29PVaBAZ6KX/hn4= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([212.86.40.182]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M4JmN-1jkMzc1fUX-000PMT; Sat, 13 Jun 2020 15:15:49 +0200 From: Michael Albinus To: Deus Max Cc: emacs-devel@gnu.org Subject: Re: Tramp and crypted files References: <875zd15rze.fsf@gmx.de> <87wo5gjfbr.fsf@gmx.de> <87eermkdov.fsf@gmx.de> <87r1vlipg4.fsf@gmx.de> <86lflrttxn.fsf@duenenhof-wilhelm.de> <874ksdhdmp.fsf_-_@gmx.de> <87h7wcwbn9.fsf@aia00820.aia.gr> <87lfloou9y.fsf@gmx.de> <874ksbvwn0.fsf@aia00820.aia.gr> <871rn7rgtv.fsf@gmx.de> <87367kfbwa.fsf@aia00820.aia.gr> <87a71ryubz.fsf@gmx.de> <87r1v2em69.fsf@aia00820.aia.gr> <87eeqqncb9.fsf@gmx.de> <877dwbp3tu.fsf@aia00820.aia.gr> Date: Sat, 13 Jun 2020 15:15:48 +0200 In-Reply-To: <877dwbp3tu.fsf@aia00820.aia.gr> (Deus Max's message of "Sat, 13 Jun 2020 15:06:53 +0300") Message-ID: <874krfgl8b.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:hMYluydoa8IlZ+4fY7bcn/L6wbRYS2163nWfw4FCPoOOLoMlKuT 4DZ4F01kyVLIbcfbdB6qE5pmIi2xbCDHuE1JsziScHQ70XHMbS8b13MMrLWhpCDVrhWrk3t 9bgepSBUUsC0Il0rXokSiho9NGg5066pQMw0AbSh8n3HJ0SdYrKi4E3rXvHjXcWAMQako32 BSI1X4HSWAzfS3WxBphAA== X-UI-Out-Filterresults: notjunk:1;V03:K0:R+yR76AHL48=:DMsoiPH3DSQFKYab14aNSg oGZXtsD97bnQ0oDBWU5PMpO53ImYKQkJJP+JXrl3xYLp580UKMplIE9CdLCk/jEAvE1CKmM9M U7+KZrNNs7DJSu+I9jxrYcWUpqRW4MO5uh8Ace+DbY2eL+tJy9do2qujzJUdM6h+pL9h53rYf /p0ReF5w/xUFtsCf6PDrbPvNJOvngtcOo5wCEUOTcBu5eNvpNEl56CtwF3+lszQ5mdGi3cB/Q JhmRbduVfyAGbknQEb6HK2It2h3pB4lLEZ0N9neV4G70KZFC0Tw3z7o55hr2jwey8XlZJCrpw TkDPb/XMBS//hSv/QwkJrzaEYo7NpIpnruJsitkDB51JnivDXOCpzs5tkXveqm+IeT7sFhV9b ObrIvOJpeUVs7oVhhJfVR+0YHm27N0cCMZW3hS+CwOmAezWMQHhCBthKdReuOfcn0CmQ0Lk9B JTl/pqNXM4i8mOBdYwllOPoAiMohthnuOOkqKhtHRJtCVwWO9s+4xBT0m8PlwjtHT6SdVIvm0 Q9AOIKCZMYlGEeYG2e22CugssDLRMcHuos2BbOZDtIH1ScoNi64x7pV3T3KIGBe94hvZDKpk7 nsZ3VsnKqzo/bVmvl/5tAkvJcSkERILUVi1pkAs5mVr/9pqO4O2BN/1qVQXbkvudaiWEC8dKl c9vf/iYevkJ5HWC++zW2oWQjqEpxLGFmNz1rkJBHX/FRJNmWBIE1EQ9Ov365rT3d6/OdLrVrg TTEkohA5sqa4Nnm/GzbgX0Hi4OkW3v4ufiDmuUNHqxpTSnQi7NURUy8q4i15rc5exXD0JCe3+ e585rGptuVDsbwWmtVqtGbdL21FYAw5X+YRVwW53LADS+M3NSVpyvBPkp7OYIOrqJHgQtnhjZ c9Tv/ITknXb02nwLwuxogulpjXNQTN1NWCh8DOedhmp8aSTrcp7z6CWJC9Xi13OkQ5fgATnx0 2UpGwnoV6VWU114So3TnKrfBqTThUGcPrrdRgIvDMIXk8LNYuHgfjshBQFsiHd6Prg91aTkn8 xYqvJ5bfQ6fI+zZmn8gmYLp4tcTrAzMS8nyTrBDFbVXdXCZivgRiySRRU6AaBZFOOayhuM8bI tsq4wn7jUgFo01uWgik7T3oPIcwEF+3bckM6BThj+3KFAz3e4bKXtHI06LJFCwbNZyBF+8+xt aUutoWpWqJiGTuFcq+Yvifo07dsF8EjBOa9zGjbFVwbCBuUZf8rifcnbWi7JpGG+YYM83OtWV 99qvlhwwWybEolZZY Received-SPF: pass client-ip=212.227.15.15; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 08:15:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 13:15:55 -0000 Deus Max writes: > Hi Michael, Hi, > I would be happy to test and comment, but will need some time to settle > the other priorities. > I'll come back in a week or so. No problem, take your time. In the meantime, I'll try to pass as many of the tramp-tests.el tests as possible. I'll plan to release Tramp 2.5.0 end of June; it would be great to know whether tramp-crypt.el could be part of this. > DeusMax Best regards, Michael. From MAILER-DAEMON Sat Jun 13 09:41:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk6PN-0007zt-Br for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 09:41:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36464) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk6PM-0007zk-0v for emacs-devel@gnu.org; Sat, 13 Jun 2020 09:41:16 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:40501) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk6PK-0001wj-5Z for emacs-devel@gnu.org; Sat, 13 Jun 2020 09:41:15 -0400 Received: by mail-wm1-x336.google.com with SMTP id r15so10475718wmh.5 for ; Sat, 13 Jun 2020 06:41:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=pQNJaemNfsn+owVi20k2YyDn8RRoJRnBHTnJlBpfzgo=; b=Sn/MnNQ5yCuD4iOOFaJ2VsLT4b16BeveKQX7NyhavXl+rud8B7uaHEzu7+yG9ADhvK Q67tKdF4EssqRRhcFj7u7LndKig8avO0l+oUFJ8/oXTBJ7RH7+gY3TkGAdtnZOfCuyCf Lfsd7sZLw8hDhuoiggkoyh/jBY2sJQqv8kgdak6LOeOoTX3G9y4ccf/0+7P/wpKKSdQA AY9W3NvQlgUcq9l2UDLtLb92tvQAPRxfYJA5i7GZim6OKy5+HAb7U+9lUPxtdaPucPWa DqhT+O1uik9K35l9kJd6AcikgNa/yHqnWKmDtrFza0Bocdoz9Sz6VSu3ycpmyO8q1paX bTMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=pQNJaemNfsn+owVi20k2YyDn8RRoJRnBHTnJlBpfzgo=; b=Gh7TCRPHCvvbgjIa54iLyKd9f7RWk16/+pqsyk1zkjErYnZXvT7axblluxJu7hVv7E zrL28i/jTuPIeSItnaB7i3tIKDN8f6vSvImIJ5Wht7usU7z47E2U4c3IuFr3v9CvYEr2 NJeI22EFfS107Uu7iBxvOhiddnqXTXmg3oQ7mHpwM1Nf9ohSFN69t6kvp9HK/b6ExqxI Rjxy/SC89CmEb58RbfHJUR2wlnIbIOSlM13/Db8esSwf5248cX4ymynxVoxyJ/BqdQd4 53aCDIlnocIrZi0fVowi/t/sWafkdTs4B0Bvwh2tV8QYBuF4BsJEBvLfGM0a5P5IUp2A IE7w== X-Gm-Message-State: AOAM531FAduLfSrgX+eb2xhI9SPfc/4oX73aThwyWLqcZkMdsX8yt6Ei aIuXinnVtjmsy2wj2/6OCXnGgVwDnec= X-Google-Smtp-Source: ABdhPJwCaRx6eIBkuXzXFv2pYq5QfiRBGhNE4GhNIGVfDlO7Dp+Qm0AbVkKB9OaLfa0cFYikxLA4YQ== X-Received: by 2002:a1c:acc8:: with SMTP id v191mr4201527wme.154.1592055665643; Sat, 13 Jun 2020 06:41:05 -0700 (PDT) Received: from krug ([2001:818:d820:9500:824a:171:15a:2213]) by smtp.gmail.com with ESMTPSA id b185sm22016805wmd.3.2020.06.13.06.41.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 06:41:04 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Philippe Vaucher Cc: emacs-devel Subject: Re: Prefixed manual describe-function and api overview References: <87zh98xofe.fsf@gmail.com> Date: Sat, 13 Jun 2020 14:41:02 +0100 In-Reply-To: (Philippe Vaucher's message of "Sat, 13 Jun 2020 11:23:37 +0200") Message-ID: <87o8pnxevl.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x336.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 13:41:16 -0000 Philippe Vaucher writes: >> >> You approach is completely different from what I imagined: I was >> >> thinking of creating new sections in the manual itself, or creating >> >> a whole new manual, without having to actually write the contents >> >> for it. It could be called the "Elisp API manual", or some better na= me. >> >> One could visit that API manual from inside and from outside Emacs, >> >> just as one does now with the normal Manual. A minimal amount of >> >> Elisp code would allow some C-h function to take me there. >> > >> > Well there's two things: the "prefixed" `C-h f` and the "Elisp API >> > manual". I think the prefixed `C-h f` >> > (prefixed-manual-describe-function) is pretty much exactly what I want >> > as a user. >> >> In my opinion, you're confusing/conflating two things, again: >> >> - The ability to have, at a glance, nicely documented, and nicely >> discoverable, the list of the functions associated with a certain data >> type, or a certain topic.; >> >> - To have that organization be provided by the existing or a new prefix >> convention; > > I understand the distinction. I agree to a certain degree. I just find > it inefficient to implement these separately. They _are_ separate things. When you call a plumber to your house, do you expect him to install the deluxe cable package? > The discoverability should be in the language itself. The more it is > in the language, the less you need to document and maintain it, and > all tooling benefit from it. You're going in circles, again. You don't recognize that Elisp, in its current namespaceless form, doesn't lend itself to this as well as you would wish. And you don't recognize the drawbacks that your proposal would bring upon others. It is somewhat tiring to try to make progress, because you mis-state your goals: you don't want to make this API more discoverable: you want to change the API. > I understand it's the point of view of a minority around here, that's ok. It's not a question of majorities it's a question of the moral imperative: we agree about problem A, we find solutions for problem A Doing otherwise amounts to a trojan horse, and you face resistance. >> It seems we both want the first objective. But you seem want it with -- >> or by means of -- the specific side-effect of the second. I don't that >> side-effect at all, and this was already discussed extensively, I think. >> Therefore my proposal, the "thing I was pushing for" is a way to have >> the first objective without what I (and others) view as the drawbacks of >> the second. > > Yes. I think implementing the first objective without the second is > just more work and more things to maintain. and because I'm lazy I > prefer to do less work. You're mistaken. The solution I gave doesn't require any maintenance beyond what is already done, unless you're proposing we cease to document functions in the manual altogether. >> >> In other words, as you know, a manual in Emacs is extracted from the >> >> Texinfo source (.texi files) into various output formats. I was thi= nking >> >> about code that performs this extraction into a new output (a new man= ual, >> >> or a new section in the existing Elisp manual) including all those fo= rmats. >> >> Without needing to touch the (.texi) files themselves. Maybe this co= uld >> >> be done with a special Texinfo macro, maybe redefining its built-in >> >> @defun macro, which is what Emacs uses to introduce a function >> >> definition. That was my idea. >> > >> > Well I don't know texi files yet, but I think it'd be fairly easy to >> > write some helper elisp that generates what you want based on my code, >> >> That would be very strange IMO, to write this in Elisp. It would be >> even stranger to write it based on your code. That said, everything can >> be written in anything. > > Okay, I guess that's because Texinfo is a language of its own. Yeah ok > then I understand your point, you want a texinfo macro that generates > the "elisp api overview" so you have the manual-first option. I prefer > the code-first option, where the code is the source of truth and > things are generated the maximum possible from it instead of having to > maintain two separate systems, which can easily become out of sync. You seem to be proposing to abolish or abandon the Elisp manual. You don't understand its function and utility, is my opinion. > I understand that's not how Emacs works and it's not conceivable to > change this, but I hope you understand where I come from. I understand where you come from, but not where you want to go to. And neither do you, I suspect. You should state your difficulties clearly and think about them without the prejudice of some foreign predilection. Jo=C3=A3o From MAILER-DAEMON Sat Jun 13 09:41:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk6Ps-0008Cl-Jr for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 09:41:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk6Pl-0008BL-Rk for emacs-devel@gnu.org; Sat, 13 Jun 2020 09:41:47 -0400 Received: from forward104o.mail.yandex.net ([37.140.190.179]:35369) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk6Pi-0001x8-1X; Sat, 13 Jun 2020 09:41:41 -0400 Received: from mxback30g.mail.yandex.net (mxback30g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:330]) by forward104o.mail.yandex.net (Yandex) with ESMTP id 0DE15941A45; Sat, 13 Jun 2020 16:41:19 +0300 (MSK) Received: from iva7-f62245f79210.qloud-c.yandex.net (iva7-f62245f79210.qloud-c.yandex.net [2a02:6b8:c0c:2e83:0:640:f622:45f7]) by mxback30g.mail.yandex.net (mxback/Yandex) with ESMTP id WNZW6yPqU3-fIaWMNBQ; Sat, 13 Jun 2020 16:41:18 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592055679; bh=t/b46o1tBK/CYDvX3k2fxKMVgDpQF8AALUQlr0dZacM=; h=In-Reply-To:Cc:To:From:Subject:References:Date:Message-ID; b=vdUzBCzTATCeBkLGpWlF26lxEREAi1HWOeHXQcYm+URjdUicrOxISfLM9upeAuDUa 6Je+oSidG1PHqppAi8wVnUKHh7/SQ+kAA26XfgDIlNK9gF8CTH4YKWGDv3JR/zKSqa mk6QdMqAS37/adKumiK5iGiFlVz2KP9d0Ayhnbmw= Authentication-Results: mxback30g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva7-f62245f79210.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id KgXp6bTtgP-fHXGxFLs; Sat, 13 Jun 2020 16:41:17 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <790185da5c531a6c1442fa870feeea3444e0bf16.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: stefan@marxist.se, emacs-devel@gnu.org Date: Sat, 13 Jun 2020 16:41:16 +0300 In-Reply-To: <837dwb3zb6.fsf@gnu.org> References: <863691n4xl.wl-me@enzu.ru> <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=37.140.190.179; envelope-from=hi-angel@yandex.ru; helo=forward104o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 09:41:19 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 13:41:47 -0000 On Sat, 2020-06-13 at 15:50 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Date: Sat, 13 Jun 2020 14:59:21 +0300 > > > > Okay, so usually email-based projects recommend using git-send- > > email. Recently I sent a patch like this¹ and got a complaint it > > doesn't look like what git-format-patch would produce (is that > > maybe a > > hint maintainers are being strained too?). Huh, wrong way again? > > FTR: that wasn't a complaint, it was a gentle request for the future. > Your patch was committed, before I sent that request, even though > committing it required some extra manual work on my part. > > We recommend using git-format-patch because it makes applying the > patch easier and less error prone. It never occurred to me that a > routine recommendation would be interpreted as a "complaint", let > alone trigger a 950-word rant. That "rant" is for a reason though? I love Emacs, and it hurts me to see human resources are being spent in places that other projects trivially avoid. If you multiply that effort by number of contributors that made similar mistake and maintainers that wrote to them about it, I think it would've resulted in time that could've been spent to do something much more useful. From MAILER-DAEMON Sat Jun 13 10:17:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk6y2-0003fS-5J for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 10:17:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk6y0-0003fI-HL for emacs-devel@gnu.org; Sat, 13 Jun 2020 10:17:04 -0400 Received: from mailout-l3b-97.contactoffice.com ([212.3.242.97]:55048) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk6xy-0007FE-AS; Sat, 13 Jun 2020 10:17:03 -0400 Received: from smtpauth2.co-bxl (smtpauth2.co-bxl [10.2.0.24]) by mailout-l3b-97.contactoffice.com (Postfix) with ESMTP id 0F9C443F; Sat, 13 Jun 2020 16:16:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592057817; s=20200222-6h9o; d=idiocy.org; i=alan@idiocy.org; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Transfer-Encoding:In-Reply-To; l=1163; bh=xzg0DnlFf2iNWAZKtg9+H/az07lE03n09p7iF1XXP1g=; b=ZRRDjMuNbKaoZjKTJ1kcVXck/6t1jZawmlJ7JXjXiEPfF6+dewf9rPDa5WPvwny6 +gxDeA00bWXCErLueGYYSGRGxEBoj6SRWw5RNQKhvZyJURP2ZWqwgz2PRiqQH/Iuev0 KvykohOkFk5fgoTRdreVP6jXN6ASl868o8K435XfKuHbIniMK+VJZRJ0M9p0QQ8pwXy trKsAhH51eUMCJ0QAvySTtuQxoGZVLO4aWsPBUbbwii82PJXRsIFJpNTRRaNY7rSP38 06aSB5Ur11kR8sONgRF/10gPFPhgJeFqiuYEX9eYUjGaduDuR+vZ5oAMWWICCHLv48r bZjgD0V0Ug== Received: by smtp.mailfence.com with ESMTPA ; Sat, 13 Jun 2020 16:16:54 +0200 (CEST) Received: by breton.holly.idiocy.org (Postfix, from userid 501) id 57394202369E75; Sat, 13 Jun 2020 15:16:53 +0100 (BST) Date: Sat, 13 Jun 2020 16:16:55 +0200 (CEST) From: Alan Third To: Eli Zaretskii Cc: Konstantin Kharlamov , stefan@marxist.se, emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers Message-ID: <20200613141653.GA55972@breton.holly.idiocy.org> Mail-Followup-To: Alan Third , Eli Zaretskii , Konstantin Kharlamov , stefan@marxist.se, emacs-devel@gnu.org References: <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <837dwb3zb6.fsf@gnu.org> X-ContactOffice-Account: com:241649512 Received-SPF: pass client-ip=212.3.242.97; envelope-from=alan@idiocy.org; helo=mailout-l3b-97.contactoffice.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 10:16:57 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 14:17:04 -0000 On Sat, Jun 13, 2020 at 03:50:05PM +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Date: Sat, 13 Jun 2020 14:59:21 +0300 > > > > Okay, so usually email-based projects recommend using git-send- > > email. Recently I sent a patch like this¹ and got a complaint it > > doesn't look like what git-format-patch would produce (is that maybe a > > hint maintainers are being strained too?). Huh, wrong way again? > > FTR: that wasn't a complaint, it was a gentle request for the future. > Your patch was committed, before I sent that request, even though > committing it required some extra manual work on my part. > > We recommend using git-format-patch because it makes applying the > patch easier and less error prone. It never occurred to me that a > routine recommendation would be interpreted as a "complaint", let > alone trigger a 950-word rant. I could be wrong but to me that patch looks fine and applies here without modification. The only possibly unusual step I took was to save the complete email to a file, then I applied it using git as normal. Am I missing something here? -- Alan Third From MAILER-DAEMON Sat Jun 13 10:19:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk70D-0004kH-49 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 10:19:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48120) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk70C-0004kA-8u for emacs-devel@gnu.org; Sat, 13 Jun 2020 10:19:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57453) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk70B-0007f9-IO; Sat, 13 Jun 2020 10:19:19 -0400 Received: from [176.228.60.248] (port=1125 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk70A-0002pA-MU; Sat, 13 Jun 2020 10:19:19 -0400 Date: Sat, 13 Jun 2020 17:19:09 +0300 Message-Id: <835zbv3v6q.fsf@gnu.org> From: Eli Zaretskii To: Alan Third Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <20200613141653.GA55972@breton.holly.idiocy.org> (message from Alan Third on Sat, 13 Jun 2020 16:16:55 +0200 (CEST)) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 14:19:20 -0000 > Date: Sat, 13 Jun 2020 16:16:55 +0200 (CEST) > From: Alan Third > Cc: Konstantin Kharlamov , stefan@marxist.se, > emacs-devel@gnu.org > X-Spam-Status: No, hits=-2.9 required=4.7 symbols=ALL_TRUSTED,BAYES_00 device=10.2.0.20 > > I could be wrong but to me that patch looks fine and applies here > without modification. > > The only possibly unusual step I took was to save the complete email > to a file, then I applied it using git as normal. > > Am I missing something here? I don't know. What did you mean by "apply"? From MAILER-DAEMON Sat Jun 13 10:23:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk74Q-00076e-Dm for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 10:23:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk74O-00076T-Om for emacs-devel@gnu.org; Sat, 13 Jun 2020 10:23:40 -0400 Received: from mailout-l3b-97.contactoffice.com ([212.3.242.97]:55194) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk74M-0008Qx-Gp; Sat, 13 Jun 2020 10:23:40 -0400 Received: from smtpauth1.co-bxl (smtpauth1.co-bxl [10.2.0.15]) by mailout-l3b-97.contactoffice.com (Postfix) with ESMTP id DC5A0106D; Sat, 13 Jun 2020 16:23:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592058214; s=20200222-6h9o; d=idiocy.org; i=alan@idiocy.org; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:In-Reply-To; l=734; bh=sKuDjtWMZC23yjjXPQjBoT1ex9vs0Bluo1NVAS691uY=; b=hzYLtGVeqv7soZUGb0ktHw3opwYmHbY67KoQTfRBj1k54+epsqsvHuJCj0HZw3Nc V2Xv1OJDoxl0KHzz7KEaw0JiWXleg4LSwnDsJ/H8c+ohY5ffseuTt075AEyvG9ci3N+ ALJWfNAbHM3Dya+T67xn8BoPDNvxPaTHapbFM/FuF8EkYm+1H0KiVKPeq9obFADfExK biEr38kMeIm/JgnpPJP5Qp2aadGIaQD1qe1VLsbjNOQcSZt7BhxRyWXW2nfWkuJxzgT /BAUkab7OUV602qsXILaQwxAnhoAqCemMAsYEPcdRLZ44g1NZl4g0JPvrc0wYyrlX1g E2vvXWlKdg== Received: by smtp.mailfence.com with ESMTPA ; Sat, 13 Jun 2020 16:23:31 +0200 (CEST) Received: by breton.holly.idiocy.org (Postfix, from userid 501) id CBE9420236A114; Sat, 13 Jun 2020 15:23:29 +0100 (BST) Date: Sat, 13 Jun 2020 16:23:31 +0200 (CEST) From: Alan Third To: Eli Zaretskii Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers Message-ID: <20200613142329.GA56313@breton.holly.idiocy.org> Mail-Followup-To: Alan Third , Eli Zaretskii , hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <835zbv3v6q.fsf@gnu.org> X-ContactOffice-Account: com:241649512 Received-SPF: pass client-ip=212.3.242.97; envelope-from=alan@idiocy.org; helo=mailout-l3b-97.contactoffice.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 10:16:57 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 14:23:40 -0000 On Sat, Jun 13, 2020 at 05:19:09PM +0300, Eli Zaretskii wrote: > > Date: Sat, 13 Jun 2020 16:16:55 +0200 (CEST) > > From: Alan Third > > Cc: Konstantin Kharlamov , stefan@marxist.se, > > emacs-devel@gnu.org > > X-Spam-Status: No, hits=-2.9 required=4.7 symbols=ALL_TRUSTED,BAYES_00 device=10.2.0.20 > > > > I could be wrong but to me that patch looks fine and applies here > > without modification. > > > > The only possibly unusual step I took was to save the complete email > > to a file, then I applied it using git as normal. > > > > Am I missing something here? > > I don't know. What did you mean by "apply"? git am ~/Downloads/bug_41684_message_5.mbox -- Alan Third From MAILER-DAEMON Sat Jun 13 10:33:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7EI-0004BI-CS for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 10:33:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54386) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7EG-00049Q-Fo for emacs-devel@gnu.org; Sat, 13 Jun 2020 10:33:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57629) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk7EF-0001Wm-FB; Sat, 13 Jun 2020 10:33:51 -0400 Received: from [176.228.60.248] (port=2045 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk7EE-0001zU-2J; Sat, 13 Jun 2020 10:33:50 -0400 Date: Sat, 13 Jun 2020 17:33:40 +0300 Message-Id: <834krf3uij.fsf@gnu.org> From: Eli Zaretskii To: Alan Third Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <20200613142329.GA56313@breton.holly.idiocy.org> (message from Alan Third on Sat, 13 Jun 2020 16:23:31 +0200 (CEST)) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 14:33:52 -0000 > Date: Sat, 13 Jun 2020 16:23:31 +0200 (CEST) > From: Alan Third > Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org > > > > Am I missing something here? > > > > I don't know. What did you mean by "apply"? > > git am ~/Downloads/bug_41684_message_5.mbox I didn't have an mbox file, I only had an email message which was not in git-format-patch format, and whose commit log message needed some work. Anyway, I will gladly delegate the job of pushing these forgotten patches to someone else, if they volunteer (or just do it even without volunteering). I only pushed this because no one else did, for more than a week. I thought I was doing okay by following up on those patches. Or am I missing something? From MAILER-DAEMON Sat Jun 13 10:35:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7GJ-0005QS-Il for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 10:35:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56092) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7GI-0005MY-2Y for emacs-devel@gnu.org; Sat, 13 Jun 2020 10:35:58 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:40133) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk7GG-00021W-17; Sat, 13 Jun 2020 10:35:57 -0400 Received: by mail-wr1-x443.google.com with SMTP id h5so12739065wrc.7; Sat, 13 Jun 2020 07:35:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/ei/YRAYwu3wlJzBHjQ7XshR5yfT9kuziF5yZpfcjIQ=; b=noVtMa3OvidnmxUFC7fjnyWwfvWPL4wWWu9TCUNF4pMFL4SmG9So7FLNurhwGJj2mc G9RAS51P1ytdFEx945NSk7Gmo7L2mlOgsxqSyAnsLzahecTUtLnKnYuZrIGredsshNo5 joVZGchB+NfhwaQlz978EZtbTzJ2fe4HHR6SNW+8YFoz0H4fT2Pva7FU9l+G3d3KYjE/ SpuY3l5iVeLEkc2Cqt2zNQVYPCCP430SwHNFOBrv88DPE0ofpofkP+5zkbZP9g8ZoUdq LwRkMjdwhOCBDRfysMaThjtxmcKT9/fqmyUdGg3BbMjKnp20U9B6Q5psAZTknH6iUXLh ZvMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/ei/YRAYwu3wlJzBHjQ7XshR5yfT9kuziF5yZpfcjIQ=; b=fxGGxsfEJV7wzSg7799+ok80Cne678/CZ4G19tyLDwrKPIS14juPCyXHhkkzuAkUx0 f8c4XJ1X3ZKI0jbY6r4i4DFnz9fSgBch12vIdpTOGuKUyh0VwZogiTZKzc2Fuw1uGLHU 6eq8AaFq9Qn0xnk7dIdoUiRUK+cHv9hk4NW+NCmRHRWL67rK8qoBuMH8YQCVJLhTtAPA ectHkm9sdgWlVjIfQpdNIJAMv/Al9etwkT2HbiEkEUkiaHBzUBI44xRgMUIRbUitMmu6 RuVqY/fKe0g09OA4gnZnZlfXK6lk1yFv0hrLOfC29tV8GW3hph2LZ6/CJlcVNTauDMB1 C+yQ== X-Gm-Message-State: AOAM532BIew8bARJUfERMBYYDDZKgB+ZVlu96NuaV97iNgEurHMzfIZ5 YeWBnEbQzYr2XFG95n951wLNjMO7 X-Google-Smtp-Source: ABdhPJzisMcVb5oXW4aS6uEp1I+TZk8Cqnco33J0a7D0BPWGYFW0BvbmEB/86vxv+lo+y3oTSq/Vcw== X-Received: by 2002:a5d:6751:: with SMTP id l17mr21403093wrw.179.1592058943959; Sat, 13 Jun 2020 07:35:43 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a1sm13906052wmd.28.2020.06.13.07.35.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 07:35:43 -0700 (PDT) Sender: DG Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers To: Konstantin Kharlamov , Stefan Kangas , Eli Zaretskii , Emacs developers References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> From: Dmitry Gutov Message-ID: Date: Sat, 13 Jun 2020 17:35:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::443; envelope-from=raaahh@gmail.com; helo=mail-wr1-x443.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 14:35:58 -0000 On 13.06.2020 14:59, Konstantin Kharlamov wrote: > no other projects require > writing down a list of functions I changed just for the fun of it As a reviewer, there's something to be said about having an overview of the whole diff (which can get long) in a few paragraphs on top of the patch. A good commit message like that actually makes a lot of things clear in advance. But yes, that also compensates for otherwise more difficult review process, compared to some automated tools other projects use. > Okay, you want this — but could you at least automate it! > And no, some Emacs function does not cut it, people not necessarily use > git from Emacs. I > personally don't. Please, use git hoooks, because this is what everyone > is*forced* to use, you can't possibly miss a git hook. Someday(tm) we'll migrate to Gitlab, or Gogs, or whatever, and we'll have that. Regarding hooks, we do use them to an extent, but nobody has written a checker for commit messages for them yet. And that still wouldn't cover people who make patches against released/packaged versions of Emacs, as opposed to the Git tree. The rest of your email, I pretty much agree with. Except, you know, it's still quite possible to contribute (pointing to self). From MAILER-DAEMON Sat Jun 13 11:02:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7gE-0003RQ-PO for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:02:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7gA-0003Qt-SF for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:02:44 -0400 Received: from mailout-l3b-97.contactoffice.com ([212.3.242.97]:56092) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7g5-00061l-Kw; Sat, 13 Jun 2020 11:02:42 -0400 Received: from smtpauth1.co-bxl (smtpauth1.co-bxl [10.2.0.15]) by mailout-l3b-97.contactoffice.com (Postfix) with ESMTP id B9395418; Sat, 13 Jun 2020 17:02:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592060554; s=20200222-6h9o; d=idiocy.org; i=alan@idiocy.org; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:In-Reply-To; l=1111; bh=e+RQJ3yrxQWDXTX0YCnABgubyy2wFa/HnRdUTHtmoYU=; b=SMY0ZlP8RBJu1YkzppWfpRwasXH5Vt5qBItbWfFOeFKelMyIWwPLzjCgQZj1Smqg 78A1i9y0XJX1yID8yOHPWUuqw/YqWaFaZYGD83twBj7okbk2P1Xcpm1zoeWrm6r5nGT l6De1i2NvzaMlifbffxLG1HHe9QPBGrh//kMHC1mM7JSreT/Mh5wnVt5EvmzDT78qfm kjyGhMi5xHhtHigiMgEmSIqAuOaIuew2Nsus+eFpEluxJEvYgjHnK3bERwVYWdVCnKy sE+l1V0Ndju9szIhVMPtg1LbLyR4GponpQW9tTB83kAN9s97kvHgcmwQMIraJyPr8S7 cxD9oGT6pg== Received: by smtp.mailfence.com with ESMTPA ; Sat, 13 Jun 2020 17:02:32 +0200 (CEST) Received: by breton.holly.idiocy.org (Postfix, from userid 501) id 02C3C20236B004; Sat, 13 Jun 2020 16:02:30 +0100 (BST) Date: Sat, 13 Jun 2020 17:02:33 +0200 (CEST) From: Alan Third To: Eli Zaretskii Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers Message-ID: <20200613150230.GA56583@breton.holly.idiocy.org> Mail-Followup-To: Alan Third , Eli Zaretskii , hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org References: <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <834krf3uij.fsf@gnu.org> X-ContactOffice-Account: com:241649512 Received-SPF: pass client-ip=212.3.242.97; envelope-from=alan@idiocy.org; helo=mailout-l3b-97.contactoffice.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 10:16:57 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:02:45 -0000 On Sat, Jun 13, 2020 at 05:33:40PM +0300, Eli Zaretskii wrote: > > Date: Sat, 13 Jun 2020 16:23:31 +0200 (CEST) > > From: Alan Third > > Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org > > > > > > Am I missing something here? > > > > > > I don't know. What did you mean by "apply"? > > > > git am ~/Downloads/bug_41684_message_5.mbox > > I didn't have an mbox file, I only had an email message which was not > in git-format-patch format, and whose commit log message needed some > work. > > Anyway, I will gladly delegate the job of pushing these forgotten > patches to someone else, if they volunteer (or just do it even without > volunteering). I only pushed this because no one else did, for more > than a week. I thought I was doing okay by following up on those > patches. Or am I missing something? No, I didn't intend to attack you, I was just curious because I would have thought it should be easy for Emacs to take the email (git-format-patch format is a plain email, as is the mbox format) and pipe it straight into git am. -- Alan Third From MAILER-DAEMON Sat Jun 13 11:04:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7iG-0006KB-0I for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:04:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7iE-0006JP-1J for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:04:50 -0400 Received: from forward103j.mail.yandex.net ([2a02:6b8:0:801:2::106]:36521) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7iB-0006OE-5k; Sat, 13 Jun 2020 11:04:49 -0400 Received: from mxback19j.mail.yandex.net (mxback19j.mail.yandex.net [IPv6:2a02:6b8:0:1619::95]) by forward103j.mail.yandex.net (Yandex) with ESMTP id 5AD656741157; Sat, 13 Jun 2020 17:58:02 +0300 (MSK) Received: from myt5-95c1fb78270f.qloud-c.yandex.net (myt5-95c1fb78270f.qloud-c.yandex.net [2a02:6b8:c12:1725:0:640:95c1:fb78]) by mxback19j.mail.yandex.net (mxback/Yandex) with ESMTP id 6nr1WwsfCh-w230kixw; Sat, 13 Jun 2020 17:58:02 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592060282; bh=I2ZXNCWbsSg1AuOXXKzE4tJCn14Yzz+8efNd2seG3U8=; h=In-Reply-To:Cc:To:From:Subject:References:Date:Message-ID; b=IJybj1hzlMNxIkdLyqPjVUKjfBv+bp5O5f/TAQGjjEy3HqMYl35hqWNT6ryAl+Mwq gY6nSqb+aJaXdXFw62AqMaewN6m8K3n+9Dpz3vuGi3/U+WOPBTjVDQYRJq+6gEzd91 8Jt9LiTStmep8zKJgXdmdUXL3VejGjoisXm+q9QM= Authentication-Results: mxback19j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt5-95c1fb78270f.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id ObXmlYzJ2c-w0Wur1KX; Sat, 13 Jun 2020 17:58:01 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <3e7387bbce5196a705248c700bd9ab40da335693.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii , Alan Third Cc: stefan@marxist.se, emacs-devel@gnu.org Date: Sat, 13 Jun 2020 17:57:59 +0300 In-Reply-To: <834krf3uij.fsf@gnu.org> References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:801:2::106; envelope-from=hi-angel@yandex.ru; helo=forward103j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:04:50 -0000 On Sat, 2020-06-13 at 17:33 +0300, Eli Zaretskii wrote: > > Date: Sat, 13 Jun 2020 16:23:31 +0200 (CEST) > > From: Alan Third > > Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org > > > > > > Am I missing something here? > > > > > > I don't know. What did you mean by "apply"? > > > > git am ~/Downloads/bug_41684_message_5.mbox > > I didn't have an mbox file, I only had an email message which was not > in git-format-patch format, and whose commit log message needed some > work. > > Anyway, I will gladly delegate the job of pushing these forgotten > patches to someone else, if they volunteer (or just do it even without > volunteering). I only pushed this because no one else did, for more > than a week. I thought I was doing okay by following up on those > patches. Or am I missing something? FTR, I'm really thankful to you for taking a look at the patch, as well as to all other wonderful people here for maintaining Emacs. My text was just addressing weak points of current development approach and is an answer to the question "why don't people upstream their packages to Emacs". There's not much more to this email, and the patch discussion only really mentioned in the first point by virtue of being an illustration at hand. From MAILER-DAEMON Sat Jun 13 11:06:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7jQ-0007UC-9w for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:06:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7jO-0007R8-Bw for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:06:02 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:37684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7jL-0006gD-3d; Sat, 13 Jun 2020 11:06:01 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49kgrx3HT5z1qrMH; Sat, 13 Jun 2020 17:05:53 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49kgrx2p8yz1qql0; Sat, 13 Jun 2020 17:05:53 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id aigBLofOZTgY; Sat, 13 Jun 2020 17:05:52 +0200 (CEST) X-Auth-Info: QKPNkE7MdIBROl+Qk/0+z0FYDwYqR+eTh8hjBd24H4VhG9iyW0b2cmX9H1+CSOvM Received: from igel.home (ppp-46-244-182-107.dynamic.mnet-online.de [46.244.182.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sat, 13 Jun 2020 17:05:52 +0200 (CEST) Received: by igel.home (Postfix, from userid 1000) id C92172C0DB4; Sat, 13 Jun 2020 17:05:51 +0200 (CEST) From: Andreas Schwab To: Eli Zaretskii Cc: Alan Third , emacs-devel@gnu.org, stefan@marxist.se, hi-angel@yandex.ru Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> X-Yow: FIRST, I'm covering you with OLIVE OIL and PRUNE WHIP!! Date: Sat, 13 Jun 2020 17:05:51 +0200 In-Reply-To: <834krf3uij.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 13 Jun 2020 17:33:40 +0300") Message-ID: <87r1ujatv4.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=212.18.0.9; envelope-from=whitebox@nefkom.net; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 11:05:53 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:06:02 -0000 On Jun 13 2020, Eli Zaretskii wrote: >> Date: Sat, 13 Jun 2020 16:23:31 +0200 (CEST) >> From: Alan Third >> Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org >> >> > > Am I missing something here? >> > >> > I don't know. What did you mean by "apply"? >> >> git am ~/Downloads/bug_41684_message_5.mbox > > I didn't have an mbox file, I only had an email message which was not > in git-format-patch format, and whose commit log message needed some > work. You don't need a file, just pipe it to git am. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Sat Jun 13 11:08:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7le-0001h1-MU for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:08:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7lc-0001ev-Tr for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:08:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58359) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk7lc-0007qt-5A; Sat, 13 Jun 2020 11:08:20 -0400 Received: from [176.228.60.248] (port=4144 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk7la-0003pk-8A; Sat, 13 Jun 2020 11:08:18 -0400 Date: Sat, 13 Jun 2020 18:08:09 +0300 Message-Id: <83366z3sx2.fsf@gnu.org> From: Eli Zaretskii To: Alan Third Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <20200613150230.GA56583@breton.holly.idiocy.org> (message from Alan Third on Sat, 13 Jun 2020 17:02:33 +0200 (CEST)) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <20200613150230.GA56583@breton.holly.idiocy.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:08:21 -0000 > Date: Sat, 13 Jun 2020 17:02:33 +0200 (CEST) > From: Alan Third > Cc: hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org > > No, I didn't intend to attack you, I was just curious because I would > have thought it should be easy for Emacs to take the email > (git-format-patch format is a plain email, as is the mbox format) and > pipe it straight into git am. Of course, that's what I usually do. But when the email has only a patch, not a result of git-format-patch, I don't want to try, because some irregularity of the format could fail the patch and/or the following commit, and I would then need to recover, fix the patch or apply it manually, etc. So I use "git apply" in those cases instead. Which needs a separate commit step, including specifying the right author and date. And the commit log message needs a manual fix in any case. From MAILER-DAEMON Sat Jun 13 11:10:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7nd-0002ud-W6 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:10:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7nc-0002tS-4N for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:10:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58401) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk7na-00084s-9G; Sat, 13 Jun 2020 11:10:22 -0400 Received: from [176.228.60.248] (port=4272 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk7nZ-000415-34; Sat, 13 Jun 2020 11:10:21 -0400 Date: Sat, 13 Jun 2020 18:10:12 +0300 Message-Id: <831rmj3stn.fsf@gnu.org> From: Eli Zaretskii To: Andreas Schwab Cc: alan@idiocy.org, emacs-devel@gnu.org, stefan@marxist.se, hi-angel@yandex.ru In-Reply-To: <87r1ujatv4.fsf@igel.home> (message from Andreas Schwab on Sat, 13 Jun 2020 17:05:51 +0200) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:10:24 -0000 > From: Andreas Schwab > Cc: Alan Third , emacs-devel@gnu.org, stefan@marxist.se, > hi-angel@yandex.ru > Date: Sat, 13 Jun 2020 17:05:51 +0200 > > >> git am ~/Downloads/bug_41684_message_5.mbox > > > > I didn't have an mbox file, I only had an email message which was not > > in git-format-patch format, and whose commit log message needed some > > work. > > You don't need a file, just pipe it to git am. That's what I do, always had. But I don't even want to try when the mail message was not formatted with git-format-patch. From MAILER-DAEMON Sat Jun 13 11:16:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7tq-0006Hg-B3 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:16:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47734) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7tn-0006HV-6T for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:16:48 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:39954) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk7tl-0001oP-5D for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:16:46 -0400 Received: by mail-wm1-x336.google.com with SMTP id r15so10618833wmh.5 for ; Sat, 13 Jun 2020 08:16:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=wtxanQsiJvqnS04VqsY5qqCokQ6OwhBkXyUCy07hvwQ=; b=arF0o/RsyCRv1PDNpC/lucJW5JMIV9BVSSr1vWGOB3YjHSdEBGsv2q1F+WIxA3C42b SM20jYkH7HLApBjijqG1Y3S3bxtOtrFhHdW7Jc92vIsaUkUbUYhvC9+iAZGGQzwIBvXx jwOEoUYXL581ERzVvwnYNDdyEan/Hfub/AdgYhAq7qkKpwMvAH4mbpZoeM976LgQ9E1k dqD69doch6SuTeq9/8lgAd06lBYSIj2khZ62HO4P28F7jQ8HZdKbJHQVkfGYqO2cgMT/ argz9m0k3ZGjARNJPPb3j+bMzTNtAGijFllPQFbasSDo3QpseSRJFuppsXuQZxbqNAkg UKHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=wtxanQsiJvqnS04VqsY5qqCokQ6OwhBkXyUCy07hvwQ=; b=DN2l1b/mr8ALi/ZByu43m4DBsGdSl4xVyPJiYDjzDXWlsG1QnB5L67hTNGQHVicmoy YBBd9I69ncOCnKCxPVK8fNUAPaU/QBbY47looC+ObaKDQCEUzFWyDsckASVDSp6J0frK gYQ21KssLKMh3rXsGgEM40OgCD49yPDQBOUq8DSGPVRdpzIGCXMITgUnRjcE1G4VRJaz Kcv7ZfS7iZu9v71+lM7pqzLBhR6be+XcDfOrFEhNJ8b3e994EGSjXe52IdiB18iDrPcP jQJRTV+goDeQTBp/XP1RwzhFk0wKMW5oSolTA1mW/M2tetojVxHak5EMbRib6AlKcv5A 3LwQ== X-Gm-Message-State: AOAM531mbB00FC/l0jF4MqaEkgbWpBCukBvH802+ELdcz4KkrsmRuV+W ch/Cz+2mEK5sZx/56cbxviSzaQ== X-Google-Smtp-Source: ABdhPJwyDGTvbqu4bHvzfs/kr9fb/uQoqDP+dDMD067BzOzQER9xdBVJhq98CHN9fhfoKvYzHqRvLA== X-Received: by 2002:a1c:143:: with SMTP id 64mr4505305wmb.182.1592061403401; Sat, 13 Jun 2020 08:16:43 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q128sm13674349wma.38.2020.06.13.08.16.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 08:16:42 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master 263ab75: ; Fix recent byte-compiler warning in dnd.el again References: <20200507174021.29070.24637@vcs0.savannah.gnu.org> <20200507174022.5B7BD20A15@vcs0.savannah.gnu.org> <87h7wrmr7g.fsf@tcd.ie> <877dxnmja0.fsf@tcd.ie> Date: Sat, 13 Jun 2020 16:16:41 +0100 In-Reply-To: <877dxnmja0.fsf@tcd.ie> (Basil L. Contovounesios's message of "Fri, 08 May 2020 00:12:39 +0100") Message-ID: <87mu579esm.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::336; envelope-from=contovob@tcd.ie; helo=mail-wm1-x336.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:16:48 -0000 "Basil L. Contovounesios" writes: > Stefan Monnier writes: > >>> so I assumed the warning was due to bootstrapping order and added the >>> declaration anyway. >> >> I guess that's possible. In that case the warning should disappear >> when lisp/ldefs-boot.el is updated. > > Okay, I'll keep an eye out for that and try removing the declaration > then. Now done: ; Fix some recent byte-compilation warnings 6d6ec1bc1e 2020-06-01 16:56:26 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=6d6ec1bc1e784af786cc0436f54211095bf7a952 -- Basil From MAILER-DAEMON Sat Jun 13 11:18:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk7v7-00070i-3D for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:18:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7v5-0006yn-45 for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:18:07 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:33600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk7v2-00024o-NC; Sat, 13 Jun 2020 11:18:06 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49kh6x6Hdxz1qrf8; Sat, 13 Jun 2020 17:18:01 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49kh6x5pdDz1qql0; Sat, 13 Jun 2020 17:18:01 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id uTFBs4CRi-hS; Sat, 13 Jun 2020 17:18:01 +0200 (CEST) X-Auth-Info: ZmlcQsN/DnHaZI1tPbOoxOsla1Th1RjSKSPcKIgGGLXKDEcC7WEyZUl3FrfLxJxp Received: from igel.home (ppp-46-244-182-107.dynamic.mnet-online.de [46.244.182.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sat, 13 Jun 2020 17:18:01 +0200 (CEST) Received: by igel.home (Postfix, from userid 1000) id 9672D2C0DB4; Sat, 13 Jun 2020 17:18:00 +0200 (CEST) From: Andreas Schwab To: Eli Zaretskii Cc: alan@idiocy.org, emacs-devel@gnu.org, stefan@marxist.se, hi-angel@yandex.ru Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> X-Yow: How's it going in those MODULAR LOVE UNITS?? Date: Sat, 13 Jun 2020 17:18:00 +0200 In-Reply-To: <831rmj3stn.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 13 Jun 2020 18:10:12 +0300") Message-ID: <87mu57atav.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=212.18.0.9; envelope-from=whitebox@nefkom.net; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 11:05:53 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:18:07 -0000 On Jun 13 2020, Eli Zaretskii wrote: > mail message was not formatted with git-format-patch. Yes, it was. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Sat Jun 13 11:38:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8FG-0006gO-Fi for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:38:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8FE-0006gC-Es for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:38:56 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:45813) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk8FC-00067s-Ay for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:38:56 -0400 Received: by mail-wr1-x436.google.com with SMTP id c3so12773018wru.12 for ; Sat, 13 Jun 2020 08:38:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=iVXpCCq5GyoivloWGy1jrg2A63Ca/AHb02O2woHBYJ0=; b=bwAuUqHHDL7zJ/qc1OCjbag3UKU+XaJihh2XecUdZ3a4NFEykyjmsSpLwhGitMOzWK UKKfDwfbxgT6qOJR76aHMcoav6M8krj8H8RO5L5eSo3jjt40GfgssdtFls6Fm+CGbQuG SqCv8JISXcd5QnnLQSebylUUwd+W9iw/S2sWzKp1I2sGrUno3T4rPstGYp2vMwj1z0LZ IfJcoiGPeMWZnsQRzfrqqHLJLW81wiRIxlic+A4UG0Nw636NuloljITHgjTjb61LlpT+ S2uZsXGuQxCnlyLgOZU2mQlFJGmqe+F+0EcZkEmB+FuRW2m699rSQ0KMo+j7V/KS1kZy vXUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=iVXpCCq5GyoivloWGy1jrg2A63Ca/AHb02O2woHBYJ0=; b=MYQh7iXrj+AINHy2u1AGR/XRbh8TbA6fCIPk00v5KrcpZLBFsBXNY1BHRG6EBgiJ+G V7/uzcIbKAwuffVV7RGCQaBtAaCm+V/555Na/peQVm/ts4B5IfQlLvFqBYc+h42Ynp8/ eVuM1O+itFx0tBrTcYqU34ytGeOiUeqG89HtgaCTb5MezORY57vaPFgV1jGMQZ4j0xNR DObZ+SZc0+2yJjdUxeib3fIcRN7vAt/2AMu56ZgL7dGF3Ri5HPjYR6Xnnq/+sALdqeni S/y0ar04bMdIEKlUa/TO03hKB4wCdmfHM0+Y0L1TGnMio3JbZUJ5OR70lP5k8ZeJ57Sw YGxQ== X-Gm-Message-State: AOAM532fUCTO1/xFM4OACOBwRxWhUMhU24aFh/LpAYrijEqniY3N2Mqi UGDchCvYRRmw+WjO0Ukoy+G/mQ== X-Google-Smtp-Source: ABdhPJx6O81E6m+aolUw8gbRqnIgC/Zy60opvCOfEjZvNF0Cb1ubmZrC2F3bfEwkHLWTdN7s5GEaNA== X-Received: by 2002:a5d:4d92:: with SMTP id b18mr21385001wru.296.1592062732304; Sat, 13 Jun 2020 08:38:52 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id 50sm16356552wra.1.2020.06.13.08.38.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 08:38:51 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> Date: Sat, 13 Jun 2020 16:38:50 +0100 In-Reply-To: <83bluklk7f.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 13 Oct 2019 18:49:08 +0300") Message-ID: <87a7179drp.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::436; envelope-from=contovob@tcd.ie; helo=mail-wr1-x436.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:38:56 -0000 Eli Zaretskii writes: > This change loses information: > > -@defmac with-coding-priority coding-systems &rest body@dots{} > -This macro execute @var{body}, like @code{progn} does > -(@pxref{Sequencing, progn}), with @var{coding-systems} at the front of > -the priority list for coding systems. @var{coding-systems} should be > -a list of coding systems to prefer during execution of @var{body}. > +@defmac with-coding-priority coding-systems &rest body > +This macro executes @var{body}, like @code{progn} does > +(@pxref{Sequencing}), with @var{coding-systems} at the front of the > +priority list for coding systems. @var{coding-systems} should be a > +list of coding systems to prefer during execution of @var{body}. > > The 2nd argument of @pxref, as in @pxref{Sequencing, progn} above, is > not a no-op, and I see no reason to remove it in this case. Did I > miss something? Sorry about the late reply. I think the reason I removed it is because it produces the following Info: This macro executes BODY, like =E2=80=98progn=E2=80=99 does (see progn .), with CODING-SYSTEMS at the front of the priority list for coding systems. CODING-SYSTEMS should be a list of coding systems to prefer during execution of BODY. Any ideas how to cajole it? Thanks, --=20 Basil From MAILER-DAEMON Sat Jun 13 11:39:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8G0-0007Kc-Vn for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:39:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8Fx-0007J8-VH for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:39:42 -0400 Received: from mail1445c50.megamailservers.eu ([91.136.14.45]:56432 helo=mail265c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8Fv-0006ES-M5; Sat, 13 Jun 2020 11:39:41 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592062772; bh=cVoAAXQyvCHR6s6o29JM6gnPzTRfCbyBNpT3nIihQoE=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=s+f1IZvJY5yTJ1f2mwKinfgj77i7xnxtFPxnLovWXjczo+/LTKp1g8cODh/YeUkzQ ab6qUEds9tGo75hgEYO6mDUGdfouFE7itTEAaTGmZUlcnutHySv2E3cZY05FSjDO8o 3QJTvmsazaOCtFPgncWewDSctWepFJlNp2FW6dzc= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail265c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DFdUwX026576; Sat, 13 Jun 2020 15:39:31 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83a71741mr.fsf@gnu.org> Date: Sat, 13 Jun 2020 17:39:29 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1C.5EE4F2DB.007D, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=D5w51cZj c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=gX5H0zdzC1EMi6BCpB4A:9 a=CjuIK1q_8ugA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.14.45; envelope-from=mattiase@acm.org; helo=mail265c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 11:39:35 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:39:43 -0000 13 juni 2020 kl. 13.59 skrev Eli Zaretskii : >> except the low bits in some cases on Windows (try "#123") >=20 > I don't think I understand what I should try; please elaborate. Try (color-values "#123"). The correct result is (#x1111 #x2222 #x3333). If you get something else on Windows, then that is a bug fixed by the = patch. If the patch doesn't help, then it may be a bug in the patch. Note that the Windows backend will still discard the low 8 bits in any = case; (color-values "#123456789abc") will probably return (#x1212 #x5656 = #x9a9a). The patch doesn't change that. >> Malformed arguments are now consistently rejected. >=20 > How exactly are they rejected? In the same way that detected errors were rejected before: as if given = an undefined colour such as "fuchsia green". > I see the return value of > parse_color_spec, but what happens in its callers, and what happens on > the Lisp levels when those callers are called? None of that has changed. >> Not sure what you mean here. Mind giving a concrete example? >=20 > The first two branches of the 'cond' would always return a list before > your changes, but after your changes they could return nil if > color-values-from-numeric-string (not the best name, btw) returns nil > and the input is of one of the two forms parsed by those two branches. This is still a tad vague and speculative. Can you give a concrete = example of an argument that, in your opinion, isn't handled correctly? As far as I can tell, well-formed arguments yield correct values and = others are rejected in the same way as before, although error-checking = now is less spotty. I don't particularly like that function name either. What about one of = these: parse-color parse-color-spec parse-color-string color-values-from-spec color-from-string-spec color-spec-to-values Xlib uses the term 'numerical colour specification', but = color-values-from-numerical-color-specification is a mouthful even in = Lisp. From MAILER-DAEMON Sat Jun 13 11:46:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8My-0002t2-8C for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:46:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32990) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8Mx-0002qS-D2 for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:46:55 -0400 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:39545) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk8Mv-0007Ho-IF for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:46:55 -0400 Received: by mail-lj1-x22a.google.com with SMTP id a9so14387156ljn.6 for ; Sat, 13 Jun 2020 08:46:47 -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 :cc; bh=GE+h9cuEYIU1Wj/5JwSbp1NQ3Ue1lZPIOXdzCPS/5kU=; b=Qs4lFeTgT/+KJpCyB31BybtigljIg1oHpLELX/FU+lDdeBZbKmez3ffnWrhDb+cDKJ zU1PUCi3HZ354I3QI3L9a4Pf+fxCu6kP5a3NIVOvV4F+Pw8RES1ZUv80ODZEiPGrk/qW BPTmbqMI4OMwokIGvVDJcLbv59+hKEW0fls0CxsbCQB4hIhfkTzvlIeCDWiFrYp94sSb U8j8ZG9ZKf1mVGLkFdW2Vajy1hNVO76YsV+zVT4mLJn1AtqVgRy5Ej55i9zGyIH9RfHV YyMilSz3JOJuSfrmkadmRl9ES1HYg3Bo4QgPUWJ3K/YY2nzO9ETaMRBNJTV6VuTbsPxj pa5A== 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:cc; bh=GE+h9cuEYIU1Wj/5JwSbp1NQ3Ue1lZPIOXdzCPS/5kU=; b=RTWOFzvx8xcnjg5mBqsYZ+56rU1bTMnEHDp/ttWu3CXjIM6Og/uzyspT/ZpO3WPMlh +NQP2l2/6GrOMnFFyt9pbxczzBk4PsDgaj6RhZuXad21ONEGg8RRJGNEu2IkJBk+TTAc +RQn3GMz1XNH66OBhD1vF/0Fr/qbLGE8jT2XwopiQXkbBjlVASS9UU68sBqNf5Q0q43n C70cve7DNXq3r0gHzPLv556iwHlVsJ4qGFVBqBEz4h/r+QzqlFzEeenRRdlUrrnpIw0J zewly+85sp8j4ZOdzu88+hUPy2YbVAGNm8SbNnkxFuaDjQ1ZhXO9uY15yTUHQyKnY6s6 xvsQ== X-Gm-Message-State: AOAM532um77OG5qPAsCnUzWRxjD6Udd4iZuz0inmrzuBoqGDDYqOyKHI TEaJ3iDwR5FGPdDUl25aHKTFZ3SVgqPLboL0rWg= X-Google-Smtp-Source: ABdhPJxouKMe1wbgbb1jzt1ONJIAY9vorUSZanRU99SndmuS87SXrR/Q8aojG+xPTQ59SFJVKTLw7BuuxKc2QXn0/eo= X-Received: by 2002:a2e:8e2f:: with SMTP id r15mr6038936ljk.54.1592063205893; Sat, 13 Jun 2020 08:46:45 -0700 (PDT) MIME-Version: 1.0 References: <87zh98xofe.fsf@gmail.com> <87o8pnxevl.fsf@gmail.com> In-Reply-To: <87o8pnxevl.fsf@gmail.com> From: Philippe Vaucher Date: Sat, 13 Jun 2020 17:46:19 +0200 Message-ID: Subject: Re: Prefixed manual describe-function and api overview To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::22a; envelope-from=philippe.vaucher@gmail.com; helo=mail-lj1-x22a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:46:55 -0000 > > The discoverability should be in the language itself. The more it is > > in the language, the less you need to document and maintain it, and > > all tooling benefit from it. > > You're going in circles, again. You don't recognize that Elisp, in its > current namespaceless form, doesn't lend itself to this as well as you > would wish. And you don't recognize the drawbacks that your proposal > would bring upon others. Well, yes I do see the drawbacks for you, that's why I'm not proposing it anymore? If I didn't recognize them I'd still be pushing. Maybe you want me to actually agree that these are also drawbacks for me, that sorry I cannot do. > It is somewhat tiring to try to make progress, because you mis-state > your goals: you don't want to make this API more discoverable: you want > to change the API. At some point I wanted to add aliases (that's not really "changing the API" in my book but I can understand it is in yours), and that was seen as disruptive so I gave up. Anyway, I wanted to make the API more discoverable for me and those who think like me. I understand my definition of "discoverable" is different from yours and because of that we run in circles. You think improving discoverability by adding more manuals is sufficient, I believe it's not. It's ok, we don't need to agree. I don't know why we are talking about this again. > > I understand it's the point of view of a minority around here, that's ok. > > It's not a question of majorities it's a question of the moral > imperative: we agree about problem A, we find solutions for problem A > Doing otherwise amounts to a trojan horse, and you face resistance. But we don't agree on problem A :-) That's the crux, for most of the people here there's no problem to fix. > >> It seems we both want the first objective. But you seem want it with -- > >> or by means of -- the specific side-effect of the second. I don't that > >> side-effect at all, and this was already discussed extensively, I think. > >> Therefore my proposal, the "thing I was pushing for" is a way to have > >> the first objective without what I (and others) view as the drawbacks of > >> the second. > > > > Yes. I think implementing the first objective without the second is > > just more work and more things to maintain. and because I'm lazy I > > prefer to do less work. > > You're mistaken. The solution I gave doesn't require any maintenance > beyond what is already done, unless you're proposing we cease to > document functions in the manual altogether. Hum, you are correct. What I meant is that because I'll implement the "better C-h f" anyway, implementing the manual is "more work". Because I'm lazy I'd prefer to implement only the first and rip the benefits of the second for free. > > Okay, I guess that's because Texinfo is a language of its own. Yeah ok > > then I understand your point, you want a texinfo macro that generates > > the "elisp api overview" so you have the manual-first option. I prefer > > the code-first option, where the code is the source of truth and > > things are generated the maximum possible from it instead of having to > > maintain two separate systems, which can easily become out of sync. > > You seem to be proposing to abolish or abandon the Elisp manual. You > don't understand its function and utility, is my opinion. No, I was hinting at having more parts of the manual be generated from the code. But that's such a wide topic that I don't even want to start. > > I understand that's not how Emacs works and it's not conceivable to > > change this, but I hope you understand where I come from. > > I understand where you come from, but not where you want to go to. And > neither do you, I suspect. You should state your difficulties clearly > and think about them without the prejudice of some foreign predilection. I think what happened is: I explained clearly where I wanted to go, I was told "no" and thus moved on to other things. I don't understand what you are talking about with me not knowing where I want to go. I don't think discussing this topic will bring anything new, I came in this thread asking for feedback on a new library I work on, to get ideas and test the water about what might get considered for inclusion in Emacs. From what I understand a .texi "elisp api overview" might be considered for inclusion in the manual, the rest not so much. I thank you for your feedback, but re-discussing previous discussions seems pointless to me. Regards, Philippe From MAILER-DAEMON Sat Jun 13 11:49:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8Pa-0005jz-KY for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:49:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34398) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8PZ-0005js-FG for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:49:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58985) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk8PY-0007X8-PD; Sat, 13 Jun 2020 11:49:36 -0400 Received: from [176.228.60.248] (port=2685 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk8PY-0001OU-4b; Sat, 13 Jun 2020 11:49:36 -0400 Date: Sat, 13 Jun 2020 18:49:27 +0300 Message-Id: <83zh972cfs.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org In-Reply-To: <87a7179drp.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> <87a7179drp.fsf@tcd.ie> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:49:37 -0000 > From: "Basil L. Contovounesios" > Cc: emacs-devel@gnu.org > Date: Sat, 13 Jun 2020 16:38:50 +0100 > > > The 2nd argument of @pxref, as in @pxref{Sequencing, progn} above, is > > not a no-op, and I see no reason to remove it in this case. Did I > > miss something? > > Sorry about the late reply. I think the reason I removed it is because > it produces the following Info: > > This macro executes BODY, like ‘progn’ does (see progn > .), with CODING-SYSTEMS at the front of the priority list > for coding systems. CODING-SYSTEMS should be a list of coding > systems to prefer during execution of BODY. > > Any ideas how to cajole it? What problem are you trying to avoid here? From MAILER-DAEMON Sat Jun 13 11:55:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8VJ-00086f-Ds for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:55:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8VI-00086O-1x for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:55:32 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53180) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk8VF-0000nX-M0 for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:55:31 -0400 Received: by mail-wm1-x343.google.com with SMTP id r9so10567807wmh.2 for ; Sat, 13 Jun 2020 08:55:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=90IHvTjNxltNYlHH9u8hbmTgcHLULgT8e8BuQ2qBv44=; b=fGpePowm3YhHKyDdwcmK/GHceh/ZOgJvg8J71a0otpfOq2PJAHoGEPwL0jfW9Njt14 JteEuClT8l44ejVhoa0UGYSRUQxXddP3VTjGZ/t4rHwuM/ag/oX3i6YgKOjsVoVee8u2 md64sjpakBX1jzx2DYRH4eC6yY5ryi2nJPkRfjg8Cwk2x9S5xgHFnOufZ+vEPonY+thf R4ERVZT8/vSUfbWBUzQosoIZ6mcv6mBwCu11i3IUZTqC4J8c3LQ6D3eJ1X5YuSdD5SHB jBl8n0FmeHSr5DraOVz4UsKdb3XRzxpf/46nkPbhz3IW5L25qgce1JwjNgitmZdeCjfp Xb8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=90IHvTjNxltNYlHH9u8hbmTgcHLULgT8e8BuQ2qBv44=; b=CdWNu14tfiAag2uwDSpCehZGw47gCK8H9EULNzy175iL6bh45ajxP0dRrm1r7+Bwi2 2nnSKf1OfzWhABc4UqshuIFiA7itT6kv3Gt9hqJIkEfVyFZJ4Vi1TBdYPIygB48X175z xyK3KRNhgA4aR/vGLWrvL6okhbSL0OI4be7b4Qst3RnIbUW4eas0xo9K6uecmKo+cAzT ZUJD5G3+FDglnaSV+IheQpqatGUa5QyILvusUAOgMllgVgL2WYA6o9uPlErOiMRdLDOc wZ3APAyuTHKNtUTqlU1DOBjiOT8usAr6L26iqFeWfc1eMlRQvDoHybT27MUbsVeNFPJh FL4w== X-Gm-Message-State: AOAM533pKDAXJgtVYryzs9TImw5qzc9XTdLGh15etgG/Gww/RKJjpJUq EDbVZQcMPcRYW8zTSYCRyXrasw== X-Google-Smtp-Source: ABdhPJwWJte2QtKhhc2O7JsypuFy3CNx3z9LpBWQpGdaiifoAdEIjHQsN6MWkJsnLhhTZjaufoMZfg== X-Received: by 2002:a1c:a905:: with SMTP id s5mr4308926wme.120.1592063727882; Sat, 13 Jun 2020 08:55:27 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q128sm13821077wma.38.2020.06.13.08.55.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 08:55:26 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: Evgeny Zajcev , monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: [PATCH] Fix display box cursor under image with margins References: <83imhwk7sr.fsf@gnu.org> <83wo5jdgqo.fsf@gnu.org> Date: Sat, 13 Jun 2020 16:55:25 +0100 In-Reply-To: <83wo5jdgqo.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 10 May 2020 17:09:03 +0300") Message-ID: <87y2or6jv6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::343; envelope-from=contovob@tcd.ie; helo=mail-wm1-x343.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:55:32 -0000 Eli Zaretskii writes: > Thanks, but I didn't get the impression that this change is favored by > people here. Maybe I'm mistaken, but in that case I'd ask more people > to voice their opinions. Seems like Evgeny's demo convinced more people that it's a nice feature to have. Thanks, -- Basil From MAILER-DAEMON Sat Jun 13 11:58:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk8YM-0001fC-Qb for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 11:58:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk8YL-0001f0-LW for emacs-devel@gnu.org; Sat, 13 Jun 2020 11:58:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59115) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk8YL-0001hO-2g; Sat, 13 Jun 2020 11:58:41 -0400 Received: from [176.228.60.248] (port=3238 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk8YK-0004yh-0q; Sat, 13 Jun 2020 11:58:40 -0400 Date: Sat, 13 Jun 2020 18:58:31 +0300 Message-Id: <83y2or2c0o.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sat, 13 Jun 2020 17:39:29 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 15:58:41 -0000 > From: Mattias EngdegÃ¥rd > Date: Sat, 13 Jun 2020 17:39:29 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > Try (color-values "#123"). The correct result is (#x1111 #x2222 #x3333). Why is that the correct value? I get (#x1010 #x2020 #x3030); why is that wrong? > >> Not sure what you mean here. Mind giving a concrete example? > > > > The first two branches of the 'cond' would always return a list before > > your changes, but after your changes they could return nil if > > color-values-from-numeric-string (not the best name, btw) returns nil > > and the input is of one of the two forms parsed by those two branches. > > This is still a tad vague and speculative. Just follow the code, it should be very clear: those two branches always return a list of values. No example should be needed. > As far as I can tell, well-formed arguments yield correct values and > others are rejected in the same way as before No, that's not true, as should be obvious from examining the code. Previously, any "#..." string whose length was 4 or longer would return a list of values, even if it wasn't well-formed; now some of them will return nil. > I don't particularly like that function name either. What about one of these: > > parse-color > parse-color-spec > parse-color-string > color-values-from-spec > color-from-string-spec > color-spec-to-values color-values-from-rgb-spec? From MAILER-DAEMON Sat Jun 13 12:30:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk92v-0007NR-AK for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 12:30:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk92t-0007Lu-Mp for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:30:15 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:35576) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk92r-0007Ae-FU for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:30:15 -0400 Received: by mail-wr1-x42e.google.com with SMTP id x14so12907105wrp.2 for ; Sat, 13 Jun 2020 09:30:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=PcitQDu4qZWvvDcRj7BXszuzPDKjzEqm275lZrPKIlM=; b=qcK/q+oOl3w3+dvM5XCYSuJukLZDFBAdcUxxZZYkALpSbcHhK6MDqRVuwd/3wUCQIF iTRjYYl25+Y76gTiUFS9BsWBRajyB4joSqbFOArF0vUlardYIRpFAMxUu6zo3zDOMwJl kY8Mceo6oZg8SPJEy5cLAkzLotsgeVvFxgJwqDSyd2yq61w69tbkYe//KDoOl26NaVTW SJNMUyBGcOhpwgDWG8iYajQpk9Am8u9KbXZDDXcL07VN0AT1rHLKDBE7l7gAeMk+qbFD DD3qAwMOGI8djxHyKoOCN3GfZOndmW1oxpUzgEuZLwR7kI9A50FepRe/Dnf1Hqj0hdSL ZPEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=PcitQDu4qZWvvDcRj7BXszuzPDKjzEqm275lZrPKIlM=; b=rKAQwWtiph7J7SejxgIth7joIdrfUi/R4qrCP911Lg7vMXvz4k48PCyoHPkodvbjFB 9R1cs4OUYrS3p4sEzgc36F0ZBZjWQWXbVzHBa4G9C2of1ouUH/SnHG/4oYweKc8qFqzi D8kUY7AE0Hd62RXm+xQDKvaSYolm+vqs1JJHPAt+A1bD+N41Wmlu+Q0YI9qC0/X1gYze OUqttWX83yGz9kOBCxk/R5B1Nmp4rkamsxdVEHVE7Vd5W/mJnh8VJ2oT4SlOXcm4okKV bp/Ballo7XzLRzaK+7fYEeq88VaRa/mZhYNl1cUh0MfD0BA+26Ezp9m7KvzFpDbvXOMM EqpQ== X-Gm-Message-State: AOAM530WUYNn7AvZWXurpSo3pjHGD8BAFP+EQZ/WHUJ5cDlZ8Tk0n5BC 2T8ADsDlmCiLX6MF3/hC/Bqhtg== X-Google-Smtp-Source: ABdhPJw4RpsRalka7eLUO8cI2cxPQF2mQ1R3cFd6oGcafgs3tmHq47qYcmQyj5iZQmXM2Ow7OGuWRg== X-Received: by 2002:adf:f2c2:: with SMTP id d2mr19688630wrp.424.1592065811251; Sat, 13 Jun 2020 09:30:11 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id u3sm14454842wrw.89.2020.06.13.09.30.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 09:30:10 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Kangas Cc: Stefan Monnier , Eli Zaretskii , Emacs developers , =?utf-8?Q?S?= =?utf-8?Q?=C3=A9bastien?= Gendre , Dmitry Gutov Subject: Re: "Themes" shipping configuration - an unusual convention References: <863691n4xl.wl-me@enzu.ru> <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <83zhb6grtq.fsf@gnu.org> <83ftcwgb07.fsf@gnu.org> <291bb5b2-92d5-85f1-57d8-895eed14ffc2@yandex.ru> Date: Sat, 13 Jun 2020 17:30:09 +0100 In-Reply-To: (Stefan Kangas's message of "Thu, 30 Apr 2020 09:49:19 +0200") Message-ID: <87ftaz6i9a.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42e; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42e.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 16:30:15 -0000 Stefan Kangas writes: > PS. If anyone can point to an example of a "custom theme" that ships > settings, it would be interesting to see it. Searching for custom-theme-set-variables under etc/themes gives: - etc/themes/dichromacy-theme.el - etc/themes/leuven-theme.el - etc/themes/misterioso-theme.el - etc/themes/tango-dark-theme.el - etc/themes/tango-theme.el - etc/themes/wombat-theme.el Under GNU ELPA: - modus-operandi-theme.el - modus-vivendi-theme.el - tramp-theme.el Under the top 5 most downloaded themes on MELPA: - zenburn - solarized - sanityinc-tomorrow - spacemacs Most of which also come with their own defcustoms, etc. Did I misunderstand what you were asking for? -- Basil From MAILER-DAEMON Sat Jun 13 12:36:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk98X-0002GJ-Kc for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 12:36:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33222) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk98W-00029u-0r for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:36:04 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:40330) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk98U-0000Ua-AS for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:36:03 -0400 Received: by mail-wm1-x330.google.com with SMTP id r15so10741131wmh.5 for ; Sat, 13 Jun 2020 09:36:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=uSkgxh/5n8Q9BDi+zIHIivcgcPW7EMdWlirVFLV8u88=; b=irP17IqlCYWgakR47Ly9UrKm74H+kFbzaFtB4xayQ8Gs7wMGTFAji/UonMSksh47nq FpCfMWtt5pkRS7ujNFBEGFuwNbxa/d6a9kGGVOHroHDUbT6ZXMHA58539dThmOWrPKVC bIp3xumzHsUV/fNq/8YNKxyMykfTsWE8e3xu0DFK9JArbvmaCRGJThIwtBcQIReZ2YeQ X8upm8y4khIf2JbkPptPRHDHKRcjdYNa/3gNdwtilVMh+0Dncpus3TTUyc5IF554s9rR //urfD9pXXz3zZGRI2x0TKd3XGzds25+pgOT1EHgpMbtF1ppGrZB8ULpuMKsBTSfX+Th RIvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=uSkgxh/5n8Q9BDi+zIHIivcgcPW7EMdWlirVFLV8u88=; b=NuDrPg+qrCZ/wrUmqj6rqY9tzvd4xHIXcRrUztV04nB9FKDwEH9bc3y9m051r2miKD EESu08uawqlT2adqJj4hU792Q0UQ7VbZQgS3olrMBonpR56vPKMvwCI+B8Vv1J8A6cDF 9yYqd7Ay7Kv1ZAqnAwTwzhODZwReWCt61xst2WIEfND7s76I4UrnpeerOryIPZdB0pnA OhUIKD+WZ5hK9Hz/QQSKDXtRFXo6xsSL3sgo2a1AUC8YEyJVe+qPakQbN2S81NOdldCb cwV1ZtNREkZVEVTT36n/5/ZesKZZhcK4vulnQW2DeNZCe3Ha7uI2jjwYfq+ZLTmIQICi QKRg== X-Gm-Message-State: AOAM530Bl8oL3C7PXdmZxEuNmATym6/Zq7biXt9KufspQZOIBb/LUkk7 QqBNNgaqTHD7SypI+OI9EA0TeQ== X-Google-Smtp-Source: ABdhPJwJkTSDTvySSj7phlIR8rg94TaruJ2GNIGxYybhChDzOSm++qXdGYk830KprivZVMsQMujyKw== X-Received: by 2002:a1c:bc0a:: with SMTP id m10mr4394400wmf.173.1592066160162; Sat, 13 Jun 2020 09:36:00 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id 30sm16519466wrd.47.2020.06.13.09.35.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 09:35:59 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> <87a7179drp.fsf@tcd.ie> <83zh972cfs.fsf@gnu.org> Date: Sat, 13 Jun 2020 17:35:58 +0100 In-Reply-To: <83zh972cfs.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 13 Jun 2020 18:49:27 +0300") Message-ID: <87y2oq6hzl.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::330; envelope-from=contovob@tcd.ie; helo=mail-wm1-x330.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 16:36:04 -0000 Eli Zaretskii writes: >> From: "Basil L. Contovounesios" >> Cc: emacs-devel@gnu.org >> Date: Sat, 13 Jun 2020 16:38:50 +0100 >>=20 >> > The 2nd argument of @pxref, as in @pxref{Sequencing, progn} above, is >> > not a no-op, and I see no reason to remove it in this case. Did I >> > miss something? >>=20 >> Sorry about the late reply. I think the reason I removed it is because >> it produces the following Info: >>=20 >> This macro executes BODY, like =E2=80=98progn=E2=80=99 does (see progn >> .), with CODING-SYSTEMS at the front of the priority list >> for coding systems. CODING-SYSTEMS should be a list of coding >> systems to prefer during execution of BODY. >>=20 >> Any ideas how to cajole it? > > What problem are you trying to avoid here? >> ...like =E2=80=98progn=E2=80=99 does (see progn.), with... ^^^ This There shouldn't be a full stop there, right? --=20 Basil From MAILER-DAEMON Sat Jun 13 12:41:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9Dp-0005xJ-Sf for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 12:41:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9Do-0005x2-0l for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:41:32 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:51706) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk9Dm-0001Ro-Bd for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:41:31 -0400 Received: by mail-wm1-x32f.google.com with SMTP id b82so2110125wmb.1 for ; Sat, 13 Jun 2020 09:41:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=K+z1favkjAwKEBuuTaIwFTZYJIrPXGdGdi3yUjh1DNI=; b=WP+LCtdntN4WyPKvdC3p43BPK/BphgoqgJDkb92IxdxsmMSM7ot2bfakdft1FmQX8d Kj2uCkJObXHpZUsSAEz7HhgChla1vS5QIxz34X2CCx0LRYSjpw0VkotCAsv8T9ElSOXg qEUNxj20zDZV70w6kGpSCo/1OtyUQ6dbOdthnCzV6M8czQn7SfIRX0vU9ipwJqKI5AHx COIq3XloC56r3/ojRoWYP+u/DHbQ7Xm6vJ5wx+D06GpHgEISNw/5gy10maVbF9ju9ZWn dHlM9FVYVn1OD8DgZokmugh1bBUljtEVtHb9Qrb4qrkmvmZnv473xzcKE7revTueJP8e JShQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=K+z1favkjAwKEBuuTaIwFTZYJIrPXGdGdi3yUjh1DNI=; b=Hpk35QLNnsiOkR+yuOfzzq5ymOsN+shH/SxmAa/dkAuBjQJMUqJ1E7EMhVbFqKyE/J BGB/YmCr0gugEJBMBFhbkh27yo12EzUDqvLCIZCW2bdgutF7TV5r0BvXJ3GM1PVBU9nX SAMhEFl5y6PRmp+mZ0hdTrFEs7uND5rd5vB6u8TY0n4ztNGgdIaJSli9UOwC/R8JdoCQ xY0EoaiTN/rEGC+/IkZeaMRk+InAUh7fitVniEHaJup8m6ueyebG+3zeHkOB6+dRmy0M Pblz4nh5g7pZnBi9F6Q5SUFQ3K8+HyjhVPtKwCuMBcOXaBZMc5oE7nEHqAO0yJo+yGIm 8YPw== X-Gm-Message-State: AOAM532/jgQ0/wMYnfy72PTPIjEhmncFcASO5R1EDV7cwrguhd3buetw pZFvRuH0BaeQF9B6SZKV2aiwjA7E X-Google-Smtp-Source: ABdhPJwKKDu8zPthXTGLn8IUbzah+xT5wJNxmjh29kTk9SUAz23i6Ug/LKVEyJaSs91eKkIB6kpneQ== X-Received: by 2002:a7b:c007:: with SMTP id c7mr4671755wmb.165.1592066482973; Sat, 13 Jun 2020 09:41:22 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id k14sm15062673wrq.97.2020.06.13.09.41.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 09:41:22 -0700 (PDT) Sender: DG Subject: Re: Prefixed manual describe-function and api overview To: Philippe Vaucher , =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel References: <87zh98xofe.fsf@gmail.com> <87o8pnxevl.fsf@gmail.com> From: Dmitry Gutov Message-ID: <87cd4d02-5a56-0b0e-b35b-eda87b43e3a8@yandex.ru> Date: Sat, 13 Jun 2020 19:41:21 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 16:41:32 -0000 On 13.06.2020 18:46, Philippe Vaucher wrote: >>> I understand it's the point of view of a minority around here, that's ok. >> It's not a question of majorities it's a question of the moral >> imperative: we agree about problem A, we find solutions for problem A >> Doing otherwise amounts to a trojan horse, and you face resistance. > But we don't agree on problem A:-) That's the crux, for most of the > people here there's no problem to fix. I think that really depends on how one would count the voices here. From MAILER-DAEMON Sat Jun 13 12:42:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9Eu-0006hz-Qw for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 12:42:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37078) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9Es-0006h6-99 for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:42:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60023) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk9Er-0001bS-RH; Sat, 13 Jun 2020 12:42:37 -0400 Received: from [176.228.60.248] (port=2088 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk9Eq-0002kK-Ta; Sat, 13 Jun 2020 12:42:37 -0400 Date: Sat, 13 Jun 2020 19:42:29 +0300 Message-Id: <83wo4a3oju.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org In-Reply-To: <87y2oq6hzl.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> <87a7179drp.fsf@tcd.ie> <83zh972cfs.fsf@gnu.org> <87y2oq6hzl.fsf@tcd.ie> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 16:42:38 -0000 > From: "Basil L. Contovounesios" > Cc: emacs-devel@gnu.org > Date: Sat, 13 Jun 2020 17:35:58 +0100 > > > What problem are you trying to avoid here? > > >> ...like ‘progn’ does (see progn.), with... > ^^^ > This > > There shouldn't be a full stop there, right? Maybe not, but it's info.el which does that, not Texinfo. From the Texinfo POV the result is perfectly correct, and provides a better location to an Info reader (although ISTR the Emacs reader disregards that). IOW, the way info.el displays this is not a reason to avoid the 2nd argument of a cross-reference. If we think the display is wrong, we should fix info.el to yield a better one. From MAILER-DAEMON Sat Jun 13 12:44:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9GS-0008Fn-0V for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 12:44:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37916) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9GQ-0008Br-Fa for emacs-devel@gnu.org; Sat, 13 Jun 2020 12:44:14 -0400 Received: from mail1479c50.megamailservers.eu ([91.136.14.79]:58266 helo=mail118c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9GN-0001m8-Bj; Sat, 13 Jun 2020 12:44:14 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592066647; bh=AMOHJg35JDJ/AOBk2o4pgyZKuuBt00sTfejHAaVug8w=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=POJHDQDGrGjCI0SXkpVTE1yP3oYWvMHy3b0lk1vaG1q8uGB7V9AvmVVz0weJUmgwD QFVxaZDA+fPrdvtaPy2RqXaWi8V631zAN07jREszASj9uQh1ewaPrdfBn9VGQkAGIg h5N/6X8J2WgLXG29msW6gXgghiwrB0SfQKUsjsgQ= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail118c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DGi4oI026355; Sat, 13 Jun 2020 16:44:06 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83y2or2c0o.fsf@gnu.org> Date: Sat, 13 Jun 2020 18:44:04 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F28.5EE501FA.0030, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=KaGsTjQD c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=5NrcRONCJiTeGEEgi3QA:9 a=ctfIvnEhtO8cLpbv:21 a=QRugjQ-XPdJKmqFb:21 a=CjuIK1q_8ugA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.14.79; envelope-from=mattiase@acm.org; helo=mail118c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 12:44:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 16:44:14 -0000 13 juni 2020 kl. 17.58 skrev Eli Zaretskii : >> Try (color-values "#123"). The correct result is (#x1111 #x2222 = #x3333). >=20 > Why is that the correct value? I get (#x1010 #x2020 #x3030); why is > that wrong? It violates the HTML/CSS convention which was agreed upon in bug#36304 = and followed by the other backends. Single-digit hex numbers are scaled = by 65535/15, two-digit numbers by 65535/255, and three-digit numbers by = 65535/4095. > Just follow the code, it should be very clear: those two branches > always return a list of values. No example should be needed. An example could help resolve misunderstanding, and if we go = back-and-forth on what you think is a simple matter it's a clear sign = that one is definitely needed. > No, that's not true, as should be obvious from examining the code. > Previously, any "#..." string whose length was 4 or longer would > return a list of values, even if it wasn't well-formed; now some of > them will return nil. (tty-color-values "#xyz") returned nil (and still does), contradicting = your claim. I meant that the manner of rejection remains unchanged, not the set of = rejected arguments, which is a consequence of improved error-checking, = very much by design. Not only was it previously lacking, its coverage varied wildly between = backends. That means that hardly any code could have abused the lax = checking while still working on multiple platforms. Of course, the = unpredictable behaviour on malformed input made this a very dubious = endeavour in the first place. > color-values-from-rgb-spec? Thank you, but that would preclude addition of non-RGB formats in the = future, such as HSV or XIE XYZ. Nothing in the interface forces the = specification to be RGB. In fact, Xlib accepts several non-RGB formats. From MAILER-DAEMON Sat Jun 13 13:03:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9Z8-0007yR-Dt for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:03:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9Z6-0007yE-QM for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:03:32 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:40406) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jk9Z4-0005Id-GE for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:03:32 -0400 Received: by mail-wr1-x442.google.com with SMTP id h5so12969382wrc.7 for ; Sat, 13 Jun 2020 10:03:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=YJJ6DqYSgIAkR99v4p6kwjIlFcckVcri5k9XB++NMnQ=; b=uL2BZph1d7p6AsgdR/klgkfl0v2RYQOHboiDJra4NODUO++mBOOFM73J5km/j7xf5D 4uGXXmd2/s90YJAuyRqG+1l5ZTOxc+gVzWM58vHUGE1BXl02NC0E7odrQIKMsilOB9PG d8fwx84WN8UXqtO11hgXL+79AE4f/9Dg0p6X7uWmc0PeqfSaefUegfBNRhSi7qnwHiNc xT9mLyhQEn19cjzOtMWUO+qBUnaZUf5cUSZCYP5hNo8GO6dmdKc5XENh1I0SjMHHt5FD jq6WsV966tc+TmpQmrucAf0jAZR8pjCEdsRooeScIv/GLE0z4vTH7sPcx6YUDPFxc9hc A5YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=YJJ6DqYSgIAkR99v4p6kwjIlFcckVcri5k9XB++NMnQ=; b=r5fiGBYlCv0EJ8cgk9Hx/sLe1ixUc9oJERfOfq5lEVbaL/Yren8RRKk13iFg5s0IU4 95ZB09qVP5AzCsmYmNWQXK3zoX+bbCT6yJiLY2umy4qX/DWAWj4MieotT+qbGbQGRwmV kSJc6h/XvVVyGOhnipecOZX0uBphtgSrJ0DCPxdEjQ2O5l/rZeKb4xKAf2bpT3AALFjl Kq0I4jcMaQ7n7oM7hcO45AAZYcf1ESIL4igq7MdI+k/4f7/L48nJiPslv2vH0SzShy8E 7pL3Nix7vUoahIPV1oWXvMir/9YayHFKpcJ62u7LoS8TYZcGzvQxjt3aM8ECdJM6HeT0 Ur/Q== X-Gm-Message-State: AOAM53132TjLosiaAjACfuGWo91s8w0kzU6jwy/4nE9lRmCbAvUy00XT UM69e9x05cAjR6yDtvM5YthV5A== X-Google-Smtp-Source: ABdhPJwFVKA/1HK9EjuBjQmttbnAdbmCXTfzT2HKeKyvWxahLV7Sb+O5XGZn9y/2H2mV6A1qOJ6pdw== X-Received: by 2002:adf:a357:: with SMTP id d23mr21966045wrb.351.1592067806960; Sat, 13 Jun 2020 10:03:26 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q128sm14071481wma.38.2020.06.13.10.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 10:03:26 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> <87a7179drp.fsf@tcd.ie> <83zh972cfs.fsf@gnu.org> <87y2oq6hzl.fsf@tcd.ie> <83wo4a3oju.fsf@gnu.org> Date: Sat, 13 Jun 2020 18:03:25 +0100 In-Reply-To: <83wo4a3oju.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 13 Jun 2020 19:42:29 +0300") Message-ID: <87eeqi3nky.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::442; envelope-from=contovob@tcd.ie; helo=mail-wr1-x442.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:03:33 -0000 Eli Zaretskii writes: >> From: "Basil L. Contovounesios" >> Cc: emacs-devel@gnu.org >> Date: Sat, 13 Jun 2020 17:35:58 +0100 >>=20 >> > What problem are you trying to avoid here? >>=20 >> >> ...like =E2=80=98progn=E2=80=99 does (see progn.), with... >> ^^^ >> This >>=20 >> There shouldn't be a full stop there, right? > > Maybe not, but it's info.el which does that, not Texinfo. Ah, I didn't realise this was an info.el artefact. I've now reverted the change: Revert markup change in with-coding-priority docs 6cdecc2659 2020-06-13 17:54:51 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=3D6cdecc2659a290f4a9= eddb498978e3b07d5cbc58 > From the Texinfo POV the result is perfectly correct, and provides a > better location to an Info reader (although ISTR the Emacs reader > disregards that). Are you referring to the fact that following the xref doesn't take you to the definition of progn? Because I would have guessed that's because there's no @anchor{progn}. Or is Texinfo smarter about it? > IOW, the way info.el displays this is not a reason to avoid the 2nd > argument of a cross-reference. If we think the display is wrong, we > should fix info.el to yield a better one. I agree, thanks, --=20 Basil From MAILER-DAEMON Sat Jun 13 13:09:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9ec-0003FS-68 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:09:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53208) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9ea-0003DU-CX for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:09:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60501) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk9eZ-0006Aw-UY; Sat, 13 Jun 2020 13:09:11 -0400 Received: from [176.228.60.248] (port=3779 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk9eZ-0007Pa-DF; Sat, 13 Jun 2020 13:09:11 -0400 Date: Sat, 13 Jun 2020 20:09:02 +0300 Message-Id: <83v9ju3nbl.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sat, 13 Jun 2020 18:44:04 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:09:12 -0000 > From: Mattias EngdegÃ¥rd > Date: Sat, 13 Jun 2020 18:44:04 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > 13 juni 2020 kl. 17.58 skrev Eli Zaretskii : > > >> Try (color-values "#123"). The correct result is (#x1111 #x2222 #x3333). > > > > Why is that the correct value? I get (#x1010 #x2020 #x3030); why is > > that wrong? > > It violates the HTML/CSS convention which was agreed upon in bug#36304 and followed by the other backends. Single-digit hex numbers are scaled by 65535/15, two-digit numbers by 65535/255, and three-digit numbers by 65535/4095. But the code you want to supplant explicitly does something different: value = strtoul (color, &end, 16); color[size] = t; if (errno == ERANGE || end - color != size) break; switch (size) { case 1: value = value * 0x10; break; case 2: break; case 3: value /= 0x10; break; case 4: value /= 0x100; break; } That multiplication by 0x10 cannot be a typo, it's a deliberate interpretation of #f as #f0, not as #0f or #ff. Of course, single-digit hex RGB specs are rarely if ever used these days, AFAIK, so maybe this isn't a problem in practice. But still, I wonder what could we lose here or break. > > Just follow the code, it should be very clear: those two branches > > always return a list of values. No example should be needed. > > An example could help resolve misunderstanding, and if we go back-and-forth on what you think is a simple matter it's a clear sign that one is definitely needed. > > > No, that's not true, as should be obvious from examining the code. > > Previously, any "#..." string whose length was 4 or longer would > > return a list of values, even if it wasn't well-formed; now some of > > them will return nil. > > (tty-color-values "#xyz") returned nil (and still does), contradicting your claim. How about (tty-color-values "#12345")? does it contradict yours? > I meant that the manner of rejection remains unchanged, not the set of rejected arguments, which is a consequence of improved error-checking, very much by design. > Not only was it previously lacking, its coverage varied wildly between backends. That means that hardly any code could have abused the lax checking while still working on multiple platforms. Of course, the unpredictable behaviour on malformed input made this a very dubious endeavour in the first place. You are changing the behavior, so get ready to hear bug reports, is all I'm saying. > > color-values-from-rgb-spec? > > Thank you, but that would preclude addition of non-RGB formats in the future, such as HSV or XIE XYZ. Nothing in the interface forces the specification to be RGB. In fact, Xlib accepts several non-RGB formats. Then color-values-from-color-spec, I guess. From MAILER-DAEMON Sat Jun 13 13:16:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9lw-0001Cu-GE for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:16:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9lu-0001Cl-PG for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:16:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60613) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jk9lt-0007ak-Ts; Sat, 13 Jun 2020 13:16:45 -0400 Received: from [176.228.60.248] (port=4243 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jk9lt-00088t-9j; Sat, 13 Jun 2020 13:16:45 -0400 Date: Sat, 13 Jun 2020 20:16:37 +0300 Message-Id: <83tuze3myy.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org In-Reply-To: <87eeqi3nky.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: [Emacs-diffs] master fc759eb: Fix with-coding-priority markup in Elisp manual References: <83bluklk7f.fsf@gnu.org> <87a7179drp.fsf@tcd.ie> <83zh972cfs.fsf@gnu.org> <87y2oq6hzl.fsf@tcd.ie> <83wo4a3oju.fsf@gnu.org> <87eeqi3nky.fsf@tcd.ie> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:16:47 -0000 > From: "Basil L. Contovounesios" > Cc: emacs-devel@gnu.org > Date: Sat, 13 Jun 2020 18:03:25 +0100 > > > From the Texinfo POV the result is perfectly correct, and provides a > > better location to an Info reader (although ISTR the Emacs reader > > disregards that). > > Are you referring to the fact that following the xref doesn't take you > to the definition of progn? Yes. > Because I would have guessed that's because there's no > @anchor{progn}. The @anchor shouldn't be needed, the Info reader should just search for the first occurrence of "progn" in the node. ISTR that at some point the stand-alone Info reader did that, but I'm not sure, and the latest version doesn't AFAICT. Maybe we should enhance info.el to do that. In any case, the printed manual produces a more targeted reference from a 2-argument xref. From MAILER-DAEMON Sat Jun 13 13:29:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jk9yV-0006fG-O0 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:29:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33308) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9yT-0006eH-UJ for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:29:46 -0400 Received: from mail1474c50.megamailservers.eu ([91.136.14.74]:34292 helo=mail102c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jk9yS-0001DP-0l; Sat, 13 Jun 2020 13:29:45 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592069376; bh=wBoIx5PTINX7xu9u/98rg3og+IdtNhrCUeYEueBMoQo=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=mN7Z/apGDHeJFzVjOdg4BJJZoVRynYKBTSl/4CwZgPFJyQq8d+e9nRivgA3sp4Rvs oWbaxAtsHneO+Kkb9bLZUxcCb7MhFqyGCFHsgfE6h7AgCsd68wdvKEmgscWWfxRodm ahrB1S5YORLTh7IUMh1BzOncSLI2JwdceYx6juP4= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail102c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DHTYGU010036; Sat, 13 Jun 2020 17:29:36 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83v9ju3nbl.fsf@gnu.org> Date: Sat, 13 Jun 2020 19:29:33 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F29.5EE50C62.0018, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=S52nP7kP c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=FmLVqxAHNlbpg0cQT3cA:9 a=CjuIK1q_8ugA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.14.74; envelope-from=mattiase@acm.org; helo=mail102c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 13:29:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:29:46 -0000 13 juni 2020 kl. 19.09 skrev Eli Zaretskii : > But the code you want to supplant explicitly does something different: Yes, which is part of the reason why it's being supplanted. > Of course, single-digit hex RGB specs are rarely if ever used these > days, AFAIK, so maybe this isn't a problem in practice. But still, I > wonder what could we lose here or break. This isn't going to be a problem in practice. > How about (tty-color-values "#12345")? does it contradict yours? No, it is an error that is (correctly) rejected by the new code in the = same way that #xyz is currently rejected. > You are changing the behavior, so get ready to hear bug reports, is > all I'm saying. That's fine, I'll be ready. It's impossible to fix bugs without changing behaviour, so if we want = the former, we have to allow for the latter, within bounds appropriate = for the situation. > Then color-values-from-color-spec, I guess. Thank you, but a smidgen too many 'color' in there. Would = color-values-from-spec do? From MAILER-DAEMON Sat Jun 13 13:35:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkA4C-0002WG-AO for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:35:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35048) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkA4A-0002WA-OM for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:35:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60751) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkA4A-0002Hc-Dn; Sat, 13 Jun 2020 13:35:38 -0400 Received: from [176.228.60.248] (port=1424 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkA49-00020L-Ed; Sat, 13 Jun 2020 13:35:38 -0400 Date: Sat, 13 Jun 2020 20:35:29 +0300 Message-Id: <83sgey3m3i.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sat, 13 Jun 2020 19:29:33 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:35:39 -0000 > From: Mattias EngdegÃ¥rd > Date: Sat, 13 Jun 2020 19:29:33 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > > How about (tty-color-values "#12345")? does it contradict yours? > > No, it is an error that is (correctly) rejected by the new code in the same way that #xyz is currently rejected. But it isn't rejected by the current code. Which was my point all along. > > Then color-values-from-color-spec, I guess. > > Thank you, but a smidgen too many 'color' in there. I don't think so, no. From MAILER-DAEMON Sat Jun 13 13:51:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkAJr-0006MU-AE for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:51:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkAJp-0006MK-JL for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:51:49 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:36294) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkAJm-0004vK-VT for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:51:49 -0400 Received: by mail-wm1-x32a.google.com with SMTP id d128so10849342wmc.1 for ; Sat, 13 Jun 2020 10:51:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=pjas7/NetOMW/SGijcK/TmH6nh45h3Dz4eUIjmSvg3w=; b=CQfyh3uMspPb8m2yE6M9mI4Vl2ByQy2pS5yniLBwWf5q/g+3S3vhuC/Qoa7X91/8r0 yDq1kziLLQAGIIf+wwIOJKrvqbhuoCHxF+zqHa7glVi6Gtf3yMeS+RL8qdHGNaPnwdX7 EbKERZydtAOwsAKHnS4nceAiH2I8Lj6IizyMIIK6S7+JPcMNYEZzE2GyB6bgwobnkj5i fYo7obE3lKZAclZ6uHBQoTthUAA386ZYc58bPpOmblLgq4ujVzurOAGSj3D/w7DKT2zG IrWiFqTn39t/+EVBkUSCeJiioJMp/SJFtgT7vWerqVJTZgeMX32TPh50ZG1gm2rUFINN 9wZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=pjas7/NetOMW/SGijcK/TmH6nh45h3Dz4eUIjmSvg3w=; b=XW7T9l/Eg4C+iEMt6UgDG00uqVSSKDIhce5J9dsNzBKrjqJMMUfEK226P5jNnbULCn 5+Qcg3mTWiRygypujrLAomZymN+UA1w/EKA7g7aCsANr7KMAISeIV56QrVfDHtKlE+V5 p9FaDUxCsg4TDg/5nPUwpd9mFMuQSRSCjs/mC5Nsn5j0R9F755tuSHHMu5+mZyxLB5kj d28LQsuLtS7N8X7A0GeF4SsyoNsKvnCI2j+6le6lg7bWgxOLEV0WDu/mTRgp7QZbfbFq 7nvzQhmn4HI/OSQHVfbHzEdK2KFHd5Vox31MsLRBculGLePef0RJeoKc3NkOMk6gdb7U KXCQ== X-Gm-Message-State: AOAM533anocWrL5y8GCIUPuK9OaWodYdCLqRGeFkt2yNDYj5gwZmk2xL cAoZewZ5QkAS/B55wFYrnkmsTOE/tfw= X-Google-Smtp-Source: ABdhPJxQyk5DtZapT1HM0ypSTzieAOnF7O4wxBREQ0Lk9sZmfKIgdt+OAusX1UoLHNyIdULTqlya0g== X-Received: by 2002:a1c:491:: with SMTP id 139mr4500391wme.99.1592070699872; Sat, 13 Jun 2020 10:51:39 -0700 (PDT) Received: from krug (26.180.54.77.rev.vodafone.pt. [77.54.180.26]) by smtp.gmail.com with ESMTPSA id p16sm17242817wru.27.2020.06.13.10.51.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 10:51:39 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Andrew Schwartzmeyer Cc: emacs-devel@gnu.org Subject: Re: icomplete-fido-backward-updir litters kill-ring References: Date: Sat, 13 Jun 2020 18:51:37 +0100 In-Reply-To: (Andrew Schwartzmeyer's message of "Fri, 12 Jun 2020 21:20:54 -0700") Message-ID: <87eeqiyhue.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x32a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:51:49 -0000 Andrew Schwartzmeyer writes: > Hello, > > Please tell me if this should be redirected to the bug report mailing > list. It=E2=80=99s less a bug and more an undesired behavior. It's a bug, and yes, next time you should redirect this to the bug report mailing list. Just make sure you CC me in some reply to the message that debbugs replies with (the one that includes the bug number that it assigns automatically). Don't CC: me in the original mail to bug-gnu-emacs@gnu.org. > Jo=C3=A3o, what do you think? Perhaps this was intended behavior, but it = doesn=E2=80=99t seem like it. > No, it's not intended. It's a bug, and a pretty annoying one. I've fixed it in Emacs 27 (which should eventually appear in master). Have a try, please. > P.S. With Emacs 28 I=E2=80=99m super happy with how much 3rdparty stuff I= =E2=80=99m getting to replace with GNU code, either built-in or in ELPA. Li= ke > fido-mode :) That's good to hear. I also like that feeling (but not all do, I suspect). From MAILER-DAEMON Sat Jun 13 13:52:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkAKq-0007dJ-IX for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:52:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkAKp-0007cr-5r for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:52:51 -0400 Received: from mail223c50.megamailservers.eu ([91.136.10.233]:40644 helo=mail33c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkAKm-00052l-Bs for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:52:50 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592070764; bh=iH+4u7mKPqYLTlE1hzpOfBD9kqVbFB1cikcBUi+6efs=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=CoB+Zmv0OqO19G0OUl9I/p++HCXaiZNmnkMQ9EalCEQvstcFKq0Pk1Aeq/wMTyX3I g+qJqb7dzWyVW0s5Zc6JqnCooRA6jUk771DO4usS764oNdCxXNhNnQdDwpGRSWbROl bH8i0R897FCvktDDuGy36eSK18uU4wZPKF08H73I= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail33c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DHqfYh021251; Sat, 13 Jun 2020 17:52:43 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87tuzgnnge.fsf@tcd.ie> Date: Sat, 13 Jun 2020 19:52:41 +0200 Cc: Pip Cet , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <7F0A1058-D2B0-4D6A-AB0B-C6F5F204ADBE@acm.org> References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <87tuzgnnge.fsf@tcd.ie> To: "Basil L. Contovounesios" X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1F.5EE511F8.000C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=eaJDgIMH c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=-BrBqRlCMDZXgLnWGDQA:9 a=6vsnA1MKiN0RtDxX:21 a=52i-w4PomLeItWvo:21 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.10.233; envelope-from=mattiase@acm.org; helo=mail33c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 13:52:45 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:52:51 -0000 12 juni 2020 kl. 20.33 skrev Basil L. Contovounesios : > xterm.c:2379: warning: macro "HEX_COLOR_NAME_LENGTH" is not used = [-Wunused-macros] > 2379 | #define HEX_COLOR_NAME_LENGTH 32 Thank you very much, I'll fix that. > Is there something else I should be doing to test this? If things look right they probably are, I suppose. You could try (set-background-color "#f0f") and confirm the induced wave = of nausea. From MAILER-DAEMON Sat Jun 13 13:56:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkAO7-0000c6-0s for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 13:56:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkAO4-0000WU-SH for emacs-devel@gnu.org; Sat, 13 Jun 2020 13:56:12 -0400 Received: from mail210c50.megamailservers.eu ([91.136.10.220]:53710 helo=mail194c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkAO2-0005n6-RM; Sat, 13 Jun 2020 13:56:12 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592070966; bh=CRH/pByJQE60AZ2JrFdoTc2HqMvTTtVT5DhO2uyTTvk=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=sTPwXtK4gHqDEgBnpoetRJCQZWMCdfX3qo4D+DfuD/LCNCrTlCI4KsaBJEcQq+le+ 45/feHQYL2+BtEnf92FfXLkixBhbbikLGD+pkMnR+ve+LSyxxZDqQefrclU+Dltpul GSxxMbpwd54ibe5y7wGdBFNvn6ilxFzBrVUpeZyg= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail194c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05DHu2LB020469; Sat, 13 Jun 2020 17:56:05 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_DF1D45F9-6A8E-4501-9943-D765E50A9433" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing Date: Sat, 13 Jun 2020 19:56:02 +0200 In-Reply-To: <83sgey3m3i.fsf@gnu.org> Cc: pipcet@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F19.5EE51336.0016, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=KsozJleN c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=j8gvZXSf7insxO4HaVEA:9 a=CjuIK1q_8ugA:10 a=3AzUsQxcQTNn1yNZmDYA:9 a=B2y7HmGcmWMA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.10.220; envelope-from=mattiase@acm.org; helo=mail194c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 13:56:07 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 17:56:13 -0000 --Apple-Mail=_DF1D45F9-6A8E-4501-9943-D765E50A9433 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 13 juni 2020 kl. 19.35 skrev Eli Zaretskii : > But it isn't rejected by the current code. Which was my point all > along. Since "#12345" is malformed it should be rejected, and will be. >>> Then color-values-from-color-spec, I guess. >>=20 >> Thank you, but a smidgen too many 'color' in there. >=20 > I don't think so, no. Very well, I have no strong opinion here so let's go with it. Updated patch attached, with the name change, and the warning found by = Basil fixed. --Apple-Mail=_DF1D45F9-6A8E-4501-9943-D765E50A9433 Content-Disposition: attachment; filename=0001-Consolidate-RGB-string-parsers.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Consolidate-RGB-string-parsers.patch" Content-Transfer-Encoding: quoted-printable =46rom=20a06d9d76f94f8bc3afdf92962fa88d43fff67d09=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2012=20Jun=202020=2018:12:37=20+0200=0A= Subject:=20[PATCH]=20Consolidate=20#RGB=20string=20parsers=0A=0AUse=20a=20= single=20parser=20of=20colour=20strings=20in=20the=20#RGB,=20rgb:R/G/B=20= and=0Argbi:R/G/B=20formats,=20replacing=20four=20existing=20ones.=20=20= Previously,=0Aerror-checking=20was=20spotty,=20handling=20of=20the=20= rgbi:=20format=20not=20always=0Apresent,=20and=20normalisation=20of=20= the=20result=20was=20sometimes=20incorrect.=0A=0A*=20src/dispextern.h:=20= New=20prototype.=0A*=20src/xfaces.c=20(parse_hex_comp,=20= parse_float_comp,=20parse_color_spec)=0A(Fcolor_values_from_color_spec):=20= New=20functions.=0A*=20test/src/xfaces-tests.el=20= (xfaces-color-values-from-color-spec):=0ANew=20test.=0A*=20= lisp/term/tty-colors.el=20(tty-color-standard-values):=0AUse=20= color-values-from-color-spec,=20replacing=20old=20parser.=0A*=20= src/nsterm.m=20(ns_get_color):=0A*=20src/w32fns.c=20(x_to_w32_color):=0A= *=20src/xterm.c=20(x_parse_color):=20Use=20parse_color_spec,=20replacing=20= old=0Aparsers.=0A(HEX_COLOR_NAME_LENGTH):=20Remove=20#define.=0A---=0A=20= lisp/term/tty-colors.el=20=20|=20=2058=20+--------------=0A=20= src/dispextern.h=20=20=20=20=20=20=20=20=20|=20=20=202=20+=0A=20= src/nsterm.m=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2059=20= +++++----------=0A=20src/w32fns.c=20=20=20=20=20=20=20=20=20=20=20=20=20= |=20157=20++-------------------------------------=0A=20src/xfaces.c=20=20= =20=20=20=20=20=20=20=20=20=20=20|=20112=20++++++++++++++++++++++++++++=0A= =20src/xterm.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2051=20= ++++---------=0A=20test/src/xfaces-tests.el=20|=20=2023=20++++++=0A=207=20= files=20changed,=20176=20insertions(+),=20286=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/term/tty-colors.el=20b/lisp/term/tty-colors.el=0Aindex=20= 39ca2d3627..dda7fcc369=20100644=0A---=20a/lisp/term/tty-colors.el=0A+++=20= b/lisp/term/tty-colors.el=0A@@=20-923,62=20+923,8=20@@=20= tty-color-standard-values=0A=20COLOR=20(see=20the=20info=20node=20= `(emacs)=20Colors'),=20regardless=20of=20whether=0A=20the=20terminal=20= can=20display=20it,=20so=20the=20return=20value=20should=20be=20the=0A=20= same=20regardless=20of=20what=20display=20is=20being=20used."=0A-=20=20= (let=20((len=20(length=20color)))=0A-=20=20=20=20(cond=20((and=20(>=3D=20= len=204)=20;;=20HTML/CSS/SVG-style=20"#XXYYZZ"=20color=20spec=0A-=09=09= (eq=20(aref=20color=200)=20?#)=0A-=09=09(member=20(aref=20color=201)=0A-=09= =09=09'(?0=20?1=20?2=20?3=20?4=20?5=20?6=20?7=20?8=20?9=0A-=09=09=09=20=20= =20=20=20?a=20?b=20?c=20?d=20?e=20?f=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?A=20?B=20?C=20?D=20= ?E=20?F)))=0A-=09=20=20=20;;=20Translate=20the=20string=20"#XXYYZZ"=20= into=20a=20list=20of=20numbers=0A-=09=20=20=20;;=20(XX=20YY=20ZZ),=20= scaling=20each=20to=20the=20{0..65535}=20range.=20=20This=0A-=09=20=20=20= ;;=20follows=20the=20HTML=20color=20convention,=20where=20both=20"#fff"=20= and=0A-=09=20=20=20;;=20"#ffffff"=20represent=20the=20same=20color,=20= white.=0A-=09=20=20=20(let*=20((ndig=20(/=20(-=20len=201)=203))=0A-=09=09= =20=20(maxval=20(1-=20(ash=201=20(*=204=20ndig))))=0A-=09=09=20=20(i1=20= 1)=0A-=09=09=20=20(i2=20(+=20i1=20ndig))=0A-=09=09=20=20(i3=20(+=20i2=20= ndig))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(i4=20(+=20= i3=20ndig)))=0A-=09=20=20=20=20=20(list=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i1=20i2)=20= 16)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20= =20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20(substring=20= color=20i2=20i3)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A= -=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20i4)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09= =20maxval))))=0A-=09=20=20((and=20(>=3D=20len=209)=20;;=20X-style=20= rgb:xx/yy/zz=20color=20spec=0A-=09=09(string=3D=20(substring=20color=200=20= 4)=20"rgb:"))=0A-=09=20=20=20;;=20Translate=20the=20string=20= "rgb:XX/YY/ZZ"=20into=20a=20list=20of=0A-=09=20=20=20;;=20numbers=20(XX=20= YY=20ZZ),=20scaling=20each=20to=20the=20{0..65535}=0A-=09=20=20=20;;=20= range.=20=20"rgb:F/F/F"=20is=20white.=0A-=09=20=20=20(let*=20((ndig=20(/=20= (-=20len=203)=203))=0A-=09=09=20=20(maxval=20(1-=20(ash=201=20(*=204=20= (-=20ndig=201)))))=0A-=09=09=20=20(i1=204)=0A-=09=09=20=20(i2=20(+=20i1=20= ndig))=0A-=09=09=20=20(i3=20(+=20i2=20ndig))=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(i4=20(+=20i3=20ndig)))=0A-=09=20=20=20=20=20= (list=0A-=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20= =20=20=20(substring=20color=20i1=20(-=20i2=201))=2016)=0A-=09=09=20=20=20= =2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i2=20(-=20= i3=201))=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20= =20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20(1-=20i4))=2016)=0A-=09=09=20=20=20=2065535)=0A= -=09=09=20maxval))))=0A-=09=20=20(t=0A-=09=20=20=20(cdr=20(assoc=20color=20= color-name-rgb-alist))))))=0A+=20=20(or=20(color-values-from-color-spec=20= color)=0A+=20=20=20=20=20=20(cdr=20(assoc=20color=20= color-name-rgb-alist))))=0A=20=0A=20(defun=20tty-color-translate=20= (color=20&optional=20frame)=0A=20=20=20"Given=20a=20color=20COLOR,=20= return=20the=20index=20of=20the=20corresponding=20TTY=20color.=0Adiff=20= --git=20a/src/dispextern.h=20b/src/dispextern.h=0Aindex=20= 0b1f3d14ae..e1d6eddc41=20100644=0A---=20a/src/dispextern.h=0A+++=20= b/src/dispextern.h=0A@@=20-3514,6=20+3514,8=20@@=20#define=20= RGB_PIXEL_COLOR=20COLORREF=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Lisp_Object);=0A=20extern=20bool=20tty_defined_color=20(struct=20frame=20= *,=20const=20char=20*,=20Emacs_Color=20*,=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20bool,=20= bool);=0A+bool=20parse_color_spec=20(const=20char=20*,=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20unsigned=20short=20= *,=20unsigned=20short=20*,=20unsigned=20short=20*);=0A=20=0A=20= Lisp_Object=20tty_color_name=20(struct=20frame=20*,=20int);=0A=20void=20= clear_face_cache=20(bool);=0Adiff=20--git=20a/src/nsterm.m=20= b/src/nsterm.m=0Aindex=203dc7e1db7c..0e405fc017=20100644=0A---=20= a/src/nsterm.m=0A+++=20b/src/nsterm.m=0A@@=20-2341,9=20+2341,6=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20See=20= https://lists.gnu.org/r/emacs-devel/2009-07/msg01203.html.=20=20*/=0A=20= {=0A=20=20=20NSColor=20*new=20=3D=20nil;=0A-=20=20static=20char=20= hex[20];=0A-=20=20int=20scaling=20=3D=200;=0A-=20=20float=20r=20=3D=20= -1.0,=20g,=20b;=0A=20=20=20NSString=20*nsname=20=3D=20[NSString=20= stringWithUTF8String:=20name];=0A=20=0A=20=20=20NSTRACE=20= ("ns_get_color(%s,=20**)",=20name);=0A@@=20-2386,51=20+2383,31=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20=20}=0A=20=0A=20=20=20/*=20First,=20check=20for=20some=20= sort=20of=20numeric=20specification.=20=20*/=0A-=20=20hex[0]=20=3D=20= '\0';=0A-=0A-=20=20if=20(name[0]=20=3D=3D=20'0'=20||=20name[0]=20=3D=3D=20= '1'=20||=20name[0]=20=3D=3D=20'.')=20=20/*=20RGB=20decimal=20*/=0A+=20=20= unsigned=20short=20r16,=20g16,=20b16;=0A+=20=20if=20(parse_color_spec=20= (name,=20&r16,=20&g16,=20&b16))=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20= NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20nsname];=0A= -=20=20=20=20=20=20[scanner=20scanFloat:=20&r];=0A-=20=20=20=20=20=20= [scanner=20scanFloat:=20&g];=0A-=20=20=20=20=20=20[scanner=20scanFloat:=20= &b];=0A-=20=20=20=20}=0A-=20=20else=20if=20(!strncmp(name,=20"rgb:",=20= 4))=20=20/*=20A=20newer=20X11=20format=20--=20rgb:r/g/b=20*/=0A-=20=20=20= =20scaling=20=3D=20(snprintf=20(hex,=20sizeof=20hex,=20"%s",=20name=20+=20= 4)=20-=202)=20/=203;=0A-=20=20else=20if=20(name[0]=20=3D=3D=20'#')=20=20=20= =20=20=20=20=20/*=20An=20old=20X11=20format;=20convert=20to=20newer=20*/=0A= -=20=20=20=20{=0A-=20=20=20=20=20=20int=20len=20=3D=200;=0A-=20=20=20=20=20= =20while=20(isxdigit=20(name[len=20+=201]))=0A-=20=20=20=20=20=20=20=20= len++;=0A-=20=20=20=20=20=20if=20(name[len=20+=201]=20=3D=3D=20'\0'=20&&=20= len=20>=3D=201=20&&=20len=20<=3D=2012=20&&=20len=20%=203=20=3D=3D=200)=0A= -=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20scaling=20=3D=20= len=20/=203;=0A-=20=20=20=20=20=20=20=20=20=20for=20(int=20i=20=3D=200;=20= i=20<=203;=20i++)=0A-=20=20=20=20=20=20=20=20=20=20=20=20sprintf=20(hex=20= +=20i=20*=20(scaling=20+=201),=20"%.*s/",=20scaling,=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20name=20+=201=20+=20i=20*=20= scaling);=0A-=20=20=20=20=20=20=20=20=20=20hex[3=20*=20(scaling=20+=201)=20= -=201]=20=3D=20'\0';=0A-=20=20=20=20=20=20=20=20}=0A+=20=20=20=20=20=20= *col=20=3D=20[NSColor=20colorForEmacsRed:=20r16=20/=2065535.0=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20green:=20g16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= blue:=20b16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20alpha:=201.0];=0A+=20= =20=20=20=20=20unblock_input=20();=0A+=20=20=20=20=20=20return=200;=0A=20= =20=20=20=20}=0A-=0A-=20=20if=20(hex[0])=0A+=20=20else=20if=20(name[0]=20= =3D=3D=20'0'=20||=20name[0]=20=3D=3D=20'1'=20||=20name[0]=20=3D=3D=20= '.')=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20unsigned=20int=20rr,=20gg,=20= bb;=0A-=20=20=20=20=20=20float=20fscale=20=3D=20(1=20<<=20(scaling=20*=20= 4))=20-=201;=0A-=20=20=20=20=20=20if=20(sscanf=20(hex,=20"%x/%x/%x",=20= &rr,=20&gg,=20&bb))=0A+=20=20=20=20=20=20/*=20RGB=20decimal=20*/=0A+=20=20= =20=20=20=20NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20= nsname];=0A+=20=20=20=20=20=20float=20r,=20g,=20b;=0A+=20=20=20=20=20=20= if=20(=20=20=20[scanner=20scanFloat:=20&r]=20&&=20r=20>=3D=200=20&&=20r=20= <=3D=201=0A+=20=20=20=20=20=20=20=20=20=20&&=20[scanner=20scanFloat:=20= &g]=20&&=20g=20>=3D=200=20&&=20g=20<=3D=201=0A+=20=20=20=20=20=20=20=20=20= =20&&=20[scanner=20scanFloat:=20&b]=20&&=20b=20>=3D=200=20&&=20b=20<=3D=20= 1)=0A=20=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20r=20=3D= =20rr=20/=20fscale;=0A-=20=20=20=20=20=20=20=20=20=20g=20=3D=20gg=20/=20= fscale;=0A-=20=20=20=20=20=20=20=20=20=20b=20=3D=20bb=20/=20fscale;=0A+=20= =20=20=20=20=20=20=20=20=20*col=20=3D=20[NSColor=20colorForEmacsRed:=20r=20= green:=20g=20blue:=20b=20alpha:=201.0];=0A+=20=20=20=20=20=20=20=20=20=20= unblock_input=20();=0A+=20=20=20=20=20=20=20=20=20=20return=200;=0A=20=20= =20=20=20=20=20=20=20}=0A=20=20=20=20=20}=0A=20=0A-=20=20if=20(r=20>=3D=20= 0.0F)=0A-=20=20=20=20{=0A-=20=20=20=20=20=20*col=20=3D=20[NSColor=20= colorForEmacsRed:=20r=20green:=20g=20blue:=20b=20alpha:=201.0];=0A-=20=20= =20=20=20=20unblock_input=20();=0A-=20=20=20=20=20=20return=200;=0A-=20=20= =20=20}=0A-=0A=20=20=20/*=20Otherwise,=20color=20is=20expected=20to=20be=20= from=20a=20list=20*/=0A=20=20=20{=0A=20=20=20=20=20NSEnumerator=20= *lenum,=20*cenum;=0Adiff=20--git=20a/src/w32fns.c=20b/src/w32fns.c=0A= index=20e595b0285a..ab864332e7=20100644=0A---=20a/src/w32fns.c=0A+++=20= b/src/w32fns.c=0A@@=20-864,161=20+864,14=20@@=20x_to_w32_color=20(const=20= char=20*=20colorname)=0A=20=0A=20=20=20block_input=20();=0A=20=0A-=20=20= if=20(colorname[0]=20=3D=3D=20'#')=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(colorname,=20&r,=20&g,=20&b))=0A=20= =20=20=20=20{=0A-=20=20=20=20=20=20/*=20Could=20be=20an=20old-style=20= RGB=20Device=20specification.=20=20*/=0A-=20=20=20=20=20=20int=20size=20= =3D=20strlen=20(colorname=20+=201);=0A-=20=20=20=20=20=20char=20*color=20= =3D=20alloca=20(size=20+=201);=0A-=0A-=20=20=20=20=20=20strcpy=20(color,=20= colorname=20+=201);=0A-=20=20=20=20=20=20if=20(size=20=3D=3D=203=20||=20= size=20=3D=3D=206=20||=20size=20=3D=3D=209=20||=20size=20=3D=3D=2012)=0A= -=09{=0A-=09=20=20UINT=20colorval;=0A-=09=20=20int=20i,=20pos;=0A-=09=20=20= pos=20=3D=200;=0A-=09=20=20size=20/=3D=203;=0A-=09=20=20colorval=20=3D=20= 0;=0A-=0A-=09=20=20for=20(i=20=3D=200;=20i=20<=203;=20i++)=0A-=09=20=20=20= =20{=0A-=09=20=20=20=20=20=20char=20*end;=0A-=09=20=20=20=20=20=20char=20= t;=0A-=09=20=20=20=20=20=20unsigned=20long=20value;=0A-=0A-=09=20=20=20=20= =20=20/*=20The=20check=20for=20'x'=20in=20the=20following=20conditional=20= takes=20into=0A-=09=09=20account=20the=20fact=20that=20strtol=20allows=20= a=20"0x"=20in=20front=20of=0A-=09=09=20our=20numbers,=20and=20we=20= don't.=20=20*/=0A-=09=20=20=20=20=20=20if=20(!isxdigit=20(color[0])=20||=20= color[1]=20=3D=3D=20'x')=0A-=09=09break;=0A-=09=20=20=20=20=20=20t=20=3D=20= color[size];=0A-=09=20=20=20=20=20=20color[size]=20=3D=20'\0';=0A-=09=20=20= =20=20=20=20value=20=3D=20strtoul=20(color,=20&end,=2016);=0A-=09=20=20=20= =20=20=20color[size]=20=3D=20t;=0A-=09=20=20=20=20=20=20if=20(errno=20=3D=3D= =20ERANGE=20||=20end=20-=20color=20!=3D=20size)=0A-=09=09break;=0A-=09=20= =20=20=20=20=20switch=20(size)=0A-=09=09{=0A-=09=09case=201:=0A-=09=09=20= =20value=20=3D=20value=20*=200x10;=0A-=09=09=20=20break;=0A-=09=09case=20= 2:=0A-=09=09=20=20break;=0A-=09=09case=203:=0A-=09=09=20=20value=20/=3D=20= 0x10;=0A-=09=09=20=20break;=0A-=09=09case=204:=0A-=09=09=20=20value=20/=3D= =200x100;=0A-=09=09=20=20break;=0A-=09=09}=0A-=09=20=20=20=20=20=20= colorval=20|=3D=20(value=20<<=20pos);=0A-=09=20=20=20=20=20=20pos=20+=3D=20= 0x8;=0A-=09=20=20=20=20=20=20if=20(i=20=3D=3D=202)=0A-=09=09{=0A-=09=09=20= =20unblock_input=20();=0A-=09=09=20=20XSETINT=20(ret,=20colorval);=0A-=09= =09=20=20return=20ret;=0A-=09=09}=0A-=09=20=20=20=20=20=20color=20=3D=20= end;=0A-=09=20=20=20=20}=0A-=09}=0A-=20=20=20=20}=0A-=20=20else=20if=20= (strnicmp=20(colorname,=20"rgb:",=204)=20=3D=3D=200)=0A-=20=20=20=20{=0A= -=20=20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=204;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= unsigned=20long=20value;=0A-=0A-=09=20=20/*=20The=20check=20for=20'x'=20= in=20the=20following=20conditional=20takes=20into=0A-=09=20=20=20=20=20= account=20the=20fact=20that=20strtol=20allows=20a=20"0x"=20in=20front=20= of=0A-=09=20=20=20=20=20our=20numbers,=20and=20we=20don't.=20=20*/=0A-=09= =20=20if=20(!isxdigit=20(color[0])=20||=20color[1]=20=3D=3D=20'x')=0A-=09= =20=20=20=20break;=0A-=09=20=20value=20=3D=20strtoul=20(color,=20&end,=20= 16);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09=20=20=20=20break;=0A= -=09=20=20switch=20(end=20-=20color)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20= case=201:=0A-=09=20=20=20=20=20=20value=20=3D=20value=20*=200x10=20+=20= value;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20case=202:=0A-=09=20= =20=20=20=20=20break;=0A-=09=20=20=20=20case=203:=0A-=09=20=20=20=20=20=20= value=20/=3D=200x10;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20= case=204:=0A-=09=20=20=20=20=20=20value=20/=3D=200x100;=0A-=09=20=20=20=20= =20=20break;=0A-=09=20=20=20=20default:=0A-=09=20=20=20=20=20=20value=20= =3D=20ULONG_MAX;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(value=20=3D=3D=20= ULONG_MAX)=0A-=09=20=20=20=20break;=0A-=09=20=20colorval=20|=3D=20(value=20= <<=20pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=20= 2)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A= -=09=09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20= =20=20=20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20= ret;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20= =20=20break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A+=20=20=20=20= =20=20unblock_input=20();=0A+=20=20=20=20=20=20/*=20Throw=20away=20the=20= low=208=20bits=20and=20return=200xBBGGRR.=20=20*/=0A+=20=20=20=20=20=20= return=20make_fixnum=20((b=20&=200xff00)=20<<=208=20|=20(g=20&=200xff00)=20= |=20r=20>>=208);=0A=20=20=20=20=20}=0A-=20=20else=20if=20(strnicmp=20= (colorname,=20"rgbi:",=205)=20=3D=3D=200)=0A-=20=20=20=20{=0A-=20=20=20=20= =20=20/*=20This=20is=20an=20RGB=20Intensity=20specification.=20=20*/=0A-=20= =20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=205;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= double=20value;=0A-=09=20=20UINT=20val;=0A=20=0A-=09=20=20value=20=3D=20= strtod=20(color,=20&end);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09= =20=20=20=20break;=0A-=09=20=20if=20(value=20<=200.0=20||=20value=20>=20= 1.0)=0A-=09=20=20=20=20break;=0A-=09=20=20val=20=3D=20(UINT)(0x100=20*=20= value);=0A-=09=20=20/*=20We=20used=200x100=20instead=20of=200xFF=20to=20= give=20a=20continuous=0A-=09=20=20=20=20=20range=20between=200.0=20and=20= 1.0=20inclusive.=20=20The=20next=20statement=0A-=09=20=20=20=20=20fixes=20= the=201.0=20case.=20=20*/=0A-=09=20=20if=20(val=20=3D=3D=200x100)=0A-=09=20= =20=20=20val=20=3D=200xFF;=0A-=09=20=20colorval=20|=3D=20(val=20<<=20= pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=202)=0A= -=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A-=09= =09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20=20=20= =20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20ret;=0A= -=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20=20=20= break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A-=20=20=20=20}=0A= =20=20=20/*=20I=20am=20not=20going=20to=20attempt=20to=20handle=20any=20= of=20the=20CIE=20color=20schemes=0A=20=20=20=20=20=20or=20TekHVC,=20= since=20I=20don't=20know=20the=20algorithms=20for=20conversion=20to=0A=20= =20=20=20=20=20RGB.=20=20*/=0Adiff=20--git=20a/src/xfaces.c=20= b/src/xfaces.c=0Aindex=20cf155288bd..0a2dec1cff=20100644=0A---=20= a/src/xfaces.c=0A+++=20b/src/xfaces.c=0A@@=20-220,6=20+220,7=20@@=20= Copyright=20(C)=201993-1994,=201998-2020=20Free=20Software=20Foundation,=20= Inc.=0A=20#include=20"sysstdio.h"=0A=20#include=20=0A=20= #include=20=0A+#include=20=0A=20=0A=20#include=20= "lisp.h"=0A=20#include=20"character.h"=0A@@=20-819,6=20+820,116=20@@=20= load_pixmap=20(struct=20frame=20*f,=20Lisp_Object=20name)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Color=20Handling=0A=20=20= ***********************************************************************/=0A= =20=0A+/*=20Parse=20fractional=20hex=20digits=20at=20S=20ending=20right=20= before=20E.=0A+=20=20=20Set=20*DST=20to=20the=20value=20normalised=20to=20= 65535=20and=20return=20true=20on=20success,=0A+=20=20=20false=20= otherwise.=20=20*/=0A+static=20bool=0A+parse_hex_comp=20(const=20char=20= *s,=20const=20char=20*e,=20unsigned=20short=20*dst)=0A+{=0A+=20=20int=20= n=20=3D=20e=20-=20s;=0A+=20=20if=20(n=20<=3D=200=20||=20n=20>=204)=0A+=20= =20=20=20return=20false;=0A+=20=20int=20val=20=3D=200;=0A+=20=20for=20(;=20= s=20<=20e;=20s++)=0A+=20=20=20=20{=0A+=20=20=20=20=20=20int=20digit;=0A+=20= =20=20=20=20=20if=20(*s=20>=3D=20'0'=20&&=20*s=20<=3D=20'9')=0A+=20=20=20= =20=20=20=20=20digit=20=3D=20*s=20-=20'0';=0A+=20=20=20=20=20=20else=20= if=20(*s=20>=3D=20'A'=20&&=20*s=20<=3D=20'F')=0A+=20=20=20=20=20=20=20=20= digit=20=3D=20*s=20-=20'A'=20+=2010;=0A+=20=20=20=20=20=20else=20if=20= (*s=20>=3D=20'a'=20&&=20*s=20<=3D=20'f')=0A+=20=20=20=20=20=20=20=20= digit=20=3D=20*s=20-=20'a'=20+=2010;=0A+=20=20=20=20=20=20else=0A+=20=20=20= =20=20=20=20=20return=20false;=0A+=20=20=20=20=20=20val=20=3D=20(val=20= <<=204)=20|=20digit;=0A+=20=20=20=20}=0A+=20=20int=20maxval=20=3D=20(1=20= <<=20(n=20*=204))=20-=201;=0A+=20=20*dst=20=3D=20(unsigned)val=20*=20= 65535=20/=20maxval;=0A+=20=20return=20true;=0A+}=0A+=0A+/*=20Parse=20= floating-point=20number=20at=20S=20ending=20right=20before=20E.=0A+=20=20= =20Return=20the=20number=20if=20in=20the=20range=20[0,1];=20otherwise=20= -1.=20=20*/=0A+static=20double=0A+parse_float_comp=20(const=20char=20*s,=20= const=20char=20*e)=0A+{=0A+=20=20char=20*end;=0A+=20=20double=20x=20=3D=20= strtod=20(s,=20&end);=0A+=20=20return=20(end=20=3D=3D=20e=20&&=20x=20>=3D=20= 0=20&&=20x=20<=3D=201)=20?=20x=20:=20-1;=0A+}=0A+=0A+/*=20Parse=20S=20as=20= a=20numeric=20colour=20specification=20and=20set=20*R,=20*G=20and=20*B.=0A= +=20=20=20Return=20true=20on=20success,=20false=20on=20failure.=0A+=20=20= =20Recognised=20formats:=0A+=0A+=20=20=20=20"#RGB",=20with=20R,=20G=20= and=20B=20hex=20strings=20of=20equal=20length,=201-4=20digits=20each=0A+=20= =20=20=20"rgb:R/G/B",=20with=20R,=20G=20and=20B=20hex=20strings,=201-4=20= digits=20each=0A+=20=20=20=20"rgbi:R/G/B",=20with=20R,=20G=20and=20B=20= numbers=20in=20[0,1]=0A+=0A+=20=20=20The=20result=20is=20normalised=20to=20= a=20maximum=20value=20of=2065535=20per=20component.=20=20*/=0A+bool=0A= +parse_color_spec=20(const=20char=20*s,=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20unsigned=20short=20*r,=20unsigned=20short=20*g,=20= unsigned=20short=20*b)=0A+{=0A+=20=20int=20len=20=3D=20strlen=20(s);=0A+=20= =20if=20(s[0]=20=3D=3D=20'#')=0A+=20=20=20=20{=0A+=20=20=20=20=20=20if=20= ((len=20-=201)=20%=203=20=3D=3D=200)=0A+=20=20=20=20=20=20=20=20{=0A+=20=20= =20=20=20=20=20=20=20=20int=20n=20=3D=20(len=20-=201)=20/=203;=0A+=20=20=20= =20=20=20=20=20=20=20return=20(=20=20=20parse_hex_comp=20(s=20+=201=20+=20= 0=20*=20n,=20s=20+=201=20+=201=20*=20n,=20r)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20(s=20+=201=20+=201=20*=20= n,=20s=20+=201=20+=202=20*=20n,=20g)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20&&=20parse_hex_comp=20(s=20+=201=20+=202=20*=20n,=20= s=20+=201=20+=203=20*=20n,=20b));=0A+=20=20=20=20=20=20=20=20}=0A+=20=20=20= =20}=0A+=20=20else=20if=20(strncmp=20(s,=20"rgb:",=204)=20=3D=3D=200)=0A= +=20=20=20=20{=0A+=20=20=20=20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20= =20=20return=20((sep1=20=3D=20strchr=20(s=20+=204,=20'/'))=20!=3D=20NULL=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20(sep2=20=3D=20strchr=20= (sep1=20+=201,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20&&=20parse_hex_comp=20(s=20+=204,=20sep1,=20r)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20(sep1=20+=201,=20sep2,=20= g)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20parse_hex_comp=20= (sep2=20+=201,=20s=20+=20len,=20b));=0A+=20=20=20=20}=0A+=20=20else=20if=20= (strncmp=20(s,=20"rgbi:",=205)=20=3D=3D=200)=0A+=20=20=20=20{=0A+=20=20=20= =20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20=20=20double=20red,=20= green,=20blue;=0A+=20=20=20=20=20=20if=20((sep1=20=3D=20strchr=20(s=20+=20= 5,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20=20&&=20(sep2=20=3D= =20strchr=20(sep1=20+=201,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20= =20=20=20&&=20(red=20=3D=20parse_float_comp=20(s=20+=205,=20sep1))=20>=3D=20= 0=0A+=20=20=20=20=20=20=20=20=20=20&&=20(green=20=3D=20parse_float_comp=20= (sep1=20+=201,=20sep2))=20>=3D=200=0A+=20=20=20=20=20=20=20=20=20=20&&=20= (blue=20=3D=20parse_float_comp=20(sep2=20+=201,=20s=20+=20len))=20>=3D=20= 0)=0A+=20=20=20=20=20=20=20=20{=0A+=20=20=20=20=20=20=20=20=20=20*r=20=3D=20= lrint=20(red=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20*g=20=3D=20= lrint=20(green=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20*b=20=3D=20= lrint=20(blue=20*=2065535);=0A+=20=20=20=20=20=20=20=20=20=20return=20= true;=0A+=20=20=20=20=20=20=20=20}=0A+=20=20=20=20}=0A+=20=20return=20= false;=0A+}=0A+=0A+DEFUN=20("color-values-from-color-spec",=0A+=20=20=20=20= =20=20=20Fcolor_values_from_color_spec,=20Scolor_values_from_color_spec,=0A= +=20=20=20=20=20=20=201,=201,=200,=0A+=20=20=20=20=20=20=20doc:=20/*=20= Parse=20STRING=20as=20a=20numeric=20colour=20and=20return=20(R=20G=20B).=0A= +Recognised=20formats=20are:=0A+=0A+=20#RGB,=20where=20R,=20G=20and=20B=20= are=20hex=20strings=20of=20equal=20length,=201-4=20digits=20each=0A+=20= rgb:R/G/B,=20where=20R,=20G,=20and=20B=20are=20hex=20strings,=201-4=20= digits=20each=0A+=20rgbi:R/G/B,=20where=20R,=20G=20and=20B=20are=20= numbers=20in=20[0,1].=0A+=0A+The=20result=20is=20normalised=20to=20a=20= maximum=20value=20of=2065535=20per=20component.=0A+If=20STRING=20is=20= not=20in=20one=20of=20the=20above=20forms,=20return=20nil.=20=20*/)=0A+=20= =20(Lisp_Object=20string)=0A+{=0A+=20=20unsigned=20short=20r,=20g,=20b;=0A= +=20=20return=20(parse_color_spec=20(SSDATA=20(string),=20&r,=20&g,=20= &b)=0A+=20=20=20=20=20=20=20=20=20=20?=20list3i=20(r,=20g,=20b)=0A+=20=20= =20=20=20=20=20=20=20=20:=20Qnil);=0A+}=0A+=0A=20/*=20Parse=20RGB_LIST,=20= and=20fill=20in=20the=20RGB=20fields=20of=20COLOR.=0A=20=20=20=20= RGB_LIST=20should=20contain=20(at=20least)=203=20lisp=20integers.=0A=20=20= =20=20Return=20true=20iff=20RGB_LIST=20is=20OK.=20=20*/=0A@@=20-7018,4=20= +7129,5=20@@=20syms_of_xfaces=20(void)=0A=20=20=20defsubr=20= (&Sinternal_face_x_get_resource);=0A=20=20=20defsubr=20= (&Sx_family_fonts);=0A=20#endif=0A+=20=20defsubr=20= (&Scolor_values_from_color_spec);=0A=20}=0Adiff=20--git=20a/src/xterm.c=20= b/src/xterm.c=0Aindex=207989cecec7..6340700cb8=20100644=0A---=20= a/src/xterm.c=0A+++=20b/src/xterm.c=0A@@=20-2376,8=20+2376,6=20@@=20= x_query_frame_background_color=20(struct=20frame=20*f,=20XColor=20= *bgcolor)=0A=20=20=20x_query_colors=20(f,=20bgcolor,=201);=0A=20}=0A=20=0A= -#define=20HEX_COLOR_NAME_LENGTH=2032=0A-=0A=20/*=20On=20frame=20F,=20= translate=20the=20color=20name=20to=20RGB=20values.=20=20Use=20cached=0A=20= =20=20=20information,=20if=20possible.=0A=20=0A@@=20-2389,44=20+2387,23=20= @@=20#define=20HEX_COLOR_NAME_LENGTH=2032=0A=20Status=20x_parse_color=20= (struct=20frame=20*f,=20const=20char=20*color_name,=0A=20=09=09=20=20=20=20= =20=20XColor=20*color)=0A=20{=0A+=20=20/*=20Don't=20pass=20#RGB=20= strings=20directly=20to=20XParseColor,=20because=20that=0A+=20=20=20=20=20= follows=20the=20X=20convention=20of=20zero-extending=20each=20channel=0A= +=20=20=20=20=20value:=20#f00=20means=20#f00000.=20=20We=20want=20the=20= convention=20of=20scaling=0A+=20=20=20=20=20channel=20values,=20so=20= #f00=20means=20#ff0000,=20just=20as=20it=20does=20for=0A+=20=20=20=20=20= HTML,=20SVG,=20and=20CSS.=20=20*/=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(color_name,=20&r,=20&g,=20&b))=0A+=20= =20=20=20{=0A+=20=20=20=20=20=20color->red=20=3D=20r;=0A+=20=20=20=20=20=20= color->green=20=3D=20g;=0A+=20=20=20=20=20=20color->blue=20=3D=20b;=0A+=20= =20=20=20=20=20return=201;=0A+=20=20=20=20}=0A+=0A=20=20=20Display=20= *dpy=20=3D=20FRAME_X_DISPLAY=20(f);=0A=20=20=20Colormap=20cmap=20=3D=20= FRAME_X_COLORMAP=20(f);=0A=20=20=20struct=20color_name_cache_entry=20= *cache_entry;=0A-=0A-=20=20if=20(color_name[0]=20=3D=3D=20'#')=0A-=20=20=20= =20{=0A-=20=20=20=20=20=20/*=20Don't=20pass=20#RGB=20strings=20directly=20= to=20XParseColor,=20because=20that=0A-=09=20follows=20the=20X=20= convention=20of=20zero-extending=20each=20channel=0A-=09=20value:=20#f00=20= means=20#f00000.=20=20We=20want=20the=20convention=20of=20scaling=0A-=09=20= channel=20values,=20so=20#f00=20means=20#ff0000,=20just=20as=20it=20does=20= for=0A-=09=20HTML,=20SVG,=20and=20CSS.=0A-=0A-=09=20So=20we=20translate=20= #f00=20to=20rgb:f/0/0,=20which=20X=20handles=0A-=09=20differently.=20*/=0A= -=20=20=20=20=20=20char=20rgb_color_name[HEX_COLOR_NAME_LENGTH];=0A-=20=20= =20=20=20=20int=20len=20=3D=20strlen=20(color_name);=0A-=20=20=20=20=20=20= int=20digits_per_channel;=0A-=20=20=20=20=20=20if=20(len=20=3D=3D=204)=0A= -=09digits_per_channel=20=3D=201;=0A-=20=20=20=20=20=20else=20if=20(len=20= =3D=3D=207)=0A-=09digits_per_channel=20=3D=202;=0A-=20=20=20=20=20=20= else=20if=20(len=20=3D=3D=2010)=0A-=09digits_per_channel=20=3D=203;=0A-=20= =20=20=20=20=20else=20if=20(len=20=3D=3D=2013)=0A-=09digits_per_channel=20= =3D=204;=0A-=20=20=20=20=20=20else=0A-=09return=200;=0A-=0A-=20=20=20=20=20= =20snprintf=20(rgb_color_name,=20sizeof=20rgb_color_name,=20= "rgb:%.*s/%.*s/%.*s",=0A-=09=09digits_per_channel,=20color_name=20+=201,=0A= -=09=09digits_per_channel,=20color_name=20+=20digits_per_channel=20+=20= 1,=0A-=09=09digits_per_channel,=20color_name=20+=202=20*=20= digits_per_channel=20+=201);=0A-=0A-=20=20=20=20=20=20/*=20The=20rgb=20= form=20is=20parsed=20directly=20by=20XParseColor=20without=0A-=09=20= talking=20to=20the=20X=20server.=20=20No=20need=20for=20caching.=20=20*/=0A= -=20=20=20=20=20=20return=20XParseColor=20(dpy,=20cmap,=20= rgb_color_name,=20color);=0A-=20=20=20=20}=0A-=0A=20=20=20for=20= (cache_entry=20=3D=20FRAME_DISPLAY_INFO=20(f)->color_names;=20= cache_entry;=0A=20=20=20=20=20=20=20=20cache_entry=20=3D=20= cache_entry->next)=0A=20=20=20=20=20{=0Adiff=20--git=20= a/test/src/xfaces-tests.el=20b/test/src/xfaces-tests.el=0Aindex=20= 5ed16c9e51..72bfba5192=20100644=0A---=20a/test/src/xfaces-tests.el=0A+++=20= b/test/src/xfaces-tests.el=0A@@=20-24,4=20+24,27=20@@=20= xfaces-color-distance=0A=20=20=20(should=20(equal=20(color-distance=20= "#222222"=20"#ffffff")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(color-distance=20"#ffffff"=20"#222222"))))=0A=20=0A+(ert-deftest=20= xfaces-color-values-from-color-spec=20()=0A+=20=20(should=20(equal=20= (color-values-from-color-spec=20"#f05")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20'(#xffff=20#x0000=20#x5555)))=0A+=20=20(should=20= (equal=20(color-values-from-color-spec=20"#1fb0C5")=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20'(#x1f1f=20#xb0b0=20#xc5c5)))=0A+=20=20= (should=20(equal=20(color-values-from-color-spec=20"#1f8b0AC5e")=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(#x1f81=20#xb0aa=20= #xc5eb)))=0A+=20=20(should=20(equal=20(color-values-from-color-spec=20= "#1f83b0ADC5e2")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(#x1f83=20#xb0ad=20#xc5e2)))=0A+=20=20(should=20(equal=20= (color-values-from-color-spec=20"#1f83b0ADC5e2g")=20nil))=0A+=20=20= (should=20(equal=20(color-values-from-color-spec=20"#1f83b0ADC5e20")=20= nil))=0A+=20=20(should=20(equal=20(color-values-from-color-spec=20= "#12345")=20nil))=0A+=20=20(should=20(equal=20= (color-values-from-color-spec=20"rgb:f/23/28a")=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20'(#xffff=20#x2323=20#x28a2)))=0A+=20=20= (should=20(equal=20(color-values-from-color-spec=20"rgb:1234/5678/09ab")=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(#x1234=20#x5678=20= #x09ab)))=0A+=20=20(should=20(equal=20(color-values-from-color-spec=20= "rgb:0//0")=20nil))=0A+=20=20(should=20(equal=20= (color-values-from-color-spec=20"rgbi:0/0.5/0.1")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20'(0=2032768=206554)))=0A+=20=20(should=20= (equal=20(color-values-from-color-spec=20"rgbi:1e-3/1.0e-2/1e0")=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(66=20655=2065535)))=0A+=20= =20(should=20(equal=20(color-values-from-color-spec=20"rgbi:0/0.5/10")=20= nil)))=0A+=0A=20(provide=20'xfaces-tests)=0A--=20=0A2.21.1=20(Apple=20= Git-122.3)=0A=0A= --Apple-Mail=_DF1D45F9-6A8E-4501-9943-D765E50A9433-- From MAILER-DAEMON Sat Jun 13 14:40:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkB4q-0001GC-Gj for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 14:40:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkB4p-0001FC-Go for emacs-devel@gnu.org; Sat, 13 Jun 2020 14:40:23 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33353) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkB4p-0004xr-6o; Sat, 13 Jun 2020 14:40:23 -0400 Received: from [176.228.60.248] (port=1532 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkB4o-0005TS-FJ; Sat, 13 Jun 2020 14:40:23 -0400 Date: Sat, 13 Jun 2020 21:40:13 +0300 Message-Id: <83r1ui3j3m.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sat, 13 Jun 2020 19:56:02 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 18:40:23 -0000 > From: Mattias EngdegÃ¥rd > Date: Sat, 13 Jun 2020 19:56:02 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > > But it isn't rejected by the current code. Which was my point all > > along. > > Since "#12345" is malformed it should be rejected, and will be. That is definitely a change in behavior, isn't it? For some reason, you don't regard this point I'm making seriously. Why not? > Use a single parser of colour strings in the #RGB, rgb:R/G/B and ^^^^^^ > rgbi:R/G/B formats, replacing four existing ones. Previously, > error-checking was spotty, handling of the rgbi: format not always > present, and normalisation of the result was sometimes incorrect. ^^^^^^^^^^^^^ Our convention is to use the US English spelling. > +/* Parse fractional hex digits at S ending right before E. > + Set *DST to the value normalised to 65535 and return true on success, > + false otherwise. */ ^^^^^^^^^^ Likewise here. Please also describe in more detail the value put in *DST, I don't think it's clear enough. > +/* Parse floating-point number at S ending right before E. > + Return the number if in the range [0,1]; otherwise -1. */ > +static double > +parse_float_comp (const char *s, const char *e) The commentary doesn't explain what is the "comp" part of the name about. > +/* Parse S as a numeric colour specification and set *R, *G and *B. ^^^^^^ Spelling again. > + The result is normalised to a maximum value of 65535 per component. */ ^^^^^^^^^^ And here. > +DEFUN ("color-values-from-color-spec", > + Fcolor_values_from_color_spec, Scolor_values_from_color_spec, > + 1, 1, 0, > + doc: /* Parse STRING as a numeric colour and return (R G B). ^^^^^^ > +Recognised formats are: ^^^^^^^^^^ > + #RGB, where R, G and B are hex strings of equal length, 1-4 digits each > + rgb:R/G/B, where R, G, and B are hex strings, 1-4 digits each > + rgbi:R/G/B, where R, G and B are numbers in [0,1]. > + > +The result is normalised to a maximum value of 65535 per component. ^^^^^^^^^^ > +If STRING is not in one of the above forms, return nil. */) Spelling. I think this doc string is too terse. I would rephrase the beginning as follows: Convert a color SPEC into a list of standard RGB values. Value is a list of the form (R G B), where R, G, and B are the integer values, the intensities of the primary colors. The argument SPEC should be a string in one of the following formats: In the "rgbi" description, I think we should mention explicitly that the components are floating-point numbers. > + return (parse_color_spec (SSDATA (string), &r, &g, &b) > + ? list3i (r, g, b) > + : Qnil); What happens if the argument is not a string? What should happen? Finally, the Lisp primitive needs a NEWS entry and perhaps also a place in the ELisp manual. Thanks. From MAILER-DAEMON Sat Jun 13 14:52:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBGb-00054U-Py for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 14:52:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBGa-00054M-86 for emacs-devel@gnu.org; Sat, 13 Jun 2020 14:52:32 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:41768) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkBGY-0006yO-7P for emacs-devel@gnu.org; Sat, 13 Jun 2020 14:52:31 -0400 Received: by mail-wr1-x42f.google.com with SMTP id j10so13101512wrw.8 for ; Sat, 13 Jun 2020 11:52:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=jl9gR4cAblFzYpuyeZ7NvVpfpZT1zDBR9iIDpKp5YTo=; b=V17NjVxBtHtaUUhitHBUCgITH/Ae6bR0kF0xyiADwhcaynVbl+OLtgD3TlA+OLczAH xybrSe0mxUG2+nZLFNv9BVw8+VFEOyPQVgqGpw3cF/o+dLvf58F913MSuLktIx7DzOel PD1u6dZDsGozvBM41BTbHAqEUqTe2zKcUf/CIZtlfc3xirIUAPcu9OVYp6IKHzNxVmng mVpt1v/ul05zIyxiEtRdlM2m2NBAjUClnLdU04d2DJnan4v8cE6k/Bm6gx+EwxJSsJ45 cVPmcFMsDVAxljJ+iUPHlT3aJda4U2iE4KCXeP/CzlecA0hQkb0aBzebJLMWBmPjOyEr TV/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=jl9gR4cAblFzYpuyeZ7NvVpfpZT1zDBR9iIDpKp5YTo=; b=igXUeDX78bdXAitQA7n0Z/jsLrC0M1beKphiXL/Ln2e7btxtrZv8VT7S2Y338smV88 h1RMDNYbZiLD7/BTNtUnwQYG0VBKBY24flRqoJ8OCK+TyVOCLuV2nvnWghFAkJfAoeB4 ninkV8/55QwvTYor3F8vtVGRHbeHlnf0d1CP9c3DvhapUlo3Mi9J5DtTwmLGdgqAPMRl YjesbNDxx546sKeEbFjyEWFMM07RqY3m8I3qD15drIvkU2CmSAlTAMZXL4KGp4OAkYKG Qg6D1YlO1mUF8lF+iPi+6JN/qQnqaOES2BSH8AZ229GJqMBiazVPJl3Ey3nhobfAhIuv UsSg== X-Gm-Message-State: AOAM533Qmv8St+mzqeBeJuAZhWWoDWwGNtvuqsfO6H2V685uk+qvPsGO 8waLduBSYFVc3IQqBciD40CHYSUA9dCEIw== X-Google-Smtp-Source: ABdhPJwn4doldW8YFB4zGUVdNRbGT+nulyY8v9eP/PMIBislD2Nt5O/lqzLTW4v8E4dWxU7m9vg/TA== X-Received: by 2002:adf:fd4b:: with SMTP id h11mr20433708wrs.209.1592074346581; Sat, 13 Jun 2020 11:52:26 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id k16sm16747937wrp.66.2020.06.13.11.52.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 11:52:25 -0700 (PDT) From: "Basil L. Contovounesios" To: emacs-devel@gnu.org Cc: Stefan Kangas Subject: Re: master 80abaea: Use lexical-binding in lunar.el and add tests References: <20200607190128.16579.5580@vcs0.savannah.gnu.org> <20200607190130.38C4E20A2E@vcs0.savannah.gnu.org> <87r1uqo7cq.fsf@tcd.ie> Date: Sat, 13 Jun 2020 19:52:24 +0100 In-Reply-To: <87r1uqo7cq.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 07 Jun 2020 23:10:13 +0100") Message-ID: <87zh9623yv.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42f; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42f.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 18:52:32 -0000 "Basil L. Contovounesios" writes: > stefankangas@gmail.com (Stefan Kangas) writes: > >> branch: master >> commit 80abaea1d9c6f1e53fe88befe16de3b219cdd919 >> Author: Stefan Kangas >> Commit: Stefan Kangas >> >> Use lexical-binding in lunar.el and add tests >> >> * lisp/calendar/lunar.el: Use lexical-binding. >> (lunar-phases, diary-lunar-phases): Silence byte-compiler. >> * test/lisp/calendar/lunar-tests.el: New file. > > I'm seeing the following test failure: > > cd test; make lunar-tests [...] > Test lunar-test-phase-list condition: > (ert-test-failed > ((should > (equal > (lunar-phase-list 3 1871) > '...)) > :form > (equal > ((... "9:03pm" 0 "") > (... "11:46pm" 1 "** Eclipse **") > (... "7:20am" 2 "") > (... "10:57pm" 3 "** Eclipse possible **") > (... "12:06pm" 0 "") > (... "4:49pm" 1 "") > (... "3:57pm" 2 "") > (... "7:29am" 3 "") > (... "3:46am" 0 "") > (... "6:02am" 1 "")) > ((... "11:03pm" 0 "") > (... "1:46am" 1 "** Eclipse **") > (... "9:20am" 2 "") > (... "12:57am" 3 "** Eclipse possible **") > (... "2:06pm" 0 "") > (... "6:49pm" 1 "") > (... "5:57pm" 2 "") > (... "9:29am" 3 "") > (... "5:46am" 0 "") > (... "8:02am" 1 ""))) > :value nil :explanation > (list-elt 0 > (list-elt 1 > (arrays-of-different-length 6 7 "9:03pm" "11:03pm" first-mismatch-at 0))))) [...] > In case it matters, my time zone is > > (format-time-string "%Z %z") ; => "IST +0100" Looks like I'm not the only one: Tag a test as unstable 4823fa1077 2020-06-13 10:42:47 -0700 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=4823fa1077e4330bd2574eb54731bb32e6370034 -- Basil From MAILER-DAEMON Sat Jun 13 15:15:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBcz-0001ve-Ny for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:15:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49350) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBcy-0001vD-7L for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:15:40 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:52666) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkBcu-0002Iq-T6 for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:15:39 -0400 Received: by mail-wm1-x342.google.com with SMTP id r9so10842006wmh.2 for ; Sat, 13 Jun 2020 12:15:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=uHFiXBD46sqwuT3pB+B6snEWVrgHhYxXBu5sqsGLMBk=; b=gwKj9ZpAuptwUoBdXzyiiNFrc+M0vyR04GhmvluzliNpBZVQ9CWpwnj2c1h6257Z7z bXiKc9hTC2N0TKNCX4F7/W4gsfL+kCV7Attz3MI7W5IgyrfbF5P2XujmTKQubu1Kr16A gmf3BvLc0wZs79sAu/xiJ+9z3wl5DrNG8B8n8e1jWhWh83f2e1ryLSarkLuTpRyGtyJo Vz87SatBT7gwTDCHsvTmncY+OQWoyuSamMnQ75G/FnEx0suGpsItAEUFGENj5qG34QjP OKZF2uUgxreA9DJqal8SZo22ByDL0pPqQKfdafhq5e1XfDU4n1XBDNDKGuyPehNmDJ18 Rkpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=uHFiXBD46sqwuT3pB+B6snEWVrgHhYxXBu5sqsGLMBk=; b=FuHh+TfuGwzeBaN7SFCd0Ofwm86KmxJeI08hT/jvmirDpDsIxy8dVdLaGel73U1DrU xOLFeN/pFyK9qCGNYkwRdvyqUHs0qPcYQQs6Wzgz8zwoHL5AAN9/sRhDrySazu/8yIvC DEjwZt4ryhoS/mGeE3UEhPhE9NZtyQZg2FlsD6S+3i7nOKgP3fZy2UC6v7H7w6arBTlJ CLgx3qMqgABrUWSEbzzAZqtpCsYmsORyecEx0307Htc5kUxcRlQMUw7YwyRjbltDbiRI gAOY50wR8t4gQ3icAsFx8ggfQUdxc4/Kmoze9a6Xj2hslvsQF7hSjcZrH7wPUHMK5sB6 n/2g== X-Gm-Message-State: AOAM533hAtcB+McdUg5z23xOrZH75ZWEXPK/5d1Z4o1K6/GU6/kHxUhF d1O1sTJxh5c1UgsMP1EbsQK8oA== X-Google-Smtp-Source: ABdhPJzbxCwmeVU6E2ROHkGfZhG9zHME0FdKh6fJFkxgyfd3AURdyW1XeG8pVT8FR3s5zIL300e1fg== X-Received: by 2002:a7b:cf02:: with SMTP id l2mr5005333wmg.136.1592075735024; Sat, 13 Jun 2020 12:15:35 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id u13sm14163738wmm.6.2020.06.13.12.15.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 12:15:34 -0700 (PDT) From: "Basil L. Contovounesios" To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: Eli Zaretskii , pipcet@gmail.com, emacs-devel@gnu.org Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> Date: Sat, 13 Jun 2020 20:15:33 +0100 In-Reply-To: ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Sat, 13 Jun 2020 19:56:02 +0200") Message-ID: <87mu5622wa.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::342; envelope-from=contovob@tcd.ie; helo=mail-wm1-x342.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:15:40 -0000 Mattias Engdeg=C3=A5rd writes: > Updated patch attached, with the name change, and the warning found by Ba= sil fixed. Tested with list-colors-display, (set-background-color "#f0f"), and (set-background-color "#12345"), and things seems fine here. --=20 Basil In GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo versio= n 1.16.0, Xaw3d scroll bars) of 2020-06-13 built on thunk Repository revision: b714a333c8420cf8a3824f62f071fd73ebf9afdb Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12008000 System Description: Debian GNU/Linux bullseye/sid Configured using: 'configure 'CC=3Dccache gcc' 'CFLAGS=3D-O2 -march=3Dnative' --config-cache --prefix=3D/home/blc/.local --with-x-toolkit=3Dlucid --with-file-notification=3Dyes --with-x' Configured features: XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP From MAILER-DAEMON Sat Jun 13 15:23:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBkx-0005Gh-3S for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:23:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBkv-0005GY-Dv for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:23:53 -0400 Received: from forward101j.mail.yandex.net ([5.45.198.241]:45493) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBks-0003pX-Qu; Sat, 13 Jun 2020 15:23:52 -0400 Received: from mxback18j.mail.yandex.net (mxback18j.mail.yandex.net [IPv6:2a02:6b8:0:1619::94]) by forward101j.mail.yandex.net (Yandex) with ESMTP id 65D941BE0352; Sat, 13 Jun 2020 22:23:32 +0300 (MSK) Received: from sas2-e7f6fb703652.qloud-c.yandex.net (sas2-e7f6fb703652.qloud-c.yandex.net [2a02:6b8:c14:4fa6:0:640:e7f6:fb70]) by mxback18j.mail.yandex.net (mxback/Yandex) with ESMTP id WN5MRL8NXB-NWZGbGbd; Sat, 13 Jun 2020 22:23:32 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592076212; bh=kLoUCOIi8RMqz+sCBdB7GIh1g0EfkkpTVXYj9qXfCLs=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=kCfJQ7B3n1JKnKIIzfna85dm70JDUslkQlLVrr+43dELBFI/j5MguN/NdfL9gj5bC YEeSDNsADazjSKjuPuRwbQD1VyfTT2rgXRKmSjg+GU/PVxchp3ZRlYBVauVMIUd3zK nmZczgoP+4P12x3Yo/3QvSRmAPRKxHpTASUZtSqI= Authentication-Results: mxback18j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas2-e7f6fb703652.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id gAEU9PSM0R-NVBWQpFg; Sat, 13 Jun 2020 22:23:31 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sat, 13 Jun 2020 22:23:30 +0300 In-Reply-To: References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=5.45.198.241; envelope-from=hi-angel@yandex.ru; helo=forward101j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 15:23:32 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:23:53 -0000 On Sat, 2020-06-13 at 17:35 +0300, Dmitry Gutov wrote: > On 13.06.2020 14:59, Konstantin Kharlamov wrote: > > no other projects require > > writing down a list of functions I changed just for the fun of it > > As a reviewer, there's something to be said about having an overview of > the whole diff (which can get long) in a few paragraphs on top of the > patch. A good commit message like that actually makes a lot of things > clear in advance. FTR, I am all for having good commit messages. It is IMO a must have for any git project. But having a list of function names with description for each does not make one. Instead it should be an overview of what is done, why, and how. Suppose you have a patch that deduplicates the same code pattern across 34 functions by factoring it out to a single short function. Do you really need that list? I mean, sure it's a fun fact to know, but you'll have to review diff anyway. If anything, it only burdens you by forcing to check that each function is on the list. Commit message should reveal the intention of the changes (and perhaps, if OP thinks changes may raise questions, they should also write the reasoning). And then a reviewer gotta check (in particular) this intention matches the actual code. On that matter I often love to quote a post from 2009 by Peter Hutterer, a libinput and Linux HID subsystem maintainer. A post that is old but is not outdated http://who-t.blogspot.com/2009/12/on-commit-messages.html > But yes, that also compensates for otherwise more difficult review > process, compared to some automated tools other projects use. > > > Okay, you want this — but could you at least automate it! > > And no, some Emacs function does not cut it, people not necessarily use > > git from Emacs. I > > personally don't. Please, use git hoooks, because this is what everyone > > is*forced* to use, you can't possibly miss a git hook. > > Someday(tm) we'll migrate to Gitlab, or Gogs, or whatever, and we'll > have that. > > Regarding hooks, we do use them to an extent, but nobody has written a > checker for commit messages for them yet. And that still wouldn't cover > people who make patches against released/packaged versions of Emacs, as > opposed to the Git tree. > > The rest of your email, I pretty much agree with. Except, you know, it's > still quite possible to contribute (pointing to self). From MAILER-DAEMON Sat Jun 13 15:32:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBss-0008GY-V4 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:32:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60636) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBsq-0008DG-BV for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:32:05 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:43409) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkBso-0005Gn-CT for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:32:04 -0400 Received: by mail-wr1-x442.google.com with SMTP id l10so13157705wrr.10 for ; Sat, 13 Jun 2020 12:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=S45v45tf7Jv500Y4J+QH2m4F2yYnX0T6+REJzlIWOds=; b=ufuv710Eitho3G39UCb2f1FpgnWP192s5SE5Uhv1Z7W8Qgk0iYZX3JVZ5kH9MeE8N8 MDxGUdsgK/52/yzqhniLve6IVuDRlRlSfam+MeoOEGXUQvmZgwxOyrhI6+kzH5mqIXwC 2kk5DDfjUyU8Km4Nn4YQh1l3vJHciJnMdpD4wYe8HYihLl7SXGVgb1vDAFmQA5OierrE O6qnTctRzZlXMXHG+NI3TosdWUxGfhg5iAFy4EcFmkOo1wiAyzAB8iyLvPWenbEe3n6K RlkJfZkH1lOXHuKNQ6MJRfWbSEhLmuvbLnvhdNAUaOK7C1UcqwG359Rvgj5GLEkFriy8 f5SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=S45v45tf7Jv500Y4J+QH2m4F2yYnX0T6+REJzlIWOds=; b=ZoJ0whIvduXMWsbSD+OW7TFsWR2ZvQSvNLHxrkJrALzUVO5xG6dv2SoawOiIxaBnno +BgMFl6TEPypghSKfmN1vdn+tt/NELvOuowpI08WV09XJsjVTZD5wjA0xyZhrcmbOR6m W0aUz44xL8KQpehFSjKfWAqWtCf9I2cjZkcn1XniNnRlba1O2HN587f2Yfu7xP0d3wMF Wsg5FDqjA6l+Ayly7UHLh04OWcezgIZs3xzK/TtvIIZqsZXS1hR6oZzqI86VI8JIXGWz m+jGHW40vqN+408fOap1rha1k2f8MYmFtL6p7AX+3si1Kc05QkigDCegfavagHNKFr9Q KQbw== X-Gm-Message-State: AOAM5332SfiedxQqwxi/BrFx5cBkPAigjSuNJ8p+plLA8vNvrZLlFqIW 5PUO0wbFkZCXidbF1LN0bxlxXg== X-Google-Smtp-Source: ABdhPJyXSesE6a7aGusLgrQOgIwV1k2eG07rflOFYTNYMpirdrITDdxw770jk5f8ryBeyJgB6dvL2A== X-Received: by 2002:adf:f0d2:: with SMTP id x18mr20953269wro.250.1592076720585; Sat, 13 Jun 2020 12:32:00 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q11sm16289460wrv.67.2020.06.13.12.31.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 12:31:59 -0700 (PDT) From: "Basil L. Contovounesios" To: Konstantin Kharlamov Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Date: Sat, 13 Jun 2020 20:31:58 +0100 In-Reply-To: (Konstantin Kharlamov's message of "Sat, 13 Jun 2020 22:23:30 +0300") Message-ID: <87tuzezrrl.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::442; envelope-from=contovob@tcd.ie; helo=mail-wr1-x442.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:32:05 -0000 Konstantin Kharlamov writes: > FTR, I am all for having good commit messages. It is IMO a must have for any git > project. But having a list of function names with description for each does not > make one. FWIW, one great benefit of this list for me is that I can quickly 'git log --grep' for all commits that mention a particular definition. Doing the same with 'git log -G' is painfully slower and with a far lower signal:noise ratio. > Instead it should be an overview of what is done, why, and how. That, or at the very least linking to the relevant bug/thread discussions, is always a good thing to do and encouraged. > Suppose you have a patch that deduplicates the same code pattern across 34 > functions by factoring it out to a single short function. Do you really need > that list? No, in such cases there are shortcuts you can take, such as "all callers changed". > I mean, sure it's a fun fact to know, but you'll have to review diff > anyway. If anything, it only burdens you by forcing to check that each function > is on the list. Commit message should reveal the intention of the changes (and > perhaps, if OP thinks changes may raise questions, they should also write the > reasoning). And then a reviewer gotta check (in particular) this intention > matches the actual code. I doubt anyone disagrees with that. -- Basil From MAILER-DAEMON Sat Jun 13 15:33:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBuc-0000v9-Ct for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:33:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33416) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBua-0000uj-KN for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:33:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34124) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkBuZ-0005kP-RB; Sat, 13 Jun 2020 15:33:51 -0400 Received: from [176.228.60.248] (port=4790 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkBuX-0006XE-5x; Sat, 13 Jun 2020 15:33:51 -0400 Date: Sat, 13 Jun 2020 22:33:21 +0300 Message-Id: <83o8pm3gn2.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: (message from Konstantin Kharlamov on Sat, 13 Jun 2020 22:23:30 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:33:52 -0000 > From: Konstantin Kharlamov > Date: Sat, 13 Jun 2020 22:23:30 +0300 > > having a list of function names with description for each does not > make one. Instead it should be an overview of what is done, why, and how. It should be both, actually. > Suppose you have a patch that deduplicates the same code pattern across 34 > functions by factoring it out to a single short function. Do you really need > that list? No, and no one will ever ask you to describe such mechanistic changes one by one. It's all in the GNU Coding Standards, btw. I suggest to read that. From MAILER-DAEMON Sat Jun 13 15:39:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkBzY-0003S7-Iz for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:39:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkBzW-0003S0-Uo for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:38:58 -0400 Received: from mail-io1-xd44.google.com ([2607:f8b0:4864:20::d44]:36989) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkBzV-0006jo-7c; Sat, 13 Jun 2020 15:38:58 -0400 Received: by mail-io1-xd44.google.com with SMTP id r2so13831096ioo.4; Sat, 13 Jun 2020 12:38:46 -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 :cc; bh=l2BshouSBIBAarsIr1A6vImY2z/yLRVEvcizlf9t200=; b=PqG3qqVxRIfQEX/iinR3ybNESYWNJExMrPC8XOGXQ6wc2PE+4x9pijg1cvcfzSqpTH LT8PoQnnIkDHAD7sRSR00BwwdNyX5FA4leG9jo1aSN8Jt+6+8qqlsbOebQ3nSrk8rJdU cz8g7f/En+v2l6Pw2pU60uifgRPtU5ZgbgCMz1iuCE9EIaOLNJwgoZHiso/hUu04cWkA M2rUJqZtzNZ5kvjpoTgdsKaADE+kzDMlQPLdqTayPG5BzwoIeFnE2R5jTtiEsthh8NIy /MV0GySltaTmzKxLJxEv3dgHQFSfIak9dcBDO1buss+MnjiNAmDt7PK4y1djXLprVFkt Wdlg== 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:cc; bh=l2BshouSBIBAarsIr1A6vImY2z/yLRVEvcizlf9t200=; b=Qc4R1GqYn+M5Lcpj+fIR4itcEXZ1Scxs+6RiNWhCThRBmEazNN2RX8NhW9dqYuiPZC ydtCYGdbqwe5qWo0n+atawGG9l4xM8kBa3bw34dR5djWuRY06JhTD17W4VhHFujxKg8q g4qZF8oYWcIztHbuRJUFpPbG/Gp7un4JGbMKY3V3TXIGcMxOgGf05MPU/Y8U6Ck9olRu X8WlIxD6ga8O48xX6FyrS8JWF3Axod49MDWCtsWHlC8vnRRhAcYNv5jl1506azfqpRT3 8lvomV4T2lxGsLGYBbPxdSirPRHKOWnTP6H9RuuejChmom60QIjhWWtSHlKacp6W9lM3 9ENQ== X-Gm-Message-State: AOAM530Z4SGqtmtI+P8rEDPC4+3QvrPaC4kkn6JJJP56Z0ADBLe5pdEF Mh4LeK2OQW//Qq4escpF52YlGZP8kWqq/S2/Ef4= X-Google-Smtp-Source: ABdhPJzZ8YdlifhHBC41j29pJ/fb2906W7OKFabfTtoIdkp+05nHgYObwVURRrYS7PEBmwnEQc5u2qbSHcxQxsDIqPo= X-Received: by 2002:a02:b697:: with SMTP id i23mr13456544jam.78.1592077125501; Sat, 13 Jun 2020 12:38:45 -0700 (PDT) MIME-Version: 1.0 References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Sat, 13 Jun 2020 20:38:35 +0100 Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers To: Dmitry Gutov Cc: Konstantin Kharlamov , Stefan Kangas , Eli Zaretskii , Emacs developers Content-Type: multipart/alternative; boundary="00000000000085467605a7fc573b" Received-SPF: pass client-ip=2607:f8b0:4864:20::d44; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd44.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:38:59 -0000 --00000000000085467605a7fc573b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 13, 2020, 15:36 Dmitry Gutov wrote: > On 13.06.2020 14:59, Konstantin Kharlamov wrote: > > no other projects require > > writing down a list of functions I changed just for the fun of it > > As a reviewer, there's something to be said about having an overview of > the whole diff (which can get long) in a few paragraphs on top of the > patch. A good commit message like that actually makes a lot of things > clear in advance. > +1. I even use this for my own projects or projects where it's not required. Producing that list is a last self-reviewing step that summarizes _how_ the change was implemented. The diff itself is the ultimate source, but a summary is it very welcome. Of course most good commit messages don't stop there, they also explain the _why_. In general, Konstantin. I think your "for fun" exemplifies how you and many others think of these procedures as spurious, or gratuitous. But they're not, they exist because she people, whom you may disagree with, find them useful. Jo=C3=A3o Jo=C3=A3o > --00000000000085467605a7fc573b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 13, 2020, 15:36 Dmitry Gutov <dgutov@yandex.ru> wrote:
On 13.06.2020 14:59, Konstantin Kharlamov wrote:
> no other projects require
> writing down a list of functions I changed just for the fun of it

As a reviewer, there's something to be said about having an overview of=
the whole diff (which can get long) in a few paragraphs on top of the
patch. A good commit message like that actually makes a lot of things
clear in advance.

<= div dir=3D"auto">+1. I even use this for my own projects or projects where = it's not required. Producing that list is a last self-reviewing step th= at summarizes _how_ the change was implemented. The diff itself is the ulti= mate source, but a summary is it very welcome.

<= /div>
Of course most good commit messages don't stop t= here, they also explain the _why_.

In general, Konstantin. I think your "for fun" exempli= fies how you and many others think of these procedures as spurious, or grat= uitous. But they're not, they exist because she people, whom you may di= sagree with, find them useful.

Jo=C3=A3o

Jo=C3= =A3o
--00000000000085467605a7fc573b-- From MAILER-DAEMON Sat Jun 13 15:44:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkC4w-0005vk-BV for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 15:44:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkC4u-0005uv-H9 for emacs-devel@gnu.org; Sat, 13 Jun 2020 15:44:32 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:50746) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkC4r-0007R7-TI; Sat, 13 Jun 2020 15:44:31 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05DJWhQa181810; Sat, 13 Jun 2020 19:44:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=HkXxS5Pg8SfT5B/LuG33MCqAobZGrGrrKU2XRcVbcR0=; b=SLTc8pTCldOeGBiBuJdkTJgTRcyN2l1k7kH1BVmxWgBZ53lqEUvceT2HXnkfYV5FQOwJ F9g7v+EpX5IEbOMkqIah+VQY6NnLktJlWrLg8yB3bZOtcK7dK5OZ5yPhQ4dSwdTbfWv5 M1TePHWrqzePvYIUSQk4zwB2KKnAN0H4ArJixuo/Rd2KzQOMWf4XY8ihsycabRSSnAKm HZnMMn5nDBK5x4zveZtUaJ6oTCBPFubYi6BroTYQ02OXKP9OeoGM6rUydtyt6/5cyUlC hl28WReIdDI/uzuXFI7epYAKesYM/MuIEoOSJgTH5fnv9PoAbV7C8eBY2+o6fEph2OIO Gw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2120.oracle.com with ESMTP id 31mqemsrd5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 13 Jun 2020 19:44:24 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05DJY6vX108306; Sat, 13 Jun 2020 19:42:24 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3020.oracle.com with ESMTP id 31mpm15bmu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 13 Jun 2020 19:42:23 +0000 Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05DJgMoP024518; Sat, 13 Jun 2020 19:42:22 GMT MIME-Version: 1.0 Message-ID: <16f5e945-9d98-401a-8c7a-c568b2d0ddc2@default> Date: Sat, 13 Jun 2020 19:42:21 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: rms@gnu.org, "Basil L. Contovounesios" Cc: emacs-devel@gnu.org Subject: RE: Support for multiple batteries References: <87tuzhy49m.fsf@tcd.ie> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9651 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 phishscore=0 mlxlogscore=954 malwarescore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006130174 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9651 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 mlxlogscore=995 adultscore=0 phishscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 spamscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006130174 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 15:44:26 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 19:44:32 -0000 > > AFAICT only two battery status backends currently support multiple > > sources of information: battery-linux-sysfs and battery-linux-proc-ac= pi, > > for Linux sysfs and ACPI support, respectively. >=20 > Could you clear up for me what "currently" means in this context? Ohmm, "currently" in this context must have something to do with E/R, no? ;-) From MAILER-DAEMON Sat Jun 13 16:30:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkCnG-0002Tx-G3 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 16:30:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkCnF-0002To-Bd for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:30:21 -0400 Received: from forward102p.mail.yandex.net ([2a02:6b8:0:1472:2741:0:8b7:102]:39737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkCnC-0006ad-Oh; Sat, 13 Jun 2020 16:30:20 -0400 Received: from mxback11o.mail.yandex.net (mxback11o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::62]) by forward102p.mail.yandex.net (Yandex) with ESMTP id 485721D4173C; Sat, 13 Jun 2020 23:30:03 +0300 (MSK) Received: from sas2-e7f6fb703652.qloud-c.yandex.net (sas2-e7f6fb703652.qloud-c.yandex.net [2a02:6b8:c14:4fa6:0:640:e7f6:fb70]) by mxback11o.mail.yandex.net (mxback/Yandex) with ESMTP id gNDGo8IOUO-U23q4krd; Sat, 13 Jun 2020 23:30:03 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592080203; bh=bfkF5Ey95R2ZBB6G3qcz3oLB5hKSg1HOkMmkxG6oNi8=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=kYa5dLU4N+Mjd3hwoVWtsgyurCQLM18zT7bvO2yAHX2Ro8cxo3IysQn6I3t7lAkWY VP0XkG2RVDTVkQPt1/qPp3WOhLG5RU6Am3MwpzuOw8mgLGjkQBXABZv1rEL+ZbPFJw Bd0c2lpbYhBtUrNlVlYw3OAG5e/v3jo5QNfaZ4pY= Authentication-Results: mxback11o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas2-e7f6fb703652.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id M9UVlOPLZ1-U1BKV54Y; Sat, 13 Jun 2020 23:30:02 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= , Dmitry Gutov Cc: Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sat, 13 Jun 2020 23:30:00 +0300 In-Reply-To: References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a02:6b8:0:1472:2741:0:8b7:102; envelope-from=hi-angel@yandex.ru; helo=forward102p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 16:30:03 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 20:30:21 -0000 On Sat, 2020-06-13 at 20:38 +0100, João Távora wrote: > On Sat, Jun 13, 2020, 15:36 Dmitry Gutov wrote: > > On 13.06.2020 14:59, Konstantin Kharlamov wrote: > > > no other projects require > > > writing down a list of functions I changed just for the fun of it > > > > As a reviewer, there's something to be said about having an overview of > > the whole diff (which can get long) in a few paragraphs on top of the > > patch. A good commit message like that actually makes a lot of things > > clear in advance. > > +1. I even use this for my own projects or projects where it's not required. > Producing that list is a last self-reviewing step that summarizes _how_ the > change was implemented. The diff itself is the ultimate source, but a summary > is it very welcome. > > Of course most good commit messages don't stop there, they also explain the > _why_. > > In general, Konstantin. I think your "for fun" exemplifies how you and many > others think of these procedures as spurious, or gratuitous. But they're not, > they exist because she people, whom you may disagree with, find them useful. Oh, sure I can be mistaken. I see you replied to Dmitry's email, I had a follow- up on it. Does my follow-up mail change your opinion, or perhaps do you have some example in mind that a good commit message without the list would not solve? From MAILER-DAEMON Sat Jun 13 16:30:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkCne-0002me-Nj for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 16:30:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkCnd-0002m4-CN for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:30:45 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:37476) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkCna-0006qv-Ap for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:30:45 -0400 Received: by mail-wr1-x441.google.com with SMTP id x13so13305229wrv.4 for ; Sat, 13 Jun 2020 13:30:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=wyiQdlAfs1pPNECmxni75sMBMry5lrIOpIHS0YD7+OY=; b=k0eaoLcfcCR8pDwDdFqyj5P8iyhYMmxpEydtjFVIgTnTlDFy2KqfNv0wa2uAiOLo7r 39Sla7WdRDtdObYKawqkeoQNZ8qD/YlNaIiWVttXPu42WVqlnJi8bUPZcdARsufb9vE7 RgVuV/EjaotfmRQfJxhWDm1a/LezWh0fcCRVN2d8ze1IX+ytWBtVorDya9PBWMB8dsom J5IcM0htEDaNvt+v+2aWTc+OMDxzZSPA7wFrIHN5Uj0WbUzQ99g6y0Erz1dtzQyVelKT sK2RgIWleBM3KbrISw8ThYxX8JW3zpu2QsJmnnZsIR1BXdT2J/fRpU9/GPCIf/BM7E9C 3LEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=wyiQdlAfs1pPNECmxni75sMBMry5lrIOpIHS0YD7+OY=; b=ev3k+anDfXO1N8rkeJH2pDd7B2eeu8Rke8cR1+M/MrDYIjBHGmKXY9vXkiyLIaKFxV wvEp2s/8VWtKp7KH94fJewakpW91IRD5V+3WmMJ6c4wdgXnLMKgaJmtNUGgPueHK2+qR PW9OWj0sYEDpC+FfolYSLLQNoCAlA9IAI/TLzORqUyJa/lqtPeS6Otli0pnuJqTvH+pp SZ06ng52S4Eoxmoa3VdzCHDVC7iEq4Wk/WmohPMlvbeB4VvIzT+wS2q7cY1jJH8Bj2ab Yw+/nQM66HfEKiYAiiNl3i1NuwANjCof0WXKgtSjLZBS7iWIoWokFtf+FiHJEnl/CA3l 8N0g== X-Gm-Message-State: AOAM530jBzd8Trz4+5UhXtHybka4MkCTfYR40D6KzyUdwjGUFqAFlnKe 6ofn4YeZpMsz7jZ421zOUBj3pg== X-Google-Smtp-Source: ABdhPJzHejCh54dbjkWcQrIawuybX7mSyfPfZtY7pmJSagU3jn6OnKm8jsEjLaar7OJy/wN7nHdqgQ== X-Received: by 2002:a5d:6a89:: with SMTP id s9mr21015392wru.15.1592080240687; Sat, 13 Jun 2020 13:30:40 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id a126sm15325320wme.28.2020.06.13.13.30.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 13:30:39 -0700 (PDT) From: "Basil L. Contovounesios" To: Konstantin Kharlamov Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87tuzezrrl.fsf@tcd.ie> <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> Date: Sat, 13 Jun 2020 21:30:38 +0100 In-Reply-To: <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> (Konstantin Kharlamov's message of "Sat, 13 Jun 2020 23:24:01 +0300") Message-ID: <87h7ve7lox.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::441; envelope-from=contovob@tcd.ie; helo=mail-wr1-x441.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 20:30:45 -0000 Konstantin Kharlamov writes: > On Sat, 2020-06-13 at 20:31 +0100, Basil L. Contovounesios wrote: >> Konstantin Kharlamov writes: >> >> > FTR, I am all for having good commit messages. It is IMO a must have for any >> > git >> > project. But having a list of function names with description for each does >> > not >> > make one. >> >> FWIW, one great benefit of this list for me is that I can quickly >> 'git log --grep' for all commits that mention a particular definition. >> Doing the same with 'git log -G' is painfully slower and with a far >> lower signal:noise ratio. > > You can get that purely with git by using option `-L` of gitlong. It has syntax > `-L ::`. > > To give you example, I just looked at my recent change in python.el, and the > diff says the region belongs to `python-font-lock-keywords-maximum-decoration`. > So I execute: > > git log -L :python-font-lock-keywords-maximum- > decoration:lisp/progmodes/python.el > > And I get a log of commits that changed that function. Git version 2.27.0 And what if a commit message references a particular variable or function without touching the file that they're defined in? I'm talking about more general xrefing. >> > Instead it should be an overview of what is done, why, and how. >> >> That, or at the very least linking to the relevant bug/thread >> discussions, is always a good thing to do and encouraged. >> >> > Suppose you have a patch that deduplicates the same code pattern across 34 >> > functions by factoring it out to a single short function. Do you really need >> > that list? >> >> No, in such cases there are shortcuts you can take, such as "all callers >> changed". > > Oh, is that something new? It's older than I've been around these parts (~2016). > I'm just wondering, why when I did the change to > replace hex regexes with xdigit > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36167 I had to write all hundreds > of functions instead of a one liner "all callers are changed"? You didn't exactly. It is possible to take shortcuts depending on the context. See the file CONTRIBUTE or (info "(standards) Change Logs") https://www.gnu.org/prep/standards/html_node/Change-Logs.html. -- Basil From MAILER-DAEMON Sat Jun 13 16:31:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkCnv-0002u1-3P for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 16:31:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54402) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkCnt-0002ss-2B for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:31:01 -0400 Received: from forward101p.mail.yandex.net ([2a02:6b8:0:1472:2741:0:8b7:101]:36274) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkCnp-00072B-V9 for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:31:00 -0400 Received: from mxback12o.mail.yandex.net (mxback12o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::63]) by forward101p.mail.yandex.net (Yandex) with ESMTP id A33D026425A1; Sat, 13 Jun 2020 23:24:03 +0300 (MSK) Received: from sas2-b157fac3b6f2.qloud-c.yandex.net (sas2-b157fac3b6f2.qloud-c.yandex.net [2a02:6b8:c08:b282:0:640:b157:fac3]) by mxback12o.mail.yandex.net (mxback/Yandex) with ESMTP id t1yGLLQwkL-O3RW8f9K; Sat, 13 Jun 2020 23:24:03 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592079843; bh=TgDA3Y0QOLt6bVkr809eATzRcsLLNsY5P+XF2/qHnK4=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=tE1gzqVc2ZzsDD5UKgM4BReXV7oguQyj6Ql7y0gKWSRvUNzyx+DsEk9chs6JUltLx EAo7F6VXLxJaNdrU654Gm9gp3cGS1kQ+gVL1+6iAm+yLPb3AxpJ+HHitCGe2BxqiuE 9Qw+YFgws+BjSCw/rqpLi1zZ1HyGtc0nwjbKHzdI= Authentication-Results: mxback12o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas2-b157fac3b6f2.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id bH9FT1JmIV-O2XulifE; Sat, 13 Jun 2020 23:24:02 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: "Basil L. Contovounesios" Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sat, 13 Jun 2020 23:24:01 +0300 In-Reply-To: <87tuzezrrl.fsf@tcd.ie> References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87tuzezrrl.fsf@tcd.ie> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:1472:2741:0:8b7:101; envelope-from=hi-angel@yandex.ru; helo=forward101p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 16:24:22 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 20:31:01 -0000 On Sat, 2020-06-13 at 20:31 +0100, Basil L. Contovounesios wrote: > Konstantin Kharlamov writes: > > > FTR, I am all for having good commit messages. It is IMO a must have for any > > git > > project. But having a list of function names with description for each does > > not > > make one. > > FWIW, one great benefit of this list for me is that I can quickly > 'git log --grep' for all commits that mention a particular definition. > Doing the same with 'git log -G' is painfully slower and with a far > lower signal:noise ratio. You can get that purely with git by using option `-L` of gitlong. It has syntax `-L ::`. To give you example, I just looked at my recent change in python.el, and the diff says the region belongs to `python-font-lock-keywords-maximum-decoration`. So I execute: git log -L :python-font-lock-keywords-maximum- decoration:lisp/progmodes/python.el And I get a log of commits that changed that function. Git version 2.27.0 > > Instead it should be an overview of what is done, why, and how. > > That, or at the very least linking to the relevant bug/thread > discussions, is always a good thing to do and encouraged. > > > Suppose you have a patch that deduplicates the same code pattern across 34 > > functions by factoring it out to a single short function. Do you really need > > that list? > > No, in such cases there are shortcuts you can take, such as "all callers > changed". Oh, is that something new? I'm just wondering, why when I did the change to replace hex regexes with xdigit https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36167 I had to write all hundreds of functions instead of a one liner "all callers are changed"? > > I mean, sure it's a fun fact to know, but you'll have to review diff > > anyway. If anything, it only burdens you by forcing to check that each > > function > > is on the list. Commit message should reveal the intention of the changes > > (and > > perhaps, if OP thinks changes may raise questions, they should also write > > the > > reasoning). And then a reviewer gotta check (in particular) this intention > > matches the actual code. > > I doubt anyone disagrees with that. > From MAILER-DAEMON Sat Jun 13 16:53:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkD9W-0003qc-Qn for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 16:53:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkD9U-0003q3-HV for emacs-devel@gnu.org; Sat, 13 Jun 2020 16:53:20 -0400 Received: from forward105p.mail.yandex.net ([77.88.28.108]:54571) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkD9Q-0002Vu-OJ; Sat, 13 Jun 2020 16:53:19 -0400 Received: from forward101q.mail.yandex.net (forward101q.mail.yandex.net [IPv6:2a02:6b8:c0e:4b:0:640:4012:bb98]) by forward105p.mail.yandex.net (Yandex) with ESMTP id 147734D40DB0; Sat, 13 Jun 2020 23:52:59 +0300 (MSK) Received: from mxback1q.mail.yandex.net (mxback1q.mail.yandex.net [IPv6:2a02:6b8:c0e:39:0:640:25b3:aea5]) by forward101q.mail.yandex.net (Yandex) with ESMTP id 104DDCF4000F; Sat, 13 Jun 2020 23:52:59 +0300 (MSK) Received: from vla3-5ed9a7202853.qloud-c.yandex.net (vla3-5ed9a7202853.qloud-c.yandex.net [2a02:6b8:c15:341d:0:640:5ed9:a720]) by mxback1q.mail.yandex.net (mxback/Yandex) with ESMTP id 1f0wHrmVDz-qwqagfrC; Sat, 13 Jun 2020 23:52:59 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592081579; bh=kMiN8b9D7aw7ds+QV1o0JdCj9MzFHnyBandNkixkbGw=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=ZpWGi3TSiONrEl9bT1hiyAuoBVP4jBkdRxr4DVzdd7VLu/Ed63ugNsjfL57EohRCV 7CPGuqa2eASrhg8ZSviJYVE4xihA6y+hd88mzf0wMt9dQY+jChZgJjQvOJqdhsde/+ Rsjqqm+k4OU06ukYrgzOD9WsIbpeYZ0EmwIoeWg4= Authentication-Results: mxback1q.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by vla3-5ed9a7202853.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id u8OU7CO2n0-qvtaWPEo; Sat, 13 Jun 2020 23:52:57 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <22650dc349758df4b0c05269c407ecade6a24181.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: "Basil L. Contovounesios" Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sat, 13 Jun 2020 23:52:56 +0300 In-Reply-To: <87h7ve7lox.fsf@tcd.ie> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87tuzezrrl.fsf@tcd.ie> <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> <87h7ve7lox.fsf@tcd.ie> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=77.88.28.108; envelope-from=hi-angel@yandex.ru; helo=forward105p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 16:52:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 20:53:21 -0000 On Sat, 2020-06-13 at 21:30 +0100, Basil L. Contovounesios wrote: > Konstantin Kharlamov writes: > > > On Sat, 2020-06-13 at 20:31 +0100, Basil L. Contovounesios wrote: > > > Konstantin Kharlamov writes: > > > > > > > FTR, I am all for having good commit messages. It is IMO a must have for > > > > any > > > > git > > > > project. But having a list of function names with description for each > > > > does > > > > not > > > > make one. > > > > > > FWIW, one great benefit of this list for me is that I can quickly > > > 'git log --grep' for all commits that mention a particular definition. > > > Doing the same with 'git log -G' is painfully slower and with a far > > > lower signal:noise ratio. > > > > You can get that purely with git by using option `-L` of gitlong. It has > > syntax > > `-L ::`. > > > > To give you example, I just looked at my recent change in python.el, and the > > diff says the region belongs to `python-font-lock-keywords-maximum- > > decoration`. > > So I execute: > > > > git log -L :python-font-lock-keywords-maximum- > > decoration:lisp/progmodes/python.el > > > > And I get a log of commits that changed that function. Git version 2.27.0 > > And what if a commit message references a particular variable or > function without touching the file that they're defined in? I'm talking > about more general xrefing. I feel there's some misunderstanding. The list our discussion is about only mentions changed functions/variables. If the git message references a variable that is not changed just because it is important to mention, then, well, it should still be there, in the commit message. That's what good commit messages are for: you mention things that are important to mention ¯\_(ツ)_/¯ > > > > Instead it should be an overview of what is done, why, and how. > > > > > > That, or at the very least linking to the relevant bug/thread > > > discussions, is always a good thing to do and encouraged. > > > > > > > Suppose you have a patch that deduplicates the same code pattern across > > > > 34 > > > > functions by factoring it out to a single short function. Do you really > > > > need > > > > that list? > > > > > > No, in such cases there are shortcuts you can take, such as "all callers > > > changed". > > > > Oh, is that something new? > > It's older than I've been around these parts (~2016). > > > I'm just wondering, why when I did the change to > > replace hex regexes with xdigit > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36167 I had to write all > > hundreds > > of functions instead of a one liner "all callers are changed"? > > You didn't exactly. It is possible to take shortcuts depending on the > context. See the file CONTRIBUTE or (info "(standards) Change Logs") > https://www.gnu.org/prep/standards/html_node/Change-Logs.html. Oh, okay, so I read the docs, and apparently this "all callers are changed" can only be used when you use a calling convention. In my imaginary example where you factored out a code from 34 functions it would not be a calling convention, it would be a piece of code inside those functions. This is actually similar to the patch that replaces regexes to "xdigit": you have the same pattern *inside* many functions that you replace. No calling convention changes. From MAILER-DAEMON Sat Jun 13 17:00:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkDGS-0006PC-NR for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 17:00:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40014) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDGR-0006OR-Cc for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:00:31 -0400 Received: from forward100p.mail.yandex.net ([77.88.28.100]:34947) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDGO-0003hi-Kl; Sat, 13 Jun 2020 17:00:31 -0400 Received: from mxback8j.mail.yandex.net (mxback8j.mail.yandex.net [IPv6:2a02:6b8:0:1619::111]) by forward100p.mail.yandex.net (Yandex) with ESMTP id 779805981616; Sun, 14 Jun 2020 00:00:12 +0300 (MSK) Received: from iva5-057a0d1fbbd8.qloud-c.yandex.net (iva5-057a0d1fbbd8.qloud-c.yandex.net [2a02:6b8:c0c:7f1c:0:640:57a:d1f]) by mxback8j.mail.yandex.net (mxback/Yandex) with ESMTP id oZzkfGd8s9-0CWqQ5lg; Sun, 14 Jun 2020 00:00:12 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592082012; bh=kZUTIS59LPOIfw48Dk3j4dE2CnY0bhrohIMQZctS/2w=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=ZSOFVyDDXgmIM3oGqXk/KLUcsmEG7jZ4uFAk5/mosmCa631EV+dv4qvsn939MRMQ+ a43rTzBmMkW/yLMegCPxINseQ2/ZPEbSDNTa5124lLCK+xfjU0336RIvohLBpFWcXf gOMJGVfP7cA8iBEXhp0ATdn3du3WK3+cxMiaR9a4= Authentication-Results: mxback8j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva5-057a0d1fbbd8.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id ZnbvqBcJRy-0BV06anE; Sun, 14 Jun 2020 00:00:11 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: "Basil L. Contovounesios" Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sun, 14 Jun 2020 00:00:10 +0300 In-Reply-To: <22650dc349758df4b0c05269c407ecade6a24181.camel@yandex.ru> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87tuzezrrl.fsf@tcd.ie> <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> <87h7ve7lox.fsf@tcd.ie> <22650dc349758df4b0c05269c407ecade6a24181.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=77.88.28.100; envelope-from=hi-angel@yandex.ru; helo=forward100p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 17:00:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 21:00:31 -0000 Sorry, typos On Sat, 2020-06-13 at 23:52 +0300, Konstantin Kharlamov wrote: > I feel there's some misunderstanding. The list our discussion is about only > mentions changed functions/variables. *"mentions of changed functions/variables" > > You didn't exactly. It is possible to take shortcuts depending on the > > context. See the file CONTRIBUTE or (info "(standards) Change Logs") > > https://www.gnu.org/prep/standards/html_node/Change-Logs.html. > > Oh, okay, so I read the docs, and apparently this "all callers are changed" > can > only be used when you use a calling convention. *"change a calling convention", sorry From MAILER-DAEMON Sat Jun 13 17:08:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkDO7-0000U8-2j for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 17:08:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDO6-0000U2-Ak for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:08:26 -0400 Received: from mout.gmx.net ([212.227.15.15]:51145) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDO4-0005MP-1E for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:08:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592082500; bh=X+qogn6yxvQ4dpjYhf9SgF8S/JIal7FCQJXX8FSUXik=; h=X-UI-Sender-Class:From:To:Subject:Date; b=RRb15g4VkrDbHIC1Z/uKjstYGbspdrTQphU+wSMjUDx/BYikn7xJ+w771KJqgztRa LQAaRXShaHQgTrRhQsLd8WK48uc1WfQxp6wxA8xW3ZMPVIMp86l5tplFsP3/1ubWQe /rWdMCFH6glQdTR8W9XRkEr6z2AaA6dGR86KkXik= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from inigo.katxi.org.gmx.com ([79.153.71.125]) by mail.gmx.com (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MulqD-1itlWZ1AF1-00rsOW; Sat, 13 Jun 2020 23:08:20 +0200 User-agent: mu4e 1.4.6; emacs 28.0.50 From: =?utf-8?Q?I=C3=B1igo?= Serna To: emacs-devel@gnu.org Subject: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 Date: Sat, 13 Jun 2020 23:08:19 +0200 Message-ID: <87pna2eksc.fsf@inigo.katxi.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:o1HlO8HhL381ODHq35uhRaenDC++AK8afAcy1uM3sGnEMcbUrAB vJMPPLOKYxh0q2tIwuaOxL/JRqesd8O33n7uBCVSNRR2eOlYijsvl+567p5k9WT79MWyzfZ 2GD+l9CSm5q1DzQiDnXJreQEnU8VVLUL803C/EoDfAfx6Hg3huFQR61r5GOn1F6gyfSQHgf V0VVtYFYJ5H8dN7I/i7Sg== X-UI-Out-Filterresults: notjunk:1;V03:K0:vVBbIZ4sXhA=:yfJiZTduqZKTXUylPm3N1X HTYaTmjaPYe1yhHMUbWAOSOLz/U/GmfY3/RI7Ugk7FMZ/zNI0fSY19h6wL5fOEynnheQjHOFQ Z8bZdCpr1cGwnA5C0ipZl01lBf4W/PNZ46RiAG5/g8b4Bs1oD9DHgXnI1A0LeDJUuYcfQF55x LWIVcfU5ZT4ieyHaVpalAwRjdQjr+dCWYeSvrQHTR6uyRDeZYH36PTJbdjJUpMFjKzzNVejrj 6bCZyb6ON/4zFoU4PrHtG5IQsjLkG1nDd6hzF67hiEtRx+jdpe16LveC/iqLMSI7E3wuGI4Dh GMwy7Ii9+34x5OvoNC2BhKxm56o9woe5KD6DPXQT0ES2H7rU8kfOwGZA8kUwDqR+Z3rkfeG7H j9LQoMNeSsL7tlYrq6PlAYqTCUZY1LwDFMIgu/gdP8j3h7wkQsP0ayWwM9byHuz9s+TgP/SK6 ryhNWTme5jQSvpN6zuEWFuzKWP7+3UM/XYJN7kXculUhKxa/zFF8AzK8TvQS5CMNVJpLLEj7+ QRzMDiHuFlPfohyoHaRhsNoI/Kmag82HnN15PMD2zj6/EfSNVD2vpsLln8DeDZJrrLGJEfFdX WHKaNMldeGVkcs28164NxDwjE8/qXkvCokE9+qKlwCY+mIgKyZWHZJ9j481jgu8nDyt68JfUh f1QIwlbzzMVBQEXVG0Iw9cs5DcpA/klHBuXeaRZcwVHrNke13LbnRTZ5PxyzJvvHsg01UWb5Y rrYrY8x9PgRi8q/aK+/9hwmBLzG1xhwXHNJFZZOs9XLDNBcmHWusbf2ERG+35iyl9falgcyAO FcIcyVmjuJGJJ90x9aWxPHBzP0Z3GphBAyCEUyoCLZ5kgjk3dKrmB0eOYKic8ehWhF+4MUlJu LG3DH+bb1Fbnl+4lhX62gVo9Fo/WUDtHyvVfV4xmtlAktdxbtoi86TmxBijvbBuKuvwmTLbPd TewLcJfsrp3BjMTvMlxJ6dCie6iE+q7Qw5rR+ov5HPZgkePjY3e5x7rgXruaATzi56eisleQ0 fAMV939fL8p0Jo7K4hPBFGaOwGnku+X1bl7P0r/JsEwvSG+fksC51H2wfpU4pmLqZotW6+CBz N24y6JXKt/TzRZ225gY5ckxAW/XGckOsvY4ZNpN+0ElCf97+tGS+Y/zSozb9UdfxThHzIpUQm oGEJ/BtXRyBWWiUtP6bMoqx58BQOuaPQS+jQRE2AaaPcOKs4zZ+4cjxuL4SBr/fC0wTXzti5z //0uR1ufP3J/HAhH4 Received-SPF: pass client-ip=212.227.15.15; envelope-from=inigoserna@gmx.com; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 17:08:20 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 21:08:26 -0000 Hi, I'm developing a package that uses `url-retrieve` to connect to a HTTP serv= er passsing a string query as a json object. It mostly works, except when I need to pass a non-ASCII string, where it fa= ils with "Multibyte text in HTTP request" error [1] raised in function `url= -http-create-request` in url-http.el. This happens even if I encode the query string with UTF-8. I guess this is related to bug #23750, that in v25.1 times added a check to= make this error happen. If I remove that "fix" the code works without any problems. I also tried emacs-request package [3], it works using curl backend and fai= ls when using url-retrieve backend with the same error. I tried emacs versions 26.3 (from Fedora 32), and last commits from 27.x an= d 28.x branches. The whole function is at [4]. I reread several times the bug information and I can't fully understand the= need of that check, IMO it corresponds to the program developer, not to th= e API. Anyway, is there anything I could do? Any way to pass data as a UTF-8 strin= g? Thanks in advance, I=C3=B1igo Serna [1] Debugger entered--Lisp error: (error "Multibyte text in HTTP request: POST = /jsonrpc.js H...") signal(error ("Multibyte text in HTTP request: POST /jsonrpc.js H...")) error("Multibyte text in HTTP request: %s" "POST /jsonrpc.js HTTP/1.1\15\nM= IME-Version: 1.0\15\nConn...") url-http-create-request() url-http(#s(url :type "http" :user nil :password nil :host "nas" :portspec = 9002 :filename "/jsonrpc.js" :target nil :attributes nil :fullness t :silen= t t :use-cookies nil :asynchronous nil) #f(compiled-function (&rest ignored= ) #) (nil)) url-retrieve-internal("http://nas:9002/jsonrpc.js" #f(compiled-function (&r= est ignored) #) (nil) t t) url-retrieve("http://nas:9002/jsonrpc.js" #f(compiled-function (&rest ignor= ed) #) nil t t) url-retrieve-synchronously("http://nas:9002/jsonrpc.js" t t 1) [2] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D23750 [3] https://github.com/tkf/emacs-request [4]=20 (defun lms2--cmd (query &optional playerid) "Sync HTTP request QUERY to LMS server. PLAYERID is optional. QUERY is a string." (setq playerid (or playerid lms2--default-playerid "")) (let* ((json-array-type 'list) (url-request-method "POST") (url-request-extra-headers '(("Content-Type" . "application/json; = charset=3Dutf-8"))) (url-request-data (json-encode-alist `[(method . "slim.request") (= params . [,playerid ,(split-string query)])])) (response (with-current-buffer (url-retrieve-synchronously (concat= lms2-url "/jsonrpc.js") t t 1) (goto-char (point-min)) (re-search-forward "^$") (delete-region (point) (point-min)) (decode-coding-string (buffer-string) 'utf-8)))) (unless (string=3D "" response) (alist-get 'result (json-read-from-string response))))) (lms2--cmd (encode-coding-string "artists 0 10 search:Bj=C3=B6rk" 'utf-8)) From MAILER-DAEMON Sat Jun 13 17:25:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkDeE-0006fk-Sz for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 17:25:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDeD-0006fc-Dc for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:25:05 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:39819) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkDe9-00083L-43 for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:25:05 -0400 Received: by mail-wm1-x342.google.com with SMTP id o8so1590540wmh.4 for ; Sat, 13 Jun 2020 14:25:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=3AxKJzGWSWbLZl7I1WxDuH2uIZv6/zO8cutC3YIMxJA=; b=luW+98Eo9o0taQ3/Gsm3hBLq7bzgZQjjrvTsZT/2kD52KJmg+RB+RrIhtc9o2VYpeG 0BnkFKxpJDhl7e+uxLDkYdU3cOekAzFF7lSuzhT+VELQ9IDAq+H632J40JxT+lecf8IY hm0FfrJGaCkrOAX4are7egxbbnvC4v658AOcsYrqwNDU0SLbsutgzi8pj8ecipKZmT3Q KHuXh6LrEYEZOxho1v3Xv7C7ONF/W93hGlR7rmUAHVQSgAFC58L7qNEYYx9Ny4132CES KXBvsMZqZ/r84Alx0YMbnuNPkiddDAgXFW3if8wShMj3NWiFC3lUQyGqqWWhVJ5ROnku e6tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=3AxKJzGWSWbLZl7I1WxDuH2uIZv6/zO8cutC3YIMxJA=; b=Obi0/9YsdiRtpV4Qw5sqse+WQCAJdgfus8YTkPc23O5mErUSCCG2NgaHf/PuEQOckg HlJ3bFSSdln2pbgAMFhbJOdihtyCHj2zVEKKv/Nnt49eiyaYoe2n6sWNWH08q4ua1MPn wJzWG5ncZiB2IkoJPA8UdXU2NtvneApjcVgWWLW0kI9PZ0oi/XvYmLUBsMRioLK91p00 8bf7FjSf2z7rAx3qcS/Q0i0tLTBBI9x/Mdnd0te+H9pIEk0JzFhHlOYediayYjS3KQDU tVZUnfcTboaIMeCCKA4oOTbLay22Kntq3HYp9MN6jW1xTKVK1kqm6xc7sqzXF+ewfkKu IhHw== X-Gm-Message-State: AOAM530aIQT0SviKxK1IBccFCdNJ/iUZJxC/kBbJh0SgZrsbdZdF19Rp 8MLYqQDGKjIOuJUaScVcvWrEdw== X-Google-Smtp-Source: ABdhPJxRpn20ypS/U/uKkEzuurNKRoIQLEj0febNIBxXf1bGCVzvMp5hg7isWBW33DbxVmiMkxeqyg== X-Received: by 2002:a7b:cbce:: with SMTP id n14mr5568737wmi.66.1592083499064; Sat, 13 Jun 2020 14:24:59 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id l17sm16664348wrq.17.2020.06.13.14.24.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 14:24:58 -0700 (PDT) From: "Basil L. Contovounesios" To: Konstantin Kharlamov Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87tuzezrrl.fsf@tcd.ie> <7e47e9a4ccb739fbd0179d2b8ae3b7b48d19e316.camel@yandex.ru> <87h7ve7lox.fsf@tcd.ie> <22650dc349758df4b0c05269c407ecade6a24181.camel@yandex.ru> Date: Sat, 13 Jun 2020 22:24:57 +0100 In-Reply-To: <22650dc349758df4b0c05269c407ecade6a24181.camel@yandex.ru> (Konstantin Kharlamov's message of "Sat, 13 Jun 2020 23:52:56 +0300") Message-ID: <87wo4a64ly.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::342; envelope-from=contovob@tcd.ie; helo=mail-wm1-x342.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 21:25:05 -0000 Konstantin Kharlamov writes: > On Sat, 2020-06-13 at 21:30 +0100, Basil L. Contovounesios wrote: >> Konstantin Kharlamov writes: >>=20 >> > You can get that purely with git by using option `-L` of gitlong. It h= as >> > syntax >> > `-L ::`. >> >=20 >> > To give you example, I just looked at my recent change in python.el, a= nd the >> > diff says the region belongs to `python-font-lock-keywords-maximum- >> > decoration`. >> > So I execute: >> >=20 >> > git log -L :python-font-lock-keywords-maximum- >> > decoration:lisp/progmodes/python.el >> >=20 >> > And I get a log of commits that changed that function. Git version 2.2= 7.0 >>=20 >> And what if a commit message references a particular variable or >> function without touching the file that they're defined in? I'm talking >> about more general xrefing. > > I feel there's some misunderstanding. The list our discussion is about on= ly > mentions changed functions/variables. If the git message references a var= iable > that is not changed just because it is important to mention, then, well, = it > should still be there, in the commit message. That's what good commit mes= sages > are for: you mention things that are important to mention =C2=AF\_(=E3=83= =84)_/=C2=AF Right, I was confused in my last reply. >> You didn't exactly. It is possible to take shortcuts depending on the >> context. See the file CONTRIBUTE or (info "(standards) Change Logs") >> https://www.gnu.org/prep/standards/html_node/Change-Logs.html. > > Oh, okay, so I read the docs, and apparently this "all callers are change= d" can > only be used when you use a calling convention. In my imaginary example w= here > you factored out a code from 34 functions it would not be a calling conve= ntion, > it would be a piece of code inside those functions. This is actually simi= lar to > the patch that replaces regexes to "xdigit": you have the same pattern *i= nside* > many functions that you replace. No calling convention changes. It doesn't strictly have to be a change in calling convention, you can use your better judgement. E.g. you can list only the affected files, and either way you only need to mention the same message once for all affected definitions. --=20 Basil From MAILER-DAEMON Sat Jun 13 17:43:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkDvm-0003kb-S7 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 17:43:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58730) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkDvj-0003kR-Sd for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:43:11 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:39634) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkDvi-0002uE-3I for emacs-devel@gnu.org; Sat, 13 Jun 2020 17:43:11 -0400 Received: by mail-wr1-x42f.google.com with SMTP id t18so13419568wru.6 for ; Sat, 13 Jun 2020 14:43:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=FD/Jb78yUdXPkT5ia0lXEK+VRIQVdyt43LtAd42/9A8=; b=VMWZ+2BsueuG9BIThSlAqaP2qdjI+jS7V/4ZmzkxxceGytjzFhBNZq4WdRy7Ehkwp5 hE8K0w4puCUL/M3aZtoMhhWYJ6JXt1awe52vHpvRouh0jvSx0v+ufg+KV3vU3cwZSVdC eosPcFNV/Keh0F2xW/TzEPsev7+lFwRZYG28GWDEcdtZh+VZzHGztv8DUzSzHblgA18S d/NyxuYDjK4tq4D3g62vhv0+CIk0g4Fx+aysF1/N5iMkjrQwEjpH7NTfQXP0i/+LI5il DImvTjtg/8SRoYZWUEBjcAlLxbMAJkNTZWmlPmCICl7vbb/T7X06nv/FvrEFFFNAUBvV JCyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=FD/Jb78yUdXPkT5ia0lXEK+VRIQVdyt43LtAd42/9A8=; b=X8gtllYRPLvrcXKFhCd1lZ0wtbnKar6davbGJaAb/ZU2txCFzLvYNiu2mFnQ5+mE0Q yLrUixY+MEBSgbuHiRQx28CuUJamAAHNaSMJp9eGwxzvvheKwu+a0bkEPqk/2B+QwrP+ tHx15x1NYn16lWqDGj1DxcxtdT+QcWnNeYhkew3blopyi9HVYSKBVd8qbaaHlsSi+3PR PJyKuZhI45A/LlkxVKeZCoqPS5wUxNnRmDSB1pun69DHAtiZ291dlba5y0hLht6HJ0xx TXP+pYNsaxGtmDK5KNWK7D1486/L75fy68wgQrY038mRAsg6qG/UYmZkJXstHTKh9lJn z3pQ== X-Gm-Message-State: AOAM532SjZaQxU2FhkoW7jHg7GptVCklK6vCj6n1q6K+yDvfUyeYf14U 7uS4UKAwA18iLVKBXKsttjZlGxxUAXAGYcCFY5d/yOE= X-Google-Smtp-Source: ABdhPJykA/TV8kXke6+sIgT/aplYu6poEKq91MgOYaWhOAZgZR5Opi4rpHoemcplAsHZw4AClt7dJ45Y+Mfk0EthmNk= X-Received: by 2002:adf:d851:: with SMTP id k17mr21176001wrl.30.1592084582701; Sat, 13 Jun 2020 14:43:02 -0700 (PDT) MIME-Version: 1.0 From: Paul Pogonyshev Date: Sat, 13 Jun 2020 23:42:51 +0200 Message-ID: Subject: graceful shutdown of non-interactive Elisp program To: Emacs developers Content-Type: multipart/alternative; boundary="0000000000000123f605a7fe1420" Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=pogonyshev@gmail.com; helo=mail-wr1-x42f.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 21:43:12 -0000 --0000000000000123f605a7fe1420 Content-Type: text/plain; charset="UTF-8" Hi, I'm trying to make a Elisp program that is run in a non-interactive mode, i.e. essentially as `emacs --batch --load myfile.el'. A normal way to shutdown terminal programs is with C-c, which is expected to be "graceful" shutdown, e.g. the program still has a chance to save files etc. However, with Elisp I'm not sure how to achieve that except for constantly modifying `kill-emacs-hook', which would be a nightmare from coding perspective. Naively I would expect this print "GOING DOWN" when aborted with C-c: $ emacs --batch --eval "(unwind-protect (while t) (message \"GOING DOWN\"))" For example, Python's handler of SIGINT raises an exception within the program, which unwinds the stack as usual and, unless caught, cause program termination after cleaning up as expected (e.g. running all `finally' clauses and closing all `with' context managers). However, in Elisp, as I understand, there is no way to have a say in handling SIGINT other than adding a function to `kill-emacs-hook'. Is that correct, or am I missing something here? Paul --0000000000000123f605a7fe1420 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

I'm trying to make a Elisp program = that is run in a non-interactive mode, i.e. essentially as `emacs --batch -= -load myfile.el'. A normal way to shutdown terminal programs is with C-= c, which is expected to be "graceful" shutdown, e.g. the program = still has a chance to save files etc.

However, wit= h Elisp I'm not sure how to achieve that except for constantly modifyin= g `kill-emacs-hook', which would be a nightmare from coding perspective= .

Naively I would expect this print "GOING DO= WN" when aborted with C-c:

=C2=A0 =C2=A0 $ emacs = --batch --eval "(unwind-protect (while t) (message \"GOING DOWN\&= quot;))"

For exam= ple, Python's handler of SIGINT raises an exception within the program,= which unwinds the stack as usual and, unless caught, cause program termina= tion after cleaning up as expected (e.g. running all `finally' clauses = and closing all `with' context managers). However, in Elisp, as I under= stand, there is no way to have a say in handling SIGINT other than adding a= function to `kill-emacs-hook'.

Is that co= rrect, or am I missing something here?

Paul
<= /div> --0000000000000123f605a7fe1420-- From MAILER-DAEMON Sat Jun 13 18:09:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkELN-0007lA-59 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 18:09:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40984) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkELL-0007l2-F1 for emacs-devel@gnu.org; Sat, 13 Jun 2020 18:09:39 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:51762) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkELJ-0006vS-Lk; Sat, 13 Jun 2020 18:09:39 -0400 Received: by mail-wm1-x342.google.com with SMTP id b82so2611835wmb.1; Sat, 13 Jun 2020 15:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=0DBCUrBFwHEvyHjJSUge1IIMKg4fjkT/+KHXYpBu1IU=; b=gp2s5koWURYzKlFVhlFo+vP98KOe5YsT04GRT0XllqxUZjUTmUAgNQUHHTx6M5S+V3 M8s/xa6ckU+NsyX+R59RN6yTqdfC0SHYP4Rdc2GgYzQ3hZSNtjyUOOlO+PvqBTwSHSkX 4QhM4JOWBXnhkoUVbKODcZ3MDB9eQEg+ho+ernZrd4yt+8zD5VHH++CI/k+hBTO8aXu6 Q5FBHl0XZ5WUnC/TD3D7SKV1W61OPLo4h5/f2TA7MF/DOLtHx+U6L6S6n2WAra767aFx LOiBs23dfoYUQAWTJF5a7t+KMSdMkiMzFKlPhiKAvrcMoQtUFi7d6oe7+XkmyHOExGHu IkgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=0DBCUrBFwHEvyHjJSUge1IIMKg4fjkT/+KHXYpBu1IU=; b=SVTtxuttDr6GcysJK81Xrver+SgP01HxFWfjneZRHjM1Ia9PpLOedJybQDvASdt7uu L7GZKdCQmqNtD3gf0agRTWJGo1G19s3rGRcWD7bqXMtWYKCNNNwXcgsGuvJmr23bFkUA IeVno9Kk/dEdXjwpwtN9XZRyh8mSUjk4F24iRhkZzJ8di1kYiY8xq0QlktnlkEnnxMts lNpmn//oZVPHnEAU67JClkj8S0IXgVjoalVAeD+TGQfmTziquGINEiFCrrUOSAhaSqMt AQ45LiOFyHkoLOMtDVGdg6DaF1MR0CyMJmqBdQ0n7ewEd0oNYr6rRgZJVoZsz2g0FJur rW1A== X-Gm-Message-State: AOAM531aKEvK1n8wi5rP+c1yCbCWZRSteJc7k/Dum8kexloFOKQ7BBvU FM14gNX1ELaToRRLIXRIea3SYMKS X-Google-Smtp-Source: ABdhPJzoy+qQ86RTfmGHi6qAEgonyZO9+BBJVy2zHiljV78pPGvzNBaObDomfJHmhXXPBNO3e9nybw== X-Received: by 2002:a1c:df57:: with SMTP id w84mr5879506wmg.52.1592086165615; Sat, 13 Jun 2020 15:09:25 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id f11sm16431098wrj.2.2020.06.13.15.09.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 15:09:24 -0700 (PDT) Sender: DG Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers To: Konstantin Kharlamov , Stefan Kangas , Eli Zaretskii , Emacs developers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> From: Dmitry Gutov Message-ID: Date: Sun, 14 Jun 2020 01:09:23 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=raaahh@gmail.com; helo=mail-wm1-x342.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 22:09:39 -0000 On 13.06.2020 22:23, Konstantin Kharlamov wrote: > FTR, I am all for having good commit messages. It is IMO a must have for any git > project. But having a list of function names with description for each does not > make one. Instead it should be an overview of what is done, why, and how. Having a standard that increases the likelihood of having such a description in the commit message without having to ask the contributor twice is not a bad thing. > Suppose you have a patch that deduplicates the same code pattern across 34 > functions by factoring it out to a single short function. Do you really need > that list? I mean, sure it's a fun fact to know, but you'll have to review diff > anyway. Yes and no. If I get the purpose of the diff, I could scan the contents more superficially (depending on what kind of changes are proposed, and where). > If anything, it only burdens you by forcing to check that each function > is on the list. I usually don't. > Commit message should reveal the intention of the changes (and > perhaps, if OP thinks changes may raise questions, they should also write the > reasoning). That, too. In any case, ChangeLog-style commit messages *are* a barrier for contributing, and one could argue that in the end they don't bring enough benefit to offset that. But our experience shows that they do bring a certain benefit. > On that matter I often love to quote a post from 2009 by Peter Hutterer, a > libinput and Linux HID subsystem maintainer. A post that is old but is not > outdated http://who-t.blogspot.com/2009/12/on-commit-messages.html It's a pretty good guideline. But one that's a bit harder to check and enforce. From MAILER-DAEMON Sat Jun 13 18:12:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkEOI-00016e-Mc for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 18:12:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkEOH-00015U-Jl for emacs-devel@gnu.org; Sat, 13 Jun 2020 18:12:41 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:42911) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkEOG-0007SC-1P for emacs-devel@gnu.org; Sat, 13 Jun 2020 18:12:41 -0400 Received: by mail-wr1-x431.google.com with SMTP id p5so13435771wrw.9 for ; Sat, 13 Jun 2020 15:12:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=FFVKcbDYb1ue3z1LWMrUhXa990jy13mPKXVl5hnYT4k=; b=ndefXGa5I+ttnBVWKwbf20j3SmfA0wzDspCcQpXVY29BBkHBjn7Nj6UwaspwU8vhwS RbcNxjsNQv7QS1VHs967i2ZK94IzIS3G7CisF458KOcqJnLGQbJ3lBdNrLKGvJpkE12G FN971cDMy0OxqbnO812Ca77IlWz0EU3y5Gv60o9M7Wbv4ZKOxun+2pUt+M31cXMPvnfA RWDrMx4id8C+1oHS1YPQ7KuWP/aA79DYqOESiMAA1b3hkBCTeVnqSlBgQ5YzAT9EbyAC D5V+IHtGG/cgu3osBr/6W6ZjbEiZ+vNazdQJ7yeoMp0T/Uu/sOjkIHSA36ikYXg0iZVZ zwYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=FFVKcbDYb1ue3z1LWMrUhXa990jy13mPKXVl5hnYT4k=; b=LPGjaeVG8GGc/YcWX7mrkFsZtKL1Tw1pv43uW2H2IntNHV5C7wephYA5LgwXu/wcRg HYqJSIAL2Q4x7uuh6fgFPMETMS7QqhlISD6fo1D7oZWjtuMzreN/03ixKAwSVHn7p6hS It6y6u93uJgDKchcWRoCTyPOLMKjqXVUTToyheWx4g3oCUgB0moj9BAOx1lXN0fExZzF hS/E4ThsENasADARMYmbxtOlA2l/mzOY3OczgGOimvHvW0e5lB6GJP44pKRfGI78Mkxe UJiQvbQYBb/VVhkg+cimEfA3SmKa9QL92qJ0bECjGWXyxKHbRLn3NaaVq7hDfR9zsYYj AeJQ== X-Gm-Message-State: AOAM531efexsnAKJwdyelzTecg59/GPWibXjoq/448s5fNzmxgKupl6w mlpLaFW5ylHMu7tTBC3/zNW0FzMI X-Google-Smtp-Source: ABdhPJx0D85kLEi2Op4IHQwsnKKXBErqXHFc1mpxA7oG/bFP0hBjmwDtWespvy2zO01dV0Ex/1iHew== X-Received: by 2002:a5d:4841:: with SMTP id n1mr22415030wrs.64.1592086353047; Sat, 13 Jun 2020 15:12:33 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a126sm15629288wme.28.2020.06.13.15.12.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 15:12:32 -0700 (PDT) Sender: DG Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 To: =?UTF-8?Q?I=c3=b1igo_Serna?= , emacs-devel@gnu.org References: <87pna2eksc.fsf@inigo.katxi.org> From: Dmitry Gutov Message-ID: Date: Sun, 14 Jun 2020 01:12:31 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87pna2eksc.fsf@inigo.katxi.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=raaahh@gmail.com; helo=mail-wr1-x431.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 22:12:41 -0000 Hi! On 14.06.2020 00:08, Iñigo Serna wrote: > This happens even if I encode the query string with UTF-8. What about encoding the body of the request? From MAILER-DAEMON Sat Jun 13 19:00:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkF84-0006Fg-R6 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 19:00:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkF82-00069r-LL for emacs-devel@gnu.org; Sat, 13 Jun 2020 18:59:58 -0400 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:39609) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkF80-0006ol-Nj for emacs-devel@gnu.org; Sat, 13 Jun 2020 18:59:58 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id B5B775C009C for ; Sat, 13 Jun 2020 18:59:54 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sat, 13 Jun 2020 18:59:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= references:from:to:subject:in-reply-to:date:message-id :mime-version:content-type; s=fm3; bh=dTjuuAsq8nutgOyi3094xyemQ2 cGNcVUsRaQ53KHISI=; b=co8cHYt1NGx5Z8J8ZTX9Lu4kTWgMy3vgDAgxJj8MP/ H43gY34STXq+4C3T2fQpLbDjikrSi37+/A7KLKdwh7KbhAwM1uKdZRTnjewC4oO3 fTRC2+uTEhzgkmxM5ZvXupwSkLbddEj+lYKjBLKDsE9rTGx4b3+5RlPqUyayDr3s A36PqZIruhPeaQ1A5xXSM3kPio3mn07q/Gn6Xe1/oO3oyt2E0e3r93wI2clSdQrE uuLYH/CWAWa8D6fyHMsejKG/4YOvVbibZgP2PLqVvhQDhUnxZfQ15ILu4hQcTjX/ 8XkHn4O27TrQa6QZ43l/oq/fYrJLz1aMjw3fArMfe/OA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=dTjuuA sq8nutgOyi3094xyemQ2cGNcVUsRaQ53KHISI=; b=UWgIj3t+P2pRdwwu5U3JtA kCbeoB0qz/HtGMhfoUHym2MXQRQB/H4E7/gUOB9sEwkAm4lICh6ENuBoLMVrW08Y zvgKi7kJsGxlFruTcbrKbipY4tWR0LechqI5FlBbhgXTYU9DNxDXmX0bq8Ty7PFq Lu8eRe/OzBCLuDkaCEEZ5yFzJM44uj3lFiMBTrNukYVpHcZG6RHAYcJQ18qd/IM6 qyEZSrBVPsls0jMR0tN3Ftz++ORAscMpsIqmB7jITSk+WCedqvPNNsjAKp54eD2I DGrIeXrb/LoeHtxu9uN/h8+4Vfr0wpK7KaLslcJCAGciDkV61JbSkCcDv6XJPKeQ == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeigedgudekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpehffgfhvffujgffkfggtgesthdtre dttdertdenucfhrhhomheplfhoohhsthcumfhrvghmvghrshcuoehjohhoshhtkhhrvghm vghrshesfhgrshhtmhgrihhlrdhfmheqnecuggftrfgrthhtvghrnhephfduffeuhfdule fhgfelueekgeduveettdduudfhfeetueegvdevtdduudfgffefnecukfhppeelhedrledt rddvtddurdeivdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehjohhoshhtkhhrvghmvghrshesfhgrshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from Swift.fastmail.com (ip5f5ac93e.dynamic.kabel-deutschland.de [95.90.201.62]) by mail.messagingengine.com (Postfix) with ESMTPA id 39A323061856 for ; Sat, 13 Jun 2020 18:59:54 -0400 (EDT) References: User-agent: mu4e 1.5.2; emacs 27.0.91 From: Joost Kremers To: emacs-devel@gnu.org Subject: Re: graceful shutdown of non-interactive Elisp program In-reply-to: Date: Sun, 14 Jun 2020 00:59:51 +0200 Message-ID: <87tuzed120.fsf@fastmail.fm> MIME-Version: 1.0 Content-Type: text/plain; format=flowed Received-SPF: pass client-ip=66.111.4.28; envelope-from=joostkremers@fastmail.fm; helo=out4-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 18:59:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 22:59:58 -0000 On Sat, Jun 13 2020, Paul Pogonyshev wrote: > I'm trying to make a Elisp program that is run in a > non-interactive mode, > i.e. essentially as `emacs --batch --load myfile.el'. A normal > way to > shutdown terminal programs is with C-c, which is expected to be > "graceful" > shutdown, e.g. the program still has a chance to save files etc. > > However, with Elisp I'm not sure how to achieve that except for > constantly > modifying `kill-emacs-hook', which would be a nightmare from > coding > perspective. What do you mean "constantly modifying `kill-emacs-hook'"? You just add a function to it when your program starts and if it's shut down before Emacs is killed, you remove the function again. Or leave it, if it doesn't do any harm. -- Joost Kremers Life has its moments From MAILER-DAEMON Sat Jun 13 19:00:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkF8o-0007IR-0F for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 19:00:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34554) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkF8l-0007G5-SL for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:00:43 -0400 Received: from forward106j.mail.yandex.net ([5.45.198.249]:37574) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkF8i-0006zz-9r; Sat, 13 Jun 2020 19:00:42 -0400 Received: from mxback8j.mail.yandex.net (mxback8j.mail.yandex.net [IPv6:2a02:6b8:0:1619::111]) by forward106j.mail.yandex.net (Yandex) with ESMTP id E9ADA11A0227; Sun, 14 Jun 2020 02:00:21 +0300 (MSK) Received: from sas2-ee0cb368bd51.qloud-c.yandex.net (sas2-ee0cb368bd51.qloud-c.yandex.net [2a02:6b8:c08:b7a3:0:640:ee0c:b368]) by mxback8j.mail.yandex.net (mxback/Yandex) with ESMTP id fzWmW5frKn-0LWSr3kw; Sun, 14 Jun 2020 02:00:21 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592089221; bh=V8nNkEbPl0Rw1jLoPzxMwvw7fMW7nuGYiHrOGKyCrpw=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=VUkLB+3hM/1B1le8CpfiGz1ygTc8bagyJOA4bQVGcO7FjPwvuvIBRH8EXZzuFrIYu Rb1LjNroiN8Q1DdujgVGqHcSJQS7oBFwa7kwjQKKhxgJg3CSYV6bPWucRd2SqjG55P YefRUyml8CGJPTIlJTPxikzTeHMIlwZ0/0JZkpxM= Authentication-Results: mxback8j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas2-ee0cb368bd51.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id Nl8Jq6aeUo-0Kja6CbT; Sun, 14 Jun 2020 02:00:20 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <7e3969862c2d3f76fc812f4231d95e80e37c4c25.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sun, 14 Jun 2020 02:00:19 +0300 In-Reply-To: References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=5.45.198.249; envelope-from=hi-angel@yandex.ru; helo=forward106j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 19:00:22 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 23:00:44 -0000 On Sun, 2020-06-14 at 01:09 +0300, Dmitry Gutov wrote: > On 13.06.2020 22:23, Konstantin Kharlamov wrote: > > > FTR, I am all for having good commit messages. It is IMO a must have for any > > git > > project. But having a list of function names with description for each does > > not > > make one. Instead it should be an overview of what is done, why, and how. > > Having a standard that increases the likelihood of having such a > description in the commit message without having to ask the contributor > twice is not a bad thing. I agree, it is always great to formalize things. Okay, let's test it. Imagine a contributor who are not aware how to write a good commit message, to see how that guideline would help. So, they make a non-trivial functional change ("non-trivial" because here we don't care of trivials like "rename a thing" or "factor out the code". These can often be described just in the commit title alone), let's say, they replaced a "list" container in a few functions to a binary tree for whatever reason. Now we'd like to know why did that happen. In my case they clearly would not produce anything useful, they'll maybe write "replace list to a binary tree" and that's it. Why? Who knows. How will they behave in your case? Well, they'll collect the functions list, then would scrupulously write an immensely useful information against each one "Replace list to a binary tree here". You see, it is the same here. > > Suppose you have a patch that deduplicates the same code pattern across 34 > > functions by factoring it out to a single short function. Do you really need > > that list? I mean, sure it's a fun fact to know, but you'll have to review > > diff > > anyway. > > Yes and no. If I get the purpose of the diff, I could scan the contents > more superficially (depending on what kind of changes are proposed, and > where). Sorry if I'm misreading, but given the context of comparing commit-messages with the list and without, I can only interpret the "yes" as "yes, one sentence that says the code pattern is factored out from all the functions is not enough, I need a similar sentence to be repeated 34 times". Is there other interpretation that I do not see, or do I get it right? > > If anything, it only burdens you by forcing to check that each function > > is on the list. > > I usually don't. This! Strictly speaking, as a reviewer you should check it. If a contributor forgot to add or remove a function on v2 of patches, and you passed them your Reviewed-by, wrong commit message would partially be your fault. You do not usually check it exactly because it is trivially a burden. From MAILER-DAEMON Sat Jun 13 19:24:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkFVT-0006Ge-Gb for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 19:24:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41576) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkFVS-0006DI-6l for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:24:10 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:38023) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkFVQ-0002aW-83; Sat, 13 Jun 2020 19:24:09 -0400 Received: by mail-wm1-x341.google.com with SMTP id f185so11344728wmf.3; Sat, 13 Jun 2020 16:23:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=v/VVpzhGt5Rpa9c9mZ5DdD/chcmIDmY1eBUtyqbM3+w=; b=T0KcjP9KN4Cyu84d4r08QkL/QvzNE8kWlDYKkq7iOS1MFzpUheeur0+fmMySkNZbNL WHZSscElhA8/WOJN7Qz0zvWCuR2/1w1PJV3xBqpptddEESVa53wNK8igEMnXdmYKAiap lmX8CgYr7YHasNWG6k0Klo0LioJwQZVruO/K20CT8IqQCaMkOkW3koLttXoO1i0FafEl Ow8SPxQ++kB3S/I5dt5kZAApLrrlPHpuzl/ilD7sFp6gTKcohAw1nZCWS8D6vSTtNKXA 7Bgng0xwqfgCzo41ZeEy7WbS/6B6zCMXtiH2uIoqufk1HRalT6Nv3G5nY/ADjFfGFtNb 5haw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=v/VVpzhGt5Rpa9c9mZ5DdD/chcmIDmY1eBUtyqbM3+w=; b=geifQLsFjdfXdE0R4dOqPftPjVs6VuGzoCpJtGx3FTzHy0yyVEbypJo0M9rHD/Xl6J +9WS/kFfyIDUhfEzYPjV8ARSgVBDAfVwipzJyX+0+IuVkyuPdu58F01exvafJdtVY12R v9ffo/wiROgLvIdd4EqxOJmq0IrkExLzQM2ThDMX6h40X66x7gNTc+EzoE7CowETw4B/ IYkNx3Zk80hvw2URgCaqLNi5Q2LAubvXG80+ftqKgDgc90DX6PvRHkw//JuAYVrAsOG4 KPzlQyQeNx3Fn/pz4r7ptD2HE/Ne0Wxs6RiB3/AdDPlBT9KPzlijzjnk9CQCOpmt4eqT 5Mjw== X-Gm-Message-State: AOAM5308Wws1RUUBEOSGEYOrGWdU6YF12Z13m8Y2NN4iWAjjH2o0xSUv LonDv73cuTduGgoJ0f/LC6V50ZR4 X-Google-Smtp-Source: ABdhPJxmxGyzJQ+HsU1m9U2uK6uEiXpnwkSc+r5/oA/LAcbFBV5J508l9HbbGGrSr6nOtd/Ii9OxOQ== X-Received: by 2002:a1c:2183:: with SMTP id h125mr5399220wmh.112.1592090635758; Sat, 13 Jun 2020 16:23:55 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id l17sm17011158wrq.17.2020.06.13.16.23.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 16:23:55 -0700 (PDT) Sender: DG Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers To: Konstantin Kharlamov , Stefan Kangas , Eli Zaretskii , Emacs developers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <7e3969862c2d3f76fc812f4231d95e80e37c4c25.camel@yandex.ru> From: Dmitry Gutov Message-ID: <9e4d15f7-a6ef-1924-dcc1-00e256558446@yandex.ru> Date: Sun, 14 Jun 2020 02:23:53 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <7e3969862c2d3f76fc812f4231d95e80e37c4c25.camel@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=raaahh@gmail.com; helo=mail-wm1-x341.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 23:24:10 -0000 On 14.06.2020 02:00, Konstantin Kharlamov wrote: > So, they make a non-trivial functional change ("non-trivial" because here we > don't care of trivials like "rename a thing" or "factor out the code". These can > often be described just in the commit title alone), let's say, they replaced a > "list" container in a few functions to a binary tree for whatever reason. Now > we'd like to know why did that happen. We might want to know more things than that, actually. > In my case they clearly would not produce anything useful, they'll maybe write > "replace list to a binary tree" and that's it. Why? Who knows. Then I'll probably ask. If the preceding discussion, or the contents of the associated bug report, haven't made the reason clear already. > How will they behave in your case? Well, they'll collect the functions list, > then would scrupulously write an immensely useful information against each one > "Replace list to a binary tree here". You see, it is the same here. Let's imagine that I know that in the codebase 'list' is used in many places, and then in the ChangeLog entry I see that only some of them have been replaced. Then I cut the review short and ask about the rest of the places. Similarly if they actually described the reason the change, but the enumerated changes don't match that goal (e.g. some changes in some files are missing). Another concern that can come up are whether they added backward-compatibility aliases (to satisfy our backward compatibility policy), which should also be apparent from the ChangeLog style entry. Etc. > Sorry if I'm misreading, but given the context of comparing commit-messages with > the list and without, I can only interpret the "yes" as "yes, one sentence that > says the code pattern is factored out from all the functions is not enough, I > need a similar sentence to be repeated 34 times". Is there other interpretation > that I do not see, or do I get it right? Yes, as in "I'd have to review the diff anyway", and no, as in "I won't have to spend as much time doing it as I might have without the ChangeLog style summary". >>> If anything, it only burdens you by forcing to check that each function >>> is on the list. >> >> I usually don't. > > This! Strictly speaking, as a reviewer you should check it. If a contributor > forgot to add or remove a function on v2 of patches, and you passed them your > Reviewed-by, wrong commit message would partially be your fault. I'm all in favor of automated checks. Someone would need to implement them, though. From MAILER-DAEMON Sat Jun 13 19:24:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkFVg-0006ZA-Q9 for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 19:24:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkFVf-0006Xl-7Y for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:24:23 -0400 Received: from mout.gmx.net ([212.227.17.20]:41169) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkFVd-0002dM-B5 for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:24:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592090659; bh=W8oOXE3z4IrnYs+Xs9FChP0KCgh3rCKeTTGIA0tBL9A=; h=X-UI-Sender-Class:References:From:To:Cc:Subject:In-reply-to:Date; b=CgavDsb9M0h1xa8I/s6SDlh18Vynvh5TyXQ/uM82v5ydmsunRiEIzOFlyrjFCspbp S8FJ7n5HDJleE1HsGjnlSUki42dSFXCxEVVfwQSjbiczDs2iWt086bj0G7rJ4i43qs FDUoAEYfViZKXmYvf0KrCAXD7UvWP9hxk8af9QcI= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from inigo.katxi.org.gmx.com ([79.153.71.125]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MiJVG-1jF3xc3x7G-00fUjh; Sun, 14 Jun 2020 01:24:19 +0200 References: <87pna2eksc.fsf@inigo.katxi.org> User-agent: mu4e 1.4.6; emacs 28.0.50 From: =?utf-8?Q?I=C3=B1igo?= Serna To: Dmitry Gutov Cc: emacs-devel@gnu.org Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 In-reply-to: Date: Sun, 14 Jun 2020 01:24:17 +0200 Message-ID: <87mu56eehq.fsf@inigo.katxi.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:L+fHA0u6baMKig1+i0GD4pqjTJ1bz2LiUFLOjbeLrnj/Q6D0A4e 3VDCK0b1lKB8z6siK4FXogaVlEWV17aljNWoT8la60ew0ND8qwfFIUtn4Ep4z9tlPxU50KE 2rF5NDaFthS0uvEDtWVc4Z+R0UCxxCnxLiZQ6A+BPtWq9f9ltWwcyGsvzwEbSpWwX4JV+kf lrGfbMnnhAs/aza+9cLZg== X-UI-Out-Filterresults: notjunk:1;V03:K0:aKTHYurSysk=:mDBrXcUYkjNbSaqmq07i4B Mh92MmivcVGKCSgRY0gJSuowffYg4QWagrdsAr4QGFIGwtQCZR6GZOz7rmN78zsyko93Ar3Hd mvsC8oErNJuu+KjFTm1aWQzRsCN2UoL+K+N+4V6h4hfXRVGP0gBDHZaDWg3fbvf9WVInHFoYF QLLgISYItgGAnVw4hyAOoU1QpWyLXf8nYTXtDzGL2ZXIkGrFuf4vW7rsGEDm77FsYoDV90C8t SFhUm+CmET2009ZxB/LzYczIQxEsytlYJuiBuk6vbRil4sW6Nm9JH51bmlE+oopbIYBXjpqVR jkYxy6RW+L2696QDUj1U3li3nbxDgW1Z5dXLufv2FUemYBlMzN5lZ8OQXNiVeILv3ip2VXq4X 6lFVdsSc8AsuEq2PU2EIouI3kYvR1F7Dgu1npKHygLQ5JGdf5+ROAzallVeDoxbuZ4iH4ofzx r0BLuNi1lhXgkCyFFfXsh4abRgzEIAAUCJ5pb4Xym+dOxVtgwBZEehuqqH2Uj9cZXRxYC4Ywm xSdf/hEbKaYHvRi9HjWk637X9XYMgcgknNoFyXTe5DBaoBN2EOi3fnkHcBayiFP0Wyf6FaEZe 00W3JTVZpAJlrSk4zQL/LZ6h3Cj6nSvR5FWnRZzNvOPZcgAVjMyMEfFP8ZV2YN+ceEk8Eicfv vLEPjJee174PqC4ROydi0zPGglL7HFb/XCe2wDwj20Two/4iXXN2IGhrKOKXcCSaprz913lFb 33i9mMdrB/P7Q568kWJ65yAECFu38datKOc59nav3ObZxc2Y6xACHVUEwXj/qg2kYBd30YzJa Sme23MZ5jtQV5GeSXv2oyxjmz7wxEaTZ6k99cb1qhdZc6rfi+QHe6vFDDtQF2SqBpqEHyVK3c cCOvHhaLTVZOQW7tLBwtcNO92RZUjtU8lBJTKC6XQ8nLtM5T3HGP9zEM/I8zrApb5L5tBKu2y SQnOwhNSOg8+IWlOzr3UgCptXVUckowquXNNNVahWspdS673vmgG0dH1e91Mk3p03xI+VfcDt 42XfNyhqhhySwb8DniX6GOhed3/5q3WT6j7vkPc/KiqLRRA+XvRnVVZ1NmZSInPjow8AoMawb n+IHwO/ch+mkWflP2jNOSRNCozrWglD1q7NX5+H852g7VcCcSIsJ+khoGVU8ZLDKAxq8mH6rZ kRwUPYCGsDcZVR9ZkUIYf/bJwOwJm9dSHxthcWiWYKHEsi+x/SR2Y4ds7rzMhQJPiWr+qLVfy oR6hHOsRXW2RlxjZh Received-SPF: pass client-ip=212.227.17.20; envelope-from=inigoserna@gmx.com; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 19:24:19 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 23:24:23 -0000 Hi Dmitry, First of all, thanks for your time. On 14 June 2020 at 00:12 +02, Dmitry Gutov wrote: > What about encoding the body of the request? Do you mean execute `encode-coding-string` outside `json-encode`? Uhmm=E2=80=A6 It works! (url-request-data (encode-coding-string (json-encode-alist `[(method . "slim.request") = (params . [,playerid ,(split-string query)])]) 'utf-8)) Thanks again for the help, I=C3=B1igo From MAILER-DAEMON Sat Jun 13 19:27:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkFYi-0007tf-7Q for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 19:27:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43068) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkFYf-0007t4-Ue for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:27:29 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:38935) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkFYe-0003Ib-Hk for emacs-devel@gnu.org; Sat, 13 Jun 2020 19:27:29 -0400 Received: by mail-wr1-x434.google.com with SMTP id t18so13542049wru.6 for ; Sat, 13 Jun 2020 16:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=I1Vg05I0lMYrYOh7J9GIxAf9KxAH9KezUmy0e93kCZM=; b=qm67X8OvDHH9Q++vAz/1n6XhwKlLqnAw3hJ8HRhyXBUocl8VXWMGSWyhrld/juo+fe aZBNvvVHXgAnWZfqupCsaEm8DgmMLp+QkIPiAjou/BW/HuZWOxsa2824GeZtxP8ii9KO LRFDLOp8B6iT2RHqoPF9r0fRdcK6AlgBrcm0EHdCiqaNHG+jzEnQV3hYxLipgo3jmE95 dY1a0fwTn4pCNPf/ACP1PEXCE4DpSULhYIfWZtPp5zxP9mPXszX6bx//bmKndHvcYTbA 6v7juaJx8AkCKNQQEPa0l2EXpnKmA6tBomLZ2ZSYFRuii7ekDBUwk2xvEoXCN6Kp6p1N uadg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=I1Vg05I0lMYrYOh7J9GIxAf9KxAH9KezUmy0e93kCZM=; b=oPyyDXrMA5NO/C1jPnQ/9maotd5ZGwWqtELI/HT/TI1QxJGrXyXL7nhGlmRQYxKIDs 25q706tRVbgkHq3dXyxzo2ATuam+WDtN7cM3rGJ2uys2rjLgKmZWpdu5GHXCHasTOI0/ OjWFs/Za7B05elgj1SstKgnmUcchi6jhVc3OfM9d2FzKY3IuTEQmbCIqXj80IiyrLfMd FZtTRx4KjikCjDH1RBwLwKNVeETxhE3K/rZPaC8JuUy7odiGww1reSxtG32thyifp/8y bfZMTODW6brqrN4WtHnpq/oWfAV7onHT4WT9vJFLKXyYuiEMJBJKnjNgw5rnaojcLAAR 3Htw== X-Gm-Message-State: AOAM533F7DbwVz3HvzKAoG1O+QnJ+NR8uEEQE6925Q1a15BRP+Cdm7gF 0ROcZNlXxqPA3Ihg1c9dr2Z57l8f X-Google-Smtp-Source: ABdhPJwY6GWzNsSgxkerrqI72jgD+2o1eudM9FM6tsQKVOfnIxig1JebF8mQ6TQg0Vb5flzr8O8H7w== X-Received: by 2002:a5d:6444:: with SMTP id d4mr22312925wrw.239.1592090841809; Sat, 13 Jun 2020 16:27:21 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d63sm15977495wmc.22.2020.06.13.16.27.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2020 16:27:21 -0700 (PDT) Sender: DG Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 To: =?UTF-8?Q?I=c3=b1igo_Serna?= Cc: emacs-devel@gnu.org References: <87pna2eksc.fsf@inigo.katxi.org> <87mu56eehq.fsf@inigo.katxi.org> From: Dmitry Gutov Message-ID: <425e77e6-30e5-674e-009c-d8a29831dc00@yandex.ru> Date: Sun, 14 Jun 2020 02:27:20 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87mu56eehq.fsf@inigo.katxi.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=raaahh@gmail.com; helo=mail-wr1-x434.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 23:27:30 -0000 On 14.06.2020 02:24, Iñigo Serna wrote: > First of all, thanks for your time. > > On 14 June 2020 at 00:12 +02, Dmitry Gutov wrote: > >> What about encoding the body of the request? > Do you mean execute `encode-coding-string` outside `json-encode`? > Uhmm… It works! > > (url-request-data (encode-coding-string > (json-encode-alist `[(method . "slim.request") (params . [,playerid ,(split-string query)])]) > 'utf-8)) > > > Thanks again for the help, Cheers! From MAILER-DAEMON Sat Jun 13 20:20:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkGOF-0003bG-Cx for mharc-emacs-devel@gnu.org; Sat, 13 Jun 2020 20:20:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39746) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkGO9-0003YR-6P for emacs-devel@gnu.org; Sat, 13 Jun 2020 20:20:45 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:29809) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkGO6-0003qe-FE for emacs-devel@gnu.org; Sat, 13 Jun 2020 20:20:39 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 061A8441897; Sat, 13 Jun 2020 20:20:36 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id CA5154417F3; Sat, 13 Jun 2020 20:20:34 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592094034; bh=1RuBTkw8YLhO2B9KP01fvHrT9rjZd55hi18+kxkCDH4=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=ObMTs4pThKI/H1WOIjcunOxQ8vUlG3AYKIp95f5A2HoZ+R2Fn4ZKI8xv9I/a73PXO DXiGrn8EfR2j9ngCDsi+j4CiFfZBGTobGR3nK2y+oh+v8i3FJ2A2n8gPYx3rhkHM/z bqzbaLxaXHaSVA4rBZ1YSeN7Fm4gWTvZI1ubqoRfiDR2OXodtOSNKpL+bkvZsmZiOE EnU+Ir71m0UcsPP8HwDIhSyUAYq+7CaeiO6ygZjaqCa5dBEvzVDQ9k11am0vJx4r2D wRFXG4WMfA7GuekHqIYRpMWfudRjcOJVQTyfJF4V2JdSmj4cyqx2kxyDXJCpKpanIk l1QaDGItoG5qQ== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 641AC12079C; Sat, 13 Jun 2020 20:20:34 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?I=F1igo?= Serna Cc: Dmitry Gutov , emacs-devel@gnu.org Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 Message-ID: References: <87pna2eksc.fsf@inigo.katxi.org> <87mu56eehq.fsf@inigo.katxi.org> Date: Sat, 13 Jun 2020 20:20:33 -0400 In-Reply-To: <87mu56eehq.fsf@inigo.katxi.org> (=?windows-1252?Q?=22I=F1igo?= Serna"'s message of "Sun, 14 Jun 2020 01:24:17 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.340 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain KAM_NUMSUBJECT 0.5 Subject ends in numbers excluding current years Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 20:20:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 00:20:45 -0000 > (url-request-data (encode-coding-string > (json-encode-alist `[(method . "slim.request") (params . [,playerid ,(split-string query)])]) > 'utf-8)) This might beg for some better documentation about the string returned by `json-encode`. After all, AFAIK the JSON format requires utf-8 encoding, so it would make a lot of sense for `json-encode` to do the utf-8 encoding directly and make sure it always returns a unibyte string. Stefan From MAILER-DAEMON Sun Jun 14 04:33:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkO4z-0006KV-7i for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 04:33:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkO4x-0006KL-Bj for emacs-devel@gnu.org; Sun, 14 Jun 2020 04:33:23 -0400 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:46459) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkO4v-0001LI-PP for emacs-devel@gnu.org; Sun, 14 Jun 2020 04:33:23 -0400 Received: by mail-vs1-xe2b.google.com with SMTP id k13so7647991vsm.13 for ; Sun, 14 Jun 2020 01:33:16 -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 :cc; bh=ud885K12NQyP9/SwdyDWVSUWvsmgo+TZvqtKWn62TPE=; b=GfEnpuoQltlJRXA3pvEucj582hNagn3UDsoy7u61GNIw/Dx+1P8AxAt9igI74yMwgL +aApjyW9SDNlqxEy+FnEHxrB2Qnl85X9XzqMQRyN9EUHD5bu8IgkzUVPhPa1mdMX4wTb 6BvA8Q03Oh1QoVWMQZyE3BPdsEz8XmcGypzsR19fFr/JV4Fe4NrVeVxhqtB3xyxCp2Sr BGOFdt0vK8R6QJNw02XMStrWvYRY7fPkd22CvlDQXSSCNwVWRc/YodxlOFF361N1lZyd lS6Rt2Y57Y9fRVRlJb32bX1diwTlXEJKN3b0nYxeCtyVg3XFK0eB31BfCqCGeLTe7Wca RngA== 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:cc; bh=ud885K12NQyP9/SwdyDWVSUWvsmgo+TZvqtKWn62TPE=; b=ALr3I7+M5fCbO8uciOw4rjgId5rXoSMTxoGQ/rLX8kOe/BbzvzGcxLreVFAYC2FDQ7 Afje9rR+bLiEfvlou5TIbG5pYdBz+B3MWddeU+d0uE7JObGh1DFsKwFUw6OzV7Fllp28 bfHOa4w7D9zveew6kmqTHt5rryxeRa8SNHWpqjoOJxx08kbujJLNuIfp6QU1+igADK+V gRsf6DeZMmdwwVxGnlWJEMqWJIVxRP4fzCJK0Wx9FBIKGlK4PnIuBQA2k3riUD/lvwwW CVjQNYxGs+GREHT3by+OGsZF7Is5v9j/IiJOHIbV+GCtdl4CE9dbMGA01jybJLVYaGOs +iRw== X-Gm-Message-State: AOAM533b3B0Iid41zdQWUYDTpbnmv8ms4jG4MMCXckS5Nn2VLKqdvhtj 5L0aPix7RwzmqZ8nkFIgRobGZtOxJqzPqPzJ8O4= X-Google-Smtp-Source: ABdhPJwbXUm1EUMn5EHRvw0t4RKoba1ynUXV+VfMQ/o9Jm/pk8BJQXMd0LdHLWbA5qqSwz08wRxO2/WvhmUTwu5r1lU= X-Received: by 2002:a67:8a83:: with SMTP id m125mr15958246vsd.199.1592123595758; Sun, 14 Jun 2020 01:33:15 -0700 (PDT) MIME-Version: 1.0 References: <87pna2eksc.fsf@inigo.katxi.org> <87mu56eehq.fsf@inigo.katxi.org> In-Reply-To: From: Yuri Khan Date: Sun, 14 Jun 2020 15:33:04 +0700 Message-ID: Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 To: Stefan Monnier Cc: =?UTF-8?B?ScOxaWdvIFNlcm5h?= , Emacs developers , Dmitry Gutov Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::e2b; envelope-from=yurivkhan@gmail.com; helo=mail-vs1-xe2b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 08:33:23 -0000 On Sun, 14 Jun 2020 at 07:21, Stefan Monnier wrote: > This might beg for some better documentation about the string returned > by `json-encode`. After all, AFAIK the JSON format requires utf-8 > encoding, so it would make a lot of sense for `json-encode` to do the > utf-8 encoding directly and make sure it always returns a unibyte string. An application might not want to send the encoded string over the network right away. It might want to insert it into a buffer. It would make a lot of sense for people who deal with files, sockets and network protocols to also deal with encoding, while people who deal with strings and buffers use JSON-serialized strings transparently. From MAILER-DAEMON Sun Jun 14 05:37:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkP5E-0001yz-Gb for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 05:37:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkP5D-0001yt-GL for emacs-devel@gnu.org; Sun, 14 Jun 2020 05:37:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42328) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkP5C-0004Gh-Qp; Sun, 14 Jun 2020 05:37:42 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:50239) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkP5C-0005ol-JR; Sun, 14 Jun 2020 05:37:42 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 0378127C005A; Sun, 14 Jun 2020 05:37:42 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 05:37:42 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhilhho ucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnhepieektd fhkeeiteevteehtedvvdeijefgleektdefvedvkeevudeuvefgjeffffevnecuffhomhgr ihhnpehgnhhurdhorhhgpdhgihhthhhusgdrtghomhdpghhithhlrggsrdgtohhmnecukf hppeelfedrvdefiedrudefiedrfedunecuvehluhhsthgvrhfuihiivgeptdenucfrrghr rghmpehmrghilhhfrhhomhepthhhohhrnhdomhgvshhmthhprghuthhhphgvrhhsohhnrg hlihhthidqkeeijeefkeejkeegqdeifeehvdelkedqthhsughhpeepghhnuhdrohhrghes fhgrshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 786933060FE7; Sun, 14 Jun 2020 05:37:40 -0400 (EDT) From: Tassilo Horn To: emacs-devel@gnu.org Cc: Stefan Monnier Subject: RFC: Automatic setup for bug-reference-mode Mail-Followup-To: emacs-devel@gnu.org, Stefan Monnier Date: Sun, 14 Jun 2020 11:37:37 +0200 Message-ID: <87r1uihtsu.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 09:37:43 -0000 Hi all, I've been working on a feature to setup bug-reference-mode automatically in common cases, i.e., make it guess the right `bug-reference-url-format' and `bug-reference-bug-regexp' automatically (if not already set). Attach is my first attempt at doing so and I'd welcome comments. What it achieves in the current state: - Setup according to VCS information - Only for Git at the moment (Is there a generic way to get the VCS URL?) - Project on savannah => setup GNU debbugs instance - GitHub: support #17 and namespace/project#17 links (both issues and PRs) - GitLab: support #17 issue links and !18 merge request including cross-project namespace/project#18 references. - Setup according to Gnus newsgroup, To, From, Cc - Probably too lax but works for setting our GNU debbugs instance for emacs-devel and other emacs-related mailing lists and newsgroups. Bye, Tassilo --8<---------------cut here---------------start------------->8--- 2 files changed, 142 insertions(+), 4 deletions(-) lisp/progmodes/bug-reference.el | 139 +++++++++++++++++++++++++++++++++++++++- lisp/vc/vc.el | 7 +- modified lisp/progmodes/bug-reference.el @@ -60,6 +60,7 @@ bug-reference-url-format you need to add a `bug-reference-url-format' property to it: \(put \\='my-bug-reference-url-format \\='bug-reference-url-format t) so that it is considered safe, see `enable-local-variables'.") +(make-variable-buffer-local 'bug-reference-url-format) ;;;###autoload (put 'bug-reference-url-format 'safe-local-variable @@ -75,6 +76,7 @@ bug-reference-bug-regexp :type 'regexp :version "24.3" ; previously defconst :group 'bug-reference) +(make-variable-buffer-local 'bug-reference-bug-regexp) ;;;###autoload (put 'bug-reference-bug-regexp 'safe-local-variable 'stringp) @@ -139,6 +141,139 @@ bug-reference-push-button (when url (browse-url url)))))) +(defcustom bug-reference-setup-functions nil + "A list of function for setting up bug-reference mode. +A setup function should return non-nil if it set +`bug-reference-bug-regexp' and `bug-reference-url-format' +appropiately for the current buffer. The functions are called in +sequence stopping as soon as one signalled a successful setup. +They are only called if the two variables aren't set already, +e.g., by a local variables section. + +Also see `bug-reference-default-setup-functions'. + +The `bug-reference-setup-functions' take preference over +`bug-reference-default-setup-functions', i.e., they are +called before the latter." + :type '(list function) + :version "28.1" + :group 'bug-reference) + +(defun bug-reference-try-setup-from-vc () + "Try setting up `bug-reference-bug-regexp' and +`bug-reference-url-format' from the version control system of the +current file." + (when (buffer-file-name) + (let* ((backend (vc-responsible-backend (buffer-file-name) t)) + (url (pcase backend + ('Git (string-trim + (shell-command-to-string + "git ls-remote --get-url")))))) + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) + (when (string-match url-rx url) + (setq bug-reference-bug-regexp bug-rx) + (setq bug-reference-url-format + (if (functionp bug-url-fmt) + (funcall bug-url-fmt) + bug-url-fmt))))) + (when (and url + ;; If there's a space in the url, it's propably an + ;; error message. + (not (string-match-p "[[:space:]]" url))) + (or + ;; GNU projects on savannah. FIXME: Only a fraction of + ;; them uses debbugs. + (maybe-set "git\\.\\(sv\\|savannah\\)\\.gnu\\.org:" + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)" + "https://debbugs.gnu.org/%s") + ;; GitHub projects. Here #17 may refer to either an issue + ;; or a pull request but visiting the issue/17 web page + ;; will automatically redirect to the pull/17 page if 17 is + ;; a PR. Explicit user/project#17 links to possibly + ;; different projects are also supported. + (maybe-set + "[/@]github.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" + "\\([.A-Za-z0-9_/-]+\\)?\\(?:#\\)\\([0-9]+\\)" + (lambda () + (let ((ns-project (match-string 1 url))) + (lambda () + (concat "https://github.com/" + (or + ;; Explicit user/proj#18 link. + (match-string 1) + ns-project) + "/issues/" + (match-string 2)))))) + ;; GitLab projects. Here #18 is an issue and !17 is a + ;; merge request. Explicit namespace/project#18 references + ;; to possibly different projects are also supported. + (maybe-set + "[/@]gitlab.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" + "\\(?1:[.A-Za-z0-9_/-]+\\)?\\(?3:#\\|!\\)\\(?2:[0-9]+\\)" + (lambda () + (let ((ns-project (match-string 1 url))) + (lambda () + (concat "https://gitlab.com/" + (or (match-string 1) + ns-project) + "/-/" + (if (string= (match-string 3) "#") + "issues/" + "merge_requests/") + (match-string 2)))))))))))) + +(defun bug-reference-try-setup-from-gnus () + (when (and (memq major-mode '(gnus-summary-mode gnus-article-mode)) + (boundp 'gnus-newsgroup-name) + gnus-newsgroup-name) + (let ((debbugs-regexp + ;; TODO: Obviously there are more, so add them. + (regexp-opt '("emacs" "auctex" "reftex" + "-devel@gnu.org" "ding@gnus.org")))) + (when (or (string-match-p debbugs-regexp gnus-newsgroup-name) + (and + gnus-article-buffer + (with-current-buffer gnus-article-buffer + (let ((headers (mail-header-extract))) + (when headers + (or (string-match-p + debbugs-regexp + (or (mail-header 'from headers) "")) + (string-match-p + debbugs-regexp + (or (mail-header 'to headers) "")) + (string-match-p + debbugs-regexp + (or (mail-header 'cc headers) "")))))))) + (setq bug-reference-bug-regexp + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)") + (setq bug-reference-url-format + "https://debbugs.gnu.org/%s"))))) + +;;;###autoload +(defvar bug-reference-default-setup-functions + (list #'bug-reference-try-setup-from-vc + #'bug-reference-try-setup-from-gnus) + "Like `bug-reference-setup-functions' for packages to hook in.") + +(defun bug-reference--init () + "Initialize `bug-reference-mode'." + (progn + ;; Automatic setup only if the variables aren't already set, e.g., + ;; by a local variables section in the file. + (unless (and bug-reference-bug-regexp + bug-reference-url-format) + (or + (with-demoted-errors + "Error while running bug-reference-setup-functions: %S" + (run-hook-with-args-until-success + 'bug-reference-setup-functions)) + (with-demoted-errors + "Error while running bug-reference-default-setup-functions: %S" + (run-hook-with-args-until-success + 'bug-reference-default-setup-functions)))) + (jit-lock-register #'bug-reference-fontify))) + ;;;###autoload (define-minor-mode bug-reference-mode "Toggle hyperlinking bug references in the buffer (Bug Reference mode)." @@ -146,7 +281,7 @@ bug-reference-mode "" nil (if bug-reference-mode - (jit-lock-register #'bug-reference-fontify) + (bug-reference--init) (jit-lock-unregister #'bug-reference-fontify) (save-restriction (widen) @@ -159,7 +294,7 @@ bug-reference-prog-mode "" nil (if bug-reference-prog-mode - (jit-lock-register #'bug-reference-fontify) + (bug-reference--init) (jit-lock-unregister #'bug-reference-fontify) (save-restriction (widen) modified lisp/vc/vc.el @@ -957,7 +957,7 @@ vc-backend-for-registration (throw 'found bk)))) ;;;###autoload -(defun vc-responsible-backend (file) +(defun vc-responsible-backend (file &optional no-error) "Return the name of a backend system that is responsible for FILE. If FILE is already registered, return the @@ -967,7 +967,10 @@ vc-responsible-backend Note that if FILE is a symbolic link, it will not be resolved -- the responsible backend system for the symbolic link itself will -be reported." +be reported. + +If NO-ERROR is nil, signal an error that no VC backend is +responsible for the given file." (or (and (not (file-directory-p file)) (vc-backend file)) (catch 'found ;; First try: find a responsible backend. If this is for registration, --8<---------------cut here---------------end--------------->8--- From MAILER-DAEMON Sun Jun 14 06:00:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkPRV-0001WV-VV for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 06:00:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkPRU-0001WN-V1 for emacs-devel@gnu.org; Sun, 14 Jun 2020 06:00:44 -0400 Received: from forward106p.mail.yandex.net ([77.88.28.109]:57751) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkPRS-0007kC-LX; Sun, 14 Jun 2020 06:00:44 -0400 Received: from mxback21j.mail.yandex.net (mxback21j.mail.yandex.net [IPv6:2a02:6b8:0:1619::221]) by forward106p.mail.yandex.net (Yandex) with ESMTP id E1F8A1C80E99; Sun, 14 Jun 2020 13:00:26 +0300 (MSK) Received: from iva6-2d18925256a6.qloud-c.yandex.net (iva6-2d18925256a6.qloud-c.yandex.net [2a02:6b8:c0c:7594:0:640:2d18:9252]) by mxback21j.mail.yandex.net (mxback/Yandex) with ESMTP id W66fPPVVSQ-0Q6moEim; Sun, 14 Jun 2020 13:00:26 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592128826; bh=TdvUtzl7NdEnlL/EeQnsS5nrreHOcrEyOhW31S4yE3I=; h=In-Reply-To:To:From:Subject:Message-ID:References:Date; b=ZRx1W1W9iTPSQEqQVMdyXWpN7xlaOvUBxvs3BaKqskHmD/uo9fN77S0bji5XXlkD9 gWlb6tShN0zDTq+ixCw0CSWqWoq6w9GpT6UY886smZz0jt5YGBRbqFrHMBbzVWifpC VneqtrNzxuwkL3j/c+NEf8TZmS6q+7s4+d1Y/8os= Authentication-Results: mxback21j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva6-2d18925256a6.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id ibZg6ZoGuU-0PFWmH45; Sun, 14 Jun 2020 13:00:26 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Date: Sun, 14 Jun 2020 13:00:25 +0300 In-Reply-To: <9e4d15f7-a6ef-1924-dcc1-00e256558446@yandex.ru> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <7e3969862c2d3f76fc812f4231d95e80e37c4c25.camel@yandex.ru> <9e4d15f7-a6ef-1924-dcc1-00e256558446@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=77.88.28.109; envelope-from=hi-angel@yandex.ru; helo=forward106p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 06:00:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 10:00:45 -0000 On Sun, 2020-06-14 at 02:23 +0300, Dmitry Gutov wrote: > On 14.06.2020 02:00, Konstantin Kharlamov wrote: > > > So, they make a non-trivial functional change ("non-trivial" because here we > > don't care of trivials like "rename a thing" or "factor out the code". These > > can > > often be described just in the commit title alone), let's say, they replaced > > a > > "list" container in a few functions to a binary tree for whatever reason. > > Now > > we'd like to know why did that happen. > > We might want to know more things than that, actually. > > > In my case they clearly would not produce anything useful, they'll maybe > > write > > "replace list to a binary tree" and that's it. Why? Who knows. > > Then I'll probably ask. If the preceding discussion, or the contents of > the associated bug report, haven't made the reason clear already. > > > How will they behave in your case? Well, they'll collect the functions list, > > then would scrupulously write an immensely useful information against each > > one > > "Replace list to a binary tree here". You see, it is the same here. > > Let's imagine that I know that in the codebase 'list' is used in many > places, and then in the ChangeLog entry I see that only some of them > have been replaced. > > Then I cut the review short and ask about the rest of the places. > > Similarly if they actually described the reason the change, but the > enumerated changes don't match that goal (e.g. some changes in some > files are missing). > > Another concern that can come up are whether they added > backward-compatibility aliases (to satisfy our backward compatibility > policy), which should also be apparent from the ChangeLog style entry. Etc. Sure, all you say sounds reasonable. The point I'm trying to make is that you have to ask the author for better commit message either way. IOW, you have to ask that disregarding whether they're obliged to write down the list of functions changed or not. So having the list didn't help here. Admittedly, I might be the wrong person to make up an example since I didn't see the point in this list to begin with. Better examples are certainly welcome. > > Sorry if I'm misreading, but given the context of comparing commit-messages > > with > > the list and without, I can only interpret the "yes" as "yes, one sentence > > that > > says the code pattern is factored out from all the functions is not enough, > > I > > need a similar sentence to be repeated 34 times". Is there other > > interpretation > > that I do not see, or do I get it right? > > Yes, as in "I'd have to review the diff anyway", and no, as in "I won't > have to spend as much time doing it as I might have without the > ChangeLog style summary". Please note we're discussing whether having the list of functions changed is worth it comparing to just the commit message. Having a good commit message is just as enough, so you "won't have to spend as much time doing it". Like, in the example with factoring out a code from 34 functions it's enough to just write "Many functions use same code pattern to do X. Factor it out to a separate function Y". What changes if instead of this one sentence you have 34 lines with function names? Besides, as I hopefully showed in my prev. paragraph, if an author is bad in writing commit messages, having that would hardly change anything. From MAILER-DAEMON Sun Jun 14 06:41:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkQ56-0003OP-Ly for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 06:41:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkQ55-0003OC-4e for emacs-devel@gnu.org; Sun, 14 Jun 2020 06:41:39 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:38024) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkQ53-0006I1-5H; Sun, 14 Jun 2020 06:41:38 -0400 Received: by mail-wm1-x32c.google.com with SMTP id f185so11988955wmf.3; Sun, 14 Jun 2020 03:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=RF2kS4iwUcoxHEFIcfyC8O/EJ/+Q7swv666xNFTseR4=; b=OavJb0fBrLMycC7l9n34ufKTbXwkZ89rCQd1I+Pv5+5tF995aYLMX4zV31L9eEmBrd yHY7fD55FgZ92xPwjnF/86j75qwvrWiJMfnqWeUrNHinNmg8WEy17zapInzsayAOquXG iHXs1Yy5jKzj9ZI8z/DX9aFzMkVIY6fYizef5Aa0ulUt0eFim3SgUcy9o1Hqjb/A6aJp 6T9IfwB3y9ZEIBpNuhDyHvXCSxlb5fa4FgAaSveuOogHyaqBxUTNMoozcIsl81lbgvcg b04qmcAvrPkN2jK8rvBiwWFqOa9SOnsLzmH5Mk8nq2jlf95zVDizgcOZtS7MYjYqNjCl Qk1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=RF2kS4iwUcoxHEFIcfyC8O/EJ/+Q7swv666xNFTseR4=; b=ViyY1A2ousZpihE66P+rJ/B7WjbrmnA71woEyDnjPujw33xlXs4cg5PQGTSwbKSYDR pNstjGV248suCSA53k7VqfHFhdJqNSyr3iO+F+sTbiWejpLIdMQfzIH1wnyT/GEHPoop Ep+XBgNOIfRU5+3HG4ufROHJlJqBmO9f7q+kZ44By7hkhH9EQfjFve9h8SXucvdqgZxu qWcBpsZVRmhM2tLdPS7dxu11ikqGG53PYht1qF10WpZ+qvxXIyJDmSo3MS/gbOKhzxjM lrHWgQUePpBmB6l+KrfkibQkMXdEm2iK37tsnZR17j3iLWYdEj/8D/lD4US5Z8jmB5DL AlIw== X-Gm-Message-State: AOAM533pK1zPOzDmJ8/0UDNlhggUEAZESuBqgUuN6NFSweSdP5TFM3Bx FvvGYuFoQyEnlXuNaeiqEodWBD2/KoY= X-Google-Smtp-Source: ABdhPJxF+wM2GHA1+kTOA1FLOvwFS47+AybEv7DmY8wGibcC4wBpMJxEmaJuXG5s3KHmKCZzccgX4g== X-Received: by 2002:a1c:cc0d:: with SMTP id h13mr8413211wmb.168.1592131283413; Sun, 14 Jun 2020 03:41:23 -0700 (PDT) Received: from krug (29.210.137.78.rev.vodafone.pt. [78.137.210.29]) by smtp.gmail.com with ESMTPSA id m24sm17438197wmi.14.2020.06.14.03.41.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 03:41:21 -0700 (PDT) From: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= To: Konstantin Kharlamov Cc: Dmitry Gutov , Stefan Kangas , Eli Zaretskii , Emacs developers Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> Date: Sun, 14 Jun 2020 11:41:15 +0100 In-Reply-To: (Konstantin Kharlamov's message of "Sat, 13 Jun 2020 23:30:00 +0300") Message-ID: <874krex73o.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=joaotavora@gmail.com; helo=mail-wm1-x32c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 10:41:39 -0000 Konstantin Kharlamov writes: > Oh, sure I can be mistaken. I see you replied to Dmitry's email, I had a = follow- > up on it. Does my follow-up mail change your opinion, or perhaps do you h= ave > some example in mind that a good commit message without the list would not > solve? I might have read it. I'm not saying good commit messages are impossible without the summarizing list; I'm just saying it's a good thing to have, something I've grown accustomed to. When composing them, they're a good exercise in self-review. But of course there's more ways to skin a cat. This just happens to be the way we use here. It's not "for fun". Of course is a mental cost in composing them, especially if you don't do it often and use the friendly C-x 4 a shortcut. But there is a gain, too. Jo=C3=A3o From MAILER-DAEMON Sun Jun 14 08:14:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkRWY-0001fq-SH for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 08:14:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkRWX-0001fj-06 for emacs-devel@gnu.org; Sun, 14 Jun 2020 08:14:05 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:38477) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkRWU-0006pO-LG for emacs-devel@gnu.org; Sun, 14 Jun 2020 08:14:04 -0400 Received: by mail-wr1-x42b.google.com with SMTP id e1so14317258wrt.5 for ; Sun, 14 Jun 2020 05:14:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=RRrZtLTVFAAKU77uTkwuHiA9Y3pqjFHY2CMx3P2zOl0=; b=CWwVfElWyuLYiCfqmHFtEctspZ0LllhEcs/ZqWYUh+wiJ7t8r5ITyJq+5QKlq90uMz 0OQhkUmqpFe1UEjYOUJaycdqY28tyJ9E135oa6lG2An+7t0twmR+HDT0hvxCaIpKEJJf XFjnOBhBUg6JQO5HfVMe6TknzgvkJ5ImmDNMIGkUVGa2NE/eUxuLeCnnwVj7n0MWqp9d wdFXfZjezvtK2DIK8aCtXyg3WXUAwtgdQKAFHYQ8lhCDAt9hqSjCSCigCLoV/3dQ4ZNO jHQ5TuCe5Ai4XdsO/qBz1vlbkC51f8UlNtLw9QiCvUPL4hlMWhTQqJoVESOGYT97YCVj UkPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=RRrZtLTVFAAKU77uTkwuHiA9Y3pqjFHY2CMx3P2zOl0=; b=nEd20NhJgj9JWwhjKTaxf9ebk2cwCKt0ZKpSiob/+3BXhczwbIstdKZVhiD2OCbd1d RKP0113bU3W2npZUueeYGnrHUiqjoXzOF8vmrUkVQhP749KlcX4T/izDSiQsWsu3b9yJ PKmb0iuHsR1XM2OoSkAVzRLLnh2wWm0ZdYYP8ic2fu0ma6uojOKMx4NVWROwTQF8AMP7 d8m6f2lIB41FPY9AZ7m6bMjpmu5c/RtqyIwk4lWUuoQnfYjdv0rBfYlgpcNRrNlCPYGx if1R+IquHjXk4+e7Y0RHxr9amUbLZ68gU+q6wuC3niiad3JOqZCfJdRYJPuj6ktFx+xF OzVQ== X-Gm-Message-State: AOAM532yEBOvsIQTTQ8LOPEKdVlBe9SdwT7VXhhcpiuHAyv9pV0rsQWH YH4SeiHKhHmNf3Hriyp/V77XA8cKEOkRVQ== X-Google-Smtp-Source: ABdhPJyexgT4LZw0LP+cfLLEHK/ZrkzOdfpUaibEzRkseXxvFAENdAFsMN57g9g0LYuyWoskfAe/GQ== X-Received: by 2002:adf:d851:: with SMTP id k17mr23729653wrl.30.1592136840026; Sun, 14 Jun 2020 05:14:00 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id b8sm20156251wrs.36.2020.06.14.05.13.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 05:13:59 -0700 (PDT) From: "Basil L. Contovounesios" To: emacs-devel@gnu.org Cc: Stefan Monnier Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> Date: Sun, 14 Jun 2020 13:13:57 +0100 In-Reply-To: <87r1uihtsu.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 11:37:37 +0200") Message-ID: <87blllx2t6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::42b; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42b.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 12:14:05 -0000 Tassilo Horn writes: > Attach is my first attempt at doing so and I'd welcome comments. Thanks, just some minor comments from me. [...] > modified lisp/progmodes/bug-reference.el > @@ -60,6 +60,7 @@ bug-reference-url-format > you need to add a `bug-reference-url-format' property to it: > \(put \\='my-bug-reference-url-format \\='bug-reference-url-format t) > so that it is considered safe, see `enable-local-variables'.") > +(make-variable-buffer-local 'bug-reference-url-format) Nit: You can use defvar-local instead. > ;;;###autoload > (put 'bug-reference-url-format 'safe-local-variable > @@ -75,6 +76,7 @@ bug-reference-bug-regexp > :type 'regexp > :version "24.3" ; previously defconst > :group 'bug-reference) > +(make-variable-buffer-local 'bug-reference-bug-regexp) Nit: You can use ':local t' instead. > ;;;###autoload > (put 'bug-reference-bug-regexp 'safe-local-variable 'stringp) > @@ -139,6 +141,139 @@ bug-reference-push-button > (when url > (browse-url url)))))) > > +(defcustom bug-reference-setup-functions nil > + "A list of function for setting up bug-reference mode. Nit: Either "Bug-Reference Mode" or "`bug-reference-mode'". > +A setup function should return non-nil if it set > +`bug-reference-bug-regexp' and `bug-reference-url-format' > +appropiately for the current buffer. The functions are called in "appropriately" > +sequence stopping as soon as one signalled a successful setup. The Emacs sources predominantly use the spelling "signaled". > +They are only called if the two variables aren't set already, > +e.g., by a local variables section. > + > +Also see `bug-reference-default-setup-functions'. > + > +The `bug-reference-setup-functions' take preference over "take precedence" > +`bug-reference-default-setup-functions', i.e., they are > +called before the latter." > + :type '(list function) Either 'hook or '(repeat function). > + :version "28.1" > + :group 'bug-reference) > + > +(defun bug-reference-try-setup-from-vc () > + "Try setting up `bug-reference-bug-regexp' and > +`bug-reference-url-format' from the version control system of the > +current file." Nit: Please follow the recommendation in "(elisp) Documentation Tips" of fitting the first sentence on a single line. > + (when (buffer-file-name) > + (let* ((backend (vc-responsible-backend (buffer-file-name) t)) Nit: Any reason not to use the buffer-local variable buffer-file-name instead? > + (url (pcase backend > + ('Git (string-trim This needs (eval-when-compile (require 'subr-x)). > + (shell-command-to-string > + "git ls-remote --get-url")))))) Doesn't VC provide a robust way to get output from Git? > + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) > + (when (string-match url-rx url) > + (setq bug-reference-bug-regexp bug-rx) > + (setq bug-reference-url-format > + (if (functionp bug-url-fmt) > + (funcall bug-url-fmt) > + bug-url-fmt))))) > + (when (and url > + ;; If there's a space in the url, it's propably an > + ;; error message. > + (not (string-match-p "[[:space:]]" url))) > + (or > + ;; GNU projects on savannah. FIXME: Only a fraction of > + ;; them uses debbugs. > + (maybe-set "git\\.\\(sv\\|savannah\\)\\.gnu\\.org:" ^^^ Nit: Can this be a shy group? > + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)" > + "https://debbugs.gnu.org/%s") > + ;; GitHub projects. Here #17 may refer to either an issue > + ;; or a pull request but visiting the issue/17 web page > + ;; will automatically redirect to the pull/17 page if 17 is > + ;; a PR. Explicit user/project#17 links to possibly > + ;; different projects are also supported. > + (maybe-set > + "[/@]github.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" > + "\\([.A-Za-z0-9_/-]+\\)?\\(?:#\\)\\([0-9]+\\)" ^^^^^^^^^ Nit: Why is this in a group? > + (lambda () > + (let ((ns-project (match-string 1 url))) > + (lambda () > + (concat "https://github.com/" > + (or > + ;; Explicit user/proj#18 link. > + (match-string 1) > + ns-project) > + "/issues/" > + (match-string 2)))))) > + ;; GitLab projects. Here #18 is an issue and !17 is a > + ;; merge request. Explicit namespace/project#18 references > + ;; to possibly different projects are also supported. > + (maybe-set > + "[/@]gitlab.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" > + "\\(?1:[.A-Za-z0-9_/-]+\\)?\\(?3:#\\|!\\)\\(?2:[0-9]+\\)" Nit: Isn't this the same as "\\(?3:[!#]\\)"? > + (lambda () > + (let ((ns-project (match-string 1 url))) > + (lambda () > + (concat "https://gitlab.com/" > + (or (match-string 1) > + ns-project) > + "/-/" > + (if (string= (match-string 3) "#") > + "issues/" > + "merge_requests/") > + (match-string 2)))))))))))) > + > +(defun bug-reference-try-setup-from-gnus () > + (when (and (memq major-mode '(gnus-summary-mode gnus-article-mode)) > + (boundp 'gnus-newsgroup-name) > + gnus-newsgroup-name) (and (derived-mode-p 'gnus-summary-mode 'gnus-article-mode) (bound-and-true-p gnus-newsgroup-name)) or (and (derived-mode-p 'gnus-mode) (bound-and-true-p gnus-newsgroup-name)) [...] > +(defun bug-reference--init () > + "Initialize `bug-reference-mode'." > + (progn Nit: Isn't this progn redundant? > + ;; Automatic setup only if the variables aren't already set, e.g., > + ;; by a local variables section in the file. > + (unless (and bug-reference-bug-regexp > + bug-reference-url-format) > + (or > + (with-demoted-errors > + "Error while running bug-reference-setup-functions: %S" > + (run-hook-with-args-until-success > + 'bug-reference-setup-functions)) > + (with-demoted-errors > + "Error while running bug-reference-default-setup-functions: %S" > + (run-hook-with-args-until-success > + 'bug-reference-default-setup-functions)))) > + (jit-lock-register #'bug-reference-fontify))) [...] > ;;;###autoload > -(defun vc-responsible-backend (file) > +(defun vc-responsible-backend (file &optional no-error) > "Return the name of a backend system that is responsible for FILE. > > If FILE is already registered, return the > @@ -967,7 +967,10 @@ vc-responsible-backend > > Note that if FILE is a symbolic link, it will not be resolved -- > the responsible backend system for the symbolic link itself will > -be reported." > +be reported. > + > +If NO-ERROR is nil, signal an error that no VC backend is > +responsible for the given file." > (or (and (not (file-directory-p file)) (vc-backend file)) > (catch 'found > ;; First try: find a responsible backend. If this is for registration, NO-ERROR seems to be a no-op in this patch. Instead of changing the function's arglist, would it be any worse to do the following? (ignore-errors (vc-responsible-backend ...)) Thanks, -- Basil From MAILER-DAEMON Sun Jun 14 08:57:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkSCA-0003sA-2d for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 08:57:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34056) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkSC7-0003qg-Ob for emacs-devel@gnu.org; Sun, 14 Jun 2020 08:57:03 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44377) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkSC6-0005lm-6z; Sun, 14 Jun 2020 08:57:02 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:42621) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkSC5-0003f7-8e; Sun, 14 Jun 2020 08:57:01 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id C94BC27C0054; Sun, 14 Jun 2020 08:57:00 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 08:57:00 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedgiedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhi lhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnheple fhudeuvddvudetteegtdffheeuuddtjeethfejteegtefhffdtfffgudevkeffnecuffho mhgrihhnpehgnhhurdhorhhgnecukfhppeelfedrvdefiedrudefiedrfedunecuvehluh hsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhrnhdomhgv shhmthhprghuthhhphgvrhhsohhnrghlihhthidqkeeijeefkeejkeegqdeifeehvdelke dqthhsughhpeepghhnuhdrohhrghesfhgrshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 688B83061856; Sun, 14 Jun 2020 08:56:58 -0400 (EDT) From: Tassilo Horn To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, Stefan Monnier Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87blllx2t6.fsf@tcd.ie> Mail-Followup-To: "Basil L. Contovounesios" , emacs-devel@gnu.org, Stefan Monnier Date: Sun, 14 Jun 2020 14:56:56 +0200 In-Reply-To: <87blllx2t6.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 14 Jun 2020 13:13:57 +0100") Message-ID: <875zbt24br.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 12:57:04 -0000 "Basil L. Contovounesios" writes: Hi Basil, I'll incorporate your suggestions later. >> + (url (pcase backend >> + ('Git (string-trim > > This needs (eval-when-compile (require 'subr-x)). Or simply remove the "p" from "pcase", I guess. >> + (shell-command-to-string >> + "git ls-remote --get-url")))))) > > Doesn't VC provide a robust way to get output from Git? vc-git--call maybe? >> + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) >> + (when (string-match url-rx url) >> + (setq bug-reference-bug-regexp bug-rx) >> + (setq bug-reference-url-format >> + (if (functionp bug-url-fmt) >> + (funcall bug-url-fmt) >> + bug-url-fmt))))) >> + (when (and url >> + ;; If there's a space in the url, it's propably an >> + ;; error message. >> + (not (string-match-p "[[:space:]]" url))) >> + (or >> + ;; GNU projects on savannah. FIXME: Only a fraction of >> + ;; them uses debbugs. >> + (maybe-set "git\\.\\(sv\\|savannah\\)\\.gnu\\.org:" > ^^^ > Nit: Can this be a shy group? Yes. Is is generally better to use shy groups if we aren't going to do anything with the groups anyway? >> ;;;###autoload >> -(defun vc-responsible-backend (file) >> +(defun vc-responsible-backend (file &optional no-error) >> "Return the name of a backend system that is responsible for FILE. >> >> If FILE is already registered, return the >> @@ -967,7 +967,10 @@ vc-responsible-backend >> >> Note that if FILE is a symbolic link, it will not be resolved -- >> the responsible backend system for the symbolic link itself will >> -be reported." >> +be reported. >> + >> +If NO-ERROR is nil, signal an error that no VC backend is >> +responsible for the given file." >> (or (and (not (file-directory-p file)) (vc-backend file)) >> (catch 'found >> ;; First try: find a responsible backend. If this is for registration, > > NO-ERROR seems to be a no-op in this patch. Indeed. Obviously it should have done what the docstring says. > Instead of changing the function's arglist, would it be any worse to > do the following? > > (ignore-errors (vc-responsible-backend ...)) IMHO, that it errors if no backend is found is the actual error but we cannot change that anymore. And to me "what backend would this file use" is a very common question. Even vc.el itself encodes that (dolist (backend vc-handled-backends) ...) form again in `vc-backend-for-registration' in order not to trigger the error semantics of `vc-responsible-backend'. But that's not important to me. I can also leave it as it is. Bye, Tassilo PS: I like your style of suggesting improvements using questions which all have a positive answer. Did you visit a lecture of Stefan? ;-) From MAILER-DAEMON Sun Jun 14 09:23:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkSc1-0003dG-5h for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 09:23:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkSc0-0003d8-3A for emacs-devel@gnu.org; Sun, 14 Jun 2020 09:23:48 -0400 Received: from mx.sdf.org ([205.166.94.20]:58064) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkSby-00021j-7F; Sun, 14 Jun 2020 09:23:47 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 05EDNXsU013092 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Sun, 14 Jun 2020 13:23:33 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 05EDNX7j032055; Sun, 14 Jun 2020 13:23:33 GMT From: Andrea Corallo To: emacs-devel@gnu.org Cc: Eli Zaretskii , Stefan Monnier Subject: Re: On elisp running native - Update 9 References: <83sgl0lchm.fsf@gnu.org> <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> Date: Sun, 14 Jun 2020 13:23:33 +0000 In-Reply-To: (Andrea Corallo's message of "Sat, 16 May 2020 15:24:01 +0000") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 09:23:34 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 13:23:48 -0000 Hi all, I wrote an update about what is going on in the native-comp branch. In summary is about the recent big improvements on compile time, lambda performance and portability. https://akrl.sdf.org/gccemacs.html I believe in the current state the branch should be much more accessible to 32bit systems and constrained hardware in general. I think the next topics coming for me are dynamic scope compilation and primitive function advising. Regards Andrea -- akrl@sdf.org From MAILER-DAEMON Sun Jun 14 09:40:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkSrw-0000hy-QT for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 09:40:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkSrv-0000hS-2q for emacs-devel@gnu.org; Sun, 14 Jun 2020 09:40:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45315) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkSru-0004y0-7r; Sun, 14 Jun 2020 09:40:14 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jkSrt-0006OW-31; Sun, 14 Jun 2020 09:40:13 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org In-Reply-To: <874krfnq47.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: Support for multiple batteries Reply-To: rms@gnu.org References: <87tuzhy49m.fsf@tcd.ie> <874krfnq47.fsf@tcd.ie> Message-Id: Date: Sun, 14 Jun 2020 09:40:13 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 13:40:15 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > This can be perceived as a regression > on multi-battery systems because battery-upower currently assumes a > single battery, whereas the previous defaults of battery-status-function > on modern GNU/Linux systems (battery-linux-sysfs and > battery-linux-proc-acpi) support multiple batteries. The patch in [5] > adds support for multiple batteries to battery-upower as well, so that > it can remain the default backend when applicable. It sounds like that could make it work again for me. Would you please tell me when it is installed, so I can try it? > For example, they sum the current energy and energy-when-full of each > battery, and divide the former by the latter to get the combined load > percentage. That sounds like the right thing for them to do. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sun Jun 14 09:43:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkSui-0001xC-V9 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 09:43:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53384) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkSuh-0001wU-Ls for emacs-devel@gnu.org; Sun, 14 Jun 2020 09:43:07 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45432) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkSuh-0005Qf-1s; Sun, 14 Jun 2020 09:43:07 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jkSuf-0006qa-Su; Sun, 14 Jun 2020 09:43:06 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Drew Adams Cc: contovob@tcd.ie, emacs-devel@gnu.org In-Reply-To: <16f5e945-9d98-401a-8c7a-c568b2d0ddc2@default> (message from Drew Adams on Sat, 13 Jun 2020 19:42:21 +0000 (UTC)) Subject: Re: Support for multiple batteries Reply-To: rms@gnu.org References: <87tuzhy49m.fsf@tcd.ie> <16f5e945-9d98-401a-8c7a-c568b2d0ddc2@default> Message-Id: Date: Sun, 14 Jun 2020 09:43:05 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 13:43:07 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Ohmm, "currently" in this context must have > something to do with E/R, no? ;-) Cute. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sun Jun 14 09:49:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkT0c-0004Lk-Oh for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 09:49:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkT0b-0004Ld-2Q for emacs-devel@gnu.org; Sun, 14 Jun 2020 09:49:13 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:26694) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkT0Y-0006Sh-Tf for emacs-devel@gnu.org; Sun, 14 Jun 2020 09:49:12 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id C2B76100311; Sun, 14 Jun 2020 09:49:07 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 307831002FA; Sun, 14 Jun 2020 09:49:06 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592142546; bh=BRLT/3SKuY9YccKH6XGA99imsH29ekXZQn2cZnrHcgg=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=MxfGlXiCAYyPle91ZTt+Teo3Cxc2alCofJZcOYNCsID6XxUXcM0SLcHhu3xmuUF8k jk0knEEZIE+uu+2TblmJcB0xCxZVSZNvTXojfse1iFl2W7Ic+mD4qL1fbPvt1WKMDc NJvmqc6MnfopvQVZxQnYzgwe4yun5p3jgaF26UtJxT+8hdd2nfQ8jhADXBEJo9KoVc 2gUU4hLhOOSOuOQj2MYy1VWjBJ4LV4QZHx7IjEDnaF3nezscnLnTbaGt7umuuFTqXU lQjc41LJXaRUMPti+oxyGCgJ0EB4qKKygtvTmZy7lRwlW3KYllRg7ANvJsG5q0R6b9 vFqnwqI5OiQqg== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id EAB771204BA; Sun, 14 Jun 2020 09:49:05 -0400 (EDT) From: Stefan Monnier To: Yuri Khan Cc: =?windows-1252?Q?I=F1igo?= Serna , Emacs developers , Dmitry Gutov Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 Message-ID: References: <87pna2eksc.fsf@inigo.katxi.org> <87mu56eehq.fsf@inigo.katxi.org> Date: Sun, 14 Jun 2020 09:49:04 -0400 In-Reply-To: (Yuri Khan's message of "Sun, 14 Jun 2020 15:33:04 +0700") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.338 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain KAM_NUMSUBJECT 0.5 Subject ends in numbers excluding current years Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 09:49:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 13:49:13 -0000 >> This might beg for some better documentation about the string returned >> by `json-encode`. After all, AFAIK the JSON format requires utf-8 >> encoding, so it would make a lot of sense for `json-encode` to do the >> utf-8 encoding directly and make sure it always returns a unibyte string. > > An application might not want to send the encoded string over the > network right away. It might want to insert it into a buffer. I didn't suggest to change the behavior, only to document it because both outputs can make sense, so common sense is not sufficient to know what should be returned. Stefan From MAILER-DAEMON Sun Jun 14 10:22:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkTWe-0000yy-Pz for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 10:22:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47762) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkTWb-0000xe-Qw for emacs-devel@gnu.org; Sun, 14 Jun 2020 10:22:17 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:28912) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkTWY-0003rd-Dj for emacs-devel@gnu.org; Sun, 14 Jun 2020 10:22:17 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5AF061002FC; Sun, 14 Jun 2020 10:22:12 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 0AC3F1002D8; Sun, 14 Jun 2020 10:22:10 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592144530; bh=4Gylds2Y99TKFGxGMppsItaH3kQ6Gd7fDn0FwsscY1I=; h=From:To:Subject:References:Date:In-Reply-To:From; b=CV2uQ7ovOT+Y7bgdf7P4SHNJQueuWC8pexOmvpxtUJ5Auiqe0oNXu6ej9alfQNpBA AtgueAwhm3ZvRaKxvyKmPwAho79gdi+jS26non8LTpZWoQR2GiGUJqgYcK+wA/lO4S PmDHc/EWOnPjjqXsxH7yV48AcG41jJOsM72u/ROyFh9gF+jTvd7owUWRGMccl7S0NZ jho2yem8nOxVsfwYXVO3Y/FITGWcmGyPNYSJZloXpgC5tliTPw3dKyk4eKDc8sEEbW 5mZAR20LqxS53bRknblEZZr4wxgGgXq/CARAvWXUiCz5kCIXN6stJEWWQq2RC/sSQn gBpM6RyU0Wuvw== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 78AA21202E2; Sun, 14 Jun 2020 10:22:09 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode Message-ID: References: <87r1uihtsu.fsf@gnu.org> Date: Sun, 14 Jun 2020 10:22:08 -0400 In-Reply-To: <87r1uihtsu.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 11:37:37 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 09:49:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 14:22:18 -0000 > +(defcustom bug-reference-setup-functions nil > + "A list of function for setting up bug-reference mode. > +A setup function should return non-nil if it set > +`bug-reference-bug-regexp' and `bug-reference-url-format' > +appropiately for the current buffer. The functions are called in > +sequence stopping as soon as one signalled a successful setup. > +They are only called if the two variables aren't set already, > +e.g., by a local variables section. > + > +Also see `bug-reference-default-setup-functions'. > + > +The `bug-reference-setup-functions' take preference over > +`bug-reference-default-setup-functions', i.e., they are > +called before the latter." > + :type '(list function) > + :version "28.1" > + :group 'bug-reference) The :group is redundant ;-) More importantly, I'm wondering what was your motivation for introducing two hooks (`bug-reference-setup-functions` and `bug-reference-default-setup-functions`). Maybe that should be explained in a comment? > + (let* ((backend (vc-responsible-backend (buffer-file-name) t)) > + (url (pcase backend > + ('Git (string-trim > + (shell-command-to-string > + "git ls-remote --get-url")))))) This should be moved to a new VC function. Along the way I expect some related problems will be fixed such as: - Unneeded forking of a shell only to immediately fork git. - Hardcoding "git" when we have `vc-git-command`. > + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) > + (when (string-match url-rx url) This is mis-indented. It's not your fault, but I recommend you override the auto-indentation :-( > + (setq bug-reference-bug-regexp bug-rx) > + (setq bug-reference-url-format > + (if (functionp bug-url-fmt) > + (funcall bug-url-fmt) > + bug-url-fmt))))) > + (when (and url > + ;; If there's a space in the url, it's propably an > + ;; error message. > + (not (string-match-p "[[:space:]]" url))) > + (or > + ;; GNU projects on savannah. FIXME: Only a fraction of > + ;; them uses debbugs. > + (maybe-set "git\\.\\(sv\\|savannah\\)\\.gnu\\.org:" > + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)" > + "https://debbugs.gnu.org/%s") > + ;; GitHub projects. Here #17 may refer to either an issue > + ;; or a pull request but visiting the issue/17 web page > + ;; will automatically redirect to the pull/17 page if 17 is > + ;; a PR. Explicit user/project#17 links to possibly > + ;; different projects are also supported. > + (maybe-set > + "[/@]github.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" > + "\\([.A-Za-z0-9_/-]+\\)?\\(?:#\\)\\([0-9]+\\)" > + (lambda () > + (let ((ns-project (match-string 1 url))) > + (lambda () > + (concat "https://github.com/" > + (or > + ;; Explicit user/proj#18 link. > + (match-string 1) > + ns-project) > + "/issues/" > + (match-string 2)))))) > + ;; GitLab projects. Here #18 is an issue and !17 is a > + ;; merge request. Explicit namespace/project#18 references > + ;; to possibly different projects are also supported. > + (maybe-set > + "[/@]gitlab.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" > + "\\(?1:[.A-Za-z0-9_/-]+\\)?\\(?3:#\\|!\\)\\(?2:[0-9]+\\)" > + (lambda () > + (let ((ns-project (match-string 1 url))) > + (lambda () > + (concat "https://gitlab.com/" > + (or (match-string 1) > + ns-project) > + "/-/" > + (if (string= (match-string 3) "#") > + "issues/" > + "merge_requests/") > + (match-string 2)))))))))))) Do we really need those functions returning functions? Wouldn't it work just as well if we do just `(setq bug-reference-url-format bug-url-fmt)` and drop the outer `(lambda ()`? More importantly, I think it would be even much nicer to make this into a list of (URL-RX BUG-RX BUG-URL-FORMAT) So users can easily add their own entries for other repository-repositories. > +(defun bug-reference-try-setup-from-gnus () > + (when (and (memq major-mode '(gnus-summary-mode gnus-article-mode)) > + (boundp 'gnus-newsgroup-name) > + gnus-newsgroup-name) > + (let ((debbugs-regexp > + ;; TODO: Obviously there are more, so add them. > + (regexp-opt '("emacs" "auctex" "reftex" > + "-devel@gnu.org" "ding@gnus.org")))) > + (when (or (string-match-p debbugs-regexp gnus-newsgroup-name) > + (and > + gnus-article-buffer > + (with-current-buffer gnus-article-buffer > + (let ((headers (mail-header-extract))) > + (when headers > + (or (string-match-p > + debbugs-regexp > + (or (mail-header 'from headers) "")) > + (string-match-p > + debbugs-regexp > + (or (mail-header 'to headers) "")) > + (string-match-p > + debbugs-regexp > + (or (mail-header 'cc headers) "")))))))) > + (setq bug-reference-bug-regexp > + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)") > + (setq bug-reference-url-format > + "https://debbugs.gnu.org/%s"))))) Same here: using a list to make it easy for users to add their own mailing lists. > +;;;###autoload > +(defvar bug-reference-default-setup-functions > + (list #'bug-reference-try-setup-from-vc > + #'bug-reference-try-setup-from-gnus) > + "Like `bug-reference-setup-functions' for packages to hook in.") Why autoloaded? > @@ -146,7 +281,7 @@ bug-reference-mode > "" > nil > (if bug-reference-mode > - (jit-lock-register #'bug-reference-fontify) > + (bug-reference--init) > (jit-lock-unregister #'bug-reference-fontify) > (save-restriction > (widen) FWIW, I'd rather keep the `jit-lock-register` call next to its matching `jit-lock-unregister`. So if we move it to `bug-reference--init`, we should probably move the `jit-lock-unregister` to a matching `bug-reference--uninit`. > modified lisp/vc/vc.el > @@ -957,7 +957,7 @@ vc-backend-for-registration > (throw 'found bk)))) > > ;;;###autoload > -(defun vc-responsible-backend (file) > +(defun vc-responsible-backend (file &optional no-error) > "Return the name of a backend system that is responsible for FILE. > > If FILE is already registered, return the > @@ -967,7 +967,10 @@ vc-responsible-backend > > Note that if FILE is a symbolic link, it will not be resolved -- > the responsible backend system for the symbolic link itself will > -be reported." > +be reported. > + > +If NO-ERROR is nil, signal an error that no VC backend is > +responsible for the given file." > (or (and (not (file-directory-p file)) (vc-backend file)) > (catch 'found > ;; First try: find a responsible backend. If this is for registration, > --8<---------------cut here---------------end--------------->8--- Looks like a spurious hunk got into your patch ;-) Stefan From MAILER-DAEMON Sun Jun 14 10:56:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkU3p-00086k-OY for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 10:56:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkU3m-000854-Qe for emacs-devel@gnu.org; Sun, 14 Jun 2020 10:56:35 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:39686) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkU3k-0001hd-Ol for emacs-devel@gnu.org; Sun, 14 Jun 2020 10:56:34 -0400 Received: by mail-wm1-x330.google.com with SMTP id o8so2716574wmh.4 for ; Sun, 14 Jun 2020 07:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=Sar2H5MWq3urWcB9W2WVb4pNrr4wJmoQxX+egFcaAn4=; b=a5FnFH5Cl2yW/cFRRMn6fL5z0Zp7T2i9z3WsyfL03k+RFI44Sh1niL53g954doequI HKnovSJX361FxVZ+kimJvhfJYGdO8+Vo+CJMCcpkDLlirI1nStX2CRDYfcRlchp+Nj06 z0Iss6WuUsu4xiZmS+Q6srRN/NikvTzMJzRzXjSLZYP5lFpqisOs8xPycv8dwpm1MFr9 5R4UI4TiPyO2ggfXhqTtrno+Zg66zVrZPMvzkvkkoserX9AwL4AgN96xJ6/qSl1AS9Tn JgaZeC+5sTVGBxmhrjefc8ksnELbxQa2Hf1PygyYKwjXvFFs/9iMmDmL39m1yeaw8DVE 9Pxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=Sar2H5MWq3urWcB9W2WVb4pNrr4wJmoQxX+egFcaAn4=; b=LnkQDHMv18F2AnCKw78v1eYRMDUtdpcfqlrN1CbQV5eoKDAMPFWFYx9Y9qVoLtTLqo 5vBBYuiVgJUsYk0TEOQdfNDJE07Ezp5hY+bzVz3Zcjz+FBTsh8WMPt62dJ5ntYajROrH tHUWxiMvBQvwvvJt2PR/+JMCg4p4wjOvdEUl1ImOzy9qN+Pkx7/zACWO1pu+uzJQUO4X FVidX3zxHnaYnYova40MFo+N5clbZ9qMpWYduKuBaPwrv56VHruWzbtSGf9MfVwK/Ekg 3Hz+dyGizTVf0mpABrWAGv0SIS3tXdsvs6DUMYnRODwyMgfi13HUIs6YlpIgOLCWU4Sj povg== X-Gm-Message-State: AOAM532mBgBn4ILCFKWfvMfkwZF1s6mo8tOKYjXKyoURg3BM4w3xrbkS JuoJX7wse0MUU9Y2a4l9ShdkUprEHkwVng== X-Google-Smtp-Source: ABdhPJwEyak/VJAH7KPHzoaRBuIMcWtJy3PEUCMJjdWeye1JfpeJk2X/YHgI6A/tSJr7v6mEKCcq8w== X-Received: by 2002:a1c:4009:: with SMTP id n9mr8748937wma.104.1592146589324; Sun, 14 Jun 2020 07:56:29 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id 88sm21783065wre.45.2020.06.14.07.56.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 07:56:28 -0700 (PDT) From: "Basil L. Contovounesios" To: emacs-devel@gnu.org Cc: Stefan Monnier Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87blllx2t6.fsf@tcd.ie> <875zbt24br.fsf@gnu.org> Date: Sun, 14 Jun 2020 15:56:27 +0100 In-Reply-To: <875zbt24br.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 14:56:56 +0200") Message-ID: <87k109vgpw.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::330; envelope-from=contovob@tcd.ie; helo=mail-wm1-x330.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 14:56:35 -0000 Tassilo Horn writes: > "Basil L. Contovounesios" writes: > >>> + (url (pcase backend >>> + ('Git (string-trim >> >> This needs (eval-when-compile (require 'subr-x)). > > Or simply remove the "p" from "pcase", I guess. I was referring to your use of string-trim. >>> + (shell-command-to-string >>> + "git ls-remote --get-url")))))) >> >> Doesn't VC provide a robust way to get output from Git? > > vc-git--call maybe? Perhaps; I'm not that familiar with VC. >>> + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) >>> + (when (string-match url-rx url) >>> + (setq bug-reference-bug-regexp bug-rx) >>> + (setq bug-reference-url-format >>> + (if (functionp bug-url-fmt) >>> + (funcall bug-url-fmt) >>> + bug-url-fmt))))) >>> + (when (and url >>> + ;; If there's a space in the url, it's propably an >>> + ;; error message. >>> + (not (string-match-p "[[:space:]]" url))) >>> + (or >>> + ;; GNU projects on savannah. FIXME: Only a fraction of >>> + ;; them uses debbugs. >>> + (maybe-set "git\\.\\(sv\\|savannah\\)\\.gnu\\.org:" >> ^^^ >> Nit: Can this be a shy group? > > Yes. Is is generally better to use shy groups if we aren't going to do > anything with the groups anyway? Yes, for the negligible potential performance gain, so that there's one less group number taken, and more importantly so the reader isn't left wondering why we're capturing this. Personally, I often just go with what rx does, either by writing rx forms directly or by manually copying its expansion into the program, as that way I'm less likely to make a mistake. >>> ;;;###autoload >>> -(defun vc-responsible-backend (file) >>> +(defun vc-responsible-backend (file &optional no-error) >>> "Return the name of a backend system that is responsible for FILE. >>> >>> If FILE is already registered, return the >>> @@ -967,7 +967,10 @@ vc-responsible-backend >>> >>> Note that if FILE is a symbolic link, it will not be resolved -- >>> the responsible backend system for the symbolic link itself will >>> -be reported." >>> +be reported. >>> + >>> +If NO-ERROR is nil, signal an error that no VC backend is >>> +responsible for the given file." >>> (or (and (not (file-directory-p file)) (vc-backend file)) >>> (catch 'found >>> ;; First try: find a responsible backend. If this is for registration, >> >> NO-ERROR seems to be a no-op in this patch. > > Indeed. Obviously it should have done what the docstring says. > >> Instead of changing the function's arglist, would it be any worse to >> do the following? >> >> (ignore-errors (vc-responsible-backend ...)) > > IMHO, that it errors if no backend is found is the actual error but we > cannot change that anymore. And to me "what backend would this file > use" is a very common question. Even vc.el itself encodes that (dolist > (backend vc-handled-backends) ...) form again in > `vc-backend-for-registration' in order not to trigger the error > semantics of `vc-responsible-backend'. > > But that's not important to me. I can also leave it as it is. FWIW I'm happy with the optional argument you suggest. > PS: I like your style of suggesting improvements using questions which > all have a positive answer. Did you visit a lecture of Stefan? ;-) No, but I wish. ;) Thanks, -- Basil From MAILER-DAEMON Sun Jun 14 11:01:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkU8N-0002Ur-1j for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 11:01:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkU8L-0002Uj-Ok for emacs-devel@gnu.org; Sun, 14 Jun 2020 11:01:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46624) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkU8L-0002Ts-EE; Sun, 14 Jun 2020 11:01:17 -0400 Received: from [176.228.60.248] (port=4793 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkU8K-00031o-Sq; Sun, 14 Jun 2020 11:01:17 -0400 Date: Sun, 14 Jun 2020 18:01:10 +0300 Message-Id: <83imft3d55.fsf@gnu.org> From: Eli Zaretskii To: Paul Pogonyshev Cc: emacs-devel@gnu.org In-Reply-To: (message from Paul Pogonyshev on Sat, 13 Jun 2020 23:42:51 +0200) Subject: Re: graceful shutdown of non-interactive Elisp program References: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 15:01:18 -0000 > From: Paul Pogonyshev > Date: Sat, 13 Jun 2020 23:42:51 +0200 > > I'm trying to make a Elisp program that is run in a non-interactive mode, i.e. essentially as `emacs --batch > --load myfile.el'. A normal way to shutdown terminal programs is with C-c, which is expected to be "graceful" > shutdown, e.g. the program still has a chance to save files etc. > > However, with Elisp I'm not sure how to achieve that except for constantly modifying `kill-emacs-hook', which > would be a nightmare from coding perspective. > > Naively I would expect this print "GOING DOWN" when aborted with C-c: > > $ emacs --batch --eval "(unwind-protect (while t) (message \"GOING DOWN\"))" > > For example, Python's handler of SIGINT raises an exception within the program, which unwinds the stack > as usual and, unless caught, cause program termination after cleaning up as expected (e.g. running all > `finally' clauses and closing all `with' context managers). However, in Elisp, as I understand, there is no way > to have a say in handling SIGINT other than adding a function to `kill-emacs-hook'. I don't think I follow. If you want to raise an exception from a kill-emacs-hook (assuming that you want the unwind-protect forms to do something), you can do that from kill-emacs-hook, no? And if you had a say in handling SIGINT, what would you do in the handler that you cannot do in kill-emacs-hook? Also, you mention batch mode, but is it relevant? That is, are you saying that Emacs behaves differently in an interactive session when it gets a fatal signal? I'm confused. From MAILER-DAEMON Sun Jun 14 11:18:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkUPP-0007V1-Cz for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 11:18:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkUPL-0007Um-UD for emacs-devel@gnu.org; Sun, 14 Jun 2020 11:18:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46873) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkUPL-0008JT-JY; Sun, 14 Jun 2020 11:18:51 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:51063) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkUPK-0007bw-MO; Sun, 14 Jun 2020 11:18:51 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 4B3ED27C0054; Sun, 14 Jun 2020 11:18:50 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 11:18:50 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedgledtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhi lhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnhepke elgeefteefhfevueejieffieekvdetheeffeevhefggfdvvefgieetudeigefhnecuffho mhgrihhnpehgihhtlhgrsgdrtghomhdpghhnuhdrohhrghenucfkphepleefrddvfeeird dufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhr ohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdekieejfe ekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgsehfrghsthhmrghilhdr fhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 243F0328005D; Sun, 14 Jun 2020 11:18:48 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> Mail-Followup-To: Stefan Monnier , emacs-devel@gnu.org Date: Sun, 14 Jun 2020 17:18:47 +0200 In-Reply-To: (Stefan Monnier's message of "Sun, 14 Jun 2020 10:22:08 -0400") Message-ID: <87h7vd3cbs.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 15:18:53 -0000 Stefan Monnier writes: Hi Stefan, >> +(defcustom bug-reference-setup-functions nil >> + "A list of function for setting up bug-reference mode. >> +A setup function should return non-nil if it set >> +`bug-reference-bug-regexp' and `bug-reference-url-format' >> +appropiately for the current buffer. The functions are called in >> +sequence stopping as soon as one signalled a successful setup. >> +They are only called if the two variables aren't set already, >> +e.g., by a local variables section. >> + >> +Also see `bug-reference-default-setup-functions'. >> + >> +The `bug-reference-setup-functions' take preference over >> +`bug-reference-default-setup-functions', i.e., they are >> +called before the latter." >> + :type '(list function) >> + :version "28.1" >> + :group 'bug-reference) > > The :group is redundant ;-) > > More importantly, I'm wondering what was your motivation for > introducing two hooks (`bug-reference-setup-functions` and > `bug-reference-default-setup-functions`). Maybe that should be > explained in a comment? The docstring of bug-reference-default-setup-functions says: Like `bug-reference-setup-functions' for packages to hook in. So the defcustom is for users and the default setup functions for packages to add their own functions. But given that no such setup function will be trivial, we can probably drop the defcustom... >> + (let* ((backend (vc-responsible-backend (buffer-file-name) t)) >> + (url (pcase backend >> + ('Git (string-trim >> + (shell-command-to-string >> + "git ls-remote --get-url")))))) > > This should be moved to a new VC function. > Along the way I expect some related problems will be fixed such as: > - Unneeded forking of a shell only to immediately fork git. > - Hardcoding "git" when we have `vc-git-command`. Sounds right. I'll do that first and then come back to bug-reference.el later... >> + (cl-flet ((maybe-set (url-rx bug-rx bug-url-fmt) >> + (when (string-match url-rx url) > > This is mis-indented. It's not your fault, but I recommend you > override the auto-indentation :-( That would be a hassle for aggressive-indent-mode users (like me). >> + ;; GitLab projects. Here #18 is an issue and !17 is a >> + ;; merge request. Explicit namespace/project#18 references >> + ;; to possibly different projects are also supported. >> + (maybe-set >> + "[/@]gitlab.com[/:]\\([.A-Za-z0-9_/-]+\\)\\.git" >> + "\\(?1:[.A-Za-z0-9_/-]+\\)?\\(?3:#\\|!\\)\\(?2:[0-9]+\\)" >> + (lambda () >> + (let ((ns-project (match-string 1 url))) >> + (lambda () >> + (concat "https://gitlab.com/" >> + (or (match-string 1) >> + ns-project) >> + "/-/" >> + (if (string= (match-string 3) "#") >> + "issues/" >> + "merge_requests/") >> + (match-string 2)))))))))))) > > Do we really need those functions returning functions? Wouldn't it > work just as well if we do just `(setq bug-reference-url-format > bug-url-fmt)` and drop the outer `(lambda ()`? I don't think so. The outer lambda is evaluated by maybe-set and extracts the default namespace/project part from the repository URL. That will be used as a fallback in the inner lambda which is evaluated when following a bug reference #17 whereas it'll be ignored when the namespace/project is already included in the bug reference, e.g., namespace/project#17. > More importantly, I think it would be even much nicer to make this > into a list of > > (URL-RX BUG-RX BUG-URL-FORMAT) > > So users can easily add their own entries for other > repository-repositories. I agree that would be nice. >> +(defun bug-reference-try-setup-from-gnus () >> + (when (and (memq major-mode '(gnus-summary-mode gnus-article-mode)) >> + (boundp 'gnus-newsgroup-name) >> + gnus-newsgroup-name) >> + (let ((debbugs-regexp >> + ;; TODO: Obviously there are more, so add them. >> + (regexp-opt '("emacs" "auctex" "reftex" >> + "-devel@gnu.org" "ding@gnus.org")))) >> + (when (or (string-match-p debbugs-regexp gnus-newsgroup-name) >> + (and >> + gnus-article-buffer >> + (with-current-buffer gnus-article-buffer >> + (let ((headers (mail-header-extract))) >> + (when headers >> + (or (string-match-p >> + debbugs-regexp >> + (or (mail-header 'from headers) "")) >> + (string-match-p >> + debbugs-regexp >> + (or (mail-header 'to headers) "")) >> + (string-match-p >> + debbugs-regexp >> + (or (mail-header 'cc headers) "")))))))) >> + (setq bug-reference-bug-regexp >> + "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)") >> + (setq bug-reference-url-format >> + "https://debbugs.gnu.org/%s"))))) > > Same here: using a list to make it easy for users to add their own > mailing lists. Right. >> +;;;###autoload >> +(defvar bug-reference-default-setup-functions >> + (list #'bug-reference-try-setup-from-vc >> + #'bug-reference-try-setup-from-gnus) >> + "Like `bug-reference-setup-functions' for packages to hook in.") > > Why autoloaded? So that packages can add their function to that list. >> @@ -146,7 +281,7 @@ bug-reference-mode >> "" >> nil >> (if bug-reference-mode >> - (jit-lock-register #'bug-reference-fontify) >> + (bug-reference--init) >> (jit-lock-unregister #'bug-reference-fontify) >> (save-restriction >> (widen) > > FWIW, I'd rather keep the `jit-lock-register` call next to its > matching `jit-lock-unregister`. So if we move it to > `bug-reference--init`, we should probably move the > `jit-lock-unregister` to a matching `bug-reference--uninit`. Ok with me. >> modified lisp/vc/vc.el >> @@ -957,7 +957,7 @@ vc-backend-for-registration >> (throw 'found bk)))) >> >> ;;;###autoload >> -(defun vc-responsible-backend (file) >> +(defun vc-responsible-backend (file &optional no-error) >> "Return the name of a backend system that is responsible for FILE. >> >> If FILE is already registered, return the >> @@ -967,7 +967,10 @@ vc-responsible-backend >> >> Note that if FILE is a symbolic link, it will not be resolved -- >> the responsible backend system for the symbolic link itself will >> -be reported." >> +be reported. >> + >> +If NO-ERROR is nil, signal an error that no VC backend is >> +responsible for the given file." >> (or (and (not (file-directory-p file)) (vc-backend file)) >> (catch 'found >> ;; First try: find a responsible backend. If this is for registration, >> --8<---------------cut here---------------end--------------->8--- > > Looks like a spurious hunk got into your patch ;-) Yes, indeed. :-) Bye, Tassilo From MAILER-DAEMON Sun Jun 14 12:30:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkVWl-0007Uf-OZ for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 12:30:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkVWj-0007TG-6Z for emacs-devel@gnu.org; Sun, 14 Jun 2020 12:30:33 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48364) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkVWi-0006ez-NN; Sun, 14 Jun 2020 12:30:32 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:58983) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkVWi-0000iE-BC; Sun, 14 Jun 2020 12:30:32 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 2281327C0054; Sun, 14 Jun 2020 12:30:31 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 12:30:31 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedguddtgecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesmhdtreertdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe fggfefgedtvdefudfhgefgvdeuleekfeeuvdelveeihfekffdukeejgeevfeejteenucfk phepleefrddvfeeirddufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id D6E9A328005D; Sun, 14 Jun 2020 12:30:28 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> Mail-Followup-To: Stefan Monnier , emacs-devel@gnu.org Date: Sun, 14 Jun 2020 18:30:26 +0200 In-Reply-To: <87h7vd3cbs.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 17:18:47 +0200") Message-ID: <87tuzdsj8d.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 16:30:33 -0000 --=-=-= Content-Type: text/plain Tassilo Horn writes: >>> + (let* ((backend (vc-responsible-backend (buffer-file-name) t)) >>> + (url (pcase backend >>> + ('Git (string-trim >>> + (shell-command-to-string >>> + "git ls-remote --get-url")))))) >> >> This should be moved to a new VC function. Ok, I have implemented a new repository-url VC command for all VC systems I have installed and were able to test: Git, Hg, Bzr, and SVN. Looks right? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-New-VC-command-repository-url.patch >From f117a8517dc32330aa9ed32f531b68daba2d7b62 Mon Sep 17 00:00:00 2001 From: Tassilo Horn Date: Sun, 14 Jun 2020 18:24:14 +0200 Subject: [PATCH] New VC command repository-url --- lisp/vc/vc-bzr.el | 8 ++++++++ lisp/vc/vc-git.el | 7 +++++++ lisp/vc/vc-hg.el | 7 +++++++ lisp/vc/vc-svn.el | 9 ++++++++- lisp/vc/vc.el | 4 ++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index e5d307e7ed..504d3dcdda 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -1316,6 +1316,14 @@ vc-bzr-revision-completion-table vc-bzr-revision-keywords)) string pred))))) +(defun vc-bzr-repository-url (file-or-dir) + (let ((default-directory (vc-bzr-root file-or-dir))) + (with-temp-buffer + (vc-bzr-command "info" (current-buffer) nil nil) + (goto-char (point-min)) + (when (re-search-forward "parent branch: \\(.*\\)$") + (match-string 1))))) + (provide 'vc-bzr) ;;; vc-bzr.el ends here diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index dcb5228265..8c9feb0e9d 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -101,6 +101,7 @@ ;; - rename-file (old new) OK ;; - find-file-hook () OK ;; - conflicted-files OK +;; - repository-url (file-or-dir) OK ;;; Code: @@ -1082,6 +1083,12 @@ vc-git-conflicted-files "DU" "AA" "UU")) (push (expand-file-name file directory) files))))))) +(defun vc-git-repository-url (file-or-dir) + (let ((default-directory (vc-git-root file-or-dir))) + (with-temp-buffer + (vc-git--call (current-buffer) "ls-remote" "--get-url") + (buffer-substring-no-properties (point-min) (1- (point-max)))))) + ;; Everywhere but here, follows vc-git-command, which uses vc-do-command ;; from vc-dispatcher. (autoload 'vc-resynch-buffer "vc-dispatcher") diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 40d7573806..b5cdf5a3a2 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -1525,6 +1525,13 @@ vc-hg-command (defun vc-hg-root (file) (vc-find-root file ".hg")) +(defun vc-hg-repository-url (file-or-dir) + (let ((default-directory (vc-hg-root file-or-dir))) + (with-temp-buffer + (vc-hg-command (current-buffer) nil nil + "config" "paths.default") + (buffer-substring-no-properties (point-min) (1- (point-max)))))) + (provide 'vc-hg) ;;; vc-hg.el ends here diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index d039bf3c6a..c439082390 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -816,7 +816,14 @@ vc-svn-revision-table (push (match-string 1 loglines) vc-svn-revisions) (setq start (+ start (match-end 0))) (setq loglines (buffer-substring-no-properties start (point-max))))) - vc-svn-revisions))) + vc-svn-revisions))) + +(defun vc-svn-repository-url (file-or-dir) + (let ((default-directory (vc-svn-root file-or-dir))) + (with-temp-buffer + (vc-svn-command (current-buffer) nil nil + "info" "--show-item" "repos-root-url") + (buffer-substring-no-properties (point-min) (1- (point-max)))))) (provide 'vc-svn) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index c640ba0420..5c335ebfaa 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -553,6 +553,10 @@ ;; Return the list of files where conflict resolution is needed in ;; the project that contains DIR. ;; FIXME: what should it do with non-text conflicts? +;; +;; - repository-url (file) +;; +;; Returns the URL of the repository of the current checkout. ;;; Changes from the pre-25.1 API: ;; -- 2.27.0 --=-=-= Content-Type: text/plain Bye, Tassilo --=-=-=-- From MAILER-DAEMON Sun Jun 14 12:47:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkVnU-0004Iv-UK for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 12:47:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58008) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkVnT-0004Io-Qo for emacs-devel@gnu.org; Sun, 14 Jun 2020 12:47:51 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:37544) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkVnR-00014O-Sk; Sun, 14 Jun 2020 12:47:51 -0400 Received: by mail-wr1-x42d.google.com with SMTP id x13so14688470wrv.4; Sun, 14 Jun 2020 09:47:39 -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 :cc; bh=TjaWzK1Ahbe23i99x7hCzsS4tZGQwZ4a7FUs2LtiQwo=; b=TKKXPJMNGkQkFM/LPlhLbrfSJ1DhRULrbENWcT0lCLMmdRYef+uyB2W+HoPRsZjMxS rJgd7yq7ZjMQGb/BfQldkuFsXqaCTkel+7QNSy5PJ3dl/oYMLqPSrdzYd4jKkoe3vOvk rO92pQnleAdkcXbc18po0idOt4Zm/nHc3xx3/2jRMrN5BL484RQ4nbg4EfJVGYVLwBeR hy/fX8AH+8aL/axqudL9/7r5yt5BQhlo2A+lL5JclfHnOj2kNidomS0BL4W8sXbmFmFJ 2lBis4FiTlvKjHHVV24fg1fEBL8cTJVBaNBOkW0Jod3g7+Jom7MvMLqRAGPz6zy/E5yf 7IjA== 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:cc; bh=TjaWzK1Ahbe23i99x7hCzsS4tZGQwZ4a7FUs2LtiQwo=; b=eM1R4SG6IpLQFqEidzixW9MuOHWe5BamRT0JkcPWYB6U4QhZmNj7rhHm5fCDf5VdAv qBGm8Dyz1CdvjceIiGCwDVEWHOLO/8fAxQhQzlqVszv64UB/iZkwKsKxTK+YozD6mhHL EwKlIFdBUQoMMl+F32wxmw5jFO/vJelC2NxQKAyj6zkmHFRx2pA1ji1BWFFDtK/SqkQq /427GgddcCaUAl1Wbt/Nu+NEibGqJ20THjsS3jml0XKTo9YH1qwoPT8OMfl7iDAqwdty NzgJbExkESP+5eH5Am6FFp+gQNS3oJPCxURYeVfjPIX+3E/24OqU3OJx8L4AGOp/edDr fVGw== X-Gm-Message-State: AOAM532RnZAQSbYoLdkAzrPlW4hhCuAietgvPIKjGWzbDcCCiS5QZ2fG Gh5yGV4Ls1O+vRJx1KcgNcY27CsIcwmB0SKctBxHrJU= X-Google-Smtp-Source: ABdhPJzlQyQSC4LW0ndPYfzAS8clEWyueCN/l5eR//4HdETQvUrNXYP63NPBGNlevHIrlnqVSbYuWDHz5WUQ0tpy9H0= X-Received: by 2002:a5d:42cd:: with SMTP id t13mr24251752wrr.355.1592153257784; Sun, 14 Jun 2020 09:47:37 -0700 (PDT) MIME-Version: 1.0 References: <83imft3d55.fsf@gnu.org> In-Reply-To: <83imft3d55.fsf@gnu.org> From: Paul Pogonyshev Date: Sun, 14 Jun 2020 18:47:26 +0200 Message-ID: Subject: Re: graceful shutdown of non-interactive Elisp program To: Eli Zaretskii Cc: Emacs developers Content-Type: multipart/alternative; boundary="0000000000005bb8b705a80e1119" Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=pogonyshev@gmail.com; helo=mail-wr1-x42d.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 16:47:52 -0000 --0000000000005bb8b705a80e1119 Content-Type: text/plain; charset="UTF-8" > If you want to raise an exception from a > kill-emacs-hook (assuming that you want the unwind-protect forms to do > something), you can do that from kill-emacs-hook, no? No, I tried. There is a "shield" at C level that prevents me from passing an exception from a `kill-emacs-hook' to the "main" code: $ emacs --batch \ --eval "(add-hook 'kill-emacs-hook (lambda () (signal 'unwind-the-stack nil)))" \ --eval "(unwind-protect (while t) (message \"GOING DOWN\"))" ^CError in kill-emacs-hook ((closure (t) nil (signal 'unwind-the-stack nil))): (unwind-the-stack) As you see, the exception doesn't succeed in making `unwind-protect' clause to run. > And if you had a say in handling SIGINT, what would you do in the > handler that you cannot do in kill-emacs-hook? It's not the point of doing something special, it's rather the point of doing _normal_ cleanup that I expected to do otherwise. Let's say my program does 20 different, sometimes nested and sometimes not allocations of external resources that I need to free/close somehow. If `unwind-protect' was guaranteed to run (even in response to C-c) I could just do (unwind-protect (do-something-with-resource-N) (free) (resource-N) (code)) twenty times. However, as it stands it looks that I have to do (let ((free-resource-N (lambda () (free) (resource-N) (code)))) (add-hook 'kill-emacs-hook free-resource-N) (unwind-protect (do-something-with-resource-N) (funcall free-resource-N)) (remove-hook 'kill-emacs-hook free-resource-N)) every time. Additionally, this won't work if I don't control the code that allocates/frees the resource, i.e. if it happens to be inside some external package. > Also, you mention batch mode, but is it relevant? No, not really. It's just that in batch mode I was expecting to be in full control of Emacs "command loop" because I don't share Emacs with any other code (or at most that code can be seen as a "library" for my program). In interactive mode it's basically the same. Paul On Sun, 14 Jun 2020 at 17:01, Eli Zaretskii wrote: > > From: Paul Pogonyshev > > Date: Sat, 13 Jun 2020 23:42:51 +0200 > > > > I'm trying to make a Elisp program that is run in a non-interactive > mode, i.e. essentially as `emacs --batch > > --load myfile.el'. A normal way to shutdown terminal programs is with > C-c, which is expected to be "graceful" > > shutdown, e.g. the program still has a chance to save files etc. > > > > However, with Elisp I'm not sure how to achieve that except for > constantly modifying `kill-emacs-hook', which > > would be a nightmare from coding perspective. > > > > Naively I would expect this print "GOING DOWN" when aborted with C-c: > > > > $ emacs --batch --eval "(unwind-protect (while t) (message \"GOING > DOWN\"))" > > > > For example, Python's handler of SIGINT raises an exception within the > program, which unwinds the stack > > as usual and, unless caught, cause program termination after cleaning up > as expected (e.g. running all > > `finally' clauses and closing all `with' context managers). However, in > Elisp, as I understand, there is no way > > to have a say in handling SIGINT other than adding a function to > `kill-emacs-hook'. > > I don't think I follow. If you want to raise an exception from a > kill-emacs-hook (assuming that you want the unwind-protect forms to do > something), you can do that from kill-emacs-hook, no? > > And if you had a say in handling SIGINT, what would you do in the > handler that you cannot do in kill-emacs-hook? > > Also, you mention batch mode, but is it relevant? That is, are you > saying that Emacs behaves differently in an interactive session when > it gets a fatal signal? > > I'm confused. > --0000000000005bb8b705a80e1119 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
> If you want to raise an exception from a
> kill= -emacs-hook (assuming that you want the unwind-protect forms to do
> = something), you can do that from kill-emacs-hook, no?

No, I tried. There is a "shield" at C level that prevents me fr= om passing an
exception from a `kill-emacs-hook' to the "= ;main" code:

$ emacs --batch \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --eval "(add-hook 'kill-ema= cs-hook (lambda () (signal 'unwind-the-stack nil)))" \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --eval "(unwind-protect (while t) (mes= sage \"GOING DOWN\"))"

^CError in kill-emacs-hook ((closure (t) nil (signal 'unwind-the-st= ack nil))): (unwind-the-stack)

As you s= ee, the exception doesn't succeed in making `unwind-protect'
<= div>clause to run.

> And if you had a say i= n handling SIGINT, what would you do in the
> handler that you cannot= do in kill-emacs-hook?

It's not the point= of doing something special, it's rather the point of
doing _= normal_ cleanup that I expected to do otherwise. Let's say my
program does 20 different, sometimes nested and sometimes not
al= locations of external resources that I need to free/close somehow.
If `unwind-protect' was guaranteed to run (even in response to C-c)
I could just do

=C2=A0 =C2=A0(unwind-protect
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0(do-something-with-resource-N)
=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0(free) (resource-N) (code))

twenty times. However, as i= t stands it looks that I have to do

=C2=A0=C2=A0=C2=A0(let ((free-resource-N (lambda () (free= ) (resource-N) (code))))
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(add-hook 'k= ill-emacs-hook free-resource-N)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(unwind-p= rotect
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(do-someth= ing-with-resource-N)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(funcall= free-resource-N))
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(remove-hook 'kill= -emacs-hook free-resource-N))

every time.

Additionally,= this won't work if I don't control the code that
allocat= es/frees the resource, i.e. if it happens to be inside some
exter= nal package.

> Also, you mention batch mode, bu= t is it relevant?

No, not really. It's just th= at in batch mode I was expecting to be in full
control of Emacs &= quot;command loop" because I don't share Emacs with any
= other code (or at most that code can be seen as a "library" for m= y
program). In interactive mode it's basically the same.

Paul


On Sun, 14 Jun 2020 at 17:01,= Eli Zaretskii <eliz@gnu.org> wro= te:
> From: P= aul Pogonyshev <pogonyshev@gmail.com>
> Date: Sat, 13 Jun 2020 23:42:51 +0200
>
> I'm trying to make a Elisp program that is run in a non-interactiv= e mode, i.e. essentially as `emacs --batch
> --load myfile.el'. A normal way to shutdown terminal programs is w= ith C-c, which is expected to be "graceful"
> shutdown, e.g. the program still has a chance to save files etc.
>
> However, with Elisp I'm not sure how to achieve that except for co= nstantly modifying `kill-emacs-hook', which
> would be a nightmare from coding perspective.
>
> Naively I would expect this print "GOING DOWN" when aborted = with C-c:
>
>=C2=A0 =C2=A0 =C2=A0$ emacs --batch --eval "(unwind-protect (while= t) (message \"GOING DOWN\"))"
>
> For example, Python's handler of SIGINT raises an exception within= the program, which unwinds the stack
> as usual and, unless caught, cause program termination after cleaning = up as expected (e.g. running all
> `finally' clauses and closing all `with' context managers). Ho= wever, in Elisp, as I understand, there is no way
> to have a say in handling SIGINT other than adding a function to `kill= -emacs-hook'.

I don't think I follow.=C2=A0 If you want to raise an exception from a<= br> kill-emacs-hook (assuming that you want the unwind-protect forms to do
something), you can do that from kill-emacs-hook, no?

And if you had a say in handling SIGINT, what would you do in the
handler that you cannot do in kill-emacs-hook?

Also, you mention batch mode, but is it relevant?=C2=A0 That is, are you saying that Emacs behaves differently in an interactive session when
it gets a fatal signal?

I'm confused.
--0000000000005bb8b705a80e1119-- From MAILER-DAEMON Sun Jun 14 13:09:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkW8S-0007N8-1b for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 13:09:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkW8Q-0007Mz-Vs for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:09:31 -0400 Received: from ciao.gmane.io ([159.69.161.202]:48784) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkW8P-0004B2-0Q for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:09:30 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jkW8M-000SPW-CR for emacs-devel@gnu.org; Sun, 14 Jun 2020 19:09:26 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Yuri D'Elia Subject: Ergonomics: mouse clicking with scroll-margin Date: Sun, 14 Jun 2020 19:09:20 +0200 Message-ID: <87tuzdefr3.fsf@wavexx.thregr.org> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:081SpZvXfcUhx2SOSd/rjQkXdBw= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 13:09:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 17:09:31 -0000 The combined behavior of the mouse and "scroll-margin" is a bit odd currently and I wonder if there's something that can be done to improve it. If you have a buffer which has "scroll-margin" enabled, and you click anywhere in the scroll-margin region, the point is moved and the buffer is immediately scrolled. This in turn often results in the click becoming a "drag" instead, selecting parts of the buffer. I rarely use the mouse, but when I do (usually in customize groups, or when using eww), it trips me all the time since I use a rather large scroll-margin. Can this be improved _without_ disabling scroll-margin? If feels like that moving the point when using the mouse shouldn't trigger scroll-margin ever, since any action that causes a scroll would immediately move the current target away and result in unintended behavior. I can see the same effect when performing a selection by dragging: once you reach the scroll-margin area every single motion events selects half the visible buffer, which is also broken. Is there a better approach? From MAILER-DAEMON Sun Jun 14 13:23:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkWM6-0004dc-26 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 13:23:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45528) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWM4-0004dU-9b for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:23:36 -0400 Received: from mail-db8eur05olkn2084.outbound.protection.outlook.com ([40.92.89.84]:17185 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWM1-0006Rt-0q; Sun, 14 Jun 2020 13:23:35 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OiAKgFhGzrlgE1O3raPzbu8JA0/Dnqaud3MjjUBi2GIgeNDp2+v60ItDteSoeVN6LsHgNtUpH8YeyDLY/mgT41KWJ+ODvZvgHCMbskK76Uwch8XAg471G2SNFc/JBPmCT6GD2hB4GrFTEcl/67DBpLcjKhevWYuOOoX2FxXHKzpWNstO/DvV4xB7VZ+4IvK02622ZHvEqfUwQ+4BrNO6xiElnTRE5AC1G8WUL1PHS/kkpQ4fYLS3oWa6n1OgdSl+Lm3mHxb414QBIRIPn/R/SfGUBs6cx4dC98th1kmsYgTtkmrPyh6hih1QSlNQgnpEfVYUXFLtISO7oBgkUbnHqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4btIsc4bwHh/JOm0K1oRoIWpqdtbHUaVPGGrFNrM2xg=; b=HvlHLnfUO8yEmBCHwxoB2WkMlqkoh9kheNFCYoBBBSjOAoXPxeKbtCKF+VEyTw05kHAAxcTE4kw+hfWion/eE9PYbO8Bwju8q6SF1s3Gc46A1WcChMtfhSel9mRECRzrVyVf45OYtsSivGs3FyW7Kg/lrOEWA8NO7Zx/fcxLe1zBruQeAPTGird7QAwo8I8kGA/ElznVjHKAx5XFC9t7qznseexkNcOv8lKt4bHGRFAj7MEs7WqR69+5RT6P0Nr07NEZhOvspgPCCqYMdyVQCuegkpKoI6qjzzhUzGGpKeq9BthIcZVl2Aszz9RRciql2H9uRljbGYdDey8QkZnDAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4btIsc4bwHh/JOm0K1oRoIWpqdtbHUaVPGGrFNrM2xg=; b=Emf9p6/RChhw4EgEMh5PSDzqziQqLTORvA4gfXBzUEq1shurzhWMD5O8dykWo7ctxXumJaE7C55PcAc1D2lIBVC92BpNHZOnr+ep8LSiMG2Dbt3tErErniOp2zxoJH/d1c3Bt4LPYrkdjcq7xZ4kgAdZYDfylaqEBPi0dwOS1U2SwxqllL6niUFk5hLTFRATlisQT+8VBb1f8XB3d+w/k6SNN+6ipG8UtcYUWQ1K/PdTS8UWFmA6mAjFMPQl/aDVEwi5sHN3FIf/Zl2Bk4XilQ5fXAmJqGI1Wl1s0Ztlk1qNZJu/EBrluH2u2PQCC6Gk49VrhUxP1rgDAQLSbL8ZCw== Received: from DB8EUR05FT015.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::52) by DB8EUR05HT113.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::463) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18; Sun, 14 Jun 2020 17:23:29 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:fc0f::52) by DB8EUR05FT015.mail.protection.outlook.com (2a01:111:e400:fc0f::127) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18 via Frontend Transport; Sun, 14 Jun 2020 17:23:29 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::485f:2120:63bb:92c]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::485f:2120:63bb:92c%7]) with mapi id 15.20.3088.028; Sun, 14 Jun 2020 17:23:29 +0000 From: arthur miller To: Andrea Corallo , "emacs-devel@gnu.org" CC: Eli Zaretskii , Stefan Monnier Subject: RE: On elisp running native - Update 9 Thread-Topic: On elisp running native - Update 9 Thread-Index: AQHWQk8W5WIBUrnq20KBdV3/37wny6jYXGtu Date: Sun, 14 Jun 2020 17:23:29 +0000 Message-ID: References: <83sgl0lchm.fsf@gnu.org> <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> , In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:EB7671BD02E69A049910965667B1D764685DB4D75FCCD094A53F6620B44728FB; UpperCasedChecksum:C8209D9EF09AD2E009C9DED5ED8A8C5A3A008940C20D78086FD94326EBB8B2C1; SizeAsReceived:7479; Count:45 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [WmJvQCi3LICcec283MbZHZ7BiUbiW/sF] x-ms-publictraffictype: Email x-incomingheadercount: 45 x-eopattributedmessage: 0 x-ms-office365-filtering-correlation-id: ac4f7a4c-2e70-4210-18d8-08d81087a7f4 x-ms-traffictypediagnostic: DB8EUR05HT113: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JNe+Z9Mxin5sMRNnhZBQi6+cAD6JuatIb8uj+ObC6mjComKfkXlJbfeKR0g7R6JXF03YNPQ9JDxll+hNeRmCHVgOlMIYWa0taqN91t3yFIh++6qjRumSdU1Evxr81KboTMR8SPxWVtiS//OKgtxcQ9lkIHYSVKGwoMTksV+vhtAmYpKgH6LUkCqUYgbJ4k1GAjMfxwVJf1Fmm8aOpYwq5QDvFB9xs7/NVxJRGnhcblCAUIAoEJqKo2ZJINOjOgub x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; x-ms-exchange-antispam-messagedata: Vj6k9ap9nCVGPolkfUcDtXPPJbrD2dGJpGwFWzV0nBz8qTctu65K0RyHMZWzhWxX3cvFVMatqjpQgovm9QqbytvVQphLvb+Os+B5bT+cjafBB+TC7I3uL0VQq0rza8gPU5Xv63vSiKEdErYQO0OE0w== x-ms-exchange-transport-forked: True Content-Type: multipart/alternative; boundary="_000_VI1PR06MB4526523EA8147BC919AC5023969F0VI1PR06MB4526eurp_" MIME-Version: 1.0 X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: ac4f7a4c-2e70-4210-18d8-08d81087a7f4 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2020 17:23:29.6687 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8EUR05HT113 Received-SPF: pass client-ip=40.92.89.84; envelope-from=arthur.miller@live.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 13:23:30 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 17:23:36 -0000 --_000_VI1PR06MB4526523EA8147BC919AC5023969F0VI1PR06MB4526eurp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Whauh! That is a great work! Thanks. Skickat fr=E5n min Samsung Galaxy-smartphone. -------- Originalmeddelande -------- Fr=E5n: Andrea Corallo Datum: 2020-06-14 15:24 (GMT+01:00) Till: emacs-devel@gnu.org Kopia: Eli Zaretskii , Stefan Monnier =C4mne: Re: On elisp running native - Update 9 Hi all, I wrote an update about what is going on in the native-comp branch. In summary is about the recent big improvements on compile time, lambda performance and portability. https://akrl.sdf.org/gccemacs.html I believe in the current state the branch should be much more accessible to 32bit systems and constrained hardware in general. I think the next topics coming for me are dynamic scope compilation and primitive function advising. Regards Andrea -- akrl@sdf.org --_000_VI1PR06MB4526523EA8147BC919AC5023969F0VI1PR06MB4526eurp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Whauh! That is a great work! Thanks. 



Skickat fr=E5n min= Samsung Galaxy-smartphone.



-------- Originalmeddelande --------
Fr=E5n: Andrea Corallo <akrl@sdf.org>
Datum: 2020-06-14 15:24 (GMT+01:00)
Till: emacs-devel@gnu.org
Kopia: Eli Zaretskii <eliz@gnu.org>, Stefan Monnier <monnier@= iro.umontreal.ca>
=C4mne: Re: On elisp running native - Update 9

Hi all,

I wrote an update about what is going on in the native-comp branch.

In summary is about the recent big improvements on compile time, lambda
performance and portability.

https://akrl.sdf.org/gccemac= s.html

I believe in the current state the branch should be much more accessible to 32bit systems and constrained hardware in general.

I think the next topics coming for me are dynamic scope compilation and
primitive function advising.

Regards

  Andrea

--
akrl@sdf.org

--_000_VI1PR06MB4526523EA8147BC919AC5023969F0VI1PR06MB4526eurp_-- From MAILER-DAEMON Sun Jun 14 13:30:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkWT8-00007w-Pq for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 13:30:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWT7-00006K-9J for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:30:53 -0400 Received: from mail-vs1-xe2e.google.com ([2607:f8b0:4864:20::e2e]:43454) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkWT5-0007eB-Hn for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:30:52 -0400 Received: by mail-vs1-xe2e.google.com with SMTP id l10so8046911vsr.10 for ; Sun, 14 Jun 2020 10:30:45 -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 :cc; bh=VueUxF8bJtmngxWJqTsEh4UUQV8lHjudBsw8Cg/66Sg=; b=HTRYoG+btKC4qrM2q6RYuXn9U6UNbvHmhmvvMzdtKZZ2rW2leej+7RmAPGY2xc+nXi EbmgWqjaaLpUb8C8WfBYot0L7ycWt0YR1NBOorSNyUAl2FFMKmUbVPLN+jYMC2we7iYP ISISKclxbQ/0E7sicZNIjOZZ4+nVrg5AvexOzkDa0ViofFg5YhivC5Lx2Miuyzvn25J6 mV6jbaz0h56Uhj6UEzgzPIBUJ2MQvcpncDds99S+KscBr2KJu6y10uVi18wF+IceRI08 pa2+4Nbxhkc9e2H7AIH9g/R4JS5uD7TA7ILf27aQTkgiidtgVToaWSXtMGkz5oxZMYek xnWA== 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:cc; bh=VueUxF8bJtmngxWJqTsEh4UUQV8lHjudBsw8Cg/66Sg=; b=H+q4QCAa2H5ILe5NKWXJEIaqBXNoiizAQwhJURE/c+SGfKqDLQGBHUEc/Gy09Orsvp kYqvUKnKLv5tXuaJVmZBBEAkZf3Pvad4WJoLo42D8zBZBoNqs3qxZzc+5HlGt8uBJvEA Gwd48WpnVbkfEUS5KoYsadeYkXM4WF8WoqAl6qPCFtKahu6ghssQgqx3IXy3SX2TaKWf b1IOUBaq9DO6jdUrVsJTn+eyzX85C9ie6HERLV+BcM8PX81dR6bjGzLwiWnW4brQ65Is YTl9QtV3YpH4AYq3vdAHNOWwVNbIyzRGBy1XlTzG97xyE6oRtjZLCbSe/NgSJCplbQvH bJXw== X-Gm-Message-State: AOAM532oZ4bIjV/FijSF51RX6Md+ovws68oCVB9ngr75gVqmEZ68h2QZ bal6HBEi/vOR3HX7qHug3gC+4zauhKa2jPYc2es= X-Google-Smtp-Source: ABdhPJwWWKo39mi4HGtRkMk+Gcobt+qI+AiE1Sd5+3Rxwee4Y0Q37QXExV8uMW8tBRxoVSMGWFerfdSZdY/arxNCVhI= X-Received: by 2002:a67:f60c:: with SMTP id k12mr16545876vso.139.1592155845142; Sun, 14 Jun 2020 10:30:45 -0700 (PDT) MIME-Version: 1.0 References: <87pna2eksc.fsf@inigo.katxi.org> <87mu56eehq.fsf@inigo.katxi.org> In-Reply-To: From: Yuri Khan Date: Mon, 15 Jun 2020 00:30:33 +0700 Message-ID: Subject: Re: url-retrieve "Multibyte text in HTTP request" error when passing UTF-8 To: Stefan Monnier Cc: =?UTF-8?B?ScOxaWdvIFNlcm5h?= , Emacs developers , Dmitry Gutov Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::e2e; envelope-from=yurivkhan@gmail.com; helo=mail-vs1-xe2e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 17:30:53 -0000 On Sun, 14 Jun 2020 at 20:49, Stefan Monnier wrote: > >> This might beg for some better documentation about the string returned > >> by `json-encode`. After all, AFAIK the JSON format requires utf-8 > >> encoding, so it would make a lot of sense for `json-encode` to do the > >> utf-8 encoding directly and make sure it always returns a unibyte string. > > > > An application might not want to send the encoded string over the > > network right away. It might want to insert it into a buffer. > > I didn't suggest to change the behavior, only to document it because > both outputs can make sense, so common sense is not sufficient to know > what should be returned. Oh, I see. Yes please. More libraries should take care to document their behavior wrt string encodings. From MAILER-DAEMON Sun Jun 14 13:45:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkWhO-0004jg-2b for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 13:45:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34238) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWhM-0004jL-GR for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:45:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49372) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkWhL-0001O9-K2; Sun, 14 Jun 2020 13:45:35 -0400 Received: from [176.228.60.248] (port=3084 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkWhL-0005Ci-3T; Sun, 14 Jun 2020 13:45:35 -0400 Date: Sun, 14 Jun 2020 20:45:29 +0300 Message-Id: <83ftax35ja.fsf@gnu.org> From: Eli Zaretskii To: Yuri D'Elia Cc: emacs-devel@gnu.org In-Reply-To: <87tuzdefr3.fsf@wavexx.thregr.org> (message from Yuri D'Elia on Sun, 14 Jun 2020 19:09:20 +0200) Subject: Re: Ergonomics: mouse clicking with scroll-margin References: <87tuzdefr3.fsf@wavexx.thregr.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 17:45:36 -0000 > From: Yuri D'Elia > Date: Sun, 14 Jun 2020 19:09:20 +0200 > > Can this be improved _without_ disabling scroll-margin? Can you propose a more useful behavior in that case? > If feels like that moving the point when using the mouse shouldn't > trigger scroll-margin ever If you are saying that Emacs should put point inside the scroll-margin and leave it there in this case, then I don't recommend such a solution: any subsequent command will scroll the window anyway, because Emacs is programmed to keep point outside of the scroll margin. We need to come up with a more clever approach. From MAILER-DAEMON Sun Jun 14 13:59:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkWuR-0004dr-O6 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 13:59:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39082) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWuP-0004cU-Qk for emacs-devel@gnu.org; Sun, 14 Jun 2020 13:59:05 -0400 Received: from erc.thregr.org ([2001:41c9:1:41f::63]:50954) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkWuO-0003Uz-08; Sun, 14 Jun 2020 13:59:05 -0400 Received: from [37.163.1.190] (helo=localhost) by erc.thregr.org with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) id 1jkWuL-000Alb-8h (envelope-from ); Sun, 14 Jun 2020 19:59:01 +0200 References: <87tuzdefr3.fsf@wavexx.thregr.org> <83ftax35ja.fsf@gnu.org> User-agent: mu4e 1.5.2; emacs 28.0.50 From: Yuri D'Elia To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: Ergonomics: mouse clicking with scroll-margin In-reply-to: <83ftax35ja.fsf@gnu.org> Date: Sun, 14 Jun 2020 19:58:56 +0200 Message-ID: <87imftsf4v.fsf@wavexx.thregr.org> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2001:41c9:1:41f::63; envelope-from=wavexx@thregr.org; helo=erc.thregr.org X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 17:59:06 -0000 On Sun, Jun 14 2020, Eli Zaretskii wrote: >> Can this be improved _without_ disabling scroll-margin? > > Can you propose a more useful behavior in that case? Another solution would be to move the pointer along with the scrolling buffer (as done occasionally in cad software when moving the viewport), so that the pointer doesn't move from the POV of the buffer. Kind of odd for an editor though. > If you are saying that Emacs should put point inside the scroll-margin > and leave it there in this case, then I don't recommend such a > solution: any subsequent command will scroll the window anyway, > because Emacs is programmed to keep point outside of the scroll > margin. Would that happen for _any_ command or just for commands that already move the point? If that happens only with a command that already moves the point up or down, such as next-line, I'd actually say that's OK and I would find that expected. It's definitely an edge scenario, but less unorthodox than moving the pointer IMHO. > We need to come up with a more clever approach. Fully open to any idea here. This is just the first thing that came to mind. From MAILER-DAEMON Sun Jun 14 14:08:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkX3G-0007ZG-Kb for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 14:08:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkX3F-0007Z9-BE for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:08:13 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:40571) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkX3D-000530-FC for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:08:13 -0400 Received: by mail-wr1-x431.google.com with SMTP id h5so14828855wrc.7 for ; Sun, 14 Jun 2020 11:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=KEQYaH6zb6xV9IYgZGjO6THsvm9eZ5wQRvxNaOVBdK4=; b=CK/fqxD57GUPWUVTS+nhM9LRVLMspdYZwAf30EZdkOxuT55kzB5/XumJjj/5FvB8+r RQ219GPevAInTVJ2u2AJIUsx8VefxY4Cw4G3DsomWGiuzoZB7Moo15ly2o71lSshJGUD Vch4JMT1Kovj3gXtgC9fMBSE0MmPWsegyDDWi06S2dWpcVqMWoQCfS72hPCrWrbWRAwU /cDRHtyrJRvCdck+JvEu0bZdmc1gICxirLbrCjFBW3jiX/wc5e95CqVUeMoT8qTMlTft eDtpVHgPjKKnYizZvY0WYcn8x6aXpNL6gz0ip+jrOgsLeVKsy+EJEjLkYJiIlxqcYp5I MAsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=KEQYaH6zb6xV9IYgZGjO6THsvm9eZ5wQRvxNaOVBdK4=; b=Plcf4sTSPMrd05akB29lNMDusZ7gc0qHY88rpzDMZOjxKj9eQjeF3b0G89f12WfXtq TEj/06cxHMESfBBlpQVKj4hyqFG4TTscILVib8tLSJb/zcjz7H992H02Qe28mzGSgH7t +fMpMoDiMPooogk1NHFK6xQkpUVXmJskymEbAgsZXctFzGkaOJNLLVDHFViKeqmR4m5t eScC9qruCQe+5qot+98guZQtY1tR8HuGg1Ah9+yG7VDN4HjScivuGMnWS93sTlphHilR d9Uun9eAmoOW2mkUmck2Fp+ZtGtMxvxrWOI9rpkOSuSNvFtKaFySqdOsGCtuacHv8Ner bANw== X-Gm-Message-State: AOAM533c3cnAWAnA2UjdTPRataBTTJBUXrDHKGFjSxQnvCAucNbe/3CX uh47mJgsyF2zqL2cCnYeoDZ54UnwHts= X-Google-Smtp-Source: ABdhPJxxSmtNRylEEIFf+/0sJHw3E8U1bWMWmA8YRan9G/nnjEzDxY2fiiGJ2wJtAWCJmId9DEoy8Q== X-Received: by 2002:a5d:500d:: with SMTP id e13mr26653989wrt.150.1592158089388; Sun, 14 Jun 2020 11:08:09 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id o15sm18750195wmm.31.2020.06.14.11.08.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 11:08:08 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> Date: Sun, 14 Jun 2020 19:08:07 +0100 In-Reply-To: <87tuzdsj8d.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 18:30:26 +0200") Message-ID: <87y2optta0.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::431; envelope-from=contovob@tcd.ie; helo=mail-wr1-x431.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 18:08:13 -0000 Tassilo Horn writes: > Looks right? I can only comment on one thing: > +(defun vc-bzr-repository-url (file-or-dir) > + (let ((default-directory (vc-bzr-root file-or-dir))) > + (with-temp-buffer > + (vc-bzr-command "info" (current-buffer) nil nil) > + (goto-char (point-min)) > + (when (re-search-forward "parent branch: \\(.*\\)$") Doesn't this need a non-nil NOERROR arg? > + (match-string 1))))) > + Thanks, -- Basil From MAILER-DAEMON Sun Jun 14 14:40:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkXYW-0001mW-O2 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 14:40:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXYV-0001jP-RJ for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:40:31 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:55470) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXYT-0001J1-BJ for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:40:30 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 02CF744019E; Sun, 14 Jun 2020 14:40:27 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B2C0D440167; Sun, 14 Jun 2020 14:40:25 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592160025; bh=no5ua2da8hA+kzSOVqm7FL9w4rLXOV64AIbAbKxqbSk=; h=From:To:Subject:References:Date:In-Reply-To:From; b=nLYoKxerdpthacj4jSpPS+yT6zcfAyj3BI6fwoI8enO5DikB6zeBfp79mtNDoTyLu En+1YL5UWD2o7sIjJkJgo9r1U7IbA1XkScUHXfRsDG88Gx49N5oUGfvqOj/pfs0YMP WaOAokS6Z1FpC6VuO6KRZ5+W9NbZhLq8ZVRHEXZSbW/1Vth962C+Ni/iwo37QvMXY+ jVrHi6o1qvVArNiD8mDXOHZ5Pq07PGSNXTccSuJ4i5dwlN2kdXW+rOOyzsOGqOn6dY cCNV3KsxiL7c4DfVgKOWUfMtU6w5JZh6PjqzfcoZ8JmFZ0c9uanARNfFVV/te1CLhw DPy9c2pchYfwA== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 78F7B120268; Sun, 14 Jun 2020 14:40:25 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode Message-ID: References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> Date: Sun, 14 Jun 2020 14:40:24 -0400 In-Reply-To: <87tuzdsj8d.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 18:30:26 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.090 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 14:40:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 18:40:32 -0000 Tassilo Horn [2020-06-14 18:30:26] wrote: > > This is mis-indented. It's not your fault, but I recommend you > > override the auto-indentation :-( > That would be a hassle for aggressive-indent-mode users (like me). Yes, it has downsides as well. That was just a recommendation. The better solution is to fix the auto-indentation, of course. > > Why autoloaded? > So that packages can add their function to that list. Fair enough. Please put this as a comment, then. > Ok, I have implemented a new repository-url VC command for all VC > systems I have installed and were able to test: Git, Hg, Bzr, and SVN. > Looks right? Looks great, thanks. (I expected that only the Git backend would be populated). "Basil L. Contovounesios" wrote: > Doesn't this need a non-nil NOERROR arg? I don't see why: if the backend doesn't implement the feature the front-end function will signal an error, so the callers need to be prepared to handle an error in any case. Stefan From MAILER-DAEMON Sun Jun 14 14:47:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkXfZ-0001lq-Sa for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 14:47:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36084) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXfX-0001ho-Q1 for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:47:47 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:40319) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXfV-0002eT-Hz for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:47:46 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 1D6301002FC; Sun, 14 Jun 2020 14:47:43 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 8C706100288; Sun, 14 Jun 2020 14:47:41 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592160461; bh=jlhyTAZlSmzNw5gn2GyE/Xqokd/UoMehAOCEnNUb+Dk=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=NjFbJNX1watgO140GNprIkl6upzyuE63DQEKzl17GnfnqrWztEqaEQSNRZVTppq7x VQ90F9+ddplXaF7uZcfrR7cy8HIB55b59oDIc5ALySCH0iubncswRJN60/7w1IUtEs Gc4yxUfvnPQzViGeGbeUyfk2WdM7UGY/hYVWtUEDFhgLJwyOsmoHBWsUAtquh1Arn/ I/ETGE5Na5Ue9YP4AwTF6t4YKmk++beJM9of2p51WKXXGh9YUJbaWrCvqYu+MgMtHv ctDT12hoWh7ZVhy2BksugJCkTFlV4VZVlq1sVyQHqtjU8+Q1/n/uGal/BiIpLiPFlQ jHoVwMCopSiwg== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D5EFA120317; Sun, 14 Jun 2020 14:47:40 -0400 (EDT) From: Stefan Monnier To: Yuri D'Elia Cc: emacs-devel@gnu.org Subject: Re: Ergonomics: mouse clicking with scroll-margin Message-ID: References: <87tuzdefr3.fsf@wavexx.thregr.org> Date: Sun, 14 Jun 2020 14:47:40 -0400 In-Reply-To: <87tuzdefr3.fsf@wavexx.thregr.org> (Yuri D'Elia's message of "Sun, 14 Jun 2020 19:09:20 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 14:40:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 18:47:48 -0000 > The combined behavior of the mouse and "scroll-margin" is a bit odd > currently and I wonder if there's something that can be done to > improve it. > > If you have a buffer which has "scroll-margin" enabled, and you click > anywhere in the scroll-margin region, the point is moved and the buffer > is immediately scrolled. > > This in turn often results in the click becoming a "drag" instead, > selecting parts of the buffer. I think this is a bug. It's not immediately clear how we could/should fix it, but I think it deserves a bug number (and ideally a slightly more precise recipe). Stefan From MAILER-DAEMON Sun Jun 14 14:57:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkXof-00064G-A5 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 14:57:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41576) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXoe-000648-AZ for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:57:12 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:40995) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkXoc-00043Y-Eg for emacs-devel@gnu.org; Sun, 14 Jun 2020 14:57:12 -0400 Received: by mail-wr1-x433.google.com with SMTP id j10so14867370wrw.8 for ; Sun, 14 Jun 2020 11:57:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=ePCVJANPmtEwb/1crUWifnvZAi57LooXOLoaCCMrl+A=; b=v36yZQvQPGeflBhk2zOsoYonNAcEXm7zO3V3zdeHBvlx9SssHcNtdu+UDSCaQfQ6Ek i/q9QMY4J7cP3nfF+NxrihKXozsLTi8JvxxY8DLvK2LCg0KU4mGL/zFldhWkZuaarY4F TXsIEfaCOJxcIN2AqJbcQVzaKIsvuyhO7q8YS+U0W/iv3Zt1+16MNsveAUezlOX3/mqO WgRCDz7YDQ87goZEOeS0K19Jl07nJGJh0/EGNzAd9//b8vE0iShtsapAFcblZrRbH1V9 CBJvNCClUqAYL7hI9EO/A2SQhsWCs6d20+Gll8PEqb4EbSZ5kOAZLrlSPISWbneAemvR yv3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=ePCVJANPmtEwb/1crUWifnvZAi57LooXOLoaCCMrl+A=; b=gP0B2flM032wZWezh8r2ktbNxN4Cy7d1YhWPS67OWH5PxGdCBs3J6eXkZrqbc+GOez 7bm9ywNT3tfAB/IzwiT+4jIp0c8qLFp1ZPiXXY02VaLBIWYKkxbKLzEYvrZOrCUcipFU NmjjIhZZStHaICDtlFSaZKLzaORis7vSh0rwoIob+BkFrgpSv1dkdva4Zg5yPBcwNU1V 2q/K35IV49mYsNm7APcwpvdPmZ+gHuaANTt8zpS+omela0mbBAa+mAnaRPfSNokepWEI mwUhCKFE3R4+B8ZuoabQ8isWro2Q2zAiMvHypvi3/EBU/cLxAgfWNniQizggTolnrYLx UvGQ== X-Gm-Message-State: AOAM532Cafix0rBMyyChsSX41/VW+ybi4h/fG/ojNFPoeWIJR+EOQrCo acQpQUyDoqEaK9H1JmJ5jQVJ2g== X-Google-Smtp-Source: ABdhPJxr2nSm18UTjXeJFzcOOgUyQJbf3Z8FbtDkT/Z/RSpRJiwdQE7f5VvbKHHrmOK7I3b70KhSAg== X-Received: by 2002:a5d:4d4d:: with SMTP id a13mr25752107wru.252.1592161027506; Sun, 14 Jun 2020 11:57:07 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id f185sm20070692wmf.43.2020.06.14.11.57.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 11:57:06 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> Date: Sun, 14 Jun 2020 19:57:05 +0100 In-Reply-To: (Stefan Monnier's message of "Sun, 14 Jun 2020 14:40:24 -0400") Message-ID: <87mu55tr0e.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::433; envelope-from=contovob@tcd.ie; helo=mail-wr1-x433.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 18:57:12 -0000 Stefan Monnier writes: > "Basil L. Contovounesios" wrote: >> Doesn't this need a non-nil NOERROR arg? > > I don't see why: if the backend doesn't implement the feature the > front-end function will signal an error, so the callers need to be > prepared to handle an error in any case. Then there's no need for branching based on the return value of re-search-forward, since we're assuming it will succeed or barf. -- Basil From MAILER-DAEMON Sun Jun 14 15:02:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkXtV-0007bM-QU for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 15:02:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44000) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkXtT-0007aX-F7 for emacs-devel@gnu.org; Sun, 14 Jun 2020 15:02:11 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50710) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkXtS-0005CC-Og; Sun, 14 Jun 2020 15:02:10 -0400 Received: from [176.228.60.248] (port=3769 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkXtR-0002oY-K9; Sun, 14 Jun 2020 15:02:10 -0400 Date: Sun, 14 Jun 2020 22:02:03 +0300 Message-Id: <83eeqh31zo.fsf@gnu.org> From: Eli Zaretskii To: Yuri D'Elia Cc: emacs-devel@gnu.org In-Reply-To: <87imftsf4v.fsf@wavexx.thregr.org> (message from Yuri D'Elia on Sun, 14 Jun 2020 19:58:56 +0200) Subject: Re: Ergonomics: mouse clicking with scroll-margin References: <87tuzdefr3.fsf@wavexx.thregr.org> <83ftax35ja.fsf@gnu.org> <87imftsf4v.fsf@wavexx.thregr.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 19:02:11 -0000 > From: Yuri D'Elia > Cc: emacs-devel@gnu.org > Date: Sun, 14 Jun 2020 19:58:56 +0200 > > > If you are saying that Emacs should put point inside the scroll-margin > > and leave it there in this case, then I don't recommend such a > > solution: any subsequent command will scroll the window anyway, > > because Emacs is programmed to keep point outside of the scroll > > margin. > > Would that happen for _any_ command or just for commands that already > move the point? Any command that causes a non-trivial redisplay. Which in practice means quite a few (not only those which move point). From MAILER-DAEMON Sun Jun 14 15:41:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkYVV-0007ye-SY for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 15:41:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59134) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkYVU-0007yV-1J for emacs-devel@gnu.org; Sun, 14 Jun 2020 15:41:28 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:43790) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkYVS-000301-9y for emacs-devel@gnu.org; Sun, 14 Jun 2020 15:41:27 -0400 Received: by mail-wr1-x42c.google.com with SMTP id l10so14921331wrr.10 for ; Sun, 14 Jun 2020 12:41:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=CapTFQ+ZrD4gtwgJYC6O49KQfSPonJXvgLj7KosJ/HE=; b=OlyVTf+3TgPIpeSaa0yRbQJmilteKjJoTCnkImoGOpXcfPeImTThoIPndbpkTKkNQ8 JUOcIHTe20Hc3+hQso710mAZYLVxYKE448y5ccdGIsCZV2lYeLt1C5kj9eHf6k1GzlJH rBzD+yKx/KGubl9NvkKpN6uHqoBfT1J8fd3dswi9J8ALZh6UrQT4CAe8qcz27yw5JCct MnNnTaargsBs7ZcxkqiwCE5OAqV4TyEix7V+n73qGd9gocM4HLmMJDW+vaXIVMlkDEuz Wsmgn4YaAbdhYYhF01+tZI65Re2LmAG1zM81nEVwBzneeBqg2rZ8napeCNrd/XapYXhF R2rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=CapTFQ+ZrD4gtwgJYC6O49KQfSPonJXvgLj7KosJ/HE=; b=U61gVxXSu9EgaPLhTVXEByDf9cDL93ZdgxivaygpvCzZq/jCtOQVmM5IMfkYT4T8iR IHK7e3FF6LSs/d3N3f1sXIfvGdLmMTuEICZOIeCISew+y/kyZAMpfhCG6NO0jP7C5eKC kEvCWaE68RCP7Wphoc1tmKPhjemISlOL/+VlPSpJI6OeVFySo0t+tLXg6C237OuuYr8k XZO+tKTAO5ZgGGm48cq2C95SPiWRLcOhGpGh617qezszpeLklahNmFkmfxYDzCeZ8qw0 xAwCRtda3ZMF9Pe5OrRw88v9UB6iReEvDC5W+CBAhM3C7ululsVYHtrKI4yI6mFmZKt1 Mqvw== X-Gm-Message-State: AOAM533cxjvKLPKYIAVidf5+D4Vf6TMJFPHAL8Y/LNEJ+MMiDyH5zD31 6zRgHA+t8qtfj4z0r/oy3FPVCTke X-Google-Smtp-Source: ABdhPJyqww/mlzSgTSqu4n5PPICDW693lM62z8JEFiZgvgONXNnIO55kJ9l7fNErJR+8x9Kh4V+V/w== X-Received: by 2002:adf:fd48:: with SMTP id h8mr26883680wrs.226.1592163679206; Sun, 14 Jun 2020 12:41:19 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id g19sm18826976wmh.29.2020.06.14.12.41.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Jun 2020 12:41:18 -0700 (PDT) Sender: DG Subject: Re: RFC: Automatic setup for bug-reference-mode To: Stefan Monnier , emacs-devel@gnu.org References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Sun, 14 Jun 2020 22:41:17 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87tuzdsj8d.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 19:41:28 -0000 On 14.06.2020 19:30, Tassilo Horn wrote: > +(defun vc-git-repository-url (file-or-dir) > + (let ((default-directory (vc-git-root file-or-dir))) > + (with-temp-buffer > + (vc-git--call (current-buffer) "ls-remote" "--get-url") > + (buffer-substring-no-properties (point-min) (1- (point-max)))))) Can it be used in vc-git-dir-extra-headers, to replace the logic that calculates the value of 'remote'? From MAILER-DAEMON Sun Jun 14 15:43:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkYXg-0000OP-94 for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 15:43:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkYXe-0000NN-UR for emacs-devel@gnu.org; Sun, 14 Jun 2020 15:43:42 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51436) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkYXe-0003Nm-8h; Sun, 14 Jun 2020 15:43:42 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:35831) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkYXc-0002Vm-TZ; Sun, 14 Jun 2020 15:43:41 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 7F8BA27C0058; Sun, 14 Jun 2020 15:43:40 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 15:43:40 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedgudeggecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id 7E13F3061856; Sun, 14 Jun 2020 15:43:38 -0400 (EDT) From: Tassilo Horn To: "Basil L. Contovounesios" Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87mu55tr0e.fsf@tcd.ie> Mail-Followup-To: "Basil L. Contovounesios" , Stefan Monnier , emacs-devel@gnu.org Date: Sun, 14 Jun 2020 21:43:34 +0200 In-Reply-To: <87mu55tr0e.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 14 Jun 2020 19:57:05 +0100") Message-ID: <87k109saah.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 19:43:43 -0000 "Basil L. Contovounesios" writes: >>> Doesn't this need a non-nil NOERROR arg? >> >> I don't see why: if the backend doesn't implement the feature the >> front-end function will signal an error, so the callers need to be >> prepared to handle an error in any case. > > Then there's no need for branching based on the return value of > re-search-forward, since we're assuming it will succeed or barf. To make both of you happy pushed a version that uses NO-ERROR and signals a more descriptive error if the "parent branch" line couldn't be found. Bye, Tassilo From MAILER-DAEMON Sun Jun 14 16:40:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkZQA-0000g4-Dm for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 16:40:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53060) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkZQ9-0000fe-5D for emacs-devel@gnu.org; Sun, 14 Jun 2020 16:40:01 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52606) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkZQ8-0000HX-7S; Sun, 14 Jun 2020 16:40:00 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:39727) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkZQ7-0007sT-UA; Sun, 14 Jun 2020 16:40:00 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 8A66727C0054; Sun, 14 Jun 2020 16:39:59 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Sun, 14 Jun 2020 16:39:59 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeiiedgudehhecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeeirdefudenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec881f.dip0.t-ipconnect.de [93.236.136.31]) by mail.messagingengine.com (Postfix) with ESMTPA id C98793280065; Sun, 14 Jun 2020 16:39:57 -0400 (EDT) From: Tassilo Horn To: Dmitry Gutov Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> Mail-Followup-To: Dmitry Gutov , Stefan Monnier , emacs-devel@gnu.org Date: Sun, 14 Jun 2020 22:39:52 +0200 In-Reply-To: (Dmitry Gutov's message of "Sun, 14 Jun 2020 22:41:17 +0300") Message-ID: <87tuzd755z.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 20:40:01 -0000 Dmitry Gutov writes: > On 14.06.2020 19:30, Tassilo Horn wrote: >> +(defun vc-git-repository-url (file-or-dir) >> + (let ((default-directory (vc-git-root file-or-dir))) >> + (with-temp-buffer >> + (vc-git--call (current-buffer) "ls-remote" "--get-url") >> + (buffer-substring-no-properties (point-min) (1- (point-max)))))) > > Can it be used in vc-git-dir-extra-headers, to replace the logic that > calculates the value of 'remote'? Actually, "git ls-remote --get-url" doesn't work satisfactory which I noticed after committing above change on a new local branch. In that case, it returned "." so I've changed to this version (defun vc-git-repository-url (file-or-dir) (let ((default-directory (vc-git-root file-or-dir))) (with-temp-buffer (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") (buffer-substring-no-properties (point-min) (1- (point-max)))))) where I explicitly name the remote "origin" (which, I know, doesn't need to exist but still works in 99% of all cases). Bye, Tassilo From MAILER-DAEMON Sun Jun 14 16:51:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkZbF-0005MZ-9D for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 16:51:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkZbD-0005MQ-Hl for emacs-devel@gnu.org; Sun, 14 Jun 2020 16:51:27 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:39268) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkZbB-0002FC-P6 for emacs-devel@gnu.org; Sun, 14 Jun 2020 16:51:27 -0400 Received: by mail-wm1-x333.google.com with SMTP id o8so3223702wmh.4 for ; Sun, 14 Jun 2020 13:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=9RzbZ3T+GONfTLPyCbqckIyD+nDB8fWDXOU3HV2YGuE=; b=uo2fQSGiFrolal+vgah2MkK0pl5KkSEicMLp5apY2hoZ+iW9R49HGIkKVNuiAf21c0 JFyiTlhtuT4eSF1JjWmisUwN1UKu/gCJAbAlcmF7jbv+2nsiOImmsD1rN8QblUBMhd1L 5DI/ATULdc5AHxI8qQ+/JYiPWnFwlmN70FtJ++PaLGEBAfEpKMcqhR5AD0EnHV+zygYo B3KakDWjSX4ApUO8Q4v/e05p7BpC1HqGPaOIywrVMTPN61wIpadWPcDDS87jeYEZUUIe WJOIoIPmXfO1pd5D1ar79nrd6oFyaGiZUe3hMgYPvlIe0Go7LP2qScrJBf2k0l4Ej+ak 0Ewg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=9RzbZ3T+GONfTLPyCbqckIyD+nDB8fWDXOU3HV2YGuE=; b=ICek7EcpvTHmd+jaAXPWtYZHhVoV2iW58i0yBSJrFbi4G1RbavUo7GXG870eYZHpPI B0BoGM2q1cZHMON/wudBkZqfKvhrSAekXri+9eOWBW7LEvoIgckZGJ88wZcFUvyTjaEq SCvFxSIu3Iwzhfq/BgtjjuZ3y5b+zN2dwM95EUpDty8ErwCvCTQzVrEIV/0OD3ucY6jk UQc45Da/Ia9z0DMfiKrI3ujtDPq2fIL+XgYXrQ/Vi/sBbeVpuJulOrKdwUEoRGkWzPwQ KEOM+RS2vYweEni2KUqHI+r4r2UnitRRDQauwC1axA1E/34e2bkphFFE1EXoUElmyoV1 zMVQ== X-Gm-Message-State: AOAM5339JbG+CK4h0/AnSy7sGU2lhWddV0mDhRFwXxi3bgx2Xtg9k9FU DNtj+A7vJAS0jImDr1TgDcyh4wn4 X-Google-Smtp-Source: ABdhPJy7Q/wgjGiRajJnrdswqHL47CmxCCNe6zXVpIzlaUXDM6QPOLtoqQ+o91F46WWwa9MEyR+4Zg== X-Received: by 2002:a7b:cb91:: with SMTP id m17mr10108867wmi.126.1592167883476; Sun, 14 Jun 2020 13:51:23 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y5sm22141071wrs.63.2020.06.14.13.51.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Jun 2020 13:51:22 -0700 (PDT) Sender: DG Subject: Re: RFC: Automatic setup for bug-reference-mode To: Stefan Monnier , emacs-devel@gnu.org References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> From: Dmitry Gutov Message-ID: <401bed41-3eb1-3049-2037-a9f2b8ac385c@yandex.ru> Date: Sun, 14 Jun 2020 23:51:21 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87tuzd755z.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=raaahh@gmail.com; helo=mail-wm1-x333.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 20:51:27 -0000 On 14.06.2020 23:39, Tassilo Horn wrote: > Actually, "git ls-remote --get-url" doesn't work satisfactory which I > noticed after committing above change on a new local branch. In that > case, it returned "." so I've changed to this version > > (defun vc-git-repository-url (file-or-dir) > (let ((default-directory (vc-git-root file-or-dir))) > (with-temp-buffer > (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") > (buffer-substring-no-properties (point-min) (1- (point-max)))))) > > where I explicitly name the remote "origin" (which, I know, doesn't need > to exist but still works in 99% of all cases). Sounds good! If the new version can be used in vc-git-dir-extra-headers, could you please make it so? That aside, I was going to ask whether the new backend method should take a "remote-name" argument, but I don't know how many backends support different remotes. Or what other actual code is going to use this method anyway. From MAILER-DAEMON Sun Jun 14 17:03:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkZmj-0001qN-Jx for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 17:03:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkZmi-0001on-3f for emacs-devel@gnu.org; Sun, 14 Jun 2020 17:03:20 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:40283) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkZme-0004tk-O9 for emacs-devel@gnu.org; Sun, 14 Jun 2020 17:03:19 -0400 Received: by mail-wr1-x433.google.com with SMTP id h5so15081865wrc.7 for ; Sun, 14 Jun 2020 14:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=J1JYVGpr1WDwYiN07D9/MN/lEpctzunP4WstZKE2u6k=; b=WmhFTyXfnoFnHIqK4meRE26EWquYeIXf5Gevf91/cjPppkiOLgLgiajOJfbukP21Ak A2MQoeQk27OBH1fWm4IBTlHqljXo7cHNuqSEV/qdE+hhKUoCOUUGYkYJL3o84jf0MQxP TUMqMn7cGhRSaVdrdqRFXZvj3p+RJZR/GR3QDvTeuvqBhtUgkcB12wd0RtrS8XifwVmT HOvZECC7QvsKj1vhTGaVnWV4oTHJSJb1nDEee4IDwDWwuAAsc5eXWCmXBQDQ+Of88lYh 3M2PxVJOBd8ZFQF2iwcLQGrlnyt2LVEPyH1y3IysfMf0ZmKTxKRhcyGALg5tagqwIHdT p0mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=J1JYVGpr1WDwYiN07D9/MN/lEpctzunP4WstZKE2u6k=; b=qJpdeuz7ycSU4dD+c/3hUdrhdem6mHEaPFrqNQ3aRHx30ihXd6blhh98a94bgaHC7j Y9FBq9k4zvPrFUMY1+7URQpcTuxaIZSPPpvNresAi3pMV1gS1OkjF4acDmHQE8/4lAI6 pfqpB0uRMXolywcylbnii8rp3Tz6CzELM6/G/FzpsMCN+f8sG6DMhKk3olwktmqf1xnZ wDMhMpQREwyqQ7EJxBD9sTJ07qZipXebrVtmp3PFXe3CM+8f5BqH0AhQu3bFe/LsoiOa yNQA+JIZR3k+X8o056H03cpaZpW5bRYAGZ6yhig1SY4/26/txtfR7CypbQPAPLO79cMD bKRg== X-Gm-Message-State: AOAM530auToPprvHYbgQV/aznj6rJBAwQWVfR017bdQRLPtUvzIGV+LR eYosECwfAr9Do5Tj/yGam8562A== X-Google-Smtp-Source: ABdhPJxTrEwIPlsjF7TswFgVhXZq5MWfSgAcwWfWtamWPCiiaZWihAsdc9fporbvfiM82ypXN7St5w== X-Received: by 2002:a05:6000:1150:: with SMTP id d16mr25181221wrx.197.1592168593578; Sun, 14 Jun 2020 14:03:13 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q5sm21238270wrm.62.2020.06.14.14.03.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 14:03:12 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <401bed41-3eb1-3049-2037-a9f2b8ac385c@yandex.ru> Date: Sun, 14 Jun 2020 22:03:11 +0100 In-Reply-To: <401bed41-3eb1-3049-2037-a9f2b8ac385c@yandex.ru> (Dmitry Gutov's message of "Sun, 14 Jun 2020 23:51:21 +0300") Message-ID: <877dw9qs1c.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::433; envelope-from=contovob@tcd.ie; helo=mail-wr1-x433.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 21:03:20 -0000 Dmitry Gutov writes: > On 14.06.2020 23:39, Tassilo Horn wrote: >> Actually, "git ls-remote --get-url" doesn't work satisfactory which I >> noticed after committing above change on a new local branch. In that >> case, it returned "." so I've changed to this version >> (defun vc-git-repository-url (file-or-dir) >> (let ((default-directory (vc-git-root file-or-dir))) >> (with-temp-buffer >> (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") >> (buffer-substring-no-properties (point-min) (1- (point-max)))))) >> where I explicitly name the remote "origin" (which, I know, doesn't need >> to exist but still works in 99% of all cases). > > Sounds good! > > If the new version can be used in vc-git-dir-extra-headers, could you please > make it so? > > That aside, I was going to ask whether the new backend method should take a > "remote-name" argument, but I don't know how many backends support different > remotes. Or what other actual code is going to use this method anyway. It would definitely be nice to somehow make this configurable. For example in my local Emacs checkout I have Savannah as the "upstream" remote, and my mirror on GitLab as the "origin" remote, because that's where I push to most of the time. I think Forge[1] achieves this by supporting a per-repository git-config variable which tells it which remote to use. [1]: https://github.com/magit/forge Thanks, -- Basil From MAILER-DAEMON Sun Jun 14 17:30:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkaCm-0002Ms-JY for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 17:30:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45660) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkaCl-0002Mf-9b for emacs-devel@gnu.org; Sun, 14 Jun 2020 17:30:15 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:46686) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkaCj-0001YX-6N for emacs-devel@gnu.org; Sun, 14 Jun 2020 17:30:15 -0400 Received: by mail-wr1-x42a.google.com with SMTP id x6so15050103wrm.13 for ; Sun, 14 Jun 2020 14:30:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=AM2w33KEPW0xuU6mBrVNke2t4x/E4HNcY9XJSaSbfYQ=; b=R0Vm7hzi7SBCTQ3qGs5pCj+ux+VVcSspUqvhIbv35JXEVXjvU1gQ3X60Q5O9G8OExa 7Vkyr34aVMmyDOuA9YAsHM+e4d0V4pWZ89gYEeH069gc6yzlnnncC2+K+8nokKgA9rAz 5jdvzLQj05kzpGkjtlN0CvIW9Vp+wg1IqplJTR6n93ggbnaKofuaOkJdJuWMqRUTK5Kg n732nSpoGZCILcY79lAVubgsu3FaAHEI1JucdMz9RqInAP9WRenZedM0eRgVtR9SsJ2M NC7xmQc2BjP6MYGZFRFzoNELX350UPkhQAYJEm6HI6vbNqP/haIShTcPkQgOrrzHnfsQ bMKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version:content-language; bh=AM2w33KEPW0xuU6mBrVNke2t4x/E4HNcY9XJSaSbfYQ=; b=Gn9Fz+CY2rW/w4pNFyD0AgckfUxH2RYm08xVIaLwciiFCcAswJ9W6EDwncBWgQlXkr 3avJpq67cLQE4R1tvbLDXx2vjXGSBuNYQ/m7sq1+WkM1BOqVr/6h2su6radjcdOeBG2k GW50BhoraWMMO36xGxGBF6s000Jxt/7rL/uHNnGGNqf0/9gjZAOHJuzoknNbyLcJ9fYD bBPh8y9ZJqRLRjZMgFQhSNm+v/J4aFPmieHlB2LCo/82OIwSc2oFo5a7YpJ3KMLFse8y Bd52Si9a4i8u+ybIFAWcspuQbP7yPI+M4Alhwwok1FKQLdlxo/jP8dRJ3Snu7Vz7bTB0 HREg== X-Gm-Message-State: AOAM531WByvjSrbRyLObPFlTSP+ITP+BIjsKDv3YDYlMPrHeRDYl2JOF SpAOLc1B7zm44X13VzvrNcnCVKe2 X-Google-Smtp-Source: ABdhPJzpWsU/vbwq96xIEhn95jBiTiHDtBf2MZe3P9hksRXi0jFaklKidqh/CGWLEyxHJicM/peSJA== X-Received: by 2002:a5d:50c9:: with SMTP id f9mr26668560wrt.9.1592170211101; Sun, 14 Jun 2020 14:30:11 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b185sm32467109wmd.3.2020.06.14.14.30.09 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Jun 2020 14:30:10 -0700 (PDT) Sender: DG To: emacs-devel From: Dmitry Gutov Subject: project-find-regexp using ripgrep Message-ID: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> Date: Mon, 15 Jun 2020 00:30:08 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------5D4644706943B47AC8620C64" Content-Language: en-US Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42a.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 21:30:15 -0000 This is a multi-part message in MIME format. --------------5D4644706943B47AC8620C64 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Here's a small patch I've been toying with, inspired by bug#41766. In my testing, it makes the project search an order of magnitude faster. Probably due to smart parallelization. If people confirm this experience, I'm going to install it (or something similar), even though, well, it would be nice to consolidate this search tool into something smarter, and done in one package only. But that for the future. How to try: - M-x project-find-regexp in your favorite project. - If you're feeling scientific, evaluate something like (benchmark 1 '(project-find-regexp "grep-regexp-alist")) - Change the argument to something else if you're searching something other than the Emacs project. - Try it a couple of times. - Note the reported timings. - Install ripgrep (e.g. with 'apt install ripgrep'). - Apply the patch. - [Rebuild], restart Emacs. - Repeat the first several steps. --------------5D4644706943B47AC8620C64 Content-Type: text/x-patch; charset=UTF-8; name="xref-ripgrep.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xref-ripgrep.diff" diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 5b5fb4bc47..19fc362ddb 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1246,12 +1246,20 @@ xref-matches-in-directory (declare-function tramp-tramp-file-p "tramp") (declare-function tramp-file-local-name "tramp") +;; '-s' because 'git ls-files' can output broken symlinks. +(defvar xref-grep-template + "xargs -0 rg -nH --no-messages -g '!*/' -e " + ;"xargs -0 grep -snHE -e " + ) + ;;;###autoload (defun xref-matches-in-files (regexp files) "Find all matches for REGEXP in FILES. Return a list of xref values. FILES must be a list of absolute file names." (cl-assert (consp files)) + (require 'grep) + (defvar grep-highlight-matches) (pcase-let* ((output (get-buffer-create " *project grep output*")) (`(,grep-re ,file-group ,line-group . ,_) (car grep-regexp-alist)) @@ -1261,13 +1269,12 @@ xref-matches-in-files ;; first file is remote, they all are, and on the same host. (dir (file-name-directory (car files))) (remote-id (file-remote-p dir)) - ;; 'git ls-files' can output broken symlinks. - (command (format "xargs -0 grep %s -snHE -e %s" - (if (and case-fold-search - (isearch-no-upper-case-p regexp t)) - "-i" - "") - (shell-quote-argument (xref--regexp-to-extended regexp))))) + ;; The 'auto' default would be fine too, but ripgrep can't handle + ;; the options we pass in that case. + (grep-highlight-matches) + (command (grep-expand-template xref-grep-template + (xref--regexp-to-extended regexp) + regexp))) (when remote-id (require 'tramp) (setq files (mapcar --------------5D4644706943B47AC8620C64-- From MAILER-DAEMON Sun Jun 14 18:11:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkaqw-0006L7-FN for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 18:11:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkaqu-0006Ku-MN for emacs-devel@gnu.org; Sun, 14 Jun 2020 18:11:44 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:55683) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkaqs-000870-Vp; Sun, 14 Jun 2020 18:11:44 -0400 Received: by mail-wm1-x343.google.com with SMTP id c71so12757030wmd.5; Sun, 14 Jun 2020 15:11:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=eOdMJMEJTQcG8vRCyBeE2X5jfhLeCZs4Dm93ep+BvSE=; b=KViA0mtBOTJs9TyFFoWEv8LzQisLiXZvm6hJVa5I5ga5RzFwHTMPxI6lNe5jZYEFPl 1c+e+7g14UQkkHDEWuqDHLIWzboaH6ouuK2ZpaLzV/9I3z/mBTg7Q2pNVpFFywHgTmLY eXlmLEzWw7gKdoyObrjN6659xgiib5qtmFgT5bxW+PnLbJz+7ka6u16wdLIAqO+8MFWr 1qr4s0jvXjgieo9CnP+f89WdqxS9VCeC2k5U0SPSO8E2tr7GFyYxG6RQyll2JN86MAen qQrklBkkr0ytiV/dXWnGQYzTCeRMiYzIMYN/SKwuxLyCIaEzaxfSgPRzUsk2cUw09LyS E8aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=eOdMJMEJTQcG8vRCyBeE2X5jfhLeCZs4Dm93ep+BvSE=; b=ll4kiqhjzHXEh1dPGwj1kllGzppGDvSsqx9/cMzMKeu0eIALM20511z7kdx0rfzVmT mf0QDN+A8GdtR4zHWY6OvT09/r/Sak9Q7W5ZmfloLzSVo1Hk2CI6pVazL0aja5rinKwQ I31YzILTboVsEhVqmCAdNt1A04HUqxrigUYvqdWho++1ew78r4zfzyHvyYiaH+yav+S/ WJRRoumuTqyc0tJI8tEoSVZDiZ0dut2rUW8Klwo//Z79W8p2JsffubbdutbazCDJxMVG dzWYqxKlUC58/qkGw3u7xyxZ8gQYqr6DLx2ITZ1WFG1nS8ZkmZwzA38L4uRIRJsvLFiD guDg== X-Gm-Message-State: AOAM531IkDFipkFSZqdqEknFxhg90E0hXu77PQe4mN8rYUfDeZfuuA59 /Xw7dxICbIY8HbAY0m+B48m6l39fgT5I5w== X-Google-Smtp-Source: ABdhPJwdwT4dxOqLkNP4A++5W6WIYiBmiKelRuYeVWz7/E9U2g39IAHVvdltzGnlXvfkgRsfkXPAJw== X-Received: by 2002:a05:600c:645:: with SMTP id p5mr9674506wmm.156.1592172700413; Sun, 14 Jun 2020 15:11:40 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id z12sm23683353wrg.9.2020.06.14.15.11.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 15:11:39 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Andreas Schwab Cc: Eli Zaretskii , alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: git-send-email (was: Why are so many great packages not trying to get included in GNU Emacs?) References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> Date: Mon, 15 Jun 2020 00:11:38 +0200 In-Reply-To: <87mu57atav.fsf@igel.home> (Andreas Schwab's message of "Sat, 13 Jun 2020 17:18:00 +0200") Message-ID: <87lfkpcn6t.fsf_-_@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x343.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 22:11:44 -0000 Andreas Schwab writes: > On Jun 13 2020, Eli Zaretskii wrote: > >> mail message was not formatted with git-format-patch. > > Yes, it was. In case that clears up some confusion: As Konstantin said, the patch[1] was sent with git send-email, which allows the sender to "annotate" the patch with some text that will be ignored by git am (IIUC merely by virtue of being stuck between "---\n" and the actual diff). In Gnus, piping the whole mail to "cd path/to/emacs && git am" (hitting "|" in the summary buffer) mostly does TRT: the patch is applied, with the email's subject as commit summary, and the rest of the message (up to "---\n") completing the commit message. The only issue, AFAICT, is that git am fails to strip away the [PATCH] prefix; IUUC this is because it does not expect debbugs's own "bug#NNN" prefix. Feel free to dismiss this as armchair commentary, but I think that we're likely to see more and more patches sent with git send-email[2], since it is heavily promoted by other projects privileging mail-based workflows[3]. [1] <20200603115103.69611-1-Hi-Angel@yandex.ru> https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-06/msg00128.html [2] See e.g. Jonas's patch series back in May: <87sgg26zpv.fsf@bernoul.li> https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-05/msg00853.html [3] Sourcehut developers, in particular, have spent a fair amount of virtual ink describing how to use it: https://drewdevault.com/2018/07/02/Email-driven-git.html https://man.sr.ht/git.sr.ht/send-email.md They have even set up a dummy repository for would-be contributors to try it out: https://git-send-email.io/ https://lists.sr.ht/~sircmpwn/email-test-drive/ From MAILER-DAEMON Sun Jun 14 22:37:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkf01-0000Lx-KP for mharc-emacs-devel@gnu.org; Sun, 14 Jun 2020 22:37:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkezz-0000LY-8P for emacs-devel@gnu.org; Sun, 14 Jun 2020 22:37:23 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57151) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkezv-0005zh-QS; Sun, 14 Jun 2020 22:37:19 -0400 Received: from [176.228.60.248] (port=3668 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkezv-0004BM-8z; Sun, 14 Jun 2020 22:37:19 -0400 Date: Mon, 15 Jun 2020 05:37:12 +0300 Message-Id: <83d0612gx3.fsf@gnu.org> From: Eli Zaretskii To: =?iso-8859-1?Q?K=E9vin?= Le Gouguec Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <87lfkpcn6t.fsf_-_@gmail.com> (message from =?iso-8859-1?Q?K?= =?iso-8859-1?Q?=E9vin?= Le Gouguec on Mon, 15 Jun 2020 00:11:38 +0200) Subject: Re: git-send-email (was: Why are so many great packages not trying to get included in GNU Emacs?) References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 02:37:23 -0000 > From: Kévin Le Gouguec > Cc: Eli Zaretskii , alan@idiocy.org, hi-angel@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > Date: Mon, 15 Jun 2020 00:11:38 +0200 > > As Konstantin said, the patch[1] was sent with git send-email, which > allows the sender to "annotate" the patch with some text that will be > ignored by git am (IIUC merely by virtue of being stuck between "---\n" > and the actual diff). > > In Gnus, piping the whole mail to "cd path/to/emacs && git am" (hitting > "|" in the summary buffer) mostly does TRT: the patch is applied, with > the email's subject as commit summary, and the rest of the message (up > to "---\n") completing the commit message. > > The only issue, AFAICT, is that git am fails to strip away the [PATCH] > prefix; IUUC this is because it does not expect debbugs's own "bug#NNN" > prefix. > > > Feel free to dismiss this as armchair commentary, but I think that we're > likely to see more and more patches sent with git send-email[2], since > it is heavily promoted by other projects privileging mail-based > workflows[3]. We accept and welcome patches in any form and shape. However, we recommend to use "git format-patch" (see CONTRIBUTE), and for a good reason: doing so leaves no doubt regarding the authorship of the changes. Whereas just sending email could dupe us in attributing the change to a different person, something that we try to avoid. Of course, with enough manual work and using various Git optional switches, any problem can be worked around, for the price of more time invested. This is why I generally comment on patches sent in forms other than what is described in CONTRIBUTE. Eventually, that is our main contribution document, and we should either stick to what it says or change the document. From MAILER-DAEMON Mon Jun 15 01:04:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkhIN-0002m8-Br for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 01:04:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42468) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkhIL-0002lz-2l for emacs-devel@gnu.org; Mon, 15 Jun 2020 01:04:29 -0400 Received: from mail-ej1-x641.google.com ([2a00:1450:4864:20::641]:38783) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkhII-0005aC-8J; Mon, 15 Jun 2020 01:04:28 -0400 Received: by mail-ej1-x641.google.com with SMTP id w16so15414339ejj.5; Sun, 14 Jun 2020 22:04:24 -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 :cc; bh=wBg+7l/ZKvpkormBZ0kw3upXdKOrG/PrUpia6K7t8c0=; b=GCcE+Ncn3Kmqi5OriGzHWFUYqTtQlY94CKSBi3nTe3QcFw7IgtEsCFHvBYz61GDxZI rEdJvBh578Bn4TWZyko5Y7QdJ16jV2SLe/gIypQZUHI2YWMb1xRPH9GNvvXrJvsEt0xY MSEitxBR4TXFcLg6Sv/G53eEP7Qlp6/SsgHIU02HqlS5idYMNMlBqpmy0DYZB+IoXCiw v94p46HO4J4QErE66eGB8aOoGgNLoQSYNPRzRh76Tchc/EFWLsy1C80ZgzBK2Qrqt6Pw KeGbsMt8IkDIWal9MuD6IEeADvEV7bK8MBIAcdwOOTB8WUdlNgNN6Mq3mqBT/7DHb9AD nnOQ== 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:cc; bh=wBg+7l/ZKvpkormBZ0kw3upXdKOrG/PrUpia6K7t8c0=; b=Eo9TXCCvUeALll3/vDvoJJVd9cB8oXbDeXkJRedKX0wUuGxx/QS9z0dFPctOxdbxef AyKgT7WaOwjq2wTSUbxQsKJ6vnu9ufQcZPEXZmtFWFMYxDaLDn3dWsWR1aFPoa/61cTo xvg7EYwOSUc4BoHHS4vIxYfuVeJRGiSR4G6VA7aNel+GeYz/JGmycQ2yIv54ScFzYOWd 6n8Tw4Puu9WHErQu1iGeM1tFIpKPKFPgiRWeiUiLeHZB26Q8rYDzHn0thjXTwmfLr1m4 8JvY65k5kO7ZiKbCUGM8/WVWcpRkAg6I+nGwynZr3I6N6FyOdkjK96iHtKomLigXz0mH z5XA== X-Gm-Message-State: AOAM530JdhtcRal3pgGgdQsLaWDSWh/YQJbrToTWSosDjDtnSrvPxuGz 7NBaW8qCX4OlRQd8vaR2QTXb6+XLVXtAmg/F5W0= X-Google-Smtp-Source: ABdhPJx5silsOk1ukDfQ1IT/jRlSPv07+h0a5oH5RpGjyAu+BMAkd6e4u7ZRP30FtXDCZbrLEhCkcavcJK8FZ2F+kak= X-Received: by 2002:a17:906:b097:: with SMTP id x23mr11428015ejy.227.1592197463519; Sun, 14 Jun 2020 22:04:23 -0700 (PDT) MIME-Version: 1.0 References: <83sgl0lchm.fsf@gnu.org> <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> In-Reply-To: From: =?UTF-8?B?R29uZy1ZaSBMaWFvIOW7luWuruavhQ==?= Date: Mon, 15 Jun 2020 00:04:13 -0500 Message-ID: Subject: Re: On elisp running native - Update 9 To: Andrea Corallo Cc: emacs-devel@gnu.org, Eli Zaretskii , Stefan Monnier Content-Type: multipart/alternative; boundary="00000000000039b57b05a8185c17" Received-SPF: pass client-ip=2a00:1450:4864:20::641; envelope-from=gongyi.liao@gmail.com; helo=mail-ej1-x641.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_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 05:04:29 -0000 --00000000000039b57b05a8185c17 Content-Type: text/plain; charset="UTF-8" Andrea, Question: What's the difference between Update 1's and Update 9's benchmark table's byte code column? The byte code column's run time results have decreased roughly 78% from Update 1's 507.23s to Update 9's 114.91, that seems unbelievable if all the Update 9's byte code result are purely based on byte code without any natively compiled code. Are Update 9's byte code result based on natively compiled built-in function and byte code compiled benchmark functions or they are purely all byte code compiled? Or there are drastic changes in benchmark environment settings (hardware, number of repetitions) betweens these two updates? Thanks, Gong-Yi. On Sun, Jun 14, 2020, 8:24 AM Andrea Corallo wrote: > Hi all, > > I wrote an update about what is going on in the native-comp branch. > > In summary is about the recent big improvements on compile time, lambda > performance and portability. > > https://akrl.sdf.org/gccemacs.html > > I believe in the current state the branch should be much more accessible > to 32bit systems and constrained hardware in general. > > I think the next topics coming for me are dynamic scope compilation and > primitive function advising. > > Regards > > Andrea > > -- > akrl@sdf.org > > --00000000000039b57b05a8185c17 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Andrea,

Ques= tion:
What's the difference between Update 1'= ;s and=C2=A0 =C2=A0Update 9's benchmark table's byte code column?

The byte code column'= s=C2=A0 run time results have=C2=A0 decreased roughly 78% from Update 1'= ;s 507.23s to Update 9's 114.91, that seems unbelievable if all the Upd= ate 9's byte code result are purely based on byte code without any nati= vely compiled code.

Are = Update 9's byte code result based on natively compiled built-in functio= n and byte code compiled benchmark functions or they are purely all byte co= de compiled?

Or there ar= e drastic changes in benchmark environment settings (hardware, number of re= petitions) betweens these two updates?

Thanks,
Gong-Yi.=C2=A0
On Sun, J= un 14, 2020, 8:24 AM Andrea Corallo <akrl@sdf.org> wrote:
Hi all,

I wrote an update about what is going on in the native-comp branch.

In summary is about the recent big improvements on compile time, lambda
performance and portability.

https://akrl.sdf.org/gccemacs.html

I believe in the current state the branch should be much more accessible to 32bit systems and constrained hardware in general.

I think the next topics coming for me are dynamic scope compilation and
primitive function advising.

Regards

=C2=A0 Andrea

--
akrl@sdf.org

--00000000000039b57b05a8185c17-- From MAILER-DAEMON Mon Jun 15 02:23:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkiXA-0002zR-JL for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 02:23:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkiX8-0002zC-L3 for emacs-devel@gnu.org; Mon, 15 Jun 2020 02:23:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59405) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkiX7-0002SX-Aw; Mon, 15 Jun 2020 02:23:49 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:50605) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkiX6-0004ZB-UL; Mon, 15 Jun 2020 02:23:49 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 9D89C27C0054; Mon, 15 Jun 2020 02:23:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 15 Jun 2020 02:23:48 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeijedguddutdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeehrdeljeenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id B6C853060F09; Mon, 15 Jun 2020 02:23:46 -0400 (EDT) From: Tassilo Horn To: "Basil L. Contovounesios" Cc: Dmitry Gutov , Stefan Monnier , emacs-devel@gnu.org Subject: VC repository-url command (was: RFC: Automatic setup for bug-reference-mode) References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <401bed41-3eb1-3049-2037-a9f2b8ac385c@yandex.ru> <877dw9qs1c.fsf@tcd.ie> Mail-Followup-To: "Basil L. Contovounesios" , Dmitry Gutov , Stefan Monnier , emacs-devel@gnu.org Date: Mon, 15 Jun 2020 08:23:45 +0200 In-Reply-To: <877dw9qs1c.fsf@tcd.ie> (Basil L. Contovounesios's message of "Sun, 14 Jun 2020 22:03:11 +0100") Message-ID: <875zbssv7y.fsf_-_@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 06:23:50 -0000 "Basil L. Contovounesios" writes: >>> (defun vc-git-repository-url (file-or-dir) >>> (let ((default-directory (vc-git-root file-or-dir))) >>> (with-temp-buffer >>> (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") >>> (buffer-substring-no-properties (point-min) (1- (point-max)))))) >>> where I explicitly name the remote "origin" (which, I know, doesn't need >>> to exist but still works in 99% of all cases). >> >> Sounds good! >> >> If the new version can be used in vc-git-dir-extra-headers, could you >> please make it so? I'll have a look. >> That aside, I was going to ask whether the new backend method should >> take a "remote-name" argument, but I don't know how many backends >> support different remotes. Or what other actual code is going to use >> this method anyway. I guess all distributed VCS do in some form or another. With Hg, I currently return the value of paths.default which could also be paths.other-remote. With Bzr, I think there's no such concept but each branch is bound to some "parent branch" which is usually the URL from where you cloned from. > It would definitely be nice to somehow make this configurable. For > example in my local Emacs checkout I have Savannah as the "upstream" > remote, and my mirror on GitLab as the "origin" remote, because that's > where I push to most of the time. I usually do the opposite: origin is the original project and tsdh is my fork which I set as push-remote. So I think I'll add an optional remote-name argument as suggested by Dmitry that overrides "origin" for Git and "default" for Hg while being ignored by the other supported backends SVN and Bzr. Then I could also add "default remote" defvars (or defcustoms?) for Git and Hg which are used if no remote-name was explicitly provided as suggested by you. As for the original task I want to implement, i.e., bug-reference auto-setup, I'd actually want to get the remote's URL which actually hosts the bug tracker (thinking of GitLab/GitHub repos and their forks). So probably there I should try likely remote names such as "upstream" before falling back to "origin"... Bye, Tassilo From MAILER-DAEMON Mon Jun 15 03:00:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkj6J-0005pt-PZ for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 03:00:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkj6I-0005pj-1Q for emacs-devel@gnu.org; Mon, 15 Jun 2020 03:00:10 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:46148) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkj6F-0008Lf-Ma; Mon, 15 Jun 2020 03:00:09 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49lhzQ0J6Lz1qrgD; Mon, 15 Jun 2020 09:00:02 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49lhzP6N6fz1sPMv; Mon, 15 Jun 2020 09:00:01 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id vEh_OsQaXPL3; Mon, 15 Jun 2020 09:00:01 +0200 (CEST) X-Auth-Info: VFVWDmOYMZ86tq5UBANV4Z1VmJL1Mcm2evLXd5i4cpRnmWGjlXP0u2YAlwwptVrh Received: from igel.home (ppp-46-244-168-31.dynamic.mnet-online.de [46.244.168.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Mon, 15 Jun 2020 09:00:00 +0200 (CEST) Received: by igel.home (Postfix, from userid 1000) id 5F52B2C2487; Mon, 15 Jun 2020 08:59:59 +0200 (CEST) From: Andreas Schwab To: Eli Zaretskii Cc: =?utf-8?Q?K=C3=A9vin?= Le Gouguec , alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> X-Yow: FIRST, I was in a TRUCK...THEN, I was in a DINER... Date: Mon, 15 Jun 2020 08:59:59 +0200 In-Reply-To: <83d0612gx3.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 05:37:12 +0300") Message-ID: <87eeqg7r0w.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=212.18.0.9; envelope-from=whitebox@nefkom.net; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 03:00:02 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 07:00:10 -0000 On Jun 15 2020, Eli Zaretskii wrote: > We accept and welcome patches in any form and shape. However, we > recommend to use "git format-patch" (see CONTRIBUTE), Which is exactly what he did. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Mon Jun 15 03:41:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkjkI-0003mp-16 for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 03:41:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkjkF-0003lM-KE for emacs-devel@gnu.org; Mon, 15 Jun 2020 03:41:27 -0400 Received: from mx.sdf.org ([205.166.94.20]:59967) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkjkC-0007BI-3Y; Mon, 15 Jun 2020 03:41:27 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 05F7f9Yk002354 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Mon, 15 Jun 2020 07:41:09 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 05F7f8RL017695; Mon, 15 Jun 2020 07:41:08 GMT From: Andrea Corallo To: Gong-Yi Liao =?utf-8?B?5buW5a6u5q+F?= Cc: emacs-devel@gnu.org, Eli Zaretskii , Stefan Monnier Subject: Re: On elisp running native - Update 9 References: <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> Date: Mon, 15 Jun 2020 07:41:08 +0000 In-Reply-To: ("Gong-Yi Liao =?utf-8?B?5buW5a6u5q+FIidz?= message of "Mon, 15 Jun 2020 00:04:13 -0500") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 02:47:27 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 07:41:28 -0000 Gong-Yi Liao =E5=BB=96=E5=AE=AE=E6=AF=85 writes: > Andrea, > > Question: > What's the difference between Update 1's and=C2=A0 =C2=A0Update 9's bench= mark > table's byte code column? > > The byte code column's=C2=A0 run time results have=C2=A0 decreased roughl= y 78% > from Update 1's 507.23s to Update 9's 114.91, that seems unbelievable > if all the Update 9's byte code result are purely based on byte code > without any natively compiled code. > > Are Update 9's byte code result based on natively compiled built-in > function and byte code compiled benchmark functions or they are > purely all byte code compiled? > > Or there are drastic changes in benchmark environment settings > (hardware, number of repetitions) betweens these two updates? > > Thanks, > Gong-Yi.=C2=A0 Hi Gong-Yi, The first measures were based on a collection of benchmarks that later became what we have in ELPA now. In the transition a number of things changed: the set slightly changed, IIRC also the durations have been normalized to be more homogeneous and the result is given in avg per iteration instead of being cumulated. Lastly the two tests has been run on two different machines. Probably would be interesting to re-add the u-benchmark for type-hints in the future. Regards Andrea --=20 akrl@sdf.org From MAILER-DAEMON Mon Jun 15 04:12:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkkEg-0007Tx-AI for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 04:12:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkkEf-0007RG-41 for emacs-devel@gnu.org; Mon, 15 Jun 2020 04:12:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60531) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkkEc-0004M6-MG; Mon, 15 Jun 2020 04:12:50 -0400 Received: from [176.12.209.73] (port=31369 helo=[10.214.118.182]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jkkEa-000769-3S; Mon, 15 Jun 2020 04:12:50 -0400 Date: Mon, 15 Jun 2020 11:12:43 +0300 User-Agent: K-9 Mail for Android In-Reply-To: <87eeqg7r0w.fsf@igel.home> References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: git-send-email To: emacs-devel@gnu.org,Andreas Schwab CC: alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, =?ISO-8859-1?Q?K=E9vin_Le_Gouguec?= From: Eli Zaretskii Message-ID: <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 08:12:53 -0000 On June 15, 2020 9:59:59 AM GMT+03:00, Andreas Schwab wrote: > On Jun 15 2020, Eli Zaretskii wrote: >=20 > > We accept and welcome patches in any form and shape=2E However, we > > recommend to use "git format-patch" (see CONTRIBUTE), >=20 > Which is exactly what he did=2E No, he did not=2E He said that much: he used "git send-email"=2E You are hinting that "git send-email" runs format-patch internally, for so= me variants of its command-line arguments=2E But that is not what CONTRIBU= TE says about using "git send-email", and for a good reason: doing it the C= ONTRIBUTE way produces email messages that are easily recognizable as being= fit for "git am", and don't require tedious and error-prone manual analysi= s to make sure it is not just diffs pasted into the email body=2E We can discuss changes to CONTRIBUTE, but as long as it says something, le= t's try to act as it says=2E We usually have good reasons for what it says= =2E From MAILER-DAEMON Mon Jun 15 04:23:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkkOq-0007s8-83 for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 04:23:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkkOo-0007nz-HD for emacs-devel@gnu.org; Mon, 15 Jun 2020 04:23:22 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:35803) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkkOm-0006Sq-KR; Mon, 15 Jun 2020 04:23:22 -0400 Received: by mail-wm1-x332.google.com with SMTP id q25so13871590wmj.0; Mon, 15 Jun 2020 01:23:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=LprF/ujl4LX8N8Ev35MJLfqLrSyMki6g+ulhYmyBHfM=; b=fzuCGM41qIYGbdofwUZARntFbCR0VrCrepdbAEPS0Gk39JqcgHocqQTZzU1lT0wAM3 lK0zscIa1GGVo+YcX/IyFS9Z9jOPppt/XxhuNgDJywIiuqBHcSzGp4xsX5vyxsogPQ2R bIAmH4cioixMMtH1gY/2JMbvt8NJhI2MMe61jW3zw3myWCYgHKexTWEU0dnC4gxZYkL+ 1rIikT7Pfwu7o26d5EkSDFj9bXDFoJ75BW3NXJCZIh/wK+U98qV6+yya49GojHTNBHX9 7BdpknAKR3FiNUwOBUjLLgSrJkOVqV4TvE9zIYtlK59UAwTtj7TziBYrHjZOPcC4uI/U Q54w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=LprF/ujl4LX8N8Ev35MJLfqLrSyMki6g+ulhYmyBHfM=; b=o3ePpWcTkfIqxEGOuLGJKGnCXWmNjlMZZ+uYKXYkHtvpmmABp4jdCs3Hjiy8F5EXyG qPpaevujG3foQppLvjMkBoierrrpkSSR1YiA2ZQxtvG4x9TqPoFOBZT+CfcukIGHG75u zARoIZuADw6ETzxzo7SJQLvIB4HTBr3/Jl8yyyX9UEgmn9uf+fHv4KUj6xS6yK/LPHGD uToAr51iDxW9r8V+jfITOK9O6S5+qZRj4RNyi0g9/iGlMrSHhWN+KA9kcXDyL+1pPmBY mod/Ea7QNwBQ9c/LOeWwSSeaXO5LOpXcR558Hn+zxHAFH5nUN4LiFs1+XTGUDsEUWspw m2Tg== X-Gm-Message-State: AOAM533qX3p4fabim4vcx2vBgBUvvj+OlsZtb+VPBNTCB1KLkYFuic/g CkStCR4zn++XlDAZDLqP6ns= X-Google-Smtp-Source: ABdhPJxXBkdEfipGQAwZ79H0Jn5ooNxubM82QAk3IPLprK8P8YiOa9q6tzNE9c4rY95U3h5kUJpYmA== X-Received: by 2002:a1c:a74f:: with SMTP id q76mr12503805wme.65.1592209398633; Mon, 15 Jun 2020 01:23:18 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id u74sm22508843wmu.31.2020.06.15.01.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:23:17 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> Date: Mon, 15 Jun 2020 10:23:16 +0200 In-Reply-To: <83d0612gx3.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 05:37:12 +0300") Message-ID: <878sgobuvf.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x332.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 08:23:22 -0000 Eli Zaretskii writes: > We accept and welcome patches in any form and shape. However, we > recommend to use "git format-patch" (see CONTRIBUTE), and for a good > reason: doing so leaves no doubt regarding the authorship of the > changes. Whereas just sending email could dupe us in attributing the > change to a different person, something that we try to avoid. AFAIU, git send-email literally just runs format-patch, and sends the result (with said optional annotation) over SMTP. I'm not sure what difference this makes as far as authorship authenticity is concerned? The From field used by git send-email is literally the From field set by git format-patch. Really, the only differences that I can see between format-patch and send-email are - for contributors, no need to whip out a mail client and fiddle with attachments, - for maintainers, no need to scan the mail for attachments; just pipe the mail itself to git am. Apologies if I'm missing anything. From MAILER-DAEMON Mon Jun 15 04:31:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkkWl-0004qd-Gv for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 04:31:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkkWj-0004oE-NJ for emacs-devel@gnu.org; Mon, 15 Jun 2020 04:31:33 -0400 Received: from mail1438c50.megamailservers.eu ([91.136.14.38]:54254 helo=mail263c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkkWg-0000Jl-Id; Mon, 15 Jun 2020 04:31:33 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592209885; bh=+5Hvm2Ka0jYZP7R6agTex/NEn7j/1C9m6c05nOBwLe4=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=pb1Wso0Ni9Ud2AcXZnFfTnqzSy2Tc7EtcbzydRZQVX5GS2BmHNW/OnclF2a184o3d Q0b13uabXVcNkyYGSkN9Ds17QlmkgIkHY4NUeWGjroV9bAhdc7TMLmUmc14Tog8cbz BJuQnf0rLHI1hzZDmDJuxS2YoDeRZK5uydh+QXIE= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail263c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05F8VMsU030562; Mon, 15 Jun 2020 08:31:24 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Message-Id: <468DA4C0-EB5B-4B97-B389-9335F72CF283@acm.org> Content-Type: multipart/mixed; boundary="Apple-Mail=_5CA46CC0-7A34-4ABF-B3F6-B497DAB864D3" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing Date: Mon, 15 Jun 2020 10:31:22 +0200 In-Reply-To: <83r1ui3j3m.fsf@gnu.org> Cc: pipcet@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> <83r1ui3j3m.fsf@gnu.org> X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1E.5EE731DD.006C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=e6d4tph/ c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=amhcuG_bEiOM1kBPMkAA:9 a=CjuIK1q_8ugA:10 a=HsPE_wXaftQPuV7PQjUA:9 a=B2y7HmGcmWMA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.14.38; envelope-from=mattiase@acm.org; helo=mail263c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 04:31:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 08:31:34 -0000 --Apple-Mail=_5CA46CC0-7A34-4ABF-B3F6-B497DAB864D3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 13 juni 2020 kl. 20.40 skrev Eli Zaretskii : >> Since "#12345" is malformed it should be rejected, and will be. >=20 > That is definitely a change in behavior, isn't it? Of course -- it is a bug fix, and as such a change in behaviour by = definition. It was one of the prime motivations behind these changes: I really had = it after writing #12345 etc and getting nonsense values. Note that this particular input is already firmly rejected by several if = not all of the other backends; it isn't as if it provides a reliably = mechanism that anyone is likely to use. > Our convention is to use the US English spelling. Replaced everywhere. (Misspelling on purpose is difficult!) > Please also describe in more detail the value put in *DST, I don't > think it's clear enough. Elaborated. > The commentary doesn't explain what is the "comp" part of the name > about. Names extended to ..._color_comp and comments amended to indicate that = they parse a colour component. > I think this doc string is too terse. I would rephrase the beginning > as follows: >=20 > Convert a color SPEC into a list of standard RGB values. >=20 > Value is a list of the form (R G B), where R, G, and B are the > integer values, the intensities of the primary colors. > The argument SPEC should be a string in one of the following formats: Thank you, but I don't think we need to describe how RGB works here. = I've provided more detail about the return value according to your = example in other respects. > In the "rgbi" description, I think we should mention explicitly that > the components are floating-point numbers. Done. > What happens if the argument is not a string? What should happen? Thanks for catching that! An accidental omission. > Finally, the Lisp primitive needs a NEWS entry and perhaps also a > place in the ELisp manual. Actually, now that you made me think of it, I'd rather make it internal = since it isn't intended for general use; it's only exported to Lisp = because one backend (TTY) needs to access it that way. In the attached = patch, it has an internal- prefix. Not extremely important either way, = of course. (Or should it be internal-- with a double hyphen? Not sure how we do it = nowadays.) > Thanks. Thanks for reviewing again! Oh, and if you (or someone else) could = confirm that it compiles and works on Windows, I'd be most grateful. --Apple-Mail=_5CA46CC0-7A34-4ABF-B3F6-B497DAB864D3 Content-Disposition: attachment; filename=0001-Consolidate-RGB-string-parsers.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Consolidate-RGB-string-parsers.patch" Content-Transfer-Encoding: quoted-printable =46rom=20ae60457ab0711216b8dd03c6a3c5c23238ad624c=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2012=20Jun=202020=2018:12:37=20+0200=0A= Subject:=20[PATCH]=20Consolidate=20#RGB=20string=20parsers=0A=0AUse=20a=20= single=20parser=20of=20color=20strings=20in=20the=20#RGB,=20rgb:R/G/B=20= and=0Argbi:R/G/B=20formats,=20replacing=20four=20existing=20ones.=20=20= Previously,=0Aerror-checking=20was=20spotty,=20handling=20of=20the=20= rgbi:=20format=20not=20always=0Apresent,=20and=20normalization=20of=20= the=20result=20was=20sometimes=20incorrect.=0A=0A*=20src/dispextern.h:=20= New=20prototype.=0A*=20src/xfaces.c=20(parse_hex_color_comp,=20= parse_float_color_comp)=0A(parse_color_spec,=20= Finternal-color_values_from_color_spec):=20New=20functions.=0A*=20= test/src/xfaces-tests.el=20= (xfaces-internal-color-values-from-color-spec):=0ANew=20test.=0A*=20= lisp/term/tty-colors.el=20(tty-color-standard-values):=0AUse=20= internal-color-values-from-color-spec,=20replacing=20old=20parser.=0A*=20= src/nsterm.m=20(ns_get_color):=0A*=20src/w32fns.c=20(x_to_w32_color):=0A= *=20src/xterm.c=20(x_parse_color):=20Use=20parse_color_spec,=20replacing=20= old=0Aparsers.=0A(HEX_COLOR_NAME_LENGTH):=20Remove=20#define.=0A---=0A=20= lisp/term/tty-colors.el=20=20|=20=2058=20+--------------=0A=20= src/dispextern.h=20=20=20=20=20=20=20=20=20|=20=20=202=20+=0A=20= src/nsterm.m=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2059=20= +++++----------=0A=20src/w32fns.c=20=20=20=20=20=20=20=20=20=20=20=20=20= |=20157=20++-------------------------------------=0A=20src/xfaces.c=20=20= =20=20=20=20=20=20=20=20=20=20=20|=20116=20+++++++++++++++++++++++++++++=0A= =20src/xterm.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2051=20= ++++---------=0A=20test/src/xfaces-tests.el=20|=20=2023=20++++++=0A=207=20= files=20changed,=20180=20insertions(+),=20286=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/term/tty-colors.el=20b/lisp/term/tty-colors.el=0Aindex=20= 39ca2d3627..73e2431822=20100644=0A---=20a/lisp/term/tty-colors.el=0A+++=20= b/lisp/term/tty-colors.el=0A@@=20-923,62=20+923,8=20@@=20= tty-color-standard-values=0A=20COLOR=20(see=20the=20info=20node=20= `(emacs)=20Colors'),=20regardless=20of=20whether=0A=20the=20terminal=20= can=20display=20it,=20so=20the=20return=20value=20should=20be=20the=0A=20= same=20regardless=20of=20what=20display=20is=20being=20used."=0A-=20=20= (let=20((len=20(length=20color)))=0A-=20=20=20=20(cond=20((and=20(>=3D=20= len=204)=20;;=20HTML/CSS/SVG-style=20"#XXYYZZ"=20color=20spec=0A-=09=09= (eq=20(aref=20color=200)=20?#)=0A-=09=09(member=20(aref=20color=201)=0A-=09= =09=09'(?0=20?1=20?2=20?3=20?4=20?5=20?6=20?7=20?8=20?9=0A-=09=09=09=20=20= =20=20=20?a=20?b=20?c=20?d=20?e=20?f=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?A=20?B=20?C=20?D=20= ?E=20?F)))=0A-=09=20=20=20;;=20Translate=20the=20string=20"#XXYYZZ"=20= into=20a=20list=20of=20numbers=0A-=09=20=20=20;;=20(XX=20YY=20ZZ),=20= scaling=20each=20to=20the=20{0..65535}=20range.=20=20This=0A-=09=20=20=20= ;;=20follows=20the=20HTML=20color=20convention,=20where=20both=20"#fff"=20= and=0A-=09=20=20=20;;=20"#ffffff"=20represent=20the=20same=20color,=20= white.=0A-=09=20=20=20(let*=20((ndig=20(/=20(-=20len=201)=203))=0A-=09=09= =20=20(maxval=20(1-=20(ash=201=20(*=204=20ndig))))=0A-=09=09=20=20(i1=20= 1)=0A-=09=09=20=20(i2=20(+=20i1=20ndig))=0A-=09=09=20=20(i3=20(+=20i2=20= ndig))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(i4=20(+=20= i3=20ndig)))=0A-=09=20=20=20=20=20(list=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i1=20i2)=20= 16)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20= =20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20(substring=20= color=20i2=20i3)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A= -=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20i4)=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09= =20maxval))))=0A-=09=20=20((and=20(>=3D=20len=209)=20;;=20X-style=20= rgb:xx/yy/zz=20color=20spec=0A-=09=09(string=3D=20(substring=20color=200=20= 4)=20"rgb:"))=0A-=09=20=20=20;;=20Translate=20the=20string=20= "rgb:XX/YY/ZZ"=20into=20a=20list=20of=0A-=09=20=20=20;;=20numbers=20(XX=20= YY=20ZZ),=20scaling=20each=20to=20the=20{0..65535}=0A-=09=20=20=20;;=20= range.=20=20"rgb:F/F/F"=20is=20white.=0A-=09=20=20=20(let*=20((ndig=20(/=20= (-=20len=203)=203))=0A-=09=09=20=20(maxval=20(1-=20(ash=201=20(*=204=20= (-=20ndig=201)))))=0A-=09=09=20=20(i1=204)=0A-=09=09=20=20(i2=20(+=20i1=20= ndig))=0A-=09=09=20=20(i3=20(+=20i2=20ndig))=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(i4=20(+=20i3=20ndig)))=0A-=09=20=20=20=20=20= (list=0A-=09=20=20=20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20= =20=20=20(substring=20color=20i1=20(-=20i2=201))=2016)=0A-=09=09=20=20=20= =2065535)=0A-=09=09=20maxval)=0A-=09=20=20=20=20=20=20(/=20(*=20= (string-to-number=0A-=09=09=20=20=20=20=20(substring=20color=20i2=20(-=20= i3=201))=2016)=0A-=09=09=20=20=20=2065535)=0A-=09=09=20maxval)=0A-=09=20=20= =20=20=20=20(/=20(*=20(string-to-number=0A-=09=09=20=20=20=20=20= (substring=20color=20i3=20(1-=20i4))=2016)=0A-=09=09=20=20=20=2065535)=0A= -=09=09=20maxval))))=0A-=09=20=20(t=0A-=09=20=20=20(cdr=20(assoc=20color=20= color-name-rgb-alist))))))=0A+=20=20(or=20= (internal-color-values-from-color-spec=20color)=0A+=20=20=20=20=20=20= (cdr=20(assoc=20color=20color-name-rgb-alist))))=0A=20=0A=20(defun=20= tty-color-translate=20(color=20&optional=20frame)=0A=20=20=20"Given=20a=20= color=20COLOR,=20return=20the=20index=20of=20the=20corresponding=20TTY=20= color.=0Adiff=20--git=20a/src/dispextern.h=20b/src/dispextern.h=0Aindex=20= 0b1f3d14ae..e1d6eddc41=20100644=0A---=20a/src/dispextern.h=0A+++=20= b/src/dispextern.h=0A@@=20-3514,6=20+3514,8=20@@=20#define=20= RGB_PIXEL_COLOR=20COLORREF=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Lisp_Object);=0A=20extern=20bool=20tty_defined_color=20(struct=20frame=20= *,=20const=20char=20*,=20Emacs_Color=20*,=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20bool,=20= bool);=0A+bool=20parse_color_spec=20(const=20char=20*,=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20unsigned=20short=20= *,=20unsigned=20short=20*,=20unsigned=20short=20*);=0A=20=0A=20= Lisp_Object=20tty_color_name=20(struct=20frame=20*,=20int);=0A=20void=20= clear_face_cache=20(bool);=0Adiff=20--git=20a/src/nsterm.m=20= b/src/nsterm.m=0Aindex=203dc7e1db7c..0e405fc017=20100644=0A---=20= a/src/nsterm.m=0A+++=20b/src/nsterm.m=0A@@=20-2341,9=20+2341,6=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20See=20= https://lists.gnu.org/r/emacs-devel/2009-07/msg01203.html.=20=20*/=0A=20= {=0A=20=20=20NSColor=20*new=20=3D=20nil;=0A-=20=20static=20char=20= hex[20];=0A-=20=20int=20scaling=20=3D=200;=0A-=20=20float=20r=20=3D=20= -1.0,=20g,=20b;=0A=20=20=20NSString=20*nsname=20=3D=20[NSString=20= stringWithUTF8String:=20name];=0A=20=0A=20=20=20NSTRACE=20= ("ns_get_color(%s,=20**)",=20name);=0A@@=20-2386,51=20+2383,31=20@@=20so=20= some=20key=20presses=20(TAB)=20are=20swallowed=20by=20the=20system.=20=20= */=0A=20=20=20=20=20}=0A=20=0A=20=20=20/*=20First,=20check=20for=20some=20= sort=20of=20numeric=20specification.=20=20*/=0A-=20=20hex[0]=20=3D=20= '\0';=0A-=0A-=20=20if=20(name[0]=20=3D=3D=20'0'=20||=20name[0]=20=3D=3D=20= '1'=20||=20name[0]=20=3D=3D=20'.')=20=20/*=20RGB=20decimal=20*/=0A+=20=20= unsigned=20short=20r16,=20g16,=20b16;=0A+=20=20if=20(parse_color_spec=20= (name,=20&r16,=20&g16,=20&b16))=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20= NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20nsname];=0A= -=20=20=20=20=20=20[scanner=20scanFloat:=20&r];=0A-=20=20=20=20=20=20= [scanner=20scanFloat:=20&g];=0A-=20=20=20=20=20=20[scanner=20scanFloat:=20= &b];=0A-=20=20=20=20}=0A-=20=20else=20if=20(!strncmp(name,=20"rgb:",=20= 4))=20=20/*=20A=20newer=20X11=20format=20--=20rgb:r/g/b=20*/=0A-=20=20=20= =20scaling=20=3D=20(snprintf=20(hex,=20sizeof=20hex,=20"%s",=20name=20+=20= 4)=20-=202)=20/=203;=0A-=20=20else=20if=20(name[0]=20=3D=3D=20'#')=20=20=20= =20=20=20=20=20/*=20An=20old=20X11=20format;=20convert=20to=20newer=20*/=0A= -=20=20=20=20{=0A-=20=20=20=20=20=20int=20len=20=3D=200;=0A-=20=20=20=20=20= =20while=20(isxdigit=20(name[len=20+=201]))=0A-=20=20=20=20=20=20=20=20= len++;=0A-=20=20=20=20=20=20if=20(name[len=20+=201]=20=3D=3D=20'\0'=20&&=20= len=20>=3D=201=20&&=20len=20<=3D=2012=20&&=20len=20%=203=20=3D=3D=200)=0A= -=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20scaling=20=3D=20= len=20/=203;=0A-=20=20=20=20=20=20=20=20=20=20for=20(int=20i=20=3D=200;=20= i=20<=203;=20i++)=0A-=20=20=20=20=20=20=20=20=20=20=20=20sprintf=20(hex=20= +=20i=20*=20(scaling=20+=201),=20"%.*s/",=20scaling,=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20name=20+=201=20+=20i=20*=20= scaling);=0A-=20=20=20=20=20=20=20=20=20=20hex[3=20*=20(scaling=20+=201)=20= -=201]=20=3D=20'\0';=0A-=20=20=20=20=20=20=20=20}=0A+=20=20=20=20=20=20= *col=20=3D=20[NSColor=20colorForEmacsRed:=20r16=20/=2065535.0=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20green:=20g16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= blue:=20b16=20/=2065535.0=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20alpha:=201.0];=0A+=20= =20=20=20=20=20unblock_input=20();=0A+=20=20=20=20=20=20return=200;=0A=20= =20=20=20=20}=0A-=0A-=20=20if=20(hex[0])=0A+=20=20else=20if=20(name[0]=20= =3D=3D=20'0'=20||=20name[0]=20=3D=3D=20'1'=20||=20name[0]=20=3D=3D=20= '.')=0A=20=20=20=20=20{=0A-=20=20=20=20=20=20unsigned=20int=20rr,=20gg,=20= bb;=0A-=20=20=20=20=20=20float=20fscale=20=3D=20(1=20<<=20(scaling=20*=20= 4))=20-=201;=0A-=20=20=20=20=20=20if=20(sscanf=20(hex,=20"%x/%x/%x",=20= &rr,=20&gg,=20&bb))=0A+=20=20=20=20=20=20/*=20RGB=20decimal=20*/=0A+=20=20= =20=20=20=20NSScanner=20*scanner=20=3D=20[NSScanner=20scannerWithString:=20= nsname];=0A+=20=20=20=20=20=20float=20r,=20g,=20b;=0A+=20=20=20=20=20=20= if=20(=20=20=20[scanner=20scanFloat:=20&r]=20&&=20r=20>=3D=200=20&&=20r=20= <=3D=201=0A+=20=20=20=20=20=20=20=20=20=20&&=20[scanner=20scanFloat:=20= &g]=20&&=20g=20>=3D=200=20&&=20g=20<=3D=201=0A+=20=20=20=20=20=20=20=20=20= =20&&=20[scanner=20scanFloat:=20&b]=20&&=20b=20>=3D=200=20&&=20b=20<=3D=20= 1)=0A=20=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20r=20=3D= =20rr=20/=20fscale;=0A-=20=20=20=20=20=20=20=20=20=20g=20=3D=20gg=20/=20= fscale;=0A-=20=20=20=20=20=20=20=20=20=20b=20=3D=20bb=20/=20fscale;=0A+=20= =20=20=20=20=20=20=20=20=20*col=20=3D=20[NSColor=20colorForEmacsRed:=20r=20= green:=20g=20blue:=20b=20alpha:=201.0];=0A+=20=20=20=20=20=20=20=20=20=20= unblock_input=20();=0A+=20=20=20=20=20=20=20=20=20=20return=200;=0A=20=20= =20=20=20=20=20=20=20}=0A=20=20=20=20=20}=0A=20=0A-=20=20if=20(r=20>=3D=20= 0.0F)=0A-=20=20=20=20{=0A-=20=20=20=20=20=20*col=20=3D=20[NSColor=20= colorForEmacsRed:=20r=20green:=20g=20blue:=20b=20alpha:=201.0];=0A-=20=20= =20=20=20=20unblock_input=20();=0A-=20=20=20=20=20=20return=200;=0A-=20=20= =20=20}=0A-=0A=20=20=20/*=20Otherwise,=20color=20is=20expected=20to=20be=20= from=20a=20list=20*/=0A=20=20=20{=0A=20=20=20=20=20NSEnumerator=20= *lenum,=20*cenum;=0Adiff=20--git=20a/src/w32fns.c=20b/src/w32fns.c=0A= index=20e595b0285a..ab864332e7=20100644=0A---=20a/src/w32fns.c=0A+++=20= b/src/w32fns.c=0A@@=20-864,161=20+864,14=20@@=20x_to_w32_color=20(const=20= char=20*=20colorname)=0A=20=0A=20=20=20block_input=20();=0A=20=0A-=20=20= if=20(colorname[0]=20=3D=3D=20'#')=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(colorname,=20&r,=20&g,=20&b))=0A=20= =20=20=20=20{=0A-=20=20=20=20=20=20/*=20Could=20be=20an=20old-style=20= RGB=20Device=20specification.=20=20*/=0A-=20=20=20=20=20=20int=20size=20= =3D=20strlen=20(colorname=20+=201);=0A-=20=20=20=20=20=20char=20*color=20= =3D=20alloca=20(size=20+=201);=0A-=0A-=20=20=20=20=20=20strcpy=20(color,=20= colorname=20+=201);=0A-=20=20=20=20=20=20if=20(size=20=3D=3D=203=20||=20= size=20=3D=3D=206=20||=20size=20=3D=3D=209=20||=20size=20=3D=3D=2012)=0A= -=09{=0A-=09=20=20UINT=20colorval;=0A-=09=20=20int=20i,=20pos;=0A-=09=20=20= pos=20=3D=200;=0A-=09=20=20size=20/=3D=203;=0A-=09=20=20colorval=20=3D=20= 0;=0A-=0A-=09=20=20for=20(i=20=3D=200;=20i=20<=203;=20i++)=0A-=09=20=20=20= =20{=0A-=09=20=20=20=20=20=20char=20*end;=0A-=09=20=20=20=20=20=20char=20= t;=0A-=09=20=20=20=20=20=20unsigned=20long=20value;=0A-=0A-=09=20=20=20=20= =20=20/*=20The=20check=20for=20'x'=20in=20the=20following=20conditional=20= takes=20into=0A-=09=09=20account=20the=20fact=20that=20strtol=20allows=20= a=20"0x"=20in=20front=20of=0A-=09=09=20our=20numbers,=20and=20we=20= don't.=20=20*/=0A-=09=20=20=20=20=20=20if=20(!isxdigit=20(color[0])=20||=20= color[1]=20=3D=3D=20'x')=0A-=09=09break;=0A-=09=20=20=20=20=20=20t=20=3D=20= color[size];=0A-=09=20=20=20=20=20=20color[size]=20=3D=20'\0';=0A-=09=20=20= =20=20=20=20value=20=3D=20strtoul=20(color,=20&end,=2016);=0A-=09=20=20=20= =20=20=20color[size]=20=3D=20t;=0A-=09=20=20=20=20=20=20if=20(errno=20=3D=3D= =20ERANGE=20||=20end=20-=20color=20!=3D=20size)=0A-=09=09break;=0A-=09=20= =20=20=20=20=20switch=20(size)=0A-=09=09{=0A-=09=09case=201:=0A-=09=09=20= =20value=20=3D=20value=20*=200x10;=0A-=09=09=20=20break;=0A-=09=09case=20= 2:=0A-=09=09=20=20break;=0A-=09=09case=203:=0A-=09=09=20=20value=20/=3D=20= 0x10;=0A-=09=09=20=20break;=0A-=09=09case=204:=0A-=09=09=20=20value=20/=3D= =200x100;=0A-=09=09=20=20break;=0A-=09=09}=0A-=09=20=20=20=20=20=20= colorval=20|=3D=20(value=20<<=20pos);=0A-=09=20=20=20=20=20=20pos=20+=3D=20= 0x8;=0A-=09=20=20=20=20=20=20if=20(i=20=3D=3D=202)=0A-=09=09{=0A-=09=09=20= =20unblock_input=20();=0A-=09=09=20=20XSETINT=20(ret,=20colorval);=0A-=09= =09=20=20return=20ret;=0A-=09=09}=0A-=09=20=20=20=20=20=20color=20=3D=20= end;=0A-=09=20=20=20=20}=0A-=09}=0A-=20=20=20=20}=0A-=20=20else=20if=20= (strnicmp=20(colorname,=20"rgb:",=204)=20=3D=3D=200)=0A-=20=20=20=20{=0A= -=20=20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=204;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= unsigned=20long=20value;=0A-=0A-=09=20=20/*=20The=20check=20for=20'x'=20= in=20the=20following=20conditional=20takes=20into=0A-=09=20=20=20=20=20= account=20the=20fact=20that=20strtol=20allows=20a=20"0x"=20in=20front=20= of=0A-=09=20=20=20=20=20our=20numbers,=20and=20we=20don't.=20=20*/=0A-=09= =20=20if=20(!isxdigit=20(color[0])=20||=20color[1]=20=3D=3D=20'x')=0A-=09= =20=20=20=20break;=0A-=09=20=20value=20=3D=20strtoul=20(color,=20&end,=20= 16);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09=20=20=20=20break;=0A= -=09=20=20switch=20(end=20-=20color)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20= case=201:=0A-=09=20=20=20=20=20=20value=20=3D=20value=20*=200x10=20+=20= value;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20case=202:=0A-=09=20= =20=20=20=20=20break;=0A-=09=20=20=20=20case=203:=0A-=09=20=20=20=20=20=20= value=20/=3D=200x10;=0A-=09=20=20=20=20=20=20break;=0A-=09=20=20=20=20= case=204:=0A-=09=20=20=20=20=20=20value=20/=3D=200x100;=0A-=09=20=20=20=20= =20=20break;=0A-=09=20=20=20=20default:=0A-=09=20=20=20=20=20=20value=20= =3D=20ULONG_MAX;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(value=20=3D=3D=20= ULONG_MAX)=0A-=09=20=20=20=20break;=0A-=09=20=20colorval=20|=3D=20(value=20= <<=20pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=20= 2)=0A-=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A= -=09=09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20= =20=20=20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20= ret;=0A-=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20= =20=20break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A+=20=20=20=20= =20=20unblock_input=20();=0A+=20=20=20=20=20=20/*=20Throw=20away=20the=20= low=208=20bits=20and=20return=200xBBGGRR.=20=20*/=0A+=20=20=20=20=20=20= return=20make_fixnum=20((b=20&=200xff00)=20<<=208=20|=20(g=20&=200xff00)=20= |=20r=20>>=208);=0A=20=20=20=20=20}=0A-=20=20else=20if=20(strnicmp=20= (colorname,=20"rgbi:",=205)=20=3D=3D=200)=0A-=20=20=20=20{=0A-=20=20=20=20= =20=20/*=20This=20is=20an=20RGB=20Intensity=20specification.=20=20*/=0A-=20= =20=20=20=20=20const=20char=20*color;=0A-=20=20=20=20=20=20UINT=20= colorval;=0A-=20=20=20=20=20=20int=20i,=20pos;=0A-=20=20=20=20=20=20pos=20= =3D=200;=0A-=0A-=20=20=20=20=20=20colorval=20=3D=200;=0A-=20=20=20=20=20=20= color=20=3D=20colorname=20+=205;=0A-=20=20=20=20=20=20for=20(i=20=3D=20= 0;=20i=20<=203;=20i++)=0A-=09{=0A-=09=20=20char=20*end;=0A-=09=20=20= double=20value;=0A-=09=20=20UINT=20val;=0A=20=0A-=09=20=20value=20=3D=20= strtod=20(color,=20&end);=0A-=09=20=20if=20(errno=20=3D=3D=20ERANGE)=0A-=09= =20=20=20=20break;=0A-=09=20=20if=20(value=20<=200.0=20||=20value=20>=20= 1.0)=0A-=09=20=20=20=20break;=0A-=09=20=20val=20=3D=20(UINT)(0x100=20*=20= value);=0A-=09=20=20/*=20We=20used=200x100=20instead=20of=200xFF=20to=20= give=20a=20continuous=0A-=09=20=20=20=20=20range=20between=200.0=20and=20= 1.0=20inclusive.=20=20The=20next=20statement=0A-=09=20=20=20=20=20fixes=20= the=201.0=20case.=20=20*/=0A-=09=20=20if=20(val=20=3D=3D=200x100)=0A-=09=20= =20=20=20val=20=3D=200xFF;=0A-=09=20=20colorval=20|=3D=20(val=20<<=20= pos);=0A-=09=20=20pos=20+=3D=200x8;=0A-=09=20=20if=20(i=20=3D=3D=202)=0A= -=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20(*end=20!=3D=20'\0')=0A-=09= =09break;=0A-=09=20=20=20=20=20=20unblock_input=20();=0A-=09=20=20=20=20=20= =20XSETINT=20(ret,=20colorval);=0A-=09=20=20=20=20=20=20return=20ret;=0A= -=09=20=20=20=20}=0A-=09=20=20if=20(*end=20!=3D=20'/')=0A-=09=20=20=20=20= break;=0A-=09=20=20color=20=3D=20end=20+=201;=0A-=09}=0A-=20=20=20=20}=0A= =20=20=20/*=20I=20am=20not=20going=20to=20attempt=20to=20handle=20any=20= of=20the=20CIE=20color=20schemes=0A=20=20=20=20=20=20or=20TekHVC,=20= since=20I=20don't=20know=20the=20algorithms=20for=20conversion=20to=0A=20= =20=20=20=20=20RGB.=20=20*/=0Adiff=20--git=20a/src/xfaces.c=20= b/src/xfaces.c=0Aindex=20cf155288bd..308509a026=20100644=0A---=20= a/src/xfaces.c=0A+++=20b/src/xfaces.c=0A@@=20-220,6=20+220,7=20@@=20= Copyright=20(C)=201993-1994,=201998-2020=20Free=20Software=20Foundation,=20= Inc.=0A=20#include=20"sysstdio.h"=0A=20#include=20=0A=20= #include=20=0A+#include=20=0A=20=0A=20#include=20= "lisp.h"=0A=20#include=20"character.h"=0A@@=20-819,6=20+820,120=20@@=20= load_pixmap=20(struct=20frame=20*f,=20Lisp_Object=20name)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= Color=20Handling=0A=20=20= ***********************************************************************/=0A= =20=0A+/*=20Parse=20hex=20color=20component=20at=20S=20ending=20right=20= before=20E.=0A+=20=20=20Set=20*DST=20to=20the=20value=20normalized=20so=20= that=20the=20maximum=20for=20the=0A+=20=20=20number=20of=20digits=20= given=20becomes=2065535,=20and=20return=20true=20on=20success,=0A+=20=20=20= false=20otherwise.=20=20*/=0A+static=20bool=0A+parse_hex_color_comp=20= (const=20char=20*s,=20const=20char=20*e,=20unsigned=20short=20*dst)=0A+{=0A= +=20=20int=20n=20=3D=20e=20-=20s;=0A+=20=20if=20(n=20<=3D=200=20||=20n=20= >=204)=0A+=20=20=20=20return=20false;=0A+=20=20int=20val=20=3D=200;=0A+=20= =20for=20(;=20s=20<=20e;=20s++)=0A+=20=20=20=20{=0A+=20=20=20=20=20=20= int=20digit;=0A+=20=20=20=20=20=20if=20(*s=20>=3D=20'0'=20&&=20*s=20<=3D=20= '9')=0A+=20=20=20=20=20=20=20=20digit=20=3D=20*s=20-=20'0';=0A+=20=20=20=20= =20=20else=20if=20(*s=20>=3D=20'A'=20&&=20*s=20<=3D=20'F')=0A+=20=20=20=20= =20=20=20=20digit=20=3D=20*s=20-=20'A'=20+=2010;=0A+=20=20=20=20=20=20= else=20if=20(*s=20>=3D=20'a'=20&&=20*s=20<=3D=20'f')=0A+=20=20=20=20=20=20= =20=20digit=20=3D=20*s=20-=20'a'=20+=2010;=0A+=20=20=20=20=20=20else=0A+=20= =20=20=20=20=20=20=20return=20false;=0A+=20=20=20=20=20=20val=20=3D=20= (val=20<<=204)=20|=20digit;=0A+=20=20=20=20}=0A+=20=20int=20maxval=20=3D=20= (1=20<<=20(n=20*=204))=20-=201;=0A+=20=20*dst=20=3D=20(unsigned)val=20*=20= 65535=20/=20maxval;=0A+=20=20return=20true;=0A+}=0A+=0A+/*=20Parse=20= floating-point=20color=20component=20at=20S=20ending=20right=20before=20= E.=0A+=20=20=20Return=20the=20number=20if=20in=20the=20range=20[0,1];=20= otherwise=20-1.=20=20*/=0A+static=20double=0A+parse_float_color_comp=20= (const=20char=20*s,=20const=20char=20*e)=0A+{=0A+=20=20char=20*end;=0A+=20= =20double=20x=20=3D=20strtod=20(s,=20&end);=0A+=20=20return=20(end=20=3D=3D= =20e=20&&=20x=20>=3D=200=20&&=20x=20<=3D=201)=20?=20x=20:=20-1;=0A+}=0A+=0A= +/*=20Parse=20S=20as=20a=20numeric=20color=20specification=20and=20set=20= *R,=20*G=20and=20*B.=0A+=20=20=20Return=20true=20on=20success,=20false=20= on=20failure.=0A+=20=20=20Recognized=20formats:=0A+=0A+=20=20=20=20= "#RGB",=20with=20R,=20G=20and=20B=20hex=20strings=20of=20equal=20length,=20= 1-4=20digits=20each=0A+=20=20=20=20"rgb:R/G/B",=20with=20R,=20G=20and=20= B=20hex=20strings,=201-4=20digits=20each=0A+=20=20=20=20"rgbi:R/G/B",=20= with=20R,=20G=20and=20B=20numbers=20in=20[0,1]=0A+=0A+=20=20=20The=20= result=20is=20normalized=20to=20a=20maximum=20value=20of=2065535=20per=20= component.=20=20*/=0A+bool=0A+parse_color_spec=20(const=20char=20*s,=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20unsigned=20short=20= *r,=20unsigned=20short=20*g,=20unsigned=20short=20*b)=0A+{=0A+=20=20int=20= len=20=3D=20strlen=20(s);=0A+=20=20if=20(s[0]=20=3D=3D=20'#')=0A+=20=20=20= =20{=0A+=20=20=20=20=20=20if=20((len=20-=201)=20%=203=20=3D=3D=200)=0A+=20= =20=20=20=20=20=20=20{=0A+=20=20=20=20=20=20=20=20=20=20int=20n=20=3D=20= (len=20-=201)=20/=203;=0A+=20=20=20=20=20=20=20=20=20=20return=20(=20=20=20= parse_hex_color_comp=20(s=20+=201=20+=200=20*=20n,=20s=20+=201=20+=201=20= *=20n,=20r)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20= parse_hex_color_comp=20(s=20+=201=20+=201=20*=20n,=20s=20+=201=20+=202=20= *=20n,=20g)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20= parse_hex_color_comp=20(s=20+=201=20+=202=20*=20n,=20s=20+=201=20+=203=20= *=20n,=20b));=0A+=20=20=20=20=20=20=20=20}=0A+=20=20=20=20}=0A+=20=20= else=20if=20(strncmp=20(s,=20"rgb:",=204)=20=3D=3D=200)=0A+=20=20=20=20{=0A= +=20=20=20=20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20=20=20return=20= ((sep1=20=3D=20strchr=20(s=20+=204,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20&&=20(sep2=20=3D=20strchr=20(sep1=20+=201,=20= '/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20= parse_hex_color_comp=20(s=20+=204,=20sep1,=20r)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20&&=20parse_hex_color_comp=20(sep1=20+=201,=20sep2,=20= g)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20&&=20= parse_hex_color_comp=20(sep2=20+=201,=20s=20+=20len,=20b));=0A+=20=20=20=20= }=0A+=20=20else=20if=20(strncmp=20(s,=20"rgbi:",=205)=20=3D=3D=200)=0A+=20= =20=20=20{=0A+=20=20=20=20=20=20char=20*sep1,=20*sep2;=0A+=20=20=20=20=20= =20double=20red,=20green,=20blue;=0A+=20=20=20=20=20=20if=20((sep1=20=3D=20= strchr=20(s=20+=205,=20'/'))=20!=3D=20NULL=0A+=20=20=20=20=20=20=20=20=20= =20&&=20(sep2=20=3D=20strchr=20(sep1=20+=201,=20'/'))=20!=3D=20NULL=0A+=20= =20=20=20=20=20=20=20=20=20&&=20(red=20=3D=20parse_float_color_comp=20(s=20= +=205,=20sep1))=20>=3D=200=0A+=20=20=20=20=20=20=20=20=20=20&&=20(green=20= =3D=20parse_float_color_comp=20(sep1=20+=201,=20sep2))=20>=3D=200=0A+=20=20= =20=20=20=20=20=20=20=20&&=20(blue=20=3D=20parse_float_color_comp=20= (sep2=20+=201,=20s=20+=20len))=20>=3D=200)=0A+=20=20=20=20=20=20=20=20{=0A= +=20=20=20=20=20=20=20=20=20=20*r=20=3D=20lrint=20(red=20*=2065535);=0A+=20= =20=20=20=20=20=20=20=20=20*g=20=3D=20lrint=20(green=20*=2065535);=0A+=20= =20=20=20=20=20=20=20=20=20*b=20=3D=20lrint=20(blue=20*=2065535);=0A+=20=20= =20=20=20=20=20=20=20=20return=20true;=0A+=20=20=20=20=20=20=20=20}=0A+=20= =20=20=20}=0A+=20=20return=20false;=0A+}=0A+=0A+DEFUN=20= ("internal-color-values-from-color-spec",=0A+=20=20=20=20=20=20=20= Finternal_color_values_from_color_spec,=0A+=20=20=20=20=20=20=20= Sinternal_color_values_from_color_spec,=0A+=20=20=20=20=20=20=201,=201,=20= 0,=0A+=20=20=20=20=20=20=20doc:=20/*=20Parse=20STRING=20as=20a=20numeric=20= color=20and=20return=20(RED=20GREEN=20BLUE).=0A+Recognised=20formats=20= for=20STRING=20are:=0A+=0A+=20#RGB,=20where=20R,=20G=20and=20B=20are=20= hex=20numbers=20of=20equal=20length,=201-4=20digits=20each=0A+=20= rgb:R/G/B,=20where=20R,=20G,=20and=20B=20are=20hex=20numbers,=201-4=20= digits=20each=0A+=20rgbi:R/G/B,=20where=20R,=20G=20and=20B=20are=20= floating-point=20numbers=20in=20[0,1]=0A+=0A+The=20result=20is=20= normalized=20to=20a=20maximum=20value=20of=2065535=20per=20component,=0A= +forming=20a=20list=20of=20three=20integers=20in=20[0,65535].=0A+If=20= STRING=20is=20not=20in=20one=20of=20the=20above=20forms,=20return=20nil.=20= =20*/)=0A+=20=20(Lisp_Object=20string)=0A+{=0A+=20=20CHECK_STRING=20= (string);=0A+=20=20unsigned=20short=20r,=20g,=20b;=0A+=20=20return=20= (parse_color_spec=20(SSDATA=20(string),=20&r,=20&g,=20&b)=0A+=20=20=20=20= =20=20=20=20=20=20?=20list3i=20(r,=20g,=20b)=0A+=20=20=20=20=20=20=20=20=20= =20:=20Qnil);=0A+}=0A+=0A=20/*=20Parse=20RGB_LIST,=20and=20fill=20in=20= the=20RGB=20fields=20of=20COLOR.=0A=20=20=20=20RGB_LIST=20should=20= contain=20(at=20least)=203=20lisp=20integers.=0A=20=20=20=20Return=20= true=20iff=20RGB_LIST=20is=20OK.=20=20*/=0A@@=20-7018,4=20+7133,5=20@@=20= syms_of_xfaces=20(void)=0A=20=20=20defsubr=20= (&Sinternal_face_x_get_resource);=0A=20=20=20defsubr=20= (&Sx_family_fonts);=0A=20#endif=0A+=20=20defsubr=20= (&Sinternal_color_values_from_color_spec);=0A=20}=0Adiff=20--git=20= a/src/xterm.c=20b/src/xterm.c=0Aindex=207989cecec7..6340700cb8=20100644=0A= ---=20a/src/xterm.c=0A+++=20b/src/xterm.c=0A@@=20-2376,8=20+2376,6=20@@=20= x_query_frame_background_color=20(struct=20frame=20*f,=20XColor=20= *bgcolor)=0A=20=20=20x_query_colors=20(f,=20bgcolor,=201);=0A=20}=0A=20=0A= -#define=20HEX_COLOR_NAME_LENGTH=2032=0A-=0A=20/*=20On=20frame=20F,=20= translate=20the=20color=20name=20to=20RGB=20values.=20=20Use=20cached=0A=20= =20=20=20information,=20if=20possible.=0A=20=0A@@=20-2389,44=20+2387,23=20= @@=20#define=20HEX_COLOR_NAME_LENGTH=2032=0A=20Status=20x_parse_color=20= (struct=20frame=20*f,=20const=20char=20*color_name,=0A=20=09=09=20=20=20=20= =20=20XColor=20*color)=0A=20{=0A+=20=20/*=20Don't=20pass=20#RGB=20= strings=20directly=20to=20XParseColor,=20because=20that=0A+=20=20=20=20=20= follows=20the=20X=20convention=20of=20zero-extending=20each=20channel=0A= +=20=20=20=20=20value:=20#f00=20means=20#f00000.=20=20We=20want=20the=20= convention=20of=20scaling=0A+=20=20=20=20=20channel=20values,=20so=20= #f00=20means=20#ff0000,=20just=20as=20it=20does=20for=0A+=20=20=20=20=20= HTML,=20SVG,=20and=20CSS.=20=20*/=0A+=20=20unsigned=20short=20r,=20g,=20= b;=0A+=20=20if=20(parse_color_spec=20(color_name,=20&r,=20&g,=20&b))=0A+=20= =20=20=20{=0A+=20=20=20=20=20=20color->red=20=3D=20r;=0A+=20=20=20=20=20=20= color->green=20=3D=20g;=0A+=20=20=20=20=20=20color->blue=20=3D=20b;=0A+=20= =20=20=20=20=20return=201;=0A+=20=20=20=20}=0A+=0A=20=20=20Display=20= *dpy=20=3D=20FRAME_X_DISPLAY=20(f);=0A=20=20=20Colormap=20cmap=20=3D=20= FRAME_X_COLORMAP=20(f);=0A=20=20=20struct=20color_name_cache_entry=20= *cache_entry;=0A-=0A-=20=20if=20(color_name[0]=20=3D=3D=20'#')=0A-=20=20=20= =20{=0A-=20=20=20=20=20=20/*=20Don't=20pass=20#RGB=20strings=20directly=20= to=20XParseColor,=20because=20that=0A-=09=20follows=20the=20X=20= convention=20of=20zero-extending=20each=20channel=0A-=09=20value:=20#f00=20= means=20#f00000.=20=20We=20want=20the=20convention=20of=20scaling=0A-=09=20= channel=20values,=20so=20#f00=20means=20#ff0000,=20just=20as=20it=20does=20= for=0A-=09=20HTML,=20SVG,=20and=20CSS.=0A-=0A-=09=20So=20we=20translate=20= #f00=20to=20rgb:f/0/0,=20which=20X=20handles=0A-=09=20differently.=20*/=0A= -=20=20=20=20=20=20char=20rgb_color_name[HEX_COLOR_NAME_LENGTH];=0A-=20=20= =20=20=20=20int=20len=20=3D=20strlen=20(color_name);=0A-=20=20=20=20=20=20= int=20digits_per_channel;=0A-=20=20=20=20=20=20if=20(len=20=3D=3D=204)=0A= -=09digits_per_channel=20=3D=201;=0A-=20=20=20=20=20=20else=20if=20(len=20= =3D=3D=207)=0A-=09digits_per_channel=20=3D=202;=0A-=20=20=20=20=20=20= else=20if=20(len=20=3D=3D=2010)=0A-=09digits_per_channel=20=3D=203;=0A-=20= =20=20=20=20=20else=20if=20(len=20=3D=3D=2013)=0A-=09digits_per_channel=20= =3D=204;=0A-=20=20=20=20=20=20else=0A-=09return=200;=0A-=0A-=20=20=20=20=20= =20snprintf=20(rgb_color_name,=20sizeof=20rgb_color_name,=20= "rgb:%.*s/%.*s/%.*s",=0A-=09=09digits_per_channel,=20color_name=20+=201,=0A= -=09=09digits_per_channel,=20color_name=20+=20digits_per_channel=20+=20= 1,=0A-=09=09digits_per_channel,=20color_name=20+=202=20*=20= digits_per_channel=20+=201);=0A-=0A-=20=20=20=20=20=20/*=20The=20rgb=20= form=20is=20parsed=20directly=20by=20XParseColor=20without=0A-=09=20= talking=20to=20the=20X=20server.=20=20No=20need=20for=20caching.=20=20*/=0A= -=20=20=20=20=20=20return=20XParseColor=20(dpy,=20cmap,=20= rgb_color_name,=20color);=0A-=20=20=20=20}=0A-=0A=20=20=20for=20= (cache_entry=20=3D=20FRAME_DISPLAY_INFO=20(f)->color_names;=20= cache_entry;=0A=20=20=20=20=20=20=20=20cache_entry=20=3D=20= cache_entry->next)=0A=20=20=20=20=20{=0Adiff=20--git=20= a/test/src/xfaces-tests.el=20b/test/src/xfaces-tests.el=0Aindex=20= 5ed16c9e51..34cda07e5b=20100644=0A---=20a/test/src/xfaces-tests.el=0A+++=20= b/test/src/xfaces-tests.el=0A@@=20-24,4=20+24,27=20@@=20= xfaces-color-distance=0A=20=20=20(should=20(equal=20(color-distance=20= "#222222"=20"#ffffff")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(color-distance=20"#ffffff"=20"#222222"))))=0A=20=0A+(ert-deftest=20= xfaces-internal-color-values-from-color-spec=20()=0A+=20=20(should=20= (equal=20(internal-color-values-from-color-spec=20"#f05")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20'(#xffff=20#x0000=20#x5555)))=0A+=20= =20(should=20(equal=20(internal-color-values-from-color-spec=20= "#1fb0C5")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(#x1f1f=20#xb0b0=20#xc5c5)))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"#1f8b0AC5e")=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20'(#x1f81=20#xb0aa=20#xc5eb)))=0A+=20=20= (should=20(equal=20(internal-color-values-from-color-spec=20= "#1f83b0ADC5e2")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(#x1f83=20#xb0ad=20#xc5e2)))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"#1f83b0ADC5e2g")=20nil))=0A+=20= =20(should=20(equal=20(internal-color-values-from-color-spec=20= "#1f83b0ADC5e20")=20nil))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"#12345")=20nil))=0A+=20=20= (should=20(equal=20(internal-color-values-from-color-spec=20= "rgb:f/23/28a")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(#xffff=20#x2323=20#x28a2)))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"rgb:1234/5678/09ab")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'(#x1234=20#x5678=20#x09ab)))=0A= +=20=20(should=20(equal=20(internal-color-values-from-color-spec=20= "rgb:0//0")=20nil))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"rgbi:0/0.5/0.1")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20'(0=2032768=206554)))=0A+=20=20= (should=20(equal=20(internal-color-values-from-color-spec=20= "rgbi:1e-3/1.0e-2/1e0")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20'(66=20655=2065535)))=0A+=20=20(should=20(equal=20= (internal-color-values-from-color-spec=20"rgbi:0/0.5/10")=20nil)))=0A+=0A= =20(provide=20'xfaces-tests)=0A--=20=0A2.21.1=20(Apple=20Git-122.3)=0A=0A= --Apple-Mail=_5CA46CC0-7A34-4ABF-B3F6-B497DAB864D3-- From MAILER-DAEMON Mon Jun 15 05:10:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkl8V-0005nK-BN for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 05:10:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkl8S-0005mU-S3 for emacs-devel@gnu.org; Mon, 15 Jun 2020 05:10:32 -0400 Received: from mail-out.m-online.net ([2001:a60:0:28:0:1:25:1]:51560) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkl8R-0000pX-21; Mon, 15 Jun 2020 05:10:32 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49llss3l1Fz1rwDW; Mon, 15 Jun 2020 11:10:25 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49llss33W8z1sPN2; Mon, 15 Jun 2020 11:10:25 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id n9IBOQ499f3p; Mon, 15 Jun 2020 11:10:24 +0200 (CEST) X-Auth-Info: yDFzcK2T9TYH1q9mwRAFOTBy4Af+jZ+e5DrAYyyIRrqieIivDLfq4yb3AmwHWvAb Received: from hawking (nat.nue.novell.com [195.135.221.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Mon, 15 Jun 2020 11:10:24 +0200 (CEST) From: Andreas Schwab To: Eli Zaretskii Cc: emacs-devel@gnu.org, alan@idiocy.org, =?utf-8?Q?K=C3=A9vin?= Le Gouguec , stefan@marxist.se, hi-angel@yandex.ru Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> X-Yow: I predict that by 1993 everyone will live in and around LAS VEGAS and wear BEATLE HAIRCUTS! Date: Mon, 15 Jun 2020 11:10:23 +0200 In-Reply-To: <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 11:12:43 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2001:a60:0:28:0:1:25:1; envelope-from=schwab@linux-m68k.org; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 05:10:26 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 09:10:33 -0000 On Jun 15 2020, Eli Zaretskii wrote: > On June 15, 2020 9:59:59 AM GMT+03:00, Andreas Schwab wrote: >> On Jun 15 2020, Eli Zaretskii wrote: >> >> > We accept and welcome patches in any form and shape. However, we >> > recommend to use "git format-patch" (see CONTRIBUTE), >> >> Which is exactly what he did. > > No, he did not. He said that much: he used "git send-email". Exactly, thus git format-patch. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Mon Jun 15 05:56:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jklr9-0005xJ-TT for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 05:56:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42974) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jklr8-0005vo-IT for emacs-devel@gnu.org; Mon, 15 Jun 2020 05:56:42 -0400 Received: from gateway20.websitewelcome.com ([192.185.47.18]:23727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jklr6-0000IP-3Z for emacs-devel@gnu.org; Mon, 15 Jun 2020 05:56:42 -0400 Received: from cm11.websitewelcome.com (cm11.websitewelcome.com [100.42.49.5]) by gateway20.websitewelcome.com (Postfix) with ESMTP id 140F5400CC7BB for ; Mon, 15 Jun 2020 03:36:37 -0500 (CDT) Received: from host2007.hostmonster.com ([67.20.76.71]) by cmsmtp with SMTP id klr1j4tPPhmVTklr1jxzMQ; Mon, 15 Jun 2020 04:56:35 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=stephe-leake.org; s=default; h=Content-Type:MIME-Version:Message-ID: In-Reply-To:Date:References:Subject:To:From:Sender:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=IPsQhML8X5kED+hXtA39y/mVBKX+qj0gWF39zyc7A6M=; b=ZCHWPm1eisb+jafHCwvqmkMD8 HOZZDY9ZgEH0Zd1/MA2ojYOK46pcvuSdpeB19Ydb4QFeHbOPDj3k2mS7d5G/inXXLuGPSKMteutnb KKqBL7JYZw+8cNn8tAUTrExSfY5y3xmjcI2WyZ5zWd746JXp96ZkJoS2J9I/KsrR5pOX9LCBY1IkA pO8dVu9cIrJyTWL3kWASgJqjsefHHwhwueINkTInG4GghwwV6NnuY9mMfFlJhZZqoHfRE2w7X/0pw 5UBqK87QTC2kxm7/PgygJrnyGLRYl1diouoKCnj4khpToED4NKZYLggfnT3bXgNYJLdinCoIMmfDI QYZzeYkrw==; Received: from [76.77.182.20] (port=51639 helo=Takver4) by host2007.hostmonster.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1jklr1-004CmH-AW for emacs-devel@gnu.org; Mon, 15 Jun 2020 03:56:35 -0600 From: Stephen Leake To: emacs-devel Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> Date: Mon, 15 Jun 2020 02:56:34 -0700 In-Reply-To: <87tuzd755z.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 22:39:52 +0200") Message-ID: <86o8pkabzh.fsf@stephe-leake.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (windows-nt) MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host2007.hostmonster.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - stephe-leake.org X-BWhitelist: no X-Source-IP: 76.77.182.20 X-Source-L: No X-Exim-ID: 1jklr1-004CmH-AW X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (Takver4) [76.77.182.20]:51639 X-Source-Auth: stephen_leake@stephe-leake.org X-Email-Count: 4 X-Source-Cap: c3RlcGhlbGU7c3RlcGhlbGU7aG9zdDIwMDcuaG9zdG1vbnN0ZXIuY29t X-Local-Domain: yes Received-SPF: neutral client-ip=192.185.47.18; envelope-from=stephen_leake@stephe-leake.org; helo=gateway20.websitewelcome.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 05:56:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_NEUTRAL=0.779, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 09:56:42 -0000 Tassilo Horn writes: > Actually, "git ls-remote --get-url" doesn't work satisfactory which I > noticed after committing above change on a new local branch. In that > case, it returned "." so I've changed to this version > > (defun vc-git-repository-url (file-or-dir) > (let ((default-directory (vc-git-root file-or-dir))) > (with-temp-buffer > (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") > (buffer-substring-no-properties (point-min) (1- (point-max)))))) > > where I explicitly name the remote "origin" (which, I know, doesn't need > to exist but still works in 99% of all cases). I'm in the 1%; I have git repositories that don't have 'origin'; they have 'savannah'. I migrated from monotone, where the remotes have real names. So some method of overriding 'origin' would be appreciated. 'git remote -v' lists all remotes; you could just pick the first one. -- -- Stephe From MAILER-DAEMON Mon Jun 15 06:21:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkmFN-0000bM-2O for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 06:21:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkmFL-0000bD-K9 for emacs-devel@gnu.org; Mon, 15 Jun 2020 06:21:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34408) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkmFK-0004eQ-Ns; Mon, 15 Jun 2020 06:21:42 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:32999) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkmFK-0000W6-6a; Mon, 15 Jun 2020 06:21:42 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 90ECA27C0054; Mon, 15 Jun 2020 06:21:41 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 15 Jun 2020 06:21:41 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeikedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhi lhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnheptd elieffkeeuffduueeffefhiedtjeeutdeuveegfffgtdejleekheegkeetkeevnecukfhp peelfedrvdefiedrudefhedrleejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepthhhohhrnhdomhgvshhmthhprghuthhhphgvrhhsohhnrghl ihhthidqkeeijeefkeejkeegqdeifeehvdelkedqthhsughhpeepghhnuhdrohhrghesfh grshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id C3AEB3060FE7; Mon, 15 Jun 2020 06:21:36 -0400 (EDT) From: Tassilo Horn To: Stephen Leake Cc: emacs-devel Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> Mail-Followup-To: Stephen Leake , emacs-devel Date: Mon, 15 Jun 2020 12:21:31 +0200 In-Reply-To: <86o8pkabzh.fsf@stephe-leake.org> (Stephen Leake's message of "Mon, 15 Jun 2020 02:56:34 -0700") Message-ID: <87pna0mxxw.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 10:21:43 -0000 Stephen Leake writes: >> (defun vc-git-repository-url (file-or-dir) >> (let ((default-directory (vc-git-root file-or-dir))) >> (with-temp-buffer >> (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") >> (buffer-substring-no-properties (point-min) (1- (point-max)))))) >> >> where I explicitly name the remote "origin" (which, I know, doesn't need >> to exist but still works in 99% of all cases). > > I'm in the 1%; I have git repositories that don't have 'origin'; they > have 'savannah'. I migrated from monotone, where the remotes have real > names. > > So some method of overriding 'origin' would be appreciated. It already has on master, i.e., you can pass in an optional remote-name. Bye, Tassilo From MAILER-DAEMON Mon Jun 15 06:57:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkmns-0005T1-MV for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 06:57:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkmnq-0005SW-Vq for emacs-devel@gnu.org; Mon, 15 Jun 2020 06:57:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34968) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkmnp-0002Of-KF; Mon, 15 Jun 2020 06:57:21 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:56439) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jkmnn-0004bF-Ui; Mon, 15 Jun 2020 06:57:20 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id B83C527C0054; Mon, 15 Jun 2020 06:57:18 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Mon, 15 Jun 2020 06:57:18 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudeikedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtsehttdertddtredtnecuhfhrohhmpefvrghsshhi lhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhrgheqnecuggftrfgrthhtvghrnheptd elieffkeeuffduueeffefhiedtjeeutdeuveegfffgtdejleekheegkeetkeevnecukfhp peelfedrvdefiedrudefhedrleejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepthhhohhrnhdomhgvshhmthhprghuthhhphgvrhhsohhnrghl ihhthidqkeeijeefkeejkeegqdeifeehvdelkedqthhsughhpeepghhnuhdrohhrghesfh grshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id 393BE328005A; Mon, 15 Jun 2020 06:57:17 -0400 (EDT) From: Tassilo Horn To: Stefan Monnier , "Basil L. Contovounesios" Cc: emacs-devel@gnu.org Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> Mail-Followup-To: Stefan Monnier , "Basil L. Contovounesios" , emacs-devel@gnu.org Date: Mon, 15 Jun 2020 12:57:14 +0200 In-Reply-To: <87h7vd3cbs.fsf@gnu.org> (Tassilo Horn's message of "Sun, 14 Jun 2020 17:18:47 +0200") Message-ID: <87lfkomwad.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 10:57:23 -0000 Hi again, I've pushed my second attempt on the topic of setting up bug-reference-mode automatically to the branch feature/bug-reference-setup. The most essential changes wrt. the former patch are: - There's just one single defvar bug-reference-setup-functions instead of a defcustom + a defvar. - New setups based according to VC URL can easily be added to `bug-reference-setup-from-vc-alist'. Please tell me if that's too complicated with the func-arity thingy in order to distinguish functions being valid bug-reference-url-format values from those that need to be evaluated to get a valid value. - New setups based on Gnus group/addresses can easily be added to `bug-reference-setup-from-gnus-alist'. Honestly, the Gnus stuff is a bit icky but that's not really my fault. Gnus reuses its article buffer therefore the setup for `gnus-article-mode' buffers has to be done in `gnus-article-prepare-hook' which doesn't match the "setup immediately when bug-reference-mode is activated" semantics... Bye, Tassilo From MAILER-DAEMON Mon Jun 15 07:33:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jknN3-0007a6-Mh for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 07:33:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37042) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jknN0-0007Zp-NY for emacs-devel@gnu.org; Mon, 15 Jun 2020 07:33:44 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:34252) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jknMy-0000MH-T9 for emacs-devel@gnu.org; Mon, 15 Jun 2020 07:33:42 -0400 Received: by mail-wm1-x32e.google.com with SMTP id u26so13903861wmn.1 for ; Mon, 15 Jun 2020 04:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=r4W5AP332x732S+1UqSUVynIu7YowOVBXYM4si23zWU=; b=KCJZ9T4JMcm4Z3L/PE24Vo3VT/IBcFkIicH28ZpmHiaIy1Po+b58vQTIOI1M5qNHKz 97HJbPEm2OZiMixjidgAO7c+HYSh0HMoRiCodx6sIi8ZFekDYSpI48q1alX+CNI/ZGRZ wQPEV2eZTQcvgOP4PCUCWjPl4V+3iKclZGPYgRodMtKaMYy37VUlpbMm78f0QL8FYwEP PSLI+zOohyKZzPwSv9swu6OujnqZL+R2dkdNnu74INcn50j5bsFU/RhcRuTMck8fopJD SRkRG6U4jn5F44uk47gY6GJo1V7osSBD/J5DSWRD4+IPaxARKeT9t70y/MLKqtzkUdGH Q8Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=r4W5AP332x732S+1UqSUVynIu7YowOVBXYM4si23zWU=; b=M/4hwvvOPkPBKI75fxyp9oVOYA3mJyaNXtOcQ5vs9+iRR7q4bSGz0kZoBJBoeuzADW ppqL4CaOfBXtMS7ktg8dC/kbOwl17syQiDGttfIr7eJmVN1mFdo0vziZJj5Pw53mHVme e90EH9Rf6pgTIbAGV5I9D8QIcTqmnEWrksXMWVyU9tgipq5pnTlOjdtS/h3Fsf4lp89G EW5NCVptvVtXk7AmHJLo4xiqAgqMWIwFWSZ5qD3+TT0HESN/0Dju/hhYPxnhsgtHg1En TWpS+n2D+VnFRh1tumCVP0MWVH9IBHxOTVyKVP3D6Z7PGMozfTrE69JQX9y/6jFAcCdh jrJw== X-Gm-Message-State: AOAM530Kpmg8hsGTLo5ThWEPjULdNrMJ8Z7zk9xlj7OR5taZr4eZelmq lBOSh4bkff83m7R/oxCO6U7s+A== X-Google-Smtp-Source: ABdhPJzSPiu97hn6UbdiPhIBgYd8Pl7V3py7SU5rco5QKGlwp/hXAIrAuNiHffUtNBNY3TzJS4d2tg== X-Received: by 2002:a7b:c764:: with SMTP id x4mr12256026wmk.94.1592220819100; Mon, 15 Jun 2020 04:33:39 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id s8sm23639096wrm.96.2020.06.15.04.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 04:33:38 -0700 (PDT) From: "Basil L. Contovounesios" To: Dmitry Gutov Cc: Stefan Monnier , emacs-devel@gnu.org Subject: Re: VC repository-url command References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <401bed41-3eb1-3049-2037-a9f2b8ac385c@yandex.ru> <877dw9qs1c.fsf@tcd.ie> <875zbssv7y.fsf_-_@gnu.org> Date: Mon, 15 Jun 2020 12:33:37 +0100 In-Reply-To: <875zbssv7y.fsf_-_@gnu.org> (Tassilo Horn's message of "Mon, 15 Jun 2020 08:23:45 +0200") Message-ID: <874krcr2b2.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::32e; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32e.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 11:33:44 -0000 Tassilo Horn writes: > "Basil L. Contovounesios" writes: > >> It would definitely be nice to somehow make this configurable. For >> example in my local Emacs checkout I have Savannah as the "upstream" >> remote, and my mirror on GitLab as the "origin" remote, because that's >> where I push to most of the time. > > I usually do the opposite: origin is the original project and tsdh is my > fork which I set as push-remote. Sounds convenient, I might start doing that too. Thanks, -- Basil From MAILER-DAEMON Mon Jun 15 09:22:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkp3t-0007jA-80 for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 09:22:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34936) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkp3r-0007i9-2H for emacs-devel@gnu.org; Mon, 15 Jun 2020 09:22:03 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36556) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkp3p-0003CG-8H; Mon, 15 Jun 2020 09:22:01 -0400 Received: from ams by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jkp3o-0007aq-Hi; Mon, 15 Jun 2020 09:22:00 -0400 From: ams@gnu.org (Alfred M. Szmidt) To: Andreas Schwab CC: eliz@gnu.org, emacs-devel@gnu.org, alan@idiocy.org, kevin.legouguec@gmail.com, stefan@marxist.se, hi-angel@yandex.ru In-reply-to: (message from Andreas Schwab on Mon, 15 Jun 2020 11:10:23 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> Message-Id: Date: Mon, 15 Jun 2020 09:22:00 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 13:22:03 -0000 >> > We accept and welcome patches in any form and shape. However, we >> > recommend to use "git format-patch" (see CONTRIBUTE), >> >> Which is exactly what he did. > > No, he did not. He said that much: he used "git send-email". Exactly, thus git format-patch. No, git send-mail accepts multiple inputs -- and it is not guaranteed that the input is from format-patch in any shape or form. From the man page: There are two formats accepted for patch files: 1. mbox format files This is what git-format-patch(1) generates. Most headers and MIME formatting are ignored. 2. The original format used by Greg Kroah-Hartman's send_lots_of_email.pl script This format expects the first line of the file to contain the "Cc:" value and the "Subject:" of the message as the second line. From MAILER-DAEMON Mon Jun 15 10:07:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkpm6-00035S-3q for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 10:07:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44538) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkpm3-00035C-0e for emacs-devel@gnu.org; Mon, 15 Jun 2020 10:07:43 -0400 Received: from mail-out.m-online.net ([212.18.0.10]:38965) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkplz-0002Qu-Vg; Mon, 15 Jun 2020 10:07:42 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49ltSl61pSz1rwbW; Mon, 15 Jun 2020 16:07:35 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49ltSl57Npz1sPN4; Mon, 15 Jun 2020 16:07:35 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id ofcC5jJUlpdv; Mon, 15 Jun 2020 16:07:34 +0200 (CEST) X-Auth-Info: 9fnNi7ApZVaQUIQdm1UTT8XHAATql1tbBp1CsJuN8L2iorYrmQhu+WfncPvYWTEy Received: from igel.home (ppp-46-244-168-31.dynamic.mnet-online.de [46.244.168.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Mon, 15 Jun 2020 16:07:34 +0200 (CEST) Received: by igel.home (Postfix, from userid 1000) id 2F8402C023C; Mon, 15 Jun 2020 16:07:34 +0200 (CEST) From: Andreas Schwab To: ams@gnu.org (Alfred M. Szmidt) Cc: eliz@gnu.org, emacs-devel@gnu.org, alan@idiocy.org, kevin.legouguec@gmail.com, stefan@marxist.se, hi-angel@yandex.ru Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> X-Yow: Hey, LOOK!! A pair of SIZE 9 CAPRI PANTS!! They probably belong to SAMMY DAVIS, JR.!! Date: Mon, 15 Jun 2020 16:07:34 +0200 In-Reply-To: (Alfred M. Szmidt's message of "Mon, 15 Jun 2020 09:22:00 -0400") Message-ID: <87eeqg5snt.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=212.18.0.10; envelope-from=whitebox@nefkom.net; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 10:07:36 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 14:07:43 -0000 On Jun 15 2020, Alfred M. Szmidt wrote: > >> > We accept and welcome patches in any form and shape. However, we > >> > recommend to use "git format-patch" (see CONTRIBUTE), > >> > >> Which is exactly what he did. > > > > No, he did not. He said that much: he used "git send-email". > > Exactly, thus git format-patch. > > No, git send-mail accepts multiple inputs There is no input. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Mon Jun 15 10:15:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkptX-0000Nr-LC for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 10:15:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkptW-0000Mu-Lz for emacs-devel@gnu.org; Mon, 15 Jun 2020 10:15:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37208) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkptV-000403-L5; Mon, 15 Jun 2020 10:15:25 -0400 Received: from ams by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jkptP-0005ja-CG; Mon, 15 Jun 2020 10:15:20 -0400 From: ams@gnu.org (Alfred M. Szmidt) To: Andreas Schwab CC: eliz@gnu.org, emacs-devel@gnu.org, alan@idiocy.org, kevin.legouguec@gmail.com, stefan@marxist.se, hi-angel@yandex.ru In-reply-to: <87eeqg5snt.fsf@igel.home> (message from Andreas Schwab on Mon, 15 Jun 2020 16:07:34 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> <87eeqg5snt.fsf@igel.home> Message-Id: Date: Mon, 15 Jun 2020 10:15:19 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 14:15:26 -0000 Computers do not work by osmosis; there is always input. The input here is either files, directories, or a rev-list. The files and directories can contain either git-am output, or GRH's format. NAME git-send-email - Send a collection of patches as emails SYNOPSIS git send-email [] ... git send-email --dump-aliases DESCRIPTION Takes the patches given on the command line and emails them out. Patches can be specified as files, directories (which will send all files in the directory), or directly as a revision list. In the last case, any format accepted by git-format-patch(1) can be passed to git send-email. The header of the email is configurable via command-line options. If not specified on the command line, the user will be prompted with a ReadLine enabled interface to provide the necessary information. From MAILER-DAEMON Mon Jun 15 10:16:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkpum-0001Q0-I1 for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 10:16:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46974) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkpuk-0001Pa-BX for emacs-devel@gnu.org; Mon, 15 Jun 2020 10:16:42 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:39925) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkpuh-0004DO-9o; Mon, 15 Jun 2020 10:16:41 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 49ltg76dfRz1qsZx; Mon, 15 Jun 2020 16:16:35 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 49ltg75krKz1sPN3; Mon, 15 Jun 2020 16:16:35 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id WXCylln-sMmq; Mon, 15 Jun 2020 16:16:34 +0200 (CEST) X-Auth-Info: 5eaqNoSWARv9G2/o67BhrCEp8MreFrqKe5rCUc5nimdz6u3BqYhzUxv7C1QS4tRv Received: from igel.home (ppp-46-244-168-31.dynamic.mnet-online.de [46.244.168.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Mon, 15 Jun 2020 16:16:34 +0200 (CEST) Received: by igel.home (Postfix, from userid 1000) id 598412C023C; Mon, 15 Jun 2020 16:16:34 +0200 (CEST) From: Andreas Schwab To: ams@gnu.org (Alfred M. Szmidt) Cc: eliz@gnu.org, emacs-devel@gnu.org, alan@idiocy.org, kevin.legouguec@gmail.com, stefan@marxist.se, hi-angel@yandex.ru Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> <87eeqg5snt.fsf@igel.home> X-Yow: Mmmmmm-MMMMMM!! A plate of STEAMING PIECES of a PIG mixed with the shreds of SEVERAL CHICKENS!!... Oh BOY!! I'm about to swallow a TORN-OFF section of a COW'S LEFT LEG soaked in COTTONSEED OIL and SUGAR!! .. Let's see.. Next, I'll have the GROUND-UP flesh of CUTE, BABY LAMBS fried in the MELTED, FATTY TISSUES from a warm-blooded animal someone once PETTED!! ... YUM!! That was GOOD!! For DESSERT, I'll have a TOFU BURGER with BEAN SPROUTS on a stone-ground, WHOLE WHEAT BUN!! Date: Mon, 15 Jun 2020 16:16:34 +0200 In-Reply-To: (Alfred M. Szmidt's message of "Mon, 15 Jun 2020 10:15:19 -0400") Message-ID: <87a7145s8t.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=212.18.0.9; envelope-from=whitebox@nefkom.net; helo=mail-out.m-online.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 10:16:36 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 14:16:42 -0000 On Jun 15 2020, Alfred M. Szmidt wrote: > Computers do not work by osmosis; there is always input. The input > here is either files, directories, or a rev-list. Read on. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From MAILER-DAEMON Mon Jun 15 10:25:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkq3C-0001q4-Nh for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 10:25:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkq3A-0001nJ-Bt for emacs-devel@gnu.org; Mon, 15 Jun 2020 10:25:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37338) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkq38-0005fC-DH; Mon, 15 Jun 2020 10:25:22 -0400 Received: from ams by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jkq35-0006aN-W1; Mon, 15 Jun 2020 10:25:20 -0400 From: ams@gnu.org (Alfred M. Szmidt) To: Andreas Schwab CC: eliz@gnu.org, emacs-devel@gnu.org, alan@idiocy.org, kevin.legouguec@gmail.com, stefan@marxist.se, hi-angel@yandex.ru In-reply-to: <87a7145s8t.fsf@igel.home> (message from Andreas Schwab on Mon, 15 Jun 2020 16:16:34 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <87eeqg7r0w.fsf@igel.home> <4350ACE2-2241-485D-8F50-CB6030E43AD7@gnu.org> <87eeqg5snt.fsf@igel.home> <87a7145s8t.fsf@igel.home> Message-Id: Date: Mon, 15 Jun 2020 10:25:19 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 14:25:24 -0000 You clearly seem to know what to "read on" -- I do not since you did not say, so instead of a nonsensical comment you could explain where the error is. From MAILER-DAEMON Mon Jun 15 10:42:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkqK5-0001CV-GH for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 10:42:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkqK3-0001CH-RO for emacs-devel@gnu.org; Mon, 15 Jun 2020 10:42:51 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37634) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkqK0-0000Pv-Tj; Mon, 15 Jun 2020 10:42:48 -0400 Received: from [176.228.60.248] (port=4171 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkqJz-00007v-E6; Mon, 15 Jun 2020 10:42:48 -0400 Date: Mon, 15 Jun 2020 17:42:42 +0300 Message-Id: <837dw82xwd.fsf@gnu.org> From: Eli Zaretskii To: =?iso-8859-1?Q?K=E9vin?= Le Gouguec Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru In-Reply-To: <878sgobuvf.fsf@gmail.com> (message from =?iso-8859-1?Q?K=E9v?= =?iso-8859-1?Q?in?= Le Gouguec on Mon, 15 Jun 2020 10:23:16 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 14:42:52 -0000 > From: Kévin Le Gouguec > Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, > schwab@linux-m68k.org, hi-angel@yandex.ru > Date: Mon, 15 Jun 2020 10:23:16 +0200 > > AFAIU, git send-email literally just runs format-patch, and sends the > result (with said optional annotation) over SMTP. I'm not sure what > difference this makes as far as authorship authenticity is concerned? > The From field used by git send-email is literally the From field set by > git format-patch. > > Really, the only differences that I can see between format-patch and > send-email are > > - for contributors, no need to whip out a mail client and fiddle with > attachments, > > - for maintainers, no need to scan the mail for attachments; just pipe > the mail itself to git am. You need to look at this from the right vantage point: the POV of me (or someone else) who needs to install changes in such an email. I'm on the receiving end of the email, so I have no idea what command(s) were used to create and send it. All I see is a random email message, not unlike many others, just with diffs in its body. You suggest to pipe it into Git, but how do I know it's in a proper format to be processed correctly by Git? There's no clue. I need to read the relevant parts of the email to verify: . that the Subject line is appropriate for the heading of the commit log message . that the From header names the author, and was not rewritten in transit by some mailing-list software or another MTA . that the Date makes sense . that the diffs weren't wrapped by whatever MUA was used . that the diffs and the body are properly encoded And even after all that, I can never be sure that Git will process the patch, because my decision that the format is proper is just a guess. Any single problem I missed, and I get to recover with "am --abort", clean up my repository, find out what was wrong, etc. All of this wastes time and energy, which adds up when you need to process more than just a couple of submissions. By contrast, when the changes are formatted by "git format-patch" and included in the body, preferably as an attachment, the patch has a clear-cut signature, it has its own "From" header that identifies the author independently of the address from which the email was sent, it has the commit date independent of the mailing timestamp, and I can trust its encoding. In this case, I just pipe into "git am" without much effort. Do you see now why we prefer the latter? And it isn't like Emacs is the only project; many GNU projects also prefer to have patches submitted in this format. From MAILER-DAEMON Mon Jun 15 11:38:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkrBu-0005Wl-IM for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 11:38:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkrBt-0005WR-51 for emacs-devel@gnu.org; Mon, 15 Jun 2020 11:38:29 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:51435) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jkrBr-0004uS-4K; Mon, 15 Jun 2020 11:38:28 -0400 Received: by mail-wm1-x344.google.com with SMTP id b82so36981wmb.1; Mon, 15 Jun 2020 08:38:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=QuZUATc09MVly5l1MULKNfI113hh67fqVqTVxx3T0lw=; b=rddVpFzewTvmHCzpi9b089Uc22X2WDV9JvMrWrDypEnGafRzer2VaQZQSjaRdEdtpo +Fzv5XlY5HOeMdAinIhScqrr1aDIRQVqDvlUmtxvQ4DCIkDalf1C49PzT0T9efH8+xNy nPhoYqOJY4bErMvKg1pUAho8H3/bCOWNoIzPLYbYFFyDLz9t5OdlMVEnn+4ey7Bra3/u 65hauh5J1nURCS25RILMJxrO2Nx7L1GEFx3VMhqAPeQAVDpb2yKI0H0ANfZam636yl+o 5IM7ue3ppxE7DChb96DhgAk24Mojv/OTZOldCgiHM/0yjCf7Qj5TORIE6C1rzy5wx4gb ulmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=QuZUATc09MVly5l1MULKNfI113hh67fqVqTVxx3T0lw=; b=r1TUXfXdGnLU0WQ6+Py3LsxNrJlekVQ0jJP7e7LIPTBtolkzLICX+KaYOpYQ8fmiwx 5IHd3IrHf+Q9l7x524Mnp9ZilTR4jlgGh6CcxomtSNDL/kM9F7Sy/NcsRt9TTZ0H1nWP 1kMUTPCG+Ef1gPLjT3w0l6mbMr8UluYG35ndN+gQ0njHYjFktmyDlj5hmyISIE+LO06r xu2tGs6sCtGhzVbsN5C27r16MgoRlYD48G9PZpXoJktpceQuJmR1LbSojAjNXWLrUEIy IP6vUM0aKcwOXIfh5dafo8uaEhL4xH9EjcMacyNJaR9tQHVM8IuIevLBOAlTQTjlE/S9 DGGQ== X-Gm-Message-State: AOAM533/hLnczCNxotksM+IvMSyNsgFpY0G5IcpoCybn0onHNfXS6cjJ Wy3fvSOGSeIYwVuC3bdTzTc= X-Google-Smtp-Source: ABdhPJy0tpQMlwRraGDCJoGvOBpIym0DKyXKTo1Z5X6YhxLnUQhqcWkfaD5vi/a42PnEoEvcZ9iUeg== X-Received: by 2002:a1c:b445:: with SMTP id d66mr13337499wmf.29.1592235504883; Mon, 15 Jun 2020 08:38:24 -0700 (PDT) Received: from klegouguec-HP-ProBook-450-G1 (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id y19sm21934059wmi.6.2020.06.15.08.38.23 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 15 Jun 2020 08:38:23 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> Date: Mon, 15 Jun 2020 17:38:23 +0200 In-Reply-To: <837dw82xwd.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 17:42:42 +0300") Message-ID: <87pna05ogg.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x344.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 15:38:29 -0000 Eli Zaretskii writes: > You need to look at this from the right vantage point: the POV of me > (or someone else) who needs to install changes in such an email. I'm > on the receiving end of the email, so I have no idea what command(s) > were used to create and send it. All I see is a random email message, > not unlike many others, just with diffs in its body. You suggest to > pipe it into Git, but how do I know it's in a proper format to be > processed correctly by Git? There's no clue. Thank you for taking the time to spell out how messages produced by git-send-email can be challenging to distinguish from handcrafted submissions. Indeed, I agree that it's not uncommon for contributors to send emails with "[PATCH]" in the subject and the diff appended at the end; it would be unreasonable to ask maintainers to be able to guess how the message was produced just by eyeballing it. Likewise, it would be unreasonable to ask maintainers to pipe random messages to git-am to find out if they have been produced by git-send-email; when I said: > - for maintainers, no need to scan the mail for attachments; just pipe > the mail itself to git am. I really meant "*when maintainers know the mail has been produced by git-send-email*, there is no need to scan it for attachments; just pipe it straight to git-am". FWIW, git-send-email adds a pretty explicit header[1] to inform recipients of how the message was produced. > Do you see now why we prefer the latter? And it isn't like Emacs is > the only project; many GNU projects also prefer to have patches > submitted in this format. I'm certainly not as well-versed in email mishaps as GNU maintainers, so I'll trust you when you say that attachments fare better than message bodies vs. the many transit/encoding problems you've listed. OTOH I also see that projects working with git-send-email seem to be none worse for the wear[2]. [1] X-Mailer: git-send-email [VERSION] [2] Save for some the occasional "some mail service forbids arbitrary header fields" shenanigans: https://lists.sr.ht/~sircmpwn/sr.ht-discuss/%3CCACFas%3DMug5JOOCZJPjucyb+km_21EK2hoxkFCWgLMtu3thztXQ%40mail.gmail.com%3E From MAILER-DAEMON Mon Jun 15 13:12:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkser-0000xN-7S for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 13:12:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jksep-0000v9-6D for emacs-devel@gnu.org; Mon, 15 Jun 2020 13:12:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40862) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jksel-0007Y4-N9; Mon, 15 Jun 2020 13:12:23 -0400 Received: from [176.228.60.248] (port=1626 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jksel-0000x2-2N; Mon, 15 Jun 2020 13:12:23 -0400 Date: Mon, 15 Jun 2020 20:12:17 +0300 Message-Id: <83zh941cem.fsf@gnu.org> From: Eli Zaretskii To: =?iso-8859-1?Q?K=E9vin?= Le Gouguec Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <87pna05ogg.fsf@gmail.com> (message from =?iso-8859-1?Q?K=E9v?= =?iso-8859-1?Q?in?= Le Gouguec on Mon, 15 Jun 2020 17:38:23 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 17:12:27 -0000 > From: Kévin Le Gouguec > Date: Mon, 15 Jun 2020 17:38:23 +0200 > Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > > FWIW, git-send-email adds a pretty explicit header[1] to inform > recipients of how the message was produced. My email setup hides all X-* headers when it displays messages, because those headers are just noise, and AFAIK are not generally meant for human consumption. (There's a command to toggle their display, but doing that is another nuisance. Also, a typical message coming from debbugs has about a dozen X-* headers, so again, discovering that one header is not easy and calls for careful reading of boring content, better avoided.) > OTOH I also see that projects working with git-send-email seem to be > none worse for the wear[2]. So do we, see CONTRIBUTE. We just ask that git-send-email be used after formatting the patch explicitly, so that all its decorations appear in the email body. If nothing else, this facilitates including unrelated discussions with the patch without risking them winding up in the repository. From MAILER-DAEMON Mon Jun 15 13:59:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jktOa-0002zp-0Z for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 13:59:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jktOY-0002za-K5 for emacs-devel@gnu.org; Mon, 15 Jun 2020 13:59:42 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:37753) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jktOX-0007Nq-1q; Mon, 15 Jun 2020 13:59:42 -0400 Received: by mail-wr1-x432.google.com with SMTP id x13so18048538wrv.4; Mon, 15 Jun 2020 10:59:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YGJB0sFhGrEnwAV75ufD5Q2uWj+e8SDOJUs9nnqlD7k=; b=TtbB/k68Ilv7cnuak//M6+94OWAmiesJEU8sgnWF6/b4LBKDtt+qgMKSCsSWAvLM9p 7WY1rE7xdneB8T4qJvwSY+ve1DIUUYx635zIaVwBBgQUqw7lYT3zJRv+zfd4+QjK3JRE BtfG1ctuHIDziFa4+t0HUnmgQgJYjUYLf3Rh9oez9pFLp3/8FCbPunFv5ucFrAFNkjET ITW+n6qL047UntFecBPwuZbrDoSlkSU+xYrBLe38fAS9FiuQJQ+3gWzzpa9g8LttTyM6 QBFUeqdgneC+Wa9P+AiWOneGu+E9Uk6L9gdPa4dsewlb6zKMueFPb3Mzt0qdT4VCXlr2 0U8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YGJB0sFhGrEnwAV75ufD5Q2uWj+e8SDOJUs9nnqlD7k=; b=S9iQentVmLndklUMdWWUVk4RBUKjwlfoIKbQ1k3qldskBeeZpTk7HkgX3Fjy4EI9Cj xC/4kZcOxE/oPBcmm6FX6iuHHzKebkO3bA2KVPxOlN3REtbf7nIVkUmuBEtmmEueEpxj 1zrY/m89/KLYRM3jauubuKwIVfiJO4uvAVH78dklEc99t5urfrVDTAZNNXSAA4MpShTa Qh/0NRVX3RDobfU1u58k9ONPn8VkNrz15BeRWLh2m6Vyl3fPF+JSNLLH68o60nuSRpEu yarvPpz8obPPEhyeo14Gc6ncXI8Sh1zXAz3yk0+LsSyu2wqr99YfvD6teEKwmf+TFzrI JwAQ== X-Gm-Message-State: AOAM5335gW9u5ek8B2+H6GPzE3zzoS8zkEBj3rLauevpakSvBPJKwiaa wQHcO5aRxngshZ+rj4l3d8d4B5Xh+Awe9g== X-Google-Smtp-Source: ABdhPJy6C6E1cu1Sgetb+j4K1tyA+IS2wMc+4GFqpFYapuoE520eqrVWL4d1MyjWPwPLIHrZN8gmeg== X-Received: by 2002:a5d:5744:: with SMTP id q4mr29054159wrw.137.1592243978741; Mon, 15 Jun 2020 10:59:38 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id d17sm26543595wrg.75.2020.06.15.10.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 10:59:38 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> Date: Mon, 15 Jun 2020 19:59:37 +0200 In-Reply-To: <83zh941cem.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 20:12:17 +0300") Message-ID: <87r1ugb46u.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=kevin.legouguec@gmail.com; helo=mail-wr1-x432.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 17:59:42 -0000 Eli Zaretskii writes: > My email setup hides all X-* headers when it displays messages, > because those headers are just noise, and AFAIK are not generally > meant for human consumption. (There's a command to toggle their > display, but doing that is another nuisance. Also, a typical message > coming from debbugs has about a dozen X-* headers, so again, > discovering that one header is not easy and calls for careful reading > of boring content, better avoided.) Fair enough. Should the wave of git-send-email contributions turn out to be unstoppable, at least the existence of this header means it won't be too hard to write a function to automate this check ;) >> OTOH I also see that projects working with git-send-email seem to be >> none worse for the wear[2]. > > So do we, see CONTRIBUTE. We just ask that git-send-email be used > after formatting the patch explicitly, so that all its decorations > appear in the email body. If nothing else, this facilitates including > unrelated discussions with the patch without risking them winding up > in the repository. Mmm, now that you mention it, I'm confused. Here's what we say in CONTRIBUTE: > To email a patch you can use a shell command like 'git format-patch -1' > to create a file, and then attach the file to your email. This nicely > packages the patch's commit message and changes. To send just one > such patch without additional remarks, you can use a command like > 'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'. I just tried to git-send-email --to=myself a patch file generated from git-format-patch, and the email I received looks just like what Konstantin sent to the bug list, i.e. - the commit's summary line in the Subject field, - the rest of the commit message at the top of the body, - some fluff between the "---\n" and "diff --git" lines (a diffstat added by git-format-patch; I could have added more comments there, like Konstantin did), - the diff, - no attachment. I must be missing something. How do our instructions differ from what Konstantin did? Indeed he ran git-send-email without running git-format-patch first, but AFAICT this additional step does not change the end result? From MAILER-DAEMON Mon Jun 15 14:08:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jktXP-00024M-Ii for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 14:08:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59296) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jktXO-00024F-UW for emacs-devel@gnu.org; Mon, 15 Jun 2020 14:08:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41440) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jktXM-0000Xe-Ao; Mon, 15 Jun 2020 14:08:48 -0400 Received: from [176.228.60.248] (port=1264 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jktXL-0006O4-PU; Mon, 15 Jun 2020 14:08:48 -0400 Date: Mon, 15 Jun 2020 21:08:42 +0300 Message-Id: <83wo4819sl.fsf@gnu.org> From: Eli Zaretskii To: =?iso-8859-1?Q?K=E9vin?= Le Gouguec Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <87r1ugb46u.fsf@gmail.com> (message from =?iso-8859-1?Q?K=E9v?= =?iso-8859-1?Q?in?= Le Gouguec on Mon, 15 Jun 2020 19:59:37 +0200) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> <87r1ugb46u.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 18:08:51 -0000 > From: Kévin Le Gouguec > Cc: schwab@linux-m68k.org, alan@idiocy.org, hi-angel@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > Date: Mon, 15 Jun 2020 19:59:37 +0200 > > > So do we, see CONTRIBUTE. We just ask that git-send-email be used > > after formatting the patch explicitly, so that all its decorations > > appear in the email body. If nothing else, this facilitates including > > unrelated discussions with the patch without risking them winding up > > in the repository. > > Mmm, now that you mention it, I'm confused. Here's what we say in > CONTRIBUTE: > > > To email a patch you can use a shell command like 'git format-patch -1' > > to create a file, and then attach the file to your email. This nicely > > packages the patch's commit message and changes. To send just one > > such patch without additional remarks, you can use a command like > > 'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'. > > I just tried to git-send-email --to=myself a patch file generated from > git-format-patch, and the email I received looks just like what > Konstantin sent to the bug list, i.e. Then maybe we should remove that sentence. From MAILER-DAEMON Mon Jun 15 14:51:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkuCs-0000QT-GP for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 14:51:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuCr-0000QF-2W for emacs-devel@gnu.org; Mon, 15 Jun 2020 14:51:41 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:59484) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuCo-000755-ME; Mon, 15 Jun 2020 14:51:40 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 65E511600C3; Mon, 15 Jun 2020 11:51:34 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id FQUUCa55IDnW; Mon, 15 Jun 2020 11:51:33 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9F65C1600DE; Mon, 15 Jun 2020 11:51:33 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id UIK1rqDnnq7u; Mon, 15 Jun 2020 11:51:33 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 643A61600C3; Mon, 15 Jun 2020 11:51:33 -0700 (PDT) Subject: Re: git-send-email To: Eli Zaretskii , =?UTF-8?Q?K=c3=a9vin_Le_Gouguec?= Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> <87r1ugb46u.fsf@gmail.com> <83wo4819sl.fsf@gnu.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: Date: Mon, 15 Jun 2020 11:51:33 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83wo4819sl.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 14:51:34 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 18:51:41 -0000 I mildly prefer patches sent via 'git send-email' to those sent via attachments, as I can review the patch directly without having to do any extra manipulation to see it. When I want to feed the patch to git (which is less common than reviewing it), I can easily save the message into a file and then run 'git am'. > how do I know it's in a proper format to be > processed correctly by Git? That problem exists independently of whether the message is sent as-is, or is put into an attachment. That is, "How does one know whether the attachment is in the proper format?" is no easier to answer than "How does one know the entire message is in the proper format?". There are indeed problems with email-sending agents that munge bytes when sending patches directly. But 'git send-email' is not one of those agents. Are you using Gnus to process these messages? Perhaps Gnus could be improved to make this job easier? From MAILER-DAEMON Mon Jun 15 14:59:52 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkuKm-0004D0-Hj for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 14:59:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuKl-0004Cs-AR for emacs-devel@gnu.org; Mon, 15 Jun 2020 14:59:51 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41981) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkuKj-0008Nm-GH; Mon, 15 Jun 2020 14:59:49 -0400 Received: from [176.228.60.248] (port=4370 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jkuKT-0002dc-AN; Mon, 15 Jun 2020 14:59:44 -0400 Date: Mon, 15 Jun 2020 21:59:26 +0300 Message-Id: <83sgew17g1.fsf@gnu.org> From: Eli Zaretskii To: Paul Eggert Cc: kevin.legouguec@gmail.com, stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru In-Reply-To: (message from Paul Eggert on Mon, 15 Jun 2020 11:51:33 -0700) Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> <87r1ugb46u.fsf@gmail.com> <83wo4819sl.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 18:59:51 -0000 > Cc: stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, > schwab@linux-m68k.org, hi-angel@yandex.ru > From: Paul Eggert > Date: Mon, 15 Jun 2020 11:51:33 -0700 > > I mildly prefer patches sent via 'git send-email' to those sent via attachments, > as I can review the patch directly without having to do any extra manipulation > to see it. With Emacs MUAs I'm familiar with, looking at an attachment is very easy, almost like looking at the body. I don't have any problems with that. > > how do I know it's in a proper format to be > > processed correctly by Git? > > That problem exists independently of whether the message is sent as-is, or is > put into an attachment. Not if the body/attachment was formatted by "git format-patch". Then the patches have a telltale format and signature that identify the format unequivocally. > Are you using Gnus to process these messages? No. From MAILER-DAEMON Mon Jun 15 15:06:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkuRQ-0006HP-6u for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 15:06:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41226) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuRO-0006Fb-PL for emacs-devel@gnu.org; Mon, 15 Jun 2020 15:06:42 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:34596) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuRM-0001K8-3n; Mon, 15 Jun 2020 15:06:42 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 514131600DE; Mon, 15 Jun 2020 12:06:37 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id LGPkJSV-7oIu; Mon, 15 Jun 2020 12:06:36 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8CDA11600C3; Mon, 15 Jun 2020 12:06:36 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id mb6sGpGZYtjD; Mon, 15 Jun 2020 12:06:36 -0700 (PDT) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 4E84B1600DE; Mon, 15 Jun 2020 12:06:36 -0700 (PDT) Subject: Re: git-send-email To: Eli Zaretskii Cc: kevin.legouguec@gmail.com, stefan@marxist.se, alan@idiocy.org, emacs-devel@gnu.org, schwab@linux-m68k.org, hi-angel@yandex.ru References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> <87r1ugb46u.fsf@gmail.com> <83wo4819sl.fsf@gnu.org> <83sgew17g1.fsf@gnu.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <62ad9107-5715-bd2e-1a62-23fe1e291ddf@cs.ucla.edu> Date: Mon, 15 Jun 2020 12:06:35 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83sgew17g1.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 14:51:34 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 19:06:43 -0000 On 6/15/20 11:59 AM, Eli Zaretskii wrote: > With Emacs MUAs I'm familiar with, looking at an attachment is very > easy, almost like looking at the body. I don't have any problems with > that. Yes, I can also look at an attachment reasonably easily (I'm using Thunderbird FWIW). Still, it's a bit easier to see email without the attachment. This is pretty typical among MUAs I've used. >>> how do I know it's in a proper format to be >>> processed correctly by Git? >> >> That problem exists independently of whether the message is sent as-is, or is >> put into an attachment. > > Not if the body/attachment was formatted by "git format-patch". Then > the patches have a telltale format and signature that identify the > format unequivocally. Yes. Hmm, but I thought that this was the case we were talking about. Is the problem that people are using 'git send-email' to send patches that were not formatted via 'git format-patch'? That would indeed be problematic, and if necessary we can add text to CONTRIBUTE to discourage that. From MAILER-DAEMON Mon Jun 15 15:32:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jkuqH-0000ot-2o for mharc-emacs-devel@gnu.org; Mon, 15 Jun 2020 15:32:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuqF-0000ls-Le for emacs-devel@gnu.org; Mon, 15 Jun 2020 15:32:23 -0400 Received: from smtprelay0110.hostedemail.com ([216.40.44.110]:49422 helo=smtprelay.hostedemail.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkuqE-0005Kv-0B for emacs-devel@gnu.org; Mon, 15 Jun 2020 15:32:23 -0400 Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay02.hostedemail.com (Postfix) with ESMTP id 732E875498 for ; Mon, 15 Jun 2020 19:32:20 +0000 (UTC) X-Session-Marker: 796F6E69407261626B696E732E6E6574 X-Spam-Summary: 2, 0, 0, , d41d8cd98f00b204, yoni@rabkins.net, , RULES_HIT:41:355:379:599:988:989:1260:1277:1313:1314:1345:1359:1381:1437:1516:1518:1537:1560:1711:1714:1730:1747:1777:1792:2393:2559:2562:2693:3138:3139:3140:3141:3142:3865:3867:3868:3871:3872:3873:3874:4362:5007:6261:10004:10400:10848:11658:11914:12050:12297:13069:13311:13357:13618:21080:21627:21740:30041:30054, 0, RBL:none, CacheIP:none, Bayesian:0.5, 0.5, 0.5, Netcheck:none, DomainCache:0, MSF:not bulk, SPF:, MSBL:0, DNSBL:none, Custom_rules:0:0:0, LFtime:1, LUA_SUMMARY:none X-HE-Tag: quiet83_4803fee26df8 X-Filterd-Recvd-Size: 947 Received: from birch.rabkins.net (c-73-238-99-162.hsd1.nh.comcast.net [73.238.99.162]) (Authenticated sender: yoni@rabkins.net) by omf09.hostedemail.com (Postfix) with ESMTPA for ; Mon, 15 Jun 2020 19:32:19 +0000 (UTC) From: Yoni Rabkin To: emacs-devel@gnu.org Subject: Re: Adding Emms to ELPA (take 2), and a technical question References: <87pnbwg0up.fsf@rabkins.net> X-Ethics: Use GNU Date: Mon, 15 Jun 2020 15:32:18 -0400 In-Reply-To: <87pnbwg0up.fsf@rabkins.net> (Yoni Rabkin's message of "Fri, 24 Apr 2020 15:06:22 -0400") Message-ID: <871rmgt9a5.fsf@rabkins.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=216.40.44.110; envelope-from=yoni@rabkins.net; helo=smtprelay.hostedemail.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/15 15:32:20 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2020 19:32:24 -0000 Emms is now being distributed via GNU ELPA. I wanted to take a moment to thank Stefan Monnier for his work over the past weeks to make that happen. -- "Cut your own wood and it will warm you twice" From MAILER-DAEMON Tue Jun 16 14:09:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlG20-0004yf-84 for mharc-emacs-devel@gnu.org; Tue, 16 Jun 2020 14:09:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlG1y-0004yY-TX for emacs-devel@gnu.org; Tue, 16 Jun 2020 14:09:55 -0400 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]:38728) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlG1x-0001hD-0w for emacs-devel@gnu.org; Tue, 16 Jun 2020 14:09:54 -0400 Received: by mail-qk1-x732.google.com with SMTP id w1so20080380qkw.5 for ; Tue, 16 Jun 2020 11:09:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=OmIOsDBy6gNxSN92Oxd8nqf7bpNLoi86F06i+TO7Kas=; b=b8wwJxIriBH3UySJZbi43CTWGTnsld3mFpHi1RinE/AACF2RstI6Gn7JJXwHlwgh0n 618zwVxkGcFEZrCT0/Dn2WUXlkBAjtU5/RpRjKsOvIOc6Ecl6drWFM0IlBGdQkywuKNe n+/K7Fk5L+s0iikU0phPmwdYBvMX0EbTq0j4o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=OmIOsDBy6gNxSN92Oxd8nqf7bpNLoi86F06i+TO7Kas=; b=Lr4ohBcESpZ8F0Q0IC1EC6RbIFJ/vT9cYUvUU+o8vsLgTqpQv2lvTB4MTUkoCG+aR2 8VKy8js/rk00jUrd0rCkqp5UhiVVP7gPrRn++agSpFRfB9Exej/ColVAcb9Gh0tyCjXN FsXf0zvNP+kA6dinoQKtpJaeLOIW0+HMjwDop7SJpiE2F7qYDOSxusyMGMtNkh4v3Rs4 qvm38jzpymGUPJdicpxdGz0dxRcme8+e9sJwEc1WiXRUp8esNApmXBwJ9GfbOsL2+Am+ kQye9mZ/Cgt2H6esP38/sh0C/+8+6uUeT8y6rRUxaJQiTAX5l29ovYK4CUs+kT8efqCD oyKw== X-Gm-Message-State: AOAM533mP5vlmPB3WxmULv5n32RRat1bhTNad11/PkcK8jAglkLXYzTs h22NGqaq/FYyVKtWxy5EQLNc6oF/Jsbc2g== X-Google-Smtp-Source: ABdhPJwpyeb43b8zWaqO8OhosRfq0M0so03Qsg75Fw+Al12mUJiKxY0Sy7BxsI88kwgADt739BZa0w== X-Received: by 2002:a05:620a:22d7:: with SMTP id o23mr19202332qki.119.1592330990941; Tue, 16 Jun 2020 11:09:50 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id b74sm14180473qkc.17.2020.06.16.11.09.48 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 16 Jun 2020 11:09:49 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier , =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel Cc: emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> <4krg9s2y.fsf@lifelogs.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Tue, 16 Jun 2020 18:09:48 +0000 In-Reply-To: <4krg9s2y.fsf@lifelogs.com> (Ted Zlatanov's message of "Fri, 12 Jun 2020 16:17:25 +0000") Message-ID: <7dw6naqb.fsf@lifelogs.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2607:f8b0:4864:20::732; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x732.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Jun 2020 18:09:55 -0000 On Fri, 12 Jun 2020 16:17:25 +0000 Ted Zlatanov wrote:=20 TZ> I spent a few hours in that direction, but prettify-symbols-mode was TZ> just too easy to extend... I've pushed my proposed patch to TZ> scratch/tzz/auth-source-reveal-mode as follows: TZ> * allow regexps in prettify-symbols-alist using a new extended format. I TZ> wasn't sure here if I should go with the current format, and the TZ> replacement lookup does extra string-match calls, so it's not ideal. TZ> This specific extension was requested fairly often, looking back at TZ> the last few years on various Emacs forums. I extended the new format to allow any symbol as an identifier, and speed up lookups based on the identifier. Each fixed entry is still collected in one big optimized regexp by prettify-symbols--make-fixed-matcher, and there is no identifier (we just do a fast assoc as before). But in addition, each regexp entry in prettify-symbols-alist now gets processed by prettify-symbols--make-regexp-keywords, with the identifier propagated down the call chain. I think this is fairly clean. TZ> * define a new local variable prettify-symbols-compose-replacer for the TZ> function that looks up and replaces the symbol TZ> * create the new auth-source-reveal-mode that behaves as proposed, both TZ> in JSON and in netrc/authinfo buffers. It warns if TZ> prettify-symbols-unprettify-at-point is nil, since I think the TZ> experience is much less pleasant without it. It doesn't check syntax TZ> as carefully as prettify-symbols-mode. TZ> * document the composition layout format enough that users can customize TZ> auth-source-reveal-hider to show a fancy string instead of a single TZ> character. I think this will appeal to prettify-symbols-mode users in TZ> general, since I have seen quite a few hacks for it in various Emacs TZ> forums and even a helper library https://github.com/Ilazki/prettify-u= tils.el/blob/master/prettify-utils.el TZ> * the new code in auth-source.el and prog-mode.el is much less than the TZ> other approaches I tried, and much much less confusing. I like that :) Following Cl=E9ment's suggestion, I started on the library path by creating some new functions to install and remove prettifications. Coupled with the new identifier symbols and regexps, I think this covers all the use cases for touching or bypassing prettify-symbols-alist I've seen. prettify-symbols-add-prettification-entry "Add ENTRY to `prettify-symbols-alist' for the current buffer. prettify-symbols-add-prettification-rx "Convenience wrapper of `prettify-symbols-add-prettification-entry' to pr= ettify REGEXP with REPLACEMENT." prettify-symbols-add-prettification-string "Convenience wrapper of `prettify-symbols-add-prettification-entry' to pr= ettify FIXED-STRING with REPLACEMENT." prettify-symbols-remove-prettification "Remove ENTRY to `prettify-symbols-alist' for the current buffer. prettify-symbols-remove-prettifications "Remove all IDENTIFIER entries from `prettify-symbols-alist' for the curr= ent buffer. TZ> Let me know if you have strong objections or any suggestions, otherwise TZ> in a day or two I'll document and push this patch. I haven't heard from Stefan, so I'm still holding off merging and would appreciate feedback. Ted From MAILER-DAEMON Tue Jun 16 23:36:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlOsU-0006DA-DC for mharc-emacs-devel@gnu.org; Tue, 16 Jun 2020 23:36:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54858) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlOsS-0006Cc-NE for emacs-devel@gnu.org; Tue, 16 Jun 2020 23:36:40 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlOsQ-0000iX-9Q; Tue, 16 Jun 2020 23:36:40 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592364993; cv=none; d=zohomail.com; s=zohoarc; b=DmbDivg5bQNqMct8PXPj07f8TJ8bxm6MOUm6qhfY6bJSF+gDmk80FlqKqSE/6hxg+Fc9e8XhrXi/i9uJToS1WWfJHDgVsR+qaAb3aaXj6ErAgW/ndzYn7GN8FfkSXWgUX9LwnB6HlJ6wU2PODxWVgsIRHXL72J6Vb50CllmRqjo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592364993; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=9NJyYtGjQNakjC5vddDCljA5kfn76Jl2B3if0+cMOBo=; b=IrODvjxhUkAZiBiU+g6GHu1ARubZnlXYvr/BRq3g/UGJNFLcor+nIkrMWgfcJyEHwLl2D73YjWR8W1rPis4Ktn3HghP2rKkBDcSdnYbWWzUMbfSqB9EY5KfulEnvz/S5RuREE1GG/HYhJGeOKuEMe/jpfXltb56qkJBiuDI8P+I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592364993; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Cc:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=9NJyYtGjQNakjC5vddDCljA5kfn76Jl2B3if0+cMOBo=; b=CR0CiYCkt2EoE8gK/9UQCfMVSCFp1hfd+qysfHT/D5xDd8ACZHVvHCoJBHuoSu4B zWET4Aa3DF/YAVWXxG4zm8Sr8lDWtOZsqe63kvgWXre3eWFKt2v34tDEbSC6bfbyl1y N6SGA0MLVY9GXYcFz7Y0Ky0d90dHppsNV8OTOX/k= Received: from localhost (p54ad4bd4.dip0.t-ipconnect.de [84.173.75.212]) by mx.zohomail.com with SMTPS id 1592364989669292.7205313033354; Tue, 16 Jun 2020 20:36:29 -0700 (PDT) References: <863691n4xl.wl-me@enzu.ru> <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87r1whiape.fsf@fastmail.fm> <87blnjopd0.fsf@nicolasgoaziou.fr> <83v9lregx0.fsf@gnu.org> <87sgguh9we.fsf@fastmail.fm> <83mu72ckjr.fsf@gnu.org> <87o8rhpeym.fsf@fastmail.fm> <83eesdb37v.fsf@gnu.org> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: Eli Zaretskii Cc: Joost Kremers , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" In-reply-to: <83eesdb37v.fsf@gnu.org> X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Wed, 17 Jun 2020 05:36:26 +0200 Message-ID: <87pn9ytlc5.fsf@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.53; envelope-from=rekado@elephly.net; helo=sender4-of-o53.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/16 23:36:35 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 03:36:41 -0000 Eli Zaretskii writes: >> From: Joost Kremers >> Date: Fri, 24 Apr 2020 08:36:49 +0200 [=E2=80=A6] >> The=20 >> point is, I need to know Org syntax anyway to do each single thing=20 >> separately. Integrating them doesn't require a deeper level of=20 >> knowledge than I already have. > > Unless I misunderstand what you mean by "Org syntax", I don't think > users who want to create documents with Org should be required to know > that syntax. Instead, there should be commands to help them produce > correctly formatted snippets. Compare that with Texinfo commands > which produce the various syntactic elements of the language. I would like to not have to bother with Org syntax at all, but after using the commands that produce it I see that syntax. It can be very confusing to see an unfamiliar syntax after issuing a command =E2=80=94 what parts of it may I edit? When I accidentally remove parts of it, how can I restore the full syntax? Two things would help here, in my opinion: * hide the textual representation. My Org mode configuration replaces =E2=80=9C*=E2=80=9D, =E2=80=9C**=E2=80= =9D, =E2=80=9C***=E2=80=9D, =E2=80=9C****=E2=80=9D with =E2=80=9Cbullets=E2=80=9D like "=E2=97=89", "=E2=97=8B", "=E2=97=87", and= "=E2=97=87". I can produce them either by tying =E2=80=9C*=E2=80=9D (if I know that syntax) or by using M-RET and S= -right. Org mode hides the syntax for URLs when [[=E2=80=A6][=E2=80=A6]] is used and = displays just an underlined and clickable URL. For source code blocks I replace =E2=80=9C#+begin_src=E2=80=9D and =E2=80= =9C#+end_src=E2=80=9D with markers like =E2=9C=8E and =E2=96=A1 and set the block visually apart by = customizing the faces. (See https://pank.eu/blog/pretty-babel-src-blocks.html) * delete the whole construct instead of deleting characters. Currently, it is easy to end up with invalid syntax by deleting parts of the markup text. Deleting the trailing =E2=80=9Cc=E2=80=9D of =E2=80=9C#+end= _src=E2=80=9D at the end of a source code block, for example, breaks that code block but leaves the =E2=80=9C#+begin_src=E2=80=9D and now incomplete =E2=80=9C#+end_sr=E2=80= =9D where they are. I need to know that I have to append a =E2=80=9Cc=E2=80=9D at the end to restore th= e code block. There is no command I can run to =E2=80=9Crepair=E2=80=9D this co= de block. Maybe it would be good to remove the whole textual markup at once, leaving only the user-provided text that was marked up. By making it impossible or very unlikely to produce incorrect markup and by hiding the markup syntax itself the user wouldn=E2=80=99t have to learn = it and also wouldn=E2=80=99t be exposed to it accidentally. At that point the syntax itself becomes secondary; this would then be similar to how enriched-mode works. --=20 Ricardo From MAILER-DAEMON Tue Jun 16 23:46:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlP25-0002Bs-MA for mharc-emacs-devel@gnu.org; Tue, 16 Jun 2020 23:46:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlP23-0002BR-AQ for emacs-devel@gnu.org; Tue, 16 Jun 2020 23:46:35 -0400 Received: from mail-oln040092066093.outbound.protection.outlook.com ([40.92.66.93]:24462 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlP20-00028v-Ao; Tue, 16 Jun 2020 23:46:34 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PZxTfWgNZvimxjt+RpaEkSkFG2pv+HlVkA45WNPNqhNqYJWcz88ArfzmaCLK6lY8I8T3t5KXqKTPgyZnsW715vWZAx24tYGqR6cfTPCca98hWfLbrNQSKilWisoHqzVI6Hk36ME15cvNNUeE8t7zeOuaG3sO9D1FvnXUfB5mM0qD4Ay9DcOm7ceH9bDZ8pX8ujN/nruVg+9+LGc90CkMX8Fc1gY5eUWiiIdITZyTSQEMUbGQ5gbyHHHmXmx+O5eLx5BJOIFv+yc74/5Ypn61+xFMGzHVVZxf6ZwiHYJvZp9VuUN9qKGFTaVlZSoieP/6d3iyDpdPQ455+1yBatgJWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e7FPlpTxAmKv3yCZ/Gap9/3mpwy057KGJWbI03h1nBQ=; b=MAnBx8V2OkuIoJhsVwvF0DmGr+cgK5TiNafkMObA/Uw3O16qIqcmGxASbfB75d2V0wdK16ZKpzHxsGSJLXMGeVU8vcd5f8H3IfTATOC32Y+iEIOssE+EFXOlP5dmITNgZGBElcfiPphVnUa0LES8dy9WBBBKY/67XSaXq+a2kFpLSUg+BWge3sZ/9OYwX2k8lC+8dkNgXVb4qy23KZWvo2tekBUGEg1ObChSac3xdFvkqa2imsykM/MQ/Stto50LfKnYG6OkOvrIYSVXaOq4e3HYKrWWgGQ7W7EJ2LBYja4Nl+a7/6MJDmw/si64SCC6Y7cF5ldqn9rIA4UWtjetmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e7FPlpTxAmKv3yCZ/Gap9/3mpwy057KGJWbI03h1nBQ=; b=gN+YS7+DfctxRuth/SaHI0fUdCibpp3nOFHcTR/WZds/JCc4Cq2J5/awtrd4lZ6AYj8oCK+Mfhujn2iSJf9OEon+2Tk/Ic9vW0qWt8Cq+7zd+9vryWZg4oR3QghEsy0MmEvVzKF7AtR2366+sA43euLpzzEVRYxuCSpZpSLVdm4JS1hoZLsAd6KTU/Mqk87KIM8y0br+4pVcrv4YywDvf5kHQelu/xC/tmRUE43ONaP8yjveD2+rkZqhY5iEueqN+ViAoWfeoGzcqyheqatEC0JpvoR5f0n3VRWQkVT7GNK5Nn3KMGC30OSzJfVaFPL2MeZolMQgl+5uPQIQZMWuFQ== Received: from VE1EUR01FT039.eop-EUR01.prod.protection.outlook.com (2a01:111:e400:7e19::48) by VE1EUR01HT206.eop-EUR01.prod.protection.outlook.com (2a01:111:e400:7e19::502) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18; Wed, 17 Jun 2020 03:46:28 +0000 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com (2a01:111:e400:7e19::51) by VE1EUR01FT039.mail.protection.outlook.com (2a01:111:e400:7e19::291) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18 via Frontend Transport; Wed, 17 Jun 2020 03:46:28 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:8712FFBCBE5EB566987577960D5C4EEC9448445D77A11E606457F77E0FC7D8F5; UpperCasedChecksum:C01F7AE637EBBFDA58568D5CF0BCA2F73C65B42F6FBC8F2BD17004F210957C81; SizeAsReceived:9510; Count:48 Received: from VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::485f:2120:63bb:92c]) by VI1PR06MB4526.eurprd06.prod.outlook.com ([fe80::485f:2120:63bb:92c%7]) with mapi id 15.20.3088.028; Wed, 17 Jun 2020 03:46:28 +0000 From: Arthur Miller To: Ricardo Wurmus Cc: Eli Zaretskii , Joost Kremers , emacs-devel@gnu.org Subject: Re: "Why is emacs so square?" References: <86blno9yle.wl-me@enzu.ru> <87d0845msg.fsf@yahoo.com> <87h7xgjasw.fsf@yahoo.com> <875zdwjais.fsf@yahoo.com> <6a198677-41b6-4dbd-39d0-2b01550d53cf@yandex.ru> <32f6a2ce-e30f-059f-dcd4-233d666a10a1@yandex.ru> <87r1whiape.fsf@fastmail.fm> <87blnjopd0.fsf@nicolasgoaziou.fr> <83v9lregx0.fsf@gnu.org> <87sgguh9we.fsf@fastmail.fm> <83mu72ckjr.fsf@gnu.org> <87o8rhpeym.fsf@fastmail.fm> <83eesdb37v.fsf@gnu.org> <87pn9ytlc5.fsf@elephly.net> Date: Wed, 17 Jun 2020 05:46:26 +0200 In-Reply-To: <87pn9ytlc5.fsf@elephly.net> (Ricardo Wurmus's message of "Wed, 17 Jun 2020 05:36:26 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P195CA0085.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::26) To VI1PR06MB4526.eurprd06.prod.outlook.com (2603:10a6:803:ac::17) X-Microsoft-Original-Message-ID: <87blli4anh.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pascal.homepc (90.230.29.56) by AM6P195CA0085.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.21 via Frontend Transport; Wed, 17 Jun 2020 03:46:27 +0000 X-Microsoft-Original-Message-ID: <87blli4anh.fsf@live.com> X-TMN: [tH/qL0MKENQrHle0orPfVz5bGKW82j5i] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 16eeeb31-fe3c-41d6-e8aa-08d8127103b7 X-MS-TrafficTypeDiagnostic: VE1EUR01HT206: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nIGdrCJkd6/ypRabmI4XuHwxpT2pcPlVl+ff8KKTknU4Rnnr3jaC9FmJfScN/TOW26MtFAm5AQ6XLLmsGPC6rCTNkeKza4SkFtA9cq8tDkT29YiQFBse/2LsLysFSI0ocPCvoYUGva3C212IyHQIL7IsVPfjNTA9+6jQo4J7LBOY4naVd66LOR7o6R3tjbzgWGl1ezp092/HkEjSvrnqVbm8t3kUlVCV3qQF93aKSkfKwVRomozpvn7a7uMNJOkS X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR06MB4526.eurprd06.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: ONPCBxWYoLu4p/W75I6K2oWw609ODrB8uzqUuv41Z/CTG+I/5Kx7iia5entlmDeXLb+JsTvCCVrpZXobxCklm9RFkAuatdTzI3HGVku+qpIM8k0WJGY6jroa/nUAz5uOsuXyt02GRjGkm2VyZnLCNg== X-OriginatorOrg: live.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16eeeb31-fe3c-41d6-e8aa-08d8127103b7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2020 03:46:28.0841 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1EUR01HT206 Received-SPF: pass client-ip=40.92.66.93; envelope-from=arthur.miller@live.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/16 23:46:28 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 03:46:35 -0000 Ricardo Wurmus writes: > Eli Zaretskii writes: > >>> From: Joost Kremers >>> Date: Fri, 24 Apr 2020 08:36:49 +0200 > [=E2=80=A6] >>> The=20 >>> point is, I need to know Org syntax anyway to do each single thing=20 >>> separately. Integrating them doesn't require a deeper level of=20 >>> knowledge than I already have. >> >> Unless I misunderstand what you mean by "Org syntax", I don't think >> users who want to create documents with Org should be required to know >> that syntax. Instead, there should be commands to help them produce >> correctly formatted snippets. Compare that with Texinfo commands >> which produce the various syntactic elements of the language. > > I would like to not have to bother with Org syntax at all, but after > using the commands that produce it I see that syntax. It can be very > confusing to see an unfamiliar syntax after issuing a command =E2=80=94 w= hat > parts of it may I edit? When I accidentally remove parts of it, how can > I restore the full syntax? > > Two things would help here, in my opinion: > > * hide the textual representation. > > My Org mode configuration replaces =E2=80=9C*=E2=80=9D, =E2=80=9C**=E2= =80=9D, =E2=80=9C***=E2=80=9D, =E2=80=9C****=E2=80=9D with > =E2=80=9Cbullets=E2=80=9D like "=E2=97=89", "=E2=97=8B", "=E2=97=87", a= nd "=E2=97=87". I can produce them either by > tying =E2=80=9C*=E2=80=9D (if I know that syntax) or by using M-RET and= S-right. Org > mode hides the syntax for URLs when [[=E2=80=A6][=E2=80=A6]] is used an= d displays just > an underlined and clickable URL. > > For source code blocks I replace =E2=80=9C#+begin_src=E2=80=9D and =E2= =80=9C#+end_src=E2=80=9D with > markers like =E2=9C=8E and =E2=96=A1 and set the block visually apart b= y customizing > the faces. (See https://pank.eu/blog/pretty-babel-src-blocks.html) > > * delete the whole construct instead of deleting characters. Currently, > it is easy to end up with invalid syntax by deleting parts of the > markup text. Deleting the trailing =E2=80=9Cc=E2=80=9D of =E2=80=9C#+e= nd_src=E2=80=9D at the end of a > source code block, for example, breaks that code block but leaves the > =E2=80=9C#+begin_src=E2=80=9D and now incomplete =E2=80=9C#+end_sr=E2= =80=9D where they are. I need to > know that I have to append a =E2=80=9Cc=E2=80=9D at the end to restore = the code > block. There is no command I can run to =E2=80=9Crepair=E2=80=9D this = code block. > Maybe it would be good to remove the whole textual markup at once, > leaving only the user-provided text that was marked up. > > By making it impossible or very unlikely to produce incorrect markup and > by hiding the markup syntax itself the user wouldn=E2=80=99t have to lear= n it > and also wouldn=E2=80=99t be exposed to it accidentally. > > At that point the syntax itself becomes secondary; this would then be > similar to how enriched-mode works. When I accidentally delete a part of markup, usually '[' or ']' in a link, it is immidiately reflected visually in the buffer so I just undo to "restore". For me it is just C-S--. But I do agree it would be usefull to make some markup "atomic", like for example "#+BEGIN_SRC", "#+END_SRC". But for some other markup it might be difficult. For example leading '*': sometimes it might be a misstake, but sometimes it might be intentionally, for example to change hte heading from say *** to **.=20 From MAILER-DAEMON Tue Jun 16 23:58:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlPE0-0005ZM-1j for mharc-emacs-devel@gnu.org; Tue, 16 Jun 2020 23:58:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlPDy-0005Yk-85 for emacs-devel@gnu.org; Tue, 16 Jun 2020 23:58:54 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21367) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlPDw-0003lc-7A; Tue, 16 Jun 2020 23:58:53 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592366327; cv=none; d=zohomail.com; s=zohoarc; b=K4mPTX1KmCfagDu3HDhe7OFRNUViImMdOzgZIdJ2RMCwn/VcYx3voq5p0avLxhm/UQti3t6TECotYWTgGS/nNX9yh8UUPuFxYhu9m5tZ593Asoc9u8I+zrulz9+xXo2mG7/Dfgn37FD3MCKa6UVxF612ri6zWYhrY1zCloysgpE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592366327; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=aAc/WcSftQ15Y9duqM+Sa4ndKT8KETrKprWO2JIkfFE=; b=W3LBqrrs/2VlVxYfdSd3drFxSyHdEe8akOxy3waV7uxEePkSICvU//ch64aalaHaO79va+QhUNkJ565vEvIWHSes3Kq/Caxht9irc13d+rwkxeKIIyymj1IjWiaJkE8YBqXp+dIoANfHVZvG0bhyLlZUK01E8WbpR/ndNIoUTu0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592366327; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Cc:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=aAc/WcSftQ15Y9duqM+Sa4ndKT8KETrKprWO2JIkfFE=; b=O8sx7Reh27H+qbFHIlJ8pBSSijS9BySjey4hkoSBc3D4dZhuD9G7UsmXtBtjcISs 0dIxAjYxtjCQlUd/A6Nszar4bccXVbjKE8eAKPN47r+n2YbmYGdkrW2y313LYPM0KG6 IrYdkwUAA6skXjXlCt3Fg23kHEHnclWDqyMdRTZQ= Received: from localhost (p54ad4bd4.dip0.t-ipconnect.de [84.173.75.212]) by mx.zohomail.com with SMTPS id 1592366323666846.6433823477129; Tue, 16 Jun 2020 20:58:43 -0700 (PDT) References: <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: Konstantin Kharlamov Cc: Stefan Kangas , Eli Zaretskii , emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers In-reply-to: <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Wed, 17 Jun 2020 05:58:40 +0200 Message-ID: <87mu52tkb3.fsf@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.53; envelope-from=rekado@elephly.net; helo=sender4-of-o53.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/16 23:36:35 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 03:58:54 -0000 Konstantin Kharlamov writes: > 5. As a contributor, when I stumble upon a bug I could fix in > software, first thing I usually do is go check it is not fixed in > latest code and that there's no pending merge/pull requests that seem > to fix that same thing. So, for example, I want to see pending > patchsets to python-mode, can I do that with Emacs > "bug-patch-tracker"? No, with debbugs.gnu.org you can either find > pending patchsets, or you can make a text search, but over everything: > bugs, patchsets, closed or not=E2=80=A6 For the Guix project I wrote Mumi[1], an alternative web frontend to Debbugs, which can be seen here: https://issues.guix.gnu.org The idea was to provide something that=E2=80=99s reminiscent of the Github experience without abandoning what=E2=80=99s great about the mail-based workflow. The official Debbugs web interface also allows you to filter by submissions with patches and by status, though it may not be easily discoverable how to do that. --=20 Ricardo [1]: https://git.elephly.net/software/mumi.git From MAILER-DAEMON Wed Jun 17 04:58:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlTuD-00019U-S3 for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 04:58:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33726) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTuB-00019I-QK for emacs-devel@gnu.org; Wed, 17 Jun 2020 04:58:47 -0400 Received: from forward100p.mail.yandex.net ([77.88.28.100]:37394) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlTu8-00013B-8n; Wed, 17 Jun 2020 04:58:47 -0400 Received: from forward101q.mail.yandex.net (forward101q.mail.yandex.net [IPv6:2a02:6b8:c0e:4b:0:640:4012:bb98]) by forward100p.mail.yandex.net (Yandex) with ESMTP id 2B34359827C1; Wed, 17 Jun 2020 11:58:38 +0300 (MSK) Received: from mxback3q.mail.yandex.net (mxback3q.mail.yandex.net [IPv6:2a02:6b8:c0e:39:0:640:4545:437c]) by forward101q.mail.yandex.net (Yandex) with ESMTP id 28378CF4000C; Wed, 17 Jun 2020 11:58:38 +0300 (MSK) Received: from vla5-e763f15c6769.qloud-c.yandex.net (vla5-e763f15c6769.qloud-c.yandex.net [2a02:6b8:c18:340b:0:640:e763:f15c]) by mxback3q.mail.yandex.net (mxback/Yandex) with ESMTP id Q87qb4W9W2-wc6mHba4; Wed, 17 Jun 2020 11:58:38 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592384318; bh=zkG5uE57FxybbD3277ifqm1/iygMBz40jlNKRsL+n5k=; h=In-Reply-To:Cc:To:From:Subject:References:Date:Message-ID; b=cWrAYE4Ze2QT/r1wakF+O0LHwOkQSW9T89JmsEQ9tUX+5DpbNRtynV/pcVHJ5AIN2 BduXBNcKS+gNNb2X9AiwSJzMnB0WP/hN7gyTbivhhRVU/Khkvl48P0pXkpFGOd/WdO e97LV8XrAtRILCFwRlZm3IK1mCmmh3Wz1GPCiOyM= Authentication-Results: mxback3q.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by vla5-e763f15c6769.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id 7TNHDtVqqK-wbkOq7YH; Wed, 17 Jun 2020 11:58:37 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <08c69856e75bda767adcdb43bc8d3ceed6849640.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Ricardo Wurmus Cc: Stefan Kangas , Eli Zaretskii , emacs-devel@gnu.org Date: Wed, 17 Jun 2020 11:58:37 +0300 In-Reply-To: <87mu52tkb3.fsf@elephly.net> References: <87imhw431x.fsf@yahoo.com> <87mu78huhx.fsf_-_@yahoo.com> <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <87mu52tkb3.fsf@elephly.net> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=77.88.28.100; envelope-from=hi-angel@yandex.ru; helo=forward100p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 04:58:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 08:58:48 -0000 On Wed, 2020-06-17 at 05:58 +0200, Ricardo Wurmus wrote: > Konstantin Kharlamov writes: > > > 5. As a contributor, when I stumble upon a bug I could fix in > > software, first thing I usually do is go check it is not fixed in > > latest code and that there's no pending merge/pull requests that seem > > to fix that same thing. So, for example, I want to see pending > > patchsets to python-mode, can I do that with Emacs > > "bug-patch-tracker"? No, with debbugs.gnu.org you can either find > > pending patchsets, or you can make a text search, but over everything: > > bugs, patchsets, closed or not… > > For the Guix project I wrote Mumi[1], an alternative web frontend to > Debbugs, which can be seen here: > > https://issues.guix.gnu.org > > The idea was to provide something that’s reminiscent of the Github > experience without abandoning what’s great about the mail-based > workflow. Cool, it looks very nice! > The official Debbugs web interface also allows you to filter by > submissions with patches and by status, though it may not be easily > discoverable how to do that. Oh, right, I stand corrected: the "advanced text search" has also a button called "add attribute", where you can type Bug Title → Includes String → "[PATCH]" From MAILER-DAEMON Wed Jun 17 16:34:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlelM-0002BS-Rv for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 16:34:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57664) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlelJ-0002Aa-3n for emacs-devel@gnu.org; Wed, 17 Jun 2020 16:34:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51418) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlelI-0003k5-R4 for emacs-devel@gnu.org; Wed, 17 Jun 2020 16:34:20 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:43575) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jlelI-00039i-B0 for emacs-devel@gnu.org; Wed, 17 Jun 2020 16:34:20 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id F12AB27C0054 for ; Wed, 17 Jun 2020 16:34:19 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Wed, 17 Jun 2020 16:34:19 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejvddgudehtdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkfgfgggtsehttdertd dtredtnecuhfhrohhmpefvrghsshhilhhoucfjohhrnhcuoehtshguhhesghhnuhdrohhr gheqnecuggftrfgrthhtvghrnheptedvgfefvdfhieffueelvddvffduvdethfejkeehle fhheduteehleetjeettdehnecukfhppeelfedrvdefiedrudefhedrleejnecuvehluhhs thgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhrnhdomhgvsh hmthhprghuthhhphgvrhhsohhnrghlihhthidqkeeijeefkeejkeegqdeifeehvdelkedq thhsughhpeepghhnuhdrohhrghesfhgrshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id 1F188328005D for ; Wed, 17 Jun 2020 16:34:18 -0400 (EDT) From: Tassilo Horn To: emacs-devel@gnu.org Subject: Bug-reference auto-configuration Mail-Followup-To: emacs-devel@gnu.org Date: Wed, 17 Jun 2020 22:34:17 +0200 Message-ID: <87d05xxwhi.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 20:34:22 -0000 Hi all, I've just pushed a feature for bug-reference.el. When `bug-reference-mode' or `bug-reference-prog-mode' is activated and after running its hook still no `bug-reference-url-format' is set, it'll try to guess suitable values. Currently, there are 2 such guessing function in place: - `bug-reference-try-setup-from-vc' tries to guess the right values from the URL of the file's version control repository. - Savannah git projects get our GNU debbugs URL. - GitHub and Gitlab get their issue trackers set with standard #18 bug references (and !17 merge requests for Gitlab) and also cross-project references such as namespace/project#19 are supported. - It is easy to add new rules by adding entries to `bug-reference-setup-from-vc-alist'. - `bug-reference-try-setup-from-gnus' tries to guess the right values in Gnus summary and article buffers by matching against the group name and mail header values From, To, Cc, and List-ID. - Currently, there's just one rule that should set the GNU debbugs URL in any Emacs, Gnus, AUCTeX, or Tramp related group or article. - Again, it's easy to add new rules by adding entries to `bug-reference-setup-from-mail-alist'. As the name suggests, that variable is not Gnus-related but I hope someone volunteers to add similar setup functions for rmail and other emacs mail clients which can use that variable, too. Basically, the only MUA-specific thing that needs to be done is to somehow get the mail-folder/newsgroup name and/or the interesting mail header values From, To, Cc, and List-ID and call `bug-reference--maybe-setup-from-mail'. I'd welcome some more testing. You just have to enable `bug-reference-mode' or `bug-reference-prog-mode' and cross fingers, e.g., ;; Enable in prog mode buffers. (add-hook 'prog-mode-hook #'bug-reference-prog-mode) and (for Gnus users) ;; Enable in Gnus summary and article buffers. (add-hook 'gnus-summary-mode-hook #'bug-reference-mode) (add-hook 'gnus-article-mode-hook #'bug-reference-mode) Bye, Tassilo From MAILER-DAEMON Wed Jun 17 17:37:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlfkk-0000QS-8n for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 17:37:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlfkh-0000OB-TA for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:37:47 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:54619) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlfkf-0005zw-F2 for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:37:47 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 2D1BF1BF203; Wed, 17 Jun 2020 21:37:40 +0000 (UTC) From: Juri Linkov To: Stephen Leake Cc: emacs-devel Subject: Re: RFC: Automatic setup for bug-reference-mode Organization: LINKOV.NET References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> Date: Thu, 18 Jun 2020 00:35:51 +0300 In-Reply-To: <87pna0mxxw.fsf@gnu.org> (Tassilo Horn's message of "Mon, 15 Jun 2020 12:21:31 +0200") Message-ID: <87ftatcr48.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 17:37:42 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 21:37:48 -0000 >>> (defun vc-git-repository-url (file-or-dir) >>> (let ((default-directory (vc-git-root file-or-dir))) >>> (with-temp-buffer >>> (vc-git-command (current-buffer) 0 nil "remote" "get-url" "origin") >>> (buffer-substring-no-properties (point-min) (1- (point-max)))))) >>> >>> where I explicitly name the remote "origin" (which, I know, doesn't need >>> to exist but still works in 99% of all cases). >> >> I'm in the 1%; I have git repositories that don't have 'origin'; they >> have 'savannah'. I migrated from monotone, where the remotes have real >> names. >> >> So some method of overriding 'origin' would be appreciated. > > It already has on master, i.e., you can pass in an optional remote-name. Typing 'C-x v d' (vc-dir) on a repository without 'origin' raises the error "Failed (status 128): git --no-pager remote get-url ." From MAILER-DAEMON Wed Jun 17 17:52:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlfz5-0002Hl-2Y for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 17:52:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlfz2-0002D9-Vg for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:52:37 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:42663) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlfz0-0000Cx-63 for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:52:36 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 9718020008; Wed, 17 Jun 2020 21:52:28 +0000 (UTC) From: Juri Linkov To: Ergus Cc: Dmitry Gutov , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> Date: Thu, 18 Jun 2020 00:50:12 +0300 In-Reply-To: <20200611132234.nbluayofcxh23cwg@ergus> (Ergus's message of "Thu, 11 Jun 2020 15:22:34 +0200") Message-ID: <877dw5cqgb.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.200; envelope-from=juri@linkov.net; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 17:52:30 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 21:52:37 -0000 > So for the moment I think that vertical layout could be enough right? Actually the hardest question is to decide what keys to use to navigate completions in the vertical layout. It would be natural to use arrow keys and M-p/n, but there keys are used for history navigation in the minibuffer. From MAILER-DAEMON Wed Jun 17 17:57:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlg49-0003YE-L1 for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 17:57:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52116) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlg46-0003WV-Pk for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:57:50 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:36422) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlg43-0000tm-SQ for emacs-devel@gnu.org; Wed, 17 Jun 2020 17:57:49 -0400 Received: by mail-wr1-x42c.google.com with SMTP id q11so3980424wrp.3 for ; Wed, 17 Jun 2020 14:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=mg0qp2i9PWa+CeBQS147SSd8aAH8rMfz7cQVE25mtVs=; b=pz6Y7NkVtd6nycskRNLCxzF0cEo4Qa6irdCtp+Syw0YO30QEGNKzIvIdNCHkgXTSTi dFYLuIvyjlKB6PNrodD43e5XPfSOgJd30cXoyEjzLbqa61BIpBkQRb8CaWOBok/RB+8e JWyiR69pmx06gZNrDU3cwyZqKeGxE/ddoVWV3s+qFFNiiB3hfc8ehe6ewXmY5vY3pl4h TxTllEo4QkLAHIN0WhnZxenLiW7q4ab9VZkpwxL9n0EKJCK2eC6z+XhxkMeLvVSIpqTr djFFVCus/mlZRkyZMcdEhmM2XLTqKDBpOF+xFsUUp9JKK/gLuYTOTzMNFRbdDnlyK81w 0lhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=mg0qp2i9PWa+CeBQS147SSd8aAH8rMfz7cQVE25mtVs=; b=TrKuzqz86BVpvNtKGyF78669Jyug56U3szLmj3+T6UFTEhXPWfE6P8ZDarZFXJHq68 L47ugltRaVgkIymQTuz011fVEAg5U2ZHDFR3ZAE06RIUkiVMD48eHhmVT4ELtdHr4wyj Rg/AppxHjHq9QEguV/8xg/njCuwKbD69VHsOiKgfckYl3QjF3UwLf24ZeWoCDJPk/J4W 90kUVkf+YE/mQMncuwAH/FypUwQ1AR74dEbuAD2vVMITNRvZRJVjbvSCHC6Oa318Ed1p ZzCppFbsp5kS0/Umuj7/5Xn+5t6mJed5G6qGpOAy+87bvv6j0d2ETK9seXJ1sdSwQj8a iXLg== X-Gm-Message-State: AOAM532qG9RZJbmVtuamXF4Jq53/r3x7CI1gg7ku7oP3CnEoXpowDZBW mQEk2GI4Ed6Oth3pnfSEuQJLiL33 X-Google-Smtp-Source: ABdhPJzxuWFeUI9iG+QqMI2AmhYvTIEErovpnzc328w4CAhazgpcmADGP8XXqGYuYyGf5Uc/hXApGQ== X-Received: by 2002:a5d:52c6:: with SMTP id r6mr1293910wrv.74.1592431064519; Wed, 17 Jun 2020 14:57:44 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id 89sm1018548wrg.56.2020.06.17.14.57.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2020 14:57:43 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode To: Juri Linkov , Ergus Cc: "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> Date: Thu, 18 Jun 2020 00:57:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <877dw5cqgb.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 21:57:51 -0000 On 18.06.2020 00:50, Juri Linkov wrote: > Actually the hardest question is to decide what keys to use > to navigate completions in the vertical layout. It would be > natural to use arrow keys and M-p/n, but there keys are used > for history navigation in the minibuffer. I think C-n/P-n is what users would expect. See Ivy, Helm, etc. Arrow keys, too. From MAILER-DAEMON Wed Jun 17 18:10:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgGP-0002Ht-OX for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:10:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgGN-0002Fm-Sx for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:10:31 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:39908) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlgGM-0003b3-4k for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:10:31 -0400 Received: by mail-wr1-x42c.google.com with SMTP id t18so3994241wru.6 for ; Wed, 17 Jun 2020 15:10:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=xPVwLHOLolBCsQ06r8qtFokpc1NSRLOAhbVcSE6Mvok=; b=ONfb9En1YPzE38P36iZ8EFnmX05cJzFxI4hC9WmAOg8eTVZqQ2wF9ACgDRga5G/RFr NylCeLpP9hEIoBzKxYMTatz7TAtqGvs1y/0hjue48ZtixeC1OypAmVdNkhWmg8/+l1yK H/t7+4wNBjDwQ8HXDvPbl1YZ3u4fQnHrl0jnktkY2gV4aYRC4WYXrhNBH1p0GdpJaBJt jGV8jZAlL94NeHPb9jfYT6ZZFbbAaraROIhteaCv7jj/GFeWiefg9K7nRIcDOSjjx6YE AQD9opCke/wE2Crc/47VcogbXUl3y7Wk4X/I1U7ZgRNIjABlTPKoDYhLHAg1hv5jb2ZM zW5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=xPVwLHOLolBCsQ06r8qtFokpc1NSRLOAhbVcSE6Mvok=; b=k0omugEMYXsRHMou6T8ta3MZnvDKgjdKh6/49962GvgDTMFgAKAbyhFHCstfTR0sGp HBkzoZDogO7/zgvF+H2h/L2bvF+vOkhcA19KKLpmnrWnzZrGOa5LokrMpL7thobkZop+ 4Mwp9W4jd/BwCNYgfJ9yNpORlvBeeoIeKLu1Wyz4hzVMXw5jjAiPRSuYhf6AW+mzGN/L arplRBsFM41LEr5iI7V2klBfyK2GOMDgirElSawKCknjnkSUokLYNgNGd6hI20WzeBfo MvMx06Xy3AhJVK8uJjzHDZDRFB9TrsQ2htrUzUekcx3mPbWzHPhpX0REOZrkvBQVsJny DFLw== X-Gm-Message-State: AOAM53331CFAp/dzATPmv5r0YO4yg67jUFwQyQQtla581jkli10RfQZU ZLoIPDrvLsONwSWY5pi8A/YuSn5i X-Google-Smtp-Source: ABdhPJypkgVxkNxcy3VBm3d7nNnmalutpf4osONDMKjlkWTS8c7jt5nJZl7EffHj5qfk162MSBlPgQ== X-Received: by 2002:adf:e692:: with SMTP id r18mr1275431wrm.192.1592431828133; Wed, 17 Jun 2020 15:10:28 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id o10sm1060771wrj.37.2020.06.17.15.10.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2020 15:10:27 -0700 (PDT) Sender: DG Subject: Re: RFC: Automatic setup for bug-reference-mode To: Juri Linkov , Stephen Leake Cc: emacs-devel References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> <87ftatcr48.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: Date: Thu, 18 Jun 2020 01:10:26 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87ftatcr48.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:10:32 -0000 On 18.06.2020 00:35, Juri Linkov wrote: > Typing 'C-x v d' (vc-dir) on a repository without 'origin' > raises the error "Failed (status 128): git --no-pager remote get-url ." Also noticed that (when the current branch has no default remote). Just fixed in master. From MAILER-DAEMON Wed Jun 17 18:17:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgNQ-0005DX-EH for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:17:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgNO-0005At-HQ for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:17:46 -0400 Received: from mail-il1-x135.google.com ([2607:f8b0:4864:20::135]:34459) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlgNM-0004v1-W5 for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:17:46 -0400 Received: by mail-il1-x135.google.com with SMTP id x18so3917665ilp.1 for ; Wed, 17 Jun 2020 15:17:44 -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 :cc:content-transfer-encoding; bh=yeZhKPMeLL8qgLst0nJzVPpS6QovsSDap4pkI5qUOMI=; b=qNcdQwkNHqFFy9SE7EjcgjmqpDlVCCiRHKpqav6q2Uu9wrwNcCp0FAkpGfkWOAKrI8 Ioq5G2IvXu/GbWyC5cPLwIJVjhyDHwC9FMpz85mZJR4JjXOYzrhEk6ilqad52rrog8ru 4FW+ikgtZytW8D0cdbg/6GxNO7sZnIpeSNeKPQcmpfFaKUQ2IXxF8nEm7EvBPoyUqrQZ cnE7pWqg4Zbf7gLo+wOi2Siq/fSY5vnB6xo6JUVKKJyac1bJJDl/SbdSrvpQOQqdXpGe OssisYFZWk0yc0J/Y6oEnPl3f1SSfIEIfM82E6keuUROu5PBwLOl4/BQnIjmAs5loePR VsOA== 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:cc:content-transfer-encoding; bh=yeZhKPMeLL8qgLst0nJzVPpS6QovsSDap4pkI5qUOMI=; b=g8lElrGCm3fF1o74YDk+cNgXLqf3KNyRmlHuAx2bhNZVASbVlWrhsbH4zaIvCADYAw bWUGfEKySxOPStgiMFIfQ2V1IuG3LxEr9T0gAXAK8KsVWNOkU27D5xp7LLEt8ZW5crH6 RlD6IXjRHYeA2RKjTbYcO9NLO0d9PHcqS5ShdWRBi0N9VPsUMkpUFiPFJYuGHQRBVPde Zm/5cO9+FzM8tTW6PMIUb08+Xlsfws36RqSGOGaxVZ7KvNMDQkd4TsqM7ulcFEVf9QGM BtgSmwQ1U9BBPADQqihA/UC5xfpIrUGIqQ6ZXwdDHroRB6WjKUdeaELhqe8dqSdkrViK 303A== X-Gm-Message-State: AOAM531lRBp/hGYQ/MZccRQDVayGJUa2xrfjh34zT1sJ/zOEsIRQszuX mC6IRhN8w8yl448HWX0IT7pudWSM22kq7SGKZeQ= X-Google-Smtp-Source: ABdhPJwWYodGgll0VMiKiUcIrb9ULFuI1BE9v3M7vZ/Rr9sT52EMsGnUMpF4Z8vC0sX8qJquKxdraWRqzErPKZEAiu8= X-Received: by 2002:a05:6e02:10e:: with SMTP id t14mr1027326ilm.97.1592432263946; Wed, 17 Jun 2020 15:17:43 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> In-Reply-To: <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Wed, 17 Jun 2020 23:17:32 +0100 Message-ID: Subject: Re: vertical fido-mode To: Dmitry Gutov Cc: Juri Linkov , Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::135; envelope-from=joaotavora@gmail.com; helo=mail-il1-x135.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:17:46 -0000 On Wed, Jun 17, 2020 at 11:09 PM Dmitry Gutov wrote: > > On 18.06.2020 00:50, Juri Linkov wrote: > > Actually the hardest question is to decide what keys to use > > to navigate completions in the vertical layout. It would be > > natural to use arrow keys and M-p/n, but there keys are used > > for history navigation in the minibuffer. > > I think C-n/P-n is what users would expect. See Ivy, Helm, etc. > > Arrow keys, too. But those already have meaning in navigating history. So before a potentially compatibility-breaking decision is made, we must understand exactly what we're gaining and losing. Contrary to what I believed C-n and C-p should be fine, though. I personally want to never lose C-s/C-r because that's what Ido uses. In fact, I hope this discussion (of which I've missed a few mails) is now concentrating on adding this to Icomplete, not Fido specifically. Jo=C3=A3o From MAILER-DAEMON Wed Jun 17 18:30:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgZc-00047T-OW for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:30:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33316) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgZb-00047J-GL for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:30:23 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:36077) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgZY-0006gi-T3 for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:30:23 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 5EAF340008; Wed, 17 Jun 2020 22:30:16 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> Date: Thu, 18 Jun 2020 01:22:32 +0300 In-Reply-To: <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> (Dmitry Gutov's message of "Thu, 18 Jun 2020 00:57:42 +0300") Message-ID: <877dw5badz.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.194; envelope-from=juri@linkov.net; helo=relay2-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:30:18 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:30:23 -0000 >> Actually the hardest question is to decide what keys to use >> to navigate completions in the vertical layout. It would be >> natural to use arrow keys and M-p/n, but there keys are used >> for history navigation in the minibuffer. > > I think C-n/P-n is what users would expect. See Ivy, Helm, etc. > > Arrow keys, too. I can't believe - these keys are so handy for history navigation. Or maybe it's possible to navigate history using completion lists? Then history can be navigated using completion keys. From MAILER-DAEMON Wed Jun 17 18:31:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgac-0005CJ-QL for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:31:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgab-0005Az-S6 for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:31:25 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:51966) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgaZ-0006xE-Qf for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:31:25 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMSTc6097438; Wed, 17 Jun 2020 22:31:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=8OzOPt1YbaLR2UBWIou0lrs8324BWW4p68XchLgRoyQ=; b=pl8aEtIkp0SL1Xo7fT1gLNKGpzEIHjeh20QQbhvVIVDqmFbb6ROUPBx7eNHZVoBRRoR/ RHG4D8oURAA9IPtrZfZR1oFsv94DoosTFQUR1CdBjDnYjqSXdQYCaRW4nZ2XWInyEsDL 6V6kBXUgSLFx5o2d+y35VU/0w8tnuiV9fPXsyITMu1gRb/6KpQwoVGa4YI637LZ2YK+d Yqa7hqeZ/TanJaz0facDkeZNK4GAlnJxWnjmJoDjyhPQKJOBGNRDmHVXiBjI4eZpnk5o 6THwGG451ObJo/Iv+WaZLc2lYwLAz9SPAsdb6D3QYm3R4VpWx9JL6jm0VDo2aT4QSr2C /w== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31q65ywwan-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jun 2020 22:31:16 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMTCCr010733; Wed, 17 Jun 2020 22:31:15 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 31q66q9cag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jun 2020 22:31:15 +0000 Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05HMVAIF023771; Wed, 17 Jun 2020 22:31:10 GMT MIME-Version: 1.0 Message-ID: <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> Date: Wed, 17 Jun 2020 15:31:09 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Dmitry Gutov Cc: Ergus , emacs-devel@gnu.org, monnier@iro.umontreal.ca, Juri Linkov Subject: RE: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 bulkscore=0 adultscore=0 phishscore=0 suspectscore=18 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170167 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 suspectscore=18 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170167 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:31:20 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:31:26 -0000 > Contrary to what I believed C-n and C-p should be fine, > though. I personally want to never lose C-s/C-r because > that's what Ido uses. >=20 > In fact, I hope this discussion (of which I've missed a > few mails) is now concentrating on adding this to Icomplete, > not Fido specifically. Please don't add any bindings for C-n/C-p to any standard minibuffer keymaps. If you localize the bindings, so they apply only to IDO, FIDO, Icomplete, or whatever, e.g. `ido-completion-map', then OK - I don't care about the bindings for those. But the minibuffer is much more general than such uses of it. In general it's an editing buffer, and in particular it can have multiple lines. In the standard minibuffer keymaps, C-n/C-p need to keep their usual bindings of `(next/previous)-line', please. From MAILER-DAEMON Wed Jun 17 18:53:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgwH-0004cj-0y for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:53:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgwE-0004aw-Op for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:53:46 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:32970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlgvD-0002ct-TD for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:52:44 -0400 Received: by mail-wr1-x42c.google.com with SMTP id l11so4091284wru.0 for ; Wed, 17 Jun 2020 15:52:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=3NSIU2A/lOi46fIM4lgSJkV+ag9F4fFz/PQFT2VpcBs=; b=KosWcq7mHMJDZvzzBsa/TAhxGOsw/PyNxs9T5B2IRMgjJAhlAa7IDjzptunTzuiqoQ +eLsbmWjIXJKhXt5D8xUv5gQ+My9XlW1o/qxqthRJ+m3Ee6uowM/qoR8CJaQgL+ZdjY4 pLPCLJLL/6G6Pr+PT40Bz1SVvj0ctDHFuy2WKz9Ee1yGB17sTg9HZw38Ja7xQ+HTer4P ThPrErrTwUWUxXcqKNaHsEJz2BB68NYgZMLGUDovKSkQmydwsg7v8mmDe1RSqBCz6FT0 gIR0wqtQeq6MNgCxXPzrUhqm0V1r/D54dUdo9DtjyYLUps0uU+CLZJn99HOpprdWT9Bh FcEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=3NSIU2A/lOi46fIM4lgSJkV+ag9F4fFz/PQFT2VpcBs=; b=QnVaoxvH5QD/zmZUYs9FsUAop70hbrMTMyRxcTo6TMvDumWYeIfc+3cu+ujvjvTPuG p5ZOB01iIb6j3w6I/n0igpAcyOj6hSiu9B9BenaalanvmVxZx73VHa6MF4HA/MPT0VMG KCgTN51EkMNDdjU1HcXP5mSeyaI04/fHBj4QNdijEJPrb5McbCx6oW1iRU7GaXP0Nn5f YJfWeWZpnzhky3weilx5amHTQ0co9CJpVOkcKW4rlabdbVBO8xORyqAoIskwaefWc3VE 2813a5Jnn3WyrEG4Ilz454M0sVBtIsVXQGbt5xYRZ3NsiY2yNZzG1gbCB06Be97LLlEa DI8w== X-Gm-Message-State: AOAM533pOl5WGH5KibU7T3S47RLiseOC7XyEAHAJxBZil8zSab2xfBEg FXjP5Iq9tXZJVq6dSquH53zGg69i X-Google-Smtp-Source: ABdhPJwWiVPHI2WzAksTG1cu3rVZyT6kETAH89VOIVQARlj6V94a8vCqWDfh2qbxhspVL1qDBoagpA== X-Received: by 2002:a05:6000:10d2:: with SMTP id b18mr1439810wrx.366.1592434362154; Wed, 17 Jun 2020 15:52:42 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id t129sm1305926wmf.41.2020.06.17.15.52.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2020 15:52:41 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode To: Juri Linkov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> From: Dmitry Gutov Message-ID: <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> Date: Thu, 18 Jun 2020 01:52:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <877dw5badz.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:53:46 -0000 On 18.06.2020 01:22, Juri Linkov wrote: > I can't believe - these keys are so handy for history navigation. M-n/M-p would still be there. As for arrow keys, I'd designate C- and C- for this purpose. > Or maybe it's possible to navigate history using completion lists? I'm not sure how that would look. From MAILER-DAEMON Wed Jun 17 18:53:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgwN-0004oV-UN for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:53:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgwM-0004kh-5M for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:53:54 -0400 Received: from mail-io1-xd2d.google.com ([2607:f8b0:4864:20::d2d]:37687) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlgjz-00011N-W2 for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:41:09 -0400 Received: by mail-io1-xd2d.google.com with SMTP id r2so4888980ioo.4 for ; Wed, 17 Jun 2020 15:41:07 -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 :cc:content-transfer-encoding; bh=FC6TFfnwuut36Rf2f0vLqH0/Ljh2KB9PHxkw/CVWS1E=; b=XBWzMY5z+Qqp6XAv3vPCKz0W0L3zcL7DsEOeg01VbYooBCCQlKy6tFRhgY6Og2WFA/ VkmBsckeSw7aXiAhny1dNVchzkSnbhCpcVtZrgLBSl0esVlMoZwhC+hRStxOhHD67qO6 ZDVaRbigRDEEG7tXYnVFqjuRMbvXMC7oVelqGt1PgyGULQpR6/n5KQEX+z45Qnu0nOU9 NCUTgH4MoA8lMimWr1x1x2qPP/QbwAtSL3L+RVdDARoK6ts0mxkpOyVDVQbbeArRWrGS WUCrmlUnoMdG+p/Asqix70LwR5QHG5tyTp2Jxd8eOYpKGGdg7LwKDBVkOhI5w6NYSCUV 7HSA== 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:cc:content-transfer-encoding; bh=FC6TFfnwuut36Rf2f0vLqH0/Ljh2KB9PHxkw/CVWS1E=; b=VooFFtqF3Hue08YTX+bWCp/2f08uFy6+Ypt+OoFem6XBUXph75hiFo+1mKCNaha6Kr BjavHLRs/I24kZZQrMATeNV5LYGfDhgieRqpQysEtutko5LZxNMYNBqTHsJojA502QZG u+hgv4ujj3Ywg9/bVCwgVHZd19SAupOwoCMMWM9fjKC85vUpkSKpsAWPQQQkFp6EFxP6 5rRlgVGyMr6VW69u+jSf/9DJGGaYcyGOBcd9f3rveeHYq4VioOpv2UPCmQY7EGepywcy a0TIDICsu2D0dHnuMIC3yZvURJK/15hl2v54uyqxLwpaawdEwSNiumCfnNk0Q17eFRxS BxUQ== X-Gm-Message-State: AOAM533CnCL65Q1ii6W3inTMAEhxfFdzxuWZPMMjXkfRs9jhkmkHJqLo MvTF6TfxAzWy6Zoh3yQbvVIUItRRuYP5CGl1MkY= X-Google-Smtp-Source: ABdhPJxi785TU7s/SThX4iOs7eHJsXD6R1W0r71oQ6gJAKaSEvAB5ah6plt7jQ/jYqbImb9eG2oMqnabGLz+6zFr0a4= X-Received: by 2002:a05:6638:35d:: with SMTP id x29mr1547494jap.71.1592433666728; Wed, 17 Jun 2020 15:41:06 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> In-Reply-To: <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Wed, 17 Jun 2020 23:40:51 +0100 Message-ID: Subject: Re: vertical fido-mode To: Drew Adams Cc: Dmitry Gutov , Ergus , emacs-devel , Stefan Monnier , Juri Linkov Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d2d; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:53:54 -0000 On Wed, Jun 17, 2020 at 11:31 PM Drew Adams wrote: > > > Contrary to what I believed C-n and C-p should be fine, > > though. I personally want to never lose C-s/C-r because > > that's what Ido uses. > > > > In fact, I hope this discussion (of which I've missed a > > few mails) is now concentrating on adding this to Icomplete, > > not Fido specifically. > > Please don't add any bindings for C-n/C-p to any > standard minibuffer keymaps. If you localize the > bindings, so they apply only to IDO, FIDO, Icomplete, > or whatever, e.g. `ido-completion-map', then OK - > I don't care about the bindings for those. Noted. I think that is the plan, so you needn't worry much. But anyway, how often do you come across cases of multi-line completing-read? At any rate, what's being proposed is a multi-line minibuffer, if I understand correctly. Jo=C3=A3o From MAILER-DAEMON Wed Jun 17 18:55:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgxp-0006zB-3t for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:55:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38708) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgxl-0006xm-IC for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:55:21 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:36129) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgxi-00032U-G5 for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:55:21 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id CA6FFC0003; Wed, 17 Jun 2020 22:55:13 +0000 (UTC) From: Juri Linkov To: Drew Adams Cc: =?iso-8859-1?Q?Jo=E3o_T=E1vora?= , Dmitry Gutov , Ergus , emacs-devel@gnu.org, monnier@iro.umontreal.ca Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> Date: Thu, 18 Jun 2020 01:52:55 +0300 In-Reply-To: <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> (Drew Adams's message of "Wed, 17 Jun 2020 15:31:09 -0700 (PDT)") Message-ID: <87bllh9uew.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.198; envelope-from=juri@linkov.net; helo=relay6-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 17:25:41 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, 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 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:55:21 -0000 >> Contrary to what I believed C-n and C-p should be fine, >> though. I personally want to never lose C-s/C-r because >> that's what Ido uses. > > Please don't add any bindings for C-n/C-p to any > standard minibuffer keymaps. What keys would be better for vertical completions navigation? Maybe M-up and M-down like in web browsers? From MAILER-DAEMON Wed Jun 17 18:57:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlgzh-0008DH-Ml for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:57:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlgzg-0008Cu-KI for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:57:20 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:33019) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlgze-0003YJ-Pe for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:57:20 -0400 Received: by mail-wm1-x330.google.com with SMTP id j198so5424336wmj.0 for ; Wed, 17 Jun 2020 15:57:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=2hFel+H4K+EUxTv9JnlD+F6hDqH1xik2m7N8MPJcxS0=; b=u/wC9RJ68QTVr50QbDWlKv6tsyKV+elfkqPzUmZ91bR1NI56QrFynPv31yBqUoTQFG mf5YEZfp5qallG4tpAKISvS8WX6484E0gwPS7Gf0HYQgoWwPVqMmd5HYab5sVyc5wCz6 ZBWaq3yNq2uWGQCgoZRiMM5NZRA8m2VaC3r7U3D9ZqqaFDwyREh8yOY91HwfFot4RqhO MOGVnmeYjUQB0U9LanY+617aeG8CC5qU68JajB2syC2kvxs2WzjF62uG1ZwGg9mY4I0q e4aGEepp6QfQHvnO9ySi7eoV82UdgztNZHBtAgTmaJ9rNHqRe0gUGReEiPlpyINcfia1 ozhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:cc:references:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=2hFel+H4K+EUxTv9JnlD+F6hDqH1xik2m7N8MPJcxS0=; b=hllUw79oNUIuCrwlErSWsktADhdbBKtGDIaB1r/xHRK+3oEzdO/b3eyMSPj9WXSmpC coO1e6fyxYpX1OIK5WeAgMvagsbxTZFsi/r/xo2NS1kusPzSaXlzpPBVLyfypdWqHZHa nlJlUz5svxWNnZwVgJmXSuIMJPsUZ3d4C04c2NeOzaByrM07Pcj6im+8agdsGfCIUmfN T+dL96py0Pk0OhdYkZ5vA7vd/La4fL6eT3THPLd2Umv2ihDd0sBHrhBE2+IGV5bl6SVW kDetpMHvIT+D7SwyG8J4H3yqaJ8xDb44Ms84uF4r/5TmXgiV+BldkSeiRPZe57RztBk9 1Uvg== X-Gm-Message-State: AOAM530uAFozqA7RP3RYJeO5j6L7lfXwoWV3AfTGz6rrK4TW8H5Iz/o/ ZJ+4WyiExDq6oYswAeR0YG2RlIxQ X-Google-Smtp-Source: ABdhPJy3Xf5QNjIZaFEnMJSegTIjXwfj9jR0JxO1Hgt2XysraZM66y4cfnYN1JuyWdj6VsraEKgA9w== X-Received: by 2002:a1c:8107:: with SMTP id c7mr965180wmd.20.1592434636967; Wed, 17 Jun 2020 15:57:16 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a124sm1233044wmh.4.2020.06.17.15.57.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2020 15:57:16 -0700 (PDT) Sender: DG Subject: Re: vertical fido-mode From: Dmitry Gutov To: Juri Linkov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> Message-ID: <80ecb748-4c26-0455-2e2d-02c42ba73d15@yandex.ru> Date: Thu, 18 Jun 2020 01:57:15 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=raaahh@gmail.com; helo=mail-wm1-x330.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:57:20 -0000 On 18.06.2020 01:52, Dmitry Gutov wrote: > On 18.06.2020 01:22, Juri Linkov wrote: >> I can't believe - these keys are so handy for history navigation. > > M-n/M-p would still be there. > > As for arrow keys, I'd designate C- and C- for this purpose. Just like in M-x shell and M-x eshell. From MAILER-DAEMON Wed Jun 17 18:58:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlh0z-0001L5-9g for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 18:58:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlh0u-00019V-HA for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:58:38 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:36856) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlh0s-0003jM-DL for emacs-devel@gnu.org; Wed, 17 Jun 2020 18:58:35 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMrenA168593; Wed, 17 Jun 2020 22:58:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=DbHFlYgeIwfXlUMebEyUPwBNYzxNHd/9vEhNCD500J8=; b=cyM2awBeptGA1dPdD0qQ8ZnVWj/HBzHQrVsR9GcGxDGS29fiIqVsM/XjBHWjfar6cf+7 62DVEDxJMGx2m7zJLG7FYCvDdiWuXTyVMHfVagbpgf3wPE3ysxUEjkjCRgvcEzXM7Yal ds9qbpa24W/kwsr3CtKJm9orzNSib0crEt04aSErFDG/nWgS6Yz0HupAon4DmQyfqDiL +nyaG2bnEvwb8cGqM15OrlWZlTckkavJuK0CaL8vJmpp0B/tEfOGpo7cgYU1W5iE2Muj 4FFjibJUiIvevjnFniu/gqonEhciz1Y8XcI2lzV6O2oTo48Ygik/hjAsaRBAMbkT70Zs tQ== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 31qeckvjff-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jun 2020 22:58:30 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMr9B6144901; Wed, 17 Jun 2020 22:56:30 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3030.oracle.com with ESMTP id 31q66nt1mb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jun 2020 22:56:30 +0000 Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05HMuT7h016132; Wed, 17 Jun 2020 22:56:29 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 17 Jun 2020 15:56:28 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Dmitry Gutov , Ergus , emacs-devel , Stefan Monnier , Juri Linkov Subject: RE: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 phishscore=0 mlxscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 suspectscore=18 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170171 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 cotscore=-2147483648 malwarescore=0 clxscore=1015 adultscore=0 suspectscore=18 spamscore=0 lowpriorityscore=0 mlxlogscore=999 priorityscore=1501 bulkscore=0 phishscore=0 mlxscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170171 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:58:33 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 22:58:39 -0000 > > Please don't add any bindings for C-n/C-p to any > > standard minibuffer keymaps. If you localize the > > bindings, so they apply only to IDO, FIDO, Icomplete, > > or whatever, e.g. `ido-completion-map', then OK - > > I don't care about the bindings for those. >=20 > Noted. I think that is the plan, so you needn't worry much. > But anyway, how often do you come across cases of > multi-line completing-read? Often. For one thing, some common uses of completion in Icicles allow for "multi-completion", which means providing any of a number of possible subpatterns to match. Those are separated by a separator string, whose default value is "^G^J", that is, the two chars Control-G and Control J. Those chars are unlikely to be used in most patterns. (That string is inserted by hitting `C-M-j'.) And the ^J is a newline char, of course. For another thing, it's often the case that completion candidates in Icicles are multiline. Because you can use various kinds of pattern matching, you can easily match against multiple lines. And you can cycle among candidates (which fills the minibuffer with a candidate, which can be multiline). Whenever you have multiline text in the minibuffer, you can want to edit that as a pattern to match, and C-n/C-p are a good way to move among lines. > At any rate, what's being proposed is a multi-line > minibuffer, if I understand correctly. I haven't been following this thread. But if the content of the minibuffer can/will be multiline, then I should think that you would want to keep C-n/C-p with their usual bindings. From MAILER-DAEMON Wed Jun 17 19:01:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlh3H-00038G-5t for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 19:01:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlh3F-00037n-Cz for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:01:01 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:40682) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlh3D-0004J5-PR for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:01:01 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMqmaL145048; Wed, 17 Jun 2020 23:00:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=Of0gALKA6ss0CxusK8Nx8FwISiiVwuymDr9GfCgsIA0=; b=PPXqZx+2NEqMUqKuQYBwVcWZF1LyRf1XvC5Kwie+MWgR3bjc63tIyHGhusGVYbD+zF95 kjNTV7sOANzqDyfPo+TaJv00iyCVy9etAXqLExjC7Qi6F7Js3UX+TK44/1gm7xoQMrtb j1VFUo4KdHEaH7iQF78K1RoLKzZaoz2isH6jLf5l+GaazDy4nHY6KUknZkg0wNvuLFAl a04BQ0LjUfQ2n27coP3bP7awus/ujIPDIuUH+JAIeYhTtHdHL6tVMris3svAkLz6pkZg qV1ZX1KNO6TOJBs3pkkzc9B6EoMlSA8cj0JSoGDOdRFJGMoUGOgJ2TOu9LHU4LfSJk8j Lw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31q65ywyw3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jun 2020 23:00:56 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HMrGE0071460; Wed, 17 Jun 2020 22:58:55 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31q66qb4vs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jun 2020 22:58:55 +0000 Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05HMwtmD017258; Wed, 17 Jun 2020 22:58:55 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 17 Jun 2020 15:58:54 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Dmitry Gutov , Juri Linkov Cc: Ergus , monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: RE: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> <80ecb748-4c26-0455-2e2d-02c42ba73d15@yandex.ru> In-Reply-To: <80ecb748-4c26-0455-2e2d-02c42ba73d15@yandex.ru> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 bulkscore=0 adultscore=0 phishscore=0 suspectscore=18 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170171 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 suspectscore=18 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170171 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:31:20 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 23:01:01 -0000 > > As for arrow keys, I'd designate C- and C- for this purpose. >=20 > Just like in M-x shell and M-x eshell. Whatever keys you use, please don't bind them in the standard minibuffer keymaps. From MAILER-DAEMON Wed Jun 17 19:18:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlhJj-0001ri-Q5 for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 19:18:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43422) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlhJd-0001rD-9t for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:17:57 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:50184) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlhJa-0006vb-OK for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:17:56 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HNHmwZ177579; Wed, 17 Jun 2020 23:17:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=WxQsOG4G//noiuL2FOb5a14cEMTEyiaUexyCFS0R6T0=; b=ZslYmw3aguclw6AeU9xOjwew8Q75MArmp5uUewsEQRu4F0L0N9et9BUPEz3Q3Lr92GIt lX9QrJ/2KlFqq5VW48LJbWliap4Lo8jkMIgpGMSeV96Oqkq8n3n1Y3tfyPdK+Swjw3X2 2BklWf45L7v7TqXDw3vKvariB1Bt2cW6vpurR/9++wMZQ8SrNNWlwPqkP045rxhxEimj B0XOC8q5e7XcMr1lxE3OB2ofA0JwEf7qTQmGrmCjd464gWNXQqKFT6G8rCAW+73Bgs6f enoWx4heTZDgNLaSsow6+9zLdmBUp161DZjUhQTOBqgGuXJjfFbU9HhC6RSoeV4NON8M pw== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 31q65yx1gx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jun 2020 23:17:48 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HN8LAZ095619; Wed, 17 Jun 2020 23:15:48 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 31q669rpu0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jun 2020 23:15:48 +0000 Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05HNFlZr023645; Wed, 17 Jun 2020 23:15:47 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 17 Jun 2020 16:15:46 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Dmitry Gutov , Juri Linkov Cc: Ergus , monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: RE: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> In-Reply-To: <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 suspectscore=1 bulkscore=0 adultscore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170173 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 suspectscore=1 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170174 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:31:20 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 23:17:58 -0000 > > Or maybe it's possible to navigate history using completion lists? >=20 > I'm not sure how that would look. FWIW, in Icicles you can do all of these things to "navigate history using completion": 1. Use `M-o' when in the minibuffer (not necessarily for completion), to use completion to insert any number of history elements in the minibuffer at its cursor. This enters a recursive minibuffer, to complete input against the current history list. `RET' after inserting any number of history elements ends that recursive minibuffer (and you can use `M-o' again, to insert more). (`M-o' is a multi-command, which means you can act on any number of candidates in the same command invocation.) 2. Use `M-h' during completion, to match your current input pattern against the minibuffer history (only). 3. Use `M-' during completion, to restrict the current set of completion candidates to those in the current history list. `M-h' and `M-' are similar. `M-' takes the current set of matching candidates into account, filtering them to only those used as previous input. It's a completion-candidates _set_ operation. `M-h' matches input against anything in the current history, regardless of whether it belongs to the current set of matching candidates. https://www.emacswiki.org/emacs/Icicles_-_History_Enhancements From MAILER-DAEMON Wed Jun 17 19:20:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlhLs-00033O-6K for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 19:20:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43796) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlhLr-000329-0W for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:20:15 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:51628) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlhLp-00076a-BY for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:20:14 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HNHpDp177602; Wed, 17 Jun 2020 23:20:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=d53CgSRlHH8vfPLFOCwzk68F+g4pBc4qDEOHInYFPII=; b=C0WAEU96Vyb+zm3Lkh73nkjIJf7alYgxfVS9rxCRfcvy5Vj/U8hdAv9zfuXdkD8P9bVM wkkL0JcO/3pE+EOlYU7nvYLnF93NrgS5F1AlznbUBtFS85Kdhs/WbbbhWfuvP1VJ1OUU RRCqHjlCPdyqT2D4LWPOiMSb2XLmT3aVFf0s7QEfaQuheP7vBrmk5nw5Mg8JyRkChYG3 GehoTda6wT8XKi00mI1cfrcybdEAy8Ea10GJAYsxNER/8QixbuRW/0aOF+5RCQgP5CpC +39BhAWK68ddUw2gZsFybgs7nlzJp/HIgqIQvtdeu3AVMOLsoBzM3gjRIKQhlhMXhiSR Hw== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 31q65yx1td-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jun 2020 23:20:09 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05HNIKGV132746; Wed, 17 Jun 2020 23:20:09 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 31q669rvak-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jun 2020 23:20:09 +0000 Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05HNK8qQ025945; Wed, 17 Jun 2020 23:20:08 GMT MIME-Version: 1.0 Message-ID: Date: Wed, 17 Jun 2020 16:20:07 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: Juri Linkov Cc: =?iso-8859-1?B?Sm/jbyBU4XZvcmE=?= , Dmitry Gutov , Ergus , emacs-devel@gnu.org, monnier@iro.umontreal.ca Subject: RE: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <95a8d76b-3f03-4fb3-82a6-0dd3f599f05e@default> <87bllh9uew.fsf@mail.linkov.net> In-Reply-To: <87bllh9uew.fsf@mail.linkov.net> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 suspectscore=18 bulkscore=0 adultscore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170174 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9655 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 suspectscore=18 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006170174 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 18:31:20 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 23:20:15 -0000 > > Please don't add any bindings for C-n/C-p to any > > standard minibuffer keymaps. >=20 > What keys would be better for vertical completions navigation? > Maybe M-up and M-down like in web browsers? Don't know/care. Whatever keys you choose, please just don't bind them in a standard minibuffer keymap (`minibuffer-local-*'). From MAILER-DAEMON Wed Jun 17 19:54:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlht2-0006Kt-LU for mharc-emacs-devel@gnu.org; Wed, 17 Jun 2020 19:54:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlht0-0006GH-Nk for emacs-devel@gnu.org; Wed, 17 Jun 2020 19:54:30 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:27750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlhsy-00048v-Al; Wed, 17 Jun 2020 19:54:29 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4EF7C81249; Wed, 17 Jun 2020 19:54:26 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id B851E8107A; Wed, 17 Jun 2020 19:54:17 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592438057; bh=+v9F8NvYGCg506hZ23a7Ryn979/hM5WE95ktDHEwiRE=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Poi3XeP9Ux2mSZTYNLshAaT2G4/+IXbaWH9EEC80HU+HX6aGgG0pniUgj9m3fKvI4 hwxsFVd0PwizY7NaOfF5py/NDxI3cVaZjxjAvdoY5WCXEeesqAEWEgm7Z4Isrl5z0y GsVxrpl3kGbetKt1dexx5inmqKf09abaE5UhJaX3mNBdA5G08Ts7cepqEYs48SU84o AgdgBsNqosmFluGgYLfNKmL+pgMpHBSNSc+xTjpWzdoaOWP88Anykul8SUcN7zDfXj dl1wSnQkcCj4IGAEfMrkhpL9UMJiT7mp+UZbFJtKKINaI776por8IDJ3N6WYiHA9DP Xcntjqmltiu9g== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E764E1202E9; Wed, 17 Jun 2020 19:54:16 -0400 (EDT) From: Stefan Monnier To: Andrea Corallo Cc: emacs-devel@gnu.org, Eli Zaretskii Subject: Re: On elisp running native - Update 9 Message-ID: References: <83sgl0lchm.fsf@gnu.org> <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> Date: Wed, 17 Jun 2020 19:54:15 -0400 In-Reply-To: (Andrea Corallo's message of "Sun, 14 Jun 2020 13:23:33 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.338 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain KAM_NUMSUBJECT 0.5 Subject ends in numbers excluding current years Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/17 19:54:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 23:54:30 -0000 > I believe in the current state the branch should be much more accessible > to 32bit systems and constrained hardware in general. As a case in point, I just built it on 32bit i386 and armhf (on an Orange Pi with 1GB of RAM) ;-) For some reason, the armhf encountered a few crashes. Mostly some segfault when compiling linux.el (but that segfault disappeared when retrying after compiling everything else) and modula2.el and octave.el both still fail with: ELC+ELN progmodes/modula2.elc Wrong type argument: listp, (:foundry unspecified :width unspecified :height unspecified :weight unspecified :slant unspecified ...) make[2]: *** [Makefile:312: progmodes/modula2.elc] Error 255 ELC+ELN progmodes/octave.elc Wrong type argument: listp, (/bin/bash : ligne 1 : 2978 Erreur de segmentation (core dumped)EMACSLOADPATH= '../src/emacs' -batch --no-site-file --no-site-lisp --eval '(setq load-prefer-newer t)' -l comp -f batch-byte-native-compile-for-bootstrap progmodes/octave.el make[2]: *** [Makefile:312: progmodes/octave.elc] Error 139 -- Stefan From MAILER-DAEMON Thu Jun 18 02:06:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlnhJ-0003X3-JJ for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 02:06:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53152) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlnhI-0003Ta-82 for emacs-devel@gnu.org; Thu, 18 Jun 2020 02:06:48 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35054) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlnhG-00029G-Aq; Thu, 18 Jun 2020 02:06:46 -0400 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]:53195) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jlnhD-0005Ut-DW; Thu, 18 Jun 2020 02:06:45 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 0769227C0054; Thu, 18 Jun 2020 02:06:43 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Thu, 18 Jun 2020 02:06:43 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejfedguddthecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufhffjgfkfgggtgesthdtredttdertdenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dtleeiffekueffudeufeefhfeitdejuedtueevgeffgfdtjeelkeehgeekteekveenucfk phepleefrddvfeeirddufeehrdeljeenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id 5E02A3060FE7; Thu, 18 Jun 2020 02:06:41 -0400 (EDT) From: Tassilo Horn To: Juri Linkov Cc: Stephen Leake , emacs-devel Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> <87ftatcr48.fsf@mail.linkov.net> Mail-Followup-To: Juri Linkov , Stephen Leake , emacs-devel Date: Thu, 18 Jun 2020 08:06:37 +0200 In-Reply-To: <87ftatcr48.fsf@mail.linkov.net> (Juri Linkov's message of "Thu, 18 Jun 2020 00:35:51 +0300") Message-ID: <87mu50c3gy.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 06:06:48 -0000 Hi chaps, >> Typing 'C-x v d' (vc-dir) on a repository without 'origin' >> raises the error "Failed (status 128): git --no-pager remote get-url ." > > Also noticed that (when the current branch has no default remote). > Just fixed in master. Ah, sorry, haven't seen your fix. But I think it may still have been wrong. I think the actual problem was that git config branch..remote wasn't necessarily called in the given project DIR so returned the global default remote "origin". So I now bind default-directory to the given DIR. I'm not exactly sure if that is really needed but at least it was needed for M-: (vc-git-dir-extra-headers "~/some/project/") which I used to reproduce the problem (which still occurred). Maybe it's not needed when vc-dir calls it, but let's say it is a good change anyway since it makes the function debuggable standalone. Thanks, Tassilo From MAILER-DAEMON Thu Jun 18 02:56:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jloTC-0007wj-E3 for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 02:56:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35382) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jloT7-0007vr-LX for emacs-devel@gnu.org; Thu, 18 Jun 2020 02:56:13 -0400 Received: from mx.sdf.org ([205.166.94.20]:65040) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jloT4-0001ZU-7f; Thu, 18 Jun 2020 02:56:13 -0400 Received: from sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 05I6txkq000610 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Thu, 18 Jun 2020 06:55:59 GMT Received: (from akrl@localhost) by sdf.org (8.15.2/8.12.8/Submit) id 05I6twfi030471; Thu, 18 Jun 2020 06:55:58 GMT From: Andrea Corallo To: Stefan Monnier Cc: Eli Zaretskii , emacs-devel@gnu.org Subject: Re: On elisp running native - Update 9 References: <83imlwl9vm.fsf@gnu.org> <83o8uegykm.fsf@gnu.org> <74dd94a9-28cb-a5fd-dbc7-ab21009834ad@cs.ucla.edu> Date: Thu, 18 Jun 2020 06:55:58 +0000 In-Reply-To: (Stefan Monnier's message of "Wed, 17 Jun 2020 19:54:15 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=205.166.94.20; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 02:52:51 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 06:56:14 -0000 Stefan Monnier writes: >> I believe in the current state the branch should be much more accessible >> to 32bit systems and constrained hardware in general. > > As a case in point, I just built it on 32bit i386 and armhf (on an > Orange Pi with 1GB of RAM) ;-) > > For some reason, the armhf encountered a few crashes. Mostly some > segfault when compiling linux.el (but that segfault disappeared when > retrying after compiling everything else) and modula2.el and octave.el > both still fail with: Cool thanks for trying! Interesting never tried aarch32, I add it to my todo list then. Andrea -- akrl@sdf.org From MAILER-DAEMON Thu Jun 18 04:22:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlpoG-0004lJ-4R for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 04:22:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlpoE-0004ky-7u for emacs-devel@gnu.org; Thu, 18 Jun 2020 04:22:06 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:41440) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlpoC-0008G4-Oo for emacs-devel@gnu.org; Thu, 18 Jun 2020 04:22:05 -0400 Received: by mail-wr1-x436.google.com with SMTP id q2so2619368wrv.8 for ; Thu, 18 Jun 2020 01:22:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=+/V92PsT/2+u9nJi0BduDtWAaDXPqV43PW/CA3UMvwc=; b=s/eT8Jki+MI25NP06T1FqbSWN2pDCBWubA2GiOVP1X9ZMnrS8q4R+2RFKJsU69H+Az N6K3dRXA77rK4dEBY3eCxIbDY91TUz7n2Ax8dLsU3MXjp7iR1ShvClDVX1i5wf73YJmD l+iYC5cXWj5CDW+wHq8C6/JdDEArAwkgSqG8qGLPCwJzCtGtyyq1AmyduzhlR5sY9ytf fZnIWAeDL4QZ1RucuqlIFPr2Df6baxgjW8THvOOIfBghMJRAxd71R4goW2ZyT4szTAWM ShdpBCEhKb50HYJrs6weZBV4Umy7eYDQg4S4DYuOxpcVOVVQDUPn7dheoppGbM+L90zw k6Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=+/V92PsT/2+u9nJi0BduDtWAaDXPqV43PW/CA3UMvwc=; b=D437nQE0dK0OlXEVGWOo0j3byah1DoAEVi3Vwy2m15BwyFxpT1mNrz/SmBZwUGfVbx hg2f6s3d+k99EG1/qb476ncKCkDZqlVVFxu4KgSHah7EV0FdfAuWmEuarksBxVkQsw15 I1IXsRD0SigR2o7gS4hR1GwbDDohxQ8XAkexKx9dKg7xwgkqkkVEWL9luS1pM/XpSIN0 1zH20t1I/KXmmeIO8OtC3rYG9woMqA9MLECjjU6DGTie3lUBH7CQ31rVw1L4LXELLOpa Nc1WXaLIi6JUG7WErnk75COQlQUFSkp/nCfbAiENzXtaUqN7zW07cbYEmZXkRsL6a2Pk jqKw== X-Gm-Message-State: AOAM531yu3gglloKg2KzSgGWrBvsriBf4NvJKoY0f53MWisi192j5JUK ud9MQ5hlY+Qj0KApeZQqBBatcOLDQgo= X-Google-Smtp-Source: ABdhPJzbzruNLAf6YlfDdvEbAHmlSSTiH/6DKbgjRqmYjpRwzNq+6YcxUd+FMJyp7BpOheEly8pbsA== X-Received: by 2002:adf:d852:: with SMTP id k18mr3331138wrl.177.1592468522564; Thu, 18 Jun 2020 01:22:02 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id c70sm2476027wme.32.2020.06.18.01.22.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2020 01:22:01 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Dmitry Gutov Cc: Juri Linkov , Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> Date: Thu, 18 Jun 2020 10:22:00 +0200 In-Reply-To: <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> (Dmitry Gutov's message of "Thu, 18 Jun 2020 00:57:42 +0300") Message-ID: <878sgkzsuv.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=kevin.legouguec@gmail.com; helo=mail-wr1-x436.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 08:22:06 -0000 Dmitry Gutov writes: > On 18.06.2020 00:50, Juri Linkov wrote: >> Actually the hardest question is to decide what keys to use >> to navigate completions in the vertical layout. It would be >> natural to use arrow keys and M-p/n, but there keys are used >> for history navigation in the minibuffer. > > I think C-n/P-n is what users would expect. See Ivy, Helm, etc. > > Arrow keys, too. As a former Ivy user who went back to icomplete and is now following this thread with a lot of attention, my vote also goes for C-n/C-p for next/previous candidate selection, and M-n/M-p for history navigation. (Actually, I wouldn't mind C-n/C-p in regular (non-vertical) icomplete; C-. is not super-ergonomic on AZERTY. I liked C-M-i, but it's been decommissioned in Emacs 27=E2=80=A6) From MAILER-DAEMON Thu Jun 18 05:46:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlr8F-0006L4-Ed for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 05:46:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlr8A-0006HS-HY for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:46:46 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:53707) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlr88-0006Is-Qd for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:46:46 -0400 Received: by mail-wm1-x332.google.com with SMTP id l26so4514764wme.3 for ; Thu, 18 Jun 2020 02:46:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=taW0rR0gTU2B8m5MLcRN/URPXvijHAq7xndpzfWnJWQ=; b=TO5Fl8m6wQA98Icb6NYqo7afMove8vQAI+TfEAhis+P/XxEn6ghForSWLypC5mmui+ SshL0JVGNVh4JhLXSur7itExiONzvfMV1yIczf7Gg1G22oeMUav4hyMqgr8tnjLcgKIU L5qiWKs7gWY13TX77k6cxnVMRSQgRmVnjgwkO1GhUiobSRloL6++c3k/JcdObKVydf7Q dDL8zq7/CwYwPyhuIsyQRmgKBF75xTtNBlwu31osN5/FAw7ecIzgUeWINRmqqYOBjlls 4WO1nFZBNO1UmmUrp1K4FWhPPrh6y3BLc8UgoNS/EvBrS9+1NhR76cIsYDIPuqk7u+dn whMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=taW0rR0gTU2B8m5MLcRN/URPXvijHAq7xndpzfWnJWQ=; b=Gema6y1V26cXj6arZfqyoHzuLePsqVenYynkSub7mFw1iz6JjIwoHeujXu+jv4j234 y3oUR14nw7iovN9CnABq0vSAzY6cZ8vo6Kv/7mlQ+3GI79W+zt0uM8+kGJgamSmEnEsq H3qvHcV1FyJ93fqdhs1KtC5QTRAEGZgf844dyDCNznPkRcneLEhB/IHeY5oam9fyturh tYLXr+7ZHj9QBaZosnBCaT+tHaLV8M5xMpNT2lRhpZBowESK9ErNHwcPg7sbz82JsQ0f 4kXu1YBbRVi/969vZJv4EHPV4vQHRmtyqoKOPOyhlXBVVNsUV47YwU43t3hAtGmn9QFu BNMg== X-Gm-Message-State: AOAM5330MXO/DfMJTJjcLJhyDKxScWDzwhEAMKU6VQJqh8X8/zmh56oK X/1xEEF83BwglauFPyVBG1CAqA7R X-Google-Smtp-Source: ABdhPJygi+5XFJLbus6jZd+tneX7uXOaN9SEx9nRRbvA1xzTRWCbhIfHkgRWv/z3gHruS5NzpZP/VQ== X-Received: by 2002:a1c:2987:: with SMTP id p129mr2533495wmp.49.1592473602798; Thu, 18 Jun 2020 02:46:42 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id z16sm2815084wrm.70.2020.06.18.02.46.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Jun 2020 02:46:41 -0700 (PDT) Sender: DG Subject: Re: RFC: Automatic setup for bug-reference-mode To: Juri Linkov , Stephen Leake , emacs-devel References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> <87ftatcr48.fsf@mail.linkov.net> <87mu50c3gy.fsf@gnu.org> From: Dmitry Gutov Message-ID: <59a15059-2ba5-5fcb-c6aa-3c9877394e1d@yandex.ru> Date: Thu, 18 Jun 2020 12:46:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87mu50c3gy.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=raaahh@gmail.com; helo=mail-wm1-x332.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 09:46:46 -0000 On 18.06.2020 09:06, Tassilo Horn wrote: > I think the actual problem was that > > git config branch..remote > > wasn't necessarily called in the given project DIR so returned the > global default remote "origin". I... don't think so? It returned an empty string in my testing. Which resulted in remote-url being nil. > I'm not exactly sure if that is really needed but at least it was needed for M-: (vc-git-dir-extra-headers "~/some/project/") which I used to reproduce the problem (which still occurred). Maybe it's not needed when vc-dir calls it, but let's say it is a good change anyway since it makes the function debuggable standalone. I don't mind, but a lot of VC functions depend on a changed default-directory value implicitly. From MAILER-DAEMON Thu Jun 18 05:49:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlrAl-0000jc-0Y for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 05:49:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlrAi-0000jP-Qk for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:49:24 -0400 Received: from sonic301-2.consmr.mail.bf2.yahoo.com ([74.6.129.41]:44209) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlrAf-0006Zw-FD for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:49:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1592473757; bh=Fk9qM9h5TiU6lgOscKXDI+tgJxG1nEIHCcdIaeydOxE=; h=Date:From:Reply-To:To:In-Reply-To:References:Subject:From:Subject; b=EavNbW44osMZP/pKsXzKRikI36I6mQGZwXjx37nfXNdOTONoRlIavQzKxQUoGCtH2a/F+yLTZFkGrh7n1danNBH2LHvRGUdRyiGW58Prb2SCtgNppB3TbomZwplYOtfD5VbT5jtVspstl/3o2Qfq8LKclrVU1gC0Hwq9FdVc8m5rg5sda/ZaHYpabolCaMAcylIx6mviNMEweKxirnUOFh3Fd8O+C76u/87YSwQA4y276NHyVlKwF3OP+4w9AMiRpYAJgc+khtzYUm8EcB558Unj0Bf/nD+IyefFJV3CqpiRx30/s6eQzSqRyEbI//BIScFOo/8znhGghbXKPcQp6w== X-YMail-OSG: MenFkZUVM1nceCQ04cweG_VJCaxHqQZaS9HatLwhjteWlgEDa2N1DknTu9cEIkv wzvE0lcMLuqWSWwZnI6TQxjYohm0Ola57_dgjbSQ9XNZ7dMP6O8Ry.xJcwQJrKk2mqwoLViu7HZt rLhPcOmrn3_xEalzrJMZWHwYd_P72XHQq6JAb2._yUOI.nWhBZZtqHWaZU32esNy4HX1wZmwZ62U cdyEGf.nmMyQpSUZ3BNJSmJbsJbh.BZmEGoRK63gIU1VBv9WWE0h8lhHodzr3aM3gppbhbTe0Xi5 O4dVHbNsxmMHfj1aoacdxfgNkuo1v.wrU34.S97xufaKR2O.W5fAEk4V3B.Z66X06v2wmjJx2hQU Pv_r_5UBWrlB7o9bVNqPSoGpIbU8HUeeab08M1Tvg.sWpv4nzIMD2i5nOdIKK4DObNbVnpfzF8gU zEvx.10gZ.2Ep8UYUDjnI8.j3sBBC.rpINDV_Pf90VG.66AfVgF.mSqSl.qE.DXgGoHfnyWZp6E_ 3nqNAnXbsn13mLcYoWcfTDK9urxmGEk.GXbbRxNCAoOBT.E8WvBoTEhju4cD7jcnjfK4St46FQAg ABnVVURcd.QFCKDVwj9xxmhRJKb6tOeDvKEMZta6bz.22G_T9KuIQfas2RU.c8Gmg5ouGk5zZuWu tch5coOC1PzDnbo6OfAY7P5Gbcm1Zkb0gymaWRnkWRw76s7upEDJmOSuEdHe6Cm4OgpJKC5kuKki bXewCWBwamemOaCYHKZUu1IbVr4M1JcI1I_nGozQQ8m68dymsc0I4ZCuxgiYzT8k6gPXFVP3WE5p rGsVDNkESBFOIhRWHSGn9bEnkqu9RKlEq5RYpxlxeReveIIzfig9UFz8z4DZTQ9I538aNax2_sNd ovcSCTYHg1qqEc5c1yPtpwrm51ljsphQ_DJnFPuleNei5K3FVJeYAFIo8dQlWgmA5brj4jdwbpAI 5D._ejOXhyglpHMCRUuEoNwzM1JZCn1pcf_vw.Qg0GOeG_TM68goRnLpE_tdeZHaGn0x6eyOW9Z3 _6H8_LRPIcZuIbuAsUDF42_f_a.USKrjvb13MmZVlszeEGltMBfEvuzeLPVvYo9EuVB8hF1UgOrT eihkNL_Gu8k.pYmW0dMSgL8786E6PiBZ8yshxXy_6IM0THin1zx5e69ceX9QfWJ47WqyoV50kuPv zOQRQ30_Yk0yAttnF1WWigGPV7ybCYm4VZzjghpKu5GXSYpBx93NTNDWayIBHDvJ7vQErSNE4kZS afLLatisc2VR0oaEOwAzje.0NrpnTXYMOBz4UKd1QpbhN8B2YUj5aUT2zJ86y5V.lsNWElQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.bf2.yahoo.com with HTTP; Thu, 18 Jun 2020 09:49:17 +0000 Date: Thu, 18 Jun 2020 09:49:16 +0000 (UTC) From: Ergus Reply-To: Ergus To: "dgutov@yandex.ru" , "emacs-devel@gnu.org" Message-ID: <1536974483.53278.1592473756490@mail.yahoo.com> In-Reply-To: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> Subject: Re: project-find-regexp using ripgrep MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_53277_1789229595.1592473756489" X-Mailer: WebService/1.1.16138 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Content-Length: 2320 Received-SPF: pass client-ip=74.6.129.41; envelope-from=spacibba@aol.com; helo=sonic301-2.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 05:49:17 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_20=-0.001, 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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 09:49:25 -0000 ------=_Part_53277_1789229595.1592473756489 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi: I am trying the latest changes in master and when I try to use any project-= * command I always get an error: ``` project-current: Wrong type argument: listp, ~/projects/nanos_cluster/ ``` Where ~/projects/nanos_cluster/ is actually the root of my current project With this bt: Debugger entered--Lisp error: (wrong-type-argument listp=C2=A0~/projects/na= nos_cluster/)=C2=A0 project--add-to-project-list-front((vc . "~/projects/na= nos_cluster/"))=C2=A0 project-current(t)=C2=A0 project-switch-to-buffer()= =C2=A0 funcall-interactively(project-switch-to-buffer)=C2=A0 call-interacti= vely(project-switch-to-buffer nil nil)=C2=A0 command-execute(project-switch= -to-buffer) Do I need an extra setting/config or anything? Best,Ergus ------=_Part_53277_1789229595.1592473756489 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi:

I am trying the latest changes in master and when I try to use any project-* command I always get an error:

```
project-current: Wrong type argument: listp, ~/projects/nanos_cluster/
```

Where ~/projects/nanos_cluster/ is actually the root of my current project

With this bt:

Debugger entered--Lisp error: (wrong-type-argument listp ~/projects/nanos_cluster/)
  project--add-to-project-list-front((vc . "~/projects/nanos_cluster/"))
  project-current(t)
  project-switch-to-buffer()
  funcall-interactively(project-switch-to-buffer)
  call-interactively(project-switch-to-buffer nil nil)
  command-execute(project-switch-to-buffer)


Do I need an extra setting/config or anything?

Best,
Ergus
------=_Part_53277_1789229595.1592473756489-- From MAILER-DAEMON Thu Jun 18 05:56:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlrH9-0006aP-4w for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 05:56:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlrH7-0006aF-My for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:56:01 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:46628) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlrH5-0007yW-NT for emacs-devel@gnu.org; Thu, 18 Jun 2020 05:56:01 -0400 Received: by mail-wr1-x430.google.com with SMTP id x6so5347356wrm.13 for ; Thu, 18 Jun 2020 02:55:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=q2GXwZZKwJAZTDmi8U5ocR/sABN6qipe1D2tmRw80EU=; b=dfXs+9Afhv4dvUyinv4eDIB2WUQipSqAvslbWn1a/fB4J1tQM0G1xzZuy3Y7eGhFaF ppNwZVQhByDBIPCcMau0+efcnc50E1SsmLvxk9eIp/8c17kM2+Qn6xbBSIYsopbDYYoS PFGNEDlsCi5sLsPyt5halisd0r+fxkqPsYmxi07mEQwKSObfavm7vgURrNe57SUjXqmm 7trEtBf4Oy0bWiVUJxkGman8A064cFq48ez+/vamwuwpA/qpsDlmlC8oCWeWWZWVy1qL Zf07E4wyGo5dzmJGFAbzKFuc4nA81tYySxZEbPsqo8MoerZftAKxPBbl9v68MFdkYScn Gdqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=q2GXwZZKwJAZTDmi8U5ocR/sABN6qipe1D2tmRw80EU=; b=T18Gdtb/M3Eoc7wkIy8W/Kt5aiHUBApqWWqjAKSKNaLOWoIP+UncYvi+ME4YwRsVTJ FTwZ/SWZZq5pvkc4aHnAoxPq+SKeF9WZcmLnmYVTziWdu1nrkaaaqlnJJ9nQyzkenavO BOvQlhjIozmCJKMjPMXpgC6YgBQU79w4LZFscvFjfAmsIDxqBsRj+VmK6phO2xqbz6RK sZbpvEA6p7Kt6Eo8D29pjYwvfQ9PEZWPgKBzYEV0wr7Z2nAGtd3CEGYNs5TK+lHmwL7S zL/BxxYM8BGlUXuRyH1ZdxEFDwAkI9yvionAZLc08pNoBuB9So1ZiD6B33lh5ayDXQSU Ljaw== X-Gm-Message-State: AOAM533MdkI84nEbEiSQNhYJEXfZMkGXUd8V47+qG1PscASlTf85RaLm bYRFOS69A/rWiLr9xLWIDg53RS2Z X-Google-Smtp-Source: ABdhPJwKyS7dg/cabSQUgCaue9f6R3N8DGQHzSO1AykVfq/rVv0QPs3DPHiztKX4K37UtyLgir8wxw== X-Received: by 2002:adf:c707:: with SMTP id k7mr3565185wrg.382.1592474157374; Thu, 18 Jun 2020 02:55:57 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id h203sm2488941wme.37.2020.06.18.02.55.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Jun 2020 02:55:56 -0700 (PDT) Sender: DG Subject: Re: project-find-regexp using ripgrep To: Ergus , "emacs-devel@gnu.org" References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <1536974483.53278.1592473756490@mail.yahoo.com> From: Dmitry Gutov Message-ID: <3558840f-02bb-6017-605e-b2bf12e83074@yandex.ru> Date: Thu, 18 Jun 2020 12:55:55 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <1536974483.53278.1592473756490@mail.yahoo.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=raaahh@gmail.com; helo=mail-wr1-x430.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 09:56:01 -0000 Hi! On 18.06.2020 12:49, Ergus wrote: > I am trying the latest changes in master and when I try to use any > project-* command I always get an error: > > ``` > project-current: Wrong type argument: listp, ~/projects/nanos_cluster/ > ``` Please try deleting ~/.emacs.d/projects. And either restart or (setq project--list 'unset). From MAILER-DAEMON Thu Jun 18 06:19:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlrdy-0004Em-Gs for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 06:19:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37984) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlrdx-0004Ea-AA for emacs-devel@gnu.org; Thu, 18 Jun 2020 06:19:37 -0400 Received: from sonic307-1.consmr.mail.bf2.yahoo.com ([74.6.134.40]:43705) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlrdu-00041c-Ie for emacs-devel@gnu.org; Thu, 18 Jun 2020 06:19:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1592475572; bh=V+a4TcGkj84QSnC+oFK8j7hdvkQZfd5fWduHQe1RUSo=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=konvrZZfz02IHHg2tOSkiuorhe43Izw7zzZs/o6Ir2wM9PNCRwsmVTGNvvXHqSqzd1tUtAD1/MP73dv9GiMCZixjin50vgnXZb6r2MnHSDS5WDsWElfIXap6PjmCDDh0TAF6v/hV1DPPeewQhtgF5fBEG/6wrItxHVBy/51JmXrP5sU290/7b8FVvooibmapim+lQycQobR0AlxFC3u8wrqqson0/xlBkVYtRkhtKFfwzYhZmhDWfwQaG8Ms3v1OuADpgS6VqLSMANoFIVVYQCXTYs2EKlgX/Ns79kinkJKRS/DV0ibMuKk6vjPWyW7GEM69mZ06iFYa7KyHs1W4Lg== X-YMail-OSG: CL.EbtoVM1kA9csC87umicvMT96RflsX.ebEw5gXW7eLPDXJqVAtKZmvi.ev8M7 6FVcGfidQOz1yLD8N31.TA26P1RtG5wf1wM4ztORMeMHUUUVKLrsh0rFwD5iUdLVvvP.DBAgGfaw NDyWRVTXNidrEkS5y74O6BfaOVxrdvFXzqdGkmKGXXYk8hTp15OQWJgPJz6t1MYzFKvKE1CeSbVZ rque8D96LmAzaRfMWVrlOOZULa4Hir1GrZyePK5eyL3ISoS.0Uky3wrbb3ySB30J_D_I8ZMUJcU2 8OMfo9oKKpVJL_j6psuHaIi4N0WQjPLHufDeuqA3ITmhaPgOssudJoLSlX7YMxH5UqR8v5Jpfj96 JAGQzzJ1HDbB.9CIEq.NEt8bOGDPHMMQvU.pqVvzcs5EpgWQ80wQY68N4c3hTjenerIqTLCHEaz4 wcfcmMwA9oByW0Zh3QJoMefKAM_M7jcaxHwbXE9MunV17ZE85WYD7iEYLeHuat5LJzUvzrhCg_lf 0fUH4752UNIiXF7BrTNp3H6QBAmm4fBKIzxsTpOKrR1siNxzJtnQ7FGVErn3F10DONezDorL1C4O _mVQ_VT8KylJQhpHviA9GIpNLXihKa1Jg7KSlNUTGaLh_dUbZUfN6WmxKaIFC7XZOFZfaxokPTor MiURundLhtq.Hha.rpgR7N7qayAj6oX18GIRbrTATBSxnPlEfwptam4LaQ0SJN6m55kDQ0bBeyUD ZSA0YNtoUsb8vD3m0_E0cskt_q7ztiWSc6.yNavEUWpcO4LN2WTvsQQEdcVtlw2eIXQdTIhBOasB GrZ2tt7lGyp5skxkHSzThauxwohEe_L2mWzizvivKc_CqHODcQ4yqtx7VfVf62AS7dgTWC3Jh1xz SePAJ5GbXoOaguJ7_77Wa965AVERe4cqftCRXH82YtQFMFblSwP6kRi2qSNyo0HxEwWzHHSrUPlG .AlBoMQvpjIW3AVAjgM2R3OdPKBSsAGc5snEykkZ211KuwfxLsqWyxHeOjYr6Jbi6fLKLJJc_.bo C2znSNs.rAaOJqaaikwt0I.eEjb5AblgGT0SaoqpBLU.xyJkEusCLRzHNPlU7n3XQ9ADTWZmP1Jc NrNuLYn4u8q2qkeJslvth2dJmLjEiiyBEiFz.L8bQsqIRwJV1x4wvmTK22E.Jx2sglEwibRUj84z BmIEo1hecUBFkmcK5tJVDFM0AmGe7R_Msqzz6b_x9rZUJW6zFIBW52_Hqe.CKQsEj8bHVBt2tyH5 5vnPvxLiBui7vgsE7vUZgWrNdEmrNHk7JqEiP3Dz.xjVIE.gP.jlDVqKBZkW_in4kmXokJX8xOQP lvi.zTPk- Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.bf2.yahoo.com with HTTP; Thu, 18 Jun 2020 10:19:32 +0000 Date: Thu, 18 Jun 2020 10:19:32 +0000 (UTC) From: Ergus Reply-To: Ergus To: "kevin.legouguec@gmail.com" , "dgutov@yandex.ru" Cc: "emacs-devel@gnu.org" , "monnier@iro.umontreal.ca" , "juri@linkov.net" Message-ID: <738801972.57184.1592475572083@mail.yahoo.com> In-Reply-To: <878sgkzsuv.fsf@gmail.com> References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <878sgkzsuv.fsf@gmail.com> Subject: Re: vertical fido-mode MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_57183_610924336.1592475572080" X-Mailer: WebService/1.1.16138 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Content-Length: 20113 Received-SPF: pass client-ip=74.6.134.40; envelope-from=spacibba@aol.com; helo=sonic307-1.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 06:19:32 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 10:19:37 -0000 ------=_Part_57183_610924336.1592475572080 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi I agree that this (C-p/C-n && ) is the most intuitive in vertica= l and they shouldn't apply in non-vertical mode (cause is mo= re intuitive then). C-s && C-r could do the same in both cases. For history= navegation in vertical M-p and M-n could work fine. If we want fido fully emulate ido; in the package ido-vertical there is som= ething we could also provide somehow (maybe not exactly in the same way): | (defun ido-vertical-define-keys () | | | (when ido-vertical-define-keys | | | (define-key ido-completion-map (kbd "C-n") 'ido-next-match) | | | (define-key ido-completion-map (kbd "C-p") 'ido-prev-match) | | | (define-key ido-completion-map (kbd "C-c C-t") 'ido-toggle-prefix)) | | | (when (memq ido-vertical-define-keys '(C-n-C-p-up-and-down C-n-C-p-up= -down-left-right)) | | | (define-key ido-completion-map (kbd "") 'ido-prev-match) | | | (define-key ido-completion-map (kbd "") 'ido-next-match)) | | | (when (eq ido-vertical-define-keys 'C-n-C-p-up-down-left-right) | | | (define-key ido-completion-map (kbd "") 'ido-vertical-prev-matc= h) | | | (define-key ido-completion-map (kbd "") 'ido-vertical-next-mat= ch))) | -----Original Message----- From: K=C3=A9vin Le Gouguec To: Dmitry Gutov Cc: Ergus ; emacs-devel@gnu.org ; mo= nnier@iro.umontreal.ca ; Juri Linkov Sent: Thu, Jun 18, 2020 10:22 am Subject: Re: vertical fido-mode Dmitry Gutov writes: > On 18.06.2020 00:50, Juri Linkov wrote: >> Actually the hardest question is to decide what keys to use >> to navigate completions in the vertical layout.=C2=A0 It would be >> natural to use arrow keys and M-p/n, but there keys are used >> for history navigation in the minibuffer. > > I think C-n/P-n is what users would expect. See Ivy, Helm, etc. > > Arrow keys, too. As a former Ivy user who went back to icomplete and is now following this thread with a lot of attention, my vote also goes for C-n/C-p for next/previous candidate selection, and M-n/M-p for history navigation. (Actually, I wouldn't mind C-n/C-p in regular (non-vertical) icomplete; C-. is not super-ergonomic on AZERTY.=C2=A0 I liked C-M-i, but it's been decommissioned in Emacs 27=E2=80=A6) ------=_Part_57183_610924336.1592475572080 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

I agree that this (C-p/C-n && <up> <down>) is the most = intuitive in vertical and they shouldn't apply in non-vertical mode (cause = <right> <left> is more intuitive then). C-s && C-r coul= d do the same in both cases. For history navegation in vertical M-p and M-n= could work fine.

If we want fido fully emulate ido; in the package ido-vertical there is som= ething we could also provide somehow (maybe not exactly in the same way):

(defun = ido-vertical-define-keys ()
(when ido-vertical-define-keys
(define-key ido-complet= ion-map (kbd "C-n") 'ido-next-match)
(define-key ido-completion-map (kbd "= C-p"= ) 'ido-prev-match)
(define-key ido-completion-map (kbd "C-= c C-t") 'ido-toggle-prefix))
(when (memq ido-vertical-define-keys= '(C-n-C-p-up-and-down C-n-C-p-up-down-left-right))
(define-key ido-completion-map = (kbd <up>) 'ido-prev-match)
(define-key ido-completion-map ("<= /span><down>= ") 'ido-next-match))
(when (eq ido-vertical-def= ine-keys 'C-n-C-p-up-down-left-right)
(define-key ido-completion-map (<= span class=3D"pl-c1" style=3D"box-sizing: border-box; color: rgb(0, 92, 197= );">kbd = "<left>) 'ido-vertical-prev-match)
( ido-completion-map (<= span class=3D"pl-c1" style=3D"font-family: SFMono-Regular, Consolas, "= Liberation Mono", Menlo, monospace; box-sizing: border-box; color: rgb= (0, 92, 197);">kbd <= span class=3D"pl-pds" style=3D"box-sizing: border-box;">"<right&g= t;"<= span style=3D"font-family: SFMono-Regular, Consolas, "Liberation Mono&= quot;, Menlo, monospace;">) 'ido-vertical-next-match= )))

-----Original Message-----
From: K=C3=A9vin Le Gouguec <kevin.legouguec@gmail.com>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: Ergus <spacibba@aol.com>; emacs-devel@gnu.org <emacs-devel@gnu= .org>; monnier@iro.umontreal.ca <monnier@iro.umontreal.ca>; Juri L= inkov <juri@linkov.net>
Sent: Thu, Jun 18, 2020 10:22 am
Subject: Re: vertical fido-mode

Dmitry Gutov <dgutov@yandex.ru> writ= es:


> On 18.06.2020 00:50, Juri Linkov wrote:
&g= t;> Actually the hardest question is to decide what keys to use
>> to navigate completions in the vertical layout.  It= would be
>> natural to use arrow keys and M-p/n, b= ut there keys are used
>> for history navigation in= the minibuffer.
>
> I think C-n/= P-n is what users would expect. See Ivy, Helm, etc.
><= br clear=3D"none">> Arrow keys, too.


As a former Ivy user who went back to= icomplete and is now following
this thread with a lot of= attention, my vote also goes for C-n/C-p for
next/previo= us candidate selection, and M-n/M-p for history navigation.

(Actually, I wouldn't mind C-n/C-p in regular (non-ve= rtical) icomplete;
C-. is not super-ergonomic on AZERTY.&= nbsp; I liked C-M-i, but it's been
decommissioned in Emac= s 27=E2=80=A6)

------=_Part_57183_610924336.1592475572080-- From MAILER-DAEMON Thu Jun 18 06:20:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlreV-0004fu-JY for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 06:20:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlreT-0004du-Hl for emacs-devel@gnu.org; Thu, 18 Jun 2020 06:20:09 -0400 Received: from sonic305-1.consmr.mail.bf2.yahoo.com ([74.6.133.40]:45907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlreP-00045s-Gk for emacs-devel@gnu.org; Thu, 18 Jun 2020 06:20:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1592475604; bh=/CMsddTaYfw1nrbNHsGJPYo2OFQ+GDwqT9CV89eIVxI=; h=Date:From:Reply-To:To:In-Reply-To:References:Subject:From:Subject; b=dclsmdn0G4hEwBj6vPwIj4LnVbaCRJ1z+QuXR6Eq3H+QAyJUD0YtEXELrNFZTSf9ejMJJsqrCyzuhg/jPBRJfGo1b7VlaigEPP57sj6kj33DIRjyZtBERkaS51quOvsktcn4fDOZ3/7aVT881LafapmO6DLeDdg4R+zknmu7PnofQsqymvsYQHE5GgAkQh/6xzgd3J2QbGyVCsITey3Xr3PrtxYNhbtRu6W9WrmOvpqv5TS37W0LPcFycfj2yZ9zOtbGbMilqWTx7eMV242r+4EN1NqOlmUkOl6b71sWnf+XE3J7l8f6M60WoP3ewvgWPFUX2sfFXY3qm/YaGo5iDA== X-YMail-OSG: 84D4v6kVM1mMxC09cRQ1BdwuSbAWEE.dgM9TvqYgLKVxt1Gd4Gtb5H.BhgWOW.R tzGhzsa.6cM4oxVxMSmGeLaNsQN9BUxJU8l9WRPnVaXVRQEPXfO6FTXn5ol.vpFoNawwoSTUjXI7 3wZRrrVzVlSL20cnqSHfGLXpaBkJw2Gq2D0xL8aZ62pFsWwG7Ez5Qgch5YJR6XQH9HTMsVO8xYmd 2h_1QTrywUyCA5RPkzJicG0W5yDcyPCLXQFRG6byzYMcqn54r_UZNUC1.attoJFtdap4JuYutLxq 0gk.abnZMxcbmebY9.gp78JWzQ1Um.qc.l7M5Zq1Pw315FF_jy7SkS3Zf7XIyYaYJO1wAHJ2inoG mBOWpREUdpzr5I10oibMMq.XPGjA5nnR_fqT.0FCyvX60OPvYf.AoV3kIKnBU6EI0RIct46fUOt3 NXDG9qvvAr_itKwt82tT2ExmDfsLFjVF1onZqlKQc3ulUuWwwYXzGEPYeExHk3y3iU1hPJdvl0E. bZDDhwvOKqvUBwOEOHWXpyqRr89wG0Y6le_O7GhcXKTYdb3EOHPQt9BuV2vWqu0xiIEaA12oduMl GOm5PtzCUrlEb9y_5zGyp3rJMRlcPKgiPAYi29vmpik8BaKrPuXiO2CzStQY1cUwbHX1k1E4Wq2P SnJuQC9i1nTHnwYWPwgG9Vj4kBz1emBlsg3Th6j7Gj5qM0r.U5g96S6636F0ZTV58Y_hcXwv6NNd Rd0cmu1JjmoxKWwYssUi2rG_Sv4LsR1VXSzvKwaFcBQM6nsdtZp.8U9Zxx.1h7ulfN_zd6eHvo.z 4.WjUZGjPa5cytosheStQDwj4cyxWaHoW52j6x8OjFL41UpsJwA7IniDfxEYXP0Plxd.wMZU5Idi PK4woGVxT2RbhltYcfFmQ4fGnRlQJfJM0gHDbztenxADO4r2xFGkDY1lEWm8MZCu9KKRJCgnbL3h p6tiXlRp1ICxwVIno80.6bVZh.kT3GO4pLYApDdvoNzHXX4JzHxGFcmq0kgk6ynIDT.p5W_DmPyT JdYYZKhrxhXeliUbui_ov2GVsYSQZiS5k4if2xpfkKShkHcDFsb0mEPRMMxfkRM5gjXghL3_OsvD wHdT2CXYVDB.WGXZYbNCpYdiegJv7EunRh2TqVUSYOGDaXOYYclsmyGYR_gvOSw.2fKqLiWcSnhF nPoLEnd_bkierqYsTyTDmdpapM8EPIm6sSma1.c9SLqZLePKqUP2iFM.mDyuDBeUkbLSxbPb33F1 NtgoblW8HSokECI5IogcYLPIs8bBOgL0XRhe9splezZ8YBv3YflLlIySoHcZlX6eERvQXXT6k9Mb 9FyruLJO8Rs1l9nawAKlluMKdnF8vv.q1KU6Z Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Thu, 18 Jun 2020 10:20:04 +0000 Date: Thu, 18 Jun 2020 10:20:02 +0000 (UTC) From: Ergus Reply-To: Ergus To: "dgutov@yandex.ru" , "emacs-devel@gnu.org" Message-ID: <2055395117.41912.1592475603002@mail.yahoo.com> In-Reply-To: <3558840f-02bb-6017-605e-b2bf12e83074@yandex.ru> References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <1536974483.53278.1592473756490@mail.yahoo.com> <3558840f-02bb-6017-605e-b2bf12e83074@yandex.ru> Subject: Re: project-find-regexp using ripgrep MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_41911_1553666544.1592475603001" X-Mailer: WebService/1.1.16138 aolwebmail Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Content-Length: 2057 Received-SPF: pass client-ip=74.6.133.40; envelope-from=spacibba@aol.com; helo=sonic305-1.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 06:20:04 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 10:20:09 -0000 ------=_Part_41911_1553666544.1592475603001 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Yes, it worked fine, thanks. -----Original Message----- From: Dmitry Gutov To: Ergus ; emacs-devel@gnu.org Sent: Thu, Jun 18, 2020 11:55 am Subject: Re: project-find-regexp using ripgrep Hi! On 18.06.2020 12:49, Ergus wrote: > I am trying the latest changes in master and when I try to use any > project-* command I always get an error: > > ``` > project-current: Wrong type argument: listp, ~/projects/nanos_cluster/ > ``` Please try deleting ~/.emacs.d/projects. And either restart or (setq project--list 'unset). ------=_Part_41911_1553666544.1592475603001 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Yes, it worked fine, thanks.


-----Original Message-----
From: Dmitry Gutov <dgutov@yandex.ru>
To: Ergus <spacibba@aol.com>; emacs-devel@gnu.org <emacs-devel@gnu.org>
Sent: Thu, Jun 18, 2020 11:55 am
Subject: Re: project-find-regexp using ripgrep

Hi!

On 18.06.2020 12:49, Ergus wrote:

> I am trying the latest changes in master and when I try to use any
> project-* command I always get an error:
>
> ```
> project-current: Wrong type argument: listp, ~/projects/nanos_cluster/

> ```

Please try deleting ~/.emacs.d/projects.

And either restart or (setq project--list 'unset).

------=_Part_41911_1553666544.1592475603001-- From MAILER-DAEMON Thu Jun 18 09:38:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlukC-0002CG-0W for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 09:38:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jluk9-0002AJ-SG for emacs-devel@gnu.org; Thu, 18 Jun 2020 09:38:13 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40406) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jluk8-0000Ss-3O; Thu, 18 Jun 2020 09:38:12 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:36787) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jluk1-0005WY-Vy; Thu, 18 Jun 2020 09:38:08 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 6C19427C0054; Thu, 18 Jun 2020 09:38:05 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Thu, 18 Jun 2020 09:38:05 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejgedgieekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtgfesthhqredttderjeenucfhrhhomhepvfgrshhs ihhlohcujfhorhhnuceothhsughhsehgnhhurdhorhhgqeenucggtffrrghtthgvrhhnpe dvueefkeeuleekheffffdtieduvdfhffdtgfekhfejueejudehudekveefvedvhfenucfk phepleefrddvfeeirddufeehrdeljeenucevlhhushhtvghrufhiiigvpedtnecurfgrrh grmhepmhgrihhlfhhrohhmpehthhhorhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgr lhhithihqdekieejfeekjeekgedqieefhedvleekqdhtshguhheppehgnhhurdhorhhgse hfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id CB6EE328005A; Thu, 18 Jun 2020 09:38:02 -0400 (EDT) From: Tassilo Horn To: Dmitry Gutov Cc: Juri Linkov , Stephen Leake , emacs-devel Subject: Re: RFC: Automatic setup for bug-reference-mode References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> <87ftatcr48.fsf@mail.linkov.net> <87mu50c3gy.fsf@gnu.org> <59a15059-2ba5-5fcb-c6aa-3c9877394e1d@yandex.ru> Mail-Followup-To: Dmitry Gutov , Juri Linkov , Stephen Leake , emacs-devel Date: Thu, 18 Jun 2020 15:37:59 +0200 In-Reply-To: <59a15059-2ba5-5fcb-c6aa-3c9877394e1d@yandex.ru> (Dmitry Gutov's message of "Thu, 18 Jun 2020 12:46:40 +0300") Message-ID: <87r1ucwl3c.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 13:38:14 -0000 Dmitry Gutov writes: > On 18.06.2020 09:06, Tassilo Horn wrote: >> I think the actual problem was that >> git config branch..remote >> wasn't necessarily called in the given project DIR so returned the >> global default remote "origin". > > I... don't think so? > > It returned an empty string in my testing. Which resulted in > remote-url being nil. I've tested and written my fix with a version before your change (and wrongly using M-: (vc-git-dir-extra-headers "repo/no/origin/remote")). And there I got the remote "origin" (which doesn't exist in that repo). Oh, I think that's because I did the M-: while being in vc-git.el, so it looked at the emacs repo, not the one in the DIR argument! Well, if you got the remote "", I still think that default-directory was set to some non-git repo directory at that time. At least =E2=9D=AF git config branch.master.remote returns successfully but empty in such a directory. It's not exactly clear to me when vc-dir sets default-directory. So if you want to find out, you could checkout an emacs version before our changes and invoke vc-dir from somewhere where default-directory is not in some git repo. I think you'd get that error no matter if the DIR of vc-dir has a remote origin or not. Bye, Tassilo From MAILER-DAEMON Thu Jun 18 09:52:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jluxX-00067Y-2h for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 09:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jluxV-000673-N0 for emacs-devel@gnu.org; Thu, 18 Jun 2020 09:52:01 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:45376) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jluxT-0003P6-1f for emacs-devel@gnu.org; Thu, 18 Jun 2020 09:52:00 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 593401004F2; Thu, 18 Jun 2020 09:51:56 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 65277100419; Thu, 18 Jun 2020 09:51:54 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592488314; bh=m23dEfN1NGzCh1/D+j/7LDnD1VlZ5yQrEhWCiRrWhQM=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=VghgDKfDdx2TBkdlkBruOfBN1E1jpBfRlXaZq1duGpJsixdgUs0fenehVLPNWpTWg 9TWcNZVC+JacYDEi30wv+GNUGk+hU+/g2gw8Hzy9qGbtrwLyhtQTvenXHWHOv4ibqv 1+2Zl/OurSZsAATwbr/DD5NiQY6hzWoLnYnNhGUk80/v8AJ0NI6IyT6Jo+D0+6ycEJ xKLlMzQw5BcOSXmsm0SJ8YLz2eZneQssFN9OQbiizxbJR7kHsNv0VpYkdEhsPSmewr 7uFdpa20uvHe1MapDP3JniljNwKtTsyCVtl7GMUmgKlPVtaafJfbK61Are4S99M4Ui RDMbWGgyvDpfA== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F1FBB12066A; Thu, 18 Jun 2020 09:51:53 -0400 (EDT) From: Stefan Monnier To: Omar =?windows-1252?Q?Antol=EDn?= Camarena Cc: Ergus , Omar =?windows-1252?Q?Antol=EDn?= Camarena , emacs-devel@gnu.org Subject: Re: vertical fido-mode Message-ID: References: <87a71apgk2.fsf@penguin> <20200611130341.zwxcpwtwaxrq2qwm@ergus> Date: Thu, 18 Jun 2020 09:51:52 -0400 In-Reply-To: ("Omar =?windows-1252?Q?Antol=EDn?= Camarena"'s message of "Thu, 11 Jun 2020 08:44:47 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 09:51:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 13:52:02 -0000 > Yes, I'd be happy to make the changes. What does that look like > logistically? Sending patches to this mailing list asking for review? That works, yes. > I don't have a copyright assignment yet, but some kind folks are educating > me about how to procure it over at the icomplete-vertical repo. Great. Let me know if you need any further help with that. Stefan From MAILER-DAEMON Thu Jun 18 10:28:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlvWe-0001vq-TP for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 10:28:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlvWd-0001va-9M for emacs-devel@gnu.org; Thu, 18 Jun 2020 10:28:19 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:39908) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlvWb-0001rE-94 for emacs-devel@gnu.org; Thu, 18 Jun 2020 10:28:19 -0400 Received: by mail-wm1-x333.google.com with SMTP id t194so5872656wmt.4 for ; Thu, 18 Jun 2020 07:28:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=TD8TvRi3Awnjj9si6im53QF94XjtzWP2SwTHj3bRcyw=; b=RHdM5P5lSVF6rdayF1un+erYpTzfrXl55h5a71ojp4KWVqAII13wg27mXmnV0s7zSA rdZONCc+Klv0Wd4jzbOSPx3vqzV+UjuYDTVPpYRgJqVWbnsqcMsF43YdNSFKRc5xeydl jF7lMQSszCnUVeFFnNbdZuw5wcwa6lUwljXrff2Iu8J5HIV67WvZPxiQpPvxiFY51U0R ICB0ks94pKCIQRnIcsiHgq5hYGOjggaySieB43MEpZetmOjeChCf0pl88H6Q/K1W5jWW 5d8K4DBDIg0jtmhj/pkSHqj8YIf+E9gqmPPdeMdsjUtK31E5AgFCgY664Ml8eYdpw4JN gbig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=TD8TvRi3Awnjj9si6im53QF94XjtzWP2SwTHj3bRcyw=; b=slgzK2IinKgfK30ye6HhVU2BHTQhHNGPW6mcecN/2Jf40rBts8nsLoy1cF5+XJoXeO /KC7EslaoIlHVk7/c6B9DCrfY2iupKWtoKgt8AEvqkLRgR/oodLeVOJFDxzYVf1/5+Yd cDDElsk/QTmwn/jXBuc0+5BWmk2EcJqXXWtdgOhQYYXK7sbP6pyWHKol37oanw166+IL DGz5x0EHYotL5Wr1NzFzrQuZ8bvxmYrmCHIqoognlT3f4+5iByzbIUVcPkipllchtntk 7g+gMrBBQCiDWbso4lkGL0QndxjsKeE/hX6HJvOqcmhb0Ulg5aGtGO45pVGwc+4uZUo3 SBww== X-Gm-Message-State: AOAM5313wSVcAyAHY4i0JxvjxJFjZpCY4Fav23yB1l+BrVozpzMCA8ia AiFE/IQ4NI4dOrahxp9Qc52uRlGv X-Google-Smtp-Source: ABdhPJzEvntbQLDBR5Lh3XTTy1JCT1At/9f8e15WhJJ8rsJoBk+mUhxmerBznrwp1jbZjBfIXWEB8w== X-Received: by 2002:a1c:e20a:: with SMTP id z10mr4036324wmg.63.1592490495491; Thu, 18 Jun 2020 07:28:15 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id o10sm3722051wrq.40.2020.06.18.07.28.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Jun 2020 07:28:14 -0700 (PDT) Sender: DG Subject: Re: RFC: Automatic setup for bug-reference-mode To: Juri Linkov , Stephen Leake , emacs-devel References: <87r1uihtsu.fsf@gnu.org> <87h7vd3cbs.fsf@gnu.org> <87tuzdsj8d.fsf@gnu.org> <87tuzd755z.fsf@gnu.org> <86o8pkabzh.fsf@stephe-leake.org> <87pna0mxxw.fsf@gnu.org> <87ftatcr48.fsf@mail.linkov.net> <87mu50c3gy.fsf@gnu.org> <59a15059-2ba5-5fcb-c6aa-3c9877394e1d@yandex.ru> <87r1ucwl3c.fsf@gnu.org> From: Dmitry Gutov Message-ID: <6e27103d-1bda-3076-6ff7-65c23eb1c964@yandex.ru> Date: Thu, 18 Jun 2020 17:28:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87r1ucwl3c.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=raaahh@gmail.com; helo=mail-wm1-x333.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 14:28:19 -0000 On 18.06.2020 16:37, Tassilo Horn wrote: > Well, if you got the remote "", I still think that default-directory was > set to some non-git repo directory at that time. At least > > ⯠git config branch.master.remote > > returns successfully but empty in such a directory. If was "" (still is) when the current branch has no configured remote. Which is a regular occurrence in development process based on feature branches. From MAILER-DAEMON Thu Jun 18 11:22:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlwMe-0005zo-0D for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 11:22:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlwMd-0005yu-1t for emacs-devel@gnu.org; Thu, 18 Jun 2020 11:22:03 -0400 Received: from mail-qk1-x72c.google.com ([2607:f8b0:4864:20::72c]:45278) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlwMb-0004AR-CY for emacs-devel@gnu.org; Thu, 18 Jun 2020 11:22:02 -0400 Received: by mail-qk1-x72c.google.com with SMTP id q8so5838364qkm.12 for ; Thu, 18 Jun 2020 08:21:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=5c+Bs0Sdz0efneTbqvtyIe4SmP8ojuUtzpcTXl7Jgvo=; b=HEOchd+J8TynuYZ+FgYCjD0PuKoGwSDNSO19FYq8tmNUv6E76J75pmbzQsV1YjMMEJ WXoeopdqL8s41YeQkopqGX7CfTbq/Ve4R0BfkTZMKRyxXOuDR8F+VwDU4hVSGSJJJLjS 3EABSrMBoR5OKhtPfRJar3K+P6naCGuDDgC2M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=5c+Bs0Sdz0efneTbqvtyIe4SmP8ojuUtzpcTXl7Jgvo=; b=iDr84ctA7rZZTEbMkmZlxmi5m2mVsfUZs9KO6SyY6Dm44Eqn0yVUKdWz2xvOXzapMT Cx1btvSQQsakr04jgFPaL3CcO5P8o1jfPOgPglKASeXS23tWqPkqF4+d0r3+5kN8ZO0e rLX23jP3InN9LSK5p0FwqhC76vfeii8hXpHNjX6EPZdeP13TjZCUJHe7bPWJqxhQJGs7 izMGFjKV/XR1h3epDgweBMFhI/Mf3CJFddl5Q19ej1JD6hOYGOmGZkPUYcirhkG2ZqYU ESxFuhS0TYt+0CEuiO5oo7ovqr/mR+pzcZNbIwh9onS320v5E9VZgJu8jULbY87RK/QE 8L7g== X-Gm-Message-State: AOAM533KvLek5wv53xtwZJKPdkjIKuZbwiL/YUoVpr0shodq1QuAKv30 xNrY4RKcds2xEuiWeiFbXTJKeOUhGepwGA== X-Google-Smtp-Source: ABdhPJwQPh0Jsf34ckQHuWIBJTzFs2PCJsEVeY7RhcmeLZGXJ3Qa31pkpvaWnbmmWo07ywnbSqJGFw== X-Received: by 2002:a05:620a:21d4:: with SMTP id h20mr4271517qka.288.1592493717463; Thu, 18 Jun 2020 08:21:57 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id k10sm3046611qkh.47.2020.06.18.08.21.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jun 2020 08:21:55 -0700 (PDT) From: Ted Zlatanov To: emacs-devel@gnu.org Subject: Re: Bug-reference auto-configuration Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <87d05xxwhi.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Thu, 18 Jun 2020 15:21:54 +0000 In-Reply-To: <87d05xxwhi.fsf@gnu.org> (Tassilo Horn's message of "Wed, 17 Jun 2020 22:34:17 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::72c; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x72c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 15:22:03 -0000 On Wed, 17 Jun 2020 22:34:17 +0200 Tassilo Horn wrote: TH> I'd welcome some more testing. You just have to enable TH> `bug-reference-mode' or `bug-reference-prog-mode' and cross fingers, TH> e.g., TH> ;; Enable in prog mode buffers. TH> (add-hook 'prog-mode-hook #'bug-reference-prog-mode) TH> and (for Gnus users) TH> ;; Enable in Gnus summary and article buffers. TH> (add-hook 'gnus-summary-mode-hook #'bug-reference-mode) TH> (add-hook 'gnus-article-mode-hook #'bug-reference-mode) It looks good in my testing. Would this be the right use-package invocation and hooks? (use-package bug-reference :hook (prog-mode . bug-reference-prog-mode) (gnus-mode . bug-reference-mode) (text-mode . bug-reference-mode)) Thanks Ted From MAILER-DAEMON Thu Jun 18 11:59:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlwxB-0002ZS-C0 for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 11:59:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlwx8-0002UG-DX for emacs-devel@gnu.org; Thu, 18 Jun 2020 11:59:46 -0400 Received: from mail-qk1-x72b.google.com ([2607:f8b0:4864:20::72b]:36956) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlwx6-0004Lx-JR for emacs-devel@gnu.org; Thu, 18 Jun 2020 11:59:46 -0400 Received: by mail-qk1-x72b.google.com with SMTP id b27so6033300qka.4 for ; Thu, 18 Jun 2020 08:59:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=/C2vyyifTgjd3D4XoUui5nBucpNqovaBWR401ITGclQ=; b=ld7IgCMC4WMHoV1pS5LXEKFbLt+VakmeDxbsUVagLDPI/4Zw2TH2yjAoDBeREhV2i5 KsRXyt2RsHYQeZYrc3RpybedRKdoaF0cwaMLllJ4fCVlUCdH1lo9i2M70jIVSPY7iK92 liOQ/dJkDt4WxUoO8GBHUjg9cyeyheEFL+nnbAkEV0c/GEwEi9hk8PuA6JNSwagFeTtu HK/N2m04ACxh+osLbjsfq3S4khtYWkXw2ibxhH9rKzJeqtMWWC1/6Aj6Wn8xmWskKeEV 7qFSt4gcQwXL3HZB+4wJT1vmUMlc3lruam0nLZanVSXfLOGDubbvJmiPB/MzjVGD1oLB D9tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=/C2vyyifTgjd3D4XoUui5nBucpNqovaBWR401ITGclQ=; b=ZOYOK6JnZ3iOztjdvXwv2fbYUYyML8nWqwPCAFjVbnBweoOmC5JPXSR+d4E15Ufjy0 GxK5391Qw5c9AhncoTuiNH/27jjpgMahBSRvH2WeF5g1Ow+iaDTs1ZtwKHSsCkptBeyV usA1EemOzfRJ4QUGhkOz48G1nIENU4q2in1YfvW1Wzrqic3BVpXyqOWPxOHhsYDb+b53 OXQcTQhdRnUKNzQg3ku1hu3Ie/prP3yv+jIXWboTYElTtOqF3GoQnpErJH3GDP0XQZ8h kWuuv6/hJPnd9o1pg2FNDEIKscWv5EOYVR2CM9jrXG1HnI30F5gU2RzMLcDBxLrzKflb +/Pg== X-Gm-Message-State: AOAM530+YJNjFl/uajEeN6REQU8iyNGOwsF/lxftUR1BevT53JlNV9ZR zoGIwzl4DXeRFtGGPRj9fOEU4g== X-Google-Smtp-Source: ABdhPJz/ehLdpMntHEG80KzeBE0ye+p2xtJo9ezMIzkxz7IvLcepMpyign0sB9Crr9DXH4kwjd77Dg== X-Received: by 2002:a05:620a:950:: with SMTP id w16mr4616501qkw.42.1592495983294; Thu, 18 Jun 2020 08:59:43 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id z194sm3376836qkb.73.2020.06.18.08.59.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2020 08:59:42 -0700 (PDT) From: "Basil L. Contovounesios" To: Richard Stallman Cc: emacs-devel@gnu.org Subject: Re: Support for multiple batteries References: <87tuzhy49m.fsf@tcd.ie> <874krfnq47.fsf@tcd.ie> Date: Thu, 18 Jun 2020 16:59:40 +0100 In-Reply-To: (Richard Stallman's message of "Sun, 14 Jun 2020 09:40:13 -0400") Message-ID: <875zbol5zn.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::72b; envelope-from=contovob@tcd.ie; helo=mail-qk1-x72b.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 15:59:46 -0000 Richard Stallman writes: > > This can be perceived as a regression > > on multi-battery systems because battery-upower currently assumes a > > single battery, whereas the previous defaults of battery-status-function > > on modern GNU/Linux systems (battery-linux-sysfs and > > battery-linux-proc-acpi) support multiple batteries. The patch in [5] > > adds support for multiple batteries to battery-upower as well, so that > > it can remain the default backend when applicable. > > It sounds like that could make it work again for me. Would you > please tell me when it is installed, so I can try it? I have now installed the patch[1] for bug#39491 on master. Please give it your worst and let me know of any problems you encounter. [1]: Improve battery.el UPower support 453d30d92c 2020-06-18 13:11:17 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=453d30d92cbf940567869d4705c1fcfe57725825 -- Basil From MAILER-DAEMON Thu Jun 18 13:49:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlyfh-0004bu-6w for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 13:49:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlyff-0004bk-L8 for emacs-devel@gnu.org; Thu, 18 Jun 2020 13:49:51 -0400 Received: from sender4-of-o57.zoho.com ([136.143.188.57]:21767) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jlyfd-0001FQ-OM; Thu, 18 Jun 2020 13:49:51 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592502585; cv=none; d=zohomail.com; s=zohoarc; b=YkrlAvbZAUCu53D9FeNsilsddrYhSrkoXQ2bYPdusUlGXIqqNHQbiswfNu9d/1pN8fnibxf4bm+kGjoGkjzkOhPmfsj58L7BSQv3zisSVE3aZf+oLzZb3PDkZsmSsv1YsiP3nciKErFH7SOK6GBnva2Y5ZnX4F8vTmdff0mQ450= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592502585; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=xAA6eBBKyPA+F4TcdEC4Bq9O7LQzMPtgRjHiltrGXK4=; b=PDd/BQ1OVJc+ZmwLJmpbK7CDJTFuF0vpzLTe8LhpXSPlHhnPiTu4jO95vSs6gw7YcpvrgmAwPomVf2VOF6uoDqOgC+ZmHA7H3SlbcS1W61Z+VNamDuoHka5Yh1NdphZ91oWZMjSJZ9MLzuQ9IrBq2RyduOYtkwkFztwKnEq3ap8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592502585; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Cc:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=xAA6eBBKyPA+F4TcdEC4Bq9O7LQzMPtgRjHiltrGXK4=; b=CVNg6/zr5DqcxmoNpYlWuHaRYehX28Q9cZ2s5n+rdhOU1gC1KIsrtry2KDi+/X4C e1cArVWbSeodwmzj+2bzMUhf5mimmZPHD6x2QrJ8ld96AZaAa+6AQQigUldwmQFzvPk xaP6fGhF85eU4ZKnegNW2QrxeDAjW/wp5hvEC/pQ= Received: from localhost (p54ad49f5.dip0.t-ipconnect.de [84.173.73.245]) by mx.zohomail.com with SMTPS id 1592502580072351.7336804742879; Thu, 18 Jun 2020 10:49:40 -0700 (PDT) References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: Konstantin Kharlamov , Eli Zaretskii , Stefan Kangas , Dmitry Gutov , emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers In-reply-to: <874krex73o.fsf@gmail.com> X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Thu, 18 Jun 2020 19:49:35 +0200 Message-ID: <87eeqctgb4.fsf@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.57; envelope-from=rekado@elephly.net; helo=sender4-of-o57.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 12:45:19 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 17:49:51 -0000 Jo=C3=A3o T=C3=A1vora writes: > Konstantin Kharlamov writes: > >> Oh, sure I can be mistaken. I see you replied to Dmitry's email, I had a= follow- >> up on it. Does my follow-up mail change your opinion, or perhaps do you = have >> some example in mind that a good commit message without the list would n= ot >> solve? > > I might have read it. I'm not saying good commit messages are > impossible without the summarizing list; I'm just saying it's a good > thing to have, something I've grown accustomed to. When composing them, > they're a good exercise in self-review. But of course there's more ways > to skin a cat. This just happens to be the way we use here. > > It's not "for fun". Of course is a mental cost in composing them, > especially if you don't do it often and use the friendly C-x 4 a > shortcut. But there is a gain, too. I=E2=80=99d also like to note that this list can be invaluable when rebasing commits and resolving conflicts. It=E2=80=99s not strictly necessary (just= like other parts of a version control workflow are not strictly necessary), but it can serve as a sanity check in a time when the diff is not authoritative as it is in flux. An explanation as to why things were done is also very useful in those cases, but an overview on the *conceptual* changes at the procedure level (rather than the plain diff that=E2=80=99s only concerned with lines = and not with the context in which the changes occurred) provides additional valuable information that the commit diff itself cannot provide. You can, of coures, browse the code with the diff applied and without and see the full context in which those lines were changed, but even with a nice interface like the one magit provides that=E2=80=99s much more = work than looking at the commit summary. --=20 Ricardo From MAILER-DAEMON Thu Jun 18 14:38:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jlzR0-0005Sz-HZ for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 14:38:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlzQy-0005RO-TB for emacs-devel@gnu.org; Thu, 18 Jun 2020 14:38:44 -0400 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]:46994) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlzQx-00027W-84 for emacs-devel@gnu.org; Thu, 18 Jun 2020 14:38:44 -0400 Received: by mail-qv1-xf31.google.com with SMTP id cv17so3228537qvb.13 for ; Thu, 18 Jun 2020 11:38:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=FOQah0Aw5+osgGobQtrDeRNuVYplu7B32RucO7eRFC8=; b=Q/xiObjBNR5KBZNbiY8K+AFNrL8XChG0FyseDH7t/5kvjUgP7+engn3MUmzF5krPEg jkza4wFtfNJrWAFVIv4Oc4zAx2BXc4bcq8AMGY/RcOto4oWQ04GZFqkaQzdEASuU/VVL ZA3KjCWnBtqmoeL+KCt/JtPIqMZ7leIXkeGXg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=FOQah0Aw5+osgGobQtrDeRNuVYplu7B32RucO7eRFC8=; b=tX8Ei7zzJcS9HIhBHYmn8gBTE2yxxGxArt0Ysx+1zVKPMx5XmR45+Nyx+WV9f0c8KX NZ5Mrl4Ct4prBRmTAJsXQec9SFon2K5/7FH2tZx4+dPAt76xIwFt3yDezFe7NZapzK+o qJMxUSiSMnJZWIxYeziuDXfRWwtgZVEE8lgVB+eeSx9Zu2fIsyJp25vk4H56Wqny7X63 MVyKuELAazu36FvEWY4PmVPqtml3RPrhZ/7Lf+Wt8poekEUaDNFkUTVYWlC8yBn9RmNB gR+qZznuBJQ3SMSvnqZ94gLKhdm7vR74xDL1pBT4N2GvysPtfQq+M/q5pCHeJjCfHq1K +X+Q== X-Gm-Message-State: AOAM530aDBuaEKOHEfk01zvk7Ss6gRl3zdtDi0MVnGYew1m8v292qWI/ ggYNIfiX2lkfAPejvCG4n6kbAQGTcU0VEQ== X-Google-Smtp-Source: ABdhPJxFvEuoVfqk7iBKONAqSh047YDW18NO+r8scA/pTl+PUK7Myia63TyiDR3azISxtKta3N07qw== X-Received: by 2002:a05:6214:1269:: with SMTP id r9mr5165510qvv.85.1592505521591; Thu, 18 Jun 2020 11:38:41 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id v14sm3996245qtj.31.2020.06.18.11.38.40 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jun 2020 11:38:40 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel , emacs-devel@gnu.org Subject: Re: questions about correct reveal-mode usage to hide passwords Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4973bec9-0abf-8f55-0b60-0879b6fe1fa7@gmail.com> <4krg9s2y.fsf@lifelogs.com> <7dw6naqb.fsf@lifelogs.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Thu, 18 Jun 2020 18:38:39 +0000 In-Reply-To: <7dw6naqb.fsf@lifelogs.com> (Ted Zlatanov's message of "Tue, 16 Jun 2020 18:09:48 +0000") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2607:f8b0:4864:20::f31; envelope-from=tzz@lifelogs.com; helo=mail-qv1-xf31.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 18:38:45 -0000 On Tue, 16 Jun 2020 18:09:48 +0000 Ted Zlatanov wrote:=20 TZ> Let me know if you have strong objections or any suggestions, otherwise TZ> in a day or two I'll document and push this patch. I've split up my commit into 1) a minor bugfix (preexisting), 2) the prog-mode prettify-symbols-mode changes, and 3) the auth-source-reveal-mode implementation and documentation. All in branch scratch/tzz/auth-source-reveal-mode The docs in doc/emacs/programs.texi should be updated with the prettify-symbols-mode changes, but I'll hold off because it may be better to move them out into a library. Right now it's an API but still tightly bound to prettify-symbols-mode in naming and behavior. Cl=E9ment or anyone else interested, could you please review? Thank you Ted From MAILER-DAEMON Thu Jun 18 15:26:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0BB-0004vv-DX for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 15:26:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41212) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0B9-0004vj-CZ for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:26:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46411) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jm0B9-00028m-2s for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:26:27 -0400 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]:39621) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.82) (envelope-from ) id 1jm0B8-00036B-9Q for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:26:26 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 9C4CB27C0054 for ; Thu, 18 Jun 2020 15:26:25 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Thu, 18 Jun 2020 15:26:25 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejgedgudeflecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufhfffgjkfgfgggtsehttd ertddtredtnecuhfhrohhmpefvrghsshhilhhoucfjohhrnhcuoehtshguhhesghhnuhdr ohhrgheqnecuggftrfgrthhtvghrnheptdelieffkeeuffduueeffefhiedtjeeutdeuve egfffgtdejleekheegkeetkeevnecukfhppeelfedrvdefiedrudefhedrleejnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhrnhdomh gvshhmthhprghuthhhphgvrhhsohhnrghlihhthidqkeeijeefkeejkeegqdeifeehvdel kedqthhsughhpeepghhnuhdrohhrghesfhgrshhtmhgrihhlrdhfmh X-ME-Proxy: Received: from thinkpad-t440p (p5dec8761.dip0.t-ipconnect.de [93.236.135.97]) by mail.messagingengine.com (Postfix) with ESMTPA id EF0F6328005A for ; Thu, 18 Jun 2020 15:26:24 -0400 (EDT) From: Tassilo Horn To: emacs-devel@gnu.org Subject: Re: Bug-reference auto-configuration References: <87d05xxwhi.fsf@gnu.org> Mail-Followup-To: emacs-devel@gnu.org Date: Thu, 18 Jun 2020 21:26:22 +0200 In-Reply-To: (Ted Zlatanov's message of "Thu, 18 Jun 2020 15:21:54 +0000") Message-ID: <87y2okfa5d.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 19:26:27 -0000 Ted Zlatanov writes: Hi Ted, > TH> I'd welcome some more testing. You just have to enable > TH> `bug-reference-mode' or `bug-reference-prog-mode' and cross > TH> fingers, e.g., > > TH> ;; Enable in prog mode buffers. > TH> (add-hook 'prog-mode-hook #'bug-reference-prog-mode) > > TH> and (for Gnus users) > > TH> ;; Enable in Gnus summary and article buffers. > TH> (add-hook 'gnus-summary-mode-hook #'bug-reference-mode) > TH> (add-hook 'gnus-article-mode-hook #'bug-reference-mode) > > It looks good in my testing. Would this be the right use-package > invocation and hooks? > > (use-package bug-reference > :hook > (prog-mode . bug-reference-prog-mode) > (gnus-mode . bug-reference-mode) > (text-mode . bug-reference-mode)) Oh, I didn't know use-package's :hook functionality. But anyway, that's exactly what I do, too. Bye, Tassilo From MAILER-DAEMON Thu Jun 18 15:29:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0Do-0007uX-99 for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 15:29:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42504) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0Dm-0007tp-BV for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:29:10 -0400 Received: from mail205c50.megamailservers.eu ([91.136.10.215]:54040 helo=mail193c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0Dj-0002cF-1s for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:29:09 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592508540; bh=/N13I9TL1p8HjthyASnkSY/4EsMExCXnSnvu0xWhHbo=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=UrNE1zzX6yxZuwBZCT7brK6FLdZWk0UGTFcYIk0MQynzx0w95CUHkPL5FZMbmW7+o h4BiQ2BssSr464rjXOFzb9G69obPKW3nMQ/9AUPT1H94XWPGCzAdZBXUNfEbERmSDH 3n3FoLc6YXeWip787fkxj4qAsgQNOhwLqNrGUnb4= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail193c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05IJSuAS026913; Thu, 18 Jun 2020 19:28:58 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <86v9jwksod.fsf@stephe-leake.org> Date: Thu, 18 Jun 2020 21:28:55 +0200 Cc: emacs-devel Content-Transfer-Encoding: quoted-printable Message-Id: <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> To: Stephen Leake , Yuri Khan , Drew Adams , tomas@tuxteam.de X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F26.5EEBC017.0054, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=cM2eTWWN c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mnehEr8qY2BUJs-1iscA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.10.215; envelope-from=mattiase@acm.org; helo=mail193c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 15:29:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 19:29:10 -0000 Thanks to those who replied -- the originally proposed 0.325 luminance = limit seems to be fairly uncontroversial and can be changed if evidence = indicates that it was badly chosen. Most of all, the value seems to work = well across all platforms and a sufficient variety of equipment, which = is the important part. Special thanks to Yuri for helping me confirm that the theoretical 50% = lightness of luminance 0.18 wasn't necessarily an optimal value in this = case. Trust my own eyes, but verify! The constant has now been given a (provisional) name, for extra clarity = and ease of adjustment. From MAILER-DAEMON Thu Jun 18 15:38:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0MO-0005i1-JH for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 15:38:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44910) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0MN-0005bd-5e for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:38:03 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:55184) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0ML-0004I6-5f for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:38:02 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05IJbukX139137; Thu, 18 Jun 2020 19:37:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=ad7ygZvetPHmVyTqe4+tYOx9yxPie91BKKUEX+k464Q=; b=Pif4TCo7JUtAhs9byrYXGvvXud4LQ0SXwChIPR3Xk5E4VWBYSehOBQEtAzdceb7SJOIv sQSVQ2YcZEjU+dHLnXSmIk4CToELM4IwPrfEvmvk4M6OCnc/uxRhiKU1myzOxyMSZFLo us/EhH22BWIF2xnsuaTIH94HzZquoU1zvzBe5+tcYdB5bBKHFQfalauUFUijn8RpbVhp U+2kdWQ3GCS6JHSmYeyQbU7W6mAeMWn7GVlaVKqM6etcZANv6lqAPU7YceubwZyu0vLN ebG/gRkMI9nAExsoqtX3FTm/4DdR5+RmL8inlylCC1u8J/SE2ZQw0uafYPF3UmA1Vw2p 1g== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31q66034aa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 18 Jun 2020 19:37:56 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05IJXIXo082143; Thu, 18 Jun 2020 19:35:55 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31q66t43jq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 18 Jun 2020 19:35:55 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05IJZsTf014634; Thu, 18 Jun 2020 19:35:54 GMT MIME-Version: 1.0 Message-ID: Date: Thu, 18 Jun 2020 12:35:52 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?iso-8859-1?B?TWF0dGlhcyBFbmdkZWflcmQ=?= , Stephen Leake , Yuri Khan , tomas@tuxteam.de Cc: emacs-devel Subject: RE: master 68ae6fa: Improved light/dark colour predicate (bug#41544) References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> In-Reply-To: <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9656 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 bulkscore=0 adultscore=0 phishscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006180148 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9656 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 suspectscore=0 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006180148 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 15:37:58 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 19:38:03 -0000 > Thanks to those who replied -- the originally proposed 0.325 luminance li= mit > seems to be fairly uncontroversial and can be changed if evidence indicat= es > that it was badly chosen. Most of all, the value seems to work well acros= s > all platforms and a sufficient variety of equipment, which is the importa= nt > part. >=20 > Special thanks to Yuri for helping me confirm that the theoretical 50% > lightness of luminance 0.18 wasn't necessarily an optimal value in this c= ase. > Trust my own eyes, but verify! >=20 > The constant has now been given a (provisional) name, for extra clarity a= nd > ease of adjustment. Not to belabor this, and I don't recall all that's involved. But if there are different eyes, screens, whatever, would it make sense to use a defvar, or even a defcustom, instead of a defconst? Why decide this definitively at design time? Does it make sense to hard-code it? If the question isn't useful, please ignore. From MAILER-DAEMON Thu Jun 18 15:41:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0PW-0001nG-9Q for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 15:41:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0PV-0001lt-0v for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:41:17 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:34020) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jm0Oy-0004gT-AH for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:41:16 -0400 Received: by mail-wr1-x429.google.com with SMTP id r7so7353352wro.1 for ; Thu, 18 Jun 2020 12:40:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=xMxyC4e/eLH6Jn9kqrTv0ViLyDZhoUQeNEWKx0bnH74=; b=Uv9PjHeME5xtUJ/p3HhlsnrNVW3vecdpS+aSfsYJXVFHbn/Fc4sqnT6T9BDThjD8Sp kEltnZW2bNPtjnlBALlDIwf4fgqE2CY8MufSMAFqHSkH3FLLKWHoVqilbCyPflvJqH5g ljj2+sALfsC7lrUfEv4XToFE5CYu20b6f/N7+X0fYMLqKFGPv+vLewuXBE9a7AoAv1Sa Y7w0wl/TAkv9Mg9R+Ot6Ilk3skWYpyNoEn892cQKn8adwLamuizEHzeAERR8T5xVHS89 i5k1Z09pxvD+mVB7KyioAg+Trma1mutVQ0IcUvio1h+PdXo/nneMw65tjmpLUkrCG/j6 QQRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=xMxyC4e/eLH6Jn9kqrTv0ViLyDZhoUQeNEWKx0bnH74=; b=BC8VZAcCjIyu0W3AxR7YOe3bf7GTFKwaG8/Z1WfM/DZwki7QwlAHZOV6hE3gznIFa3 Jg5KYbWXh4yldlrncJDQ4JWnU+Kk1IpGk3qp407/J8jNy8RMtrpUMP54/6c407QHTKCG kvKEkSNScCNKY1C6yUcL6Ucvd97pq87anEN6Hd4XMZK6TGpLhSVP0nHkXMxWX06TJXky pLYWLAdHLDhcrciZdagBbH8cHeGQuAOZzfTWubCoNT1dGUCQSZmbDzl08Gy+uP0BeLOQ TNkOFZUO5qRL4eqiaANDmmUt6cQLfLDyYB9nmhKVPmub/xsQSoc9ScUlTSspblSfKJUS 14OA== X-Gm-Message-State: AOAM5301QKXvd9WekeqZzSUyvBGkyM9ojmNnJo2/5ErIHoBOzpx8surP BSH5Uu4xwIGCU6ypDr1M9pFveg== X-Google-Smtp-Source: ABdhPJwFP2qNDhPpjmS7PF7KEEVejYvT66k8c5bsFFkbGrsDJ0oIgsDDfYvpzIk5LOXwTUX4P+Q5LQ== X-Received: by 2002:a5d:6751:: with SMTP id l17mr70501wrw.179.1592509242413; Thu, 18 Jun 2020 12:40:42 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id y25sm11562489wmi.2.2020.06.18.12.40.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2020 12:40:41 -0700 (PDT) From: "Basil L. Contovounesios" To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: Stephen Leake , Yuri Khan , Drew Adams , tomas@tuxteam.de, emacs-devel Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> Date: Thu, 18 Jun 2020 20:40:40 +0100 In-Reply-To: <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Thu, 18 Jun 2020 21:28:55 +0200") Message-ID: <87imfo5fif.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::429; envelope-from=contovob@tcd.ie; helo=mail-wr1-x429.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 19:41:17 -0000 Mattias Engdeg=C3=A5rd writes: > Thanks to those who replied -- the originally proposed 0.325 luminance li= mit > seems to be fairly uncontroversial and can be changed if evidence indicat= es that > it was badly chosen. Most of all, the value seems to work well across all > platforms and a sufficient variety of equipment, which is the important p= art. > > Special thanks to Yuri for helping me confirm that the theoretical 50% li= ghtness > of luminance 0.18 wasn't necessarily an optimal value in this case. Trust= my own > eyes, but verify! > > The constant has now been given a (provisional) name, for extra clarity a= nd ease of adjustment. Thanks! Could the constant's docstring please follow the convention described under (info "(elisp) Documentation Tips") of keeping the first sentence on a single line? --=20 Basil From MAILER-DAEMON Thu Jun 18 15:58:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0ft-0003zQ-4x for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 15:58:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0fr-0003sB-Ad for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:58:11 -0400 Received: from mail1466c50.megamailservers.eu ([91.136.14.66]:54518 helo=mail268c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0fo-0007NM-NN for emacs-devel@gnu.org; Thu, 18 Jun 2020 15:58:11 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592510284; bh=GzNo/He3xMT14RbmxOqCcfHNI4pAx/77fIcZDjTv074=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=hP13xepm+38Cn85jc/2s75co7QSlmv1lP5oF2fywRbmH6p+xD3P+QyHSl+f/MKlx3 Ek3eCdlNgpiE9S/zN1mikd0W0JXIH/3PhI8TbYrhWnReH/Uc//wRgN1inK2k3zItqx AKd1GGlywO2igoZSbZ4DxApTepxAljFmnrL1xBIE= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail268c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05IJw1SO029687; Thu, 18 Jun 2020 19:58:03 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87imfo5fif.fsf@tcd.ie> Date: Thu, 18 Jun 2020 21:58:00 +0200 Cc: Stephen Leake , Yuri Khan , Drew Adams , tomas@tuxteam.de, emacs-devel Content-Transfer-Encoding: 7bit Message-Id: <42A17A79-0939-4281-87F5-8E25A92C3136@acm.org> References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> <87imfo5fif.fsf@tcd.ie> To: "Basil L. Contovounesios" X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F17.5EEBC6C8.001E, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=BZ+mLYl2 c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=ZHysC7Xnna8XCFmMk8sA:9 a=CjuIK1q_8ugA:10 a=BhrJvqtl3CMA:10 Received-SPF: softfail client-ip=91.136.14.66; envelope-from=mattiase@acm.org; helo=mail268c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 15:58:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 19:58:11 -0000 18 juni 2020 kl. 21.40 skrev Basil L. Contovounesios : > Thanks! Could the constant's docstring please follow the convention > described under (info "(elisp) Documentation Tips") of keeping the first > sentence on a single line? Certainly -- improvement made and pushed. From MAILER-DAEMON Thu Jun 18 16:04:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm0mD-00006N-0C for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 16:04:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0mB-00005r-1P for emacs-devel@gnu.org; Thu, 18 Jun 2020 16:04:43 -0400 Received: from mail1455c50.megamailservers.eu ([91.136.14.55]:43858 helo=mail266c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm0m8-0008VJ-NQ for emacs-devel@gnu.org; Thu, 18 Jun 2020 16:04:42 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592510674; bh=xiOoCLM4KV1aQFa66GR8K2Qw6fWgRZq+yNB6Zlfjutg=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=R09E3//q3Q4Pi7x7pecPLjKJoMLgr9ODJDmglzxK3wHafcf/a7o9+Klu7QOFbP1Sc /h9WUMcx6DEdWWxUsL6a95mVgmwZyJ53UDbeUQC4TpQXN4vcEA+8qXLCz1w1FSt2gG 7Ui3xHVDNXlgWfKsLuJ6d9K+HMDjEbNvoW7LVuQo= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail266c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05IK4V7L030993; Thu, 18 Jun 2020 20:04:33 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= X-Priority: 3 In-Reply-To: Date: Thu, 18 Jun 2020 22:04:30 +0200 Cc: Stephen Leake , Yuri Khan , tomas@tuxteam.de, emacs-devel Content-Transfer-Encoding: quoted-printable Message-Id: <0F5723EE-113E-4D3B-9BD8-D5327B3E87A1@acm.org> References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> To: Drew Adams X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F23.5EEBC839.001F, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=A5MSwJeG c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=yPCof4ZbAAAA:8 a=B_gc3-US2GIWvbO2om4A:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.14.55; envelope-from=mattiase@acm.org; helo=mail266c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 16:04:37 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 20:04:43 -0000 18 juni 2020 kl. 21.35 skrev Drew Adams : > But if there are different eyes, screens, whatever, > would it make sense to use a defvar, or even a defcustom, > instead of a defconst? Why decide this definitively > at design time? Does it make sense to hard-code it? Well, it isn't really hard-coded in the sense that it cannot be changed = later on, or be turned into a defcustom; both perfectly possible. = However, I'd rather not get carried away and add yet another = customisable variable before we have more substantial evidence that it = would make sense to do so. From MAILER-DAEMON Thu Jun 18 16:32:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm1DV-0000UK-5T for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 16:32:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58456) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm1DQ-0000SL-Qx for emacs-devel@gnu.org; Thu, 18 Jun 2020 16:32:53 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:39200) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm1DK-0005K8-Ov for emacs-devel@gnu.org; Thu, 18 Jun 2020 16:32:52 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05IKW10h030991; Thu, 18 Jun 2020 20:32:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=PZ30oRxDtHMAfFLm9i/5bke/45f6ffm2Hp2SBx6cg4s=; b=f059yR0tOabXsWf35eBCVjfQIW0+92843dhC1bbI2/QvrAmqkD3Wq5PECsWGkdxr0z6a pB+BinxtOsjQmKDAn39OteTa/Qn4TDky4hxjc4T1Yuk8qzC8loHXqh8RCP7h1ZGjzM7K ohk+MvANKlXJYRnWn8ofHQO81O/oIrFt04XGrZqIjWjlEx1BFofcg1Si9N+qcY4T5gFF NcoPsdnmwK4LLGLMJwU9OJgTc/mloJ2AyRCrhZ0we5479KiWcQdmFO8enRqUKNtkOfBI klZiPOdCxD/o9irV4ikyT0xrVhc6FmPDpEkq++miqNz0/ttS/LP/1Ps+q98kxj+vt8rA Rw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 31q6603bq1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 18 Jun 2020 20:32:40 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05IKTIBD069482; Thu, 18 Jun 2020 20:32:39 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 31q66t88a5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 18 Jun 2020 20:32:39 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05IKWbIH016802; Thu, 18 Jun 2020 20:32:38 GMT MIME-Version: 1.0 Message-ID: Date: Thu, 18 Jun 2020 13:32:37 -0700 (PDT) From: Drew Adams Sender: Drew Adams To: =?iso-8859-1?B?TWF0dGlhcyBFbmdkZWflcmQ=?= Cc: Stephen Leake , Yuri Khan , tomas@tuxteam.de, emacs-devel Subject: RE: master 68ae6fa: Improved light/dark colour predicate (bug#41544) References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> <0F5723EE-113E-4D3B-9BD8-D5327B3E87A1@acm.org> In-Reply-To: <0F5723EE-113E-4D3B-9BD8-D5327B3E87A1@acm.org> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5005.0 (x86)] Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9656 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=810 bulkscore=0 adultscore=0 phishscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006180156 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9656 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 clxscore=1015 mlxlogscore=836 suspectscore=0 impostorscore=0 cotscore=-2147483648 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006180156 Received-SPF: pass client-ip=156.151.31.86; envelope-from=drew.adams@oracle.com; helo=userp2130.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 15:37:58 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 20:32:54 -0000 > > But if there are different eyes, screens, whatever, > > would it make sense to use a defvar, or even a defcustom, > > instead of a defconst? Why decide this definitively > > at design time? Does it make sense to hard-code it? >=20 > Well, it isn't really hard-coded in the sense that it cannot be changed l= ater > on, or be turned into a defcustom; both perfectly possible. However, I'd > rather not get carried away and add yet another customisable variable bef= ore > we have more substantial evidence that it would make sense to do so. A defvar would be fine. defconst explicitly signals the intention that neither users nor code should change the value. That's the wrong signal, I think. From MAILER-DAEMON Thu Jun 18 17:33:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm29i-0007Aj-SQ for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 17:33:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm29h-00078s-Jw for emacs-devel@gnu.org; Thu, 18 Jun 2020 17:33:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:33421) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm29f-0006tH-AP for emacs-devel@gnu.org; Thu, 18 Jun 2020 17:33:04 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 91CB244193D; Thu, 18 Jun 2020 17:33:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 62452441936; Thu, 18 Jun 2020 17:33:00 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592515980; bh=FE+UmOnAFDOhD7L8QLXXC2k3RYgLkR4XDqG3F+OVqAU=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=EpqGIuEO1IFgAEAxZGmofNGe+XRAApyz0BLj0uxBueMgFJV4wgADSm+sRpsNN3hx4 RzL4h/mEvrWKo9ZMYUIbxFUC0Fr3YVTisD7yawSWdkga1p74erJl8l0ItPqidogwUK u9Uq7mlGyNqPh94bkkQQIt6g3vSSQXsrvZcIaN6RbkpfUb60ynEgj4PGL6tOMp8rTf 9mQk60wKrczK3QgPj5psNJSLuUAW8j1yriDin8DsSOP1V3zkSgZHIZxLpclqqS+NMr ThdxJjrMni1c8KY+arAWjNBFi3sr4DRx9PUsC44eULX3EuF1phMVE3M/sjPybcbKBX ZdiETnaifEJ6A== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 197D11203B9; Thu, 18 Jun 2020 17:33:00 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Cc: Ted Zlatanov Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example Message-ID: References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> Date: Thu, 18 Jun 2020 17:32:58 -0400 In-Reply-To: <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> (Teodor Zlatanov's message of "Thu, 18 Jun 2020 17:26:04 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 17:33:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 21:33:05 -0000 > diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi > index 30cb6fb..bb632ba 100644 > --- a/doc/misc/auth.texi > +++ b/doc/misc/auth.texi > @@ -305,9 +305,7 @@ An alternative is to enable @code{auth-source-reveal-mode} as follows: > :custom > (prettify-symbols-unprettify-at-point 'right-edge) > :hook > - (prog-mode . auth-source-reveal-mode) > - (json-mode . auth-source-reveal-mode) > - (text-mode . auth-source-reveal-mode)) > + ((prog-mode js2-mode text-mode) . auth-source-reveal-mode)) > @end example > > You should definitely customize I think that since use-package is (still!) not in Emacs (and not even in GNU ELPA), the doc shouldn't rely on it. Stefan From MAILER-DAEMON Thu Jun 18 17:44:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm2Ki-0004zQ-Mh for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 17:44:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm2Kg-0004yz-Lx for emacs-devel@gnu.org; Thu, 18 Jun 2020 17:44:26 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:39990) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jm2Ke-0000Mh-T3 for emacs-devel@gnu.org; Thu, 18 Jun 2020 17:44:26 -0400 Received: by mail-wr1-x431.google.com with SMTP id h5so7682888wrc.7 for ; Thu, 18 Jun 2020 14:44:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=9JBh4U86LaAuV4Mp38cQx88hKaIWbSuHANN6yTZz0jU=; b=XbWvkZzzGLrgvBavkZZjF7n//dP0sSa9lYV/b4iFrIbSe+IMSdtZu6oYgBiFBJzHSM 6o40mHKO7yx5g3cZQNX8Hpw0mVLxcYk676Spm1q3bvAL4aDiLk4t5QSG9I1dlv6VuGra fNEFXkMNx1dTiGoBx8D1HMdFMNkYqc/9AW42DvyLd85XtYG9OkVOSPNRmg92S4tqzgdB lD5wQwesOOHlH648uepyG+5T3JRKWJnquglx9hU62drXgaxetxeVyQmfeJmiYg7GqWwf p0ecfber61q8zpg/dhAL0QndW0W6dfiCPMb5YZpuiOmw8XTFZFnmgbh0bpVy0ZJOwpb0 MVuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=9JBh4U86LaAuV4Mp38cQx88hKaIWbSuHANN6yTZz0jU=; b=UDcSl95sGEdPkgI9WHxxNkiyQpWTsZBrlmTcb8VTEOVeJa8T2KWWorFeSBTeK/xML/ nqpnvTHn/ZWH2BCZP4QkpiwZ9jbOFEL0/SC0MHTE9LUuLmUTMees4KIXCGz9CuAaWelb aZhd200hOauTojU5zryO0tyvH2R5Vn9/JNAABrF4Uxt6gr1PK+xcC9hFBlaX9mn1iQ95 uozmIK59PAIe9XldRhg+bmFGO4IKh593Dv0+60aId4zamxezqJlRWvgSDWmZldQBrdeU sFobgIqnF4qiF13WTbvwAHYFdpnp7tXaArmqprcjHcexQE+yTxrvdx66h1T28Utk5GSP kcYA== X-Gm-Message-State: AOAM532gm1Z6wGHxmo4eHylsbzP7my+J7Yn/PoWDxRmeKS72EY8JkUta XVJbYJya9yj+Y4oCyv5q+f277DxS X-Google-Smtp-Source: ABdhPJz1zBJzuKmwxz8P2YAaC43KcuXv3ukOz9FkI10uelM93UwGD3UxNw0567lJFDEwdOtBKCnnfg== X-Received: by 2002:a5d:6291:: with SMTP id k17mr545865wru.78.1592516663159; Thu, 18 Jun 2020 14:44:23 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id p9sm4555718wma.48.2020.06.18.14.44.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Jun 2020 14:44:22 -0700 (PDT) Sender: DG Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example To: emacs-devel@gnu.org, Ted Zlatanov References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 00:44:21 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=raaahh@gmail.com; helo=mail-wr1-x431.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 21:44:26 -0000 On 19.06.2020 00:26, Teodor Zlatanov wrote: > + ((prog-mode js2-mode text-mode) . auth-source-reveal-mode)) js2-mode inherits from prog-mode, doesn't it? From MAILER-DAEMON Thu Jun 18 17:47:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm2NB-0006qi-Ey for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 17:47:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46884) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm2N9-0006qa-GU for emacs-devel@gnu.org; Thu, 18 Jun 2020 17:46:59 -0400 Received: from mail-qt1-x832.google.com ([2607:f8b0:4864:20::832]:37691) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jm2N7-0000yS-NE; Thu, 18 Jun 2020 17:46:59 -0400 Received: by mail-qt1-x832.google.com with SMTP id d27so5738372qtg.4; Thu, 18 Jun 2020 14:46:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=O6qhUYT/YdnZf94Sn52w2TQjMKJO6RWJua439Q8xMFc=; b=TnF2+X8Eyw5vK+lVbrbYCLjWoCsdoSb3CqFzzWAi6ye9g4Aa0PnKwMb7RzdNsZ3Ln/ MyJV/oSlObwkM6d1q2DKZqmBZh+Dp2pnmThMXBW05IVxlGSh/7L97twftsAQzhkRWTnJ XjOh5xKvffVN3cuP6+FfWIrO1CwpKGMsYa1rpQOQ4/FgaBx7SFukwSgvX0NkpIMy0OYf Eg0EhwLPzC4TCjw1y/u661jvkc1K69K6ZHRIcIoP39R/yh2DAC5XEu5GSfzLqWxZDNvq nsKjxMHGHCKvW+Bmo1t1L9iG595hnN9QJ2Tuylo3XdEAZLaiFK6d/MRQUlibZt1IvkQg 15WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=O6qhUYT/YdnZf94Sn52w2TQjMKJO6RWJua439Q8xMFc=; b=AOQDTXGrLyM5m4gJTubwJWILnte9MjUzU7Mw8QH0kkxgYOtm8UUh2VDUdvBaZw0glF ekkxpHq04nONhB8uxKIUql8tyTLMi9XymkmkIGXQ1SY6qMF8lX/QL3eZRiurwPe1fk5G bYYcCJx8nAZ36ldkH1TE8Hfvmw2GsVdC2M89dUdxJhjbQy5NfGCLzACBYWWuBPjsWAMQ qOkgP4rcFVhn3wcvW4Q6vAV1XlGJ+BwkeG4cPsJNwHEvCrhd/wMVS+TLXH9LKYy440YD zXosr+Wp0XthHoPeE+Rl3Ml5kbsRcdQB2AzHPb8kTcMAQaScMHxD371azIjTF8aKabNk JgJw== X-Gm-Message-State: AOAM530YrlWlcSdjYNIn3artH1XBLJO1CSzS5Dk742a9alXTrT12o4in nEmZQ0YAYYOMmYz1CpyheRq8cKVuMKUadw== X-Google-Smtp-Source: ABdhPJyxxMBg2TJZTJIgvIezm/vILm4580ChZuuO9w0EtZ/lLfHsJiMHel6vGIb281el/khtPYzKfg== X-Received: by 2002:ac8:724b:: with SMTP id l11mr274459qtp.255.1592516815658; Thu, 18 Jun 2020 14:46:55 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id p185sm4215006qkd.128.2020.06.18.14.46.54 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jun 2020 14:46:54 -0700 (PDT) From: Yuan Fu Message-Id: <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_93FF080F-E9B5-467E-A6E4-905228E3F3B7" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Line wrap reconsidered Date: Thu, 18 Jun 2020 17:46:53 -0400 In-Reply-To: <83k10sj60l.fsf@gnu.org> Cc: Lars Ingebrigtsen , emacs-devel To: Eli Zaretskii References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::832; envelope-from=casouri@gmail.com; helo=mail-qt1-x832.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 21:46:59 -0000 --Apple-Mail=_93FF080F-E9B5-467E-A6E4-905228E3F3B7 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Eli, Sorry for the delay. >=20 > The iterator thinks the characters are displayed from left to right, > so it does its calculations as usual. The order reversal happens > because each new glyph is prepended to the previous glyphs, not > appended as in the LTR case (but the iterator doesn't know that). So > the white space you see at the left side is actually computed and > added at the end, when all the other characters are already in the > glyph row and their width is known. After reading your reply I went back and scratched my head on why my = code doesn=E2=80=99t work, because based on your information my code = logic is correct. Turns out it=E2=80=99s merely because I didn=E2=80=99t = handle enough cases for it->what (I only handled when it->what =3D=3D = IT_CHARACTER). I updated my code to handle other cases and it now works = in bidi! I have to do another change for kinsoku.el to work right in bidi. = Kinsoku.el defined NOT_AT_BOL and NOT_AT_EOL categories. These = categories are flipped in bidi paragraphs: what was EOL becomes BOL and = vice versa. So I flipped them in my predicate function depending on = it->bidi_p. Now the word wrap and kinsoki works in both normal and bidi paragraph. P.S., I think I fixed all the indentation with tabs. Yuan --Apple-Mail=_93FF080F-E9B5-467E-A6E4-905228E3F3B7 Content-Disposition: attachment; filename=word-wrap.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="word-wrap.patch" Content-Transfer-Encoding: quoted-printable =46rom=20ab82e5a8101b9fb8302e6291be48f3153f4a0020=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 26=20May=202020=2022:47:27=20-0400=0ASubject:=20[PATCH]=20checkpoint=0A=0A= ---=0A=20src/xdisp.c=20|=20149=20= ++++++++++++++++++++++++++++++++++++++--------------=0A=201=20file=20= changed,=20110=20insertions(+),=2039=20deletions(-)=0A=0Adiff=20--git=20= a/src/xdisp.c=20b/src/xdisp.c=0Aindex=20cf15f579b5..8d9bb64258=20100644=0A= ---=20a/src/xdisp.c=0A+++=20b/src/xdisp.c=0A@@=20-447,6=20+447,7=20@@=20= Copyright=20(C)=201985-1988,=201993-1995,=201997-2020=20Free=20Software=20= Foundation,=0A=20#include=20"termchar.h"=0A=20#include=20"dispextern.h"=0A= =20#include=20"character.h"=0A+#include=20"category.h"=0A=20#include=20= "buffer.h"=0A=20#include=20"charset.h"=0A=20#include=20"indent.h"=0A@@=20= -508,6=20+509,57=20@@=20#define=20IT_DISPLAYING_WHITESPACE(it)=09=09=09=09= =09\=0A=20=09=20=20=20&&=20(*BYTE_POS_ADDR=20(IT_BYTEPOS=20(*it))=20=3D=3D= =20'=20'=09=09=09\=0A=20=09=20=20=20=20=20=20=20||=20*BYTE_POS_ADDR=20= (IT_BYTEPOS=20(*it))=20=3D=3D=20'\t'))))=0A=20=0A+/*=20These=20are=20the=20= category=20sets=20we=20use.=20=20*/=0A+#define=20NOT_AT_EOL=2060=20/*=20= <=20*/=0A+#define=20NOT_AT_BOL=2062=20/*=20>=20*/=0A+#define=20= LINE_BREAKABLE=20124=20/*=20|=20*/=0A+=0A+#define=20= IT_CHAR_HAS_CATEGORY(it,=20cat)=09=09=09=09=09\=0A+=20=20((it->what=20=3D=3D= =20IT_CHARACTER=20&&=20CHAR_HAS_CATEGORY=20(it->c,=20cat))=09\=0A+=20=20= ||=20(STRINGP=20(it->string)=09=09=09=09=09=09\=0A+=20=20=20=20=20=20&&=20= CHAR_HAS_CATEGORY(SREF=20(it->string,=20IT_STRING_BYTEPOS=20(*it)),=20= cat))=20\=0A+=20=20||=20(it->s=09=09=09=09=09=09=09=09\=0A+=20=20=20=20=20= =20&&=20CHAR_HAS_CATEGORY(it->s[IT_BYTEPOS=20(*it)],=20cat))=09=09\=0A+=20= =20||=20(IT_BYTEPOS=20(*it)=20<=20ZV_BYTE=09=09=09=09=09\=0A+=20=20=20=20= =20=20&&=20CHAR_HAS_CATEGORY(*BYTE_POS_ADDR=20(IT_BYTEPOS=20(*it)),=20= cat)))=20=20=20=20\=0A+=0A+/*=20Return=20true=20if=20the=20current=20= character=20allows=20wrapping=20before=20it.=20=20=20*/=0A+static=20bool=20= char_can_wrap_before=20(struct=20it=20*it)=0A+{=0A+=20=20/*=20You=20= cannot=20wrap=20before=20a=20space=20or=20tab=20because=0A+=20=20=20=20=20= that=20way=20you'll=20have=20space=20and=20tab=20at=20the=20beginning=20= of=20next=0A+=20=20=20=20=20line.=20=20*/=0A+=20=20/*=20In=20bidi=20= context,=20EOL=20and=20BOL=20are=20flipped.=20=20*/=0A+=20=20if=20= (it->bidi_p)=0A+=20=20=20=20return=20(!IT_DISPLAYING_WHITESPACE=20(it)=0A= +=09=20=20=20=20&&=20(!IT_CHAR_HAS_CATEGORY=20(it,=20NOT_AT_EOL)));=0A+=20= =20=20=20else=0A+=20=20=20=20=20=20return=20(!IT_DISPLAYING_WHITESPACE=20= (it)=0A+=09=20=20=20=20=20=20&&=20(!IT_CHAR_HAS_CATEGORY=20(it,=20= NOT_AT_BOL)));=0A+}=0A+=0A+/*=20Return=20true=20if=20the=20current=20= character=20allows=20wrapping=20after=20it.=20=20=20*/=0A+static=20bool=20= char_can_wrap_after=20(struct=20it=20*it)=0A+{=0A+=20=20/*=20We=20used=20= to=20only=20check=20for=20whitespace=20characters=20for=20wrapping,=0A+=20= =20=20=20=20hence=20this=20macro.=20=20Obviously=20you=20can=20wrap=20= after=20a=20space=20or=0A+=20=20=20=20=20tab.=20=20*/=0A+=20=20if=20= (it->bidi_p)=0A+=20=20=20=20return=20(IT_DISPLAYING_WHITESPACE=20(it)=0A= +=09=20=20=20=20||=20(IT_CHAR_HAS_CATEGORY=20(it,=20LINE_BREAKABLE)=0A+=09= =09&&=20!IT_CHAR_HAS_CATEGORY=20(it,=20NOT_AT_BOL)));=0A+=20=20=20=20= else=0A+=20=20=20=20=20=20return=20(IT_DISPLAYING_WHITESPACE=20(it)=0A+=09= =20=20=20=20=20=20||=20(IT_CHAR_HAS_CATEGORY=20(it,=20LINE_BREAKABLE)=0A= +=09=09=20=20&&=20!IT_CHAR_HAS_CATEGORY=20(it,=20NOT_AT_EOL)));=0A+}=0A+=0A= +#undef=20IT_DISPLAYING_WHITESPACE=0A+#undef=20IT_CHAR_HAS_CATEGORY=0A= +#undef=20NOT_AT_BOL=0A+#undef=20NOT_AT_BOL=0A+#undef=20LINE_BREAKABLE=0A= +=0A=20/*=20If=20all=20the=20conditions=20needed=20to=20print=20the=20= fill=20column=20indicator=20are=0A=20=20=20=20met,=20return=20the=20= (nonnegative)=20column=20number,=20else=20return=20a=20negative=0A=20=20=20= =20value.=20=20*/=0A@@=20-9185,13=20+9237,14=20@@=20#define=20= IT_RESET_X_ASCENT_DESCENT(IT)=09=09=09\=0A=20=09{=0A=20=09=20=20if=20= (it->line_wrap=20=3D=3D=20WORD_WRAP=20&&=20it->area=20=3D=3D=20= TEXT_AREA)=0A=20=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20= (IT_DISPLAYING_WHITESPACE=20(it))=0A-=09=09may_wrap=20=3D=20true;=0A-=09=20= =20=20=20=20=20else=20if=20(may_wrap)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20/*=20Can=20we=20wrap=20here?=20*/=0A+=09=20=20=20=20=20=20if=20= (may_wrap=20&&=20char_can_wrap_before(it))=0A=20=09=09{=0A=20=09=09=20=20= /*=20We=20have=20reached=20a=20glyph=20that=20follows=20one=20or=20more=0A= -=09=09=20=20=20=20=20whitespace=20characters.=20=20If=20the=20position=20= is=0A-=09=09=20=20=20=20=20already=20found,=20we=20are=20done.=20=20*/=0A= +=09=09=20=20=20=20=20whitespace=20characters=20or=20a=20character=20= that=20allows=0A+=09=09=20=20=20=20=20wrapping=20after=20it.=20=20If=20= this=20character=20allows=0A+=09=09=20=20=20=20=20wrapping=20before=20= it,=20save=20this=20position=20as=20a=0A+=09=09=20=20=20=20=20wrapping=20= point.=20=20*/=0A=20=09=09=20=20if=20(atpos_it.sp=20>=3D=200)=0A=20=09=09= =20=20=20=20{=0A=20=09=09=20=20=20=20=20=20RESTORE_IT=20(it,=20= &atpos_it,=20atpos_data);=0A@@=20-9206,8=20+9259,17=20@@=20#define=20= IT_RESET_X_ASCENT_DESCENT(IT)=09=09=09\=0A=20=09=09=20=20=20=20}=0A=20=09= =09=20=20/*=20Otherwise,=20we=20can=20wrap=20here.=20=20*/=0A=20=09=09=20= =20SAVE_IT=20(wrap_it,=20*it,=20wrap_data);=0A-=09=09=20=20may_wrap=20=3D=20= false;=0A=20=09=09}=0A+=09=20=20=20=20=20=20/*=20This=20has=20to=20run=20= after=20the=20previous=20block=20because=20the=0A+=09=09=20previous=20= block=20consumes=20`may_wrap'=20and=20this=20block=0A+=09=09=20sets=20= it,=20but=20the=20value=20set=20by=20this=20block=20is=20intended=0A+=09=09= =20for=20the=20_next_=20character/iteration.=20=20*/=0A+=09=20=20=20=20=20= =20if=20(char_can_wrap_after=20(it))=0A+=09=09/*=20may_wrap=20basically=20= means=20"previous=20char=20allows=0A+=09=09=20=20=20wrapping=20after=20= it".=20=20*/=0A+=09=09may_wrap=20=3D=20true;=0A+=09=20=20=20=20=20=20= else=0A+=09=09may_wrap=20=3D=20false;=0A=20=09=20=20=20=20}=0A=20=09}=0A=20= =0A@@=20-9335,10=20+9397,10=20@@=20#define=20= IT_RESET_X_ASCENT_DESCENT(IT)=09=09=09\=0A=20=09=09=09=20=20=20=20{=0A=20= =09=09=09=20=20=20=20=20=20bool=20can_wrap=20=3D=20true;=0A=20=0A-=09=09=09= =20=20=20=20=20=20/*=20If=20we=20are=20at=20a=20whitespace=20character=0A= -=09=09=09=09=20that=20barely=20fits=20on=20this=20screen=20line,=0A-=09=09= =09=09=20but=20the=20next=20character=20is=20also=0A-=09=09=09=09=20= whitespace,=20we=20cannot=20wrap=20here.=20=20*/=0A+=09=09=09=20=20=20=20= =20=20/*=20If=20the=20previous=20character=20says=20we=20can=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20wrap=20after=20it,=20but=20the=20current=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20character=20says=20we=20can't=20wrap=20before=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20it,=20then=20we=20can't=20wrap=20here.=20=20*/=0A=20=09=09=09=20= =20=20=20=20=20if=20(it->line_wrap=20=3D=3D=20WORD_WRAP=0A=20=09=09=09=09= =20=20&&=20wrap_it.sp=20>=3D=200=0A=20=09=09=09=09=20=20&&=20may_wrap=0A= @@=20-9350,7=20+9412,7=20@@=20#define=20IT_RESET_X_ASCENT_DESCENT(IT)=09=09= =09\=0A=20=09=09=09=09=20=20SAVE_IT=20(tem_it,=20*it,=20tem_data);=0A=20=09= =09=09=09=20=20set_iterator_to_next=20(it,=20true);=0A=20=09=09=09=09=20=20= if=20(get_next_display_element=20(it)=0A-=09=09=09=09=20=20=20=20=20=20= &&=20IT_DISPLAYING_WHITESPACE=20(it))=0A+=09=09=09=09=20=20=20=20=20=20= &&=20!char_can_wrap_before(it))=0A=20=09=09=09=09=20=20=20=20can_wrap=20= =3D=20false;=0A=20=09=09=09=09=20=20RESTORE_IT=20(it,=20&tem_it,=20= tem_data);=0A=20=09=09=09=09}=0A@@=20-9429,19=20+9491,18=20@@=20#define=20= IT_RESET_X_ASCENT_DESCENT(IT)=09=09=09\=0A=20=09=09=20=20else=0A=20=09=09= =20=20=20=20IT_RESET_X_ASCENT_DESCENT=20(it);=0A=20=0A-=09=09=20=20/*=20= If=20the=20screen=20line=20ends=20with=20whitespace,=20and=20we=0A-=09=09= =20=20=20=20=20are=20under=20word-wrap,=20don't=20use=20wrap_it:=20it=20= is=20no=0A-=09=09=20=20=20=20=20longer=20relevant,=20but=20we=20won't=20= have=20an=20opportunity=0A-=09=09=20=20=20=20=20to=20update=20it,=20= since=20we=20are=20done=20with=20this=20screen=0A-=09=09=20=20=20=20=20= line.=20=20*/=0A+=09=09=20=20/*=20If=20the=20screen=20line=20ends=20with=20= whitespace=20(or=0A+=09=09=20=20=20=20=20wrap-able=20character),=20and=20= we=20are=20under=20word-wrap,=0A+=09=09=20=20=20=20=20don't=20use=20= wrap_it:=20it=20is=20no=20longer=20relevant,=20but=0A+=09=09=20=20=20=20=20= we=20won't=20have=20an=20opportunity=20to=20update=20it,=20since=0A+=09=09= =20=20=20=20=20we=20are=20done=20with=20this=20screen=20line.=20=20*/=0A=20= =09=09=20=20if=20(may_wrap=20&&=20IT_OVERFLOW_NEWLINE_INTO_FRINGE=20(it)=0A= =20=09=09=20=20=20=20=20=20/*=20If=20the=20character=20after=20the=20one=20= which=20set=20the=0A-=09=09=09=20may_wrap=20flag=20is=20also=20= whitespace,=20we=20can't=0A-=09=09=09=20wrap=20here,=20since=20the=20= screen=20line=20cannot=20be=0A-=09=09=09=20wrapped=20in=20the=20middle=20= of=20whitespace.=0A-=09=09=09=20Therefore,=20wrap_it=20_is_=20relevant=20= in=20that=0A-=09=09=09=20case.=20=20*/=0A-=09=09=20=20=20=20=20=20&&=20= !(moved_forward=20&&=20IT_DISPLAYING_WHITESPACE=20(it)))=0A+=09=09=09=20= may_wrap=20flag=20says=20we=20can't=20wrap=20before=20it,=0A+=09=09=09=20= we=20can't=20wrap=20here.=20=20Therefore,=20wrap_it=0A+=09=09=09=20= (previously=20found=20wrap-point)=20_is_=20relevant=0A+=09=09=09=20in=20= that=20case.=20=20*/=0A+=09=09=20=20=20=20=20=20&&=20!(moved_forward=20= &&=20char_can_wrap_before(it)))=0A=20=09=09=20=20=20=20{=0A=20=09=09=20=20= =20=20=20=20/*=20If=20we've=20found=20TO_X,=20go=20back=20there,=20as=20= we=20now=0A=20=09=09=09=20know=20the=20last=20word=20fits=20on=20this=20= screen=20line.=20=20*/=0A@@=20-23292,9=20+23353,8=20@@=20#define=20= RECORD_MAX_MIN_POS(IT)=09=09=09=09=09\=0A=20=0A=20=09=20=20if=20= (it->line_wrap=20=3D=3D=20WORD_WRAP=20&&=20it->area=20=3D=3D=20= TEXT_AREA)=0A=20=09=20=20=20=20{=0A-=09=20=20=20=20=20=20if=20= (IT_DISPLAYING_WHITESPACE=20(it))=0A-=09=09may_wrap=20=3D=20true;=0A-=09=20= =20=20=20=20=20else=20if=20(may_wrap)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20/*=20Can=20we=20wrap=20here?=20*/=0A+=09=20=20=20=20=20=20if=20= (may_wrap=20&&=20char_can_wrap_before(it))=0A=20=09=09{=0A=20=09=09=20=20= SAVE_IT=20(wrap_it,=20*it,=20wrap_data);=0A=20=09=09=20=20wrap_x=20=3D=20= x;=0A@@=20-23308,9=20+23368,13=20@@=20#define=20RECORD_MAX_MIN_POS(IT)=09= =09=09=09=09\=0A=20=09=09=20=20wrap_row_min_bpos=20=3D=20min_bpos;=0A=20=09= =09=20=20wrap_row_max_pos=20=3D=20max_pos;=0A=20=09=09=20=20= wrap_row_max_bpos=20=3D=20max_bpos;=0A-=09=09=20=20may_wrap=20=3D=20= false;=0A=20=09=09}=0A-=09=20=20=20=20}=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20/*=20This=20has=20to=20run=20after=20the=20previous=20block.=20= =20*/=0A+=09=20=20=20=20=20=20if=20(char_can_wrap_after=20(it))=0A+=09=09= may_wrap=20=3D=20true;=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20else=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20may_wrap=20=3D=20false;=0A= +=20=20=20=20=20=20=20=20=20=20=20=20}=0A=20=09}=0A=20=0A=20=20=20=20=20=20= =20PRODUCE_GLYPHS=20(it);=0A@@=20-23433,14=20+23497,18=20@@=20#define=20= RECORD_MAX_MIN_POS(IT)=09=09=09=09=09\=0A=20=09=09=09=20=20/*=20If=20= line-wrap=20is=20on,=20check=20if=20a=20previous=0A=20=09=09=09=20=20=20=20= =20wrap=20point=20was=20found.=20=20*/=0A=20=09=09=09=20=20if=20= (!IT_OVERFLOW_NEWLINE_INTO_FRINGE=20(it)=0A-=09=09=09=20=20=20=20=20=20= &&=20wrap_row_used=20>=200=0A+=09=09=09=20=20=20=20=20=20&&=20= wrap_row_used=20>=200=20/*=20Found.=20=20*/=0A=20=09=09=09=20=20=20=20=20= =20/*=20Even=20if=20there=20is=20a=20previous=20wrap=0A=20=09=09=09=09=20= point,=20continue=20the=20line=20here=20as=0A=20=09=09=09=09=20usual,=20= if=20(i)=20the=20previous=20character=0A-=09=09=09=09=20was=20a=20space=20= or=20tab=20AND=20(ii)=20the=0A-=09=09=09=09=20current=20character=20is=20= not.=20=20*/=0A-=09=09=09=20=20=20=20=20=20&&=20(!may_wrap=0A-=09=09=09=09= =20=20||=20IT_DISPLAYING_WHITESPACE=20(it)))=0A+=09=09=09=09=20allows=20= wrapping=20after=20it,=20AND=20(ii)=0A+=09=09=09=09=20the=20current=20= character=20allows=20wrapping=0A+=09=09=09=09=20before=20it.=20=20= Because=20this=20is=20a=20valid=0A+=09=09=09=09=20break=20point,=20we=20= can=20just=20continue=20to=0A+=09=09=09=09=20the=20next=20line=20at=20= here,=20there=20is=20no=0A+=09=09=09=09=20need=20to=20wrap=20early=20at=20= the=20previous=0A+=09=09=09=09=20wrap=20point.=20=20*/=0A+=09=09=09=20=20= =20=20=20=20&&=20(!may_wrap=20||=20!char_can_wrap_before(it)))=0A=20=09=09= =09=20=20=20=20goto=20back_to_wrap;=0A=20=0A=20=09=09=09=20=20/*=20= Record=20the=20maximum=20and=20minimum=20buffer=0A@@=20-23468,13=20= +23536,16=20@@=20#define=20RECORD_MAX_MIN_POS(IT)=09=09=09=09=09\=0A=20=09= =09=09=20=20=20=20=20=20/*=20If=20line-wrap=20is=20on,=20check=20if=20a=0A= =20=09=09=09=09=20previous=20wrap=20point=20was=20found.=20=20*/=0A=20=09= =09=09=20=20=20=20=20=20else=20if=20(wrap_row_used=20>=200=0A-=09=09=09=09= =20=20=20=20=20=20=20/*=20Even=20if=20there=20is=20a=20previous=20wrap=0A= -=09=09=09=09=09=20=20point,=20continue=20the=20line=20here=20as=0A-=09=09= =09=09=09=20=20usual,=20if=20(i)=20the=20previous=20character=0A-=09=09=09= =09=09=20=20was=20a=20space=20or=20tab=20AND=20(ii)=20the=0A-=09=09=09=09= =09=20=20current=20character=20is=20not.=20=20*/=0A-=09=09=09=09=20=20=20= =20=20=20=20&&=20(!may_wrap=0A-=09=09=09=09=09=20=20=20||=20= IT_DISPLAYING_WHITESPACE=20(it)))=0A+=09=09=09=09=20=20=20=20=20=20=20/*=20= Even=20if=20there=20is=20a=20previous=0A+=09=09=09=09=09=20=20wrap=20= point,=20continue=20the=0A+=09=09=09=09=09=20=20line=20here=20as=20= usual,=20if=20(i)=0A+=09=09=09=09=09=20=20the=20previous=20character=20= was=20a=0A+=09=09=09=09=09=20=20space=20or=20tab=20AND=20(ii)=20the=0A+=09= =09=09=09=09=20=20current=20character=20is=20not,=0A+=09=09=09=09=09=20=20= AND=20(iii)=20the=20current=0A+=09=09=09=09=09=20=20character=20allows=20= wrapping=0A+=09=09=09=09=09=20=20before=20it.=20=20*/=0A+=09=09=09=09=20=20= =20=20=20=20=20&&=20(!may_wrap=20||=20!char_can_wrap_before(it)))=0A=20=09= =09=09=09goto=20back_to_wrap;=0A=20=0A=20=09=09=09=20=20=20=20}=0A--=20=0A= 2.27.0=0A=0A= --Apple-Mail=_93FF080F-E9B5-467E-A6E4-905228E3F3B7-- From MAILER-DAEMON Thu Jun 18 18:34:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm37F-00015U-Da for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 18:34:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm37D-00012z-2r for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:34:35 -0400 Received: from forward104o.mail.yandex.net ([2a02:6b8:0:1a2d::607]:52699) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm379-0000IN-Cu; Thu, 18 Jun 2020 18:34:34 -0400 Received: from mxback10g.mail.yandex.net (mxback10g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:171]) by forward104o.mail.yandex.net (Yandex) with ESMTP id 9E33F9408FF; Fri, 19 Jun 2020 01:34:23 +0300 (MSK) Received: from iva8-174eb672ffa9.qloud-c.yandex.net (iva8-174eb672ffa9.qloud-c.yandex.net [2a02:6b8:c0c:b995:0:640:174e:b672]) by mxback10g.mail.yandex.net (mxback/Yandex) with ESMTP id yCiW26iBgc-YN0qa4Yd; Fri, 19 Jun 2020 01:34:23 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592519663; bh=jq8VhMtgGyHePISGGNoAvBB1KWh7NOrGf7kMPqxr/C0=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=W9VQMGZuEsl6SD/B5ZTSRH5pmPm6WK5FgVzEz0qL8VJgZmE60HggxDwUGMAY7fq+f vdnKqCmMvE4INxaK79MMuxcxoJQPNB5YgzRjXiaVN/Pwjzc6nq//zuWyE80Bhpob67 zu7/ljzKboRzCMQWOvnO0uRgZSzpGDvx6nX+x6S4= Authentication-Results: mxback10g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva8-174eb672ffa9.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id 0EQzTMrln6-YM44bRKY; Fri, 19 Jun 2020 01:34:22 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Ricardo Wurmus , =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= Cc: Eli Zaretskii , Dmitry Gutov , Stefan Kangas , emacs-devel@gnu.org Date: Fri, 19 Jun 2020 01:34:21 +0300 In-Reply-To: <87eeqctgb4.fsf@elephly.net> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::607; envelope-from=hi-angel@yandex.ru; helo=forward104o.mail.yandex.net 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 22:34:35 -0000 On Thu, 2020-06-18 at 19:49 +0200, Ricardo Wurmus wrote: > João Távora writes: > > > Konstantin Kharlamov writes: > > > > > Oh, sure I can be mistaken. I see you replied to Dmitry's email, I had a > > > follow- > > > up on it. Does my follow-up mail change your opinion, or perhaps do you > > > have > > > some example in mind that a good commit message without the list would not > > > solve? > > > > I might have read it. I'm not saying good commit messages are > > impossible without the summarizing list; I'm just saying it's a good > > thing to have, something I've grown accustomed to. When composing them, > > they're a good exercise in self-review. But of course there's more ways > > to skin a cat. This just happens to be the way we use here. > > > > It's not "for fun". Of course is a mental cost in composing them, > > especially if you don't do it often and use the friendly C-x 4 a > > shortcut. But there is a gain, too. > > I’d also like to note that this list can be invaluable when rebasing > commits and resolving conflicts. It’s not strictly necessary (just like > other parts of a version control workflow are not strictly necessary), > but it can serve as a sanity check in a time when the diff is not > authoritative as it is in flux. While it may be useful, but explicit examples may be more interesting. Right now when I read your text about this list in the context of resolving rebase conflicts, I only see the downside that if the conflict came up because a function was renamed, you need to go fix the commit message too. Even worse: if upon rebasing a function was renamed, you may not get any conflicts (i.e. because thunk you modified didn't include the beginning of the function), and now your commit message is broken without you even noticing. > An explanation as to why things were done is also very useful in those > cases, but an overview on the *conceptual* changes at the procedure > level (rather than the plain diff that’s only concerned with lines and > not with the context in which the changes occurred) provides additional > valuable information that the commit diff itself cannot provide. It is possible, it's just that I do not see this. Convincing someone that the commit message with the list provides more benefit than without it requires examples that make it explicit. So far the whole thread (both this part and the one with Dmitry) had only negative examples, i.e. why having the list is a burden to anyone. Let me sum up the positive mentions: so far, you just say it simplifies review for you, but I don't know your workflow, there may be many factors that make you assert that, which does not necessarily applies to everyone. Dmitry said the list makes better commit messages from novices, but again when I tried to dig deeper, that discussion died. You see, presence of negative examples and lack of positive ones doesn't make that look too convincing. From MAILER-DAEMON Thu Jun 18 18:36:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm39F-0004FI-MY for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 18:36:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm39D-0004Cj-9u for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:36:39 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:56907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm39B-0000gi-2B for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:36:39 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id BD5A11BF208; Thu, 18 Jun 2020 22:36:30 +0000 (UTC) From: Juri Linkov To: Dmitry Gutov Cc: Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> Date: Fri, 19 Jun 2020 00:54:01 +0300 In-Reply-To: <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> (Dmitry Gutov's message of "Thu, 18 Jun 2020 01:52:40 +0300") Message-ID: <877dw4qbuu.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 18:36:32 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 22:36:39 -0000 >> Or maybe it's possible to navigate history using completion lists? > > I'm not sure how that would look. Currently completion is performed on a set of all possible values. In addition to this, completion could be performed on a set of all previously entered values (history items), or on default items (a list of the most useful values). This shows all 3 possibilities: (completing-read "Prompt: " minibuffer-history nil nil nil 'minibuffer-history minibuffer-history) M-n - defaults list, M-p - history list, TAB - completion on history list. In a normal minibuffer maybe there should be a key to switch between normal completion, completion on defaults, and completion on history. Also maybe another key to sort history items by recency/frequency in the completion list. From MAILER-DAEMON Thu Jun 18 18:41:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm3Dz-0006T2-6v for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 18:41:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm3Dx-0006Su-EK for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:41:33 -0400 Received: from mail-il1-x12f.google.com ([2607:f8b0:4864:20::12f]:43011) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jm3Du-0001gF-QD for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:41:33 -0400 Received: by mail-il1-x12f.google.com with SMTP id g3so7536495ilq.10 for ; Thu, 18 Jun 2020 15:41:30 -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 :cc:content-transfer-encoding; bh=Q4Hr75fWZOa4OD5VPDAcekT8gfhBAvhWe2b3v3U9rU0=; b=c47L/n5P6XEUiTImuGz1dF4YrLTqhybStK+DoPEzx8Qe/MrlG3Wyi+y1Arn/RCKybl xvF+4PJadqylPFGCuHbQLQ1dbMUh/X50xinenQKsHW90U1+feyTIiPDOLdOEf3TwzLFi T33A8g5vBLT8RL/eQLjCW3iajmdEJSLMI7B/RHOsEHafHhU1sMebRAxGRvFTLJHJrxM2 JjPtM2JzH7V/HQwaTZfifz9pXo3eXpmDjJ7N2oZH0lfQMYr1k1aXmmrHFexBjO5Ge9B0 vKZh67A3c52hzDU7Rm8GwVJui3Zx9mT2mJcHXJIdaO3HxmrSpaCOoG8mVj/6yS3tAlEN 75ng== 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:cc:content-transfer-encoding; bh=Q4Hr75fWZOa4OD5VPDAcekT8gfhBAvhWe2b3v3U9rU0=; b=bdvkL7UM/B54D+DFvEr1nCwbWqLIQM0adwBq2BlfXwFgSKoDwkfcctrepQ/EEVMVMc UCg8skDFbsh/yJM9tN9QIxlbxr4RO1pQJXeY38VUhXMV+MeI3Ot5zc/Po0K/LUwSQeeD eSo9gYIhaApgrZkGddwkeeUJrjuXOyTLgtWw21KAbiH4s0SLPE7T0d0AmA7JuiQrK/gC N2nVilI5QdHMdstz8PwRdShywPtXxbAKVx38VQmW4L5W6Q0oUZMGMA+wSrukJqBKpIUx Hy7TzWQ1U0E9URrRXsBCuSUTHI01nft5xENw6IhXRoe70KHrW6732wIRJK7+fsnnJQnY vjYg== X-Gm-Message-State: AOAM531sedi34aiOEfnY3u2Kr6kNgFKm5KEogWH45/iRVZgmp4HtAt1A 6OLNiJWZoboEkwL9cL00X3BrW9v5hrYRn9WgL/I= X-Google-Smtp-Source: ABdhPJyfGEqGepVIW2/4cQCRu8QSChkQOd6LeRHxbx/6qQQCs3atfo1hApoN50sgbtqq9cH8fXp72r81FzRFBMOcHng= X-Received: by 2002:a92:c60b:: with SMTP id p11mr788893ilm.137.1592520089332; Thu, 18 Jun 2020 15:41:29 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> <877dw4qbuu.fsf@mail.linkov.net> In-Reply-To: <877dw4qbuu.fsf@mail.linkov.net> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Thu, 18 Jun 2020 23:41:18 +0100 Message-ID: Subject: Re: vertical fido-mode To: Juri Linkov Cc: Dmitry Gutov , Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::12f; envelope-from=joaotavora@gmail.com; helo=mail-il1-x12f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 22:41:33 -0000 On Thu, Jun 18, 2020 at 11:36 PM Juri Linkov wrote: > > >> Or maybe it's possible to navigate history using completion lists? > > > > I'm not sure how that would look. > > Currently completion is performed on a set of all possible values. > In addition to this, completion could be performed on a set of > all previously entered values (history items), or on default items > (a list of the most useful values). This shows all 3 possibilities: > > (completing-read "Prompt: " > minibuffer-history nil nil nil > 'minibuffer-history > minibuffer-history) > > M-n - defaults list, M-p - history list, TAB - completion on history list= . > > In a normal minibuffer maybe there should be a key to switch between > normal completion, completion on defaults, and completion on history. > Also maybe another key to sort history items by recency/frequency > in the completion list. I think, you are starting to describe incremental reverse history search, or C-r in normal minibuffers. It works in icomplete, too, but not too well in my opinion. Still, it's better to fix that than to reinvent the wh= eel. Jo=C3=A3o From MAILER-DAEMON Thu Jun 18 18:53:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm3Pw-0005uF-Gk for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 18:53:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33588) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm3Pv-0005u6-CO for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:53:55 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:49787) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm3Pt-0003a3-2g for emacs-devel@gnu.org; Thu, 18 Jun 2020 18:53:55 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id D6C0D1BF206; Thu, 18 Jun 2020 22:53:48 +0000 (UTC) From: Juri Linkov To: =?iso-8859-1?Q?Jo=E3o_T=E1vora?= Cc: Dmitry Gutov , Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Subject: Re: vertical fido-mode Organization: LINKOV.NET References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> <877dw4qbuu.fsf@mail.linkov.net> Date: Fri, 19 Jun 2020 01:51:58 +0300 In-Reply-To: (=?iso-8859-1?Q?=22Jo=E3o_T=E1vora=22's?= message of "Thu, 18 Jun 2020 23:41:18 +0100") Message-ID: <87y2okm1gx.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/18 18:36:32 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 22:53:55 -0000 >> >> Or maybe it's possible to navigate history using completion lists? >> > >> > I'm not sure how that would look. >> >> Currently completion is performed on a set of all possible values. >> In addition to this, completion could be performed on a set of >> all previously entered values (history items), or on default items >> (a list of the most useful values). This shows all 3 possibilities: >> >> (completing-read "Prompt: " >> minibuffer-history nil nil nil >> 'minibuffer-history >> minibuffer-history) >> >> M-n - defaults list, M-p - history list, TAB - completion on history list. >> >> In a normal minibuffer maybe there should be a key to switch between >> normal completion, completion on defaults, and completion on history. >> Also maybe another key to sort history items by recency/frequency >> in the completion list. > > I think, you are starting to describe incremental reverse history search, > or C-r in normal minibuffers. It works in icomplete, too, but not too > well in my opinion. Still, it's better to fix that than to reinvent the wheel. Actually I meant displaying a list of completions (no matter whether in the *Completions* buffer or inline like in icomplete) based on different sets of input data (on all possible values like default completion, or on all history items...) From MAILER-DAEMON Thu Jun 18 19:59:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm4Qx-0007Z0-Me for mharc-emacs-devel@gnu.org; Thu, 18 Jun 2020 19:59:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm4Qw-0007Ys-BZ for emacs-devel@gnu.org; Thu, 18 Jun 2020 19:59:02 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:54870) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jm4Qu-0005nT-64 for emacs-devel@gnu.org; Thu, 18 Jun 2020 19:59:02 -0400 Received: by mail-wm1-x333.google.com with SMTP id g10so6837916wmh.4 for ; Thu, 18 Jun 2020 16:58:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=LsXlTwlQOJMy9OxJx7QZf+12y8U863d1LRAlIB7bqpU=; b=cVZ9n5LCnA4BxMICqTenOBkHNqUUVd7J1AeCD5h9JCHmYVGTdwgrsvbAlkl0KoKHFx NHOegmOwPMfUH5MySMgFxKiC55P+tESc1cg3ohI9FqO60tU1fI9jV98EoG/U7wJ+oupx PD0tBPtgDbeMFQlDhejtHTfzLX0JexWPqdCF28CElhHFRhCoBuE2N40O/dQ+ErJnYAef o59yhrV/HmNJ8W2WRlO9sFqPQ1KSR6Nw0dMP6U1O4KWGb2O8BpwBzhpm3dzw0w//+LtU 0pZNQfb7mmesNJsn2Xlp0Nl1l8TFQzTY76TXnkEQ2CkPrZG4yxeYltswvNd3wGO8ydHf ywbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=LsXlTwlQOJMy9OxJx7QZf+12y8U863d1LRAlIB7bqpU=; b=nofpuOrq9TSMjLjxSWCxB3EWLaQL6cMj2Sa6r50/UeDCO8wdek2z8oXhTFhyIINeA7 +3jEDDmOYlwRLfJ0WOZ5hMz5v4y0iviJWgbLy35qWK8eS5vmnQbbU2BlEzBHNfUTJR+G TvmemSgYO1aPRjR3dkqhBK7KCY9sXvyoU7FZbNbRmvat/anxOcWqfVU5cmMkgRsZh8E4 Bu4QLWjfayYvJBGnqnRNo1uNbX/yNHHA8m6jgHdIQyDBcPPEK3S2hQLHQXhUbDfI+tB/ hv1HTfL1ZDZLwa324qKcgiP98fFs6RSmve8n8qt72ar6mSdvv2TBOBpQM8lmiIAFfYIP LnyA== X-Gm-Message-State: AOAM532OlwwapYjzHYBRwd9NZ0/3a1NGiuKN/2Z+yPb8LgIYUPStD9s/ rDx5h2InljhiYb1QCEapanq3Jg== X-Google-Smtp-Source: ABdhPJx6/k1DWpPfK+qT8za3llMfF7J7cGGszPN/OA2S1BJZs/b/k55MGMiJ0/3pSxqYV6rs4MDftQ== X-Received: by 2002:a1c:1b11:: with SMTP id b17mr740140wmb.123.1592524737254; Thu, 18 Jun 2020 16:58:57 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id e15sm5289410wme.9.2020.06.18.16.58.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2020 16:58:56 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org, Ted Zlatanov Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> Date: Fri, 19 Jun 2020 00:58:55 +0100 In-Reply-To: (Stefan Monnier's message of "Thu, 18 Jun 2020 17:32:58 -0400") Message-ID: <87d05w2af4.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::333; envelope-from=contovob@tcd.ie; helo=mail-wm1-x333.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2020 23:59:02 -0000 Stefan Monnier writes: >> diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi >> index 30cb6fb..bb632ba 100644 >> --- a/doc/misc/auth.texi >> +++ b/doc/misc/auth.texi >> @@ -305,9 +305,7 @@ An alternative is to enable @code{auth-source-reveal-mode} as follows: >> :custom >> (prettify-symbols-unprettify-at-point 'right-edge) >> :hook >> - (prog-mode . auth-source-reveal-mode) >> - (json-mode . auth-source-reveal-mode) >> - (text-mode . auth-source-reveal-mode)) >> + ((prog-mode js2-mode text-mode) . auth-source-reveal-mode)) >> @end example >> >> You should definitely customize > > I think that since use-package is (still!) not in Emacs (and not even in > GNU ELPA), the doc shouldn't rely on it. For anyone interested in following its Emacsimilation: https://github.com/jwiegley/use-package/issues/282 -- Basil From MAILER-DAEMON Fri Jun 19 00:47:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jm8wU-0003OY-8Z for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 00:47:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm8wR-0003N5-NC for emacs-devel@gnu.org; Fri, 19 Jun 2020 00:47:51 -0400 Received: from newsp.red-bean.com ([45.79.25.59]:51520) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jm8wP-0002VF-Qy for emacs-devel@gnu.org; Fri, 19 Jun 2020 00:47:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=red-bean.com; s=202005newsp; h=Content-Type:MIME-Version:Message-ID:Date: Reply-To:Subject:To:From:Sender:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=z+ETGQ54rhNvAlxOPl0TS3RmNz4t7aRtNtSg55AB3Uo=; t=1592542068; x=1593751668; b=knO+aO4tIujhzilmCqFNY7srG9S/UgKfr+kbX97UkFttH/FxtZa94SprkLhn0/jObniRxb+E9e p/ydCGFi2JKUWZU8LPIrAJIlplDPMxl1CGG2kiuQmuT/noPfZR91ZuftCUxwih4rgk8xQfXveCH1k BWSh8PcaRtOFhktwc9RA42bI4DQ/Xk0qAl38mPc/fG5De4iAAo6AnhuXweiYlOEHk9NKkUw/Vpnlk DLeG2zFkErNqLr6c49i90frAPqwd7PuTYB3i8Xx4k7tfgGaCkPWkwPQ1u1ZjU2Jbyf46CQ/HpJN1N b/TcwoG/wqyM4splNQrLyicxIQVqKhA7w3ueQ==; Received: from 99-112-125-163.lightspeed.cicril.sbcglobal.net ([99.112.125.163]:59750 helo=floss) by newsp.red-bean.com with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jm8wN-0005N7-3W for emacs-devel@gnu.org; Fri, 19 Jun 2020 04:47:47 +0000 From: Karl Fogel To: Emacs Development Subject: Why does `read-multiple-choice' lock user into minbuffer? Reply-To: Karl Fogel Date: Thu, 18 Jun 2020 23:47:46 -0500 Message-ID: <87r1ubfyq5.fsf@red-bean.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=45.79.25.59; envelope-from=kfogel@red-bean.com; helo=newsp.red-bean.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 00:47:47 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 04:47:52 -0000 When I tried to send an email recently, I got prompted by `nsm-query-user' (in lisp/net/nsm.el), as the remote SMTP server I was sending through had rolled over its LetsEncrypt certificate during my Emacs session. This caused me to get prompted with the expected array of choices: (a)lways -> "Accept this certificate this session and for all future sessions" (s)ession only -> "Accept this certificate this session only" (n)o -> "Refuse to use this certificate, and close the connection" etc, etc And while the minibuffer asked me for a response, a new "*Network Security Manager*" buffer was helpfully displayed in a new window. I wanted to copy some text from that buffer, so I tried `C-x o' to get over there. But that didn't work: point was locked into the minibuffer. I tried clicking with my mouse in the other window, but that did not bring me to the window either. And since `nsm-query-user' kills the "*Network Security Manager*" buffer after the user gives her answer, in the end I had no way to copy that text. I couldn't do it while the buffer was being shown to me, and I also couldn't do it after I'd finished responding to `read-multiple-choice' -- because by the time control got back to me, the buffer I wanted no longer existed. Now, a local solution to this problem would be to just not kill the buffer at the end of `nsm-query-user'. (Actually, there are two buffers killed there, and I don't really see why we should kill either of them at the end -- `nsm-query-user' erases them when it needs to.) But I'd like to understand the more general question too: why does `read-multiple-choice' lock the user into the minbuffer so strictly? Its doc string doesn't say anything about this behavior, and other functions that prompt the user (e.g., `find-file') don't enforce minibuffer habitation the same way. Best regards, -Karl From MAILER-DAEMON Fri Jun 19 02:17:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmALH-0005ha-4e for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 02:17:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmALG-0005hM-4e for emacs-devel@gnu.org; Fri, 19 Jun 2020 02:17:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:56935) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmALF-0007sb-Po; Fri, 19 Jun 2020 02:17:33 -0400 Received: from [176.228.60.248] (port=4316 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmALF-0001Rq-3t; Fri, 19 Jun 2020 02:17:33 -0400 Date: Fri, 19 Jun 2020 09:17:21 +0300 Message-Id: <838sgjzij2.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu Cc: larsi@gnus.org, emacs-devel@gnu.org In-Reply-To: <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> (message from Yuan Fu on Thu, 18 Jun 2020 17:46:53 -0400) Subject: Re: Line wrap reconsidered References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 06:17:34 -0000 > From: Yuan Fu > Date: Thu, 18 Jun 2020 17:46:53 -0400 > Cc: Lars Ingebrigtsen , > emacs-devel > > I have to do another change for kinsoku.el to work right in bidi. Kinsoku.el defined NOT_AT_BOL and NOT_AT_EOL categories. These categories are flipped in bidi paragraphs: what was EOL becomes BOL and vice versa. So I flipped them in my predicate function depending on it->bidi_p. I don't think I understand what you mean here. BOL and EOL are logical-order terminology, and bidi reordering doesn't change their meaning. Maybe I don't understand the exact meaning of NOT_AT_EOL/NOT_AT_BOL that Kinsoku assigns to that. Can you provide a formal definition of that, or point me to some document where that is explained? The important aspect of this is that in bidi-reordered text the character that appears at the left edge of a line is not necessarily the first character of the line after the preceding newline. So the issue is what does Kinsoku say about such situations? IOW, definitions that assume strict LTR text will not help us here. From MAILER-DAEMON Fri Jun 19 03:43:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmBg4-00081a-Bq for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 03:43:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmBg3-00081O-4A for emacs-devel@gnu.org; Fri, 19 Jun 2020 03:43:07 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:33886) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmBg1-0004vZ-Du for emacs-devel@gnu.org; Fri, 19 Jun 2020 03:43:06 -0400 Received: by mail-wm1-x32f.google.com with SMTP id u26so8225898wmn.1 for ; Fri, 19 Jun 2020 00:43:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=noE2B8VsepNyTKJC2f26B4/hdq1zut99soc9AOK7o54=; b=RztaWSL+Wqrt+f5kqrRwhSRyDlem15j6tRMF4z3HoN16duB8aC1xOCXWjvfBqBFcJj QIqM4hEv13eRwBgMuEmGfbq40zVW1idAPYNNoN/ZxD2Kz5LzSPZrqC7lETliiFsPdDcB nCBLwZ7AAfbPuNG6A+X/CluhO76S4YFSpgGMAUCqsptCeueBUgNGh17C9Y1uCScECEea 1zY/COptrNJ3MiiHvVkWfXT2t/2DlvkynWXYjEihIKzaK3DMwRyD7Hpx5xXRVgBxSAjT p639hfdAFXwO9Ujjt6Y4UkHHdvqIk4mC0LFmRy2qU/BPVi10Pwoyvv8qOweqGNTb5Gqv TjGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=noE2B8VsepNyTKJC2f26B4/hdq1zut99soc9AOK7o54=; b=j5SH1uPVkuUnW3Yx1vxZZTKYLdzcpYASDuOqMZpBTEtVVX9mr7ZQSfXOEB1LFGN0fu sIWx5JWaoCjA0dR2kq34QKbVyt80obGtaWd/kEF7Co0ZTHyFG2JHZPxn9tO+zHUCewhC scTHWK4BrzVAAF81lLzLpr8MXMS0SsboI7qOMdHouD7Y4V86A9J6SQofMNk2swQ+fIgf nqg4FlY6HDW/j1kKysbMpIs0VFZBfECDtoz8gm4V7HuL+n2xCwmU4ZDvrqnV6BzqhK4f 8G7+3G3ljHSWiXMQE6V+daF+yXFXIUshc3gRQADGf2rc68Qh5z37ckzI4QkWSYILq70B dfUw== X-Gm-Message-State: AOAM531vPinnz1dD+h+mi9gjCGnUlhpmlqJBH3uv1VARCXJ2T9bwtS9c zQ2h9r/HlqST+yo8amDn7Ddy11J/Q+Eiew== X-Google-Smtp-Source: ABdhPJxKNK94m7Ym6unMGIDsHZBHyDlVPP+FB3hQ6rZ8w5F7LCKe5yGBNO2DgBMqyhpqrWd7nEzXpw== X-Received: by 2002:a1c:8107:: with SMTP id c7mr2380758wmd.20.1592552583333; Fri, 19 Jun 2020 00:43:03 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id d2sm6291136wrs.95.2020.06.19.00.43.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jun 2020 00:43:02 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Karl Fogel Cc: Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? References: <87r1ubfyq5.fsf@red-bean.com> Date: Fri, 19 Jun 2020 09:43:01 +0200 In-Reply-To: <87r1ubfyq5.fsf@red-bean.com> (Karl Fogel's message of "Thu, 18 Jun 2020 23:47:46 -0500") Message-ID: <87o8pffqm2.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x32f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 07:43:07 -0000 Karl Fogel writes: > But I'd like to understand the more general question too: why does > `read-multiple-choice' lock the user into the minbuffer so strictly? IIUC (but maybe I'm wrong; I'm not entirely sure I understand all the nuances between the minibuffer and the echo-area), it's "just" an implementation detail: read-multiple-choice uses read-event, which does not use the minibuffer. So you're not actually "locked into the minibuffer" (if you were, keys such as C-x o would be available to you), it's just that read-multiple-choice traps you in a while-loop, calling read-event until you hit one of the keys you are prompted for. FWIW, back in December[1] Juri mentioned that read-multiple-choice should probably be patched to use the minibuffer. [1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35564#184 From MAILER-DAEMON Fri Jun 19 03:44:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmBhl-0000gR-AW for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 03:44:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmBhj-0000g1-VU for emacs-devel@gnu.org; Fri, 19 Jun 2020 03:44:51 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:34408) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmBhi-0005CL-Fs for emacs-devel@gnu.org; Fri, 19 Jun 2020 03:44:51 -0400 Received: by mail-wr1-x42d.google.com with SMTP id v3so1191604wrc.1 for ; Fri, 19 Jun 2020 00:44:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=0E15ksnd81mCYelcnY3s62HlRHNBcGUziEiOZpQMhlc=; b=cI4qMkANuYIZydBsf7pwHGDFgf+sUHq/HVoDgrHs43pjWfluc9oUkuNJuUQ4N+COFO O0PG5QCL0T0Kn8nfPv04urEGzwLGTiIzSmfipSDtSPmTR11GDHzwgqCWpSLg48dx3nYT YCuX4lg2VvG7zDSBlqWRRvHSG8dgk1QRgic03WnFiP+H1JIn7jHGdIONSsI1REs6I6PQ xdbWBUM8mS5HaSRYEv5BU/QE9uzGCSOQL7jhy8SpKjFF9vWvygsV0S9TvBawbWUnbssx X8i8m1A1TQFTYf+ANHqCuKH/9XjpeFFJoz+cJDrHM6rBykdU1UQKs4fq8tkqnnAMCFdS o+yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=0E15ksnd81mCYelcnY3s62HlRHNBcGUziEiOZpQMhlc=; b=q15kjNjTeSfmKiCkM3K/FYOUdDQmGkEyvq/zSrNtphsc/LMSdC4vWf4EOsW2RSF1jy JP4i5zNN7493Sy4zuJFrNnVCBgVaIzw1vByXgWCHk/YlLLES1Rx+td4UuUeCTjDilVHe ZqenFyrLvY4R7loBSPP+5RNrKnIOuotjcmSTjJzzKltvM5NwgEkJVxoaWMqrg2//GXlG 9RSKRfwta0cmPVaYHaoxJSWd4sy+VWijhZxp5Sueirs/yR27a/sDf+MEvc7U4Djsa099 fQtQK/ZmNkO9AHyWj8mfFvpkTljLUoE0eF/RFeDZmGMjPdSuvdlWBKn/Fb4abUqt51ZP X2KA== X-Gm-Message-State: AOAM533dM3r98hKIbKzb/hrXgIvOPo/c3PQmJcwcccX1+9Bc+XlA63xT DZn4Ply4Cqiiqs02XjxXnIIa5meRdmJXBA== X-Google-Smtp-Source: ABdhPJwKEsnJIBidvE3M97rTL5oKm+nQyAWer9QUjEVt9Adyy4syNP1Fkvps62FI/5jncpCB+vi76w== X-Received: by 2002:adf:f70e:: with SMTP id r14mr2794827wrp.150.1592552688811; Fri, 19 Jun 2020 00:44:48 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id l1sm6437497wrb.31.2020.06.19.00.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jun 2020 00:44:48 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Karl Fogel Cc: Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? References: <87r1ubfyq5.fsf@red-bean.com> <87o8pffqm2.fsf@gmail.com> Date: Fri, 19 Jun 2020 09:44:47 +0200 In-Reply-To: <87o8pffqm2.fsf@gmail.com> (=?utf-8?Q?=22K=C3=A9vin?= Le Gouguec"'s message of "Fri, 19 Jun 2020 09:43:01 +0200") Message-ID: <87k103fqj4.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=kevin.legouguec@gmail.com; helo=mail-wr1-x42d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 07:44:52 -0000 K=C3=A9vin Le Gouguec writes: > FWIW, back in December[1] Juri mentioned that read-multiple-choice s/December/November/ From MAILER-DAEMON Fri Jun 19 04:53:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmCm7-0006wD-P5 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 04:53:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59588) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmCm6-0006vz-48 for emacs-devel@gnu.org; Fri, 19 Jun 2020 04:53:26 -0400 Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]:40571) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmCm4-000811-HE for emacs-devel@gnu.org; Fri, 19 Jun 2020 04:53:25 -0400 Received: by mail-io1-xd33.google.com with SMTP id q8so10391063iow.7 for ; Fri, 19 Jun 2020 01:53:24 -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 :cc:content-transfer-encoding; bh=HXeRzduN4qsww3Zq5IrslxcSglCEgzkO4NvCfLvhTlg=; b=A/3A2RgHRmwSWUjza4ZRfg50Ey6+j1RXXLg17jc1eATrEfBcY7ScbigPqhUo2v34nm Uls1xgP2Q9irIlIEX+WrsyIQHAl9T62UEU6xigl2QRlYuar8I6XOVsmO7nbx3e0EqJDw nNbcqtD2BZu8TMv80mZlW/TdEx663NS8CwQV7XOn8z9QA6wyWk5ZvRNTHZi13GUANh4L MjDfi0wRYNA3Jbdpyvg278APs6fB7BMOqA+M9uMu34tadZ7P6/GOCf6VASYi2cpbdfpw OlQJzmSKq9e0kt/1tMHHcyqmlQwI5j5GmhxPehGEY8TdGYHEtGKbvqzybkfML+agdVVx AQzQ== 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:cc:content-transfer-encoding; bh=HXeRzduN4qsww3Zq5IrslxcSglCEgzkO4NvCfLvhTlg=; b=FvKmMnU4gjS7R3XNC4jBFw/mU7dbnodCDk4zM/4hDD6FNGuiHWFcfqpYcHYZ047xev 4YcrM6niSC4cvxnjhVGSsmZUygOeG38BwdPQaae8D6FIqXdf7gX+1H9zWwAqS3bFJ9MW xV+HGVS+9VkS4CyqOMgSMLTNNOolPBOl/Pb2fvoGPKj7vVNjVDYHF124ENvggwZiCMcQ u8M1fZu2zcOsw1gAMd6kO1tyfQoFim3zGKlUVzG18i+wyiKB0/USyr0cY7MacS4Oh3aW s4EGdbbnYp0hC8WkuBNcXhhV/laIOevC9DJSddfUMjgnMHDRhfHs4+qIjaDB/VWoeBXg VxEg== X-Gm-Message-State: AOAM531ps5K/x+I8l/PdoLux9jG8aGSzJEN0ZlrFpFcECqncBcIb7CUO hw2J2u/OkQuWapn1l7S4foC5I3fhUku1ZaoDt5o= X-Google-Smtp-Source: ABdhPJyC0glISgy3ZAbF+kO1vhO7fs3xZO2wqyq6zhYTAEPqZA5+WnnuJKhF76KxZB3EBe1oFXUWZrbQUOf4AHAjmJI= X-Received: by 2002:a6b:1d7:: with SMTP id 206mr3188406iob.138.1592556803313; Fri, 19 Jun 2020 01:53:23 -0700 (PDT) MIME-Version: 1.0 References: <1704199899.1577092.1591806438580.ref@mail.yahoo.com> <1704199899.1577092.1591806438580@mail.yahoo.com> <13ec44ed-4b54-8d43-590f-709bd813fd01@yandex.ru> <795146083.1708851.1591826041689@mail.yahoo.com> <87y2ouldrr.fsf@mail.linkov.net> <52efa3bf-1efc-81d5-9c2d-4aefbfa5db5d@yandex.ru> <20200611132234.nbluayofcxh23cwg@ergus> <877dw5cqgb.fsf@mail.linkov.net> <4967aca0-5827-1ab9-dd13-65c50b060f05@yandex.ru> <877dw5badz.fsf@mail.linkov.net> <64474704-e58f-f4cf-88f1-63d26f8e2f3b@yandex.ru> <877dw4qbuu.fsf@mail.linkov.net> <87y2okm1gx.fsf@mail.linkov.net> In-Reply-To: <87y2okm1gx.fsf@mail.linkov.net> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 09:53:12 +0100 Message-ID: Subject: Re: vertical fido-mode To: Juri Linkov Cc: Dmitry Gutov , Ergus , "monnier@iro.umontreal.ca" , "emacs-devel@gnu.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d33; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd33.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 08:53:26 -0000 On Thu, Jun 18, 2020 at 11:53 PM Juri Linkov wrote: > > >> >> Or maybe it's possible to navigate history using completion lists? > >> > > >> > I'm not sure how that would look. > >> > >> Currently completion is performed on a set of all possible values. > >> In addition to this, completion could be performed on a set of > >> all previously entered values (history items), or on default items > >> (a list of the most useful values). This shows all 3 possibilities: > >> > >> (completing-read "Prompt: " > >> minibuffer-history nil nil nil > >> 'minibuffer-history > >> minibuffer-history) > >> > >> M-n - defaults list, M-p - history list, TAB - completion on history l= ist. > >> > >> In a normal minibuffer maybe there should be a key to switch between > >> normal completion, completion on defaults, and completion on history. > >> Also maybe another key to sort history items by recency/frequency > >> in the completion list. > > > > I think, you are starting to describe incremental reverse history searc= h, > > or C-r in normal minibuffers. It works in icomplete, too, but not too > > well in my opinion. Still, it's better to fix that than to reinvent th= e wheel. > > Actually I meant displaying a list of completions (no matter whether > in the *Completions* buffer or inline like in icomplete) based on > different sets of input data (on all possible values like default complet= ion, > or on all history items...) Sorry, Juri. Perhaps I read your email in a hurry. I'm not opposed to having new forms of navigating history or other collections of potential completions, of course. I was just mentioning that within the current completion interface, both the regular minibufer, Icomplete and Ido have ways to reach back to history items using "reverse-isearch". The regular minibuffer's is triggered by C-r and in Ido it's simply a question of typing something, then typing M-p, if I recall correctly. In Icomplete, C-r works , but what follows is not completely intuitive, IMO. It should be perfected. What I said for Icomplete goes for Fido, except that uses C-M-r because its C-r is used for something else. Jo=C3=A3o --=20 Jo=C3=A3o T=C3=A1vora From MAILER-DAEMON Fri Jun 19 07:01:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmEmG-0000R9-D1 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 07:01:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35030) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmEm9-0000OS-GS for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:01:37 -0400 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]:42231) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmEm6-0004l6-Tf; Fri, 19 Jun 2020 07:01:36 -0400 Received: by mail-ej1-x62f.google.com with SMTP id k11so9723509ejr.9; Fri, 19 Jun 2020 04:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=GJ2JybYPMm74c93xIgZgmyzERw056qttU/DOJoy57uA=; b=tpik1t6menmZ8Qib9QwtLcRfmvc4YzyhnYI+sQ0ktVsTWsfLiginXc8jFpG9xg2dcj 3kXOnV/zdjto8Pc7VDZUayks/SuAk1vZn+IoJBazaWbVxKj5x52Y0G2hLaSZzo7W2QDO nJ8SWa0MWulc4chAyF3Tg1fZjFJwZ4obSTvlt8/fE66XD4pQdY5ndFpF3ihoJswpgWUy lWNsUlOWvUsgSDstvP3/sokqljwRMTnJuWBi+iUhphrvZlz9Cwf2BOHitdTXhLQgoP5U EnXZA+QoC3AnS2D+7Y3FQqRqUI5v3sOdXBBQqXHKQHRlmcB9LcJTmPGLusyoomgxmlOH tdUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=GJ2JybYPMm74c93xIgZgmyzERw056qttU/DOJoy57uA=; b=MtirVSM0swKrvUA9BOYST/JZFKbg/3zpfxchAXyLb7qr1I1keVqbgRscnpX4roNqmJ BS8Be5mFWgUTOp01kjlJ4eNoAtFaQHx6k4cdt2B8KyUNQfOmRrYgaIHQRp0IOKcTP7gP Us5KMVfS4+so1r4tFj3+1y/qzZEUPZMKOfdjpcabwUUUIBe/VuznEEpmMvSUIQIrOzJb 5q6ZavXaO+y/VoC5usQO+zyTpkW1ILdhvXFeRbqzjq61trMtSWtA7bCfzJpeCDFtvM+5 FxcCjrhGic43hx9TJBMwcGLDDAk9Op1RAcXG7Zp5z3VZNCCmlQQjBfNuyNbiTzdGK+q1 9PgA== X-Gm-Message-State: AOAM532P/dKYQdi1bnap+qdY6L2LNsoMEfv/QY75SmOe7cP1dsyqhRTk bEYKndAcki6cJLtSjdiljXhdz5l5 X-Google-Smtp-Source: ABdhPJww9VLZXyb8kW/4ahwObRwb3eZ5UAi4NLt8LU0gOIeGHC6Pgxjq8AHhGoxwCriue0Z0vWQ8RA== X-Received: by 2002:a17:906:4a8d:: with SMTP id x13mr2987208eju.26.1592564484597; Fri, 19 Jun 2020 04:01:24 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id s2sm4385769edu.39.2020.06.19.04.01.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 04:01:24 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: emacs-devel@gnu.org, Eli Zaretskii References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> From: Dmitry Gutov Message-ID: <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> Date: Fri, 19 Jun 2020 14:01:22 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62f; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 11:01:38 -0000 On 19.06.2020 10:54, Eli Zaretskii wrote: > - "Switch to a buffer in the current project." > + "Switch to another buffer that visits some file in the current project." That's not exactly true: non-file-visiting buffers are also suggested. From MAILER-DAEMON Fri Jun 19 07:25:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmF8s-0002VH-M8 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 07:25:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40664) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmF8q-0002UU-95 for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:25:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40592) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmF8p-00006Q-IJ; Fri, 19 Jun 2020 07:25:03 -0400 Received: from [176.228.60.248] (port=3480 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmF8o-0007NU-GU; Fri, 19 Jun 2020 07:25:03 -0400 Date: Fri, 19 Jun 2020 14:24:51 +0300 Message-Id: <831rmbz4ak.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: emacs-devel@gnu.org In-Reply-To: <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 14:01:22 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 11:25:04 -0000 > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 14:01:22 +0300 > > On 19.06.2020 10:54, Eli Zaretskii wrote: > > - "Switch to a buffer in the current project." > > + "Switch to another buffer that visits some file in the current project." > > That's not exactly true: non-file-visiting buffers are also suggested. Feel free to suggest a correction. "Buffer in a current project" sounds too vague at best to me: a project doesn't include any buffers. From MAILER-DAEMON Fri Jun 19 07:37:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmFL9-0002Em-HE for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 07:37:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46386) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmFL7-0002Dv-Hn for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:37:45 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:32926) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmFL5-0002YD-36 for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:37:45 -0400 Received: by mail-wm1-x331.google.com with SMTP id j198so8647900wmj.0 for ; Fri, 19 Jun 2020 04:37:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=J+rKCmHESJtuNr7Z2/MiWtnEwSR9F69zrQkbQB2XH6I=; b=HLYO5QtDjRtgwuAKinoMAtMBvehJLNPKozymbSEOWa+UXHAwQrVg91Xr5fEG59vhqO BZB4XkEMCaq91INtveI5XDaCEuMckspM4JiMZMOgTSKHp77XG6kBjdovSWzN97mJz7Ll HNSbPK8ubgdaXiP+A8xCwPOingO9y8XaPKIkf4asgZcsyiaQ0Y7L0udfVGWtCg+hOHx7 Ol1hbgz5+9mu4pvAi7y5sDS5LeNk+rrs9KRzI6JqiYMmLUk8rWcLjW4bfVNriQp5tHI1 j8qeZohMBARrm1CXgCDF+dhmCtgAF6IQsygqloeX1iX8pDnLfE472BIZ+NcpbM4TZ8y/ rrQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=J+rKCmHESJtuNr7Z2/MiWtnEwSR9F69zrQkbQB2XH6I=; b=WoO5NN9JTs8vMHcYdw8kELlKXnyiB+tg4Vw0RZVRBk1cayg2enTGqNG1gkumCt+9Bi qgGtyqYGYXEl2ZQKExOL4CF02SEHMj5gc4ag/M7LVO49HVztMcYJqa8bdYHcRDeA/q9F uAVs2uNtd7ICgdcXbSdry4Iuf+lzJS5pw02Hp2azaI8gmEyZAWR9Hqtyj8SXt4ALxZHo RZy/glGIyebIEx+brqptY91FaJhsuG0V2WeIGCc2Ho7cImkHLkgOw0mMvdVQznSxVOco G+dxg58+mawW1hD6tO6ITT2fHCkccWj0A8SwIlh2i9HBMsvkS8uhj7+bfeiJyOklDKNx Vkkg== X-Gm-Message-State: AOAM531QhIuv+kE2vnHdMh2HApLsypL3SME1QIEWSKY6Ex43XnzGXQFf eqYbgK8YEzqbGO16DcUIHC0KIg== X-Google-Smtp-Source: ABdhPJwDNueWmSjb1LrOWkELEySA+w/fWI6BaS9YdUACYrNiiQqKNSYun2CfQKqN/esSHB5MjNFPiw== X-Received: by 2002:a1c:2901:: with SMTP id p1mr3428615wmp.144.1592566660823; Fri, 19 Jun 2020 04:37:40 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id s8sm7051510wrm.96.2020.06.19.04.37.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jun 2020 04:37:40 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: Dmitry Gutov , emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> Date: Fri, 19 Jun 2020 12:37:39 +0100 In-Reply-To: <831rmbz4ak.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 19 Jun 2020 14:24:51 +0300") Message-ID: <87366rcmm4.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::331; envelope-from=contovob@tcd.ie; helo=mail-wm1-x331.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 11:37:45 -0000 Eli Zaretskii writes: >> From: Dmitry Gutov >> Date: Fri, 19 Jun 2020 14:01:22 +0300 >> >> On 19.06.2020 10:54, Eli Zaretskii wrote: >> > - "Switch to a buffer in the current project." >> > + "Switch to another buffer that visits some file in the current project." >> >> That's not exactly true: non-file-visiting buffers are also suggested. > > Feel free to suggest a correction. "Buffer in a current project" > sounds too vague at best to me: a project doesn't include any buffers. Is "buffer under a project" any better, or just as vague? -- Basil From MAILER-DAEMON Fri Jun 19 07:49:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmFW6-0003pl-Hn for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 07:49:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48390) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmFW4-0003pT-Ff for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:49:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42162) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmFW3-0004VM-97; Fri, 19 Jun 2020 07:49:03 -0400 Received: from [176.228.60.248] (port=4961 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmFW2-0007u9-HK; Fri, 19 Jun 2020 07:49:03 -0400 Date: Fri, 19 Jun 2020 14:48:49 +0300 Message-Id: <83wo43xom6.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: (message from Konstantin Kharlamov on Fri, 19 Jun 2020 01:34:21 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 11:49:04 -0000 > From: Konstantin Kharlamov > Cc: Eli Zaretskii , Dmitry Gutov , Stefan > Kangas , emacs-devel@gnu.org > Date: Fri, 19 Jun 2020 01:34:21 +0300 > > > I’d also like to note that this list can be invaluable when rebasing > > commits and resolving conflicts. It’s not strictly necessary (just like > > other parts of a version control workflow are not strictly necessary), > > but it can serve as a sanity check in a time when the diff is not > > authoritative as it is in flux. > > While it may be useful, but explicit examples may be more interesting. Right now > when I read your text about this list in the context of resolving rebase > conflicts, I only see the downside that if the conflict came up because a > function was renamed, you need to go fix the commit message too. > > Even worse: if upon rebasing a function was renamed, you may not get any > conflicts (i.e. because thunk you modified didn't include the beginning of the > function), and now your commit message is broken without you even noticing. There's no requirement to retroactively fix commit log messages when files or functions are renamed. The renaming is recorded in the history and can be found when one needs to explore the history of some code fragment. What is important is that the log message names the files and functions/macros/data structures as they are called at the time of the commit, because the log message is many times read in conjunction with the diffs. So I don't think the difficulties you describe are real. > It is possible, it's just that I do not see this. Convincing someone that the > commit message with the list provides more benefit than without it requires > examples that make it explicit. > > So far the whole thread (both this part and the one with Dmitry) had only > negative examples, i.e. why having the list is a burden to anyone. The GNU Coding Standards were recently changed to provide the rationale for having this information in the log messages. Since the official Prep page wasn't updated yet, I show the relevant text below, in the hope that it will give you enough information to understand why having that in the log messages could be beneficial. > Let me sum up the positive mentions: so far, you just say it simplifies review > for you, but I don't know your workflow, there may be many factors that make you > assert that, which does not necessarily applies to everyone. Dmitry said the > list makes better commit messages from novices, but again when I tried to dig > deeper, that discussion died. When you contribute changes to a project, you need to satisfy the workflows of others, even if they differ from yours. So you need to respect the opinions of the project developers when they tell you this information is of help to them. Here are the excerpts from the latest GNU Coding Standards manual I mentioned above: ---------------------------------------------------------------------- Therefore, change logs should be detailed enough and accurate enough to provide the information commonly required for such @dfn{software forensics}. Specifically, change logs should make finding answers to the following questions easy: @itemize @bullet @item What changes affected a particular source file? @item Was a particular source file renamed or moved, and if so, as part of what change? @item What changes affected a given function or macro or definition of a data structure? @item Was a function (or a macro or the definition of a data structure) renamed or moved from another file, and if so, as part of which change? @item What changes deleted a function (or macro or data structure)? @item What was the rationale for a given change, and what were its main ideas? @item Is there any additional information regarding the change, and if so, where can it be found? @end itemize [...] Following the free-text description of the change, it is a good idea to give a list of names of the entities or definitions that you changed, according to the files they are in, and what was changed in each one. @xref{Style of Change Logs}. If a project uses a modern @acronym{VCS} to keep the change log information, as described in @ref{Change Logs}, explicitly listing the files and functions that were changed is not strictly necessary, and in some cases (like identical mechanical changes in many places) even tedious. It is up to you to decide whether to allow your project's developers to omit the list of changed files and functions from the log entries, and whether to allow such omissions under some specific conditions. However, while making this decision, please consider the following benefits of providing the list of changed entities with each change: @itemize @bullet @item Generation of useful @file{ChangeLog} files from @acronym{VCS} logs becomes more difficult if the change log entries don't list the modified functions/macros, because @acronym{VCS} commands cannot reliably reproduce their names from the commit information alone. For example, when there is a change in the header part of a function definition, the heading of the diff hunk as shown in the VCS log commands will name the wrong function as being modified (usually, the function defined before the one being modified), so using those diffs to glean the names of the modified functions will produce inaccurate results. You will need to use specialized scripts, such as gnulib's @file{vcs-to-changelog.py}, mentioned below, to solve these difficulties, and make sure it supports the source languages used by your project. @item While modern @acronym{VCS} commands, such as Git's @kbd{git log -L} and @kbd{git log -G}, provide powerful means for finding changes that affected a certain function or macro or data structure (and thus might make @file{ChangeLog} files unnecessary if you have the repository available), they can sometimes fail. For example, @kbd{git log -L} doesn't support syntax of some programming languages out of the box. Mentioning the modified functions/macros explicitly allows finding the related changes simply and reliably. @item Some @acronym{VCS} commands have difficulties or limitations when tracking changes across file moves or renames. Again, if the entities are mentioned explicitly, those difficulties can be overcome. @item Users that review changes using the generated @file{ChangeLog} files may not have the repository and the @acronym{VCS} commands available to them. Naming the modified entities alleviates that problem. @end itemize @noindent For these reasons, providing lists of modified files and functions with each change makes the change logs more useful, and we therefore recommend to include them whenever possible and practical. It is also possible to generate the lists naming the modified entities by running a script. One such script is @file{mklog.py} (written in Python 3); it is used by the @code{GCC} project. Gnulib provides another variant of such a script, called @file{vcs-to-changelog.py}, part of the @code{vcs-to-changelog} module. Note that these scripts currently support fewer programming languages than the manual commands provided by Emacs (@pxref{Style of Change Logs}). Therefore, the above mentioned method of generating the @code{ChangeLog} file from the @acronym{VCS} commit history, for instance via the @code{gitlog-to-changelog} script, usually gives better results---provided that the contributors stick to providing good commit messages. From MAILER-DAEMON Fri Jun 19 07:50:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmFXP-0005JF-2W for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 07:50:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmFXN-0005GV-I4 for emacs-devel@gnu.org; Fri, 19 Jun 2020 07:50:25 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42254) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmFXN-0004ey-0V; Fri, 19 Jun 2020 07:50:25 -0400 Received: from [176.228.60.248] (port=1073 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmFXM-00080o-CM; Fri, 19 Jun 2020 07:50:24 -0400 Date: Fri, 19 Jun 2020 14:50:13 +0300 Message-Id: <83v9jnxoju.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <87366rcmm4.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <87366rcmm4.fsf@tcd.ie> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 11:50:25 -0000 > From: "Basil L. Contovounesios" > Cc: Dmitry Gutov , emacs-devel@gnu.org > Date: Fri, 19 Jun 2020 12:37:39 +0100 > > Feel free to suggest a correction. "Buffer in a current project" > > sounds too vague at best to me: a project doesn't include any buffers. > > Is "buffer under a project" any better, or just as vague? Just as vague, IMO. We need to explain what that means in practical terms. From MAILER-DAEMON Fri Jun 19 08:05:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmFlX-00028R-Qg for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 08:05:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52138) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmFlV-00025X-Uv for emacs-devel@gnu.org; Fri, 19 Jun 2020 08:05:02 -0400 Received: from mail-qk1-x72f.google.com ([2607:f8b0:4864:20::72f]:44751) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmFlL-0006yl-B4; Fri, 19 Jun 2020 08:05:01 -0400 Received: by mail-qk1-x72f.google.com with SMTP id b4so8585771qkn.11; Fri, 19 Jun 2020 05:04:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=89lr63Uv2JHC+e7kTsJA+Z4IhSLIWBxM0vuvpMgC94k=; b=OSJ70d58oR9tVG4PLBeynp1Iv5cP84+6pCD/xpUaFTjYG+ntZIHTZuWeGDY9o2ymgf x2MBr5cwbDRxJb86rtW6qyn4s+Im1M+MUaNO+RYFDbg0K6zrdfCqocL+Apdy2/+o9Icg d7ktc7DBibuctkDSxKIc8XzkLkUMV0zhemNDIszEcxvetSM/GgT0FHAzZym/I6/HkCRS RtPuAk1YRNuJ9bGJ/jomIctWnA2/gBsbsqwQiVyJUV1mu1PoapwK7+uAO5GUp/X5Vhbh f4Cwt5wfcv5H8ONmFfvIxDaKEkxZ9MDI1Ss12S7jh79otH73fiNiuHfnx/T/68rxbnZg h5gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=89lr63Uv2JHC+e7kTsJA+Z4IhSLIWBxM0vuvpMgC94k=; b=fa017yKIZOdiAXY3rhLZx3VI5QPBFlFrRQe61abwrxsvbKpnOWHPTAM2UWrvRtgklu yHh1KXmbDO9gplu290XArNOp/9wEdb6nxyaJ+eVvCCNv/TurAF4uyvm53GMyOD4CE3Dr sLOr3pfU66af2gafaU1Hv2iUt9fz7NPd8vB5Xli9+ith2GEdUowSF8dO/qV2NimO2eMU yB5JOy2nlsNKQn5JbsdnZTRDk1zZSg9yrCzVZAZHiWmEKxk6QSZTvoURgoiZvo3LVrNT /3cRE5HyKXnRuBtjMAujTaSVu0act9lF58Ki0kOegTRi/kCGjWFOJLaE7AIdbsQujure PF9Q== X-Gm-Message-State: AOAM5304IlXv/rkNUBfhZ+Wy5sbYUz2viwvJNn0cirV3uEt9zs8Bnera VZyaWfKQx8ZlbvgUmOBwbNt32hm6PmtIXg== X-Google-Smtp-Source: ABdhPJz9tHGqJxueNlOCM7Rp2Lcxupz+w1CHZ2eIGDiRwz2RlSogHqxyvImObHwq10/5hL9QGaR7Xw== X-Received: by 2002:a05:620a:576:: with SMTP id p22mr3069550qkp.257.1592568289532; Fri, 19 Jun 2020 05:04:49 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id q124sm6459509qke.51.2020.06.19.05.04.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Jun 2020 05:04:48 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Line wrap reconsidered From: Yuan Fu In-Reply-To: <838sgjzij2.fsf@gnu.org> Date: Fri, 19 Jun 2020 08:04:47 -0400 Cc: Lars Ingebrigtsen , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::72f; envelope-from=casouri@gmail.com; helo=mail-qk1-x72f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 12:05:02 -0000 > On Jun 19, 2020, at 2:17 AM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Thu, 18 Jun 2020 17:46:53 -0400 >> Cc: Lars Ingebrigtsen , >> emacs-devel >>=20 >> I have to do another change for kinsoku.el to work right in bidi. = Kinsoku.el defined NOT_AT_BOL and NOT_AT_EOL categories. These = categories are flipped in bidi paragraphs: what was EOL becomes BOL and = vice versa. So I flipped them in my predicate function depending on = it->bidi_p. >=20 > I don't think I understand what you mean here. BOL and EOL are > logical-order terminology, and bidi reordering doesn't change their > meaning. >=20 > Maybe I don't understand the exact meaning of NOT_AT_EOL/NOT_AT_BOL > that Kinsoku assigns to that. Can you provide a formal definition of > that, or point me to some document where that is explained? =20 Since kinsoku.el is for asian characters which are all LTR[1], the exact = meaning of NOT_AT_EOL/NOT_AT_BOL in bidi context probably doesn=E2=80=99t = really matter, but to make kinsoku retain the same behavior (thus looks = right) in both RTL and LTR lines, I choose to define BOL as left edge = and EOL as right edge. So NOT_AT_EOL means can=E2=80=99t be the = right-most character in a line. =46rom your message I thought in RTL lines the iterator draws from right = to left (you said each glyph is prepended to the previous one). So in = RTL context when we are at the end of a logical line, we are at the left = edge; on the other hand, in normal LTR context when we are at the end of = a logical line, we are at the right edge. Hence the flip. > The > important aspect of this is that in bidi-reordered text the character > that appears at the left edge of a line is not necessarily the first > character of the line after the preceding newline. So the issue is > what does Kinsoku say about such situations? IOW, definitions that > assume strict LTR text will not help us here. As I mentioned above, I don=E2=80=99t think kinsoku cares/is defined for = this situation. And I took the definition to assume strict LTR, mapping = BOL to left and EOL to right. The ultimate effect is that, no matter = what the bidi context is, NOT_AT_EOL character, like =E3=80=8A, never = appears at the right edge. So we don=E2=80=99t get =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6=EF= =BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5=90= =8D=E5=AD=97=E6=98=AF=E3=80=8A =E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90=E7=9A=84=E3= =80=8B=E3=80=82 Instead, we have =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6=EF= =BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5=90= =8D=E5=AD=97=E6=98=AF =E3=80=8A=E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90=E7= =9A=84=E3=80=8B=E3=80=82 Now, is that mapping TRT for other characters? I don=E2=80=99t know. But = I think it make sense for kinsoku (again, asian text, all LRT). IMHO, = maybe for a generic definition we can define BOL as left edge for LTR = character and right edge for RTL character. I think that will look good = for most text. Yuan [1] There is also a top-down layout, but I don=E2=80=99t think we need = to worry about that. From MAILER-DAEMON Fri Jun 19 08:30:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmGAS-0005AG-0k for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 08:30:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmGAN-00056G-5B for emacs-devel@gnu.org; Fri, 19 Jun 2020 08:30:45 -0400 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]:35033) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmGAJ-0003Nr-6P; Fri, 19 Jun 2020 08:30:42 -0400 Received: by mail-ej1-x62f.google.com with SMTP id y13so10020969eju.2; Fri, 19 Jun 2020 05:30:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=1XBYUOZPgSiXwHrLhqQ4qRjfxbjxlwGg4AvHWiOgnAE=; b=XLWB6EBh2eUD2H1zTjm+GCfbyCYPjfRoilE+8f2FiSb3MEau+aitV8jO+hkYpZEeEV /cEpN8ubZuENe6Rs+u2+kEsY0CXmFxuJ6KCSHa4tx8xYGVsulYJsi0Ec9DQNUO/8oOVZ t9AaR6In1EHvubmPgcDzE27G2xOhElegms3LPUEwcolTpOYTU2qRF51FWmDUGi4n+Se0 x4OskIqoOD7w7uiUNZN8T5p3+n9TcvmdEviogOD19DrGx0YlV2CDYUpXTdsBTjIERUBJ vR0jhoZihIevovSWq5cVZdSweoT2xwHW+Ogopu4GQPMUda4dvVir+cXXB2yW2ng8Krb+ /fDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1XBYUOZPgSiXwHrLhqQ4qRjfxbjxlwGg4AvHWiOgnAE=; b=rLWZLjLmVENwUG29hbPkOOW+f6K41GP/vx1aiwPmirfrl3Iig0NdvkHM/2G8xHFz4l gGA6ouXvwt8jzgRpjaNE4Gfcekl3PcvWk3GTj0xpWhy/5L9Q9m8aeLIDHs3dcAAob1cH UoxmUi2uUec5Xqwp+2OvDY+/P3XBDxJX9y7rFYBQwKdzFS9X6sC+3OZ4+Cqurb9swCA1 L84grWmhMwyMN4JaFwsC25J0JnYVQUIHodUr3ZXLydpHtRQ0F3SDRyUK4gx8Crt2EZdj i2TxBCfp28zR3SwbdkkJ6dMVLd1wEKOig/ZJiCIerSaaoU00TA0uDbBhXRqh0ghsDZVe Ap/w== X-Gm-Message-State: AOAM5326zSe2te5uEKI9FN5jQeCw9nhnY6XuPFZ93bJG6sF4+LhtEmuF wdXTsRiooieSomyV79FHco8SUy+6 X-Google-Smtp-Source: ABdhPJzgTGJwqpTFMBuZxbRR1zH/wyXCIZb4eMX4Xp8JQ3dMuTbz93mIeNdvmdatyB3M2iu3HoUHYg== X-Received: by 2002:a17:906:c14f:: with SMTP id dp15mr3396710ejc.454.1592569835274; Fri, 19 Jun 2020 05:30:35 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id k23sm4650013ejo.120.2020.06.19.05.30.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 05:30:34 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: emacs-devel@gnu.org References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> From: Dmitry Gutov Message-ID: <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> Date: Fri, 19 Jun 2020 15:30:33 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <831rmbz4ak.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62f; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 12:30:45 -0000 On 19.06.2020 14:24, Eli Zaretskii wrote: > Feel free to suggest a correction. My suggested correction would be the previous wording. It might have been more vague, but it covered both cases. > "Buffer in a current project" > sounds too vague at best to me: a project doesn't include any buffers. It includes their default-directory-es. Any idea how to modify the docstring that the first sentence still fits on one line? From MAILER-DAEMON Fri Jun 19 08:38:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmGHt-00063x-PS for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 08:38:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmGHs-0005yY-4Q for emacs-devel@gnu.org; Fri, 19 Jun 2020 08:38:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44841) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmGHr-00050U-Ow; Fri, 19 Jun 2020 08:38:27 -0400 Received: from [176.228.60.248] (port=4157 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmGHr-0005SD-6Y; Fri, 19 Jun 2020 08:38:27 -0400 Date: Fri, 19 Jun 2020 15:38:15 +0300 Message-Id: <83sgerxmbs.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu Cc: larsi@gnus.org, emacs-devel@gnu.org In-Reply-To: (message from Yuan Fu on Fri, 19 Jun 2020 08:04:47 -0400) Subject: Re: Line wrap reconsidered References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 12:38:28 -0000 > From: Yuan Fu > Date: Fri, 19 Jun 2020 08:04:47 -0400 > Cc: Lars Ingebrigtsen , > emacs-devel@gnu.org > > > Maybe I don't understand the exact meaning of NOT_AT_EOL/NOT_AT_BOL > > that Kinsoku assigns to that. Can you provide a formal definition of > > that, or point me to some document where that is explained? > > Since kinsoku.el is for asian characters which are all LTR[1], the exact meaning of NOT_AT_EOL/NOT_AT_BOL in bidi context probably doesn’t really matter, but to make kinsoku retain the same behavior (thus looks right) in both RTL and LTR lines, I choose to define BOL as left edge and EOL as right edge. So NOT_AT_EOL means can’t be the right-most character in a line. > > From your message I thought in RTL lines the iterator draws from right to left (you said each glyph is prepended to the previous one). So in RTL context when we are at the end of a logical line, we are at the left edge; on the other hand, in normal LTR context when we are at the end of a logical line, we are at the right edge. Hence the flip. What do you mean by "in the RTL context"? Remember: bidi reordering can take place in two different situations: then the paragraph direction is left-to-right, and when it's right-to-left. In the former situation, the lines begin on the left, in the latter they begin on the right. But LTR text, such as CJK characters, will always be rendered left-to-right, no matter what is the paragraph direction. So which "RTL context" did you mean here? > As I mentioned above, I don’t think kinsoku cares/is defined for this situation. And I took the definition to assume strict LTR, mapping BOL to left and EOL to right. The ultimate effect is that, no matter what the bidi context is, NOT_AT_EOL character, like 《, never appears at the right edge. So we don’t get > > > 我今天看æ¥äº†æœ¬ä¹¦ï¼Œæ„Ÿè§‰æŒºæœ‰æ„æ€ï¼Œå字是《 > é’¢é“是怎样炼æˆçš„》。 > > Instead, we have > > 我今天看æ¥äº†æœ¬ä¹¦ï¼Œæ„Ÿè§‰æŒºæœ‰æ„æ€ï¼Œå字是 > 《钢é“是怎样炼æˆçš„》。 What do you see in the text below? ×בגד הוזחטיכך למנן 我今天看æ¥äº†æœ¬ä¹¦ï¼Œæ„Ÿè§‰æŒºæœ‰æ„æ€ï¼Œå字是 《钢é“是怎样炼æˆçš„》。 (I assume you are reading your email in Emacs; if not, copy/paste this text into an Emacs buffer whose bidi-paragraph-direction is nil, and look at the resulting display.) Does the above look correct, from the Kinsoku POV? This is how LTR CJK text will be displayed in a paragraph with right-to-left base direction. Do you still think something needs to be flipped here? > Now, is that mapping TRT for other characters? I don’t know. But I think it make sense for kinsoku (again, asian text, all LRT). IMHO, maybe for a generic definition we can define BOL as left edge for LTR character and right edge for RTL character. I think that will look good for most text. We must use BOL and EOL in their logical-order meanings, otherwise the result will be utter confusion. In the above example, the EOL character in the first line is 是, and it is not at the left edge of the line. It is at the logical-order end of the line, i.e. the character after it in the buffer position order is the newline. But if we had RTL characters instead of the CJK text above, the character at EOL would indeed have been displayed at the left edge of the line. > [1] There is also a top-down layout, but I don’t think we need to worry about that. Right. From MAILER-DAEMON Fri Jun 19 08:44:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmGNc-0004s8-7O for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 08:44:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmGNa-0004s1-Rj for emacs-devel@gnu.org; Fri, 19 Jun 2020 08:44:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44922) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmGNZ-0005nI-To; Fri, 19 Jun 2020 08:44:21 -0400 Received: from [176.228.60.248] (port=4539 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmGNZ-0005sA-Fc; Fri, 19 Jun 2020 08:44:21 -0400 Date: Fri, 19 Jun 2020 15:44:10 +0300 Message-Id: <83r1ubxm1x.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: emacs-devel@gnu.org In-Reply-To: <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 15:30:33 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 12:44:23 -0000 > Cc: emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 15:30:33 +0300 > > On 19.06.2020 14:24, Eli Zaretskii wrote: > > > Feel free to suggest a correction. > > My suggested correction would be the previous wording. It might have > been more vague, but it covered both cases. That'd be a step backwards, IMO. I changed the doc string because in its original form it didn't tell me enough to understand which buffers could and couldn't be selected by that command. In general, it is IMO wrong to make a doc string too vague because there's some difficulty in saying something accurately and yet succinctly enough. We should look for solutions that don't leave our doc strings too vague. > > "Buffer in a current project" > > sounds too vague at best to me: a project doesn't include any buffers. > > It includes their default-directory-es. Any idea how to modify the > docstring that the first sentence still fits on one line? What kind of buffers are those, in normal use? IOW, what buffers are relevant to the project, but don't visit any file/directory? Armed with that knowledge, I could suggest a more accurate doc string that still tells enough to understand what the command does. Thanks. From MAILER-DAEMON Fri Jun 19 08:55:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmGXy-0006W2-8E for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 08:55:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmGXv-0006VG-0U for emacs-devel@gnu.org; Fri, 19 Jun 2020 08:55:03 -0400 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]:42315) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmGXt-0007XG-3C; Fri, 19 Jun 2020 08:55:02 -0400 Received: by mail-ed1-x536.google.com with SMTP id x93so7493503ede.9; Fri, 19 Jun 2020 05:55:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=rDoxWQvrRNVXnnOkI/0fCBNEANJNsTXYQpC6erKQhAU=; b=AaHQU+jXBYF+zSh2kjCUR+lB4fB/zmdyA7TdYOo337caz+P0++YkJibxgG7QvTzps8 UxS2Z4P2dTfWFNrw5aRIqJA25aJaFPUPGmiGl/HYaTnzoGhLsj1l4RollHNo32G1wpjf dvbS9eMziFE5TAo8ShOQJcaX/QwY5ohEUMeRTuCXh0ceN4UEF4bhd0TMoYZ/1npgINru bbyEjHQfyVLIZ9H2NXRoD06Q5N4/MBxatMkkKhs1RyPlBmexI+cKB8acD4f6hNLO53/3 3iZKsDWr4gbnVmGHHwEsV496Hf4c2MFTJw1kB6hTB8SqOeDUlvIBwgESVa2OrIa6f0Sk pnrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=rDoxWQvrRNVXnnOkI/0fCBNEANJNsTXYQpC6erKQhAU=; b=UX2T7PYQ75Onfe3Q80+CyzG3eemITKmQLqUyu3IcMDfeVT4NZ/sEULGOx7AOJ6Fkh4 WY8kQpMRX9RtTAuj5uzJOqlGWal9qoBCYLNDcLNrOKKsSkBdu/T81CnK5dQEON/09SPR LpTnggLL55gD/vF7P6lPBTBJtVwojOlNQDKficKLYjNhsJwkgWOpzdthlc/joGpW1xh6 o3pycxCeeUrz9clph1zOQYbP4JPLdNyxx4kUnyPVgxjSw8PG8PpNzGtTDliGIytdHHtH +UZ8RWIkFgtPaNLiXE8k1f7m3t2jzJ9DUtgnPUqnm3tswLtO38Um8IqXonfaW1/GtKDe UKRA== X-Gm-Message-State: AOAM530uviQhXPqBRpQu9k7Zq5Tz6tEq9U5XdqhSzU/EMNkxIOSQrsEN 1iywx7L+2ezenrcYaa2OuOw= X-Google-Smtp-Source: ABdhPJzZAJdkI5nNZZA8pi9Q6qiLYvW2WLZia7LFix7ulQF//s7xI5REp52SnDiTOQqfkBecCkVPaQ== X-Received: by 2002:a05:6402:307c:: with SMTP id bs28mr3359450edb.3.1592571298891; Fri, 19 Jun 2020 05:54:58 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id j10sm4835658edf.97.2020.06.19.05.54.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 05:54:58 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: emacs-devel@gnu.org, "Philip K." References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> <83r1ubxm1x.fsf@gnu.org> From: Dmitry Gutov Message-ID: <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> Date: Fri, 19 Jun 2020 15:54:56 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83r1ubxm1x.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::536; envelope-from=raaahh@gmail.com; helo=mail-ed1-x536.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 12:55:03 -0000 On 19.06.2020 15:44, Eli Zaretskii wrote: >> My suggested correction would be the previous wording. It might have >> been more vague, but it covered both cases. > > That'd be a step backwards, IMO. I changed the doc string because in > its original form it didn't tell me enough to understand which buffers > could and couldn't be selected by that command. In general, those would be the buffers where (project-current) would return the current project. I think that's pretty unambiguous. >>> "Buffer in a current project" >>> sounds too vague at best to me: a project doesn't include any buffers. >> >> It includes their default-directory-es. Any idea how to modify the >> docstring that the first sentence still fits on one line? > > What kind of buffers are those, in normal use? IOW, what buffers are > relevant to the project, but don't visit any file/directory? If you look at bug#41868, it mentions VC-Dir and Dired buffers. Perhaps Philip also has other examples. It also cleans up some "invisible" buffers created to service the files in the project, such as ones created by Flymake, etc. From MAILER-DAEMON Fri Jun 19 09:23:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmGzM-0002re-Gh for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 09:23:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmGzK-0002p3-Kq for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:23:22 -0400 Received: from mail-io1-xd29.google.com ([2607:f8b0:4864:20::d29]:45068) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmGzI-00045I-U5 for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:23:22 -0400 Received: by mail-io1-xd29.google.com with SMTP id y5so11097362iob.12 for ; Fri, 19 Jun 2020 06:23:20 -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 :cc:content-transfer-encoding; bh=JOMWtXF+NOBRkGLMazi9N8qn0NmLZz6fVexuszWHwY0=; b=jugYfR4gfqGYg15642gNiizV9jjqSi96xFbId6+jlkJrfJ4ExogHpXPivxeOz0Ist+ IhHcQqIoyX0OHznZBbz4p+p7i4At1v4+1XGfRnQj0SxOLMCJ+GKEgFAaBHEhB7+kwwa1 E+JmqlC1piEVK0mcMKumdYQlKnK9mbHLKwYLkvjJnu6Ygn/ZLEJAr2WK+69I2oc0APGe /+k/XJhj2wIEA+Ssg/uCKsYawDEmvmdMxoT26MdEVT8gfgF+bZIJIfV8nyJItNf6UOpm Jw2w6cZCFsdXrcRytvHUumr6G8E/W5uw3y0jd9agM7tti1c6IH19D1bWNaRBiSxQGnaa kmzg== 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:cc:content-transfer-encoding; bh=JOMWtXF+NOBRkGLMazi9N8qn0NmLZz6fVexuszWHwY0=; b=J/UpFou11b0VxGZNXOqr5XgDrgRNiKYkx+l7Is4RuETesrjQGgbteEWNLspxOd0xJA e67xOPhv3IWHJlLYqh1b4opi8Y9ykt/gX7H2t40OVCG+vOfHJByovPM3l4Q/usc8VkV8 vlKGO2/SyWydhjjWNoS2qHY8+rI+65Yiu8jZvN9MSvo4mVb/ADyqXjeBrc5GejVFsYC5 z5j0GR0aoKqRvmvuwgZDo6xWmSGVUXK0Lh1Yue/QE4MvAg0YvegT1MLnKQu4ramBtj0A xNqQhAVWJ1wUtJEkNej7LCEkE6S+THbEuexhwqp8jzdFsivm7ITOniujHpYwnkRxBeUc J6zg== X-Gm-Message-State: AOAM533kO3m15nYmaekVgpSrvwKnTb0QXtq8qwS6/mHa7KHp+gRRMbZ7 3RIznX1FrmB1hALp83o6C9JAjloFhf043wWV6cY= X-Google-Smtp-Source: ABdhPJw+thRdMGsF3MDrUeAzv7LRBvNEa3u/9Mr2a3+nRDAp9GJjVBm1xuU+Nc2qVCqCXORMgOLitQ1fOb0RQkur8as= X-Received: by 2002:a6b:6818:: with SMTP id d24mr4262102ioc.57.1592572999750; Fri, 19 Jun 2020 06:23:19 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> In-Reply-To: <87pn9v19e8.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 14:23:08 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus , emacs-devel Cc: felipelema@mortemale.org, Tobias Rittweiler Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d29; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd29.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 13:23:22 -0000 Thanks you very much Michael for the fix to Tramp, Michael. I'm the discussion switching to emacs-devel. I've yet to test it out, but do you think it's possible to make this fix available in Emacs 27, given that the bug was found there? I'm afraid we won't be able to advertise Tramp support in Eglot soon unless you do this. This is of course assuming that this fix does fix Eglot's attempts to use Tramp (which I or someone else still has to confirm). Thanks, Jo=C3=A3o On Fri, Jun 19, 2020 at 2:18 PM Michael Albinus wr= ote: > > Jo=C3=A3o T=C3=A1vora writes: > > > Hi Michael, > > Hi Jo=C3=A3o, > > > [ Felipe, I don't subscribe to tramp-devel, so please next time CC me i= n > > these emails so that we try to fill in the blanks when there's somethin= g > > not quite clear ] > > Or write an Emacs bug report, if several packages are involved. > > > Thanks for looking into this. I fully understand avoiding the complex > > setup, so I've put together a small Elisp program that you can run from > > Emacs -Q. > > Thanks! It was very helpful. I've pushed a fix to master, which ought to > cure this. > > > There are two tests you can do within eglot-tramp.el: one using the > > usual "cat" program, the other one is more interesting and requires tha= t > > you download "clangd", an LSP server ('sudo apt install clangd' will > > probably do). > > > > But if you don't want to do that (download "clangd"), any program that > > spits out stdout and stderr should have the same effect. > > I've tried both test cases. The clangd variant was a little bit tricky, > because I had to use Fedora's snap installer, and to adapt my remote > $PATH. And the installed clangd didn't return proper messages to my > eyes, but it returned stdout and stderr - all what I need for testing :-) > > Could you pls check? > > > Jo=C3=A3o > > Best regards, Michael. --=20 Jo=C3=A3o T=C3=A1vora From MAILER-DAEMON Fri Jun 19 09:27:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmH3F-0007Wq-NS for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 09:27:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47320) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmH3B-0007Vw-0x for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:27:21 -0400 Received: from wout1-smtp.messagingengine.com ([64.147.123.24]:49227) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmH36-0004nW-8y; Fri, 19 Jun 2020 09:27:20 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.west.internal (Postfix) with ESMTP id EFE026D9; Fri, 19 Jun 2020 09:27:12 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 19 Jun 2020 09:27:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=warpmail.net; h= from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-type; s=fm3; bh=dVSHW0xorwaunkCyhKAE6RhQXszItqK3OWgTrJe Pf20=; b=nbTTWEZTMX3kon0VI+rjG9shJ5b28MRFtPTJSTcBUCBWCdoxNZSZJan wNg3w4guxRCehFldsZoCzRoPfD/UPKWr2WupsdDJIlAds+2lAyJeLKZwlXs1dR7Q 2yhoHrH0A54R+GkFMG1OdDQiBAoraN7xWiyzi4Evt+9lcjJ0AgN0RvSYLRHAAq4i 32snOAJfb6fgjVoY+hckqoH4PbOrWIvel3HW1sB5k5W2/aBCTLVipGvFCxxAoy0r 1q9iBDBdIutPiHmuPrzwdDwzxZuFM9j4GfztkoKX0x82cdR3xs1bE8+amnDP7UVQ kydaV8Ea7tEuk0dKksgfJEb96YsitQg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=dVSHW0xorwaunkCyh KAE6RhQXszItqK3OWgTrJePf20=; b=dH75NGziOdCPCxt4M3H4Za/RLGqfbY0/Y rEVla4pEqXtd5q1dYUKzGWYY08KHlJ8yC6D3CwFsrYB0+dTAp7JKQB0JYr8eUOXj IzVl156Dc9dgZpVll0s2GbiqYFwiB+Bd0lSCWcfZWRmXtNJhS1CvLULhwQgcg9yZ f04dUXPYkxkI1krzv8YYL40jaVP4H2hXrGalHwmA06m8GXNIhMGpKBbUqlgmscqu 1Jx8x+0uc1SmSCyfqP3Ok0U5lNdKQYR0bZDbj01y2gWdeA6HmRBRpP6NMsYfADuJ eWB34VKQMoap7MAtjFRGsT9jpgga6o3gifOAvgynXrV9hpcrkU+3A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejiedgieegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufgjfffkgggtsehttdertddttddtnecuhfhrohhmpedfrfhhihhlihhp ucfmrddfuceophhhihhlihhpseifrghrphhmrghilhdrnhgvtheqnecuggftrfgrthhtvg hrnhepheeuieffveevkeetffeufeekfeejkeekkeefjeelueeftdduffdugfeuieegfffh necukfhppeejledrvdduledrudelledrvdduheenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehphhhilhhiphesfigrrhhpmhgrihhlrdhnvght X-ME-Proxy: Received: from localhost (p4fdbc7d7.dip0.t-ipconnect.de [79.219.199.215]) by mail.messagingengine.com (Postfix) with ESMTPA id 08A283061CB6; Fri, 19 Jun 2020 09:27:11 -0400 (EDT) From: "Philip K." To: Dmitry Gutov Cc: eliz@gnu.org, emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el In-Reply-To: <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 15:54:56 +0300) Date: Fri, 19 Jun 2020 15:27:09 +0200 Message-ID: <87bllfqj82.fsf@warpmail.net> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=64.147.123.24; envelope-from=philip@warpmail.net; helo=wout1-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 09:12:47 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 13:27:21 -0000 Dmitry Gutov writes: >>>> "Buffer in a current project" >>>> sounds too vague at best to me: a project doesn't include any buffers. >>> >>> It includes their default-directory-es. Any idea how to modify the >>> docstring that the first sentence still fits on one line? >> >> What kind of buffers are those, in normal use? IOW, what buffers are >> relevant to the project, but don't visit any file/directory? > > If you look at bug#41868, it mentions VC-Dir and Dired buffers. Perhaps > Philip also has other examples. Magit, compile, xref, grep, occur, eshell would come to mind. > It also cleans up some "invisible" buffers created to service the files > in the project, such as ones created by Flymake, etc. On that topic, I noticed that it might confusing, since they are also counted as "buffers to be killed", while project-switch-to-buffer ignores these, perhaps the prompt should point that out? Just wanted to mention that before I forget it again. -- Philip K. From MAILER-DAEMON Fri Jun 19 09:34:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHAN-0007e3-NE for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 09:34:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHAL-0007dr-8J for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:34:45 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]:41666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmHAJ-00066f-DS; Fri, 19 Jun 2020 09:34:44 -0400 Received: by mail-ej1-x635.google.com with SMTP id dp18so10209525ejc.8; Fri, 19 Jun 2020 06:34:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=mceGoGzeV/qcsFlvmwukuItjazMgx4gEzmoIb4eFDuM=; b=UVRrX6ObAG1aKhUpUPUhd60wr1xxIduKYHLdp3Deie6n1wSnpUV8uNh+g9wBqSZW0A qk60W57ZA72P5G+hbY/mEXnXImSf3d2ggNARIvm9VNUELNALVg9GdKw5i0vVM4XSJE06 79zhIWdqcNnJTlLT4FxQ3qfClqBkDt9MQKaBcUCKVRdDXxrZCC0X3/Ehlw4NiEmhhv1Z YHYkhgr3jopR3CPEdlt4uUTCads7/G55wMAmHvyawapXq6RBOOEALRxi5+eZIjZ3+kc+ ESmXkluZqk/fRjVuGitnoMNhqTJMGuwx6aHcUF5RNZ7SHAqS2Pta5CsKCUZbjjcmyAT5 6biA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=mceGoGzeV/qcsFlvmwukuItjazMgx4gEzmoIb4eFDuM=; b=FA0UI8A88LRgmWlRq2QVVafoFbN8p5wiMS3Y8PHo6ZwJbGOVoVRR7Bmv3AC6iKTWN8 JI2/Br2rqkXQ6iKKBFYRJFwIRdAEmAS9DUz3vSWjh+b9jyFY46D5HpxT9tHMXlbWCa/P 2cn7gcPFe0PznBFuNJyTklDnT3Q9J42cMZGgz0GgiTGOZWSm9jsOn2IGY7l4D8EwIGHe qV1l73tRW7thtNTfqHzFbzL+pMKhyC0bM2rajBjv4eV5CQKYnAIXEQTxJk9BKMyJqYwX APqTtefx7xk5e8yyLMvBlSmgop9/7RtNsJMmp6cqH4e4H7ppQebhPPNIjRnXxEsqEdZU nbLg== X-Gm-Message-State: AOAM530McreXVQgZqYhwQPHOlB7AYcTP6vC7OajeFqlxASPRh12+MBLs C5vXfk0NLXEA2akg6fGE9lQWY7vp X-Google-Smtp-Source: ABdhPJwD6z33jgicmB/JvwiqbaZ7k/DbfhdfvIRmeYbBAM4GtoKwbRG+ghSSDjg1rTgZFXEEPDJ6+w== X-Received: by 2002:a17:906:3b44:: with SMTP id h4mr3746995ejf.463.1592573681399; Fri, 19 Jun 2020 06:34:41 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id be19sm4660133edb.5.2020.06.19.06.34.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 06:34:40 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: "Philip K." Cc: eliz@gnu.org, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> From: Dmitry Gutov Message-ID: <60dad1ba-85a2-c425-0a59-90e0dc461924@yandex.ru> Date: Fri, 19 Jun 2020 16:34:39 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87bllfqj82.fsf@warpmail.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=raaahh@gmail.com; helo=mail-ej1-x635.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 13:34:46 -0000 On 19.06.2020 16:27, Philip K. wrote: >> It also cleans up some "invisible" buffers created to service the files >> in the project, such as ones created by Flymake, etc. > On that topic, I noticed that it might confusing, since they are also > counted as "buffers to be killed", while project-switch-to-buffer > ignores these, perhaps the prompt should point that out? Just wanted to > mention that before I forget it again. Indeed, I also noticed that, and it is somewhat confusing, though accurate. Those buffers can also be created in the background, without explicit user interaction. Not sure what's the best approach. Some options: - Kill xx buffers ([and/of them] xy invisible). - Don't count the invisible ones. - Keep the prompt as-is, just mention that issue in the docstring. From MAILER-DAEMON Fri Jun 19 09:44:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHK0-0008Tf-5x for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 09:44:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHJy-0008TQ-Hz for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:44:42 -0400 Received: from mout.gmx.net ([212.227.15.15]:33595) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHJw-0007tf-Hr for emacs-devel@gnu.org; Fri, 19 Jun 2020 09:44:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592574277; bh=HHpyZoOjIxcnqQR001CbwoM7KZgGZV4wrAbAewtsCvE=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=CmZmMB5SpksxYfiuNQiWovJhnxmhzL2lLrcXuokedEGzdalajER5pEdm7Ko/iVz/F 9OWJ8wMiCyZqkii3XLh3lVnM9AWk3puYDRieLpkd5CRouNLsjWHtDYiGpKEQsFfPmp clm40iKxvfaX5ixUqT+nJg1IBXcDKGCj4SCHY4Bo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MY68d-1jNFX63Fcb-00YNJI; Fri, 19 Jun 2020 15:44:37 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> Date: Fri, 19 Jun 2020 15:44:36 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 14:23:08 +0100") Message-ID: <87ftar186z.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:FXrXT+dehQbGrNen/TSSaziPkPHqH30Ph+KSTXyZ4x9TM1817yo wVGU8nokbEGkr1KZ7BSB2vCMQVP73LtX4++wEx0EnL7CeQ20uwy4HZmD+88I1bpVnNzwh0b 1f+7VadgBA6TIlgZOt9tysXQ33ke599ZnQODAO2UcgmMX9sRRNFcwgMQ7BQol7Q3CaqfPNg 6V7ep9mLAjavO4T/n6SPQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:1QX9aDdSwgE=:9vdMefl8ZqomzwehXV8qDj W8a/fI2SGJqJHJIW/EzcdNhHkHqExDrt3+LnHmK9b9QvHXtLICnQ/xSVp8YMB4OhG7AZkzO90 1r1ZBmdt49Uk434McU20wckEBmDZfPIRZJDEN5DkvBWJww7oSgbOcgE6uhrYQKGncB/3TAaJZ 4/Xx96ta4Jd1GiZhsBJenF3DDfwD9R9GJDVRWONmLZspO0baDJEwbsRK5WTcSmacn7XozI9cx CcS5uLU7uv7ijgb9EMOKtB/ltNXFpb/lsBOXd483hT0Crf/9ODcLv/ou/bUWS1lexKc1jv9d9 SuaJ8nDeYtc3xaXxtr7HwmxrDQEXOLDAw87fa4QW/dJFU+lkXgGKUBPCWILR1NuC+DtgpApsT ymO+K4rlXAw5azSQNRCxPB4mRoAeD5b/UXsc2ANHFRYDof4kHgxWratFXfRkjM9VG9zS5LMeQ bg/baWYynJmtQScz3QBioMrZPSVQV39dpvx/3kIWxMUjxDfhHKpQy9UeHoSxCZZh1TkIrw/U9 2DTw81HW+Ri9Asphj8KWtoG7VKa3G9rIpRCwcT8J8jCD/z6d4cKyUSeRDEVYbZVQSGW/612us ms+I4srNpJsfZkoU52l31RK1yUTC7fJFtiNQDn5a5g+Hk0EgNYO8PiVICToL/ty02/erO/6+R w1hX9GZPzGHA2Ko6wO9AAIWmYyO/ro4Lw1vaIfszMkXhNi89S2K0B2F2hBdp0+gsWpyvZTEaN ghn+w53SWHC0CJlX4N3RCJWTmmMwgMw9nVn7ebhf5SP3whX4gTmsYV1cG/przmtQqemiDXmoc 0nDr5IPF9aMZ2C9tJOn911vgVnZRxa1qXN5J76dzzwgaBHkSZz3/PS/4exaP7nGobKEFgw3ij 1B66yE7cv3c+NIZ237Hj6ZPm8mUbjdrbuhzbfp/ccuG8CHu8+0SVyLZpPqF+TZMamLHpE2P78 O6zq6MqmujzU8sonl52Ld6NnEgcUNjwH8wXIPveQaMhFR/JjV8xhpXJjZp1uMRGjndakckJ9P acBf7ysRURtehg/6UVRu/UBgspJ3FyD9Q2hKnY2EWCrfocR94GJ0MbCt9bjFw1xx4nltMGrnh vSH2/RsCKkfKBtExhTMyOaT/e2YWQb0X5lja7edTY6HuCGrlO8PrtJoTnq4HlBZ9ec+SXBOvM AHZMSodNYEAW9ecobLPJI5+MXmO56x6QFEQwkjJnISsh2weqWaMJHBHg2XKhTJb69hNy0spP4 bijj8Z8OX9QFgpKdZ Received-SPF: pass client-ip=212.227.15.15; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 08:23:03 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 13:44:42 -0000 Jo=C3=A3o T=C3=A1vora writes: Hi Jo=C3=A3o, > I've yet to test it out, but do you think it's possible to make > this fix available in Emacs 27, given that the bug was found > there? I'm afraid we won't be able to advertise Tramp support > in Eglot soon unless you do this. Definitely not in Emacs 27.1. This is in pretest, and I don't want to err out this release. There are already *many* Tramp fixes which are on hold for Emacs 27. I collect them in the Tramp 2.4 branch of the Tramp repository, and I will merge all of them to the emacs-27 branch once Emacs 27.1 has been released. But don't worry: the Tramp 2.4 release is kept up-to-date in GNU ELPA. Once you can confirm that the change works for you, I'll backport it. > This is of course assuming that this fix does fix Eglot's attempts > to use Tramp (which I or someone else still has to confirm). Please tell me so. The next Tramp 2.4 release in ELPA is roughly scheduled for end of June, 10 days from now. > Thanks, > Jo=C3=A3o Best regards, Michael. From MAILER-DAEMON Fri Jun 19 10:07:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHgF-0006QF-Or for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:07:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59370) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHgE-0006P8-2t for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:07:42 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46579) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmHgC-0003dR-U1; Fri, 19 Jun 2020 10:07:40 -0400 Received: from [176.228.60.248] (port=1676 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmHgC-0002T8-2p; Fri, 19 Jun 2020 10:07:40 -0400 Date: Fri, 19 Jun 2020 17:07:28 +0300 Message-Id: <83pn9vxi73.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: emacs-devel@gnu.org, philip@warpmail.net In-Reply-To: <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 15:54:56 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> <83r1ubxm1x.fsf@gnu.org> <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:07:42 -0000 > Cc: emacs-devel@gnu.org, "Philip K." > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 15:54:56 +0300 > > > That'd be a step backwards, IMO. I changed the doc string because in > > its original form it didn't tell me enough to understand which buffers > > could and couldn't be selected by that command. > > In general, those would be the buffers where (project-current) would > return the current project. I think that's pretty unambiguous. That's the implementation, but it cannot be used to make the doc string useful, at least not directly. It tells you what is the test for whether a particular buffer is eligible for the switch, but the doc string should instead tell up front what are the general traits of all the eligible buffers. IOW, the user should understand which of the buffers he or she can switch to with this command. > >>> "Buffer in a current project" > >>> sounds too vague at best to me: a project doesn't include any buffers. > >> > >> It includes their default-directory-es. Any idea how to modify the > >> docstring that the first sentence still fits on one line? > > > > What kind of buffers are those, in normal use? IOW, what buffers are > > relevant to the project, but don't visit any file/directory? > > If you look at bug#41868, it mentions VC-Dir and Dired buffers. Perhaps > Philip also has other examples. So will something like the below do the job? Switch to another buffer related to the current project. A buffer is related to a project if its `default-directory' is inside the directory hierarchy of the project's root. Btw, AFAIU this command can prompt for a project's root, but the doc string doesn't mention that important fact. > It also cleans up some "invisible" buffers created to service the files > in the project, such as ones created by Flymake, etc. By "it" what do you mean here? you don't mean project-switch-to-buffer, do you? And if so, how is that related to the issue at hand, which is the doc string of that function? From MAILER-DAEMON Fri Jun 19 10:10:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHig-0000Xz-B9 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:10:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHif-0000Wl-55 for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:10:13 -0400 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]:45101) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmHid-0004FT-L1 for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:10:12 -0400 Received: by mail-il1-x12a.google.com with SMTP id 9so9308967ilg.12 for ; Fri, 19 Jun 2020 07:10:11 -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 :cc:content-transfer-encoding; bh=E7hIxS4BfOuEbuaLx7PTwVme4iZkF5qEjj6IoSgjWOo=; b=k3Xy6DLsmesnwywX3Q8tGfA7DuGx6skMp8tDjD1VLVuWa1QLjjz2PC5qrnXgi2fct9 oNq1x4S2ZBlRgPdSouGAwLg+nJ8BaKoJETq2AZC4mvadP+OWoRzl6WKi3yf1fPWSCi2q mo7oDr00g/eoSv2nK1HFA6OmG8+nPni1m+HsVADoMjIcriyOo0oCvEBN1rqIpcI/4rER w6wZc70NjhcgNU4pb3JRv8rwmwjlhjxgAPP3oFglFiNEXcLFFZNSs5vZTmS+GYGnbfEM FbICkuxxk+QNEMEFXJajwA/Z7HfOS1EYEUetcnpCNkBtTYumd6f+X6VuSNkNwmAATwyJ rvkg== 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:cc:content-transfer-encoding; bh=E7hIxS4BfOuEbuaLx7PTwVme4iZkF5qEjj6IoSgjWOo=; b=FbDG/+KOLZZc2SpCT4NB/nmrbMQuDIF5lQ5bVORkSGcxWk+TP90P4RCRZxuCFDwDKl nrIs1SWZcsrkdDXAFuj+DbkhJDfBVhS50dAmuLlP5eYOmkOL9rlxx75SS4QylOH9vH+1 1wdhoI8NzGJTswyU6WopVcbyqzHpsOeBRds2PsFRtVOOb8cSGjCJU6c+4aBxeA7wObGs 6SW0VO0jN29rpvVbI4YkOHwOnOeRElexYG1MaEMqtXWyPDBi+AMn87nU1iYLozR1BnV5 3wRksgnXmOAo5g3RqZyf2q+xRi9DxgEMk2YbgKRovmNpI5HW12kpX1IsdY/ZGlDvmtaB 6BoQ== X-Gm-Message-State: AOAM531eE52AwyyByYtzB8v1JVFEinOAMYCodwQEAqXCvMaaoMYeRzSC HjFZORoMhig7S0ZKKh0FmzmNIIwZTn1lVGliTqg= X-Google-Smtp-Source: ABdhPJy+TPMsEXlhIfMl6tx5kv0gLON5nj8jPZBetY4msCobvGSCfhuZBigdkwNGYNZf0AJCdCjfBDd/6lapGh+L92Q= X-Received: by 2002:a05:6e02:c:: with SMTP id h12mr3662521ilr.125.1592575810312; Fri, 19 Jun 2020 07:10:10 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> In-Reply-To: <87ftar186z.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 15:09:58 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::12a; envelope-from=joaotavora@gmail.com; helo=mail-il1-x12a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:10:13 -0000 On Fri, Jun 19, 2020 at 2:44 PM Michael Albinus wr= ote: > Jo=C3=A3o T=C3=A1vora writes: > But don't worry: the Tramp 2.4 release is kept up-to-date in GNU > ELPA. Once you can confirm that the change works for you, I'll backport i= t. That's great. It means that as long as Eglot, which is also a GNU ELPA package, depends on that particular version of Tramp, users who install it from that source (using package.el) will benefit from the fix. Can you confirm? > Please tell me so. The next Tramp 2.4 release in ELPA is roughly > scheduled for end of June, 10 days from now. Noted. Felipe, you may want to beat me to it if you still have the energy for this. Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 10:12:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHkU-0003Xf-M3 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:12:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60890) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHkT-0003Wv-Vl for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:12:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46670) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmHkT-0004dY-MD; Fri, 19 Jun 2020 10:12:05 -0400 Received: from [176.228.60.248] (port=1943 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmHkS-0008C1-HV; Fri, 19 Jun 2020 10:12:04 -0400 Date: Fri, 19 Jun 2020 17:11:53 +0300 Message-Id: <83o8pfxhzq.fsf@gnu.org> From: Eli Zaretskii To: "Philip K." Cc: dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <87bllfqj82.fsf@warpmail.net> (philip@warpmail.net) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:12:06 -0000 > From: "Philip K." > Cc: eliz@gnu.org, emacs-devel@gnu.org > Date: Fri, 19 Jun 2020 15:27:09 +0200 > > > If you look at bug#41868, it mentions VC-Dir and Dired buffers. Perhaps > > Philip also has other examples. > > Magit, compile, xref, grep, occur, eshell would come to mind. It sounds like _any_ buffer is considered "in a project" as long as its default-directory is under the project's root, is that right? So if I start Emacs from somewhere inside the directory hierarchy rooted at the project's root, then *scratch*, *Messages*, and temporary buffers I create with "C-x b" will be considered to be part of the project? Does this really make sense? From MAILER-DAEMON Fri Jun 19 10:18:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHqc-0008NQ-K5 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:18:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35258) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHqa-0008La-GN for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:18:24 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:37591) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmHqY-0005vE-Jr; Fri, 19 Jun 2020 10:18:24 -0400 Received: by mail-wm1-x329.google.com with SMTP id y20so9283975wmi.2; Fri, 19 Jun 2020 07:18:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=1I9YVUbMXqez2CzS9FS9CdfoYLzw4Tuex7WpJvhQcPc=; b=Y2EcxjvM3omdyGkLYiM1Gyt+TqRgZArHh2pikSFhwIXMTovnirptl/NqITiYvLwg47 pC9Cw1DuC3u6fjLrpaZOVOW7/CqORcW3vrp5I98y+BoRVST/0+ddBtzM8eQmufcVmUjG eFpos0idSaUdSNhZoGRZwb0bmOiqXN175ker8akkNIF1DhUvQknM/Rj44JpdckNFgZFh /4udhBvn3m/zx3T0IW3xLCYV8mLc1POVnfdJSogtyyk1E9yvfoG8/7MtHNFCjZJOc1oP 85sKCOPXDWBCgzg6ADRYJ+rnS3A2ouqLzatFtGs1xM0yx6bMFYKs96qB4BGUcra/8O9u tdlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1I9YVUbMXqez2CzS9FS9CdfoYLzw4Tuex7WpJvhQcPc=; b=pWfN7yIf/PJ5PqPho4qgrE0eJpAQGAXAOqbl9YDRa2KSgW7emQ8BAaIku0K9wjDLfv hgZ3uvW5fsIrEUGkzh2XXURScC+FPg0CLc4IDePNZkh+TC2BQa2MLBnEvyBgrCG365QK xYMvwaKq0OyYXa1tTU9R526EDCpa4hjInM4tzbiKGaFilDXQm/yvTy2gjKs8DLDZnnnG TLPrqgb3N7HoGgcoqQ9UD/ivLNSSicLGbIKqOZmgY/jNuiTVIiwc+duHtSeVjJF+9Ybr AvrzssHtg3W21wyZcEL2PRbZmyNHffPUFrMQHayWgML0AC6NBRhoJBLoauzdF1Czoewd Ed0w== X-Gm-Message-State: AOAM533SVM5GVmpIT4cbDboXJ2EzW0oda103Xs7twyg3qeAbXrqXsCT+ 1aUvosWlVHio4GQ1mjlIJD0xC3+C X-Google-Smtp-Source: ABdhPJwejoFlbmdgP2ROleDup6G/W7sFELhuL/siVVkJkrgipPstwmYpqfEX079MtEWq6hYWyCE+QA== X-Received: by 2002:a05:600c:2dda:: with SMTP id e26mr836594wmh.88.1592576300151; Fri, 19 Jun 2020 07:18:20 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id t82sm6431643wmg.10.2020.06.19.07.18.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 07:18:19 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , "Philip K." Cc: emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> From: Dmitry Gutov Message-ID: <55fa0d68-9142-a6cb-1a0c-12685b2bc340@yandex.ru> Date: Fri, 19 Jun 2020 17:18:17 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83o8pfxhzq.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=raaahh@gmail.com; helo=mail-wm1-x329.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:18:24 -0000 On 19.06.2020 17:11, Eli Zaretskii wrote: > So > if I start Emacs from somewhere inside the directory hierarchy rooted > at the project's root, then*scratch*,*Messages*, and temporary > buffers I create with "C-x b" will be considered to be part of the > project? Does this really make sense? We can add scratch and Messages to the skip-conditions by default. From MAILER-DAEMON Fri Jun 19 10:23:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHvk-0001GK-QU for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:23:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36762) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHvi-0001CP-8u for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:23:42 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:43219) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmHvg-0006kC-6D; Fri, 19 Jun 2020 10:23:41 -0400 Received: by mail-wr1-x431.google.com with SMTP id l10so9864982wrr.10; Fri, 19 Jun 2020 07:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=MBXU7L6QpUbjv1hQUd8gPFyx8YAS8gRAKGTAA1Z4tr8=; b=nbRtogdTg5ZCnqifPv/7UvU6decfXbK0bHXmyqEzLQmr/7zzfiJOZvaGX8JO2qSudy Gf+slKO5IO8HxfBDaDDP1lNjbMDzbzOSF4XxgDyH0+LYq6vz6q+pp3IGZ2e+WFmSCe9I /xdZkRsWCDbM9gRK5dXTi7YFz7SiCbZk7Td7i21uFAx8FLqc9uYurRVAVJPylQWWOUAv 7gln1K3i3m6lUwbxysl9OJ9XXgpSUY9bPDmX2VwUmZ8q/4qFJUAVNm5eDYgAFjDqE6Us uXT3ebfgRKm+ArRgh+vNNBC8dbenoLoFBwf6QoBVN1FPeYxzDK/kT41akJiqbksAPyMh 1TCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=MBXU7L6QpUbjv1hQUd8gPFyx8YAS8gRAKGTAA1Z4tr8=; b=KeJks0eWueeNNwdGJu7cAG46m9fH32ziWdym9fjz4R2DAveAcKaWCsohbu6aU7tpiY FxAD1LGYUrFDFZwkZDaw3xUeMtAp03VWfjEDdEiJVxrjWBtOFv80TkJcF4IWty/U+FRj M3KgotNY5q6P9SIyqjvM2VcWh3OBcEuyiKJZBqYa1fY9DycQItUjcKUxMruZVMGLsdis iliGGHxmrfPSiEweIPEtRWE6YHzCXbvTiNnulo7ZqkrbGtNe8vPfPv27tbqISodQF3UU SZAXFhmR0YC5MxNXkex6eY+5d3mDs31E2ehoahTbfWxPmSpRjSXTHQcpFM92YsYb5NAQ NRYQ== X-Gm-Message-State: AOAM530Q2S9b20l3dwAQzlW2c4gAO04bOpb/NdLfpZUjgTW4EoBAPG+S +vxDPg/BRPGOsThmy8BdRYM= X-Google-Smtp-Source: ABdhPJzrCyIP5fECUPzVbOeeG5kIc0Dn+F9z665i1rksHFLBeCTugeAev7mc6Y8NhGuZFIQF+XuS7A== X-Received: by 2002:a5d:5341:: with SMTP id t1mr4640818wrv.207.1592576618002; Fri, 19 Jun 2020 07:23:38 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id o1sm7687982wrw.20.2020.06.19.07.23.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 07:23:37 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: emacs-devel@gnu.org, philip@warpmail.net References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> <83r1ubxm1x.fsf@gnu.org> <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> <83pn9vxi73.fsf@gnu.org> From: Dmitry Gutov Message-ID: <14ebab54-324d-8c59-f8de-1bb7e0ef7c6b@yandex.ru> Date: Fri, 19 Jun 2020 17:23:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83pn9vxi73.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=raaahh@gmail.com; helo=mail-wr1-x431.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:23:42 -0000 On 19.06.2020 17:07, Eli Zaretskii wrote: >> If you look at bug#41868, it mentions VC-Dir and Dired buffers. Perhaps >> Philip also has other examples. > So will something like the below do the job? > > Switch to another buffer related to the current project. > A buffer is related to a project if its `default-directory' > is inside the directory hierarchy of the project's root. Sounds good. Except some projects can be inside one another, too. > Btw, AFAIU this command can prompt for a project's root, but the doc > string doesn't mention that important fact. That is the case for all of the commands in there. >> It also cleans up some "invisible" buffers created to service the files >> in the project, such as ones created by Flymake, etc. > By "it" what do you mean here? you don't mean > project-switch-to-buffer, do you? And if so, how is that related to > the issue at hand, which is the doc string of that function? Sorry, got my wires crossed: this was about project-kill-buffers. But the rest of the discussion should apply to project-switch-buffer just as well. BTW, I imagine that the current project-kill-buffers docstring should seem ambiguous to you as well. From MAILER-DAEMON Fri Jun 19 10:24:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHwt-0002fe-BH for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:24:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37148) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHws-0002eH-0x for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:24:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47034) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmHwr-0006wB-NH; Fri, 19 Jun 2020 10:24:53 -0400 Received: from [176.228.60.248] (port=2806 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmHwr-0005NJ-5A; Fri, 19 Jun 2020 10:24:53 -0400 Date: Fri, 19 Jun 2020 17:24:41 +0300 Message-Id: <83lfkjxhee.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <55fa0d68-9142-a6cb-1a0c-12685b2bc340@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 17:18:17 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <55fa0d68-9142-a6cb-1a0c-12685b2bc340@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:24:54 -0000 > Cc: emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 17:18:17 +0300 > > On 19.06.2020 17:11, Eli Zaretskii wrote: > > So > > if I start Emacs from somewhere inside the directory hierarchy rooted > > at the project's root, then*scratch*,*Messages*, and temporary > > buffers I create with "C-x b" will be considered to be part of the > > project? Does this really make sense? > > We can add scratch and Messages to the skip-conditions by default. What about the others, though? I wouldn't even expect *XREF* to be eligible, as that is a kind-of "service" buffer to which I don't really switch, I let the relevant commands put me there when needed. Likewise for Eshell and Occur -- why are those candidates? Basically, any buffer whose name is *SOMETHING* should be by default excluded, I think those that should be included are the exceptions, not the rule. More generally, I question the wisdom of judging by the default-directory in the first place. Can't we come up with a better, more specific criterion? From MAILER-DAEMON Fri Jun 19 10:26:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmHy2-0004Sx-Vv for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:26:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHy0-0004Pr-1H for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:26:04 -0400 Received: from mail2.protonmail.ch ([185.70.40.22]:22090) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmHxw-0007Ft-Tw for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:26:03 -0400 Date: Fri, 19 Jun 2020 14:25:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=protonmail; t=1592576756; bh=TlkrTI5CIt8B10GIxFnpHac8Ddlomgfl+5mgot42wqg=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=dmSV+QXi5+R13C9mXHhkbBNE5VJXp2AmUx3M3UfDRBVeXZka6QVqLqKpbRaybMpNU JpKFIGENCF8NN/Rs1DGnzTKJA5vAWah+YQsy0/ipT7KIRoK/rJPO+Lkh8H/lNzfbXx YjDCbxQvU6StvKpnX+Sm2nySwLX7HkEh5JJpLtkdwXgtb1exRLU8rCuoeEvtPtTSCB 1DOZslbzQAEaFUYCmEsM0Dqonmm/Zj4LJdPhphYooz/Jvd7STGXa9Sa1n6WSYEXMAW xMRTxX9qG5uG3r4VukPwb+1q+ewwTzVm/InV+l0OZq/F2vAfltBPzSwQ4QAKo6iCje lW0CK26zZV5VA== To: Eli Zaretskii , "Philip K." From: Theodor Thornhill Cc: emacs-devel@gnu.org, dgutov@yandex.ru Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: In-Reply-To: <83o8pfxhzq.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_08gJbqObY3oxfA8IRN3k3FNnZfvbzNXVL08TFUctH4" Received-SPF: pass client-ip=185.70.40.22; envelope-from=theo@thornhill.no; helo=mail2.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 10:25:57 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:26:04 -0000 This is a multi-part message in MIME format. --b1_08gJbqObY3oxfA8IRN3k3FNnZfvbzNXVL08TFUctH4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 PiBidWZmZXJzIEkgY3JlYXRlIHdpdGggIkMteCBiIiB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gYmUg cGFydCBvZiB0aGUKPiBwcm9qZWN0PyBEb2VzIHRoaXMgcmVhbGx5IG1ha2Ugc2Vuc2U/CgpUaGlz IGlzIHRoZSByZWFzb24gSSBvbmx5IGluY2x1ZGVkIGZpbGUgYm91bmQgYnVmZmVycyBpbml0aWFs bHkgaW4gc3dpdGNoLXRvLWJ1ZmZlci4gQnV0IGFzIEFuZHJpaSBub3RlZCwgdGhlcmUgYXJlIG90 aGVyIGludGVyZXN0aW5nIGJ1ZmZlcnMgYXMgd2VsbCwgc3VjaCBhcyB4cmVmIGV0Yy4KCk1heWJl IHdlIGNhbiBhZGQgc29tZSBsb2dpYyB0byBmaWx0ZXIgb3V0IG1vcmUgb2YgdGhlIHVucmVsYXRl ZCBidWZmZXJzPwoKVGhlbw== --b1_08gJbqObY3oxfA8IRN3k3FNnZfvbzNXVL08TFUctH4 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 ICAgIDxicj48YmxvY2txdW90ZSBjbGFzcz0icHJvdG9ubWFpbF9xdW90ZSIgdHlwZT0iY2l0ZSI+ PGJyPmJ1ZmZlcnMgSSBjcmVhdGUgd2l0aCAiQy14IGIiIHdpbGwgYmUgY29uc2lkZXJlZCB0byBi ZSBwYXJ0IG9mIHRoZTxicj5wcm9qZWN0PyAgRG9lcyB0aGlzIHJlYWxseSBtYWtlIHNlbnNlPzxi cj48YnI+PC9ibG9ja3F1b3RlPjxkaXY+VGhpcyBpcyB0aGUgcmVhc29uIEkgb25seSBpbmNsdWRl ZCBmaWxlIGJvdW5kIGJ1ZmZlcnMgaW5pdGlhbGx5IGluIHN3aXRjaC10by1idWZmZXIuJm5ic3A7 PGNhcmV0PjwvY2FyZXQ+QnV0IGFzIEFuZHJpaSBub3RlZCwgdGhlcmUgYXJlIG90aGVyIGludGVy ZXN0aW5nIGJ1ZmZlcnMgYXMgd2VsbCwgc3VjaCBhcyB4cmVmIGV0Yy4mbmJzcDs8L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2Pk1heWJlIHdlIGNhbiBhZGQgc29tZSBsb2dpYyB0byBmaWx0ZXIgb3V0 IG1vcmUgb2YgdGhlIHVucmVsYXRlZCBidWZmZXJzPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+ VGhlbzwvZGl2PjxkaXY+PGJyPjwvZGl2Pg== --b1_08gJbqObY3oxfA8IRN3k3FNnZfvbzNXVL08TFUctH4-- From MAILER-DAEMON Fri Jun 19 10:29:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmI0y-0000Nr-CZ for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:29:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmI0x-0000NN-BP for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:29:07 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47135) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmI0w-0007tK-Jj; Fri, 19 Jun 2020 10:29:06 -0400 Received: from [176.228.60.248] (port=3059 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmI0u-0008Nl-IN; Fri, 19 Jun 2020 10:29:05 -0400 Date: Fri, 19 Jun 2020 17:28:53 +0300 Message-Id: <83k103xh7e.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: emacs-devel@gnu.org, philip@warpmail.net In-Reply-To: <14ebab54-324d-8c59-f8de-1bb7e0ef7c6b@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 17:23:36 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <20200619075401.21856.16524@vcs0.savannah.gnu.org> <20200619075402.CE1D220A27@vcs0.savannah.gnu.org> <243920e8-f660-fac9-00d6-1bcecde91e39@yandex.ru> <831rmbz4ak.fsf@gnu.org> <41c3e63e-7006-c89d-0812-643731a88d39@yandex.ru> <83r1ubxm1x.fsf@gnu.org> <46c34dab-c95f-45ea-50ee-f0e023a70e74@yandex.ru> <83pn9vxi73.fsf@gnu.org> <14ebab54-324d-8c59-f8de-1bb7e0ef7c6b@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:29:07 -0000 > Cc: emacs-devel@gnu.org, philip@warpmail.net > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 17:23:36 +0300 > > > Switch to another buffer related to the current project. > > A buffer is related to a project if its `default-directory' > > is inside the directory hierarchy of the project's root. > > Sounds good. Except some projects can be inside one another, too. Does that invalidate what the text above says? > > Btw, AFAIU this command can prompt for a project's root, but the doc > > string doesn't mention that important fact. > > That is the case for all of the commands in there. That just means they all should mention this. > BTW, I imagine that the current project-kill-buffers docstring should > seem ambiguous to you as well. Not really, no. It's pretty self-explanatory, especially since the usual situation where the command will be invoked is when I cease working on a project. From MAILER-DAEMON Fri Jun 19 10:37:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmI9J-00073a-P8 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:37:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41368) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmI9I-00073N-0n for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:37:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47324) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmI9H-00011w-5q; Fri, 19 Jun 2020 10:37:43 -0400 Received: from [176.228.60.248] (port=3583 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmI9E-0002Vi-2m; Fri, 19 Jun 2020 10:37:40 -0400 Date: Fri, 19 Jun 2020 17:37:28 +0300 Message-Id: <83imfnxgt3.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org, dgutov@yandex.ru In-Reply-To: (message from Theodor Thornhill on Fri, 19 Jun 2020 14:25:46 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:37:44 -0000 > Date: Fri, 19 Jun 2020 14:25:46 +0000 > From: Theodor Thornhill > Cc: emacs-devel@gnu.org, dgutov@yandex.ru > > buffers I create with "C-x b" will be considered to be part of the > project? Does this really make sense? > > This is the reason I only included file bound buffers initially in switch-to-buffer. But as Andrii noted, there are > other interesting buffers as well, such as xref etc. But the fact that a buffer visits a file doesn't yet make it a good candidate, does it? > Maybe we can add some logic to filter out more of the unrelated buffers? Maybe we should step back and talk about the intended uses of this command? When would you want to switch to a buffer whose name you don't know in advance? As another provocative thought, should we perhaps consider the major-mode of the buffer? From MAILER-DAEMON Fri Jun 19 10:41:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmICe-0001uc-1C for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:41:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42414) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmICc-0001uU-Sh for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:41:11 -0400 Received: from wout1-smtp.messagingengine.com ([64.147.123.24]:36365) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmICa-0001sM-Ud; Fri, 19 Jun 2020 10:41:10 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.west.internal (Postfix) with ESMTP id 0AA7A6D9; Fri, 19 Jun 2020 10:41:06 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 19 Jun 2020 10:41:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=warpmail.net; h= from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-type; s=fm3; bh=wL7Kns5x5SXQjH7/njbe3lElJMPsVxBW7PVC1zV +FsU=; b=atu5uvCElpNLDjQXO4LyyTRVMqsA5EJlOLoTgVX79+5F4aw37+VKAib 9h0ZRbSPMJtCX4cCWOUoU6EaOwKhJlTgd4Zob6WkIEsRgw831yoYi2J57Bu/AKHE Y98V7t29dMPL3RbrpeKFReVMvrxEqp88zkvouUAnLneZ8zNVG9KLWtHD5H1Bt2j7 +031mQrNvw1ihZljDGzPYQGXQ8gXet5hh9dGv/1IexCMC7DEo7eUJEDOYEk8/xP2 65//09XI5wXGeiEGtMbleaaYgaiSVZFNcOgkPiDtsnQFkUXapW8YDsxUBg7PuLIg 0sFRrx8xnHpZnFa6i1ofrEn9JNN3n7w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=wL7Kns5x5SXQjH7/n jbe3lElJMPsVxBW7PVC1zV+FsU=; b=uJcVppO2a+UbV+joXynKiS4UIQk0WYDlx yBiIXx4w4Z+ps57/+HZMFK0h2FZapz/5Y0OhQ9YX1NbgfnL1t65vK5TjqBW710Uh L1oC30G9ZchtddthOeIX6iBswTAdRw8Hk/NHg7p0K8GndT2qBm7vtTWi6ZjxkehS KqGQpqSxTTCTLyF4mT/ePI7B52hHvFLSqEUMM9Ua5l0r/ClgAj3HKb1/9iiDaDOX +OBojgxg8oEs0MEGxJEwimen2rOaVQRmIzWNAotE+FClzsTzRSdnv2rjtPedb6ru LLcpIVQzXDXqgkQBEwQXmyAPP+EK60biMJnkG/1MYTqWaEvxnoBlw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudejiedgkedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufgjfffkgggtsehttdertddttddtnecuhfhrohhmpedfrfhhihhlihhp ucfmrddfuceophhhihhlihhpseifrghrphhmrghilhdrnhgvtheqnecuggftrfgrthhtvg hrnhepheeuieffveevkeetffeufeekfeejkeekkeefjeelueeftdduffdugfeuieegfffh necukfhppeejledrvdduledrudelledrvdduheenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehphhhilhhiphesfigrrhhpmhgrihhlrdhnvght X-ME-Proxy: Received: from localhost (p4fdbc7d7.dip0.t-ipconnect.de [79.219.199.215]) by mail.messagingengine.com (Postfix) with ESMTPA id 153ED3061856; Fri, 19 Jun 2020 10:41:05 -0400 (EDT) From: "Philip K." To: Eli Zaretskii Cc: dgutov@yandex.ru, emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el In-Reply-To: <83lfkjxhee.fsf@gnu.org> (message from Eli Zaretskii on Fri, 19 Jun 2020 17:24:41 +0300) Date: Fri, 19 Jun 2020 16:41:03 +0200 Message-ID: <877dw3qfsw.fsf@warpmail.net> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=64.147.123.24; envelope-from=philip@warpmail.net; helo=wout1-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 09:12:47 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:41:11 -0000 Eli Zaretskii writes: >> Cc: emacs-devel@gnu.org >> From: Dmitry Gutov >> Date: Fri, 19 Jun 2020 17:18:17 +0300 >> >> On 19.06.2020 17:11, Eli Zaretskii wrote: >> > So >> > if I start Emacs from somewhere inside the directory hierarchy rooted >> > at the project's root, then*scratch*,*Messages*, and temporary >> > buffers I create with "C-x b" will be considered to be part of the >> > project? Does this really make sense? >> >> We can add scratch and Messages to the skip-conditions by default. > > What about the others, though? I wouldn't even expect *XREF* to be > eligible, as that is a kind-of "service" buffer to which I don't > really switch, I let the relevant commands put me there when needed. > > Likewise for Eshell and Occur -- why are those candidates? Basically, > any buffer whose name is *SOMETHING* should be by default excluded, I > think those that should be included are the exceptions, not the rule. > > More generally, I question the wisdom of judging by the > default-directory in the first place. Can't we come up with a better, > more specific criterion? My rule of thumb would be was a buffer generated "by" a file/action on file in the project. The goal would be that if I open a project, do some work and then call project-kill-buffers, and repeat this over 10, 100 or however many (different) projects, that the list of live buffers doesn't increase dramatically, or even proportionally to how many projects I have used in general. -- Philip K. From MAILER-DAEMON Fri Jun 19 10:43:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIEu-0003Ig-6m for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:43:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIEs-0003IP-D4 for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:43:30 -0400 Received: from mout.gmx.net ([212.227.15.18]:40979) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIEo-000279-PU for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:43:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592577802; bh=50EKS9zufHJ3X7iU1J9Uw8x3zjpKqN1ywH3GSpT8f6g=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=ESbZjGBQBHt2uszUmK4haLMaVbKeVEvSr4VCtiiC/lkkEg2MyHPtR6qromSreWjOt pyNNy8QuDSArjsyUBV1ysHu/OLP4gTPUfjvXpT9WEdPAyVGEvVjhuznaB+b0lU9P1x Xb3BKTlgM9lbuJ+bhls9RCU2prr++Pa0x9gjQMuw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MSc1L-1jJvUW49cn-00Sy7i; Fri, 19 Jun 2020 16:43:22 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> Date: Fri, 19 Jun 2020 16:43:20 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 15:09:58 +0100") Message-ID: <87bllf15h3.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:GfALHBHfPzYVtX4OCsvvH7mJJFsb4ly9EaSsYDf019jqPDMWM9j mInZm4BYb+QXFVjfEDCyWnj9CN4/d6ZxMnFV1qKchAxBA8Xh5UniQUPjQGqTEP3Sc98gXgS RjJmZ2glKopKXVxO1pmUgi0z+qKP+xl5QZzWLHm8ZypjezD256j2zF6LSL6B4XgZsE12i/F EpGDOUrFweDXeuIQkKHjw== X-UI-Out-Filterresults: notjunk:1;V03:K0:fBisi3JX6SE=:lUVuZ4H9BY52RD7xV2kvph PQpBIQjTvU0cEsa2OsJ2YjY0dXe+UC2F51ncj8PN2801KeRVT0tubw+jQ7J4Uz2BlyugIbs6x 3v2LAhBZ2G8otYjQpC11Em36Y6aPlyr28BnJ7fnsaC3wj5jLG0zxppip6bPW5tSeKk8x0hNA2 fU9JKpu16wTnFOk2jQGehVAnsVCpca/qnFMm3DncyCsg/wDPLMJlgLK1PuB2xcVMjIY92stJi RWH4O9q5YolLxuxuCNDksOdnQdC7r9RW3d9Aunv7bU2dzho6dSoDAPrqdeETTaUzc0iOYXY+h gvtPRT/uJASADBkqp41O0NOeL1jE3w/1Bpuv4/zUojxLkmbF5FNqiwxNXOStjukWinxW7Xo+s Px0gyIRSCEMGZC0VlYLaqqrKeD0+mK+a2pV6RAzA+JQS+v1Eq+BZjCJGEy8MenlHt4L6NiMR6 LjTFX2lEtZU7hd7TnoJ48Q8RDwAwy/uT65SmAeae9ALZxtg/vmsNEjyE0a28D0lHYH55Eq6d4 ADEboHBPenXoc+S9llgcq3dY/YD3tkxEYD+uAnUNOjhCW9evRZmlSfrKj4ZfDX/dtOqnI+0RS baoxFVj0yTGQskFlkkxtIMM/cpGXdmzIMGcrHEzeBrMLveokXCLw96155k8eD+pcci2ZBieeJ aCniheRQ7uAhTCf6/dAEJl0wtcW+BCxQbnKxmhxKlhuuTUc/fK/BLQQwJxsLsyUfNLSa9FeWw VWXKctKjA59RNGGKfU7U3ccMxRFGjUjgPalhMYVngMz+ylOsVitUeTFRxcf4qXEavfDlCnbjM VvWFrSzF15O7AL6f/HnawW3wr7oIHzzIrj+fWczc2nn+SRQZ6dgcVg8Qk85PwCyoCZ46oGU51 0jDnu3163RAYBiCXPFaT+zUDxAnEFeqQI5bWaj1Gn711I3Z2mDWWJ95aE1i589vYgVued/riY JQ7e5IETEMWgpGGheUxBGzyqP1h77PDDuJI8j7oOZ8lxz7n14+vvF9mJHXg+s1+JCcMVjnR7s FJLxYZtFuKmQqNQe7Vs5GKXpRoeLGFN/JKgY8odxO4WvI2DkfYg0lTrwmPjKCSEQ5aK5V85nt uBZzm24xiVDeABq/JCexercN8BOhTg6yAHDe+8z/zClQafrUndt7q+7rjePnTcQL3IHRWeVVs rJWLkW8rFl8f4cxSOjbCzOcaisxrJigdpCLu+xb591zm/mxR2Qv8u75zjSOAMXeppPJQ2FbMf T/h6YEZ7f660PRBex Received-SPF: pass client-ip=212.227.15.18; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 10:43:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:43:30 -0000 Jo=C3=A3o T=C3=A1vora writes: > On Fri, Jun 19, 2020 at 2:44 PM Michael Albinus = wrote: >> Jo=C3=A3o T=C3=A1vora writes: > >> But don't worry: the Tramp 2.4 release is kept up-to-date in GNU >> ELPA. Once you can confirm that the change works for you, I'll backport = it. > > That's great. It means that as long as Eglot, which is also a GNU ELPA > package, depends on that particular version of Tramp, users who install > it from that source (using package.el) will benefit from the fix. Can you > confirm? Yes. You could add (tramp "2.4.4") to your Package-Requires: header, this will be the next version in GNU ELPA. However, this would mean a dependency for all Eglot users, even if they are not interested in Tramp. Hmm. > Jo=C3=A3o Best regards, Michael. From MAILER-DAEMON Fri Jun 19 10:46:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIHS-0004bF-BT for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:46:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIHQ-0004Yl-Rs for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:46:08 -0400 Received: from mail-io1-xd2e.google.com ([2607:f8b0:4864:20::d2e]:34066) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmIHP-0002mD-AH for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:46:08 -0400 Received: by mail-io1-xd2e.google.com with SMTP id m81so11534513ioa.1 for ; Fri, 19 Jun 2020 07:46:04 -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 :cc:content-transfer-encoding; bh=Uz3PrVlIkeRsBF/GcmibVYSmty3EtdyxKKP8CJAqtjk=; b=DLNZanSDNdvkJTkQOKJdRJbAT8/x/Xz8UGvzSOoTSAxRyVAiOVOzaShGM3C0gXvrus DpgWJN/mZy5FalV5TqXBfGVeYeV9xRcXSRjs+FFbN8hoBfeTn1CNAsk4MjlEixONibZ8 Y+z8V/5CCN0P7EiYPYodQFVm7ckxUhWuVtiIexIW28pxAUGizTC3qxgK9taiDMnodkSc SDqcNwicUgf+ieosxly0Nv58GcY4QHl+Uqidim2XccVYiF4bZfPjXB+FqHpOZg1m/YTR FH3fJrh0OSIS9ELkRK+XRrt+k+4U5loaOzzA9476b+cQA9zLBc+a0lPOIFSd6beQoOol SS9g== 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:cc:content-transfer-encoding; bh=Uz3PrVlIkeRsBF/GcmibVYSmty3EtdyxKKP8CJAqtjk=; b=QilWE4tXJKKJmIEOS/j7eS44S+5vLOMAKbLGA0BG2yxvDbO0J5PYV0BqasJEn0kbxM +Mb53XqfNF5u3jF/waQddHC2EjAGTLjUubcVXBLD4tw4xjqsc8C2qshvevMxRrhGobd9 Ua/xyMd5/AOhFua51IK9lQq0TOTz7cqurQfDI4CJrO0r/mTyuyP86bZrFZzdbadRbBLF w5zKDjuUpDpo1EnheRjHC5cjYvQo4+WRror7AXzbi4gk1+eRh2z3zzHATl0h27PUs8Eb ojAJtUodGACUzQN8xzgHtyjOFfLTwQlXaoEjEov9F+7qVseai7IMAXN66uzxkgSMqpN8 HOOw== X-Gm-Message-State: AOAM5327Nda5tWQV++K5JFRbKzZcL0tqCuqo2hH20GPGjiKA4JxZXlHI oV2uxbMStQwjqtjvEYYhFqOQP8y5fOiOByrLYxE= X-Google-Smtp-Source: ABdhPJxO/GZugyzC/OmaopzTdt62UZkZluFKBvHi6Vk0sy4tpRFEKb5wdNP87WMKCp0Y+NE0sEXllbqUWmonyE4VkZI= X-Received: by 2002:a5d:8e14:: with SMTP id e20mr4849671iod.156.1592577963776; Fri, 19 Jun 2020 07:46:03 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> In-Reply-To: <87bllf15h3.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 15:45:52 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d2e; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:46:09 -0000 On Fri, Jun 19, 2020 at 3:43 PM Michael Albinus wr= ote: > > Jo=C3=A3o T=C3=A1vora writes: > > > On Fri, Jun 19, 2020 at 2:44 PM Michael Albinus wrote: > >> Jo=C3=A3o T=C3=A1vora writes: > > > >> But don't worry: the Tramp 2.4 release is kept up-to-date in GNU > >> ELPA. Once you can confirm that the change works for you, I'll backpor= t it. > > > > That's great. It means that as long as Eglot, which is also a GNU ELPA > > package, depends on that particular version of Tramp, users who install > > it from that source (using package.el) will benefit from the fix. Can y= ou > > confirm? > > Yes. You could add (tramp "2.4.4") to your Package-Requires: header, > this will be the next version in GNU ELPA. However, this would mean a > dependency for all Eglot users, even if they are not interested in > Tramp. Hmm. What Hmm? :-) Emacs users who are not "interested in Tramp" still get it, too, right? Or does Tramp 2.4.4 come with some kind of potential built-in annoyance? :-D Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 10:47:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIIl-0006SK-DB for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:47:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44344) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIIj-0006Pe-PL for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:47:29 -0400 Received: from mail-qv1-xf36.google.com ([2607:f8b0:4864:20::f36]:45342) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmIIh-0002t3-Aq for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:47:29 -0400 Received: by mail-qv1-xf36.google.com with SMTP id di13so4538251qvb.12 for ; Fri, 19 Jun 2020 07:47:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=i+0QLCVlNH9FwAoBQTj20qjQeQm0t0Bu7sGzD5+UnXc=; b=GCE5CGtA1NanrSYMnsckaF8LU7FIpBkhZfvwlNLMQddbOfFLCIXKOvUNXmiF/Z/+YL 2TfY0dW5H3/J/TmFcgydavm6G6WPEOaT3uM8+p/T9FU9OnljzfrYor6dBFnX0lK3TB+l hziQw3I9lxMMEnSU4dpmG0gLFoXst67g08uqU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=i+0QLCVlNH9FwAoBQTj20qjQeQm0t0Bu7sGzD5+UnXc=; b=uUiX29FSudg0uGhOyDUFXUOGTCwm5Fpu+/sRA2RRj0dlB9roTHG22H79gZmv9qvPxE ofmqkDQFmi5nX4gB/QUHi+Ec1NUI6Rc5zX1hdqS8lFototOVkWMAL3S602dD9xuWf32V COUHececCnA7yaGbTtcL+j+00k2DQWbdzELz1keWKBJqUOEB4ThznvqvkrMR/5rVAMz2 CkN6vzYPDBUI8f3Xea+07WKW1p+GekGmdHKrTio35lhQt7yZBLgT+XeCQJd7HIRgfNi0 XSlskMS3O/iY4fe+xDZKkXW6ERwIB/rFLSoqcKJ1OtWUswxJVf36hW58vkoJR/1B4vdP 9Amw== X-Gm-Message-State: AOAM531dtL4zqc/M+a2JihqSQtElmznVlV1pHz87Q38MJC/P2KpRb3dw D6EfFyPl2yX6yjO0/D2ualyywnPbDoDIHA== X-Google-Smtp-Source: ABdhPJz0ecpbh2z5s/x9KbL/0OnOHZE3MfXmio4j5jXUnPCMcQSVhH7amcQKc8L/1YWLiegPkx2zBA== X-Received: by 2002:ad4:552b:: with SMTP id ba11mr9351134qvb.145.1592578045849; Fri, 19 Jun 2020 07:47:25 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id d17sm6298207qke.101.2020.06.19.07.47.24 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 Jun 2020 07:47:24 -0700 (PDT) From: Ted Zlatanov To: "Basil L. Contovounesios" Cc: Dmitry Gutov , Stefan Monnier , emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <87d05w2af4.fsf@tcd.ie> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 19 Jun 2020 14:47:23 +0000 In-Reply-To: <87d05w2af4.fsf@tcd.ie> (Basil L. Contovounesios's message of "Fri, 19 Jun 2020 00:58:55 +0100, Fri, 19 Jun 2020 00:44:21 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::f36; envelope-from=tzz@lifelogs.com; helo=mail-qv1-xf36.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:47:30 -0000 On Fri, 19 Jun 2020 00:58:55 +0100 "Basil L. Contovounesios" wrote: BLC> Stefan Monnier writes: >> I think that since use-package is (still!) not in Emacs (and not even in >> GNU ELPA), the doc shouldn't rely on it. BLC> For anyone interested in following its Emacsimilation: BLC> https://github.com/jwiegley/use-package/issues/282 The doc says "if you prefer use-package..." which is not IMO a dependency or an endorsement, just a convenience. Also as Basil pointed out, it's very likely that use-package will be in ELPA or core Emacs soon, so maybe we can be a little bit lenient? If you feel this is better left out until after use-package gets the copyright assignments, I'll remove the example configuration. On Fri, 19 Jun 2020 00:44:21 +0300 Dmitry Gutov wrote: DG> js2-mode inherits from prog-mode, doesn't it? Ah, good catch, fixed. Ted From MAILER-DAEMON Fri Jun 19 10:49:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIKK-0001fC-Oj for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:49:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIKI-0001bi-MO for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:49:06 -0400 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]:42205) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmIKG-0003DI-Jz; Fri, 19 Jun 2020 10:49:06 -0400 Received: by mail-ed1-x52f.google.com with SMTP id x93so7797993ede.9; Fri, 19 Jun 2020 07:49:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=knRdZYVYTIOMNZCFDLq4MBMgTdJWNhCKonW22AbGrdA=; b=mArxJZccDbRIA5VJepy5mPmObcE88qrp4hfZJnNpzmlR0HZo9s9+ROC5LthjzsydyK Mjd6t909aIrMxsLPi96RHocwhgSzsLedMVwhwKI3+fBUGg4Y7rrCqgy5CZJ6lf80T2NI tYXnO9IGYMFYnGbNYxVs51THY9XhxVLDV8yezUcZo4BbyEhRV7I5KDKR6ascmS09bBOB Vl2MseS7Fi/Xs3d7TAwRvhVEg0gzDtNfd9ul5lbqJzwgSBaU34E9N6iU8OAjbGx4fZRg CgF92Lss5uTLX4gAHmQ33+Lo6pIUNys8/el2on48DGz1thNCVsnKnus2pu1t9tv7BnHS Nfbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=knRdZYVYTIOMNZCFDLq4MBMgTdJWNhCKonW22AbGrdA=; b=EfOdx8gR8jCz0kTQMmWUJLJ0CFAILHsdANN883urV0PCyGYVn/Joj+oDo5Tw8xBCaa VwGSDQz1qgnmPF11KUWAZE3Hsyxfg/gu6LqMBAA4ssmTLJLiyWDWNNv+ku7mv/rqQzqd L2wznFyybYmhMfGeCEwg5qB3//nSlerVLFu/UVDsS7tLtX2KCrq2tqcn9YKlhSpn4OIQ GaEtYvIdJdupSCG3zPq7cw0QDMpmCTiEbVf+DLDRz0wdJSBTNi9I6LeUwGssYRo7TMj3 YHrkHQsw499rCTpBawYdpQD0UhusqePdIm5j7DzDz8AfsVesvNTp1wgyddu8sL43oak6 ud8w== X-Gm-Message-State: AOAM5338NysBbq7OojNTFCrTS1WXPVPLNA3Db3ZD8bavg3lfXU2bhYe9 YaRgLY2YpT9u/ozDlnlkbRK0YYUG X-Google-Smtp-Source: ABdhPJx08cujZ1S+ZyuQZNIq+/2Yd7vlmz0l2oyk294KduAFvar4BbdGW2WeCvntA7BkASOidn0Gmg== X-Received: by 2002:aa7:cdcb:: with SMTP id h11mr3781326edw.218.1592578142486; Fri, 19 Jun 2020 07:49:02 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id v3sm5013761edj.89.2020.06.19.07.49.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 07:49:01 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> From: Dmitry Gutov Message-ID: <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> Date: Fri, 19 Jun 2020 17:49:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83imfnxgt3.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::52f; envelope-from=raaahh@gmail.com; helo=mail-ed1-x52f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:49:06 -0000 On 19.06.2020 17:37, Eli Zaretskii wrote: >>> Switch to another buffer related to the current project. >>> A buffer is related to a project if its `default-directory' >>> is inside the directory hierarchy of the project's root. >> >> Sounds good. Except some projects can be inside one another, too. > Does that invalidate what the text above says? If the current project contains a few other projects inside of its subdirectories, project-switch-to-buffer probably should offer any of "their" buffers for switching. It current does, but that's arguably a bug. :-( > Maybe we should step back and talk about the intended uses of this > command? When would you want to switch to a buffer whose name you > don't know in advance? When don't I? Do you use icomplete, or something similar? As soon as you start relying on completion hints, you don't need to remember the names in advance. And it's also a good overview of the current open buffers in the current project. Also, different projects can have files with conflicting names. And yes, uniquify solves that somewhat by renaming one of the buffers, but the other keeps the base name, so it's not immediately apparent to which project it belongs. From MAILER-DAEMON Fri Jun 19 10:54:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIPP-0001gu-0I for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 10:54:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIPN-0001eF-L6 for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:54:21 -0400 Received: from mout.gmx.net ([212.227.15.18]:54685) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIPI-00049z-DQ for emacs-devel@gnu.org; Fri, 19 Jun 2020 10:54:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592578453; bh=Yu+guh/rn2WixnJF9eMREGgejpnmFRUX6xuzCCLc5n8=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=QxnVASKbOX+mvcVVpaNLP1Xe+brS3aofKKi7dMskq8mKvNvouCutzuALzJJ8xpwB0 NdIBIIrTz28d6c6GVDaqvbE2d5AyaG+JqY23U9kmmHLMWiQr1q4XrSA95F8Mz7prwE ctZWutDSP4M4c2WRmJSYkCjzei/b6dlsaMrS2ALw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MyKDe-1iwO8f39qu-00yktP; Fri, 19 Jun 2020 16:54:13 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> Date: Fri, 19 Jun 2020 16:54:12 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 15:45:52 +0100") Message-ID: <877dw314yz.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Wippte5uUOrMRGs49HSND/HsI9WH6klhbeHLIJMC3vMF5foK4mA ptUKfdKqtHM+EtaTuTLoaq/+c40cr5trmNka+RLG+Po2fhrbFJuI0Gu/PCz88Tez3HFqTvE jYF8FrHlku2Vb5wROXkkR/peLhwWX9YihDvbZmDgRedw+WbJvUcc4XsAkgQw9024ZEQnhTm gOwvRL5mNt6D/iru8JsfA== X-UI-Out-Filterresults: notjunk:1;V03:K0:OvU18nWY9Pw=:u/p+fcu84ICcmghzfY7ZNx fcCQ2h4lIZFmhNNPbS9XPgVEmYuLw9rukenAv2PY+0U7HkrSDGkua0YZYEtuqyu4t1o5Ee1Rl EcrRgwgr9z7C1qUpGmT0NvryRIzprapqBsSU2IuIValZ+QXwflbvNXi9C4NOWDY6hxnzr2Z/S SOovPJQP4jR3VC21ET5RsUK522xDznoBiG2SRw6rlFsY/xnyNaYgC5WI5yp5IY0v6+OIXz778 F0fji/tvgFNK7dKqmrJXVnqoJogUjdWK5Uft3CCZRAfv19mFtc9rGgcdeHf/tcecYQwzNPntG gFnvqBD8XUemZwXrBZf3Va8PlBQrjp7KG3VR71iuMUu+6M9TYw0SAqDxS0FsGZHYABE8p+rDA he4tOxNgMOfN0tn6mc6ZIfCdeJ6eAgl8+PK03vzbpSPldUxyiJ9NdCgCgqtYjY1P+7E63S/3r fK5Vnkxl+xTXkCjMZbglh79jBGnBrNj1NR6eSMXc1JFHVRAaETk7Swmd/5DBfNlVDdJCc3+m1 0zl6GV9sNRGDjZYsnyBg1FOU6BauNHAI+L/koYCJ7De6NDKdrxsCMrJhexnP6GZpezceeBytY G6snlnkXbg1kaGDSzBrbztJTEIx06mqnJpCEo7b+Z18ZKu7OAnIl3fYoTZ1NVKgstM6/qTqFQ MjvbkxOLubm9MU5cdhGj+CxeWNHC+116Ptznc5+shimVObXzlQrQi7nmBppgAsH1D3NDvGdPC +C2Iw+Dckq8Is67j8qxBYDCkVwFthKjf2i7TUiykb4GxU1l47FsCplebhApeW84jGfIYMzRyv apMXK25rZoluO8h37E51xIGxbtl89gmhh+sZKQetl6F6WdHDW2lYfe77DkQpPTCwRy1qdYgsb xtUiNfY7fnf8aa0UR4IwCK6nIsntYlz9EmNCgWF04l63MeGTOBLzGo7wIJgHoa3SW+G7/8qy/ 5WS/Ng8i2W7DTMkpA2UvFSX711RDjss4hTDo+LpsbthUQw/jfWjsZhel5VM1VkfKRUmA1PVtX nmWbz5L3gt0FFM0UsBG7Ibqmmik4NAUj7+NqJYmw3FM5BEitIdM202jXGT1R8yt/efl4gFs47 kXxZqgBTE3wefnK4yRPGxkNzN1Cl2o4dQ7QRBIUxh6/UWRmmc6ZjhH0+sdxBE98WK/6CnkNgi IUML0G4uhtEdf0LzsUo9Ka4luZG+gfsud9Ko3OifZlqdumCIc7dGNETHKRV4k3ih0TIeZF3JG lXhPuhTZk0NcuC4Qo Received-SPF: pass client-ip=212.227.15.18; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 10:43:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 14:54:21 -0000 Jo=C3=A3o T=C3=A1vora writes: >> Yes. You could add (tramp "2.4.4") to your Package-Requires: header, >> this will be the next version in GNU ELPA. However, this would mean a >> dependency for all Eglot users, even if they are not interested in >> Tramp. Hmm. > > What Hmm? :-) Emacs users who are not "interested in Tramp" still get > it, too, right? Or does Tramp 2.4.4 come with some kind of potential > built-in annoyance? :-D No annoyance. But a user of Emacs 26.3 has Tramp 2.3.5 built-in. Because of Eglot, Tramp 2.4.4 would be installed for her from GNU ELPA, w/o having asked for. > Jo=C3=A3o Best regards, Michael. From MAILER-DAEMON Fri Jun 19 11:02:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIX6-0003Cy-5l for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:02:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49154) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIX3-00039s-1r for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:02:17 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]:35611) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmIWz-0005nm-01; Fri, 19 Jun 2020 11:02:16 -0400 Received: by mail-ej1-x62e.google.com with SMTP id y13so10545783eju.2; Fri, 19 Jun 2020 08:02:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=trFsScL1JclARkZp+/WA9ocYOArNCMY7QaX9uBDWsZw=; b=f4Oyt9lkQViNFSOchmBm7peKylA/R+K0Mbe9LeGfpYt5s6FlC1036635HddN5KkX3Q SXkGHdpOHQQnGASf8mvK580guOVETXiM3whqOfPv9NJyR6yh/GGC0XnJGuQDs8aUxw9U 1YmgzjJ+Wzzrzo8EJxp/Z+/n4FqhfiLq2Twf674aA/Bv4EfyqQWljA5SkAJK5InBc7N/ lN55Ik01tAX/j7bPCHonjvZmp/RfFx+TpPsiDUn1wObQnfQ8oPQHeHmXiP0Z9nz0ragm IfcAWk0MXs4GL/2MKIWbRS+IJRwSzBT5v/qJBbUHeocJLpumqO+gQ7TTgF7w7BuwFR9+ DN2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=trFsScL1JclARkZp+/WA9ocYOArNCMY7QaX9uBDWsZw=; b=pMuuNaUKbGQ9V5AprJuSLEOrvz2I3piWgdm+ucrPeZ9jHqSt/NRqcfXBjsOSObb3jA o2S39q+be6543TgfxVxG1ZTLAggnnzERcaE8oVaML5x4JKcl96rXz0g2QLkUls9MNmWs 778xVHRN1rsyUxjE83BIHBmIVPA6zuXNSlzJpeiGfhkIxeXTER5z7fgHuUTPyJAd2tQb 5BqUrsu53rVsuEmTzAvPiOKDIdZUCsi8/iGlWRcMteXYZCQaePAJVN7RhNDCdeDBlaDb UQzeCrTuD3dBNtUdtulJO8121DwoH5blWX6x3f1peSDaLafmWR3azGI8RwYEQT8zvbaS Ka2g== X-Gm-Message-State: AOAM5303ajqx4oM/q112vcI2DTCnW09/zJGNo0kvL/ZkLGkNGgXN71Vm pSPQKmB5ddkYJJKv0pn2ez86hLGe X-Google-Smtp-Source: ABdhPJyIDQMwzPUYhJmLnCvQSeQbvgkS5k0jCl1PeIGkPfFVvJVbNW9DaB0rqfUYjkr/eSTnoCckUQ== X-Received: by 2002:a17:906:3483:: with SMTP id g3mr3980091ejb.373.1592578929635; Fri, 19 Jun 2020 08:02:09 -0700 (PDT) Received: from [192.168.0.60] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id gj10sm4919973ejb.61.2020.06.19.08.02.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 08:02:09 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> From: Dmitry Gutov Message-ID: <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> Date: Fri, 19 Jun 2020 18:02:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83imfnxgt3.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62e; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:02:17 -0000 On 19.06.2020 17:37, Eli Zaretskii wrote: > As another provocative thought, should we perhaps consider the > major-mode of the buffer? It's not the worst idea, but the set of "buffers belonging to the current project" should probably be the same between project-switch-to-buffer and project-kill-buffers. And as Philip explained, it's useful for the latter to consider many different major modes. From MAILER-DAEMON Fri Jun 19 11:03:01 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIXl-00045L-IT for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:03:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIXj-00041f-Lc for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:02:59 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:39679) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIXg-0005x3-Sm for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:02:59 -0400 Date: Fri, 19 Jun 2020 15:02:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592578972; bh=dPscFFi6ntbE2zbeBnd13ZktGuRzRhSSG+GtrUn8JIU=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=OxUYPBUw0d5X3MSGyhAVAXHq5VSveXHd2CZAi1YPttsQ+xt07FGPr3M1m12Up3R0v kmS1qCyFra4oOB8iX60iPa+eaxOFvihk3UIgD5Csn/i4Qx7ufygRpfwzKsTyX0oXj9 QOQmjAKuvCeBxn8HOnd/kD/M28yBHgKDR0yNzjARdef+xRgWIPospPL+GiTfhEUS3D 3dTy1upPDSxWuXrhNheNUKc/rDUIiaEZN2pF3MgzQ2dj5EMWDLRDFNZccz16BDYxyw a9dNun2pbH0LKIAC3X/emyAf5rnkaOwCnyYjFGSi0sEVLCi5aaqXN+wibWMkFbsGg4 YbTEPk3snlo2A== To: Eli Zaretskii From: Theodor Thornhill Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: In-Reply-To: <83imfnxgt3.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_K9xKRjKAb09qTEmDb6mFQlx0y3Za3q0SjTXXKRXG4Ps" Received-SPF: pass client-ip=185.70.40.133; envelope-from=theothornhill@pm.me; helo=mail-40133.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 11:02:53 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:02:59 -0000 This is a multi-part message in MIME format. --b1_K9xKRjKAb09qTEmDb6mFQlx0y3Za3q0SjTXXKRXG4Ps Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 PiBCdXQgdGhlIGZhY3QgdGhhdCBhIGJ1ZmZlciB2aXNpdHMgYSBmaWxlIGRvZXNuJ3QgeWV0IG1h a2UgaXQgYSBnb29kCj4gY2FuZGlkYXRlLCBkb2VzIGl0PwoKV2VsbCwgbm8gbm90IGdlbmVyYWxs eS4KCj4gTWF5YmUgd2Ugc2hvdWxkIHN0ZXAgYmFjayBhbmQgdGFsayBhYm91dCB0aGUgaW50ZW5k ZWQgdXNlcyBvZiB0aGlzCj4gY29tbWFuZD8KCkkgd2FudGVkIGEgd2F5IHRvIGZpbHRlciBvdXQg YnVmZmVycyB1bnJlbGF0ZWQgdG8gdGhlIHByb2plY3QgSeKAmW0gaW4sIHdpdGhvdXQgaGF2aW5n IHRvIGNsZWFuIHVwIHRoZSB3aG9sZSBidWZmZXIgbGlzdAoKPiBXaGVuIHdvdWxkIHlvdSB3YW50 IHRvIHN3aXRjaCB0byBhIGJ1ZmZlciB3aG9zZSBuYW1lIHlvdQo+IGRvbid0IGtub3cgaW4gYWR2 YW5jZT8KCkZvciBtZSwgYWxtb3N0IGFsd2F5cywgdGhvdWdoIG5vdCBiZWNhdXNlIEkgZG9u4oCZ dCBrbm93IGl0cyBuYW1lLiBJ4oCZZCBsaWtlIGVtYWNzIHRvIGhlbHAgbWUgcmVtZW1iZXIgYW5k IG9mZmVyIGF1dG8gY29tcGxldGlvbi4KCj4gQXMgYW5vdGhlciBwcm92b2NhdGl2ZSB0aG91Z2h0 LCBzaG91bGQgd2UgcGVyaGFwcyBjb25zaWRlciB0aGUKPiBtYWpvci1tb2RlIG9mIHRoZSBidWZm ZXI/CgpNYXliZSwgYnV0IEkgZG9u4oCZdCBzZWUgaG93IGp1c3QgeWV0LiBJIHRob3VnaHQgYWJv dXQgdGhpcywgYnV0IGEgcHJvamVjdCBpc27igJl0IGdlbmVyYWxseSBib3VuZCB0byBvbmUgbWFq b3IgbW9kZSwgaXMgaXQ/IEnigJlkIGxvdmUgc29tZSB0aXBzIGhlcmUuCgpUaGVv --b1_K9xKRjKAb09qTEmDb6mFQlx0y3Za3q0SjTXXKRXG4Ps Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 ICAgIDxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJwcm90 b25tYWlsX3F1b3RlIiB0eXBlPSJjaXRlIj5CdXQgdGhlIGZhY3QgdGhhdCBhIGJ1ZmZlciB2aXNp dHMgYSBmaWxlIGRvZXNuJ3QgeWV0IG1ha2UgaXQgYSBnb29kPGJyPmNhbmRpZGF0ZSwgZG9lcyBp dD88L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+V2VsbCwgbm8gbm90IGdlbmVyYWxseS4mbmJz cDs8Y2FyZXQ+PC9jYXJldD48YnI+PGJsb2NrcXVvdGUgY2xhc3M9InByb3Rvbm1haWxfcXVvdGUi IHR5cGU9ImNpdGUiPk1heWJlIHdlIHNob3VsZCBzdGVwIGJhY2sgYW5kIHRhbGsgYWJvdXQgdGhl IGludGVuZGVkIHVzZXMgb2YgdGhpczxicj5jb21tYW5kPyA8L2Jsb2NrcXVvdGU+SSB3YW50ZWQg YSB3YXkgdG8gZmlsdGVyIG91dCBidWZmZXJzIHVucmVsYXRlZCB0byB0aGUgcHJvamVjdCBJ4oCZ bSBpbiwgd2l0aG91dCBoYXZpbmcgdG8gY2xlYW4gdXAgdGhlIHdob2xlIGJ1ZmZlciBsaXN0PGNh cmV0PjwvY2FyZXQ+PGJyPjxicj48YmxvY2txdW90ZSBjbGFzcz0icHJvdG9ubWFpbF9xdW90ZSIg dHlwZT0iY2l0ZSI+IFdoZW4gd291bGQgeW91IHdhbnQgdG8gc3dpdGNoIHRvIGEgYnVmZmVyIHdo b3NlIG5hbWUgeW91PGJyPmRvbid0IGtub3cgaW4gYWR2YW5jZT88L2Jsb2NrcXVvdGU+PGRpdj5G b3IgbWUsIGFsbW9zdCBhbHdheXMsIHRob3VnaCBub3QgYmVjYXVzZSBJIGRvbuKAmXQga25vdyBp dHMgbmFtZS4gSeKAmWQgbGlrZSBlbWFjcyB0byBoZWxwIG1lIHJlbWVtYmVyIGFuZCBvZmZlciBh dXRvIGNvbXBsZXRpb24uJm5ic3A7PC9kaXY+PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJwcm90b25t YWlsX3F1b3RlIiB0eXBlPSJjaXRlIj5BcyBhbm90aGVyIHByb3ZvY2F0aXZlIHRob3VnaHQsIHNo b3VsZCB3ZSBwZXJoYXBzIGNvbnNpZGVyIHRoZTxicj5tYWpvci1tb2RlIG9mIHRoZSBidWZmZXI/ PGJyPjxicj48L2Jsb2NrcXVvdGU+PGRpdj5NYXliZSwgYnV0IEkgZG9u4oCZdCBzZWUgaG93IGp1 c3QgeWV0LiBJIHRob3VnaHQgYWJvdXQgdGhpcywgYnV0IGEgcHJvamVjdCBpc27igJl0IGdlbmVy YWxseSBib3VuZCB0byBvbmUgbWFqb3IgbW9kZSwgaXMgaXQ/IEnigJlkIGxvdmUgc29tZSB0aXBz IGhlcmUuJm5ic3A7PGNhcmV0PjwvY2FyZXQ+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGVv PC9kaXY+PGRpdj48YnI+PC9kaXY+ --b1_K9xKRjKAb09qTEmDb6mFQlx0y3Za3q0SjTXXKRXG4Ps-- From MAILER-DAEMON Fri Jun 19 11:12:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIgf-0004rw-Ip for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:12:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIge-0004rm-8t for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:12:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48055) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmIgc-0008Kw-NZ; Fri, 19 Jun 2020 11:12:10 -0400 Received: from [176.228.60.248] (port=1711 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmIgR-00005m-6s; Fri, 19 Jun 2020 11:12:08 -0400 Date: Fri, 19 Jun 2020 18:11:47 +0300 Message-Id: <83h7v7xf7w.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 17:49:00 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:12:12 -0000 > Cc: philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 17:49:00 +0300 > > On 19.06.2020 17:37, Eli Zaretskii wrote: > > >>> Switch to another buffer related to the current project. > >>> A buffer is related to a project if its `default-directory' > >>> is inside the directory hierarchy of the project's root. > >> > >> Sounds good. Except some projects can be inside one another, too. > > > Does that invalidate what the text above says? > > If the current project contains a few other projects inside of its > subdirectories, project-switch-to-buffer probably should offer any of > "their" buffers for switching. "Should" or "should not"? If the former, then the text I proposed is fine as it is. > > Maybe we should step back and talk about the intended uses of this > > command? When would you want to switch to a buffer whose name you > > don't know in advance? > > When don't I? Do you use icomplete, or something similar? > > As soon as you start relying on completion hints, you don't need to > remember the names in advance. And it's also a good overview of the > current open buffers in the current project. If this is just for completion's sake, then I could understand, but still it sounds very strange to include stuff like *XREF*, Eshell, Occur, *Compilation*, *Grep*, etc. Those are basically singletons, at least by default, and a simple "C-x b" should be enough to switch to them. project-switch-to-buffer should be more helpful by offering only "useful" buffers. > Also, different projects can have files with conflicting names. That cannot be solved by completion, where only the basename is usually shown. From MAILER-DAEMON Fri Jun 19 11:13:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmIi0-00075l-Sn for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:13:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmIhz-00072l-2U for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:13:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48132) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmIhy-0000J0-PL; Fri, 19 Jun 2020 11:13:34 -0400 Received: from [176.228.60.248] (port=1811 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmIhx-0000MC-FQ; Fri, 19 Jun 2020 11:13:34 -0400 Date: Fri, 19 Jun 2020 18:13:23 +0300 Message-Id: <83ftarxf58.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 18:02:07 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:13:35 -0000 > Cc: philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 18:02:07 +0300 > > On 19.06.2020 17:37, Eli Zaretskii wrote: > > As another provocative thought, should we perhaps consider the > > major-mode of the buffer? > > It's not the worst idea, but the set of "buffers belonging to the > current project" should probably be the same between > project-switch-to-buffer and project-kill-buffers. No, not necessarily. The purpose of the commands is different, so they could start with the same basic list, but apply different filters to it. > And as Philip explained, it's useful for the latter to consider many > different major modes. I'm talking about the former, not about the latter. From MAILER-DAEMON Fri Jun 19 11:19:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmInZ-0005wH-Mz for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:19:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55054) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmInY-0005w8-2A for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:19:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48191) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmInX-0001FN-80; Fri, 19 Jun 2020 11:19:19 -0400 Received: from [176.228.60.248] (port=2158 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmInW-0000r6-FQ; Fri, 19 Jun 2020 11:19:18 -0400 Date: Fri, 19 Jun 2020 18:19:06 +0300 Message-Id: <83eeqbxevp.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: (message from Theodor Thornhill on Fri, 19 Jun 2020 15:02:45 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:19:20 -0000 > Date: Fri, 19 Jun 2020 15:02:45 +0000 > From: Theodor Thornhill > Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org > > As another provocative thought, should we perhaps consider the > major-mode of the buffer? > > Maybe, but I don’t see how just yet. I thought about this, but a project isn’t generally bound to one major > mode, is it? I’d love some tips here. A project could specify a list of major-modes, couldn't it? That would generally derive from the project's "purpose" or "goal", for lack of a better word. For example, a project where you build a program would have prog-mode or some of its descendants in the list, and perhaps also Texinfo and/or markdown for docs. A project whose purpose is to write an essay or a blog or might use descendants of text-mode. Etc., etc. From MAILER-DAEMON Fri Jun 19 11:40:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmJ7g-0004fs-5k for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 11:40:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJ7c-0004de-8f for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:40:04 -0400 Received: from mail1.protonmail.ch ([185.70.40.18]:46797) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJ7Z-0005Xb-EM for emacs-devel@gnu.org; Fri, 19 Jun 2020 11:40:03 -0400 Date: Fri, 19 Jun 2020 15:39:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592581198; bh=TbisUn+XomZasTeNxlRq9nv6okZ8YVHk1LWG+kdUIsE=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=krRgu+ElHCC1D/ElzOLLX1H9se5RL6vOJdaEFaBPeJSi4pi5eHNt7OE3oJwrVWv3N r0Ev0y2KO0Vw4AFUd3NjFvehMj0ylIaTyotXMfnhy4/2AIwsORk0eofLAFhf9IcEzx Kt+YQAj40b7WVJRO9yZ2V1tSWNDjwiD2bv0pMR1RbXv4sIzU8WwqthzztH6i+BKkfC jXZIts1ds552+/1FE+87os02dNHPmXWvWPWyMZl6orF2tKpvsdHyGXFTiCsnVWxDlL ewurx3ighyFCktmFbo4qBm4qUtDz3Eh468osb6ESiCogkdyig6WrYQrT1jVIMLgrzG V7o//mlBg3zGw== To: Eli Zaretskii From: Theodor Thornhill Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <87bllfnjy5.fsf@thornhill.no> In-Reply-To: <83eeqbxevp.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.18; envelope-from=theothornhill@pm.me; helo=mail1.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 11:39:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 15:40:05 -0000 > A project could specify a list of major-modes, couldn't it? That > would generally derive from the project's "purpose" or "goal", for > lack of a better word. For example, a project where you build a > program would have prog-mode or some of its descendants in the list, > and perhaps also Texinfo and/or markdown for docs. A project whose > purpose is to write an essay or a blog or might use descendants of > text-mode. Etc., etc. Yes, absolutely. But isn't this sort of what is intended with the cl-defmethods used to assign a project? I believe project.el to be a bit ambiguous, since it is both a generic "wrapper" for a generic interface "project", but also an implementation of the "vc" version of this interface. So the behaviour you suggest here is easily done in say: (cl-defmethod project-root ((project (head some-major-mode))) ...) The version used now is merely saying: "Show me everything but the things ignored in .gitignore." Or am I misunderstanding you? Theo From MAILER-DAEMON Fri Jun 19 12:18:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmJj4-00021Y-LR for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:18:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44442) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJj3-00021N-0b for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:18:45 -0400 Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]:36297) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmJiz-0003vQ-87 for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:18:44 -0400 Received: by mail-io1-xd33.google.com with SMTP id r77so11866450ior.3 for ; Fri, 19 Jun 2020 09:18:40 -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 :cc:content-transfer-encoding; bh=3qDqa7FnSKCgRfOKg7nZXCFQfe2ewsLG/i7nqF8nnj8=; b=dWeSVDY0K+xJk6zjQ2ydpIu7hM4KtpfM8+e6itarKAaAZyDYRH1Zii3zqB73mH0y5m v5epKBCLu1bDrbCmB40ueE1b8LpLvR9uuMkUY8Bev8/h5NX3Ha/hTvGIbFwqV+mbNI+r KXZ9wKCWQq5mpALXxAdUVybb1NBooHFS0lyeQB5Hoq2DhFYLjQDS/FIKuympH2cI8VNd v4REVwazsw2VdC8z44PsI18AA5V5biwdQsotls6gtYWssMIK0Fr7SfPhknHd/796J6qn 7SsTqxqnp6nVpRSo+d0BKWowGimehxF/SahBGyyZ4+iHeqSfS89WVFW3LS4jC1OcTUBr m8hg== 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:cc:content-transfer-encoding; bh=3qDqa7FnSKCgRfOKg7nZXCFQfe2ewsLG/i7nqF8nnj8=; b=sARWQ/egY1wJHf/0pbQiqgiQBLyYtgTiGX6vkGQ3seJUbwX1U/fI7+WkTLQon72QMP Q6qddgV2sebTFzJcb6aJD+xXKlByhfsIH3QXlomtpjx6Yz0eTpj3YQHYh2L1S5ZgS6u+ Dp0DqUJMFNUKmqwWUf+yOZfJukI9KG5cBI2uJ/Jb8M3SK0ggaw/sy2BpEeR7MiVP/MTG VgDLJfCJj+TRKaPHtovUxBsQKsBZR5GJK3fStO9IMyFIPdLM9ooiAustd7OkrusGWE4d YNNZ4o6ryFHZ5S7UnSSW7GmJJ/pGcQiG6WehNQWb9jqhVT9c35AlWfCe+DT7EwkRYffu Lb+g== X-Gm-Message-State: AOAM533pOnYtXT1DKB+GXlwLH+YKXeN9b3Pj9olj5W48PIuvIXEsUFOE Qjp0iliPboKyGB4o10ys6w6W0wmODZf/eZyMCYQ= X-Google-Smtp-Source: ABdhPJyv6dBvTR9n+WC0iMdlN57tHoGljH2YN/KVXAF9vRXdVxHmUiE4YFxVTN7ptVyHcac0r4rUMkwUNlyAf5kq7GE= X-Received: by 2002:a5d:8e14:: with SMTP id e20mr5306223iod.156.1592583519764; Fri, 19 Jun 2020 09:18:39 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> In-Reply-To: <877dw314yz.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 17:18:27 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: emacs-devel , felipelema@mortemale.org, Tobias Rittweiler Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d33; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd33.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:18:45 -0000 [sorry for the duplicate, Michael] Fri, Jun 19, 2020 at 3:54 PM Michael Albinus wrote= : > > Jo=C3=A3o T=C3=A1vora writes: > > >> Yes. You could add (tramp "2.4.4") to your Package-Requires: header, > >> this will be the next version in GNU ELPA. However, this would mean a > >> dependency for all Eglot users, even if they are not interested in > >> Tramp. Hmm. > > > > What Hmm? :-) Emacs users who are not "interested in Tramp" still get > > it, too, right? Or does Tramp 2.4.4 come with some kind of potential > > built-in annoyance? :-D > > No annoyance. But a user of Emacs 26.3 has Tramp 2.3.5 built-in. Because > of Eglot, Tramp 2.4.4 would be installed for her from GNU ELPA, w/o > having asked for. Well, this user did ask for Eglot. He will also get an updated xref.el, project.el eldoc.el, flymake.el as already happens. I'm afraid this is just how inter-package dependencies work. As long as Tramp 2.4.4 is (mostly) backward compatible to 2.3.5's uses... there should be no (little) problem. Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 12:28:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmJsj-0008R6-7n for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:28:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47548) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJsd-0008QO-So for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:28:40 -0400 Received: from mout.gmx.net ([212.227.17.22]:42229) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJsb-0005cF-SV for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:28:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592584113; bh=Y1f7xgxfdyxwf/rmfP9lvbcIyx5oMOCzSNNU1e+8sXE=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=b8QZAtxrArh+IL+GG1um12zRjQRTW7OzC683O6cLxGakJsaS6RwSl3RTW3EJC6QSl zOUrRLDQrsla0D7MbSSNJIQZE56VBMor2hiv1bj+8+M+pMdv2QPZZQrUhl3SFz+YGw ibi6fYGtKZsJVZPPSTSIPJdUMZDX5NhUmXsWiBYQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MMobU-1jTY2f09fo-00Ikf9; Fri, 19 Jun 2020 18:28:33 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> Date: Fri, 19 Jun 2020 18:28:29 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 17:18:27 +0100") Message-ID: <87366r10lu.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:dbQSEc3CNpmPhLYoOf7x/RFARaeNrlgcC4buxR2CF9q+dPa72FZ gCBOAkd52YGXOQMPxRQ73LE5rOeYAyv8k7O8eT5LIvA29NvrC7uaxKfSgldcfnkxBdk2Jv/ WESkq1CIk809/eqMD27q+7INfQAHRGg90uXCCR/+w6UqN813wNSCdpIfGQvs5eoRpVqUQa1 uutbuFp/14smCoKAHw/fA== X-UI-Out-Filterresults: notjunk:1;V03:K0:1BlSKfJsCPk=:d206EHwhA5+wkzG6KUHL/L lQ3nZuGS0YLbi728FWb46bCuwqYZiZBa1th5y5GbMChgH/GPuzfyEy8QN4V2gid7vOzw5m2mn 7mnUMbbmJNaKUHhIQYLH0DsgrSx/xECgm2BGUx7dfw3XMmGepemW1Mf7veWBsPy0yVyofKUUj /Ki7KWTkozpLKUFWrThQxzsezQKQDmdN+UAsMSxvx1sNhUAaIrCGvtFCuIE1Bbo/gfyvfsyob eB9CYZ9qkF7yYdqKzCOcpuS0PMh/1iqe3SpsWoX9MDrjINNyc3GdBKemmcqkI0+paVAULlukh X6u+E2ygkiP/9aVdspPO+3ZDtfihGXvKoGIZxpSbFy4xPiO3PIH1vx9jVlcJU4wNPC1YeQE4D JEkE+MQvRwJjpNW3wcft01YuRI/p/fNSISs0FrXLPCn5QO1nnHLE8kN3SazHLE8vSH8e+9jBo 1YguARBxE8r0sh/l/oDgxn7xpIQ3vleRMYtnmFzl925ic/N6bh6M9AVZ16KghM8mFHpEskfQX cG142DO//fRwUd1PoQVdXLoARU/fDYZEzC4qkktGDN+fhXCjgevi5sNONG53smgyCo73yeBa8 Ape4whTtEN0FP18mZyaVhgrnJ7BhDzn+Ky2n6xef6cPrVucZqvsIeWjvi204Ky3DvCJCI4WF/ CTvbLVsOCetUJl8zxzqa3B7skWpUCPFm7Y2W+MJJ2pX0Ff0IWiZ7AMVnlDocclAkL+VtlvKC8 nictIKf71u7nEnqhJlT10GUBA8aGMUjxTRx9tVTjYtLh+ZSaz/alsgQYYyMW7w4bvjspyDc6F kt2SzFnm33zj9lu3x0uT9cKIv1SGNkqJZcZ1QOOC1KNcwyYnA+r1OEnLT6EjBkp/pAXNyFM71 wiGEam9WL5vwqcN+IZApHx+JauVbHBa7kqK8CZYlrfcKWCZnm7cXTIcL9HTE6tnofYoYzbWIZ JqZJLuFsMd1TrW0d0YxSi0DF0TVij8BTB1fr7dmY2pCK/BYS8mULKd2m/VHpUp07zQAsW3Zdt 0TnKWuFJdSVuXw0CiUalj/RFWDOwUoMHpldGEHXLebZboFrFtE1CtQWXpAsGWa1jCbjvao4K6 P7AqCZ8NGdKLUxyZuZ31iqI4ev2N2mZudHOJnpy6PLk+yT9vaRDEYe6EHPSd3sOu+E8o8UzkD nx1ldp7sVWzi4xUFVr4WhMDBKCGG93pjqRG8Rs1xAoWZ2l4nOXE5Nj+EQzRGEJL1QsRRe/g0I YFtM17qjv4gtkWOJt Received-SPF: pass client-ip=212.227.17.22; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 12:28:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:28:40 -0000 Jo=C3=A3o T=C3=A1vora writes: Hi Jo=C3=A3o, >> No annoyance. But a user of Emacs 26.3 has Tramp 2.3.5 built-in. Because >> of Eglot, Tramp 2.4.4 would be installed for her from GNU ELPA, w/o >> having asked for. > > Well, this user did ask for Eglot. He will also get an updated > xref.el, project.el eldoc.el, flymake.el as already happens. I'm > afraid this is just how inter-package dependencies work. The point is that this Tramp upgrade is not mandatory. Only if a user wants to apply Eglot remotely. I'm the last one who would say a Tramp upgrade is bad :-) But a Tramp upgrade w/o a reason? > As long as Tramp 2.4.4 is (mostly) backward compatible to 2.3.5's uses... > there should be no (little) problem. It's backward compatible. > Jo=C3=A3o Best regards, Michael. From MAILER-DAEMON Fri Jun 19 12:31:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmJv8-0002QA-Ul for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:31:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48152) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJv6-0002Ov-V7 for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:31:12 -0400 Received: from mail-io1-xd2b.google.com ([2607:f8b0:4864:20::d2b]:39321) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmJv5-00069T-67 for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:31:12 -0400 Received: by mail-io1-xd2b.google.com with SMTP id f23so6573992iof.6 for ; Fri, 19 Jun 2020 09:31:10 -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 :cc:content-transfer-encoding; bh=oROAOPLE/QJPvqsaF5C2EDAn4nsCVKqQeUtZY0wA9t4=; b=YuTmhg8diESWlY4/oICaA/dUxoc3FmgfqU0TPzvE4Y5+Ex2plTg7XXALWqGlMNl0Xd wyqxAiU3rR4L1trctlQLh9q/4SNTD1lnY6dNY3rpckhRdBUTOaQepVoO1TqCxLnim5xy adDNjdONgm+t9U7kkcFPcIhrdAOroAgXS6m56Ytyxgce3dxOPVdLGvWqk2WHYebvlArE X396BZtZzNOamevtXLty0AaRpoFiZBokMHbaTc5ICYnMzs0fsSpbzM88eDqt7AOMIpdy GNi9AQsKraiPkD+LB5Xpuo2By/39T71C0To8/84NTrGGmxuVVTAetYm5TGnPcyt51o03 Rwjw== 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:cc:content-transfer-encoding; bh=oROAOPLE/QJPvqsaF5C2EDAn4nsCVKqQeUtZY0wA9t4=; b=LGQ2RtHXOHVLnR2ewlO43P6lMmM54zSdAo4iidan5XMsLf7Hu8EiJfdBocDmVi+OXj ro/FGDH+HN1QYuxHNvbJMcpQqXZlNYJgdwo05WChCpbCh1bxEr9MS5GPHTdutIu98LZb KLgd8T3bwPXFeQGbXc1q/7Gg+u0bWkcycPVvkzau0q6yfnHl9IEDS3tbi/rktwu/6CPx ulQewsACNaFdcx1P7DYQR8w7mBC/a4VfXpvIC0DHSX8NMMdxTLHB2JNIzlcYam+4DC+x yslCt+5RhURJ7OmsyOriTog1p4VyPO7CE+/Swy1ZeynwL6awczpRvZVdTbG9BzV3bymQ mN0w== X-Gm-Message-State: AOAM533IZSlO5CZUeTcz/TBQhf+UQVa2TRs7U8zh07J7c5WP3lx89Lf+ 8uzaUHrZksgNStBk6KFtAINIHxxTzs1tfmg5Aw8= X-Google-Smtp-Source: ABdhPJwBkJIA+EnRbWd0uCNjxBdS830pzLAAmIUkj6iLVRBlNb7Y7vh1YcjWN/CLfua3Bi1NETTnChorEXovcV9MyG8= X-Received: by 2002:a6b:6818:: with SMTP id d24mr5148341ioc.57.1592584269760; Fri, 19 Jun 2020 09:31:09 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> In-Reply-To: <87366r10lu.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 17:30:58 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d2b; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:31:13 -0000 On Fri, Jun 19, 2020 at 5:28 PM Michael Albinus wr= ote: > > Jo=C3=A3o T=C3=A1vora writes: > > Hi Jo=C3=A3o, > > >> No annoyance. But a user of Emacs 26.3 has Tramp 2.3.5 built-in. Becau= se > >> of Eglot, Tramp 2.4.4 would be installed for her from GNU ELPA, w/o > >> having asked for. > > > > Well, this user did ask for Eglot. He will also get an updated > > xref.el, project.el eldoc.el, flymake.el as already happens. I'm > > afraid this is just how inter-package dependencies work. > > The point is that this Tramp upgrade is not mandatory. Only if a user > wants to apply Eglot remotely. I'm the last one who would say a Tramp > upgrade is bad :-) But a Tramp upgrade w/o a reason? Yes, but in that vein of thinking then Tramp shouldn't be bundled with Emacs too. There are lots of things we can do with Emacs that don't require Tramp. But some of them do, and so we bundle Tramp. And the same thing if we substitute Tramp for any feature X. Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 12:32:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmJwo-0007SZ-G6 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:32:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmJwn-0007Lq-5e for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:32:57 -0400 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]:33509) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmJwl-0006Pw-JZ for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:32:56 -0400 Received: by mail-io1-xd30.google.com with SMTP id i25so11992656iog.0 for ; Fri, 19 Jun 2020 09:32:55 -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 :cc:content-transfer-encoding; bh=m0UG++t5dlWf0nkI4RjthWdsehELPLtmchFnOGEPKMU=; b=OZZgWwP+youRnZZjG/2Qqn7ReaFf6NI5V9afefSMsgIZ2BCCgPihuRBZxcWk7T0i6q 7bnrONrGA23+WZeQkZUZ7nlh0zFAr+T9hrrb/zbOUfazpYV6dN9NA+dv8S7HFT1leTBl QGymgOhfs+zjCeabfyzMFYH/CKWiyMlLjQKl1FBL5p7YxSellq2wDQCBxQnJUSrYPJyB 4RRtonj/gXCoyUfmNV+yY9kIixxaPIRKDGvroBq2X3KNxOHFcYVeyvpBDZk7AtaG8TpR Ezge9ijJz4Pkmoqk9E4ldfC4bbd4ZSfWW5GNvJ8MFGsvEjQE7crmj7zIIw24+roQhnr/ laBA== 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:cc:content-transfer-encoding; bh=m0UG++t5dlWf0nkI4RjthWdsehELPLtmchFnOGEPKMU=; b=THr4r5O3iS2lXUWV1vs2uGB2USxxcVoDFZfHYe5Ok9wfPG4BOjN5ZgA/LbRyRG6hcZ y6KlVmMYB1qoTNUl/XAOHcvs20DfGWzwwwIV6vGVtR977HapihoG3U2ZWsboLUZer1Jh vlbOPmyhEOGsZMXltYVC7EudDhQKodFkqkBtXbrcB3nfvUWjynr/Kmgkyb/u7Ov9hoqn Ldfgs4x59lv2sBP/QZW0QMieQXSDLujp6utgeN+MYMb5ORo1KWZVU9FdtFzKi/dsbr5I aMzeXGQ7uME3jfVpKdVeaCrnCrcgaG2Od+CBFod23WJBvIoX+MInjwk7DCZqUdmDkhtk hmfQ== X-Gm-Message-State: AOAM533Y9E1eDxIxf0Jv2fB1WUDjxKqOMHq2sn+O9kxvdAhuJ+Wajq1z MLftSodppg/qrM4XU0SoVj9Lo6A91H4ljmN0yCU= X-Google-Smtp-Source: ABdhPJxJBi5/RS1t3s5KeBrhcRR3Cj9BVTJTpMRXLJFZgy8no24oHuiitTGkdHnT/3rmsWjd+AhnRfZ51toz8JblLdQ= X-Received: by 2002:a02:5806:: with SMTP id f6mr2417072jab.136.1592584373072; Fri, 19 Jun 2020 09:32:53 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> In-Reply-To: From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 17:32:41 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d30; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd30.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:32:57 -0000 On Fri, Jun 19, 2020 at 5:30 PM Jo=C3=A3o T=C3=A1vora wrote: > > On Fri, Jun 19, 2020 at 5:28 PM Michael Albinus = wrote: > > > > Jo=C3=A3o T=C3=A1vora writes: > > > > Hi Jo=C3=A3o, > > > > >> No annoyance. But a user of Emacs 26.3 has Tramp 2.3.5 built-in. Bec= ause > > >> of Eglot, Tramp 2.4.4 would be installed for her from GNU ELPA, w/o > > >> having asked for. > > > > > > Well, this user did ask for Eglot. He will also get an updated > > > xref.el, project.el eldoc.el, flymake.el as already happens. I'm > > > afraid this is just how inter-package dependencies work. > > > > The point is that this Tramp upgrade is not mandatory. Only if a user > > wants to apply Eglot remotely. I'm the last one who would say a Tramp > > upgrade is bad :-) But a Tramp upgrade w/o a reason? > > Yes, but in that vein of thinking then Tramp shouldn't be bundled > with Emacs too. There are lots of things we can do with Emacs > that don't require Tramp. But some of them do, and so we bundle > Tramp. > > And the same thing if we substitute Tramp for any feature X. Of course, we do take something similar in consideration regarding the _loading_ of X. For that, we have just-in-time "autoloads". But we don't have just-in-time "autoinstalls" yet. Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 12:39:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmK3W-0005Nh-Cy for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:39:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmK3U-0005NT-PH for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:39:52 -0400 Received: from mout.gmx.net ([212.227.15.19]:37455) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmK3S-0007VN-Rq for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:39:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592584788; bh=hXiDNGbYULe2zgQMM6vCIzfOZQaZ3X03D+Tg/t+12gE=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=CbOEulxGqztrh9vu80n+/VuFOC4glWmuorxz9SHWvn3HSXNoARX+sP+u4IRbUFfJI HRzYFotRQakDhb6IJmc0oam4+UAD/sirg0PyslHH3VztaONy0dddgB+uu2jFubKn5v 0tj51C5BJ1UFfzw1lGS3NDX/PKBq75hpJIytPO5U= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M2f5Z-1jjqHc2xXr-004FZw; Fri, 19 Jun 2020 18:39:47 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> Date: Fri, 19 Jun 2020 18:39:46 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 17:32:41 +0100") Message-ID: <87y2ojyppp.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:ygkwELs6thR0DhKJTR+7VqcXfP7cr4V4aFEsEURwRp7/xFGiTok mi0Kv1bghowv2+LLJNmWi5df8OgejPfPriRvTrEr5sihu0lu/Y6PpcL4E7Eh8B9R7PuvFu0 U/5SuIfm3im2xrGsIa2YfrNrxtMivTKX/F/Dnpq7c62cVU2S6WFOBQyjf2L3LcnAhmJeWcS MP8ZHMBYEbC6APYkWY/bw== X-UI-Out-Filterresults: notjunk:1;V03:K0:soMvocd8WKk=:8a7SLrq+bo66McXn6zk7x+ BqPXh6wFnQz2GWntipjQ22sna67qR7C3If9J54225ksXt5PnYDhYcsiKtiI3vBIGE/h+V1N87 KfEhuAdP1tvzo+pKMoOnYs0ibTx1Te3bW6mXpv1LLLy3g+T+smz0a/vVHJasAiKcF+5F8905i eFyU/xDI2YuTIMrhvsHBE7Ex8FKhBbT0mNOtIJELp1+1uQrPwgfhqNc+FjA2e4H2tMswkAjdV vN3vtTgV14QucZNINpQQaKvRQqpQt2vTur07/uHoNW2hCjeiQOho0u/oSjqiQmcKUUFdhiZsm 0vzz51lqnfWI0Qkv0ujGU0moEzHyoH0pbm5pYjdPcKP369CzECxaAvozH67ddrdVgldAROp7I l55PBokXuWvaXq4qIU9a7qiNfSd24M9HTFNIArzfmfNHmRUVm8qg2vM2dB7FfqHoYIGj76h+j +DNKAuYqjgo5uHoGkTRnpRNdoPSB5lp7JuHs6/r956jdsXRlkTouJegA7oy6rK0s21iNcv/iI 7RgyUZ3ioPtDjT25dBl7slEw3pMZXYRaRmKghtV5CpFTMm5Enoc0FDd1/d2dBZoj4v8ba9Zl4 nIZsW/B8dxAjxbwYJUCcc8GV6ivUVfeyuw0Is+6fdhLEoPy6Sq+/eaGGow+/kUDRx5gSZ9/zW SdwR+OwRO1HpgJ5wVCQHs29ED5cHAJWgOYMhUu4L1kwhnpLN0/hmEFggYxN57LkLL1rpjAntL 199GaxJXNCv4DCpk/zbP66tSHaB86wX6ZQJLwI95yAV3oENpb099Hew5YlrJvXCvd6r0jUD9W hl6zYX3dFVexVhU3oOaKDA4b2Ga6p7ISUZx+SLGC7iMuPYfWesnYftl1wjkUIbnqtAJQiEqHk u9uR0nUELOj9l/TI1fb5ktTAqWvFnPmT32BjrTC58q+S5mgMKInw33bXm+lNyXZ5dt2bqAXrM LE67h1U69XTZdB45R80srObJPrgLDoUwE+r2IbEBnxF5YhkfoZwz6oYmSCzed8vIFpCVP9h9G 8JYuq1X7xc+rtnR9DDf/6UwZD1d5e444MkbZFgWC5Jk0xmyUd5llb/+9Dc55GVQxITyrCRKsO 15g7GRTybUEe4w5SDAttZqn8sjYIkFZumxf/jkbo405CuXZh4NqVYxzAi3qvPeM8nEgs+qqHQ fbtdzejecG3N6Ui7Am1IN+3S4GFkjxe1ksHjuiOnfYnB/pJCoHhY49bzPUx/Qeq6Oiogf6uo5 vIvJegAhQ7kqSmO8s Received-SPF: pass client-ip=212.227.15.19; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 12:39:48 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:39:53 -0000 Jo=C3=A3o T=C3=A1vora writes: Hi Jo=C3=A3o, > Of course, we do take something similar in consideration regarding > the _loading_ of X. For that, we have just-in-time "autoloads". But > we don't have just-in-time "autoinstalls" yet. That's exactly my point. We have no mean to say in eglot.el "if you use Tramp, please ensure that you have at least Tramp 2.4.4. Otherwise, autoinstall it from GNU ELPA." > Jo=C3=A3o Best regards, Michael. From MAILER-DAEMON Fri Jun 19 12:45:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmK95-0000KA-Kv for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 12:45:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmK93-0000DL-9N for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:45:37 -0400 Received: from mail-io1-xd2c.google.com ([2607:f8b0:4864:20::d2c]:33612) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmK91-0000dI-LQ for emacs-devel@gnu.org; Fri, 19 Jun 2020 12:45:36 -0400 Received: by mail-io1-xd2c.google.com with SMTP id i25so12035708iog.0 for ; Fri, 19 Jun 2020 09:45:35 -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 :cc:content-transfer-encoding; bh=Eh5/94sILMphJ3jSb76OLUvgvsL7iIZ15kXUU/g6occ=; b=fL0Ef44WzTsQfEjN4KWSa755xF1tOTRyOHjD7AaeAfOxea7beg8KDZGx9/C8tAyS+H lokbjE+IhEXJwdmPcGRWJpCL+ux3SKDJ8bMNgh2DSDd9W0tPsDQeH35FhR517FO25uJ1 sMU5mngEJlZlzkIbJYm0tiS/lUhMocMjtg3lHfOS0Y1k5WaCbjMXW5KQWRrfxR/Zq2IA gxKqJ5DkWSJ5MXMSaYz/hZp1ENiGkFiSPwgT5m5T1T4Ck/EOxUXIUF+GPe8qK3gyQeI5 HMllMJ15PXnfgbybl6Y31Da2lyldQZY126J9IdDRA5lhqbHWaSSMEKoNpsB2PAvECURK hEgw== 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:cc:content-transfer-encoding; bh=Eh5/94sILMphJ3jSb76OLUvgvsL7iIZ15kXUU/g6occ=; b=UljI8hDLNvn4fxhZSvIEaK1ALjK3/frpTYl2cmye/+jB4leNTYassxVqQHba1oPnq9 H25tGShsZ8KCEsVgvg0R5q22xngyCZuiVyJCdrfWV9iAtSAoiV8L/JnfVAxgJAsAjovy 8NGYXPUBu3gNNfII4Vl7lOvZe5nwN/uACJlAdNJMf4AUXOkirKlLsbRjODRp709DSECL qBrrjA1r6wLupF2ALqaXU+lQ24JVH5858jK0AILVrVJlv1Wo9kiAcCJNFIt1FtU76vO6 UGGVo0IUoM63Pp55v/3yvk5M4akpAQiCWU2JDtjiBmvA9bkbUREpGqYrs7fAkmep7Phl 7Xbw== X-Gm-Message-State: AOAM531d2dAUTKA+bCoSazdg2AGMBGtVMraukNCHavVbAfoKLm6XUmTP g0yS7XsbtDAIBs/2GHnQj+xLA/L3RzvHiy4gSNA= X-Google-Smtp-Source: ABdhPJwySxLoMrV5wAWuvC9tsL7nrCT8q9aanmGBhJF1px5PIgE/Bb8Q96rLfLa8PVh7il3TODVSUk/nPKudw6l9jUs= X-Received: by 2002:a6b:b503:: with SMTP id e3mr5163445iof.175.1592585134463; Fri, 19 Jun 2020 09:45:34 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> <87y2ojyppp.fsf@gmx.de> In-Reply-To: <87y2ojyppp.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 17:45:22 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d2c; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 16:45:37 -0000 On Fri, Jun 19, 2020 at 5:39 PM Michael Albinus wr= ote: > > Jo=C3=A3o T=C3=A1vora writes: > > Hi Jo=C3=A3o, > > > Of course, we do take something similar in consideration regarding > > the _loading_ of X. For that, we have just-in-time "autoloads". But > > we don't have just-in-time "autoinstalls" yet. > > That's exactly my point. We have no mean to say in eglot.el "if you use > Tramp, please ensure that you have at least Tramp 2.4.4. Otherwise, > autoinstall it from GNU ELPA." But it's the same with Flymake, or Project or Xref or any other feature that Eglot uses. Thought those features are slightly more essential to Eglot's central promise (though not completely). But actually, we do. I mean, Eglot could check Tramp's version at run-time and give exactly that warning you suggest. But my question is: what benefit would that produce? I practice, what kind of remotely adverse impact do you expect from installing 2.4.4? Is it a very large download? Does the compilation take very long? Something else? From MAILER-DAEMON Fri Jun 19 13:11:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmKY8-000201-Mv for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:11:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59516) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKY4-0001uw-W0 for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:11:30 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50961) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmKY3-0005AX-SE; Fri, 19 Jun 2020 13:11:27 -0400 Received: from [176.228.60.248] (port=1036 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmKY3-0000DO-3U; Fri, 19 Jun 2020 13:11:27 -0400 Date: Fri, 19 Jun 2020 20:11:16 +0300 Message-Id: <83d05vx9or.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <87bllfnjy5.fsf@thornhill.no> (message from Theodor Thornhill on Fri, 19 Jun 2020 15:39:53 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:11:30 -0000 > Date: Fri, 19 Jun 2020 15:39:53 +0000 > From: Theodor Thornhill > Cc: philip@warpmail.net, dgutov@yandex.ru, emacs-devel@gnu.org > > > A project could specify a list of major-modes, couldn't it? That > > would generally derive from the project's "purpose" or "goal", for > > lack of a better word. For example, a project where you build a > > program would have prog-mode or some of its descendants in the list, > > and perhaps also Texinfo and/or markdown for docs. A project whose > > purpose is to write an essay or a blog or might use descendants of > > text-mode. Etc., etc. > > Yes, absolutely. But isn't this sort of what is intended with the > cl-defmethods used to assign a project? > > I believe project.el to be a bit ambiguous, since it is both a generic > "wrapper" for a generic interface "project", but also an implementation of > the "vc" version of this interface. So the behaviour you suggest here is > easily done in say: > > (cl-defmethod project-root ((project (head some-major-mode))) > ...) > > The version used now is merely saying: "Show me everything but the > things ignored in .gitignore." > > Or am I misunderstanding you? Maybe. I don't think I understand what you are suggesting in enough detail to tell. From MAILER-DAEMON Fri Jun 19 13:22:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmKif-00017A-IG for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:22:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33796) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKid-00013f-Rk for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:22:23 -0400 Received: from mail-qk1-x72c.google.com ([2607:f8b0:4864:20::72c]:34980) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmKib-0006vP-RT; Fri, 19 Jun 2020 13:22:23 -0400 Received: by mail-qk1-x72c.google.com with SMTP id q198so1829693qka.2; Fri, 19 Jun 2020 10:22:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=+s3BeRCrdSckqBWt55gPzTnfCm8qHDxPoApcgwfND9M=; b=p7BvIqWNQ1eURt99iB/TEWklpXQN6MZucBvYEDjX8CcrAlyllX2sEOSYSOT5cOn8dx JkBn/Oo5+dXRBFX6/hJYDa5ahxGW9sxSyICODpQbIGE6JvQwLyXMJHIiapX4r1XhC9lS 4LSb4935Iawu+B1eizCvvMIsFQk2FZJkDUJ+9uDvF2xXmPQhMn6iHjFuFdCrGz+8Pj15 WIVIRVfbbVLBGNGWwjfsBJvTec616Xu8nYAcvkZk7j2dYzNCew+fIBQ+XUFU0EnejGLo 16ScSXRZiyb9rWvDjIhgP99FFD2zKkUgQJF9tft2meUKeFxp4ZIZfOD7Ij66Tcc/k0TU 4MFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=+s3BeRCrdSckqBWt55gPzTnfCm8qHDxPoApcgwfND9M=; b=VkTshU50rrJ7KNqt+4NyzuQrVncWh6whoBrvWTAA3m70+3GJMvVJxZeoGn1N8GCfZ7 kpiwMw/g0Rm9dkTmCEqrfTh64o42ZKp4ZJHv3MtM6eQXEJ2h9qDccHMc/4s95IaIIi9t 3q5Wmb6fikyJNQOvSx2rfFDXk9wibvgseZsRbu2jHuMZGpP7rqYFx8AZsA2lnfsfdzpe J9dGRrva6xVLI04fc4oPI/wuwobupOAW2bQtYNmiRn6r9Uwk5AeOpNEhKfn1zKYnYHq+ +n/z6XWk+NxH9x9cyGcYPXsoHIbtgRYbIw9ZN5VVJ8z9sXm1yHlyCxyyqfX7YXskiiJB ZDlQ== X-Gm-Message-State: AOAM533/r+xyOXcOliNMuNTm7YAy5T7CBOZcin/2Ctvoz2F96sJO5BMH UsZKojhJeKDp4rUihVgN1CFzqu10DsT2Lw== X-Google-Smtp-Source: ABdhPJy7l1XE/L5fRKS4uRdk0KP6t42S7uIbVUiS+B2f+v+kDNcTBKBf0p7C35neN0yB1wdTVPLutg== X-Received: by 2002:ae9:e895:: with SMTP id a143mr4635002qkg.359.1592587340215; Fri, 19 Jun 2020 10:22:20 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id h64sm6996393qkf.46.2020.06.19.10.22.19 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Jun 2020 10:22:19 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Line wrap reconsidered From: Yuan Fu In-Reply-To: <83sgerxmbs.fsf@gnu.org> Date: Fri, 19 Jun 2020 13:22:18 -0400 Cc: Lars Ingebrigtsen , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> <83sgerxmbs.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::72c; envelope-from=casouri@gmail.com; helo=mail-qk1-x72c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:22:24 -0000 > On Jun 19, 2020, at 8:38 AM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Fri, 19 Jun 2020 08:04:47 -0400 >> Cc: Lars Ingebrigtsen , >> emacs-devel@gnu.org >>=20 >>> Maybe I don't understand the exact meaning of NOT_AT_EOL/NOT_AT_BOL >>> that Kinsoku assigns to that. Can you provide a formal definition = of >>> that, or point me to some document where that is explained? =20 >>=20 >> Since kinsoku.el is for asian characters which are all LTR[1], the = exact meaning of NOT_AT_EOL/NOT_AT_BOL in bidi context probably = doesn=E2=80=99t really matter, but to make kinsoku retain the same = behavior (thus looks right) in both RTL and LTR lines, I choose to = define BOL as left edge and EOL as right edge. So NOT_AT_EOL means = can=E2=80=99t be the right-most character in a line. >>=20 >> =46rom your message I thought in RTL lines the iterator draws from = right to left (you said each glyph is prepended to the previous one). So = in RTL context when we are at the end of a logical line, we are at the = left edge; on the other hand, in normal LTR context when we are at the = end of a logical line, we are at the right edge. Hence the flip. >=20 > What do you mean by "in the RTL context"? >=20 > Remember: bidi reordering can take place in two different situations: > then the paragraph direction is left-to-right, and when it's > right-to-left. In the former situation, the lines begin on the left, > in the latter they begin on the right. But LTR text, such as CJK > characters, will always be rendered left-to-right, no matter what is > the paragraph direction. >=20 > So which "RTL context" did you mean here? Oooh so there are four cases: LRT text in LTR paragraph, LRT text in RTL = paragraph, RTL text in RTL paragraph, and RTL text in LTR paragraph. And = the order in which the iterator draws glyphs depends on the paragraph = order (although it doesn=E2=80=99t know it). Am I right? >=20 >> As I mentioned above, I don=E2=80=99t think kinsoku cares/is defined = for this situation. And I took the definition to assume strict LTR, = mapping BOL to left and EOL to right. The ultimate effect is that, no = matter what the bidi context is, NOT_AT_EOL character, like =E3=80=8A, = never appears at the right edge. So we don=E2=80=99t get >>=20 >>=20 >> =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6= =EF=BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5= =90=8D=E5=AD=97=E6=98=AF=E3=80=8A >> =E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90=E7=9A=84= =E3=80=8B=E3=80=82 >>=20 >> Instead, we have >>=20 >> =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6= =EF=BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5= =90=8D=E5=AD=97=E6=98=AF >> =E3=80=8A=E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90= =E7=9A=84=E3=80=8B=E3=80=82 >=20 > What do you see in the text below? >=20 > =D7=90=D7=91=D7=92=D7=93 =D7=94=D7=95=D7=96=D7=97=D7=98=D7=99=D7=9B=D7=9A= =D7=9C=D7=9E=D7=A0=D7=9F = =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6=EF= =BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5=90= =8D=E5=AD=97=E6=98=AF > =E3=80=8A=E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90= =E7=9A=84=E3=80=8B=E3=80=82 >=20 > (I assume you are reading your email in Emacs; if not, copy/paste this > text into an Emacs buffer whose bidi-paragraph-direction is nil, and > look at the resulting display.) >=20 > Does the above look correct, from the Kinsoku POV? This is how LTR > CJK text will be displayed in a paragraph with right-to-left base > direction. Do you still think something needs to be flipped here? Kinsoku looks right, yes. However the period (=E2=80=9C=E3=80=82=E2=80=9D)= seems to be interpreted as RTL text, not sure why. >=20 >> Now, is that mapping TRT for other characters? I don=E2=80=99t know. = But I think it make sense for kinsoku (again, asian text, all LRT). = IMHO, maybe for a generic definition we can define BOL as left edge for = LTR character and right edge for RTL character. I think that will look = good for most text. >=20 > We must use BOL and EOL in their logical-order meanings, otherwise the > result will be utter confusion. In the above example, the EOL > character in the first line is =E6=98=AF, and it is not at the left = edge of > the line. It is at the logical-order end of the line, i.e. the > character after it in the buffer position order is the newline. But > if we had RTL characters instead of the CJK text above, the character > at EOL would indeed have been displayed at the left edge of the line. >=20 I see. However, I suggest to define EOL and BOL (in kinsoku) in terms of = visual edges, instead of the logical order. Because we are using this = information (NOT_AT_BOL, etc) for visual layout. When we are at a window = edge and ask if this character can appear at this edge, we are = interested in the visual aspect rather than the logical order, if you = get what I mean.=20 BTW, what does it->bidi_p mean exactly? Does it mean = bidi-display-reordering is t, or current paragraph is =E2=80=98right-to-le= ft, or the char at point is RTL, or something else? (I think I used it = wrong in the patch) Can I know whether I=E2=80=99m at the left edge or = the right edge? Thanks for patiently educating me on this, I=E2=80=99m making slow = progress :-) Yuan= From MAILER-DAEMON Fri Jun 19 13:30:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmKqw-0007Dk-P8 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:30:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKqs-0007Bz-E3 for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:30:54 -0400 Received: from mout.gmx.net ([212.227.15.19]:44075) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKqq-0008LX-De for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:30:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592587849; bh=YCL6mzxqEh0u+lVgmlRL6zj/7dzXPHOw3qrwNSdLGpw=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=iv5V0wiort/1bR1bgX4yZfJVZ/qpQF37P39+vRbGWph+yO8XnEy3plgfmC5lfXCB0 VpmhHWnRlSyeQ1IGsfXuHP4csAIFnojb5zMJbXtYk57CGUSgZVn6+uji9scIEQ+M2H hORqWxCkFy+ZNKLMh5pUyT8ZQ4l2Cg2t0xeRLqss= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MbRfv-1jB5M00naD-00bw7e; Fri, 19 Jun 2020 19:30:49 +0200 From: Michael Albinus To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> <87y2ojyppp.fsf@gmx.de> Date: Fri, 19 Jun 2020 19:30:48 +0200 In-Reply-To: (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Fri, 19 Jun 2020 17:45:22 +0100") Message-ID: <87tuz7yncn.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:V+rHeBP/wtQjbYT4hw7CZNSWoh1U5aXuzyy9F3NkdmXqvMh0Hr2 l03zv7zma8OEAyEDk2WX3tpBt1rIOYzHMNqZv28hur2oVVkvs7TItbXEqB3olhWjPS6yzF9 nMWP7JKjKFuZQA1Afj56lLcqcCg/szCO8D6OqQqm2bhw2e+qo2FIGNCFu/SbAdY4/DQscZB UA2uaEtLtZa9zQRXYRHBA== X-UI-Out-Filterresults: notjunk:1;V03:K0:wUga30eMUZc=:vCWrTLdHQ+OBnsTieDWX8y 5KDTxsIgIIWMY+apdvDdqLCJd4RYjK3/x6Hvb9nyewxehwB6hFVGsoCMj8y0d4x9GS/uXqgm7 oOfxif7zu8MHd2ZAMkJ3KqoAXWtX/hq9NIP7QDeX8R+7+EBxwKdEuS3nzUNTSj6UGIr1EXNPt aSmEmry3H+2lwSfvfYOdGkQ4FvsmIQbNxLqDT4MhjKkZDrpOELJjfbD01XZ8+ad9BN0Uw1xVx IgTor7MRx+mvWiGfuLxX6fMt6uoom8EoLoVahsWieHdA1mF/Nb+R1PBSWkUgubxf57TG28TX2 6Doolo0LFxoUzTYPeobLcX2odRzS7tGL6omR8wGidt5rcGMTAWA5NJaeDmNB0mRQTLlxyNjOQ BWl2n/7IrVSzefjNmLbZXz0O/gltO2q7V2s1N51pCemUSzFGpuEUebWpMuEQzWlrLNTCCH1PT U2LI8h7XSu9+XPM9HuN1KCk13MkmG7icUCUWMSkPr0FMtzB3+y2xvinzjHt1JqwWWLalfx5NQ 1bG5orrBciBm3GgS0ViLofzqwE9I0exgn8TZ/I+spI0Kj3SC1ZeG/Z7rPBLrUMTz5zZWldfxD MJ3ftTIMSaRfIGZ1CXkuDZmFapg2kV+xid9kgHufdbbeDtExy45yVduj5R+CgRqdtnmFaXCAb Mw6Cr65BWekLg0ncUikodF1GfOWqkX1wat5KBYL3MEy2q5SHNL5BKxTmPf4azCGhYuOUbizFX YmW1K6zYkwXlhxAT4z49OIFcSLDvx1PuGXUGP5FWWdhjcGZwRn7FqqiBS6Ug3y+N/Tkzwrq3X Oj8AxCTUPYS9NDVxjrnRJ2ebxoHFOwNFaZxhSHrY2w0vPXkGzSwCkeCFm5YM6ds1oWHVVemC1 8lHFLqEM4mOizNJffRcurH4RNVrt5OJaPkIhp7GMLmYlY82D7Arc6FvnrSi22Esa0xlpbcgmv dvBG9o4k/9gIaO3sA+7eOl/DM1QMj6CMHOb3Egrd/scfkAauiosxtHneTZnya1qMYBnuScqp/ s68mH6HSomGQY5oTcMQKOXxFLUbxtuaPSaroscNCFUq1QvQBWQpYs5QG/MsKS85UJN+optW1X e/hc8D/oq8/JCLX13RkdCUcilJYSHWWqBP1NWWolWH5+gu36XMdip9Ziyu53kkLcoxlOdkZxp sLVNf3DQpccJt718BlFQXY1r48GDTxQix3cFj+H0NvWS9f6J86cGP+6zQoZgcQWSfUEVgdx7C rSqoRnagDMdE3L7Ex Received-SPF: pass client-ip=212.227.15.19; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 12:39:48 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:30:54 -0000 Jo=C3=A3o T=C3=A1vora writes: Hi Jo=C3=A3o, > I practice, what kind of remotely adverse impact do you > expect from installing 2.4.4? Is it a very large download? Does > the compilation take very long? Something else? I don't expect any adverse impact. It's just the "principle of least surprise". Personally, I dislike software which installs something else w/o any need. But you're right, likely nobody will complain in practice. So pls ignore my mumbling :-) Best regards, Michael. From MAILER-DAEMON Fri Jun 19 13:36:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmKw8-0007qv-Oo for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:36:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKw6-0007oV-LR for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:36:18 -0400 Received: from mail-io1-xd35.google.com ([2607:f8b0:4864:20::d35]:35927) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmKw4-0000nm-Bj for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:36:18 -0400 Received: by mail-io1-xd35.google.com with SMTP id r77so12178133ior.3 for ; Fri, 19 Jun 2020 10:36:16 -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 :cc:content-transfer-encoding; bh=tA98Au86HrHNo12AeSS6TYi3oxPOexR9hRqImeqfpBU=; b=hI1fVsbEFVBi5Oqu7LDss5apcD76szf/PzmZnURGcqi6gvOBm3uKuqgA01Ar32kqA3 7zYTTzeJN04i+8UiOVMSUST/U7j1JYdZOrzHhVuIwV4GaGFpo/FC89lTt0rqxf6IIx0I LpEU0HayCqV3KLY78yAGFVIACAefxju3yV/yMw9Kpjmg0WOaQPjSVhfXiNmreSTub3Nb dgxUFPzmsyMMSgMZsT4hGhABhxoT1BSqBem10MvHVtONYRsS9o6ljm1fKwmiuefviia0 vH5uQr5qGMpobzprRGA+vYvka2viPDFOG2eSoKocODRgOdu8YTYyJGfgpxwnagoqNFc/ e9BA== 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:cc:content-transfer-encoding; bh=tA98Au86HrHNo12AeSS6TYi3oxPOexR9hRqImeqfpBU=; b=bR5HizKBHISWxo/DkgN3ybWRH9oue9FS3O57jnVYXF1DdAmA5bLLCAelWetDMHlT0g s1fkW6rT7qNiS35GwdE4WJqamOOTWPg0W9HezlMie1apBXecmsOyoWK8Agh5clmGOMF9 q4kArCQsAVBKChsAYfFvEcwW4O8aS8gjo+W0oOnNYjy+eWoOjNXmRVNuEATRePbjtICu 6OTs+tDlKppVIni+GY6cABd3psQxlA8AMiSEna9FSEc3gS1ORTyS238oo7eCyaL7cr3v FZ+k/u9LgBr1n7zsgTatoQ29tNc3wuqXxtka3VgP/woGurTLKoylEvsZAuxqEPMrMa57 UnbQ== X-Gm-Message-State: AOAM533hJmattMlpi0qnq6YsU4wAsZ3lyOdnN1zLsEB/znCZgwq+4wHV YPLAK96y74AO+Id9eqvYIIfBbrxv+gvHLYyb4dE= X-Google-Smtp-Source: ABdhPJz86o6KXo0P46tYJJT8tO5eQILlhcztXKb39GWENgAekiBQDgemWJ+DVeXSEtzuWxcdmGFFzyjyjyCuCZKftYk= X-Received: by 2002:a05:6638:35d:: with SMTP id x29mr4755484jap.71.1592588175252; Fri, 19 Jun 2020 10:36:15 -0700 (PDT) MIME-Version: 1.0 References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> <87y2ojyppp.fsf@gmx.de> <87tuz7yncn.fsf@gmx.de> In-Reply-To: <87tuz7yncn.fsf@gmx.de> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Fri, 19 Jun 2020 18:36:02 +0100 Message-ID: Subject: Re: Eglot and Tramp To: Michael Albinus Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::d35; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd35.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:36:18 -0000 On Fri, Jun 19, 2020 at 6:30 PM Michael Albinus wr= ote: > > Jo=C3=A3o T=C3=A1vora writes: > > Hi Jo=C3=A3o, > > > I practice, what kind of remotely adverse impact do you > > expect from installing 2.4.4? Is it a very large download? Does > > the compilation take very long? Something else? > > I don't expect any adverse impact. It's just the "principle of least > surprise". Personally, I dislike software which installs something else > w/o any need. Actually, I agree. I personally use the latest Emacs 28 to avoid these kinds of package.el woes (and to keep developing on the packages themselves). > But you're right, likely nobody will complain in practice. So pls ignore > my mumbling :-) You're at least a "data point" in my decision. I want that users at least have the option of running Eglot remotely over Tramp on Emacs 27.1. There are options for that. 1. The package-requires way. Seems to be "the future"; 2. You bring that bugfix to Emacs 27; 3. I dont' do anything, wait for bug reports and tell people to install a n= ewer Tramp; 4. I put in an automated check in eglot.el that does the same as 3. Jo=C3=A3o From MAILER-DAEMON Fri Jun 19 13:46:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmL6E-0001O2-Dj for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:46:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmL6B-0001MW-Py for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:46:44 -0400 Received: from mail2.protonmail.ch ([185.70.40.22]:23217) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmL69-0002Va-2J; Fri, 19 Jun 2020 13:46:43 -0400 Date: Fri, 19 Jun 2020 17:46:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592588798; bh=ZnSOXRSodgj0hDS/NZYDBUVLxtbAJIgoXlSPF+FWd7U=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=lu5EqzyV5juB+M9paK+UqxppTcqMylj5PjSkWWXjKJKnVrmqcLIdVZbtonmrgc2HO VQYsL8Qr4OjK2nQfBEIuBaQ8oIK/96hbQDXU4ajV5/l4SduB85I4zuxU2tNsUeH371 wnD0em/8Di69aC1HUUkF2BRKAk59Y4Jyr3Wd9ZTBtRz/GFU5BY6y9cyO0vBpyA4UuW 4+7jZMDbfkMpnJbXMlhOWNBho8QqVSq8UnQwCif5rOeDpn/xZmh2T07jap2Vl0dYNf phraZYCKBDCi5PuKb05RJ9I82dEWnJTQ40jwXPodxe4FLI9WTVrMUayqR1XF2B4Xgp +pYRzKNzs8bXg== To: Eli Zaretskii From: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <877dw3ne2z.fsf@thornhill.no> In-Reply-To: <83d05vx9or.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.22; envelope-from=theothornhill@pm.me; helo=mail2.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 13:46:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:46:45 -0000 >> >> Or am I misunderstanding you? > > Maybe. I don't think I understand what you are suggesting in enough > detail to tell. For a project of any kind (vc, major-mode-based, or any concept you can think of) to decide what buffers are useful we need some set of information about the project. If as you say, a text-mode based project only should show buffers of say, org-mode, markdown etc, and exclude buffers generated by org-babel or something, we need to place that knowledge somewhere. This knowledge is in part stored in 'project-ignores', where we can ignore patterns such as "assets" "node_modules" etc. without it needing to be put in a .gitignore [1]. However, then we lose the optimized search functionalities offered by the "(head vc)" implementation in project.el. If for instance the project-switch-to-buffer should have to know everything about every imaginable combination of interesting derivates of a project, then I believe that would be a quite a bit larger function (or at least a huge curated map of sorts). What I am thinking, surely without knowing all the intricacies here, is that maybe the "switch-to-buffer" and "kill-buffers" also should be defgenerics? Then the implementation of what to show can be put off for later, and the "(head vc)" version can be decided now? Otherwise, I guess the user has to specify a set of patterns, or at least decide on major-modes to include, and that would seem like a hassle to me. I may be overthinking this, but it would be nice if "switch-to-buffer" only would be a "brainless" buffer-picker with only useful choices. Theo [1]: If we choose to implement our own notion of a project. From MAILER-DAEMON Fri Jun 19 13:47:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmL6b-0001ri-LP for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:47:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40182) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmL6a-0001qJ-BS for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:47:08 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:40614) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmL6Y-0002XZ-HU for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:47:08 -0400 Received: by mail-wr1-x42f.google.com with SMTP id h5so10520427wrc.7 for ; Fri, 19 Jun 2020 10:47:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=dWd8uC3eqvACd8UJauW4OqM/hvqDobnQ1aR2XLJVrHk=; b=heP5tpsyx2EGVQ0EPJzv0YgxeDBoMYHu5oDJ5lm04aWEtPQj6q1muPJuCdoFBgIgfL qf1M8piIue2Z9XxoEbpQAd5nVe4nZsROKJJUtYCCPgzjDJ6Xh9EzrMGJEO3AD+7p65On tSKmKalXmJGsIwiDF13R8kXKnyH8D9wxlHDt2KLn2cjKCUhRp5RctuJIlwO+C589VZj6 B8fCbIkc3Jzikf8F8Mgv9WOkYDfMOBy6U9Huzi09Q+HGOsP5E8GGYPPpUJCrZ7bMqlMi TwZl2jPcwRPebJ9ebo4IaS+NRxSQoqVHkjFwaYayv9+b94cefq4d8EcKaTVwkJM3Mu5e oGZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=dWd8uC3eqvACd8UJauW4OqM/hvqDobnQ1aR2XLJVrHk=; b=tvWLpel/IebCB5/fxHOEoVsU1dcbfX0/LBejRmmkerVbrkmKRKtg+7d5SPembrcI8Y RX+Iep/JBRejxmn6F35BvB2IzZBFTT5Ohyg1s7ujHQRZ+lsKFm2Mb89plnWBtoCezpFu 2XXVbqNj2g2ON2rmKWUN8AGi+tqpl9SXJBtQJFAq2324laqz8Q+VZhRYI+JglJRo+sm0 a2/I3PIy75+Hnh6xfc3xR8G5EHflHFrgpVoN9ULbcQsEsH7zPGdaOdGg5CEsVLcEKIuQ nmQSNxcdkGjtZkHKFwn2UyTjpEGPCd69lXw1ZYcn31RwmdZzoKhqxPFoHzYplAIjUAf/ huRg== X-Gm-Message-State: AOAM530ykHHwy9dnM3IYvBUxFF7hPMcOstj9+s7qPUSBwgW1P2P0YGnE lLUPjoytCoaIfCKE6JNZbtVfDYoQ X-Google-Smtp-Source: ABdhPJxHpCQbC7+1pe1LB0TjD3c6rpm4vNnryyem9shG2RPM0VpzcqCc65Lfs2e1nwsPkDRP+7kzyA== X-Received: by 2002:adf:e545:: with SMTP id z5mr5055901wrm.89.1592588825118; Fri, 19 Jun 2020 10:47:05 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id q128sm7626976wma.38.2020.06.19.10.47.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 10:47:04 -0700 (PDT) Sender: DG Subject: Re: Eglot and Tramp To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= , Michael Albinus Cc: felipelema@mortemale.org, Tobias Rittweiler , emacs-devel References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> <87y2ojyppp.fsf@gmx.de> <87tuz7yncn.fsf@gmx.de> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 20:47:02 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:47:08 -0000 On 19.06.2020 20:36, João Távora wrote: > 4. I put in an automated check in eglot.el that does the same as 3. A runtime check sounds best to me, personally. From MAILER-DAEMON Fri Jun 19 13:47:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmL78-0002YI-NE for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:47:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmL76-0002WE-Gu for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:47:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52306) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmL76-0002Zd-48; Fri, 19 Jun 2020 13:47:40 -0400 Received: from [176.228.60.248] (port=3291 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmL75-0004ly-8o; Fri, 19 Jun 2020 13:47:39 -0400 Date: Fri, 19 Jun 2020 20:47:27 +0300 Message-Id: <83bllfx80g.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu Cc: larsi@gnus.org, emacs-devel@gnu.org In-Reply-To: (message from Yuan Fu on Fri, 19 Jun 2020 13:22:18 -0400) Subject: Re: Line wrap reconsidered References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> <83sgerxmbs.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:47:41 -0000 > From: Yuan Fu > Date: Fri, 19 Jun 2020 13:22:18 -0400 > Cc: Lars Ingebrigtsen , > emacs-devel@gnu.org > > > What do you mean by "in the RTL context"? > > > > Remember: bidi reordering can take place in two different situations: > > then the paragraph direction is left-to-right, and when it's > > right-to-left. In the former situation, the lines begin on the left, > > in the latter they begin on the right. But LTR text, such as CJK > > characters, will always be rendered left-to-right, no matter what is > > the paragraph direction. > > > > So which "RTL context" did you mean here? > > Oooh so there are four cases: LRT text in LTR paragraph, LRT text in RTL paragraph, RTL text in RTL paragraph, and RTL text in LTR paragraph. And the order in which the iterator draws glyphs depends on the paragraph order (although it doesn’t know it). Am I right? You can say that there are 4 cases, yes. But from the iterator POV, there are only 2: either the text of the same direction as the paragraph, or of the opposite direction. > > ×בגד הוזחטיכך למנן 我今天看æ¥äº†æœ¬ä¹¦ï¼Œæ„Ÿè§‰æŒºæœ‰æ„æ€ï¼Œå字是 > > 《钢é“是怎样炼æˆçš„》。 > > > > (I assume you are reading your email in Emacs; if not, copy/paste this > > text into an Emacs buffer whose bidi-paragraph-direction is nil, and > > look at the resulting display.) > > > > Does the above look correct, from the Kinsoku POV? This is how LTR > > CJK text will be displayed in a paragraph with right-to-left base > > direction. Do you still think something needs to be flipped here? > > Kinsoku looks right, yes. However the period (“。â€) seems to be interpreted as RTL text, not sure why. That's expected, since the period has a "weak directionality", so at the end of the paragraph it takes the paragraph direction. > > We must use BOL and EOL in their logical-order meanings, otherwise the > > result will be utter confusion. In the above example, the EOL > > character in the first line is 是, and it is not at the left edge of > > the line. It is at the logical-order end of the line, i.e. the > > character after it in the buffer position order is the newline. But > > if we had RTL characters instead of the CJK text above, the character > > at EOL would indeed have been displayed at the left edge of the line. > > > > I see. However, I suggest to define EOL and BOL (in kinsoku) in terms of visual edges, instead of the logical order. Because we are using this information (NOT_AT_BOL, etc) for visual layout. When we are at a window edge and ask if this character can appear at this edge, we are interested in the visual aspect rather than the logical order, if you get what I mean. If that works, then fine. > BTW, what does it->bidi_p mean exactly? Does it mean bidi-display-reordering is t, or current paragraph is ‘right-to-left, or the char at point is RTL, or something else? It means bidi reordering is in effect. For displaying buffer text, it is determined by bidi-display-reordering. > Can I know whether I’m at the left edge or the right edge? You can, but why do you need to? From MAILER-DAEMON Fri Jun 19 13:48:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmL7Z-0003DR-CK for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 13:48:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37880) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmKwA-0007tb-5q for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:36:22 -0400 Received: from mail-qk1-x733.google.com ([2607:f8b0:4864:20::733]:43957) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmKw3-0000ng-5A for emacs-devel@gnu.org; Fri, 19 Jun 2020 13:36:21 -0400 Received: by mail-qk1-x733.google.com with SMTP id j68so6345638qkb.10 for ; Fri, 19 Jun 2020 10:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=oeaOZVVu6JpMj4ffA4sn4n6u05A6mGRVtL42wDzkHHY=; b=oJaCgoVIdL3m+LEFL946ARYxz4JUTo9ZwIFlWjJgoMSxf2Sqtv4oVKOQvVIx8jlcdH lazQ8zah32W0PqtQnWcQbsnwqUzDX1xBCiDZka0VmQquzPcJ8X8xv28oN1Ww5HjVEZYz caCs/1M2mqsmT8rMx/1WLzS5eiujiZ7DY5aoWdcAenIvMdnPsOa8KK8Gk1DEGqKJqAk/ 5sy3kWCvuSyxlzNmyGIviKGY98A/VlYHzZqdRJmBSGIIg4TJ1Rv4zL4KWSOWHdpqNQhG LA8G/0fum1l9D8crAIqJWzcO4LgVSZ5z2psoE2YvHkbbpo0WZ3BqLY2dIggHXSZBbZ3P 8qKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=oeaOZVVu6JpMj4ffA4sn4n6u05A6mGRVtL42wDzkHHY=; b=CScmHoYiTeb2ygQHtHEpwzVd7nU67ZoehmFMkvd6JhyAwlWHSyWJvHFgcRWN0W2QpR CWZX/fK7ElNlNTmpn8LY5TvvznORo9BF37m1hXlnAcnwhTUr4ONrvc/N/GvjNvqaMl2N dotil9q6VPSTnH7wfoWoLkjIvPgrXpLmTlygKt/1fh1STz9IkDN2YgRGfpbANzcqDuyB O/ZYNwVYVEb39T239Tp/fqqADepMiIYS1ucGVOvpjuA8nDqkxdpMs3WgZnFkSWQfqRT6 FvEVFqcSACw5AH3vtsmMOX8HyWFbepaDOodex2PDy9Y88ctIQY35QlpMLsVuAFgf6UtL NauA== X-Gm-Message-State: AOAM53018EP8+jikqKa+RN+IRqzgUOQISVG2qmh4Mtpwrdqn4RRE/YUR vrsDVxCU0m94UPUrj7jwT+xR8Q18akjp5A== X-Google-Smtp-Source: ABdhPJwTA7ppPVT95DIcmJtZkB0NlvFmLmWIA1dg9I+D//8KIsqpHwScNG/9UP3tOoZtLA0quXTSfA== X-Received: by 2002:a37:9d0b:: with SMTP id g11mr4298382qke.428.1592588173455; Fri, 19 Jun 2020 10:36:13 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id l188sm6262693qke.127.2020.06.19.10.36.10 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Jun 2020 10:36:12 -0700 (PDT) From: Yuan Fu Content-Type: multipart/mixed; boundary="Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Prettifying Info node (variable pitch font) Message-Id: Date: Fri, 19 Jun 2020 13:36:10 -0400 To: emacs-devel X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::733; envelope-from=casouri@gmail.com; helo=mail-qk1-x733.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Fri, 19 Jun 2020 13:48:06 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 17:36:22 -0000 --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 (I remember there was a discussion on adding some colors to the Info = node but couldn=E2=80=99t find it, does anyone know the title for that = thread?) Here is my take on prettifying Info node. Apart from looks prettier, I = think it makes Info node more legible. 1. I added variable pitch font to Info. 2. My prettification also takes advantage of word wrapping, so the Info = node looks good in any buffer width. 3. Indent and everything work right. To try it out, apply the patch and type M-: (Info-prettify-buffer) in an = Info buffer. I haven=E2=80=99t added nobs for customization and the code = could use some more comments. In the screenshots you can see the = underling bleeds into the indentation, I used line-prefix and = wrap-prefix for indentation, does anyone know how to fix this? Yuan --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Disposition: inline; filename="Screen Shot 2020-06-19 at 12.26.39 PM.png" Content-Type: image/png; name="Screen Shot 2020-06-19 at 12.26.39 PM.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAA8AAAAQyCAYAAABnK5YHAAAAAXNSR0IArs4c6QAAAJZlWElmTU0A KgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAA AAAAAACQAAAAAQAAAJAAAAABAASShgAHAAAAEgAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAA8Cg AwAEAAAAAQAABDIAAAAAQVNDSUkAAABTY3JlZW5zaG90jdXh6gAAAAlwSFlzAAAWJQAAFiUBSVIk 8AAAAqlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6 bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJk ZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDov L25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9u cy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVu c2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE1 NDQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ MTcyNjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0 NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlm ZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllS ZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1w bWV0YT4Ks7zyggAAQABJREFUeAHsvduPbdl13rfOvW9simTz1i3RJE2KIiNFUhgbkgXZsRBZQeQb IgFKhCB2gBjJg+gEQfIP5MUBbPglif0SwzASIX5I5DhRlMQPtgILtGiZlk0pkkjqQomKSOrCJpt9 P7fM31r1q/pqnLnW3rtOVZ/T7DnIvcftG98Yc+xd1TVP1akzTUPGBsYGxgbGBsYGxgbGBsYGxgbG BsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYG xgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbG BsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYG xgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgbGBsYGxgZerxu4dM6D v9H4znl9g+7reANvtI+N8z7v1/FbYxztHDdw3u+7NxrfOb4Ug+rrfAPn/bHxdb6uN9bxrr6xjvu6 O21+8N5t0+OjFfMZI1dxFY8vn7nqG0f3+BK/Kw9HD591vby9s16cWsydZlxuD+JIzRunJ5L5JXLy DOYQvi0uWC+Cz/M4tTPkTmtOP7V4tbnKl3lzYtWJSZu8NcbVmZNHnRhjqTOftr0Si52YmtvyD+UT v9bPfO25C78rL5/84tVreeJitrQ5edS13xqfePVZ+OSWI/VF8VXe3nmdw5x+annU5CreHJrPQeg1 EUte+7z4ej3tYb9D5uvx1VidveazP7mK35U/b761/s6xlmcO/lvl/sSp1+aseftUvlpffeu2+MDs K+fFJ496a76a680qj7rWGEf7WvR4iIlNO/nMqzNXOcXUuH7mte+HT97Uh/Il3pleS75e/5yjl2c+ MIj5qpfskteW19panzhzxnpavl5uxB7gBvIFfoBjfN22Xnvj50XNw/uBqd/Ta3zG8/XkEzp9ELh7 Yl3NGZfPeuMVr7+WN/6g+Zyz6rPMZ03lSr9iqr+FNZc1aZvvaXFqMemnTb761mSuYtJPO2uSR1us uhcn5vsOu2KJKebUvTixQ/nkUcuPRi6Kzz5Ll3uf1/LG63zG72VaImt544fy7epzXnz2cc413zi6 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 zmBerLWJz5x48+KJp13z+qnlNZYcxtA1nnU9O+fQrnz6me9xZW9ttRz4SHLpZw47a7XV1CD4yFn5 luqTXmfhyxrnS+18xno+OfNoxB2rl+jybMxzV7/yias95Kz16TtP1u7DJze6x2deXnxte4qxX/oV Y04O/GqLqXzGezo5Mp/91/g8d3KkvQ+fHGC1k0NbLSc+UmeTwxy4rNVWg0PwkbPyLdUnvc7ClzXO l9r5jPV8cubRiDtRL9Hl2Zjnrn7lE1d7yFnr03eerN3iMye3eosTTPJbg17jEyMvvhw9O/Haqa1d 46tY/V3ziUPbI2PGjfX4ciZx1pnLOvogGVsiy7M1GcN2PrX55DOXHGlbk3zGrD0LX69mi8+eaOdT E1vjI6eIR6dkXB5nAadtztqsM4bOuBdDOchr9/jIV0k+a+QAq23Oeuq2RF4wcvRsOdb4rF3js15u /TU+86ntkTHsPHOPL2fKWvnU5uTrcYG5Hz57JUfazoAWa0w/5zOWHGmbrzVyguX9iViHVmrsft/L 9rOHfLUffp3ZGmcCo632vFmP/boUD/y6HL4Nzfy+MKl50f2TCl9kz4hvjljNy0MOG/FFTz/j2DVH DEk+/ZxvBh09ZZ86l7VrcXnW8ofG4csabM9Yz2Tv1ImxrvKBJ5fY5Eg7McmXcWfMmBy9WOawc759 ctbAnfzYSOUzvpYD3ztDclOr7MOXWOc5Tz44/XiS355oZ6y5tRnW+IhTcyjf2gzJV2ezZi1OHlnL HxqvXNR7zrU9UaMkxrqcQZtcYq2vOjHJl3FnzJg8vVjmsJ3JODp7ZVy713Otxji1tZfzrfFVPBz7 8IFD5K/2nDx6Sj5CtWdyZB22tbVmK1f5PHutyXjN4StrfM4GDq4eH7Eqlc985TOu3qpb60Ntbzbi a3zklMQ4n3xgjGn35pCrYqylBnvrC1g5wNkfW588NtKboebsuVScPO/DJ9darxO2e+fbmq3Hl/OQ Tz/t2lO/9lurkRtda7ZylS/3Sg4hlnFimcNX1vjEg1vjI16l8pmvfMbVW3VrfajtzUZ8jY+ckhjn kw+MMe3eHHJVjLXUYF/Uxxrc9ujN7szinBNtDhtxZuzMYfN1WD2DOLnVxv3aTR+tiO1pMPZXW/e6 0Rzs9Shbc/feCMbqC6WffGmzGzDG0iZmPTgk80vk3trEpC0+9a482MSknTza5BHPs3gnzzVffc+c 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 H3blM4Z2BmPpm5cTH8EHlz2Ip8hjbcVbKxe11siTOXkSJ54c++J1VfCzRjtrxBpTG3/otId46AZr AzkbOhdZfWcHkzW+4YkZF5t6jc+atXzlqL4z17n0zVPX67FP/6yrfPAakyt7OYc4MJXPuoyDV8zj y5cfKFlnHqzxjGXcvJockn7WGjemj1bMoRVx+ObNZUzcGp+14noc8qH9D4Z4tXXy6a/pxMmhtgYM Qrzm5kR5knMNexF89ELWei7Z08/WOI9Z/Lpfc1t6q/dWbo1zq2YttxW3j68PWrvW9eLG4BFftT2M 61ubcWK554olr2QdMfnMG9uHL/tmvRz0qrb91UeQe3AZr3bOLI9arGcmXnNiUvc4zSeXsS3O5AJf sclnTi3/lgaLyJP95FEvyO3nLexWbo11q2YttxW3j+fVR1uXOzCe//2zRnzVNb+LL+uttSbnFGdO LDpj4tCK+TyHOHNqarARMOKqJp81+GuyD19i5LGnfmp7i1GLOSuf9VXLl5/PjFVs9ZkNSTw2cedW g9slW9it3BrvVs1abituH8/Ye9+BMY8tX8Yybl4tTh8sMYSY8YojrjCXr2fFgTEm3hha/uQTj0bQ 8s+Bo1itFZ/xHlf2gs86uVPv4pKfGrDsAqk9dvEsVQ/Rcz3AQzTa8XJdam82c2ox+mge+UElJrUv MNgqcvXiNVb95M03YK/PGnaNM+OVz17G9bMG27OpzVunv6adOfO9mPnax7h6qxZMzV8E39Z7pfZ3 bnXNn3U+edD5SfGsfMwnZ3Kk7RlSW5P1mcfexZH4s/BZs6vPobicq2fL18tl7LxwW+fr9ejFcq5D +bK2x33efNmv2r3+ienlzzKfPOrkSDt7a1ujn9pccqSd2LSt68WyXruH79X2YnJk7iLsXTPa87XC 7XPu3iy9GLOflc9zo5P7oviyR/au/Wuu5u9nvt4M+/CtzXBefJ5ZvpxJ25zY1JnD5r/Z+XWEHLUm /9ueubTlQ29JzvCw4Hrnzlhv5l7M82StsdS9WmPoFLiQjO/iXyrWP+apz9dd/L46Z+3N1+Nx/h5e vjyXM/a4iPVq7EG+cq3lwFZJbM09EJ8PwIdNWDBzoZFcGjHjmUuMcXDEeWQNecV43YNxcMlN3Icc Wzp5PRP1cqrhsKcx/KwRY39zaGrkNY9GzOFbY468Njmk8i3R08+1hmzOLdqYmk8OWyIvGOdOvHn5 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 EWvkM565GXgRTx7mvLk9bB4iYy7FvD7L164z5aIyJ2/mc4lgOad5fOz6oOYuP/r8rd/6rR9873vf +33Xr1+/yhtpyNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDDvgG+cccd5v3vf//3ffjDH/7mdre51mb2 HrSm864ExrsUNjm/6zvfl4KvmfdIcoGXD+2j8kFCDrE3dnLhn4tAet7i8PK6qDwMufSpwbfWGn3w iLjFO8EbR9cH2Nqr1uOzi8sf+tCHrj/11FPPtL/z+0z8XXPxu3X7y/LT1WvTpWsnj/ZHMbvr9ka0 4zW+S5cb/5WjR7NbYG+GXcD2a3vmv/R/rfFeaz3mx6Vr0+Vz7LFrhpEfGxgbGBsYGxgbGBsYGxgb GBsYGzh8A9xh2o9BP/P2t7/9ae42jYH7kZK2MbR3Me9SmfOiUXPesZKzF5MfLYc4+1Tf+Lnri/g7 wA7P4bjd58K87a8dxFpqcpHY5FyY9cb00XJoy5VxcsmJP0u7/F5tPy7wDe1PTp486Lu/XHLbb+W7 +9WvTLe+8DvTneeea5O03+78pienq+9893TlbW+bfzNe+/VutjpcH11A77z45enm85+f7r7y1bnn 5Rtvm64+8cx05ZG3tsO3H9dufc8q7acm2qt2d/qDF39/+u0XPj89d/Nr05VLV6e33Xjr9MwTT09v vvaW6Vb735n+cOCsQ426sYGxgbGBsYGxgbGBsYGxgbGBsYG9NsAd5saNG09yp2n/io1/5ZU7kfch ND5/zxOddzQx3sXMEa+57n2q4axt5imx/lSwOfJkvBfL/Jnt874A52E5YF105tcOlRgO5qJqHD85 fPHQijYcWa9tvbhL7Z854p8C4cfn/bXkcvX10a+iv/Pss9Or//gfTdP/8w+na7//e9Pll19eLqKP PDLdfOod0yt/5Lum6//mn5quvONd/N71PtdqtI3Z/n/7+S9Or/7m/zrd/eJPTtfvfKHx8yP9LXH5 ienla39ouvSOPzNdf9+faRfhp1ru1ipbL8F3fVnG57/2m9P/8tt/f/qpr/z09MXpy9NLd19q8SvT my89Nn3z1fdOP/zUD04/8Mz3T09ce3K6dWCPXt8RGxsYGxgbGBsYGxgbGBsYGxgbGBs4vw3wjar5 MnP5crvWXPGeQwO+3PdehOZy7AW3mcdCTqEeH53fZatc+tahjdnTmBj7qImLNVZ9a8+sz/sCzCAc FMkF4Ts8tstwocQUcuaJrWFcinj6gVWIp8hp3Dr9Gdt+0zMX31OxJDllc/ltb7Dbv/Pb0+3/6X+Y rn3y56Yb7QJ96Xr7keRHbjQo+TbWs1+eXv2pvz+9+iu/NE3//l+crnzow9N0a98LKhfTu9PNL396 uvWZvz7deP5npuuPX51/BHqaHl82defW9MidX5le+Z3PTK8+90+n6x/+L6YrT/7h1nu/HnS43bD/ /NlPTX/tc//t9M9u/8p09U2PTNenq9Mjl75hfuVeuHt7+rk7n51+8Uv/zfTPnv+F6S9/4D+e3vXI u+e6UzsZztjA2MDYwNjA2MDYwNjA2MDYwNjAA99A+/vA/rvFzML9Ju9jzue9J+9u3r/Eo7Wp00Yj 4rHtI8a8dzVriCPiUxMHl3c7YuciF0HKsL2B6eXBPLjaOBoxrm18Th49JR8hMWjtI+jxi2K8npv4 caz9O1rirO/rdvm986Uvtsvv/zjd+BefnB558snl8suPKrfc8Y8iX78+XX/0semx3/qN6c7f+Vvt Ivvp9uct/jRCnzqjt776a9Ptz/zV6bFXfnq68abH209atx/l59/gvs2jIe9eaRfiR6ZHnrg6Pf7q z0y3f/m/nm698DttC/v0uNT+pOLO9Itf/aXpv/rcX5/+6eXPTE88/uR04+7S4+7tdo72I9FX7lye Hm09bj1+efp7r/709Fd/7b+bvvLyH4y/F5wv1LDHBsYGxgbGBsYGxgbGBsYGxgYekg207wI7CXcb H8bUxBHAFvTuYuLIYaubeWyLIYbtQz619eC4GKcvb8bAnZt4yHMjbEQMi3hA7DwAtg9ySB50iSzP 4JixchH3Tymw96m3p2fGR4zPHHwHeAnveOa7vy++MN3++D+ervzLT05XH+e7sS02X3wb1awbB6x8 F7ilLrdfjnXtC+27xf/XT053+RHpox+fXu3U8ndf/cp087f/t+nqCz/bfrT5zSf8nB5edLugzo+7 l6crVy9NV1/+1HTrc/9zS/MdYI63LozwB+0i+xNf+N+nX7n7uenJ60/MXHdnzlbNBbvZl7jsN321 vRyXrl2afualT04/+YX/cwf7et+RGRsYGxgbGBsYGxgbGBsYGxgbGBu4uA3wd4G/9rWv1bsNPheE vCRgc2tBMpf2kr33bia/9XKgjVUe4sQQ6sWlnzGx5O9bHPi+iRqBg9VhiRurmr7W9XDkqRHjvMSw jatb6FiMWa9/DGiGfMTIz5j40xLiq3Lnd7843fm5T7Tfkty+0zp/17fdRo9OyP33+DI8X1ZboP0p TPte7XT5N351uvWrn5n9VXISjeT2859rN9R/ON14pPVo/vz7rfjOL/ztu8Bzn8Z53K/9wqqrV1+Z pi//9HTra7+xzAVXR5Yffb49ffaFX5/+0XM/O11vf1+ZvzPAuJfm+eFtxtGxsHHbXyeYXrz2yvQP vvqPpy+88MXxXeDObkdobGBsYGxgbGBsYGxgbGBsYGzgQW/gkfb1fRPvOWi+yle8TxH3XiQGjaC1 8a03hq+tBqdkLG3zanPJnzFt8WfWHvTMBEeFazzz1a9Dnsue71tHGA+G1s5ysClrC8955FJTr229 PppL36yxu8J3Ztvf4b37e787XX/296cr19qPC3Mz5DHfFtt3TJuFNwu3yTl/e/7nha637/7e/bXP tik22pC7fXO687Xfar/w6nfbTzO3v67daOaLKcZRv0tspP3pzhw/2vaV5ty49JXp9rO/3Fps9Zim V2+/Mv3Gi5+bnr36QnvXt+/uNo5L/NjzEX+z5nPM38QmTL7l2NCX7j47feb5T48L8PIqj+exgbGB sYGxgbGBsYGxgbGBsYGHaQNeBLx7MZs2Ob/UJy4Wu2LMi1ETV9b46IHU+xmx5BGXcW43Kc6VsYPt HOTg4qMCD5v1HIC4j8zR8+iqNod79cQUl+GBe5xirKu+XKkr31zbflRAjsTea99uf3P2hRenOy++ dPT3eU9azt81bZfEY6I51Tw0wfZboO98+cv3cpbI3faLqe7efLbdRduPS8/vmeU7sMtbdWHnIjrT t6eWbbj2mFMvT3de+t0juxCH++qdm9MftB6vtv8tv25rSXL/nWU2jni5/LYgOH64+qX2v999+fd3 9liIxvPYwNjA2MDYwNjA2MDYwNjA2MDYwGu1Ab6pF3cbvqDPu9/yZf3pmPejoy/+5y/9HdfbwXzT OApqk9OuPYDKp10vtnKTR/SdcYme0/NF/BZoRmNYB1c7Mr6HMZc+dkrm1vCJ0YYjbX11znEce/HF Fy/t9UuwYG6/GXn5gWHKkUbZbqT8b7Gbz3dgcclh0xXY7X1+QzNg/hJue1B7dAGFj0v2/M3d+aLd viM99yDRHthcXPf4LdBcmu/coQfSeNr/Zqr5uX1nmTBjHJ0DE+rL1LVvB49/CokFDRkbGBsYGxgb GBsYGxgbGBsYG3i4NsCd5ugCzJf0y5f4JyPyZf2aeInlolrrsma+JRwF5FMnLvtrW4umX68Ojoyn Te5M4uHOVNwpYqh9BuPg4rT1pdUnr7gwfeeXw7y14lLLJ5bccezq1atyZs29drsQXrrR/s3g6+3n 6tt3g2cK/h6wrGiY0G2a+VrJVDza3xm+3H5j9C7h39+9dLX9Zunp0VbXCp0SY779ouYr7Jw6arX0 uHRjunzjrYu90eha+zvDb77+5HSt/XorwEe08wV3bjgHjho3++SC3P6lp0uPTG+99padPTbaj9TY wNjA2MDYwNjA2MDYwNjA2MDYwMVuwFsENxEE38cc6DyBFaPdgc23G+P2wc9e+vL4HWB8cWCQ6i/R c3ze77K3u6GHXdMweB0EUw9GzIc5ufDNOa+6pWYRow8++1lvvuaIE7v86quv3m2/BMsZxN+jL3GJ fdvbpltvenK60/6u7jyhY7Zuy/dRadukqfkeeZkLZPuu6bVr0+Vveu+c2nq62/7e7+VHn5luXnqy 3X/bd4yhm0/eLt9H1HOw/VIqT3upjc476tW7j7d/C/gDbZDto1xv/7TRNz3y9PTonUda3fId37tt zjvHDdqVd+7VfnlXu2wTxm9/W3h6y/TE9P43va+12O6xdcaRGxsYGxgbGBsYGxgbGBsYGxgbGBu4 mA207wLXew9f2efD/HzLaDk1GEW7avLEskZMxuSputaaJ+4jY9jyGz9YO9jBhaUgL6AM5Y0InTZl +tiIfmKJe7jKZ435xGau8oL3AQ4RI9el69ev+6MCC6L3PP8McLsCvuvp6e5H/pXp1qvtAgz1MXu5 oHqZbN34/VK33/Xu6cqHP9IMf/S406T1uHS5XYC5YD7xR6dbr7Tf7AwPPa4wdntwoW6PS/NvrmqJ ZhO/ffvqdPex75iufMO3tMupf8Bybw8urtdajw8+8cHpX3/kw9OrN19tl1suuo2qvTMuY7eGi98u 1tC3y/adVnfj1tXpjz727dN7n3hfO9PGOe5tOyJjA2MDYwNjA2MDYwNjA2MDYwNjAxe8gfiXbfgq fv5K/kjbmRgXi54mhpBX0ibGXbLWVqz8yafNRYW8GGrlM45Gql6iZ3g+rwtwHYrBPVjaicPOnLZ1 LkINHtk1s/nkk5P6Gk+ffLtQemOd3f4TF9Qn3zxd+d4/Od1817umOy+/SOXymLu1p/nCevRatR+P vnvr5nTrscem6Xv/jenKW/jx5KNcv8P8Ml969Knp6jf9memVO+9pf2+4/cItbqbwX4G/fce29eDS umylXVLbb6d+dXp6uvKeH2q/nbr928TH75WVJq303Y+8a/qzb/+3pze/cqN957hdtNuNl8vunfaN Zfpcmnsul23+IjK/AfsD0zPTn3/3D07XL7ffgD1kbGBsYGxgbGBsYGxgbGBsYGxgbOCh2sDNmze9 FzFX++r+1GUTHwGD7YNYinlilY+YdzX5Kk6MOnHa6LwYZRxbH477ljzEoWS9YYjByQHyEGnXA5hT 1zm4hmVOWy2f8xhPHnO+gInJ+unoxwSydt1uF8PLH/zm6cq/+xeml9/81vZv9j7XXp5GN/9dYHR7 8OPJ7TW78/JL0yuPPj7d+XM/PF3/Y9/bLrP7fNd0+S7w1af+SOvzn00vv/zUdPvV5xsnvO3Bvz/M BfVKO9bl2y338vTi7W+cpvd/bLr29u9s9+vdPfgu8PUr16c//tT3TP/p0//R9OiLN6YXb744XWn8 fAeYPpfad5zvtlb8/d9XWo8P3X3P9J+/5z+ZvvnJD41fgrX+7hiZsYGxgbGBsYGxgbGBsYGxgbGB B7YB/lpn/BZo5mhf3LdfMrQINg9FO+P1rsgdShx1+GIyx3d2xWWcWPrYKd7V/BFW88kHPmfM+r3s +/0t0B7CQRiSB8M7MLnqiyHnctTEEGo4LA/rdx12LW+9M4kjnjLPsNdvgaaK7wLz93T/tY9Od9/0 punFn/yJ6dK/+Pn292lvL981bRB+U/LN9mPGN7/5Q9PVP/3np2vf8dGl367v/i6oucd09fp07ek/ Nd28/tT0/Gf/1nT52X8yPXb91WUr9Gjfrn355hPTnSf/5HT1/f/BdP0d30m0PTyuZH3NJfjxa49N P/L0n5/+0PV3Tf/95398+tkX/t/p1iPtfO0SPP8bw+0u/bZbj03/1pPfP/2F9/x70wee/OZ2+d19 we53HNGxgbGBsYGxgbGBsYGxgbGBsYGxgYvcAJff+C3QtvIyyUWBu4+a/NrlwXtZYuZ7UwvIR07x 7oUvzhx+9rU/MS8wtV68HPel7/cCTHMHyuFzKOIcph4ETK8m+ahBxGHLhQ0WUSeOmA/j+tYYx5+l XQYv8dDfqbkEt+8EX21/p/fK+9433frsZ6YXf+kXp9tf+uJceuXt75iufOhbphsf+sh0+Yknlr/3 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 xXLfUEIr5ZlJGLxlLlMy6W+s3BArrpCiBO/YscMntp577jlfgo6lFhiW2GpkF7KJMsOvFQ8njh+z g3s+svrGZluo1RaRVl5X5NWsPfDzNClHX8RSzcQLB4cpk780yvMU8UIChQQKCRQSKCTweZSA3rkM DsLSC4u8lEOPwicdn4FzJUd6mhaDDfKkLugGvbQM8AI/8CIv8YCl5aTphCfKn6ZFnmv61SjAFBoV CibLiQMPF0xGRaJypKd4pKdx0skbMPygFWn4wLmiEYDhUtyIBy1wI0waLvBnxsSV0Rz3i+Vm165X 7YmnnrSN226ylR2r7MVnXrJLA5d8WSODWpS61DHEwrKIQoDFYqKBWppnKmHKKS+rlE+SwPqKQGZp 0Dlv8TzrPHvB9h2QEixg+5L2CQfYJRpVBqhXixTGuXPmW5MGmL789Bo0GDiTh6WLFy9e0iE+L9qH OrDo/gfvs7aFs7TE8Ygsev06oOecW1TZw0dc2dx6FvLMLf0TlpQp2dmJyCgLWAk7O8/r0ymNUrqP 20VZyFEU77ztDjuy5LC99fqbNiir4je+8U0t51wmuqMauLf5oBmrYnf3FbesM5AX+3L8jKrOzTZn 9hzhNU/cLqDfIMeeX+rHhAJL0FFIgr+a0VprUx2wfk3WLlNhj3aj/ofOX7IL587aXCmGK1avsY61 HbZ+/Xr/jAx0OBwMxZdDlViCT//nYCoObCL/v/gX/8KVYBSk6TralwPIbtqwzh780hds9ZpVvpyZ Q83qG+utZU6jtS6sN53/q8mOWtv17Nv25u5dtmnBFfviXRtt4/rlNkt9tlnLZ6UyW++K+bbipnZb saFLivJxe3bXHvvPf/nn1qLltI994xt+P1WjxEW9kBkXh5yxBxiZXMuBW+4qwejPKL/s978RLp4z WNo5jZ26o1TW1ze45XxIq0wGBgZ19btiDx73NvXD8stk4Y9//GO3yN97771+H02VT2ixZHyEzkx/ 1mTVsOrapefwklnNtm3reuvTa6NpdNj3+NLXJnJMYM2ZM9vmzZ9rjU2NVluvVwhtkmdgq0jhCgkU EigkUEigkMDnVQJ6H8crK1iMOH76EiMcMPSlUEwCFvkr+UEzdD5oxRVp5Ataabnl9AI/xQla8BXh Svmi/PK0q+LVKMDBdEokhaUMB4PgBpxwVAZY5E3TwcGlMCrDSJe8AcePcMAjTtm4wIk4PrTwuSJd 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 UuI//KTL3jzYYlvu/aY99s1va1nwwqp4TCtAX6Tea9eudUtw1JU2PHDggC8rX7ZMh5ppSXi7LNec pOyHYDXrNOXWVlumg7CWLF1irZqAmz2r1fZrif6xY8e1D3upTyYEvbTMasK0gF+6J9jDy6eXduzY oQOkavyTSPDYfbnHlixb7p8ZWrOmwxXgp576pcvkW9/8pibUNqk/im8vOHqBqGbNWw07TrNTkxof aP/x+Svn1S5Y5/U4EHEU39nyZ6vBr6iYd/WZt/NSfu/99nftwUce1beos9UG2buZvpsVzX3APaB5 L9HJFGA+f4S12lcBgDYNXjPqxW8hgUIChQQKCRQSuDES0DtewwVfAkkBvGZ5yfLGwmf4QziuiAtU eqvF2420SA8YeLg0npZBOGg7Yh4PWsELaeABxwW9ieLkCxe4UVbAr+lXowBHpSEYTIafFpIySzjN l8YDL/XT9KAZ6RHHDxjlR4XxUxc4AQ/ctAzSAs/roo6isWOpo6T0phxmQImVisN+fvC7P7Dan9ba 6++/6lai9uWLrF97e08cPGUHPzqqQbxswsFBqQQNqmXFa65v8YFsCTwDAWwsfVf6pAAPqOJlBSMB OfaDtsyVxUafB5EtTpZfnaTaPaKB9HJ9j3WTKw8oKNc7cM5Ku/YvSjhWdZZAZ6cZD/pe1Vu33ua9 8JVdr9oeKcEdW1Zob3KP9VzutnkLF9mtd26z5lktsgT32MGPD9nShcvte9//nh++xDdlUequ5TjY 63//X/83O3TokKxmL9qHH35kD7E0Unsrj5w8Ym+8/ab1XNAnhnSQT+eZy7bvLR2wpTmFrTvW2Uot P12gpbyzWzLFrZKcGFgP62Ce7u6eGd2HiYX0fSm/jz/1uJ3uPmnb795iN2/fps/yzNeNojZLKs2e y1btV1+xoUPQGju696TtfvV1hTVZM6fdFUyUrFACkqzTCmJt/Fh7fnft2mX33nuvisz2oA9pcuOM vv+6/+RZO9OnTw1JCd2kSRb2/mIBpq3a2tq8H7D/lwO9rnfvOf2KfcO0c+pYTvzee+9Z76VBa+iv swfuecROLDpp77/1iu3+4IJ1LJ9tyxbN0sQG1r96KUCcWqxDsnqGNaE1YBfO99hb752x//bCKTtz Za7d+VtL3NLMkl4U9uk47jX4pS3woz9BD8s4y8mXti9WfdptlnjincZhVDWS6+w2PmW1QN8mbvIV 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 Vhe3TGi+fOYZjmuqJiafUn3CxAh5SCeUFRMmZOYo72yIkDoeRsxTPkImrCr99pLL1am/0LdPU4c8 pfqe+Okgs2OFCSUGE8TNmWX0movsWKFZbbVVvDLz7ITnmh/++CeeDDxeEz5cQEO5Pu+3FzXrrr2O Bqu6hX/U8OYBdYp//NOfW/dOUqeSVWZ0/Ptnne0y+sk9NdlXGcrN23PednuE7lIms8lCzkw0/esP fuQONHIhjyn/F1x0WbPWGms2n9xrN+sAbR0iYPs/dQX17/VjbvKlRdT7X/zcZz0ISBnBAqJjkMRF ij/VRXrrqQP8n6SfXBj1W61Gn/Xyz5qvfeVMb4H9+S/PbSapk3/CsUeqDK2qMnqNy/deb+3arLC8 VlWF07WTIGOsHfHa/jqjWhsvpPM9rbDNmDHT9ekzKqfcUM8uJCZWn5s0Wfo3Qf4zmufFw+jNN9FA cLvmd/c96LaT+ukw1dFZ9jNWcJkw4FyxV7bVW0rOyFsmFpAtq+SnnnKi2pFlmwt/e5nTTp1y6Gc+ bb9JUybr3PSvfHv0QQfsp1v+t2oul64y2by0VoyZ/GMSIeKXphNJZmJJaabaXsUtuJFPyzAu6Hes tDOZKnUQHt08mfIEn7r+sSef9OQvFy6y7ZYbrn8j3eBCzJ13/ETzgMrXjzRwnqvdHOgiq8MXXnpZ 84Mf/cR55YsLS+Sw4HhVXnKXFXUoMZOvr772uvsRT6m9Y5KAdhtdnDRpissmO0Mmv/CCB63UUQ89 +qgvoWQSkoluygZ1OxNoq6utPEGXaLEafK3a5e//6Gzd2bFh8zXVhdQZ//7zXzUzvjez+cs//7om lEaaQ+SGbOCF2/Lpp1BOp7z4ggf7K4inD9Uz54K/RzSR+e1/+Z4GkB/RJOfJhGrO/vm5zXe+94Pm r//znzXbbr2V9Ghy84//8zu+vPSoow7RpaXbSk9eav7xn7+nPtYzqv/e8bGCd9VPJG3IZu777wlJ u1aUL7M0aTxV5eoN1ZOMml96+WVNNlJ/PKX2L7bXM1nPZZzc2Py42p9773/Ak1ccRWIHw0x9jeF7 SvuzmjBjsomveFyk/Pn+v53t1B504H7NNC1efPtf/lUTvJNFc4gncfnSxL+pLnpX/TPq/jCdZlHf vqLFkPETJpofJqu8u1HL8+er30Td8RkNvnfTpCj9C851v/Lqa64LrbzKd2QWipn4JZo/9gfJwqS4 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 yhlnPKv883/yG+Vsuxr6yKOPl89/4YvlC1+8rGzatNGTVpLaO+++1/zZVs587hnlrLOeV374o1vK 7bfdVR57/PGy3BLbf/jB99ntw6+yzTHbE+gf3Hxz+fBHPl7uu/+Bcrgl3E/YG5UXH3hgefvb3lwu 8Cu1O8v1N36//PlffKzcede95WBLWpcdf1y5e9Wq8qglrItM9i1vuKT86q/8clm0aKHl4B44i5IV i+nmJ54sX/zKZeXP/vwTZePmTeWzf/235Yqrry3HHnVUec+73loOOODA8od/+ufljjvuLiTTJPOb Nj9RLrFbnH/tV95vV8x3lquu/kb5xKf/qjxqY77YfP8nv/lrgd99RvrLJIuvOuo8c1eYeNbgqrRv PZTCx+QpxFZaBFoEWgRaBFoEWgRaBFoE9usIsJ5n3dcPYmS9N9IJmXoLdK+ghWKmTKUJaVhLaxJd fCXTdaHaLVLhQ1OSLfmMl3kaqfhD+cyXLclMrJUYThRIDBnINW31EVVfNTRdgc01g5BelqWtlfyQ Lx6YuZ3loUsPOm2NUXTJqJac1wcffPCil7/85aeeccYZLzTdDkwtV3IkkhFvVFYakpGjJxnxIokG dyoelFE8bq2VqPCCMIqXeWgkNXr2HwnoPV44WPvODT4vXPrwX3zCkrKvl/f90jvLP/vHv1GOtCT4 qmuuK5stcTvnBc8v3/v+D8vv/v4f2RXhleU//vt/Xd7xljeWo488snzlsivKT269rTz32WeUww49 tMydP7c8/PCj5UG7invW855d3nTp68sLzz7LktW15SbDmGc/+/P6115ULrzgvDJ//oLy05/e6leH zzrzuWW+XTmdb1ebN2xY71dPT33ayeWNloi+4uX/oGyx52y/e9P3Pfm88JXnl0te++py6NKl5ae3 3eZXnV/w/DPLAYsW+VuV/8vv/oEnnb/9z/9p+ce/8av+nO0NN/2gXH3N1z1hPtGuWs+zW5DtzuNy +x13+BXbV573i+Xtb7m0PO85z7Erwas8mX/2GafbleFj4iowYTN5qtl2a/OiRQd4UvuojfWCV51X 3vbm1xfGcOjSQ8uXL7vck2J8/8//4V+Vs886s9x62x3+d/ozTivHH3dcmTtvTtlqzw/fZba4Mk6M udX87nvuKTd+7wflVPui4PmW7HNbepQ6r9StVCqfC9zpYrJdspz4rdki0CLQItAi0CLQItAi0CKw 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 2PnnubXyRx5/0v7xz0dkbX60lyvlyznIIWr7TmhSwFQrf/RX1DcnTZmqfrLWVZV3qL7YeOToweBz z3Jru2j0vPPBGFkr3uXXaG0XU3nhiGEuQS3U+X2ubKKeHnj4cTc+R5tmgwNr4VdccrEbR4IhpU8z t9yjsfiJp59X+Us6Inf1FZfp7uzL3dptL7Uf+uGjTzwt6fwj6qfPeZ8mLxhhqqjooTHlFTcWt0lW uR97+lnbrraHpWqMcCHl4pw7ZzzfUj/jypziToVWXFToKufz5i+SRebVflSCO6qv0nxAX/tAR0Rg +Nj8pf+3a9PWx2p1S9dQ+cM9f5MGTVtJ99YJpr4bkWrVspkzGJ4JxmbNDcyBlDkbcf94UG1RbY1+ wzznbVGbY/Xq17VzzzzTjZah6YHRRMqYzT42VrkPfY76FNtlD9d9UvfW3uCGC9lAwabDz37xHz5v cXvB3v17NZbs1DVUL6v+avsGLnVK5foKRB2J63++fvvNvtH06JPPOLOPBesm2hTkvnHUzUdpLMVI F9agp06f4XWF9sEAMb+3yDp8B7VtVH/ZwBojBpzz2jB1XK3Hxh2MOVacN23c7PMm2g4cR2ij9v6G +sLPf/1ffiQKVfMh555tu3XunjHkl//xX64lAFPJ2W/U3itEx0uvjvc+tEEbWtzBjCE6pKXPvfSK zZPmVI3qNX2spa0wLmBdmTXIf//uDxpXn3INj33q+1NnaC6Q5Xdwr5HhuW5durrRTJh5/Jn7mVuA hcHzzbtQofpNmC/vLLHHmOcZ2BdFF9bZ0ZiCUUUjAAvu8eYAxsabdFsG8w3WolHDdovkal89tQbg iBXnzW9VWfzxr/fbj372y1R7o0ASPbShKNv89aManRjWFnbaz06VBeGp9t5t77vRqcMHDsu4VW07 /Rcy4nmarvvR+diVb6+wyf/xqW3VfcCsxTZPfdVXrT1u7W5n/eJsqUrL6rDabRNd9TPge/1sxr0z 7I0r3pCkWNJ4MacwlN2v72F1W4QjPh0v6OCWmqf9Xsz+72da7ca1rVm/Zla1gLOqGg/V7mJJsVHY 7vy21uGTDrbizZW27PnlbrDzlF8Msv53DpDUuY4sOS+waX+aYeUb98t4lAyoae5465p3ReNRa3NG Wxv21/OtSc8mfgb5cIU2vZV3yh7HHAHTfORg0Brgft8Bd/V3Zn2umPK5/5zr539bndHSGnSs55vo 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 eNc9/k148gWDL/TBRMeKFR8q/72penSG9DnL2qSTxhynlbgR4l9qE5DjH51o2yXJg+dqIoPPVTHg Q58MfqkLGITsNai/TbaxG4I2gAkkVv6sTijLb9aFirH8tljdT93H5CCTdqQ3g7ShiivpT1kiT5Av +d78eJVtvsc7ZMhe6YLzzrYJ29m6pInvmzLxgDx8toZVMD5jx+exiOs01cWc3WWimsEr7TVb2YdL F+QFBhP7aFKJyS76AnT0n31umn3v93xNbtD+zp03T2nydJqkLydQFij3TKTS5nN5FJNSrFRRtqmD mExjpxa3GjNJxGd2mPxicvP9pe+r7mQLcuf0gAZj03QMhH4G33mnn7Gf8hdx4DNp9CVYkWfSnE9g cWs5g0m+ocz9A9wuTRxppxiIMBhAFnpKS1R/zLCy/ZK1A7TtxIt+CwNg2g7qJiY6+qhPQjl4SEex +PYy/Jdf9ln7ZE+vXj2k39n6Vu2vVcZpe9aoHl9qeiP9mdiiTqVeR7+kG+WEvg2rnlPUBqIjbjNn kngbo0LJTeTsgOCzN+Q7JspfV3/hwvPOsS9N4E898eOfXZdmapBKP42VXS5wYjKDbftRxsGnjWXS iAnR5ctXarLtMfUnHrfdd2NPPEHfjL/SLtqkHqTMUQ64rI/yyUQKdTufn+KcP5My5GXKMEd2Zr7+ upVxygUXiKJvBs/kDxYPaIv5DBsTH5Rb5MNOG8onivgk4Kvq87G1+mRNhDLJ2U1n2lk5p6/JxIn3 Z4bYpXRM0k0i7z35pJ3v/dIVl6mMDNEklq+imj6LcuYr9S322c7DDz00nXKibvdWucJ06dzZtkbz 6U/aD+op4sWK6rW/0N01qgeZZGKwvZd2H3EZKX1evmLBt7NnqF8yb95CmxQjfzKBykVpfFqQvM+d NtDbBapqPw5Q/7JHz/qwBHXHA+Mf1YTpfdrW/JHyvLaoa8Jkr70GpttU79FvYsIKefpqy/ZI6e1o 5XvW3R9X28OEHXoeNmyIdpN9LfcV/csptGvqCFs82/spKar3bV+sT/3KK688O3ny5DebPoMEfPQe efIHQukmq5nwxxL+EVrYnbLtX+jgiTDa42Nc1pqJMMMv7O1hBe02z2DexqMNh9boW3ODHXeEioiE vaSP96AJvvbcocWfv3iHD9PRH+YemLg102MP2tK/47777rvbt7/97U9edtllf+yd4UizjAynnHhg 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 55BXij/lkTJ+a8ZMu+13d+uArFl+qB3tzNUfutKu/eiHfHUAHfxQC5ALyuvM2XN9gGvYkME+aAEN eAx8vKo6fOvv7vLBkX0HDlgH1e/rrvmwffiDH3Dlmn3D1I9Zal84IG6ABk+uv+YjdsF7zrW27Vrr ML2d3uY98MhjvsIE7HFjx9onrr/a5ZaUV2VA/5Wk/rS3e8l2W/P6WusyuouN+9w46zOhj9fNNl3a 2rbl223DNGb5tlqbbm19Oe2m2Zuteevm1mt8D2vZuZWteHalZhg3WKehne3ED50k5aiLi2jnmp22 6vmVtk7LkWk3+56lVS7n9rNWXTU4pbbDjXhACVz1wkpPo2WnVtb/vH6aXezpS4KROTOMq6asso0z N7oC3LxtC3vjP9+0lh00ANajjfU5u691GdrF9m7ZY6tfXC26TQ7NntQe47pb74l9rZUUepRglO0d K7bb2jfWWevOGqhq2dRWv7Ta9mqWtOvobnbCRSf4DCf1h0HU/dv32/Ipa2zVSyu1j/aI56GV0t29 aY/1GNvTOivPrjzCqIu1sOhR2FKA5Lxz+U4NNhzQMuQhPqPerFVzpdXeZ9qXPLzYv+QH9x2wda+v 9zLpeVpP63JSV+H6l9E2vLXeNk7faN1GdbX2AzvYxmkbbd/2vbZ38z7bt22f9Tunrx3S7P2qySut HbO07x1kHftp6bcMevL+7fts0SOLbM3UtV4n+57b1/qe2cdatGsh2fC+6NumGelVb6y01ZNX2Z7N e7X8vaMNuHCAdTupmw+m+MCX5MiA1uGmh/3phU0a5J9MY1S5KHP4Wq0l9atfXGUHhd11eFfrLxkj t0SclGEGCXkf35w23ebNW+DfMAb1fPAJTCorj0jMXfop6nF6JokHC0HS+GyUQKME/vAl4O990R4U zQUNhrcR8o4mJBcE3mEKynD6E90K/zzMoeQXceNJhLDX0hBGZ4lRxMCCJuhkrYqLGxN4ESeeKfTt db+ge0fPd6IAk6mcSRKKTMUTpjG4gz78eIYdYRc9yvIpLzfQBF48wy/iFKQlXtDhH2kETR6W24MW XmJoWf02qbCV48Kdk/Shq4atBSoT89Mp+IgX9BC6KS2euWOzWURRbr074J2C6vQJ4SOOwveD//qZ TXn1Vfvk9ddJObjYP6o/+vlN9j++/R371l/9hZ16ysmJG9Fv0OzpmnXrrHv37nbl5ZfbBnXQH3r0 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 bxEAAEAASURBVBzrpXzmbeHPxce8c/hzcfnEjdK40rj2KI3PJFiac+a5Uf0N0Y4XsfpGSd6H41xz TPSnPkpr0a89kxVTdbDao5zx6ANLG+cR38ijTexUE3epHLnM0699s3LkG+0t/nO4c/GR9xz+XFw+ caM0rjSuPUrjMwmWNh4f1d8Ql59nnqvmKa1LGznz1XjVK1Z9lOL1a89kxVQdrPYoZzz6wNLGucQ3 8mgTO9XEXSpHLvP0a9+srHy+7qzj3uKveTN8jcurFO/zuDZybPaPf4arvsonvvIRp9lPzUWvD3H4 at4MU6/miq+4UZfvnBzzqMmcGqu1qout81dj5NcYNk3ZrOPtGDNfKXrE6T+SJN1IuyTPRVTFjjo2 hepX10ZWnbiLU6XxCGVM29yK06ckx48rmy++xsQjjeurds2RDykWWcegHwwNmwZnxaUzNsa3bPxi kM6neOP4R31m60twbCpn5SDOSWHd2DTxzWrb0ec4Rz7sikWniVMf+8QP1nrE6Tf/w8FXuWc6NdAc 11iD/oo5pdfYpVzk2Gp/+pQjn37kqVjFVf1UjnUoa96WXvnGPG3lKY66n8Bhj3mjPfIZVxJHp8nf rLatOP3Vp64Eg067Eb6WebytfJf2c8xwPE8jh3XWfsb80T7FUfnO6fLKN9agH9wl+o3ymTf2U/3q Y43n/Ma35BYfeMes3OKo/so35mkra17Vaxydxr6sfnyjja8240piW/oYk2eGn/lm+RU343NMFYdO M1aPYf1KsDUXf22VC3/FjjH7q5jKZT6y1nQdXT77GGvQb1/nuG+Uz7yxH/3WMdZX4+jWp/+clHfE 6VeO8Zm9VRtYeZSz/IpTRzKmMW+0wdVmXEkMnebrqzpXFddQx30aV4K5GT7y6b++BpS7+mdjJ/dc c2xyiq98Yowhq0+d+apjrXhjSPFIdfy0U/GKHfnkqjyNcf0YtJgqt/qUxz7FIfXJU30zHRzzYs0j BpsmTv5xn8jR0Bdu3SEXwq/AOPBoFtWstiXGoMaDs2LG/isfMePq9CMfUj+cYuXA5+LWmHhzzdOv rBxiielXbuHhNQ+dNtr4qM8xYdPgpCmbtY5bP9J5V4evHkjmmqN9SsJZ8VUf80bsdePn8I5LXB0v PvsfceIvkXJUvkvytvDyUdO4L4xt8c/i+j6S+KypzsGN7AN5lNflq3l1Tqu/6hUz0yt21ME7RuTN NvmV5/jO4c7FR/4R79jEEac5VvEjrqEu28oBuuqXZItXVg5q+vfhXKtjq+Mb/VvzNe6bMU9bucWj Xz7xSuPKmX/mE6+smFEHQ/+2Gtd3HTnmj/bIdWl8nKORR1s+8fqVxGl1zM3TtmOefBUz6hVTdXDn +MQrT3GPMezr5m3h5d6KX9e/xSePUtyWvNn5G3nls3/liJv5Z75TeRWPTqN/W43ru44c80d75Lo0 Ps7RyKMtX8XXGLrjFWu8SmJjXBtpqzo+bSV9cYW21qPu/y2kTZ18H3Jgo4upV37x2SdSW45wTb/3 ay3gxjrhsD95kDVHf7iX/8P4aKOEj7UQ0ibGfvQr9dsnknYur6FObCU6AdkM1VwLA1yLwq44bAYP Bn/Nqzh148jq066+gCQ3svortvqpg4avLk6rLd6FKraPmi9O3yhrnLETdw7EyjvOX0CP8Ng0OdDJ lc++Rp5qi6+5o45Nq/1gk+vBa1+X8lHDjfDRr81xYN8MH7nWrbwZvlrfKT7rRoKjia+6sVpnjaPT jDerbbf4wNJOxW+Wr/Ww9nEjfDXHWp0Pn5DHfrSV5mHLJwc2DfsSvjHvHJ/cytrfTJcP/NjGWB3X lm5OjctrTLti0GsDSzOnYltkjWlXjHzmK53zijVfjHbFyGdM7BYfcVrNG/nkAKde89RrHN22xWfe qXjFwHcKO8Zn/eODEx7aOb6Gajk+L5trbfJVLvPGPrb8NfcU39j3pXzgrB+99ld1YjRraNaKd8zk 1Lwt3fxRij/FV3PEVV/VL+VzXFVWHvVL+cSf46s4dPjtQ1sObHUkrWKbp23FjRjxykviYG6Uj1xa 7Q/7OnwVLw9S/xZXh6QwTx85HPc0dJqYc3y175bZOE7xyW8f2mPflc9+9GHzfE0zdh2+ep7LcSkf eGtVP8UHhrZVn3OM9AGf9dS4/6P0iYEfnw2/XPiMIc0RsxU3/1SOMSRNbnNP+SpmCycvcXVknUv9 FYNOLRVnHB+txtQrV0NdsJXwAugVCLl2btABYntgVd/YX7VHPmPw0LDlUvcKr3Fkxcs5+sHIX2PV T7zatS/7UNqPEk51JE1JDuOo3MYqznzHbAw/B4g82PKBseGjWWOz1oPRPs2v8RrDLxd6jY0HqjFw tdUx6JfTHOQpvspR9S0+/OLGvmps1LWRNOtDv1E+c5EjHz7bGNOu/VYfedrojhOdVmPNs44BW7w4 +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 uP2mKUYtt36t5Tdbo/WbicaYNf3Ggw8u3wx+isnffOV0L34bLsZcvhmMkDPxa3p9OpMLKmaWL2fi zpvlFpu1nOknXj5Yv2+dWcuhpzY2P2Zzr3zz5nfy2vzqr64YGnF3dt56+qubHPEnfnKap19nsz5x e8OJI/6E+4TjbeWCucc5uZzON7wYWvnmOz9mDTT8x4Zs6GMG787iaprLLd66nPoVly9WnjNzOWD0 hPjV/f75V/vV3zuKec02m7zZq93yE79N92qHc/yf/r0Hd4Y+4t/108e8Pb8z82nnhk+/eT+em85d 5Gp+wq/e+hWb9em+J9rpZd9nEtv8Np785o33xG/T1be1ftW0hjv76lvrNTVP9K84zP17+Y7rDSdO 8VdcnuMJBx4hl7p76A05c77hYmjlm1/5OVfbX77E9CcbYu4h+8uXM7lksekhp98za7jyZ9aT3L3i 5ddn47qPrM7a/uShn3vJYtXc4dsO+ISzq7s+xczy/F5MLjjRebXX9MGnvww+oK4UD2F4V/sLoSb2 HF3dyUfOzPpNnJ6v+p8wb9GLrF8xveZMXK5zcTJhppYjPvvJYY7er/Z6mOFsfswNfcgz/GEHl1eO 86ktzjttP7n61b81czXkOz95ama/vav6qSMTUz97tGDiZHb4vH+U/5vNWk617/rhaUw/n5W5OybX fs7B9ZPzrt/0PPnBe8XlhicceU+4cHgmY2qKz5nPIk7m6x0/udPDvTN3p1o44vKf+Hkvmtb2erXf eN4xZ5teDK4x63f81Pb5xfCn1k9O59sNYHKpN345ztljbYZH1I9+zjcOGJ5TO3u8pt/s8TLmbPrB e8KR94Q7ObPvbcw69z6xOfcOPZrlqnUmbj/z3On8hN/5ddYaT3rCfHVXX2zWs0fXn5XO63mqy7fe /Jzh86p2bn7Hzzu7Rx9nr/yqVVPszk++3297NFM3e7jeNmfTD+4Tjrwn3MmZPV4EuF/cS3ifGufX 9Pp0VoxaLrn/nhKffPu5c8Of+nVXazxnLzb3ifedoBUn+/0t1rp8a+aEz2uNFxxx+c2t0dH7ZW/W zzkZzP9lVx55BtwZ08859zIz1Jo70wOu/75V16y2GPX06hy/RrnFH9XfEZ+04H0wecWtO+vB4mDl UjubWe7k9IV1NnH66SlfXI69c3YTehafNe9m46HXl5qwNxejxqv+YFtU71ytvXnD0YM3ynNu3ngb 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 M+SBy6Vmf2dghBzvu9DPz2rkfk4/K/1F6lcP5+T6Va/WuX21Wy2fmX7VOhejt9avmPzv+lXvnp++ r77W3u8z9tnKcQ4mZ2qdkeXLBdtCD2fq7J2Lb34TszfjZU0mnvqVrwd6687BZ8gDl0vN/s7ACDne d6Gfn9XI/Zx+VvqL1K8ezsn1q16tc/tqt1q+s+q8QY4zcTXkYvLB1ZTj3Fm18IhyrMHVyKF37uzk 1zl6o/hX/PBxp3li9HMP2Bb+d9Jb+AcevnqTiTs/uRfzd211zsXop3Zi3V+uOPz60TfuNJ2h0fMd v+mBVqzv9nTTxNt7h35P7qtePphe1Cc/cThGsZ/yw9v35J6fvs8dZJ/B+90l7g3liskxl/PETx9y fx7Q/pv/rHGv3yOzWDM14fNc3e+fvm+yNe/CX0Jhi5cz8fb+giqf/dPPmd7oq+vNxeERU6+PWY5Z v2a5YPrBJ5xRzzk9AUc/3hl39ufoj/b90Px95acCD758qJPnHU+N+dP905uHNfSyJ6s1y7eXC16M mi/55fnSO7PWY8uTgw9Y/azVu7f9rNEQxdt3zwfx18fkd9Y7+KEq15n8uX/O4YnhM/30YaaXfGat 5Yo99VP3Hb96tPaWE7bNy6V+xen8VOtD7veLvnHSF4dvb65Ha+dmZ+/2J93E/TmZ/vJmPvHE3/FD Q2zvd/M7cT9M/vhQY988Z3P3nKPdsHpab8+8aTdMj2b9im3aDavmrt60xVqffF5xOj/VeDszP9lX but3/O64rzznfN4856/6qZ/91L87h1+P1tNLLnn7sykfD/+bO/22vn5zzuzOTy0cox6tOz/dB2f7 c1btfPZX96nd8uk+d2zz6fOK0/mpxtOZee6x7/xUf8WvXtXPvfLMztXwvZ3//pnc2dejNbyTnz9D 8J/4wSGe+sH154B6hjvhPHle9PqprafY5iePmc8hn1lruWJP/dTp114ML/3m3L73FZu3Mztx5wye 3Dmj5/13Tm+0BvOX5PL1F2t2pp8ze/3B+4zMJ1ev8tSJTY17Zn7Km7qPnmXfDT08HD9qXkj/cIqT G+onph9Zv/6fOfPg+Bv6TKwvFq5+1N5XrbU8c33c7QwvQq11bxGDo76ezGd4n7h+6Ajnel7o5x3F vU1tuWLlVAu3M3t1ek1cDTjcO885Q0MUt575Yv7O5d34h7Jzau/GxzjdJ/crfnqb3Yfn5gfPZ7Mm E95BLUc/MGLjXJPrs/wT98Spj/Xk4gnGV/3hT6y9NdmYenGzmvbU1Z38phbdE0yOGR1BT7h79tf0 9x3lPPHTWy9ydfqBw+0MzPk2Y05UYz3zxfzk1teZXmTvliemLz1hL0/dNf39fvnOJnfO6U8ccfdO 7ryLOaGOWg618coP3omjh/kpT8/Tbd75XT/2zB3eOvH2230b1jur926x2XuDer3JaIrPmb3e9EZ1 7mQ2Pe9mepGnX30627hgvdGdYupnRkeIW5PVbpj+8tR7s3N7eWRDDb18ajWn/XKd1wc9IYd685Pj TB55i+m3ccTmPe2tf8qvO619L/Tuc/YUU2dW793umH15G+eJnzq95s3uBIdbz7sZfGNq6tMZ/Pbz 32fe6t721PXFqz31yU8u2dCPTJit2/NvXHvz5IH7dZqBE/W7kD/7T6/J6+9+3kSe727q6OFt7wrs iRcej8ODHgsWIh58eRwUex8GjFrcB6QnxMl+bX7MfBHUhNnaPfRw51zeqzk6vvSjxo84eaq5WNen GFkvJnqYL/YnXo6170SNnp07c9fkuIdcP/kbNrn27qInNm2xi3V9Tpx+8xNzPnV6Tly+c/IJY+Ye auIn/PDUx+ye0y1qzB/H/PFBPzE9pjeaYpPH/F0/Pb3BDE7QG+6ml9d5eZ1PXXn1snZOVrv5zd2T q8/GO/nhIX/zc6b35OjL3FpNucy7i54ox3mxi3V9Tlz+5HS/N8ERl/+u30l3wl/dt+l671fuU4M3 XvUD8yZ5fSfFJg/tK796zV3zjnLd6w530zfEm51vft3ZORp3yjEze8WFQ2w8fczyvJl+7pZDNibn qR/67nrqJ0892ec7+c15b/6On9q/w49n8P+BeT6Pd5DnO/A2ZuqsmcmXVw488WqoiXKpn/rJNX+Y Db9tb/epgaeP2Vn5+pXTOZrJeYe77dRTHzO4NZmYu8GcUROTowczazXlqnVGT5RDrQezOy5z+dRG MWsy8Y6fGj0uh+sT7A6HxS7+rLizfswNcbn60jsrps4/h/TlUbcvv7i1d9qb9e1deskht57POvn0 9fP3OnB9qAl6/Kbn5MF9KzR8SzTI9aD2qNaVlA8++w2bHHuyNTpCjDtOv7Cqkfsh/MVH1/+lmZnf HHX6MqtHa2fewYxv+PSGR+g961OPbzXwGq9m6A25/kCKnzL8qd96MN8dtXte6U97p5/er/zmXP+T n/OZfYaTH/y72clv4u1f+d3NvVe/O66cu/zEb3K+4vf0TnnuNLOT+vTzcbpJP+ft6+38Va4ebvsn fuVP/daDEXq/0l/s55+v/Ob8ufOfmf3+/Xn6+7vc5hPznUzc/sntd5zpf8d15ylPL3n1PHHkNp+4 +pGf/t2Pb/1a1w/8VciX9+4d6szf9dv0fY55X5+dG17pvbNZj3rrY5b/qod356dPs3yw6V/e3ay8 +hWf9RO/jXPy37hPdj7xO3GmP/3G9TbzxqkXPP88lmutj7narZ48e/02zR2mXo79Uz/5Uz/7+rV+ pddnZjz8NwEzfczyt57vx13gTUytd5PLmX7O1cs1f5jHA/2c6amXGnJn9Gqbp27O0BHi1rOfz/Ah WnTgcidH3Oy8uXuLP675Zey7wQ/UKTh+xvwBLIcHsjerpxcz67Xp4PQFqWlu7R4yOj31KVdfMXu0 /qBRE3rpV661O+BbO6sHNeEPv9wL/f151ZvhUPtVzcScNetj3mZg08vedzU59ZvPQ++zoiPqp1bM +QcxH/Kcb/3cLcccu48b7OecXswsl7xhd/NXfvPnbXrNfe2t57PjMTF6Qs2s7eFNLbOJvfJjj7um dvMDq8Z+y5tfedTE/Nm70M/Pu/tgOadm5ys/eIS6+b0Vv1i7H5z5btXVb76D031qe5dY/Tr3Pnhy i1mb5ZgnvvVyZ5ZLdlasdefWM5c/n7czdGrF21tv790ZOuZywDtjLgZnC7XOnvrJn3n6db7dxnzi 1bSePN6vzzVn1Z1qNL33qZ+75vf3lV93cZM+Zvfbw6lGf/CNq8683YfWeOVXHnX59nLsvdfd3mLe +MVau4/8xE9OPazxqB+4mJyZmTd4Np9v04rB2UKts5MfPpOrplnOvBNOMWtzPbZ68uj5Yt9XQr/e Wz/nm7czMxzrOz9n5bfGoxxm7fuz5D4wans01neZGdrpD67uj/J/tXvkl2dNZu6d4lMD7u4/yo+Q S9Pafsti8tlDmK/u8x57+N4Exi3+DsiMkHN1n596y3Oin3N752RnYvQbz/mj/BO/AJ8WeVwzXF+O Lw0MDmGe9cfw14cvr77Um1bsNNfXm/TmNrVyyGJkuWrlFT9pwPtDjEYf/wB0B3zCme9OnTPvo593 bL2Yu8ybHqyh1tzZVust3yzXXh44GP0W8tSZJ1ee+Lt+J9/63XGcmdXN7Hzee+JN3F4fMl7162zy 7c1w5YO1lqP3nM1effHWT/2qoW6vx5Psn6Opn/0TLzhP/J54nzji5ld3ze/L1NnLww+Mfgt56syT K0/8Xb+Tb/3uOM7M6mZ2Pu898SZurw8Zr/p1Nvn2ZHhy7f15mu+vPLhbfMWvd+PZPdOvc+8rn7l+ 4mZmxKlXd7E+eeLqzJOnt3N1G0+us2b1cuynXzVym2c99bN/5Tf5r/pXfnM+++nvnPdxmskh+97E Thr95M2sj9l5/fwzw2zy5M8MTx1ejScecMp74teb2Tf17Tv3vjnXT9yMljj16i7WJ09cnXny9Hau buPJddasXo799KtGbvOs1evHXKzZ778ZvvNqrTvHk3BmXS8xM9zJ3/bBJ+ROT2fOzeD4GcWtya3h 2lvb46WfGJwZnfk85XTO7y/2ct1RzV0N33dyx7udvbv0ZLb5gPGQZrXlOpM3Z2qa5ZiZUfPVlypu lt8M318m4bW29zZ691iTCfHNe+rt5V4Ol8dWnzD0esmZuRy4xoaD8cUPFZlAc/phnX7oykVP9Mbp 57w6d08/cPSv/PD0Ofx+qpt7wBv05Tj7qh9679arGDPCO8ptfbGuz4nbk4nveF0O1+f0mzP3FL+r 3/XDX82dLzN4vWf2cDa/jQd34vb1aO3cjAcx+wv9/KzHJ/qpm/rZV0N98ps8erwINI3ueOVXbuuT X/Gtrkfrct/B5ZIJn1UcrDW9seFiZOK7fpfL9Tk958xdxe/qp36vvsfbDt+Ds/Z3fuWpJZ9wZpuf fDO8xsTrYV2Otble1BPXg5l1ORvW+aznf3OZl8OeBjNCXbmt4Wy3gDfe8VM394CL6cduQnzWH8Nf H+WIi/3Vfu4ju7PYq/qkmbjfi1d+p/lTv8nTb+L0/gzBmffJN9dn/vvMWT2o++8pfcxq6L/ih37b AT793Ol95FPIZd76xJ9es0fnPdbkensXPHAy0Zpeb3lgcqkJZ8XVkVt/CH5h4N5UjvXk2pNPHPyI zqn7XBvnQzQ+epv1oLzX/vT/AtwHsTZzmTUvgD8YfqPEzb4sel/WH+VHnLBtzo4t8HAX2Tu6F527 u1Mdc8JeDpg6/cAI8av7/NRDRJ56e+bFrNV13nrjOXc3HL76HHLIhD6n3D9w8vX/MIiHvbxmvx/1 875Nd7oZvTo4+nl/d86a3pBfff3gyTHP+cbRzz32elRz5ydPvb0+E2deP3lm9dWJkYurwc/aDNcA qw5cXnGxV37VqwEjNr9r8vvn1NmTrVHgR9+bwA255onTd0bN1zt+1U8/e/yehu9I31PWz3lvFoPj OxIzuweO2Kzpic7ViZnFy+em4p1Zd47XP+XnXrP3kXvjHc6soZffG/uf9tPX7A1zD/jkbJgcsrW8 9mJkwpn5Qj8/wTubPczeLNfMfNbtO/ed1485UY1zsS2D4Uc4v7rPvyvET37ieuhXnJl3109MLXnq wIgNx6t+H8Rf2IY7J/9Vfu5lx+k+Z+TtDnBDP9+VvXnyJu7c7PyVH3y48tWL3/WTo4d+9nrYz/xk rme508deDu/c5webc3s59urbU+vn97Lz+uPXkGdmhge92JbF4FN7Jz3Rnnk5ar0VPrW/u2x8/cjV lTtxfAn3NePTcAZG7dza7JxM9K4L+fycHtwHpqb/DyWfqqtSa57zL/c/bejDcJC1O+ydmXmZvlBy v/Fq4RL2ZrH2Ynp21hqeu8SbqfnSB7711DEznNHr4Wzzm3y47DE6FzMz8wcJzPuck90pRt/onPqJ n3+4phe+3/XjGXgu38E7fmrnfdNj8+Z2cLlm3zFzMMJZa2d6M9v8wA019mS9ndVPXn3F5Nub69fv rfPNi9kTv6e3vevnTd7Y7E7v8/nKcZ/cn/Cr/zt+1Z1ufeXns9ZrPmNnT/zk9KbWd35q4bSmr8ep VjPzUz985ZrdZb4Y16f8YtRynXNPo/cVl1+Mun7v/FlTW796zbvKe3rjnZ8e+srt3v6dLI8st9hP +NWjdXf2Pu4wepN1PVqjKcdeL3t3lUtN/NV+15ZrDzV7vcN+3gdueJ+5OPXJr8+nhqxPc+fqxLxV HN0WX/HTS219xeQ48472J64c8onz1E99PdH67xVwer7mzc6K/4Rf/5566sctRm/1WcjEKz95F/v6 /K4fO/t31bt+XIFHY3o4B/f9iZHlm53RG2L01RTfvOWb3WFvFsfPL2aEO8z+/KkpZ9beVI2Yfma0 9aQnmE+8mg/SLx61XDKxca/Jm58avik70j2UH0BjHivH3fbwxdSawZ3pZ2+GO2t6+MXhnf6Xb3jl +gdJnDz9fFZ1navzZv24QR11Qx93bbNi1E813qFeHf1pdsLvNM76DNTt9X1yw0/7dXdr9hBi1PM+ ZmI+z8xTR6+n2mLUxPSx72yrwQh3XN3Zzxvkzz3qndvLMxe3Nqt1F7iYnOlT3BqNvHox/0m/6YW/ e6kbvaO6E472yaxeTzXw0PXW/j3jnPzkBvk/5ecz1e90x8R9Lm+3b3ZGNrpzYvbeMzNzsa1W7w57 NVuGI985GDXh7Oo+98s1M1cjV21xMTnV6yFHHb08MfVy7eVtvdqT3/TCY/rV17o6dzArTv9k9hWN u3qru8T0FVdDNuZMLXNnYl/xc0/9qPW6w+H4d4c3mKeOXk/vLkZNqJ+5s60GI9xxdWc/b5DvPnTO qJ1TE/JmdvZB+vWh9omfOn3rh494veC4g5qQd3W/92pPftNr86uvdXXuYFZcrvM5e4Vvfmqc0etL 3b44fELs6i6+NbPqv+KnF9ldepINfzm0N6uhn/cU8xdKMbKe7tFLvH7O1G8zOc7cMfH2cAg15G3u O4HbZ5l9ecz0oibo+3uSc/MH6TsfvszveFR78hOfh/uXrR7M5ZqZtZaLdr5c/cqfGDP3UMst3h1y weSLte9cT3n142ZuasgHo0bXkD/94BSrT/VyzM62npk+nRebOP2rqEauz9qZmBxy5+LF1Ji3mbpT rgYOXgR4Z+74GN58VAPtpDvh01o/80l3wvFT21rspBOXN+869ermXHzz2zD16uzJYAS6TbthH4I/ Pk5+aIhq5Ra7WNdn75i4fsWt69e6fhO/89t8xbZnEJND7j7xYmrM20zdKVcDBy8CvDN3fAxvPqqB dtKd8Gmtn/mkO+H4qW0tdqfrLRt/w9A88VT7asfJb+74Cb/53/DeRu2O7qYmmDXKKa4HWGs5J90J V7d5Odty/Tbthm0+Ypvfhsk3lyNGLu4tG1bN1HW2aTfMXWrLEZt7poa5mFntyc95teXqUwzu7Otj rdaeLDb1s4c7MbXMDLHJnT18sJ/+s7b5eRM7W9MT2213+Ifoj4/Ny9mWu6daa/Om3Wb6MePL3yvk mvGjbjgTn15wxajhqbEnG87tyXwvDPfQy9Wvs86tydxSv36f1Tf3dvSE86u7PsXIvj8m4hfr+tw8 mYhvmuof1af/JfSR+EDiQL8OlP/BvggBdITZOVmMuQ9fjLo8Z2LO0Tuj3sK5WjgTO/l5W33V+oM0 OfbuM+tBL0YmzFd33SfPmfvke7Nzez2avbkYfvOXcTBDPzO4tXlyp19vg0uvlkwUu5ALA3/lJ993 032zdk/3l6MXWVxMDf2swfRWJ4dMiF/dnz2cT37xrcZPzStv5puHt256sM5bM/uK36bTd/qBl08t 92Pw62PTiVWzaSeGjq/unhx7868zPpI6Mf36s8zs1X16m/Wzr58YHGrCZzBP7IP0iwfniZ+auc9n EXenvRk9dUOt2OQ6V6d3cTE8xN/xq+60H443vPK+m3tfvbzfGfrWd36dWdevdZ9t4p3hc7pv6uiJ E35N7/2mfvbzNua9z54bvAOMEKPWx3zCJk5v4Ndwn5mZdbnunHeXM7WdqYfTmp7Ydl6TT/53/dzh /nf9vMesXj9x+sacM1MrrxxrOfUDc65Wnj25nNbO5OrXfzuJ6dser5/2c4834W+4238jgYupaz9v g18/+/qBEb6Dk5/e5kv1+T7mHu+TZ28WR+duMTmdgYnDo+68mFzmauSXN/c6IxNqpkd1csDkfYh/ fYiZexMUcL7ACXniF/rJcS5uVk8Px38TTLw9NVzzH+X/7rDmuZhXx+x0B7O3Y5q/bXAQ1Nf6dLjz zYqXic6XJZc8XxAc+fL8Zvwx+ghx/QBPHGbw9aUnusM5uN4zMyPkkq3B60dP9D79NlwemdDXHWDO qInNTx/m1urqydzovJh8MGtzMZ977hOHO2dgM/QmE1Pzyk892nqom35y5i59zE/8ppea7vyuH56E PmYxsvusycS8b2rVkQn54mDOOhd/4qe+3ugJMWp3ln+HqSEb3/XDx/3UP+FXz6/4oTf6PurFvDN6 5n2WYmqrEYNHdHYhv3tO/qYpp37g7dGWS0+U0zk4MX3snX2Q8vHKT6o+5vrpAdY71DrvbMPUs8P6 V/nbu9i0Jwz9T/ptXt1Bfbplvjt5aAh6wz308pzrY4ZjXZ1a52TiXT88/bdJb3Dnye9j2a8PueR3 /bBQb01278kPDiFvy8zRE86nn3M5ZDD5zc7I4k/84BPTV4ysX+tiE6d/xw8+gcbQn0yc/DqHZ6+G TLzj5x31wkP8q37qyMRP+OHjnV/1O/37TNwd+HeXNXPCuTrmYp1TE3MOVj69Ac7fBafwls3TWbVg 4ubudk6eeH38+wnMWj8wa2fmzqiN7lPrzHcgB9y6XGq/B3C8Xy4YUc2FfOOTJT8deHr85r3NTnf4 UuozuXf9aXbC5zegPOp+M5yZubEccTHn5nqBGfMGv+H6wRODS9TL2nwx7j/leqsZlbWc6XTCvdc5 mahfn/Wafn7K+0Q+tdsM/3f96j3rd/y2e/4Kv+756n14EOi/41cPa7Lx7n3o5k16Pck+i3vf8VOL prV7wYjTfeIX6/Xnyc/dJ78T/sTvnT8bJz+fjDve8VN3yu/4+Y5OXuA/4dc9X/U7vcdXfjxD908f n9HsvBpmjc7kc0dx+GITr9es3/Wrd2t9T37cRjDfdB/D5ePkB3V7XrHF6gO681Nzd9+c/bSfN8zc 55o3lNtZ63Kof9KPPf2H9t3ezmbdu77qVw9rM/uI7r2Qz8/O5PuuyIZY+c5O+V2/erfW/+Tnncw3 nfqZT37wtucVmz72d37leK+Y+e72znpHa33M256N788eO6zxOOmZec/GOXnInRk/onj9wekJann2 5YIZkydO7ky8d+vp7KTpfNbbjsl53PsCHgveINbbB+d4/uFk+HI2LhxwtWrKLQZ+59e91VFPT/9x t+FqN518Ms/aHn4x+jkH20I/Z+rszeL+kNgzn5i3kH1esemn3jvM5altdk7uLcU3vv4zV6efemf0 xKZ9haGrfvbuKucOm3p6Qj31fI7pB4corz31yY8Z4XNf3fX5jl/9n/jp7b7q5y1yy3EHGbycTV9t ueiN4tbOpp7evXLLQTdxe2blgk+/zuETU6/OfLE+v5fiZufTqzh7J99+5uqYEeqv7vM5N+0rTD9y /e3d5bv6il936Cu2+TEjtnuuyeczbzwxb1bzxM971Dzx0ldN904/ueW4gwxezqavtlz0RnFrZ1Pf Hs7cKUaWW08xee3Btph6d5rV2M/snMxsC+5Q59x+Zudk/dQ787k27SsMj+pn765y7rCppyfUU8/n mH5wiPLaU5/8mBE+99Vdn+/41f+Jn97uq37eIrccd5DBy9n01ZaL3ihu7Wzq7cn+W1hMjR7i9szF qMHtyf77kVlj6tWZ5drP7JzMbAv2q3NuP7Nzs3N7s89GX461Wb4ZnN9BCGqiXvby5IiTCZ/JenoU x4O5GrlicBvOwazNYt6nbvbi8k89vt5XzuYHRniLOrP4xfqhT5f+kN1vNh7uDntJvhx7efYzqyeX S91ffOsrjzzx2bNPPjVBPzHw/oGf3v7lAm/G5OotXr4zsNb03m4Ga8hnbrijs9bwytm89StPf/ly nvjBqa6+4nJOfvJOWZ0/Iz/lxz7D3fSt24tvuT9P1cyafsb02+Zgfq+p1VDPcDazPHDi9L26pp+f 08f+k/F5jzNzOdZ3s8mRa3ZOFjN3Nms5M5f3ZAYfHvHq/W28S/l5O/3G8xb5ZvFTfuV30on7TPY/ 5ef9+vmz3D2dic9cH2s51TubWa55m4N5H/WJ64zse5u6OXvlVZ+NKzYze2bImXh7OTPfcTqb9fSx L0/MvM3AmBNP3snkfQj/+OiOp35o1Z2yHPJ230knjm4GM+I7fmrx6S7rd/MrP/ZscdqjH3OC3lBj 3+xsZjn1O3HkkifH/l2O/E3vzCxnZufku1l5G1dteWLmbaYX2e9P89RMnvPuoCbq0/k1vT7FTxnW nR8z/v3lvw+nD3qi+IV8fnY2b5Ylp/2p1sM5GT2hz+x7f3kTd0Ym8JmeH4NfH84n1p563mPPzOcx d8a8IQes9Z2m+rfqv+L/I1ge4C+CPIRh7YO1nxx7M1w9eRlqmc/a3izfvhow5+DWZjCiWmaGuFlc zsnHOXzr6VEvOZufs/JnLYesh5jcmbnnFacafYu1ftev2u/UT5/h38Cb73C+s7sbt9nm13e5aZx3 Zn3nx0yeHs3VyisGt38GmMmrz1afeD/t190/cZ9+8/ssfsqn55X/rp+67+RXN9X7CfcJR893uNX0 52O+szvPbQY2/dxF3jRzLkcvc33VMJMv1tyZPuav+E3verSW1/1ip+xdpzn4T/hx5zs+3nO676t+ +v5d+ckzP+F47xPu5Nif3plzdzRvM7HtZw+t8/pYM3NO9iby5le+Hs16gf2E3/TuTa3ldb/YKXvf aQ7+E37cOX02bN5xuu+Jdnrd9e7hl0TCW8XtnbX/ECwfcswL5X975mxq6Hlm7yvfGXnqypvvbOPD adQb3L4canXdL+bcGbi/jDMzTnzmncn/0fxX/gK8vbQ+UOt3HwotX91xqvGeu2YPhyiu/zX5/CwH tHvtZW9cZ+iM7iruvLlza7Ie7pwzPSZXHnN/QMX6B09MHzKYONkbnOnXzIyo9kI+vZzP3F1qzD/l 1x3W3WFtluN+s3PzhquVQxaT31xeueJq7Zunz8adGL0/T3i1p/ZrzugJ5g17sj8r+us1OeiL6Sff uX5zXm13qZPfHs3mt3EmRm/M3e1bw//OnzW1eOorhndxekJea7HyxT5Evz46Fy/Purn11DBzPmf2 ZDnyzeXIk+ts9vLMepnVmad+9vKmn33nE5te9P1ZpZdjrt/E7Juf+MHffu7rw1551vST42z6ic/c ++aMnnCvuy70z7vlqaFXM/9c6GEuVw3Z53DevGmLzbq+reWZ3WFPlt9arHwxeb0fzChvYvqZnZs3 /B2/O253WM/sfn3M5U1s9pPLXI55crZeLrk/y/SdqZXnDHzjyutcjdmZ32N6Q05z74PXWXXv+vFn q5rtz5q73GvfrId+zb1PTbFZyyG3Ls99YNTGxmcmf5uDOdfHLJ9+q31fc/bEr57qydbMia3Xf5uh cU79JOqDljDPGb0zee3BqqH/sfgrfwH2SP/PO80+nFmevRm8dXtfGnNr/9dheMSmFVNzMT+5zqsX I/uNqF6sGn3lnTji/gFHJ6Zf+/paN/sHaPqJ8wzW6vDny+cUJ7ub7PeveN8JuCHfXm/9uKHfL/F5 X3Xlz719XnZufmLO7/zgdrfaeR9eW8z76gf/K37do57cuhxqZxP32SZev/kM9Zt6+7nvqZ936GP/ yk+eeePXc5tPTC/y3axzdsB9h4/eQKcHmPVTv/4so68ftfM7P3eipzaKo9eb+ea3ze/83KO3/dM8 76tuu6/zre6t1fe+4npsGLP6ySXXT/zk4Xx6Tf6THg99zOrM7qOXI9Z8mutjVtN+007M3dXpRS6/ dTlbfefXPyvu3zyK4bftB8Ov85MnODzDuvzND6wc9dMPvFzq6ad2y6/80LzrN/ds97mXWaNc8O0d TP5d3xn19Nv2q5m3lKuPz4Fm44P5s6evuX5g6sXtyxeT40x9e+p5nz+35ZdTvbuKVcf8Xb++C9+h z/JT/370bv/9SM8XPTGf116d/cX+/HRONqh9B8V9NnlkfU8+ctTUr7Vzd3RWb2v41jPrRd78xNFZ k/VR0xk10dmFXBi4fuI/mrfFP7rgDzN3kP1Be/Vganx53KRmZn+o1DhHQ9AXa09NuMeZGFkONWFP RucfVD3gEM7lX+jvuBq56ia3PbU68VdZf3P53ocnsXGuyfXJnC+/l2Y5T/zmDvupxZP3619I9HKp jWLUfHmXzyV3+omb6wX2V/ptt2zYvMlbvc9+PqvzDVczM7uIk6a3tL5Uf/7+3PnN2cmv90wNM3Vz Ju5t5YqpofeZ1TmbuFqyXDF7s7hc8p1f+fwswOULP3+m/yg/Aoy485t32G/aelHLpTaKzfu8A+70 V99cL/C/ys+dT+6bN6kl+0zU9aIn7rQX4/dP+WY83SGGorUOE1OnB9m6szs/ZmiIau52yVX3If6l L6af820mNvdtO+Toi5Yv+mKbFqwhX8w73vHDQx0+9nrPGRwxuWBGMT2cqbN3PvHOO5PvvDMw5xOX z7wz+c7J23xi7avVj7l1/+6b+6vdaj30I1vDr19rvSZ259fZ9K4fNTcQ1dztkqvuQ/xLX0w/59tM bO7bdsjRFy1f9MU2LVhDjd9P73jHDw91eNvPW5jNf0/JZWYUq0fxjStm9qZNJ4csj7rc4vI6ByPE 5JP5AueLd9sor3hrNLyr//PHl/4nP3TugEO4g9ob/O+5vTO54NbMCLGJX9Mf/mTZ3xG+CHfxcHe7 nckzqyfLoXZeDJwoJm/i5cwZPQEHPc9i6Fd9a3lk9XPeXr/qrOX5F8fmJ6YGP0LtrDvv7uIfBn98 iOlhX+9i1J3pQ5Yn5t2TL+80Vy+PXo9tvzz9yt+8Or/zU1u+mDvtT/dNXvlzd7n6yTfL6bM6I1cn t/hpp35mPe/89N84G+Yd7ri7xf3dUX7xd/3Q+neXd578vJlcDj1RjHrz+yCGS+/N1mTi5HdNPz/l iejnfnF5p/nk0evR55k8/cqfHPsnfnK/4+ez1ku/+Szlet/UyemzllOdXPfJO+3V0yz/ztMdk2Pv Lnnv3OJ+td41veWR3SdWrXNnT/3gd+er/sRF5z162J8083nQGWrt5/OAy6m/tTqzXHo5c7+czsvf vDq/89O7/Hf95r9Z1HPvafe2T503qRc3+x7o5VKLn3bqZ0ZDqKOefvaTY+8ueZuf3PqfMP3klrdh 7pVn7x1P/OTq/6qfu+yr18N75Gy9MzQNuWLw+jzgcvSYc7XlFqPWVw49X/5cgzfcWYx67qbny39j nHRqzX0WMEO/7V45ZHnWm5/Pd8dhZvgu8NbPGdlnO83LLX/iP9r/Hf8n0H0YX0x/ifSBnJF9SWL+ gEydczNerel98eBzdvJDN7lgW8jzZrJfzNw/tc7kzjm9HGp93Ac2Qw44PL/E9etOsXoxF5fbd+Vc jRw0r2Jq4U/su37zhr/Cb+449X023+nkljNnsy/33+g37936PsM2F4P3hAunP5/qZ37Hj3f76udZ v1e7nzwDt25+Uyvn1W36Td5P+7Gn8d376kWN39Pos/Hcm7acV77l/pV+fo+2e083ylULb2L2J4/i G1fMHfboxOrRutzirZ9w5Jd72l2Oui3DKxc/+vpOzuYjVq9iP+2Ht54/cd/08/ZXeXteNb1vYvYz v/J751nxfuX3inO6z2erXuxu58mvuPqf8qt375341nsLM++DzUORAAA3bElEQVSZvHLmrD28cvGj r+/kVD/rejl75Vd/9c3OvQ3f1nLBxMW8wQwux8yM2ui+cpybtx3w+8sm3PKm32mvO/i3izeLeZ99 PVo7b9av/ybyXnjF9dpyn6n+P1r/Xb8AezQP2gfzwZn3m1De5PACi6GVbxb7Cs87vNNcL/cUYycB Jl6ttfmD/OIDrl5QN+3E5IM7M+PRkINGDj+shL1+4GKdUxv60VvrJ8fsvL212X1ym+WYnbW3NtcP TI24vM7EThy5Zj3t/QuhuDNywx3N1VHrh86Z/Onl/I7r916PaqafPuaNK1a/+ljPOf32s6Jfd+ph nhy5+Pnze+JWe+JMPzRG9a2dk4urJXuf2OTakxvTz16/Exe8u+SJ6dMsx+ysvbW5fmBqxOV1Jnbi yDXraU/me807qEdrOIRYM3V7eO/82Zj69ngRJz/3XqzrU6x58/R5melfH+vNZ/Mr1lofcnFrc3l3 3PKqtTbrwbNZM5v1L+hPuD5mddOvfb3kdyfvXPxX+b/knld+6uWb/2f0qxDXz93lwSGa1V2Tz0/x n/Zzw3fvw2c+h97OOi8mzrNZOzcXByPEmqntP0h/fDz5s6bG7Puw14tezMxs1vZm/fQxM5djbX/i gNevfD3gtKY3iqudfv6clYtevl5i4vLrd+Kq7bxYPcW9S437xOmt5XALmH7gremdb37TsxxnZGNi 2wyud865PubND8yv/nJ60oDrU4412XfQDI7OcEYP3n/XyvnL8z/xC7DfrD7chjEvTt1+6p35TbSf 3yx9ndP7jQETJ/uNgSNOPUMuuF7utYfjH6CNLzZzPakJOVf3+Snu7s/J73eBy/G+Yq07BzfAO6N2 fzlghFzzhX5+Trx+9fD7K9/86bRX+nUK9o5fd73yc8/8C3x6yJtZnvc53/z6fuSRe+Os5W1+zryh vbvArMvrnuqoy7PXg95nnTxmjTl3pxkuNX5kvojOL+T67Ly88mddXr3EZ+Y5p4fP3v1i9WQuR9/v +k3/+nYmbt7uO/Enbu+zkE9+ctC01mPL/v3qrP53HuWpJW9/Nrx3+tVj1nqe/O681M48NczdO2fi 06P91Dz127w3r81PXj1mra63Wsutj/x+n1o716NZHzF796h9x0+u2mZrOHx1H7NXIb88b33qV4/W etavmDW5utblyPuun/rp113bnzPn8776yZl5apirm7PZz+9ttd2jTl//LhOvDk+fsfPpN38G2tev 9Z2fPPN3/bqL+pWfe8kz6sWsfvgSYPPfGFP3QVw+5NV30ub9c06v/m7mrvKLqd0wZzNPbnvuPt3u u6vffIedUavpjuLlyy02dZ39aP13/wLM8fOB6XngicNtMJ8cMf+ykA+Op77ynJv9Rtrrr9Z/QJsn z97sXvtmbpz7Oqdm7ynmbfDEqNX6zGBPwmd9xa3/HXfz227a/Ob7s5fLXv377OLN1Fuod2b/HT+9 yPpZn3yraY2+8R2/avH0ferPHGzizOfdYETva+3sJ/y8R3/7jwN+fWwYfDXeU42zTVue9fQTN/+0 3/TVX3zm7T4wnq+hj5nZfAf25cB76gd3Btqf9tt2gN3dOTX28zZ9zKf3qL55PqvvU473TXzugC/n 5KmX3s1f8at+1pufHO74yehztf7qjnq0nn7MiDvOnMs1fxj8+ph+9oz7Pqv13zDF9FRvFp+52qd+ vWfz898++BHu2G5xdjH//Mn8p/zcrx/PAfbqhnlVdXrCKX56RxtenX7eZD9vsNdv4xVrrfbdjIf7 3tVu/Pq1nlxvv+Og6dzaXE8wwpk9WJ+v89bl6NNMbVTnHvTF5ZLlNMuXx8w5s/65heOMmrAn93bx D9Iv3vSbu8u1nhnf7tKjd87fa8rXDx1fDb3E7cv5S+t/4hdgHogH9Wt+4+4eWK4vDC5Y/xL0JW7f hOl959cd7tG7PuXNnfLnDwh4f4Dkmetv7a32ZvFXWb65u0413M7Ukt1XzLoaakLMPPX2ztGAqacn 7MsDV0/dmDz1cuwnTz+z/JnVy7OfPOcTt2eOVr18MXv5pyxv83OGpzU+1sXFusfb5Jnl2Ku17w65 ZOaNybd/5SevXtQTt+8/5qZm08lRP/t3/OrR+m6vz+/e5npQE2Lmqbd3jgZMPT1hXx64eurG5KmX Yz95+pnlz6xenv3kOZ+4PXO06uWL2cs/ZXmbnzM8rfGxFrfvDjHvk1s9dfGtByOm34Ven8z0MTuf vbiZ+RZT5/6NW2zqnE38iR+aqTv5id/lzQ+MmHt6X+vJ2/r6qTVvfGfVURPwCXVyzdf0/Klevr0K cfuZO0erXlzMfurtnZvF6+cMzFoe+YTL1as8Z5u+vO5Ro9+cqTM7n724efNjNnXuV3fKUydv4k/8 0EzdyU/8Lm9+YMTc0/taT97W10+teeMz44sZX1uol2eeXHBnetEbzuzJxeZ9nVWj9+TL6U4xcnG0 +jDzdxfq4vTeod7emb8Lec/M8P62mMf/XYvd68Ozty/q7g615fiyebl+czZesW2fc2f01uxrLRfc mHz7Oad3ducjb+q9A63/+N78iqEh3KeHuDPf3wd5fOg34N+e5R0/fLxDz9N94r1vausBzz9s3tT7 9XOG9olf+dOvM2/ZsjqznPatnZ+yXLO89q2dv8p3mrvZyfdOczd74jf1s3/X46leX/lmcGrCn6un Px9o6kNviJvFX2VvKO903/TetPWhrpe9zztnT/3Ub36dMT+Fz2KW176181OWa5bXvrXzu3zHv5ud PO80d7MnflM/+3c9pt7+9DPi3Mw+akJNfzbkObuYn5/OP5GrEjc7tz/5yescDSFGJoo7A29NT7j3 Vc1cf2rild/Fuj5Pe8rZanVmOe1bOz9luWZ57Vs7P2W55o13N9v4YHeau9lf6de9p9rb+++peZNa sxqyP1P9WYP3xA99Q3+zs1d+8LyjmuLehxfR+6b2Ylzf01f/fpRb/81PTD/54vbz2fVvllvM2pm+ E7cnyxWbuzvvDHz662F23sxs+vBvczjE5F7o3/D5T/0vwNuj8YL42oIX5C8zzCeXvr/8ymmmNqp3 J9lvhHP/sDjzBjXyzfqbi1PP0PcdPzzke5++d35yvINsrc5errj7mLeWR978Oqd+4ucNzX5vxfS6 83M3Gnnq6+eMbK2/Wr3IYuTpx1wPMiFH/EI/8frJL9f65Nd5vSa+zbyl3lNnD7e8zU9uecWqeern jeSpFzN3b7m9oVw49r/K/32/1M85/eYnT096wl4/+2t6fZ78qqeWJ25vBifsyYS7rT/AXx/OzJOD xys/59VufmLlW5PVF0NTvLV+YmS1rcVOWR/z9LM/6SeuTzMeBFzCWWsxMlGufTndy/w0e8cPH6N+ YO5z/uQ+uO5/16971E4/e+fuAp/3ghHivb81nDs/ufCIV3541a/63qvX5seMkF8/cD2d18Nanhz6 +kye8+pOezYf/cxP/eSpO2V5874+H1ri7j7m5dmfNMw7K99ajn357mJGdNb6mj67bfr4zupHTbjf /kIvXD6YdXnWZOvu0oss3n2ty938On/q503N/nuvftxxd59cfORZ28shg52ifD3Kdd7ZrOUXB6Nv eAe/GzTEJx9OZ9bVUvu7hnMzM2u8533MG3D52u4o72+p/+lfgP2Fcj6sLxS8L+r0cn2hm5+aZmr7 uZv+5Ncfqur106v3F4NH6F+Pa/L784rJtzfzvHqCbX7iZGLeVm9rOa/85F3O16ce7qpH62rACbX1 Fdvm008fM5rJ2fzkyVU/Mzxiuw+s3mif+uHpLj02P3iEXHeIoTGY+fMxcTjMxZ/4oYFfHZihB701 ubX71Dz1k0/Wr9is55473Tt+cPU+6U64z8ot9WjNbIZ+8pz/XX7u847Zg/P16r7qrX0GM971q6cc sjV84uQnTq4Xff9sbH7y69HaufvrB0Zs/GLUfNULneFdnauHo1afYno0v/Ir1z3u6GzWp/vKe8dv 0xWj1o+6++kJn/XqPj+r+0Qvv7tn/Y6fvr3zqZ9acmv0Jz+91fCcU+tsesAl9CBbq2FeP3pC7Op+ 7/WYfpO77Zgc+vqhIczWcsTJYFvI7VwdfLVkcbHpt3nVY/Lr2f2TN2en/e/41aN1d4Mb8waflbm1 nFd+8vSuR2t5T/wmx5ue+PmcZv+93/34OLfujs66E5wvuNMPnjNr+fZzB/OGvTz+e2QNz7kaeuc8 p71zszr8CHlmsWZr/Amz9ab9IP7dHz3s797tPm8w+8Kd0/vywebcf3jIx6f/rxV92XDcQ61XMWpx OPZka3ACnrcxI6qlr0bOxOmJzvFp/0H4hc0dzOS+M1ODXh2Yu6n9SwAOsWmuyZ9nejH3PbnHPP2q eTUr97t+/TnSi7tf3QDXO8zo6kev5/RjZqifmflP+tWr97PnnfvgE/W7kPeeV425fr2vt8H1narz vdmbn/hNL7TTz376uaf3Tb9tNv2eaE679CJby9UX3AAr727W50X/Hb/uqRd1Z9t9xby9GjyI033X 9PqsfvqWR/0dv7677sHX2/UHI063OXNOr1avYtRE+bNnxpf/zfRGeIY77L/jN73wPPmBE953dVdv Pf3UMHem/zaDd8K3mV7O1LKr+5gTYFPzMbiZyf8Jv+nFbm+m3u4rpl5d+9N9cA35MzMHE6f/jh8+ BLk/y2Jkwh1X97nfO8zMqdurBTPE7MsHa+/fBWjE6wX/J/2mF/7upSbsydbVgRnFxZw704PM13/t 3499Lp/pDnNG9tmL4QFu2PszOjWzR9c76tV3C8efLzX1as2c0LeeYmRw74RfD2v5zKm5wegMTI15 ztX9bZlD/g3hHbwQa+7yRVF3JsdvjjxevpiaYtsPCDz1+nYX88bk2svRg3x3S/nu04ueoBejl0ct bp4YPaGmnuJk9ETn1tfk+pw8ZxPf+id+6vSthpl9a7nVlufc3NlWw6sXPTy+5h/s3mFtRmdNbnSv OJh8MGvzxOgN/ejd9RN+euH7Vb/ttn/aj/0+29198IhyqdVYO4e7vSdxstzpwawxec4mvvV6qyFv vM6rgWvfWr5e9OU5N3e21fDqRQ+Pr/+//Vnj2fsueAd999Zm+fLoCXrj3+LHPd5yd9+822dT47Pr BX/jiJPlTg9mDb3BZg1W/eydgRubhzNyNZPbGVzmhLj9hX5+dr7VMKuVs+HbTSfs84L9RvactN7g nNxwDubsJ/z0wverfttt/7Qf+322u/vgEeVSq7F2Dnd7T+JkudODWUNvsFmDVT97Z+DG5uGMXM3k dgaXucGsvThZXf1O/HKmR2fU8/cFsC3KY14fb1PXu6wnR25zOdT93Qne9OoN9fEZ6sccnOf4R+Of /j+B7sPzQnxZ4L6giVfTfyjB85siRz89+oPjTK5Z7vRybobnN3XzUm+WL9eMnxx/IJw90XhPszp8 5w+uPHfYN8/Z9CuXHcTUXOj16czndOZ99O5wdpf/Kr/tDnfd3cPM9zA95nPpN/Hp/67f1M++fp15 B3Nv65xaTvEnfv3zWe07furYd/KT0+x985nE3/Wrd2ufRT/9J6d963nf9CtX76kpxxlca+beR+0O 6lehx0/7sXfe4a5XN/kepsfJb+LT/12/qZ99/Trzjvkuy6GWR33yYjYD3RZP/Labpp+33Pmp0U8N dznzRmcTZ343U987xMibn/NXM/byVV5rfU7Zu5mj06u4WrE7fzlf9as39fw3Rn29y9zdYj6Tuvq5 qxx15K/61aP15td5a27yvonrY+78VG9ecPvsJz/wqZ+92js/Nfqp8Q6y4UyNOPluJq93iJG/6+ft em5+zmb2bnDvM5+4d/5f8XMPvvXGq89m3R1qyc7F+u92n0mOe8zi01tcT33orcl+Tf3Unf79hd7f rfRSawZvnHaV85fX/6ZfgH3YviheuC93vnzw00ush75kPfxm+QMi/10/b8Pbe/RyZg+HcIeZuRzv 864Pwa8P/Z5g6vWdz+tu/+OFJ1xxc3Hm+unfDPcdvz4rWqJ+veeafn5u9/2Un3dMP++Z2avE1Yvb 169cajm/yj+lPq/vqDr9xOrn7E+mvwC9uc/vn5rNTx919mR1s5bDXM7Uz356qCsOZqAvRz8zvPLL tXZejf5brs7aPb1n+pXbmTiZL6I+zquBIy6fTIj3Z++a7L7Omrvrp/3Yg/+8zz0ze5e4enH7+pVL LedX+afU56VGU51+YhiocQa2hbz+WYM3veTVo1j3qGU+OeqLb5gezKzrJ0bWyzz9wOUzs77z8+8d +eXqZ4ZDlONdZv3sL8X1qY/ZGT0h3nznh8Y9ZL6I+tnL+yDkQ66QvJ/w63Pg3/vcAz55cudtk6ef HmRjasWbJ8c/u3DcJV9u73a25Xnb5qdn9cW6Sz/mk6O+ONjs9WBmzc+Xe8Ts4dVj1vLhWZ/8/DmG S8CXS4+3e/UClzPn9VMH35j84tRz/soPjXvI3ogP0Szvmnx+yhGR9xU/vcjW+FLzc6w3GAEOZlQD 7vODl0utHxx15j+g/0V17gfbuP5Zm/PeqLFe5u6B0/umXg287Q7wfyT+7b8A+1LmCxUnz5kve+Jw ffnbjLk/ENSEPD2LvfLqD0hrdrTH0+CH251g7hWzl0+eNztjB1+E+qu7PnuDvBMXvH6Xw/VZH/ds fs7U+gd54s7JzuYO+vnc9ev++lE701usPdi7fmiM3iuGH8Eeb/gAxsem3bD/88vrld+wX1v8tx2T 3HdE3b7cOz9mRvWv/NQ8zfWupvuLb/V8J5unz7rpwerRmtk7fmhnnPzqC2fTTi8000/Oye/ER+fO qW0vT+5P+fVuvcXM264TpofvSI+vZLy2PfWa72j25f60H95P75PnffZfvQ89od/V/f4JZ9sjqzPr r/ihNdRPP3F5ZDjyiltXI6+YPHP95DtrZkbUa+O/4zf1s2efGPku5JUzMXox8ndDvzufvi94s69W vzvOnM1/p0y/Vzvx853APf370dvu/Lxt+qGZ8cqvHtSGO+zN9RMj10ft5udM7cnPOVnNtsOZPP+9 R9/99A1n6PVoDZfe+6zBZ8wZPUG2tsePG/15oi8Hnhi5Mf2Y9d+j5baufz2Ll099N5vcf7z/N/4C 7EvpN22+1K0H6zcJn8nzh8cdZrXo4airn1g1E3M2szz8+LI3yz/95eac7I1i241i9RdT1wzPuZl5 3xec9swJd6Cz7nMUd66uPVi5847O1Jmnn3g11sx6n9pma33MejC3fsdPXzKBh++0NZ76w3O/GUyd mHx7OK9CLlk/NXd+zO7iHT+4m5+3sYe6PZj3UTfqV4012a/qpp893O0+tXqRG+rB9JALNj3Vy7GH S9jra76mr/3kkatt7Y5yrZ2RWzOvh3V504O+Hq2Z6dH6HT90hL760VvPn/fyW6ORu/nBfRJq6/dE B4ebCT2u7vr0tmJbXW39iqObvV6+N/vy7vxO902/7q6f+8xP/LzNjNZ9xcBPfvLUwQXzNrM85gT9 xOphLUefD/GirV81s/Y59Mev2vqrNVdj/RU/d2z5iZ8c79p8xOR478Tp9XP2JONH6H911+fJb3Lt 8ep94npufuVP3p0f3k/88JA3/dxHfuIHp37o6H1OM/jJT446/drLMevXHkyNNZmAx4xoLk7d/oM8 MObExrvDP0R/fLDbdy+GF5h3FacuDrc3OO89zpltIdc7Jn/2enBHZ9Szh1usfZ8D/F8R//ZfgHlJ vFBfXr8Jvmjnnc2X6zdbXK5ZnAzGF9EdF/L7Z3n1Uidbnr1ZvM/ArF5yzdNb/C5vfhs2PU73wXNG 7f3mzpgTxeRdk+uTuc/m3FyttRk1PP9ftOhn6GOuVu7EZi+PjA+hH7vFPga/Puph7Z306tWWI/aO n9x6g+nr3Fzcemb13rr1+k2O3C2rYR9f1cov5l3qyJ2Lbzxmc8eJp4/5jtf9dzx3e4fezXL0MVfD viehtvdV13nxWcsz62c/+e/ep/6Vn3vhn7jFrftnzV1mOWZxc3HrzY/ZV+9Dq7d79SJ3H/0MueD6 mCe3u6j1K79+U0/feXXlFi+/nK/Wr/z6XKcdd/d1Vv1p7+RP3pzreeKd+OpOefrJm36zl2fGhyD7 s/cB/PqYenu59mp6lxxn5mqs5drL1e90H7xqrGe+84OL/wx3g08/ezX0+nRmrZe9OrNz+xNPXL69 ulN+xXviV4/W3Sm++TmD75xMdHYhv2PynalR79zcOd7FmdH7M0dPyKOe/Dm3JxvVg516cL/Y09g0 zMFnVFudtRrz1MsDn16dTV37vic1YMXL/8frPug/fszhgHljX6Y1mR9gueJYzhpsRr9Z+PALs3ly n/Teoe/U9CZmJ95Jp765XPwI77i6/fPp7l39Z/Sn/f684a9F3nl3Ty95952U7/e4uzovTr3NxDav k0ZftITaZuuLcX2WX9zaW+itzV/x07d+xWb96r7yvavYrH/ab/rf9U/uu9P/07N33t3TW999J/K3 nz12Ot/2bzOxd/3QEeqar8nnjL58583eIfe7fifv4q1f3Te53HcXP+13t2vO+i7n7L/Qv/Punj7P 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 P/HNix193nKqgzf/LVcuc/qN4589+WY0hL35Qj/x9tT6Fd+e4b/m5/PM7M+Nz3h6ronjo6aeYP77 tnU5rSeHPTOKtYY3e/wmdufHTM0rXbn1VIfPfz7+b/oFeH4z/EaJ089v2saRT2aurtmZfub6qYVL wJm/KH8Mfn3oX6x1/dznH77N95Uf3nAM7zOLNzPTt9pyrPXhL9n/rz0z0G4j12Ho///16417twiW 0oxdp2/bSufYJEEAkuhxmux6TnvG9mtPa3gsfO76TTP5MPn29hV+nJVXno/aO35L/1lgV+drP8Xt Zw0/l3uD2ROzXmlTo+cdTXOtr/y67znVW3uG5ltzH/Pkfof/Cfr9AwyJHGckZfKVK2eK6u74eQ/j 5CfWfuIZ9THS8zzy8g7dk2PUx7jiX/UnP7xW3w38dnt1T/4zfnqo9YxEMTn2qOmx7IlZ77QP5eMd fmvsNz7dS05qxDxD9jw3WPrJVavmDkcu2vQXz5j+qz3lP+uXOvMpekb3T06eTzyxSZN+OS/0d7TJ QaMf+W6tzjL5NTb54sf5c3/3ME66FTb5yX3Gj7PDZ3m+O/d5KH68o1HX+zfenyMucnTUDy9eqaHn meWhEyNPv+a0H/xc6Z945vrjlX7izc2zZc88dfoZ5WSk5zlTKycxfTLKM7Zf6uFYw2PxeeTvZx9g vKVffnZB+Ui/wo+z8srzUXumj42/1+TeTXyKk36lA+9e1+zh3af9fjtsuuBvd4nhwN6L+OwHBj8f fh/AjLmleGLm7o8fPBZx+iLqY/wgD2/qibka18eY3M49Z+KTX56bL6o6Yi7xxMgT91zuo1/zphqM 9av83Ic4LXHuwpL/qB7v3jexzO3rRW/nl1pzPYzg7Zc9dVNsnrV3M07aCVNvz3rls8Jb37U6/e03 3n15RvvqVrg8o7yO9P25Qu5S5z7W9o2NU09+8tuv9c1b1Y3rY7RvdN9V3bg+HeV1xJ8Fn9X76fPo /vs9+3rBWvn92+GB6GMEbb/srXzEV1zvZ1zx9DFe8fSTfxWv/FZ6dcYV7y6uj3Gne/aOeOlrTP/J r7HWWTeva/dpXL196+Z1Lb9x9R3lG9Gx4LHa54H+mJd1R/T+nKJ35dd66zzv5Ke351b3TPSORvd8 xsP7ek+0+OUfNju/3rP9rNtPnXG1h3pirsb1MSY3c3Vg5C5xMWvP7e974PmZycNHrZ5+LvaseR70 oydOzur6gX7GPYf7v9PP/YnTEu/7wp2w9Ou+Xivtan980Oa94eoH/setP/n/APNh5cPhB9kfYuKZ w8s6ve56qPfhsdbL2HvJ2+2jBg/4rck68/QU14OeuT35qzpxcz3STx+j3FUNLgc//9EjZ9HLfeR+ NL+/qRGT86wfPqlJP88j1rX4tLcYHHJePitgrJWfPXXU3jd9wV14rXpwsp++9KjpJydzOLu18ttp dr328+5q6E8r8cyb2372W5N15vKN+OVn6+xaY21fvbj1ys++MXWZ2zfSY0/WKrf3QQoe/PZeeSQ+ +eljdC+i5zOfOGLOz7pj+u785LWfz4e+8ozyrTtmf+ehDj5rxX10H+8rDh6eO/dP7ZSnX+ZwrVd+ 9pObe2Q/Oe/wS4/Mc39z+56nIzw5netBVCfXWk7X4vBdaqnli1nL7Vr8yk+dUZ01evekl7lconyx rnne9JJDXPklh1w/47v8eh/O4zJ3T/EpNofau5mja97kBeb3037qdn7NU58xOeD6Eaee2u417rzA 8+7yiO1hbUzO5JdeyRVPn8bwc656w/esRnVGNda5h/nkB19/cp/ZlUYPI5rVyrPqJzf37J6cjjs/ er5a90fUf/ofwNOH5INhXHGmh0kN0dwviTV+ncvnYWLZz5g9cnqNobVnTnSp0Vdu+sjN6B3A1HYu P7liHZPzLr+8A54rX/bOHmfrGg5/jOhjhNsr72IPvudxP2ftXkY1GVOfODk9++bixF5w7q7kZp76 FQ6HXvazFjem5yqfuGIZzSef7q1q8Yzm6dtY13LFM5rL6UhfjlHOVDcm10hfjjF75sTkJp65nH6W 8zvgPnKt9cm6c+v0Sx19OeIZs7fKV/zEp/z/6ee8+1zOib655zSmRmznR2/lp15P6+Rnj/7OL7nm Rr2zTj/7HeGLqZ1ic6yNqZmw7JM3x9qY/AnL/sovP+P0IM96pQfn85CffvRc9q2J+qtXaz1pUm8u 39r4O/l5Vmdi9C5Esem+zip/x0iN/fbDi6X3o/rxee785Hp2a+KVn1x5RvDJT74xOanNfOKKdfwK v5wt58qzrfbjXH6+6sHQ+h+z9dFTXuJoctkTo1aXmHlG90ms85/x63O09x9V/41/APsB+kH3w0jf B6h7aBqDr9eqn35y1e384Eyr/fRY7b/C8W6tX2x6ntX9wFjij+rHvKjl6vtVfn0Gal7uP/Wn88kz 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 Kr+eAfv28r6eLeuclf2cQXtRp57an3Pg6UdPjHy12s8afvuJrbzA1RuTe+U3afScevj1/d1v4tvz 2dNbnPiqnx69r370Oa+reeLE6XzOLnU7P3lEX3iLv+rn2fQx7vzseV4j53HhA95c+0T75PLFibs1 7bnjn96ZwJnAF0zAHxh3reHvNLvetMff6DfN4VXs2Xlf7fMr/V7Za6fZ9Vb33ml2vV/hx/67M+x6 0/n+Rr9pDq9iz857t887vdhn57frrc640+x6v6Mf99ndadeb7vs3+k1zeBV7dt5X+/xKv1f22ml2 vdW9d5pd71f4sf/uDLvedL53+017HOxM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4Ezg TOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM 4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4Ezg TOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM 4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4EzgTOBM4Ezgr5jA/wB+/+M0OZHT2QAAAABJRU5ErkJg gg== --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Disposition: inline; filename="Screen Shot 2020-06-19 at 12.26.46 PM.png" Content-Type: image/png; name="Screen Shot 2020-06-19 at 12.26.46 PM.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAABIoAAAPACAYAAABadZJxAAAAAXNSR0IArs4c6QAAAJZlWElmTU0A KgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAA AAAAAACQAAAAAQAAAJAAAAABAASShgAHAAAAEgAAAISgAQADAAAAAQABAACgAgAEAAAAAQAABIqg AwAEAAAAAQAAA8AAAAAAQVNDSUkAAABTY3JlZW5zaG90arIYIAAAAAlwSFlzAAAWJQAAFiUBSVIk 8AAAAqlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6 bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJk ZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDov L25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9u cy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVu c2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjIw ODg8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ MTcyNjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0 NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlm ZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllS ZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1w bWV0YT4K08pvdAAAQABJREFUeAHsvXmQZVd953kyq7L2RSWVVrSVhIQWhNgMzSLaQsgYbJbGxh7C wEDbYc+0cbs90+NohyfcE9ERxIT/GWOP7bGh7cZmcbPZBmxsMGsbMJsBIyQBAiGEdpWqpFpUVbnN +d6Xn8xv/urc++7LpdZz7Hy/7fv7nnO+7+ZTvcN9L1OqoypQFagKVAWqAlWBqkBVoCpQFagKVAWq AlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagK VAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQ FagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBV oCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqkBVoCpQFagKVAWqAlWB qkBVoCpQFagKVAWqAlWBqkA/Bcb6wSpqBRVwzWczr2JZDWrEg2z5EWyswhnzpdixvg5hvVbq9RzY yNHFMwrW54p+iQdMrLFO6n3tcnh8zpXgiRzag8/hexoF633RL/GAibW2tYBvs8vh8TlXgidyaM0+ h+9hFKz3Rb/EAybW2tYCvs0uh8fnXAmeyKE1+xy+h1Gw3hf9Eg+YWGtbC/g2uxwen3MleCKH1uxz +B5GwXpf9Es8YGKtbS3g2+xyeHzOleCJHFqzz+F7GAXrfdEv8YCJtba1gG+zy+HxOVeCJ3JozT6H 76ELW6p5r/td2FhrW4vzlfzl8PicK8ETObRen8PXPwrW+6LfxRNrbWuJnDFeDo/PuRI8kUNr9Tl8 7aNgvS/6o/C0rSVyxjjOMQqPY1eCJ3JorT6Hr30U7ErxtK3F11Xy41pH4XHsSvBEji5tqMU9iUOD tckySvylHPhqV1mBNavMfyrTc6H7HpUb9hPxiumhNj7nyDKPLHly4D0u+Z5TDzF2VB79UrMW5+vi 8bn6+HBFS6+sfvwFJmJjTK/y+PBEbIzBe6/7Xu+Td4z78FSNpcpgoAm2b14478HHVo1RckEntKFC jI15xV7Dxx4rjZmP9fm6VNPPqf5agQZYtPAYH+s6dfmxFrnFp58+GjM31rnhgb/Nlnojj/eCx1Lz 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 Dqb9mXs6/99YZt60ZmPaPLE5rR1bmwWOEltrdasCVYGqQFWgKlAVqApUBaoCVYGqQFWgKnCaKaAv utZZgc4M8tY5S3AV9N3G/v1BvLGW1cmBfqhTU07DY+U8jnWv4QvjfcSyKzZW+qCIxWPjQuOGqLto YMiBcasnS8LLajg29lOTxU+bNm3aMvcN+A1B10NzA9G996TJz34mjd96S5p+5OF8qDOd1p5xZpp5 4hVp7fNfkMZ3PTHlv1nfRVOojaWZxx9Kk/d/Os0+9Kk0e+ju/DcFD6TxdWel2U2XpzXnvTitPftZ +cBoY+5tk/Ro2vEsy4GpA+lLu7+UPvLIJ9N3Dn437Z3el7aMb0yXbLg43bTjhvT8nc9JZ63P84zA e/RMNVMVqApUBaoCVYGqQFWgKlAVqApUBaoCVYFTR4G5v4jWnBnM7YqzBN6UyypHjM95g/IcMFGb o2r6dJah4fhB5mheDpyoyzIvOY/jfGBGsit1UMQGuyYHgwXLRmRjTRjq+LII7zn5DA6QFJd4x/Wn 9AB32fx39tL0V7+Upt/x39K6B+5L69atT2ntnGz358Oju76Xjnzx82n2FT+V1tz8kpT/bl8X3Xxt bGw8TT16R5q89bfTuoOfSxPr851E6yby5ZSXNf1gmtr/L+nIrR9Nh8/5mbT+Sf9LGlu/Le/an/95 qkXOeObde3hP+n+//9b0nr0fSfvWT6b1G9alNfk6vS/tT7dO3ZM+fu/n0wsefkb6T0/8D+nSzZfm Ezeu00VUNagKVAWqAlWBqkBVoCpQFagKVAWqAlWBqsBpqcDc9xjrDb6+r8bf6PPGnDOFYW+oHSdf XOLQj2L4iMkRZ8ginGIN54VzUFnmo292mVTFdi3cNwkIIRTLj+tgw+Cpu1CqteHoY36w4ml68kfO Yi89CzYfCE3f9s2U/vgP0uZ8F9G6rfmwJn/MrDnM0YHO2ok0sWVr2jx1JI2/8+1p6pP/kFKfu4p0 SHTwgTR1y2+lzZOfSuu3rk/jzV1D+eNgM/mupLF1ae26LWnT1pm04eG3pcO3/0FzB9PCwtq9I1OH 0lvu/KP0x/s+kKY3r0lb1+aPmc3mj7LN5g+0za5Jm/PH2dZs3pj+bvaL6Te/83+n3YcfyttB3nbe WqkKVAWqAlWBqkBVoCpQFagKVAWqAlWBqsBppADnCfENM3nOFFR3DHmsJOt77qEezkuw6teAD6u6 frxHuGUP38yyyQIBi2XhisnJMsgR+5piD1j6XTivyRcPONlF9fyX77yXuRdsvpNo9sD+NPWed6YN Bw+ksQ35+4J0R89M/mk+i5ahjc2Hh2sm8mcYJ9LMB/57mr43f3xsfNhH0MbSkTveldYf+XIaX791 8CE6nUHmnzGdVepHcT7cmdi8Ja194N3pyAP/lO9W6r4BbO34RPrEA59O797z4bRtw7a0JvfPaL3i zVY/isdyvH3d1vTZya+m//6DD2RhkCnPWUdVoCpQFagKVAWqAlWBqkBVoCpQFagKVAVOcwXm7iji zTJnCm6lEHX8WOd8w3FgZTXoaU4BLFbezy3wsepdlcGil0MeNyyuuCEw2ji+LD4bVSxfP17Dz+n5 PAdBqlF3X1gN3yP1sbknfYAoPeY7g6Zvuy2t/c7t+QurdUiUl9589CsvTavTAYycxuSHifVpYu+e NPXFL+TvKvIpA3m+e2f6wINp7KEPp4mN+buHpIj/iC+PWfErn5e/fuNkmr7ng0PvKpqaPpLe/8Df pMnmO7Dz9x9lijHxZSf/pb+5LeSE/j/nNuVDqL/e89G05/AjeZaONWsZdVQFqgJVgapAVaAqUBWo ClQFqgJVgapAVeD0U2D+HGFu637+oBQxyuhdOD3yfUQsNe/xnN6oe62t3/PuwzWSXe7pQOzXgrSJ KAaLaltwzCOG+pwTHDlicMRutRbxKYfFV19x6Iuup771zbS++VhWpmgOiXTakuHZX/gSaCVyPp/E rJ/IH0u7/bbWzWuisbF8ALXv+2li9qEc5O8kmmtvnOYOJfHn0my+o6mp5b9VlnnX7Ptmmp7cnwtR crHmjeX8Y0ceS3dM3ZXWr93Q3D3UEOQDIdFktoFtDoxyJv//eP7movvT7nT3/rvTmqF3QTXT1Ieq QFWgKlAVqApUBaoCVYGqQFWgKlAVqAqc8grkMwGdG/iP9kzM/j3Gl9XbcIbexHMWoZzqGv7mnlzs Uxz5mua5vHzV8zv9RcO5FxX6BMtqzhP4JjSf4sipRZc2Rq9qGthBtDhWTbyyESc8NfnUwZbisfxN 5syvnuKYefTRnM/tDVIPc1TZNJfMPIPyOdBdSI/tPVoVZ8/Qmal9menIXHaONxvomqU1h0YZ3JQz 7+QjuXHSmRb5+vjY5MyRtG9qf3NopLbxhjNXMlezW7Y8N5F6Ds4eanrY2jXra3sAAEAASURBVCLS GlQFqgJVgapAVaAqUBWoClQFqgJVgapAVeA0VCC/L9cbfX6kgM4dOO/wMwhqwmp4j3y9A+dH9bl3 5IN3+0rkoRz9TSI8lOrwCOpz0trFB6Zo2WSxuMRkXKxi/cS5WLROvvA1JX7kUc0HfMKDpVe25M/3 zz3p83HR2ZA/GsbhCmwN0Oiba0fT51zGNh9TK5JZMv+Z+tmk7xua62s+HzaeGfKBTuPLZkb5+sm8 4/lLqXU3UtvQ/ULjY2vTpvENGZ4lnVuvODVYcV5hw62setalibRhPP8ltwGswdaHqkBVoCpQFagK VAWqAlWBqkBVoCpQFagKnM4K5DODwdvmhbOMuXfZvNuety6TY3gb7lZY4lKf58Bi2961s06vk4t8 vWIOW3qBAwgBQnqRWFocIviivbdtDcqDG2Yd6+th7mE5rze+Frtu16401TDoYW6K7DYbgbk5yMlB vsVoenIyjV+8a2HVR7HqzCcfEW0+P82MnZGDubvDxKXbfzJHQ6uPl+mvqum2pfwzO53vJNp0ef6k 2twXarfwbpnYnC5Yd146nO88Uvtsw5HBDU+OM69cbUVmZnY67Rw/I5236bxmXQXamqoKVAWqAlWB qkBVoCpQFagKVAWqAlWBqsBpp8DczSXcraG30Iy5d9VNKJ+arJ97OL7kK+f9pZg+am6pRQ7yS7Y6 /Vjp4cIgWCmneT3POugh1hqFU74N73lEwopHvnjYrz56plz7mJ5O49denw6fuTOlqXxQM3fYoobm sCXP2ExKPn9H0eH1+buEnvEjgy+QbmPOhzNrtlyUjmz5kfxJssPNgdBsQ5gbdLDT/GjBc1san0mT h/O9PztvyncVbcgg3+rCJLo7aFM+KLpp63PT+OHp5g+nNV9nlLm16YEY+X6ifLDV3LuUL/fJqSPp 2RuuzwdF56fpvK46qgJVgapAVaAqUBWoClQFqgJVgapAVaAqUBVoFPAzA3ysAAtvtQdvuZUbvPWW tzB4E0/NLTWhnbuU9+8hasMuzLoMj4OTZVAsavXFLipY4BuO86tfdXhiLBpq7scnSBh+wNHXYAff S6VSy8gHP2vOPTeNv/yV6Ug+NEr60WgOdTJVPtCZ/26rvOLpw4fSzHNfkNZefW2+A2hqgC09Nh8j W5fWXfbGdGhqZ76TZzJ/P3UmYLWZvzk40irzIdHMkSPp0PpnpfUXvyRjuw9zdNjzUxf9m/TM8avz mg/nb7PKx0f5QGh2bSZfm4+H1uS/hJZ/ZjP39MxUuuDIWennL3ptmhifELK02pqrClQFqgJVgapA VaAqUBWoClQFqgJVgarAaafA9PQ079L9vEE6KNaIZxfgVXMfvPfEXmH8Tbn6NbDuO87z+HB7r2q9 hy+4d1MGxgkV6ycuuMTpvREPD31skJheLPnIozwYbFsOjqPs7NRUmrjx5jT14p9Ih/PHxOY/oaht NjPqeGUmH8pMpSNPe2Za97OvzbNmSRvgUXTzidn80bCJc56a0uX/KR06siPfWZR59BE2HRjln7F8 QKT7naZy/mC6Nq279jfT+Ab7qNo802JnJq/x7I1np/98+X9MV03vSmOT+WCpWUtzZJQ5Z7Ioea6p jDu0Nf2fF/9KumbHtflLsNu/JHvxDDWqClQFqgJVgapAVaAqUBWoClQFqgJVgarAqa/A+LjeoC8a Oj/hQEfnDP7jwHgGIR7HEmN1pxC+rA/uInJO1YXjPMd7yJNjXucc6usblZcyNJlPjO9ccSOqkaOf WDVtUiIoR76E85r7uW2+1/PyPW5wc6eD8ttHPmQZW7M2rf2Zn0uT512QJj/x92nd7t35AGYqbz4f uqxZlw5t2ZLGnntDmvixl6axLVvzrToddxP5TPnun4lLXpYm15+T9n//HWni8DfyH6t/PCN019C6 NJm2puntN+Q7j96Q1m6/cPA9Rd7f4uvQ55ozrkl/eOV/Sf/t7nenTx74Yto//njmm8xfn52/7Hp2 Y3r6uivT6y/62fT0nc/Mh0Q919syX01XBaoCVYGqQFWgKlAVqApUBaoCVYGqQFXgVFNgZmZG5wh+ TsGhjed0FiIcZyLuR5wkUl0DvHzhNOCSD4+sfpibmiznJ85Fn+oMr5PrtEs5KIoTM2kprw1T94Vo Q4ihPL2y+tFwiz+oLDyKWzzU4VTMD/MTqxu8/O6RP4I2Nj6e1r3oxWnmR56Vpu+8M00/sjs/JbNp zfbtad0ll6bxs8/Jcd5S30Mizag7ffLHzibOe3Zau/P6NL33O+nwwXsyx6H8pdXb0tqtl6Z1Wy/J uxvvfUjERnRYdNGWS9JvXvV/pNfuvyvddeCu9NjU/rQx/0W0Czc9IV2+9fK0Pn/fUb2TCMWqrQpU BaoCVYGqQFWgKlAVqApUBaoCVYGqwFEKcI7A2YOsfpSXZTiOXKwrr7MQhnqI4aTmlprzqe5riDXv H9lfykFR2yS+MBfJF69excOGY9ynTzn/0dx8GzkYrHAcJtFDrZ/VoY7+otnmbWn8qU/Pf1B+Yczq u4vyR9SWPPKhztj42jSx87r8XUHXDWjydM1f4tPdPjqAWsKYmh2sadfWy9Jl2y9fYMjcU5m3HhIt SFK9qkBVoCpQFagKVAWqAlWBqkBVoCpQFagKuAL5o2eEnCPw5lwxQ77OIzSw8sHI0qc6eLf4XncO 51XeB72y+Kq77/he/lIOirRIKRY3ESdkM1gtVEMi4Stu86kxDzF48ljqWOH4UU6D3vw91M23Ug+y fR/15+wn9X0/Kz3y9wbpe4K4fFaQvjkw6v4O7BWcrVJVBaoCVYGqQFWgKlAVqApUBaoCVYGqQFXg 5Fdg7utqdPbBO3XOFzgSwLJZzhsU08N5hVvwsupxHmJZOITToCYfPvkM58H3HnBD7fwR2VDkAkAT xaGc5+NiiMFhI49i1UqDHgRh7bL41OAg1t1G5GTH5z5vWJqn5qoCVYGqQFWgKlAVqApUBaoCVYGq QFWgKlAVOI0VyJ/y4QwBFRTrh0MYziFUd6x8aljvcyy9cHKGgfV+x5Y4SnPAo97eg0l7N8wB2QR9 ilkAiyst3PvcFw948sRY5vI1D6vpgEh8+hEW/Fjz0a6cqKMqUBWoClQFqgJVgapAVaAqUBWoClQF qgJVgaqAKzD3ISSdIegMws8TiAX3vPucQXC+IctZBjnHR1/cGmCxygnrQ7zU4fG7kah5T6fPQjtB HUWfUL7Hsc1rLJ4NYr3Hc+DhoIZVHz5YuLibiDoiEoOrtipQFagKVAWqAlWBqkBVoCpQFagKVAWq AlWBqsDge4MXnzNIFc4b/DyBHOcVwuncgTxWdXxZx+ewGeRlGfQ43uvwcjhEjHUsnJ12KQdFbZMN m5y5hBOHfjRin2Iw7guL2Piy9GOV04ix58brHUWNRvWhKlAVqApUBaoCVYGqQFWgKlAVqApUBaoC VYGgwNxHzziTUJUzBrd+zgGWOmce9JKPlrqsBvVBtHB+4nk/l2Eer6tXa1ONunK9BpvqBZ4DafK2 yeLCFJOLiyvlHe911ukc7gurWLgSBznq+Y+JzcCfW+qoClQFqgJVgapAVaAqUBWoClQFqgJVgapA VaAqMK8A5whuKfp5QslXjvOHUh0eWepYnW3gq855iHwNasKBlWV4XTli6kPtUv7qGRP5QpiIRYLR rU9xU2BlhVfd+9wXRpsiB5dysa8UI4gsPMKNr1mzRpx1rJACukPrwIEDaWpqakUY9acIt2zZkuxP EvbiPXLkSDp48GAvbB/Q5s2b07p167jtsE/LPCYfRjZrOd6azC9oBIc/Cng63XnHnkeQqRd0ORou dU3LmbPXpuZAS12fz3Gs1upzVr8qUBWoClQFqgJVgapAVaAq0EMBnRno/EDnGpwteMwZBGcLxJw9 kJcll91mxFhJ8LEW+8GpR1g+ckbsdeVGHqMcFGkBGiwaO8gOHsEoYjNtdccKE2PPqaYfcUp8BvkY OwYfbGPn/tQdfdUuQwG90bv7h3ent/7xW9Odd97ZHO6MesCzMP1sOnJkMm3YsCH9+q//err22mtT fq4Wyi2e3rDqYOad73xn+tu//dukA57lDHHNzs6kl770J9IrXvGKhm+UN7T5IDI9/PDD6c1vfnO6 77770vr165e8HM2rtWzbtj39wi/8QnrKU54y8gHaKJPrsG3//v1Je9i6deuqzjXKulYTq8O8ffv2 NdfQSs6j3wNpuHbtKC+1gxUcPny4OXwd5bpTJ8+b7GoOX99yDow2bdrU/L6v5lord1WgKlAVqApU BaoCVYGqQFVgCQro7EADK58zCQ6PPOYMBEuv+snJasRYOXBgmJe5hNEAJx8e+RreSw3r9Qbc9jDK uxcWo0mYvI2XPBsjduscjpMfY/rIY5X3TXtevn5U57AouwPu/MbGscrXsUQFfvCDu9KHPvyX6cwz t+dbtS5LmzduSlvzoUbfN7g8FYMDkdl0++23pU996tPNQYveaPc5KGLpt9xyS3rggQfSz/7szzYH HOIUf9+1wKODksceeyx95Stfafpf/vKXj3RYpDnF8cUvfjFdd9116alPfepI+2Adulynp6fS3r17 891J+9P73//epnT99dc361rAjebpIOzQoUOLDkZ0mCW9v/CFL6T3vOc96QlPeEJ6wxvekM4777zR yJeI1mGNfrQOroklUo3UpgOVO+64I/3Jn/xJo8lKHbBMTk6mjRs3pp//+Z9PT3rSk0Z6/qXDZz/7 2fSRj3ykuXb76qE5d+zYkV7zmtc0c4563fcVTtfJl7/85fTe9753/iCR318sL82KS7/DymtfP/VT P5Ve9KIXjfw72netFVcVqApUBaoCVYGqQFWgKlAVWKYCnCuIBj9arzGdziH8kIczkFIvPZGHHq9H X3w+j9f9vKQPV9Pb96CIjTCh4lKOepfV4iQY1nnkx+G4WAMfD4LIRyuccmN6o7waQ7x6UzQxMbEa 9CNxai16I9b3TeZI5HPg7991Z/rI338orVu/Lr3yla9I9z/yw3TG1h3pil1X9b6LQm9utdbBR7xm 8iHRJ9Ott966lOU0d1M861nPSr/6q7/a7FtvRqfyQcua8TXzb2iHE8+me++9Jz1+6PH0mU9/On3u 85/LLWPp5S9/2UiHRZpn+/bt6ad/+qfTj//4jw+ftgVxKK/jvvvuSfvywdP73vf+9N73vbfR62lP e9qSnlu9ydfdTu973/vSQw8+kNaMrcmvKrPpR2+8sXnO3vrWt+bn4FPp7LPPbjR77Wtf2xwaScvV GlrTbbfdlv7lX/4l38X10nzoeOYxOzjQ3Pfff39zKPO85z0vnXvuucWDjb571++brufvf//76ZOf /GSzn6uvvnokTun/iU98ormedcfNsDuSmus8Hy49+OCD84ebP/dzP5ee+MQnroqO0uz2229PH//4 x9O//tcvaKR5/PGD+TDz8eYuqIMH9TFU3Qk4mw9c96Uf/ODu5uC1pOEVV1yRbr755lVZZ2m+mqsK VAWqAlWBqkBVoCpQFagK9FEg/xu7OTvIWA582tr0RklY3jDJ9wMHxRrUwQ+yg16vy498pRx8qnWN vrh5jr4HRWrwhSqOk7HZaIXVQBwOieATnoMe95um8KAeeOh3vlhXOzksOdkVHXqDqDsTdMih/4Vc HzlZzTfXXYvXYdW9997b3NFw1llnLelAoYtfbxS/e8d301/99fvT5PSh9LKffGV67NAj6Vt33552 nX95uviCS/Ob2y1dFLk2mx5//FD60pe+1Nx989znPjf3jGfNhn/UrItYmutHz8djBx5Nt91xSzp3 x/npCedflA+jdICnS6F96E2+3uju2b8nnX3pWemxzz6cfvf3/5/cMJte9apXNXe8jPK8joItrUoH aXvz3U2HZw+mC688L73t99+an9sfpv/t1/5j8zG0Ufn13D340EPpz/IdNNsOPpa2bFybvnr3A+mr X/962pavWd1FdemllzZ39/zFX/xFc+jx+te/Pl144YWNX1rjcnO6i+db3/pW+p23/E7zvU46XNN1 q+dCQ3Z6zm9eefQU5leL8fGx5jBruYeh4j/nnHPSL/7iL6ZLLrkkX5ePN9dPibeUaxZpD3rOPvOZ z6Tvfe97I70GiFvPpw6JdJj327/92+mMM87odcip7+bSfLojTK9Bf/VXf5Ve9rKXrfidRc1zkV9f ZJ/0pCvSv//3v5IPtNbmg6A9zaHQI4/sSY888kjzo7vWdMeh7q7TR/tK12ofPU3a6lYFqgJVgapA VaAqUBWoClQFjokC+veuDX8TqXMLHzqT4E3s3DuV+cMlYvVEDniw4gQvX8Njx7nPQj0nn17m9VxD 3vYwykGRT+oTRW4/uKHmC2RxqpUOiKhTYy7h4Yk15f0HrHIRS012xYbe7OgOgrf917elW795a9Jd LbqbpPSRixWbtIVIa9FFrUOr8TXjzWHCGdvPWNHDIr2x/9rXv5b+Jn805j/872/Kb+In0513fT+t mV2TNk1szPP75XL0QvWGUR/t+sI/fT79wR/+Yb5TZ1O68srLmy+wnp7Wda6nbumDN6T6fqD/721/ mC4+e1d69at+Jl166a7m8Kz7Do2xfGA1kb73wzvS1+/8SnrgsXvzG++v5+8/ekdz54M+TnQsn9e1 +U341MyR9JXbv5Ru+e7X0r7J3fkQ4C/TM5/xrKSPoLHXkdTKT8/6fCj3kqt3pYt2bk6P7NufPvrR j6VLL7k4a3Rp8/ElaaRr6B3veEdDrTuLLrrooqXNZ4tjvViV9H030vSh3Q+kv//UB9PGzRvSS3/8 J9LOnWenycm89/wxpzu+853B4U0+HNIh0XQ+UNy8eUt6/vNvaA6VlnvgoH6t4dFHH52/+0WHaj6E GRtbnFM9p+eHenTQpI9A6sBoKevSOvQ9XXoNGeXuRH1s76abbkrPec5z0p/+6Z82d429+tWvzr9b Vy77edMG9bqig0StSb6uke35tUW/E7rzafv2Q/lOtHMaDe+//778kclH0549e+cP8/w5F99StFFf HVWBqkBVoCpQFagKVAWqAlWB1VYg/9tV/8rXP/51CCTfzyrk642rrIbq+uHAiJwsA6xiYTXg9Zry MXZs9HmDwoGR6j7ExXyeb/VHOShyEl80G2Nir9HTtjBOBOgVHt97SjnVJYhqYLHK0ZPdxidu7NyT rtqKDH2J8wc//MH06c98Om1cv2FFOJdLMpMPY+6/7960Ob+Bu/zyJzZ3JqzkG7OZfKCz78C+tPfA 3rT9jDPTkzdtbe5C2bZ1e/MGMq5fbxJ1IKAvZj6U30jrO1g+/Pd/k75x+y3pKVdf17ypHryRHDxV K7HWfXv3pc994ovpa9tvad7g//jNP5auuOKq5k2t3uzqTb2+D0Yfe2M+5c44Y0e68IKL0t7H96QD Vx5I993+UIMbrC/ubHVjrfOcneekC8+7pLnTaffV+c6N+76Q9VrGX5ib+2147PH96e49s2lyzUTa ceaOdOmllzaHCrqLRd9NJPvVr341vf3tb282+brXva65s2ipOkhjHZ7osGH37t3zmq+dWJu+/rWv pwsvPS89++anpE9/8e+b5+vF+fn64d13p7/4s99Nt3z5k/l525LWb85fDD4znQ7sOZDW5Gtu90O/ nC6+9InpmmuuWdbatEEdfuigSN8JpbUOfnjdzS8kWbfx/DHGOHRnkw/dSaM7aJZyoChtNa8OY+NB lc8RnwN91Eva6jnTxwZ1N9G73/3u5vumdFikj3iJd6mD3g984APN3Yrbtm3L+9NaFxgH+ozlu+42 5I/wnZcPfrflj/U9mA+SNi2AqlcVqApUBaoCVYGqQFWgKlAVOAkUyP8e1/mCBv/i1RuDeBijGucQ smDozalFAy7qsvjOpSbPM6/nwJNbNFEI+mDmW5Z6UKQFccjDhLJsWhO4r7g02jClPLloxcuBEVY5 rYd3dOpRTH2s6w1Yxo00dCfRB/7yA2n3vt3ppp+8Kf3zP361+V/v4xu5kUhXApzfcJ55zhlp/9S+ dPu3b09XP+nq5g4F3vAte4qs6uYNm9Ml5+xKF5x7QX5jmz/WpTe5+aBFb3Lj0Jvm5iNde/akr33t a+ljH/tYesKVT0g33HhDeuSe3Wlf/i6TTZs2NgdJ6tWb9lHfaKO5+tR/KH+0TXed/MjNT0v//O2v pMl8UPWyn0zpwvxFzZu3bM0HROszbra5Q0J3rnAnlPLXPvH6dOE5l6RnXvHstP7IlnTLLbc1z2vc 12rEOryazt+tlOVsfnaeeW56/vUvSFdffE26/uKnpT33HZjXaanzT2V9vvPwnvTD79+f9o6tS1dd uSvpe48uu+yy5kud9QXM8i+++OL0oQ99KP35n/95M5U+hnbBBRcsaVr93ulOsre85S3p7nvuSufq i7LzJsfzCcOBAwfT1ddek571nGekCy46L33yg3+XHs8fp7r9q59Lmw79U3rTK85KZ+08P+24aGea OXQ4Pfi9H6Rv3bc3fewDb0l3/DCl17z+36bX/c9vaL5jiOtg1EXqutHdQDrk0Vrj64R+d0q/P56X r4OiwaGoXnZWdmhvurY1WIsOaKanjzTzas26u0d/MVCHRR/84AfTu971rqQ7wi6//PL5nmGr0jzw g9Xvx8Gszxc++Q/5QHxd2nXdU+fXAkbXrNazdu26fGi1Ln+/1fnNwdW3v/3tBgtniR+OaqsCVYGq QFWgKlAVqApUBaoCx1uB/O9VnSPoh8MfLUmxhv6hH33/x79qxODo8zw85ITxoV7OXpR3XnrIMQ95 t9oDsXg6R9+DIhEyqQhjrFyse85ryncNYZ3f/T48wksEhJClT7b5yW+0yOXU0sfd+W6H97z3PWnf ocfSj73s5vTlz3+luVtGX/SqOxN01838yDPqzZG+qPf8888/6k3oPK6noze0+olDb8R00KC7C7ac tSXtyIdFD9zzQLr19lvTNVdd09xxEHuWEmsv69dtSGfvPDcfuGxo3Y/e1PrPN7/5jfR3+SNrT7r2 Selpz7s+3fWDOxutbv/W7em+/KXC9+W7oPR9KzqA0/fU6K9v6S4JzVca2q/u6JLeuktFb/a/lu+C mZw6kj8e9/V8aDWenvnkZ6Tdux5Mn/7b/MXUHx7Ph0U/kXkvaO5Q0UGS3tTrr4rpT8Pz+yPeiXz3 yI5tO/JdWdtyfkUumdIWjsppHfv2PZZ1W7hrSG++N2/YmLZvO6u5Y+Oopp4J7UuHCQePTKVP/ODe dFa+8+PK/GXLl+3a1Rwk6MucdV3pO3uE1WGRNNUXM+tuEo03vvGNzYFMzykXwcS1b/++dOOLXpBu fumN+TuuptLarLPunNqwbW3acNbatO2src018/EPfDSt2/2ddOOP7krPfvoT06btZ6YNG9en2enH 891DW9Ole/blj8M9lN71gTvSO//rH6XzLrgwvf71r2vWu2jSnoE+uqXrjb/0pv3H4TmuSeX0o1ja 6vnbkw9E9aXUYCLPqLF+h/S87N07+C4gHWxu2LA+bct/YXD79m35d36mOYT77ne/m3+H7mt+//XR sKuuuqpZx+/93u+lX/u1X2u+g8n30LYO7eE7+eN+vACrR8/dnkd2p+fuuiBde97OdMvkdPrud7+X rsgfbRsbG/x+IpmsenRX0Y6zdqQ1eS35+LP58nSpOpPvLDzqf49pW0zNVwWqAlWBqkBVoCpQFagK VAWOsQL53776Z6t+/I1o80/Zubze7PPPZQ5ziL0nwxYNcWjYYcEgER59bniBEMsyFz5nIWDhwZJv tX0PithIiZiaT6IceTagelc/NfD0x4MeeFRXTUM+eGzMg1V+2W/e9ObvnnvuSe981zvSkdkj6YYf uyFtPWNb890qBw8dSL/zu29JG/KbzuZNYl5RPirJ3+OTv/8kf2fHjTfcmH7jN35j5C9FbhZuDzoc 0c+6dXoa2Xa2+f9n9b/8HzqYdqzbkbZs3ZZmzp9JD943d1h09TX5S4u3tR7s2BRDXb2513eUxDsv aNSb28OHH2/ewOqvIn3zlm/mu1P+Nl113VXpqc95ahrPn0jZunVL2r3nkfT2fMfKRH4zeSS/Ad6f v0z6z97xZ+n3f//305vf/Ob04he/uHnjC69bvRnWl/5++zvfbvpms87/5c3/pdFbf3FpQz5c2bHj 7PSEKy7KmhxK//zpr6TZD8+ml/3ET+bDhguaQzV9ibbuIjp8+NCiefRGV3vI93D4lKvuS9eJ/HGs /ft1EMivxGBafXRvqYcP2o/udrkvf9G5Ppq49Zzz0pOf+rR0ww03NAeYO3fuzAcPOnSYau4C0eGb Do5e+MIXNnXdWaSPM+kQQV/8rAPPpaxFd5xdcFH+gvErzs3P2d60diIfFOUvGtd3ak3n44SNa/Md MU+5Ok0emUyfev/edPsDG9OT0rnpjHxoN7Ex3602czCdsX4qbd2uu1Y25gO98fS77/5Wuuv7dzRf oqzv9lnq0H70nEur0tBhzb58V9SW/MXf+m4ex8mnXzqLZyVGc7iWDw5vvfWb+c/SfyHf3faNfBD1 WL6z69x03XXXp2c849n5+5zOSo/sfjh/N9GH8nWzL8892zxPOnS9554f5r4vNXca/dZv/Vbz1/u6 1qbfqTvzQe0v/7v/NZ1zRv4oab4Gdd3lh3T3XXenn7zqovSapz0pffS2O9Jfvv1P08t/7nXpkkt3 ZS2O3q0+lrd+Yl3+y4j5dSrfvStM/kN7+TVqTZo+vHAQenRnzVQFqgJVgapAVaAqUBWoClQFjrsC +heufnSeoH/c680Zvqxi5fmXsKxyGuB4Q+cWXzh8WYZ4eDMBDzVZn4e8chELj2zv0fegCEJfuOdK kwqrRfpwAajRSy3G5MXjfozVRy9WGB/Ka978SZc2iMPbfR0S/fk7/jxNjh1Jz77x2fkjXmemw1OH 02VXXZbe+KY3psP5DW5+J5QXlKcbn23+l/gH9z2YPv6RT+T/Bf67TcybyvZZuiv6eMzU7GR6Qj7s 0Ed3dGMcoqpzbOy8tHHrxjz9WNq6Ld+hkdez+4Hd6dt33JauvHxlPoamA6KJ/CawbehAQV9ou2/f o+nr+e6ef/iHT+aPF12ZnvKc69NY/qNos/k7Tm648QXpsvxnvAdfYq1155+8kfvuuz+97Xf/JD38 0MNt9PN53cG18wlnpp956U/nL36ezrx8h1je+5bN6ax8V1XKn4x76tOfoaclff0fv5am/3oy/ZtX vqo5CNHBhe7ImMm9y7025hc1xBnsd/AGPL//zuuezM9j/rhTfhd9KB/y6WdwYKG/BDf4GNAyL9vm EOzL+Yuh/+iP/qj54vDnP//5zcfNrrtu8B1Rmzdvbu4k0l+p0pcp66BIc+vOrhe+8IWNNvpLaDow 0vilX/qlJd5ZlP/i3eGD6dHHdqdHD+xO4/lgQoeEE+sn0pp8aKSbU/TX76568hObO44+/3f/I818 5Ovpta+6Ll140eY0PvF4GtedSJvylymnjenKq3amlz7vgfQ/PveX6f0XXJz+7Rvf0KxVax9lSG8d 8Gj/ura5FmT1ozvP9NfZ/unzn0vXXPvk9OQnP7nRSQd7OlzRUJ8OZw4cODD/ez7KGhZjB+sX31e+ 8qX0j//4mXw9r0//6l89PV+v+qjZ4fwdTt/Nh2O785+pf2G6Kh8Cq+OxRx9LBx4/kPY9uq/5C3eX 7bqkucuO157Fcxwdaa/6KOBdd3w7veZ/elW6YDq/1hx8tPnFHL8wfyTx/Pz9VeNH0o9uywfg+XXt r9/5Z+nFr3p12nX5ZZls8No6NaUv8s6/yHlB4lu7Pn/nUv4d1GGg8no9OqRzotGeoqMXWzNVgapA VaAqUBWoClQFqgJVgdVTQP+41Q//ah38Y3fxfOQ42KFKD7FwfqikOhisz0WfaqW85xyjvIZy8BLL Dh19D4qYVIQsBluaxBcGjhw2ckUe4SLWc/j5nciiQQ91rEDUmje/i7pGCPRn59/5rnfm+x6OpGfe 8Mx0xtln5IOhw5l9LG3bsS09Ld8pk//H/PyU5Df3+r/8v6jrT3vfee+d6Rv//I38EYyjv79nhOnn oXrzpe8iOfucnfndV97a/O409wCmN766HyZ/a1C+c2d784btkQf3/P/svXmUncV1L7p7nkfNc7fm WYAkhJgM2GAEMeAY4gHbuTj2jZObONdJVlaSf7Leumtlrffsm3dz70te8m484xFkRgNiFAgQIEbN 89Ca1VJLrZ7n9/vt+vZ36nx9unVaEiCgCs6pql27dlX9qr6vT23t2iXbdmyFT5p5eqSLci4spK6j 58bc35xTUdTa2gyHyO/C0fc6uWLZFTJ/+VzpK+yRbmwkea322EljZcJUWKaY9QX6Q/88ZTu2Q8FV pvidq3/cqM9fNF+uueEqaYOCxQLxp9app6cL7cECpaRSli5fBkT6ZdP6LfLQw7/FMbTP6S1fIuW6 gbW670ds2HRjvbS1tarihkqJM81n5OhpHAPD0apaHC2jo+o+9LcQVjYcWzcUj5zrTDduZdtPWqVs 2LBB/QNxDd91113qx4ZWRJMnT1ZLHDr15vErKks4d/QnxDydO/PI5OLFi1V5xGNojzzyiDZ9Psoi Wrscbzwq23ZtwY1rjZIH5QoVCPahoojrls9KbnmPFEwokhff2yW1Zb3yh1+aLyXVeL8WQBELJSit wSqqS+WyGdWy5sVtsn0bfUnp45gtNMrHuaEiiFe789gYA58NKn4snEbZ8UOHZA6OWr388jo96sgb xYgblWzEioH46dFTW9MmYIQxx8Fw6lSjvPbaq7BgyoWSaLnU1U2XdjiSP3rsiOzYuRs3wu2FIukN ueOO35dP33SjjqMDfWhrbdPb144eaYDyqEmPfzmJ2X3X4NjYp+bPkBmN26SnEVqdPL4remDQdUi6 T7ZKLZR9nymvlr6Th2TNA7+Q69H+DCiLeJz70KEjUGZBYY5AC6JCHJOjtR/nlO9EtXjqgB8u/BdC QCAgEBAICAQEAgIBgYBAQOBSQyCxT+YPYX7sxyvTDMwb3WgWK0P0RT6f18qM1+SSbnyZyqyexeTx +Zn2ZZHP5BgvacOGbBVFJpjCrBMWD9uAx08+yvE1aKRlCn57ftp4fRr7YTs50u1DXp/P0lZuefJl FbiRPAL/Oc8++6wM5PfL0qugJBpbBeeu7WiIXcCWBzvc/h4qiFIB218MGv963t4h3Z3wgYN/Vb9Y gVYonX1dsBqK2k8Ixr/dx6uEPkQqystVkUOfRaYsogLgfAMfHiogeKyMV8q7o1v088NAC4xOOK7e KGvWrIEl0Ty58lPLpDuvC9Ykvbie3Vki0fqnFx8qBlwt3IwFRVEnZPaDnm3I68sDP+pCweI0daiJ /uVBUcQNN/0NcWKKympl2bIrQeuXd17aKF2re+TuL/y+Or2mTgBV3rdAPNguN8n0iUTFxO5de+Th Rx+RXQ07ZPnKZTIHPmVGV4ySMVXjdKNNZRoVfrTwSbyssu4n5+jVV18V+qnZu3cvFAp34Fr5a9W5 OYXQnxUtYshHBQdjWs7cf//9ul54FI3tk4/HzVasWKF+bx566CHt27e//e0RHkMbkOaWM7gR67A0 Nh+DMgYqPQCvShnDH7Q8KIHoPPnEkeNShENplYXdMtDTBoUFFDJc87lQFkF5UVyYJ9WjRksp/PXk ZnCkni1QVMrReopYsD/2YX1iQEURw1UrrpKHHn0MitYamQf/TsSGR/aoLGIdzuvo0WNUyWfKQa14 nl9NTadlIyzyvvjFO3Er3TzIhw8rKIo4T+PHjZXdu/fDyukNuebaTyE/Hv0vhMVYvnMqj/709XSg j0V4rgb/1RiuS1yrPZ0d0gmlXufRvXg4fCW3m6jyom65paZW+hoPy7OrfyPtt31OZkyfoVZO7723 UTGg4rywqBBPeC/mFNZXeND6+AzkDvaxNlx/QllAICAQEAgIBAQCAgGBgEBA4INCAHsw/uC1Dzer tlPx06Qx7wef5pf5dPL7+WTa5Fl9i5P1jI+xz2N0Xy7L/bzxDIqzVRRZRRNqHbCYdAt+46Tbx+c1 mtVJxiaDfJYmj+WpFWGawWRZWSa6T9NKI928cQN7sOGgPLj6QWnEUYsl1y6WvtI+Od503Mnz5oT/ Qk7lkAXXsQFp7TirDpaNfjHi/h44uIVFygCsMQavC7ZsQ0/ByCNqZZXFcuIwNui7cmTe3AXDOos+ Vz+5WeXRmNLSMlUYUWnEzTIDHe7u3w9Lqq2bZdlNi2XHkc3Sh83ncIHH6GiJcPRkg3R2p6yDhqvD sk4c/TvZdEwaz55Q5Ybj52YfyOjq0y8l98FJdFVNiXQNNMsr61+WlZ9aDoe71VKO69Z9qx3WG+la ce1m/iYunVAW9vX1AJs+OPI+JE8//4zsOrZdTp09Jq+8/JIcazoiVy+/WkZVjgEPrq4HH/0VsR88 akRrq5EEtslb5njcjJZAvLHMLIWoFKHyh4ooWixZoMKDjoyfe+45qaurUyfXVKK88sormubtWfTV c/LkSfn5z3+uShLehkYH2JR1zgBcuUK4FhkUZ6ZZF/3F/6pSbsbxyj0bD0jvwSa5ZekYue7K0Tie Fsm3usjSgqWfiohhjkGyneECcaJlUE1NjSp+fF4+/7SwOnXipJRC4dKvxwSh/AA/lUT0VVQBn0VU ulIOMR01qjbNGsmXl21a1x6el05ifQoWQVAa0kLu7NkmfJrVcom3DXLN8qjm2TNn4Vx+tCqFiEkR +ldSUixF6DP7NaIAdpwMldaWHjl2tFnaG87w3FgGEXjfFZyWhSW18taWffJsFxS/uG2NDrVpnTV5 8iRYjLEveZjvPPijygcuUOpirnP0vZVBZCAFBAICAYGAQEAgIBAQCAgEBD5kBDL8fuYP6tSmMrXZ Zk/txzbLmTZebtRtg2Q0kDQYL2NLk9fns7Qvh7zJYHzJMssPVZ6Uo/mRKoqSQthYMhjNOpIst7wB YXwpzUoKZPIm5fkaEaatPnmTuxgDxfjIQ/4cbMBMLmnnDLr5g/Li1Gn6VGmWtze/KVW4mSkfjqSt EV8Ij85YCzweQ0ujphOn1KpI4C4nNSy/1kjTOThORcuCVrc5Z6ODwuBhUpHVjWMp2Lups2Aqei40 0PKgC8dQeEuXvx/lRnfSpMm4OatOnnh6jcxYNEWP6imT1132Mj6CAgH0v7Jv3zYczzqrm+Bz9Y8W W404wrT76E45furoYHavLSbbW1tk/9ZdchbHZ2bMw1E4HIlpa+uAEgD+b6AUsMB+UNl1ceYLUrCh p5LoLBQgVKA9/rvHZeeR7XLNrSuxIW+U19dukHc2vC2VJVVSXTFaytGfGlhAEV8eZ3IvK28w1tFh YtahPysqcXhFOv1rrVu3Tu655x5VbNBCbt/efXo7HMX09vbhFqtZqvjgsbTPf/7zcuutt2qe1kbH cDPdzp07Vdl05513qvUNLWioHMnwMs3QM1q59cvp5lPS1FwgZ2EZQ3y5BqhEKIHihRZGLTg2tXfT IelqOCW3Lp0on75mApR5ZZJXApO8XmCAdUsfV7RG68INbh1ncJQPVnsXEqi8oAKMxwFtLFwPTHOM nXDMnkPH51giE8aNkb2798jbkUUeLYp4JT2VbzyCRmVcVkqzYTrM45iUkQ8FGOeCMo8dOShttEbr AObwq0Wl3tgx43AEdYwqs6jQyoMihhgyLgWePMKY5z+Yw7RpRfpMAt+Wszi2eahZmveeTjcoihjJ 14U/Z4f7j0lvEY7hYq1Rocnb2FauXClTcKzxqWeehO+pQlgT4agg5pgKon7MIfMhBAQCAgGBgEBA ICAQEAgIBAQucQT4o5UfX+HDLieVOqQxcMPGj1/H6KTZhs4vZ5rBL2feeH2ZPo/fTmojm+obZYw4 nI+iKFOnhmqYvPww2AAY+wNgmfEwzUAeU/r4MqzM6ls9nyeZJq+1bfxUBpCWdaAypa6uTr7xn74h /++//6tseG6DjKmvkfGTeUylIG6AphFDCe5ogzUIj0UhxB3JugeZGamI6cPGnoqOoVtO1SVPDzZx nS2dUl0+SubPX6TKArVcSLGNKMX9Jzezra3tahlio0PXVOkwc+ZMuX3V7fLTB34q29/bK3OWTJeq 0fCXRE0V+8+Nfjt94nTG7VLh1MNjWtkihUe0te20bqD7++z5NXGQwrbYUbRHC6x9W3bJnk0NMm78 FLnu09fK1HF1ekW71bCYDqfN6TSrX2hwSggoifZBSfTE72Tboa1yHZRECzAP+w7txK1sbbLpta3y 1oY3YSHVCWfJi+SK6Uslpy8Xm+8OtfyiBclIAueGx8x4XIxWQVQS/cM//IP616EC6We4ba5h07sy a+IYKKtaZAcszRasvF7uu+8+5R8zZoweK6PDbx7JosKEx7CWLFki/+2//Te1ROL6oXVNNkpHWoz1 QwGxDYq6pvZG3HLn/Niwn9XV5TJj4VSsBRzJ29IgbXtOyk2LxskNK8bJlAkVUloGaxQ+YXyOYG1F i7rOTli0NXdI84lG6YUD5/OdJrZPJQsx8RVFxJrjPQTfRBs3boQSz93gtWTRAnlvy07ZuGkTlK70 F1Yi27ZtxfXzdaowojNr4mIKp5HMmc/bC4uyatzitgjt7ceNY8XFhVDa4WY6KByLikrhT6lNDhw4 rMogWsqxr84pO1+hVMZA+VZUDEUN1g18XxG+kQYMw9XLULcbj1sDxK7nmVpYJ97xpS/p8UmuBSpG j8GyKAfKtiJYfOUW5OB2OyiK8DzyOaUiK4SAQEAgIBAQCAgEBAICAYGAwKWIQLRHpj6BlhXcZvBj v4iT2w4rM3oyRlUNrG9l3LhSvr+BNTnKHPH6dUi3PhgP86b3sHJrw+T5MpL1TU4cj0RRZA1YZWs4 U4MsM34rZ8cZDAifx3gZMzA20Jg3GVaHNKtjaavLPIOfZ5uWZ5yDzZT1h7xZBW746urq5L/8yZ/J P/+v/yHv7noTPRuQsRNr8a/kBbrx6cJGrJ+b2AzQd8Pqgc5cL2bgBo4LmBYnGZrESJ2lBtskRy+s UjpburHZrZWFC5ZASVSjG9noIbigrjkZBjOVR1D2QAlAZ8PTZ06Xz3zmRnl6zbOya+N+mbW4TpVF 3VA6NB45Kcf2H4WVD25V4igwHnRbrZ36u7PcaIP/wIFDUv5emXTD0kIFQBbxKcRNWuOmjpMiWKJQ SbR3y25p2HYMt2fNlBXXLZfR1WNia5okAIWFqSM7lHUhgcfpqAzbs2c/lESPy9ZDW+T6266WhfMv k6qSCmyaC6Rm/ATcCJcrW97YKq+texUKiFyZOmqqlJWUSXlJJepjbaW9R7LrERVEVORQ2cOjUtzE nzhxAlZUuJkLc/R7V14uX7pirhzcv0d+/Ar8FIHGB5CKky1btqjVChUpdILNwDQtbXjkihYtzPNz rsA1Ql81l19+heRvwS1nnU7JSusXWjrt2H1YKkdXyNHDJ2XXywfk1itq5Ip55TKuNlfKcDKOChmB ZoKWRH2wpunphn+s9j4509QqOw83S/Wkepk7Z46b/nN1JkM51yvHTOstC8SMt4Xx2B6PgF219HIp BJ6zcJPYddffCIfoj6rVTHlFqfzgP/4DPqewvhoaVKmXDSbWTqaYS47WV5VVlVDqXgY/RC/J5i07 YHUF3AbyZOy4ifA5dUCeePIpVVgvWLBYauA3qRgWTTzeZUvWbpWDykslZmorSeOTTH9fTbAiK4JP pFZML+EnncaLtKqiup1KojdzS2XgsuVy9zf+CP2cpwpxs8SicpqKoXwcPcstyFXrqHxYEtEaKvci OfZP9j3kAwIBgYBAQCAgEBAICAQEAgIXAQH+9GVgzJ/WjE2fwc1PshwkpVlZps2//URP8hrdYmuT fEZj20z7ZZY2us9vZaT5aeaHDSNRFJkga8A6a3TGLGPIVGYdJ2gcoPH6sZ+mHAbWI78F8vh8Vmby rZyxteOXqZyRWhSxEje5VBZNmzZN/uLPvyv/8//5Z3lrx+voTY4qi7hPPt3YLI2HT2HTbEpHbc61 iU1/cxMc8dalaBeS4qaN1gNtLXT6jM1zQpOB5vS6cV45TgBMSVRViturFi6R6ho9Azeo3oX0ye8C lRrEgY51a2DRcOVlV6llwVNPPi07N+6T2YvroUhqkc3r35UDW09JdS0dEcNyBpvSs01nZXpdvSyc ezmO3Iw6Z5fmzZ0nm+EHaf3Db6F+J467TYKVVS+sZpqwNe6VVV+9AeMslb1bd6uiqn7GbLnt1ttl 7pS5kg8LHd+ywcZAfKmAcxZF5+zCkAxmUcJjW9u2bZHHnngUVjvb5FO3XSPz5y2EtQduM4uWNBUm tePHycIVubLp9U3yzutvQxlTBgfGs2Te5AVQirRHyqIhm8tYwLXBD5UeDPQpRQUQjwblY7NeUVaM E5HdcrD1jN5GRyfi5KXfotWrV8vjjz8eH6eiM2vegjZ+/PhYQZStQoR85XCo/ld/9Vd6PIkPKQNv wnrk4UfkH//p/5Bje09J32kos+CeqqsNN+NBUZIPXKhYEPi/4clAHo9r66CSqEeaTrbJu1tOysPr WuWzX/yW3H3P3Soz+TwocZgvKjbYtylTpujxM2Mlff369XKysVG+850/g6VbG6xi8nC0qhz+gGpl 5YplMqp2lM7g792+Sg4cOqa3/N18yy2qnBtpP6xdizkXtMZZsGA+5r5Ttm/fLBve3KJre9KkKVJf Xw/rrst0jn7wgx+gHwPymZs/I+NgCUZLHq5haKh1/g1vkz1sjAeAx1pf2rxJik/Bv1oPgMdrjeOB 3k4mQ1uEt5kqifqXrZSvfuubUBItQDksvPBeShs3X0D4sG95cD5OxXpuHtYY5lVfTsN2JBQGBAIC AYGAQEAgIBAQCAgEBD50BOynNH5c609/y5uuwe8gy8iHX80aJ8uiX8exHJPBmIH1jWZyrA7Ljc/S xu/TWWZ9TfIxP2w4H0VRsvFMDRhoLPPTrEuwhgs+P/ls0ExbXZNjfSGPfUgzGVbOekYzPpBGHrj5 4cZ/6tSp8t3vfFd+8OMfyLq310ovLBFGj6uV08eaZc/bB2TWzNnqRJa3W1mg4mH6xJkyBxYP3Bin baSMaQQxnedWlkG5gg1cLqwL/NCPfjafgiVAZYFUjirH5rZbult7ZEz1eJmP4yG0UDAFhl/vQtJo EkoVOkZ2Y+Z4i4tLVJlAa5rqilpZvvgqKcBRvWfhJHnH23tgVZQn7S0dMmbCOPnc3bdKTWWNHD54 VJ57fK189y/+GreTLZNx43j7Fy0hMgeW/d3f/Z1eBf69731PTjQel29+84+kHRv6Vza8Ir975Hdy +mSTHD3QIId3NuJq84VyxYorZGztWDjYLcVmNVeVIpwP+iMypQcVJbQs4U1lDBzP+YZuyHgPt1at fnS1NLYdkU/feZPMmz0fCgdYLAEufy3QEqRm/FhZdNUi2fnuTnll7Uu46atfpo+ZieOC1Rc8b1R8 8Pr3J598Un0P8dGgyy4Y6chJ+AU6drZV8qrb1UH1n/zJn8BX1D61DKvC8SdaIj311FPqxPr222+H ksk52R4JLmyf/na4/mzcxLoWzp9zegtlevVi+f377pHVD66WpuMHZOPOTqkoPQZLsUpdT3k4+tXd 1SOtp1ul6WwHlETN8ss1h6Uzd5LMmjNfb3Ibbr0M11f2ifNva4C8tDCikq8XTsRrqqvgMBp+uIAD rWR64bNo0oQxuPq9FFY0PTJp8iQ5fPSEOzbJB+KCA+yJoHjh0qusrIAV4ELFbvbsBdIOazAq+cpx DI0WYxs2bFDLp3////43jmFCaQZFFR2Xuzni3wj0J8s1zHkph6XYQjx/jTwyVrZE54p0WleNP068 RQ6WV0nlp26SP/jGN1WZyXI6s08G4tnDY29YL3SOlleAY4wDOEaI/ocQEAgIBAQCAgGBgEBAICAQ ELhEEeAPeuoSTOFied9SiL+wox/b+mvbNgFGZ2w0JONgckkwHvL59fx244oeP2k+v+WtPZb5weRb uV+Wlh6JoigpzAaTJnCYTLKTQ7Fa5/1y1rX2LM1yn2b8pFnweUmzshxsXCxtvFnHtrmdPGWy3PeH 92Hl5MhLb76AzeWAKhXGjh4nf/OXf+NugOK/5icCb0bixtjkJIqzzlJZRQfFg5YdRsYjNG+//Y60 w2Knqx1Obzt7ZWzNeBzLmSdV2Oy+PyF5K5eDmFYyBXBkm5+PDXhfuVw2/3JqRuS551+QI3tw7XZ7 t4ypLZc5s+ZK/cTpsrtsj7zx4tu4LWkyNp+zVUk0HFYsoxUI4xoepcMjN3/+fGyWW7DBPytP4L/9 W/fADCVPZsPy6Ibrb5K6CXVSVAAlDcCjYobOh6lc4LXjOTl0Xu2UXIwh9oIClSt7G/bKL351v2zc vVlW3LBMynIqpPVUm4ybWC59OZH1GeBSxKCsoM+dzvZ+qYBC73jDbnlxzctSB0XRhBsnqFLgQjpE BeOMGTNk//790gSFEY8XDcD6qg84VFXVyngoJE5hA09lzvT6elXWEVsqI3j0bO3atbJ8+XK59957 1WLmfPriK2JYn88DnUHf8ulb5Fvf+hasZxbKrFmz9dasNY/+Uta8/LTMHn1IKipHyQD6R59WHY0n 5TTma9vxsVJYPUe+9pWvyaeuv16VWefTJ9Zhv8yZtcnguqDCkI6lB2DJVAbH0FCryWgotmSgW2qq yjFxcM4MP1JTJoyVN/q6lJfP4HDr1uQPF7N+H5w+8yr5vNx8KHirgFUufBbBaTSsi/phZUWFFS1z Vt16izz2ONY65vX++3+BY3ndcuedd6iyaNC/YwzXKMq4Zvlu+f73v6+vF3spE5///k//JO8+8Cuh Oqhi5hz5z9/8z/CftFDff76SiH0nP/Hrx3uQ/6kcKAppxYcL0NxRwnP0JRQHBAICAYGAQEAgIBAQ CAgEBD4kBLg9s5/CtitkbEoeppN5twl2Hc5U35UML9fqGa8v0/phPMwny62M9f0081af6SFDtooi G7wJtXhIwVGBddhi42f9JM3KkjH5/E+mcp9GXk4cg7VhcUyjVcOFBm6EeAzta1/7ut5+9uKG56Xl DCwxSmtk0eJFevwp00aRmyd+LjTQNww/yUCrCG5SedNRM5Qwve35UBKNgyXNXPWbkuS/WHlapdB6 IZOlkm4WsdmlUqa8uEIuX7AUm0eR559/RrY3Nsh0OCqeUDVJKooqpaTAHcUyjDJhmOwzN7aGq11V TkugEiiDeuHTpu1Ev1x1/ZUyZ/FcmQS/LtVl1e6Jxwafiiy2QX9EfmBfi4s5Hq4V8vil2aV5pIw+ Wg6fbJCmltOS2wVfPNuPya7X90rtmFr5xp/9oRSW45YvCPcX6b6tDbLtjV1QDOCWr94yaYflzPpX 18uSxUsw58XZNZ7g4rxwHurq6uSP//iP5Z//+Z/lBG4wG4AD7dxmWE61j5eisnJY75RIIxQi7fDH wxvIqCBiIL48ssa1RcUc5VAmsbM40WTWWfbrsssui5WDbHMOlIQ89leGPv3m/l556t2X3RXrBT1Q nkBV01EqpZUT5LZ7/gj+pmbAUm+W3jjGtXA+geMwZ9Z0aG3rmDQe+XNrrA/+f/Jh0dSNtZUP5VAv lB3w/UV/SXym0XY3nI4zWH2Lz6dPuqbRBo9z5cAhUCEcQQMQfc56e0tVAUM/VlW4YSx3Va5aPdEP GJVFDzywGgrBmbgRbYz2XXXWWa5hYsHn6IorrkjrNueJ8tqqa6UHloE1taPVJxH9XnFtMLAusaLS iDgeOXoYZa3qK6ykuAj4wRk4fCxh6UBZlPKjlNZQyAQEAgIBgYBAQCAgEBAICAQEPmQE8LuWWzR+ /MC8/6uaedvcW9rq+HSTYWW+DJaRTloyZpnxWkxaMlhd0i3N2NJGZ/6cIVtFkXXWBNrgmPfTVs7Y OmB1jc/vqJX5Whvjowwr92lGT8bkMX63padEAABAAElEQVS2YTKNbrH2y5QQFHIhgXKmT58uX/nS vXq70M9+8RPpK7ebh+jf5vw2rdn0iRuyoYKNj86gx02bKLPgk4eWTMPVGUpWtvQcbJjZbnLMVMrR kTI3hgMDRXCg3C5lUiFLFy3VVdLZ2gd/KuPgrNkpvS60j3l5+epbp7S0DJvTYqmfNh23fl0ty69e JiVQspRCEUUlVTE2rSUlVLq440a8zSu1bHlKhrd80SmwLatskUjxqSNfyJ9VP1f+7Nt/Jq1QJPJG rzVPPy2btm1UpQu2zs5aJZpOttZ8sln6Ydh09YprZeLoyWoxws04/bt0d7tbwlKtDJ+iooI+hZqa mnT+qYThFe5sjgqFgvZm3dTvbYD1EtZLK27F6x7oktOnTsFptFPAWQu0KOIV7ZS3e/dutQKihRKP ZnF90TLrfOaPdWjBQr9HTiHjlKns+wI4R77nK38su1fcrGvI+sLlXwYP1yuuXC41NTVaL7n2jDeb mG0RG8riOEzBw3UxFscfG/bv05vPCnP7pQqOq0twBI6KE97Cxr8hbR2dsg+3kp0+A6fasPjhbXGU dz54sL8ci36gJKLjbgaoNdUZOK2KKNdkM54JK7FVq1bhaGehPPvs8zqnZ5qbpAOKqx4o/rgWoyWm ss71RZkcnwXiwee7Fvh89s679H3XeOK4Kn85F/RH1gelVgdwONF4Qo4dPy4Nhw7Inv27pantFKzB KnFrHVY7nsFC4MvjsRyH/8xZWyEOCAQEAgIBgYBAQCAgEBAICHzYCNieOuqH6ROYtZ/VtlFkzEC6 pfkD3sp9eqa6SRplMVj9ZMwyv46fZ5rBypNpk6VMQ31lqyhifRPIBpm2YHmLjY+xz2f8SVoy7/NR pil8jM54KDrLTB5j65PPT7rxkP+CAzdz9fX18uV7vgxn1c2ya9cubJ4ydfuCmxqRAG52p06pe1+V RNw84n/dsPLoHa1vqKjxA48VOUWR22iWlsLCpw1OjaksWrJUasrhm6YPx2dwHIUbzgufHvYpD5v0 fKmrmyZf/vIX1S9UVVUFNrNuc80rxktKSmMFFq1G6J/Id1zNPnd10cqkS5UGHOf5BI5/6vg6/bA+ N9+nzzTJjj3b9TAOj+VEA0epa4Qw1OFo4a233Iobv8ZhLIXq0Ji3lPE43UgC54jXutMhNdNs/+BB KDROn5I3394g/c2npRXHpd7r2i5d6MpeOBJvze+WH/3kh+pPir5lSmBllI9xHDt+Qo4eP6o+cP7P 7/1fOMo4W1ZetRLyN8nnPve5+AjgSPpnvFRMJBU9pghZuHCBHm8yXj9OKjT8spGmqdihQ2vGFrg2 lsNXTyewf+3113FkMV8mTxqHI2cVquDjjNHnWCv8O7319rty6GijrFh5jcqx/pusbGLOEQP/MLHt fjqPgrKIa4IfPmO5mIsc4MU8A9cQrQtnzZyl80SFW2tri0wYN0EVN1Tg0Km1E31+C5ljYd+ojOK7 5bXXXpNnnnlaFUT0QdYMBVnjyZNy4mSjbNu+RQ4c3i/NbWfhK6wFVnMFuob43OXDKorPBOc6l+fP QggIBAQCAgGBgEBAICAQEAgIXNoI8Ae0/fS2mDT3r7mu7/pTPeKzNEssneS1skyxT/PT1jZpfp/8 vP9j3+fx0+QfNqTv6IdljYGxhpMNMe+XUZqBYrzJcvIky0hjMF6Xc9+kDUU3PuNh29TWWJ7lmeqS fsGBm56p06bKfffdJ5s2bdJNYkIDecFtjEQAN2I8Fsdbq95PSyJaW5yEo2haE/CoSTb6MSqDWI8K CE7I1AlTsVDgfBtWKfn5uTiucnaQwiDbsXMz297ehqvfj6NfjSpn1qyZUI70aD9NDm+RKixstSz4 +rVPvqKIvmrcrWe43QlKgvOZT64LjotX0fuBvpD8YE+8xSyDPROcO1Ox04ONOS2fcrH5b4U83EwG BUK2gZhQiUArIh4POnGiUQ407JepM6dKETbuOWPgswoTcQIKsY6udskrGi1F7R3y6lvrpKOtS/o6 B2TG7Doph2KkoxPWYKNLgEufvLflLdl/cA/mq1Xq6+phoQXLKE7u+xAo9/2S7XeXbRBb+iSywHmf imdpCY7GrX3+eWk4eRzWWadheVSJGRnQG9n6YVHUCyVkw+ET0t3TJ/PgI4vK4vNZM9au+krC0a1C OH7Wm8swSUSXlnu0YHKHGh03lUYsLMINh1MmTcER0yo4u+5QhUw3nrVeOJnn2qai9EICFUV0MM8j pq+++qoedaPishvHEXfv2QHl5w5pghL02Mkj0tLRgvVVIKNrRks+jusV4J1E59U8yUlsenArYl7+ +/ZKvpBhhroBgYBAQCAgEBAICAQEAgIBAUPA/8HKtOX1p7kxeXGmH9ykUTfhK4tYxWQxNnlWfyga ZVg9yrCQiWZljE2uTxsyPRJFUVKINTRUh2xgrMfBEBiGZD3Ls9zSxpeUzXLSTLaVk56sn4mPcrUO NoRWl7SLErgp5DG0+vp63Qh9EBvbTB1nu9yI0Rk0w/vVD1rc0AcJr0+nxQItbyJ4td1zf9l0Gqfr NxUZxJKb0ZEG+lXhte+//OUvcUQKx7fSNsb+8hpq+gfz8OjZ1q3boFjiMTRbxufuGZV1/Lzwwgty DL6ATGlA2ptvvKmWPXRErDLRLOn58IukNBzJOXTokNDfTFV1tSoeqXRqajqlSisqKmjVkU3g/NPX DOfrueee01vB6uqnyZ6GnTguBf9EsOrohDKhqxeWU/iP1jSFVfgUdsrYUePkMviT6uhuw5G0VimA go1mKfpwDeTCZ1CRHhm7C0eRqmvg94kKi49ooKXVKRy347qjQs0sezgc+mXKAy6ToTDibWN79uzH C4evNa5ZKolwlBGWSLmoO3HCBJ1rtQbCOj6fwLntwNzs2rldSktgaUdLOBNE8DWDL3uNqfIIL1oq PPEcduH4II+ccT7aWoulBVZjVHaWwHrPHaU0YSOPKZMf4tNytkXe2fiOHGs8AiXZATl84jBuz+uR AiggK0dVqEUabzijs22wa8dpQMdjZ3weGH+U18zI0Qs1AgIBgYBAQCAgEBAICAQEPioI4PeubRq5 CXQ//t2G136a2y9z5pkmj9EsD1JcZvVIs2B1M5WRJ1lOuZkC+YyX5daPTLznpI18J54SaZ2wmCXJ tHH7g/HTfrnVzVRufIzJx2A7dvJbHYuVAV/kJZ/Pw7KckWz4WSHbwLVE2ZfC5ie1rrPtffZ83OTV 19fLNddco1Yubsysb9OTrax0flpOVFfXyM0336wKCFOuZCtt6dKluiE+ffrMOeYgvd3M8h0P57K+ fjpu4ZqlVjPZ9Ik8PMJ000036U1hDQ0NcRPE6hSOfVHx09eF28Z6+qWgPxfOkSvwaZbO3m5VDHDZ 8kYyWiTxw8C+0Mk2cV+wYME5xhg3qWuSyg5aNk2aNEluvfVWeeLJJ7Rv5KJ1yM6dO1XezJkz5Jqr r9WNPX3zfO73PicvvvSi+iTKQ9v9E6EkQB32f87sOfKlL33pI68kopKOVkRr1qxRKzxa8ySfHyqS qCSCfkwmQBlEKx5iwDzOgsGxcy2UOx2wsjoob7zxhipCVMEE2SMNtNo5c+a0PPrYIzhKxnsVffsh SEPb6QF59z/apRLG+TciDS87PBMtUAAWy3XXXaeKsIvxfqLi8SQUa48//pgchaKoT3rgnBo3msHJ dQGUQ3o8jn9b47+vqR6T1Ac8ezv7wAvlYwgBgYBAQCAgEBAICAQEAgIBgUsfAW6D7F+CmeaPcsZ+ mjQGK7M040x8Vm5lzDOYHKMnYyt33O6bOxMLfjnTLPNpxpcxzlZRRIHsmB8y5f2G/c74g/JlJNNW Pynb+Ei3D2nGZ/2zvJX5+Uw85Lvo4WJswi56py6yQG6Q586dK3//93+vm+XkpvpCm6Myhcfm2E42 gZizD5/97GflxhtvzFqBko1s46GlTbbHq6goqsJV5t/+9rfVcshfE7RYeeihh+R//M//W15Zux6O j6skf6BAmjqapOnsKVjvtEjjkVOyZMkV8rd/+7dqOWTKKcOZMa1OfLnWz0wx61OxRIs3ts9x8OYy 0mn58pvf/EbWr1+vVVesWKHKH1pQ0dkweevr69WqhgxUWjDQxoWYcJ4+yoEY0JH28uXL1eE3lXKZ cOWaPHb0qOyFE+/P3X6bjB4F5/BUysCaJ0cdqJfJW++8I/v275HRo0fjyFihrFy5Up1a2/ydCydr l+uYtxY++uij0g5rvQy6lqFF2ZtuIFJQ4U9ZTn6Z3HjdSrnnnntGtG6GaoTj4ZpYvmy5WgXVT5oB VqwM6yiWiCVVhr3ZPYHUdY2/corMnj0rI94ea0gGBAICAYGAQEAgIBAQCAgEBD5wBKLf8Nz82K9Z +6XNvvg05o2PsaVJHyokecwaifwsY2AbfjuWZplf3+jGb/XJx2C8FjvqMN/ZKopMYCYtlHWCnbI0 m7S0HzNNPl+Or/Xy6zGdDMk2LG9tkN/SybK0drLduCU7EPIpBGhRkO3xp1St7FK2YbY4u1qiV3q/ X4oL9mUk/aFigVZF8eY5GgTpVNhMm1onO97bpUfOqHyh0qFvABZG2ISPr5gkixcvVr9CxDnTeh1p fzhXvqKLt5Wxb5Rz7733yl133aU9pD+jahx3szISqVxKjoN068NIcGG9SykQW/rzolKOVkNDBVod 0erq3/71X2Xfvv1y8NBhXf+9UGZqPZTTv9Ytn7lVFYSce841b1HLNH9DtUM65+q6666HA+/FI1pz w8lkfzjnF2OuKINWT7SyuxB5XFOVuA3tQmQMN+ZQFhAICAQEAgIBgYBAQCAgEBC4QARMv8CYH+oZ GCy2crM0cqXu2+c3Pqtr9RmzjPoKk0GalSOpweob3WIW+mW+HCszJZRfR4UO9ZWtoogC2XhSsHVo KPlWz/gszzhNcRMJML6kPKNbbOXJPOlJ2dYmy8hvH+ZDuAAEuLm71DZ4l1qfMvWHSgNar/zwBz8c 0mIqFx5/i4rdFe3DKS9GMn2Z+mLzR8UQnZ4zsH/D8Y6kzY8CL8dKxYweJ0szgxnce1oeLVmyJFYo +co046YyzpREhqPhbDznislPhR0VOxcr2LxeDHkXs38Xs18XY2xBRkAgIBAQCAgEBAICAYGAQEAg gQB1CNQrMDDtK158ujJEX8bn0yydlJeks5zBZLuc+/br+nTjZezX9/M+/7DpbBVFvhDrmDXul1kn fB4/nYnXpzFtMoxu7STl+HTyWjkVUEwnP75c7HPMCyyrhhAQ+GARMOue4VrlZpyfDyKwnWyP+X0Q /fmg28gWa1oV0UJouGCyLhTPS31OLvX+DTdHoSwgEBAICAQEAgIBgYBAQCAgcC4EeDogCrYpo47B lEQsIgPLkh+WkUZ+BqtvfKSxzOjMW7A2mE/WNx4ry1TfeDLJz0Qz/rQ4W0WRAcDK7Iw14NNZZgNh msE6bnSLWWZpk0caA+lWxtgvz0S3csZ+f4wXZA3Mmzzs9/LIH0JA4ENBwJQJH0rjodHzRiDM23lD FyoGBAICAYGAQEAgIBAQCAgEBD5SCNDyPRF83YMVmY7B9A/GY3lfCPUVzPNjfJST1E2YTNKtzNJW ZvL9vM+bLLd2jJ/5IQM7mk2wBq0xy7NuprRPyyQ/2Tk/z7p+fWvTl8Ny0u3DMuNjbDKMj+UmU8sz TDp5QggIBAQCAgGBgEBAICAQEAgIBAQCAgGBgEBA4BOOgGdRZHoH0zkYMqZ3sDxj00dYbDTGPr9f bmV+zDSDtcnYT5t+g7HRyW95PybdeKweaUOGbBVFQwpAgTU4HI+VsVPW4WQ95ocqs/qMrZ4/QF9u ktdkkh7XgWWAyfH5QzogEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgU84ApFxCfUGpjswfYLliZCf Zt54LDaaybGYdKbJ5/OS7ueTaeatTStjbOlkGeWNOJyPosgatkFZo9Yxyxuf5RmTZvWM3/JWboNM 1rc8y5m2POtxHMybTNIYjNdiq5cTjp45gMJ3QCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgJDImB6 BtNBmH6BFZJlsc4hkubX8Y+hWd2h+KPqaXoP4022SV6WGd3yjC1YmfXH6BnjkSiKrGFrwGITnOw0 y60TlvZjq8fY+Py0yU/G1g/yWhnTDL4cy1ubVqZ14GjW8loxfAUEAgIBgYBAQCAgEBAICAQEAgIB gYBAQCAgEBAgArjh2HQGFvvAmNLHL0vqJ8hv+gimqX/xeViXeZ9m/L5csKTxMJ+p3AxojN+Xa/w+ jXwZQ7bOrFnZBNpgMgoE0TpgsfHZgC0m3dIWGy/rWn2LWWZpP7b0UHVtMqwN5eeNRD09PdLZ2Wn1 QhwQCAgEBAICAYGAQEAgIBAQCAgEBAICAYGAQEBA9QURDNQl+IE6BdNDUGHEtM/DvK9IsjLTSVje l+PTLA0xsc7E0n4ZaX7wy5J9YlmS5tdNS49EUcSK5xJsjZPXT/v1THFDGj8WLG2D8/PJtMk2XpPh 51mHeX7YZlro6OiQ9vZ2/aQVhExAICAQEAgIBAQCAgGBgEBAICAQEAgIBAQCAp9YBOifCEYlvn7B x8L0E6SZ3sFPsx7ppiwaSo6Vsy6DL8vqmBzGDMZjbTD208o0xFe2fDISRZF1aIg2M5L9OkxbnnEy WKdJ98stzXLflIp0K2MdBuaNz/KM/cByKS8vl4qKCikuLvbLQjogEBAICAQEAgIBgYBAQCAgEBAI CAQEAgIBgU8wAgUFBVJWVmb6BtMzGCKmu1DdQkS0tNUxHhb79Y3PypPKItKtzHj9+lFzsUzyUE9C OVbPeBgn65pMn2dQOltFUVKYdWaQwASBfPz4nfMtihLsmiWvH6y+ybA8eXz5ls9KPq+644fHDiNv 5n6bIR0QCAgEBAICAYGAQEAgIBAQCAgEBAICAYGAwCcMAdMVMI4C9Q4M1EmYXkIJ0ZfpKEw/QbLp NZKKoGR9P29yWN/aTKaZt2BtGK/pQlhucq0smTcZGeNsFUUUaoIpyNKMhwpWh+XsnKHMtNXzY0tb ucWsb8FkGq/Ffrm1ZWV+HKdNOURfRWebz6Z6ZJIsZg1KjEOGbg3iiZlTiUE8Tk4aOS2Tquo6wEKE IXjSyGkZV819R32PRKWPy3H4Vf20LyXuz9AM6eznyg2S88nBeGhovLli8kLDCDAexOq3PajQ9TON nJbxK3vzOgRPGjktk0EOyxky4DNkVVcj+o76kx1zWs2MmUFyvPFahUE8VuDFg3icnDRyWsarq2Cw EGEInjRyWsZVc98eNiQwmwhDVk3j8+RkkJHGmk1mUKORfL/uIB6/MEoP4nFy0shpmQwySBqCJ42c lvHleNiQnAGfIav6YmzOs2NOq5kxM0jOxcU4rc1BbaWVuswQPGnktIwvI2A81Br1URqKJw3WtIxf O2A8FH4+SkPxpMGalvFrf1Qw9vs8gvSgcV+sd47rQ5r4tIzfx4DxUGvUR2konjRY0zJ+7YDxUPj5 KA3mcbilwZqW8Wt/cBgP2QW/O5YeEbNVyhAPkhON12cdxOMXRulBPIMx7sdvq+rKKq0Q6QxYi7oM s9hhGWnJPIUxsGxQS1qS/uXz+HVNseSXM23BeJn308m8lZmcZN7kZYyzVRT5ldmA31GW+Y1a3jrE vGm2/Hqs49czucZj9U3BZHIz1WGZH0y2L8vSPp8MDAxIT2+PWhbhCz0aSMwq87noKOMcGciBaOuB cpq4mOgIEJXGGvGq4/QBLD/2Jq5iXYsIflmUzs2l5dMAPuyDSB4+uWhAV5HJifrPDmi1qK52KErr GLRhR2CeHTERjte11dmTIyWFGLcnx5Imx48zyenuVfFSmJ/WQtSqtuaaBOX8MHb1VAibwGphn9RS DDinBsaeM0T9sIGQFKVtLI7Ab8ebNlcjwJjy+KJhHLeLFBXT/RSKtRYHj8WS1h8/phyvFjqZkBML jIcVU3w5Q63jnj72TaTI5gviM61jClXkrbPaCjMMUQ/9sijNeeEz5/riZGgNlA8AE8o0HtK1WiY5 rnXjUHlJbNwagDx2h/LxsbFQJIO15WOTlHOxMab8tOD1y9Gtd+w25pvZuIqVDYNxGjZOBuWmyUmu G7+NKG2YUAI7wDzjuCsUOowcE2ly/Piccig7CiYnlVdUtD9DrWPKT4Z0Ocy5cE6MjZFxupCIEDA2 iNLhCRgbLozTsWH+4qxjkxvW8fAY8+Wf+pObWpvZvCsCxqmVbFgYJW0dp713DePB7+LBzwOluL8K Gqc1MoycND6T+jF/HweMFYHkukutIFuZiLP4fWLcSXlGd28V5j6+6zj5zNljlcTk0sMYf/XsR71O 2MV/V3C/4gVm0ghRGRs22IyHeV+BFLFqZLw+zdJWz/KMM7WZpCVlWjnpDH65n3alw3yPRFGUqVET bR3x8+Q3utX1aVZmHba8LyNT2mjJ2Or7MdvzP77SSetzo9jW1i7Hjx+TadOmSWFhYbSRReehnKG1 0ZkzZ2Ty5Mk6Gn1QrAXrAfNQ4AwarZFYrr0YkO7ubm2DpJifaQ2kRsxWhxSkO7py5PCZfDnTKtKH pVdZIjJpVJ9UlFCwF8iswT3iaW1ERe5hJ5PP62rxOzd3QFo6cuWFLYVyy+JuKSlKbyNZy5dnZZTD rmxqyMfvsxy5claP9lvp+KJE5eVXJN7kaOwLskoZMO7t65EDBxqElmEWSkpKZPToUVJaWgbR6X13 rUaNem0bFFwPqSquE/rtkq6JLDHu6hE50JivChDrRXFhv9SWD0hVKXsWtaXywOG1Yck0TLR1o9ho EVufrRJJ+LBNJVlG88jwf9WagOCFPDwdGzFfbd05cv3cHumlko/BVXHCbCBRAUW7RpQQfZHKTzQm qwNSd1e3HDl6RCZOmiSFOPdrlXMxhvYOPofHZcqUyZKXZ68mjjeSE0m39lJIaC9UlqXISqUX8e/p S3GaCMb5WOf1Y/vQlquV4kqlYv4MGFuZ1uZXNE6tjXwmjLXv/jr2hCTluKKoL1pozIxJ4Gcwxlpq /WUmAiyWrzSSTagnJy5ziRQSKV5LGWtq/Q2WY7wmx2L2ycoGy4kpcUJ5I/Ekam3kR4Sx1ou+bE1S mPVlcIfSma2O8Xn9oQwnKaqiOaYTzJaNmePWvYrDYRM16smxpNWy2Jds3UnNVUyJEyonEk9iwDiG JprdFKKXGsZuDUS9sgURd58Eb2I/oeuYmvL4cTRsCEvifWxIMfZh07x7KhzdZGjMUquJ5CcUY30f p+HCDHAhHg5ALTWklGQZZXFMMV257YtUj/mTgLENXUeOsfN//Rcfr0CTKAgYG0rp4NhvIS4dBovT k1ERAf5kYpz8nW0w2d86iwmQlSlo/PpQMXZzFvcl7g97Gb0kzvNd4SuJoqNnyaF7jWgPmKeegS1a q1qQyPtlftp4rZ1MZcaTjJO8JiPJx3ySNxNPTLPdWEwYQYINsSP8WKN+x/y0iTUa+U1p48uxcsZG Z12fn/lMIcmTzJtMa1dl5OblyZ49u+XHP/qRfPWrX5MrV1wZK4oKcgtkx86d8vJLL8mff+c7kp+P TT/MLXIgIf73dVpHoCXdd+NhyUGevzs0IIYXJFhogAeV2jvaZP369XL11VdLGZQYfQM03wATBSC4 Drq0jZ60Lmx0X9hSIO8c4HSxMSqLcmTOxH659bJOqSoDGfl+yKEoX44+vxENXFoXpkgQ4eTgW/JI jvow0M8eCxRFOfLEO4Vy7ZweKS/uh1qUVFedVfUTCc9RAW4YlEtsGNCMvLu/ALkBuWp2j1qq6N84 0FmVTdJ6RQNj//FCIeU4SZHsKMN6lJOHuWtqapIf/vCHUg7H5CVwTM75yYXGY+rUqXLTjTdJTW21 9PdBEseMeaBCgk0hGY2BfYkEUy4KWKQU0tlBZvjhXHGsUNQ5BMmZIYCMrsmp1jz54dpiqa3oh4UO +EDnmMZV9cunF3XL+Kq+CFdQKd8Lqf6hABkfY1opRT2MU1yTDIoNYu0ZqjLvMlGMftHQylVkb8iE PD7Ul2w+lCeNZ3Plpvnd0ht1irJNLquSXb9Mts0b6QgsdyhqIqrg5utU0yn58Y9/LH/+538uY8eO lV4o+Cibc3n02FH5+c/ul+/+5V+qo3nKcc+Otogc5CowTOCD/tlqYxZ6n3gdc547oPCisrOlE6NE IydbnJwxFXhGwVtWKPLV6zqlHNZTxMTHmHKJDoM2hVife2R0uFGXtAxf1i1lNjysMJJDWYpjVNdP k0XzlEU+ZcYXM/y4wZGqgeXsoYa4gssmyWnFrIh1PAB5fFdx/mM5UfU40opDYKxyYGmJTsd9tYZN gOtkNCBkCFKEjRt7qmdxSoWl48QGDBsVTeYPGGPXXxuYmx8Ox/ptsXJwDHxX6JxdKhin5tFN2McE Y04MZuHSWMcjwRjrw3se3EJKW0Xvy7vivNbxJwxjzoL/zolnhc+1W27Dvo8/UhhzTAiuzzbS81/H 6XKcbNeASxs2WWFMZntZRSn7W2VynFTHdc73scr7EN4VfNTR0dTvE4I+Aoz5O8x7V7ixp2OjOKTN pWvznOv4E4axrRfDS7FUKC9xjHUBodf8XXGJr+NLAmPgNeJ3RQaMdWNGeipYjk8bP5Y3DuaTNCvz +S3tyzEa+Zm27VZSJvMsZ7AyX44rSX2Tx34xp6gjSF2IoojN2MAsTg7AOmd0i1nX0skBmizGDBaT n/L8YGWkDZdmmbXHWB1Za4yXcFt7m+zavVseXP2AKhgmTJwACxWYU6C11pYWOXzkiHN4TSlQOHTB KqK7u0vy8vP01jQqgQZwfV5XV6cUFBSqokKP0eDl3tHTBcuFPFUcnDhxQn71q1/JnDlzVOmUB8UT N7BUYrB38SaYHYtGg6qyG5v3R94qlNsv75FroLjJR782HsyTB9cXSQ12u6su75ZWWK8U5A1IHhUi rI+ALkl3b44U4/hYJ2JaUPRBw9LdCd78HCkq0EZhQZKrVhe0HKIMDdo+/6jCmgnlHd08joQPZOlB PP7xQkuMurEh7+xhPbRVlCOFaEcVQhTk2BCRxoxIJ6yjugBvPtoqwWZdh48i/i1Udnzxh79yK0Hh 0bq+HPLTQosKhm+sWqUWYbjCUA4ebJAnfvekWqhQ+ccXK+crP78AllldsJTphaKuFLhzJP3S0dkt fT3dkl9YAKyKtGUqMPpgrVSIvI4s+uqBmRA1y1RsmIIppVyKtivaf1i0YIxn2nLknqu6ZUL1gCr8 jpzOlUc3FEhrV6F866bOeIxdOOZHCyRiUcx5QJ/7gZcbr7Mo6wbGBdDmFHuY8W8Gu9aFOehCOeef 9TG9iidLu/rguB085OvogHzMYQHmkirBHqyRTtQlc0Wpw5+M5GVg3AlFS1fvgBRq21aixW6eQYIE 94U0OZhXTi1g2iW6MA8HGxqktweDVT5WxjjR766OLmk4eNBZh4HWhbnibQOcY36o1KUykLjzjwC/ NU0RmEe3vlw7fMOWYpyrLoPCCxke9/vNq0WqILob80FrKa4/YgEx7ALa8NZxIdYxylGkPacMHvss zOuXVjwPvdDxFsEgqhjPkHJhwVMG131yHXOcKsQ1FWVRixUQOBIqbdLksE9a6mRSsOb5FcmJkjEj 5bhn0/FofyiHiwRl+h19KSmiRc1o5DjZFvtntaIxoVKMsclxTYE/QwCP9jGSY9ik3h9RLZaD17Xt 2jRsrFNp2ID/g8SYPbP+6Fwxz45xfNaXDBg7Joe7j44b5/uLsZs/4ssPI/QcDbu2P0YYu8E5qDXt vi59jLmmLs461hFzwAiUyS+ddU2n5pyp81rHKvmjuI7PF2N9XIiWw1LBJK4KxMcLYwzpwt4VgzGm RA2J9ZdqJ1qThHc4jCFHJSXkaC3/b6eTokIzvY/ZhPsbyF59COs4ajX+26ndyPJ9jAE53DA8jgN1 9Rl3yEQEHbpSLlWMOWR21sZis6Bjwh+mGBs+Y/xbhUiTrJYMHg4mz/F6clgn0988lRwJRCVdfx8F jCNAhlvHblQfMMZA0J8rnY+PEcbxQwdwPR9FHDK3GFx2yeDDQR6GTHxuyabkmExXI7X8TQbLGZi3 NPN+OtlOsszKrW3WzypkqygywWzYGmMDlrbO+x2zcvJwn8pg5YwtrQXDfPn1mbZ6fprVmTca+8Ox Mc/A2PqgBHNmrSXgpgUKFQmrf7tavvnNb0pRUaFuArgRpWKAf4D4CB49dkS2b9suZ5qbsdnOl/r6 epk9e7YqDjZseFOqqqpk8eLF4OeRtjZ55ZVXZOGiRVA4FMiGDRuU9tprr6FenSxbtlwXX+vZFnRj QMrLy9G3aHiM0Gtaeew9nitlxSKfXtiDI0vOCuWm+X3S3kX2HD3StX5nvkysGZD5k3qhDHIb413H 8uTAyTz59IJuee9AnioZqPA5diZXKmAldHl9nzS358hu8DXjqNmYyj5ZMaNXKnEsis1TaXEM1iVH 9uXKKSg8yrCpnj+lT4/rWDmtTzZBadUE6xk+VBNq+mXBlF6p5pE4MLkNMIdC9EQONuXK5oP50grl QzE22tPG9Mm8ib3oGwoZtI5LEJMcziRmzsnha4gMLEeI4kIo56ZOnSYzZ85UJQPxpxXRbx78jXzh 97+gyoaXYBU2YcJEOXTokPRASXHzzTdLPrQle/fshUXZXsxLq1RWVsrcuXN1LZw+2STvvPOOfOqG T6myiO1TefTqq6/K9Pp6qZ8+Xc6ePauyqqqr+DcJQb+YiAMVO1NGD8jkWiieoGhYgPnpwNip+GuF 1VZlWb8cPZMnW4DhmVasM4y1bnS/zJ/cq0o5Wr4caMyTHUfypA0KtkKs6vpxfTJ7ApRYmCC2ePhU rmyFMvFsZ64qEacC0/mT+tS/FH1bbdqbh7WSo8rKg6fyMO89Wn4Gc79xf74ca3bre/b4PigW3bzr AIDvPqyN7Wib1jlUqkwf2y+zMV86XZwKf8iYK2d1ozPnMOAcgYf4MUlLHyp8UoFCUrk8anQQBoD1 OszZHMzHgQP7hUpWPp+zZ82WmbNmYixQN0BuK+aASqby8go0A4LbKWmbXFNcXwz051VVVqB1ZmKc VOIx8Bgn2z8ZrePTbXl4JgdkfHW/LJrq1jEtjRrwHO07kYu57JOtBwugGBWpLhuQxeAhL8VY0OFw WIpN9KdzmHWcY1Zr7IhWRhTFSlI5kfRzYGz1LXZynNy0uYI4ljnltDVqfU41aClfToxx1CXOmPEp ieLSCBEjIleEb0142CBvctKe8VhOVCcSxeqU8cFgHLWNvug6Rla7pZ0ATWPHc6lg7MABRnge4vco ujhijB3M+h3LgZBM7+MLW8cOPwIbMAbcI8AY3C4Qwvh5AWnQu+KTgTF/abjNdAyLJvQ59Z+HoTCO MYzwcmJiYQFjvl0yY2wg+e8KtaRBgf9eT2F4ARhDJt85+neMDUOURho7ual2UmUfxt887Rz75a8/ 5Id7HyvGrtv6rcOK8957HUIudYzdH8z4wXJZjMX/23mhvysCxlwcHzDG0XpMW8ek6Vp3hVmv4yGe h9QzDIb0h8BNeWrIQ//NY5fO613hxpD4tha9UcYcVsbYyi2Ombwy0pLlJsPKGJPmyzQei403yUe6 BWuHMYPlXW6Yb85vNsEEJjtlda1hy1tMupVZ7Msgn9Gtjh8br8U+f7Ie80azdWt5XybT+FsR/ZQA Rz/OnVRBSfCVe78imzdvlnXrXopEparT+uTMmdPyq1/+Sl5et06a4bdo165dcv/Pfibbt29XC6ED Bw7Iz5A/jk0tN+jrwPfkk0+qtVFnR6ccPXpUrVmOHD4sx46f0D5RofTC2rXy/Atrsfk1vR2GG42Y m+HaSliFQMHz+p484Ua/uU2kHRYotyyGwgPKIzSlvmXWvFugFhMUzJ4/u6kQigBavois214oD6wv lPca3KZ/7bYC+fUrhfLMxkI5BiuXs5D529eL0Ea+Wh6xefp4eX5Tvmw7kquWSRtR9/51xdoHGFPJ WSg6HnitUJ7fzOM9Ik1QJj36VpE89W4RrDggAU845bAv3Ki3YQy/eqVI3obiogcWTlSAPQArDyqz aDmlgRWiBOtpZdD4I8MrUnyM4v7wY7OONqkA5IfKG2JHpRAtiH7845+oNReVfKdPN2nf9uzeIz/F fG3ZsllaYDlGBR7n79SpU9LT3SO//vWv5cD+A7A8Yf9wJKuxUX7xi1+okpDWZG+++aY89thjOr+u z1GP0HHrKxGgMoIfWnjRkorHdYpx3In6krPtubIa8/LKDlg7YU5PNOfIr4Hp+l35UoC//ocw3/e/ VCxv78uDciJHlRW/WFck2w4VqPXXcfDf/3KxbNhbAIsi+LFqylHLmdd20/8PtKXoyxt7CuRHLxbL +p0FOFKI9nGUsQ9YPY+5f3hDEY6a5WBN5ciajQWy60g++gWrMTxBVFz9HLI3Yd5pmbbjcJ78Bn1t hGILepp4kDpPbIzj1oEbBRkDAouQSf2xqLzGo0THxvrg43rthUXf/T//uTz++OPyxhtvYE6aZOOm jfKTn/5Y9u7bh/bzVMnxzHPP4jl7WZW5TkjcArIe9nzc+SMNH+ig4jnhOKmAW/1GoTyHdXwW+NAK 7HdvF8kTWMc9wCkf87XvRJ788tVCeXpjkRw5A39KUJw9v7lAHkQ9Hm2jHBsqh5fKRP3hcBUOW7UR DytxwEOFSGjMwWEozSgq1NWOMNZnJikvKQedGVKOPWvWhC9L5aQw5qBIisSnpVhN6ewzM35QgocN ykiK+eKEX8krJznm8eSAxpxX5PguCGOvLcM4vVsuFzWagu1jgHE8zoCxvt9iPKKEzrmHDcgkpa2/ ZB2/PK3MkwMBYR1H4IwQY8Pe4hjipBzkM2IcV8iQiITGzzjfbUqLKanJ/xi/KyIYUus8DarkOk5B ohWsclodL5MtxuT7uGPM9eVBk0oGjM/vfZyOpv56CRhHyyqJDZ+vDOtP2aL1pzXP9RsQFTLJieqi SMsZUXTci7QMSzOEiFllsJjtKC2mpISe17siQ5spknXVYith414HlJzkMV7GSV7LWx3GJtPKkrEv j7uzoQLr+XKH4kujm2YijZghYx3NUJQ1yWQkB2F0G7gv0GgWs8z4Lfb5LZ0sM3AY6wcKGvIguIjW IvPnzZdVOML08MOPyPTpM2T+/HmOBVXon+jll1+RBhyb+Zu/+RuZOHGiKhP+7d//TR55+GFZtGih fOELv6+b2McefVSuu+46efrpZ5RGJ9n90BR88YtflPfeew8KqXtl3Lhx2LD26qI+ffq0KjOcwoNN RsNFRAXDZVNhxTCtV56Gz6B39g7IJFjtTIUT3umwlhgDfzc8pnQdjqT9EMqAxpZcWPX0QeGQJzuP 5skXr+5UxQ+HyaM2X7+2W2rK++XVHfny/d+Vyn3Xd8htS+E/CMqDf3k6R96ComjVkm7tAR1o58Mi 5hs3dkoZjjMdhSXS9x8rlRc258usz/TCkqhAnVX/xW0dMg+WMtyIv7C1QH75SrE6r54NyxcLtDSh 9dEWWL7811Wdcll9ryo+nny3ENYusGgZABZo1RZHNDmuOjMosBlTIrBJvaqghIL1VkvLWemDUqgD x8+o9JkyebJaCXXgvBUVRrNgjfLVr94LRQitRvrl4YcellG1tfKnf/qnsCArUquVf/zHf5QXXnhB 54prgFZg8+bN0zobMXcVFc7qiM6zqVw6efIkZEGZgCdJ/emwc+xvNIUokqOwoqIPHCrezsJy6zUo bOZN6ZdqzMMTUEhsP5ovf3l7u9RhTml19HMo454ALjxm+CyUEV2wjvrrVV0yqrxPjwH+5CXUOZwv V0zvkZehAKRi469u75AJsFrqxjw+sL5YHn+zQJbW9WJ99OFfm2CthvmjP56JWDsE8vCpfFUM3bG0 C8ezeObNOR7/p98Vy+RRrvvHoITaezxH/u7zPfCH1SNtsFh6EsqTdrBzK85/KbDhasIynER9W0cg cK7c25sFjtWLyBVxRnOMHF7qnDMq7b7znb+QmpoqteD6/n//J+HzNeev/1rbON10WjpKoN3RQCnu j5abA6cw4LdrLmpUF5JrkRZ7m+HA+719+fIdrMv5UzA4rOMXoUilUnTFDFhfwborB8/OaVjNzRjX rQpaKsregzXW/1pTAmuuXllJH1weHoSAIWoxlUFBch2nsEoHhbnh5KTqgRHjIMY6KmuUMelJOUr3 CjLM1VBylA552kQkR6N4pJFczUfcyoxKUXD8lkvFKTl+PVKJQroQo7J2WklUcDExjv9FjEMDVmm9 YXvRkNPmSulewccS42jwnAROWTxG0pnHx4PASIw1sFzBdO8SrUX+gLHDDtjQusqBG0VxXtFSGPll UFp6UAHqhXXscEpiMxhjcuiCjlmZODfGXq1P6DpOX5UONPw5BZosIaZRpIznwtgrN/ARx1QkPvbv CsXJweZB4Aj2jYKAsXs+uTaSgbil1h8XDTkMzShJEoJRlcWR3DcIAWOHTxrGBCpSwHwsMfbWQOTM 2qNoUhFAyuJkueX5Swebr7TAOgyMLc08ITZ5Rk/G5POD8ZPGtOWtnvEa3fJZxdkqitLWxjCSrRM2 UMsz9n9HWzljk228vni/jPV9fiuz2OpZWz7dl800/r7wsbdAEi0++uWzt9wCC5Mt8sADD8h3v/td Z6lAzPE/jyJNnTJFWltb1fIoH1Yl9fX1svrtt0Brk+rqavnKl78s//Iv/yJbt25VBcM111yrSiBa DlE+A/+4Mc3ffKT/wR/8gZtZ9TKsLO4LDHD1i5vN+uVrn+rSI1tU/hw+nQPLoEI4SR6QO5Z2Q0nT I7Nx1IhHw3iEaSpuQ9t2GH50YJGyYJI7FsOW503ul5qKPlhr5MhkHIfi8bCFUELxhxL9FdVB8fQ2 Nr+9dJiGUAg/LdfP61YlEZUcvGXtivpuKHvgNwYWJjuP5Mn0cTgmhbap4MBQ5MqZvfLom/2yD9ZC 8ybwfA+I2LVRYVIFHzhTR/ULrV14sxadOt8Ap8mVOFbHNtmq29IjRXBoKoUoKkDCCyzH/8SvB8qh V19dDwuvPeqLiMeUDsNq696v3KsKPjJSOXTNNddgTIU6H1Qebdm6Re65+27Zt2+f0lhGpd62bdtU cXT11Svlqaee0vnmTWqvv/6GrFx5lTBNhdTNt9wsN954I5RpvNmMCDsMrMvEg75sXtxWKOXAug2W JzuP5sisCZy3LlUYbIOVTg2OMFFZRusvzhlxWQdFBY/z7YBi7UZYjVEh2A2LIfqI+tLVXXoUjH6J dkLJdDmUbjwSxeNQBXhKOGfPby6TE7AUGl+NPqBDMyf0yVTwUAaWrew5kYOjkwNy9VzMEdqk/51F U3twDLBQ1N0U6tSiX2NxnHHd9nw5DWXUWDjl/sziLqmA0smtERupNy9uEhWLmMq50kl0FLJYVtPM kAVBHXUzjceTmN5w4w0yalSN+gXj83XjDTeopRefwbKycvnKV76ia8A9W6hoTUX90D9eXEdWELXD tjg/bJrH+qZyHePIJHEgfTnX8Vv9wCkXuKA25nEUxn/NbCiNUE6rpMVQxE3GM8Ejnitxq58LtiGL OpLFOrYaion133UNvfYIUQsxnyasWcfHIembzaumNMphATOOkIojOUqO5opjpAi/eZZrJfIwoxUY Me9KIw5QIm5EKpIFkbCoBFk8M/aMqwi2mElO1B6LNRhiEf/7jHE8BxE22g12M2qeXXJZEC51jIec K/TdxpQ1xqm54iTbrMRyouIYG5tba8di0D8SGBMXnXw38W54+E6u4w8S40xzRZpha/FIMR5mrmLx 0fNwUd8VFP6RxditYgU/m3fFJwTj+Dnh3DJkele4AiDivQv0OSI/PvE6du8Zx+4KdLlYuWssYreK Xn3jU45I7EdqHevIFcP4byfG5IYdDZ4sAWO3brAEhv59ooWOT2GN/4I5kLku7PdJRoxdVSefmLtq THxi1jGH/HHG2KY0FXsPmRKZt5lPxqlag5VEfhnTQ8khnZtLC9aG5S326xvN503KIU+mOlY3LR6J ooiNmmCLqbxJdoYN+DS/nvGzvgUr92lWxpjlrGchU97qWhljfoxuMWUwnQPFAcuZjD5OeVNaVib3 wuLne9/7njz37HNSVAznxvglRAuSDhwfo4XDM888o4oC1wj89ixYqJshWg3NmDFDb3OiL5uvf/3r kTPeHigqUkOIfxSjZSqNikugKYEwpbM7+ocLMfrGLI/G0BH1ypk9sgxWJPQ3w6MwP1pbJI+/XSiz xvdKDfwKUenzDhQ918/vgWVQgSyY3AfrISiGoNShnBI63sVGmG0xT0WBew/aH2dHt/bZJm9Ui2/Z wua4ugyKGcT08UI/Q3rNO0VSIOTSuS+d/NKnjTbiBqbtjoI/nq9D4cUjO1Q+sF+T4Y/ns7Bgmghn z1Qm6dEjL1ZtigqHfA0o1ODGZCRaFBUXw6II8zR+/HhYht2GuZiuCiDCSfzpd4rHDDmfdHpNB8kb N22GD5wDUHT1q1KQViz19fXqSHnpFUvlwQcfhA+jPVILy6MTjSfk68u+rvBQZhEcXfPDOeRgFYKo e+wykzyCuGhaj4ytgkUWjvhtOVQIZVqXWn3x2nb40YZFkOBYGPBABVpCUNxiWJD1gtABnirgpsIg j7rGylIcrStBXcxBO4781UAB1x9hxL7QeogzyqNoDNSJ0sG49g95Wne1wrKppAjKQKS1+6Tjvxq0 1Yr1RT9X46v7YIHWJetgfbYWt+7R8TV9FK26jNZNTomZbrnBzqMV12xKsEpmls62eewQfrSoQYsD +oZ+8IggO5NHb+3ofw54x4wegzl170neaEdlEXn4LJbhWaXSjsHNARLaoagDfjrqlP7MVKyAEOTg fz2OVxP51GIRaUV4NorxdqSjb0qjtVApcOWHFmQMeVhHVahHJZ9DF8Ro/CNex7rbcv1h0oLJsXz8 PBgPO6shWn9Mg0SyL0cnxeqQx7AxGiq4MaSvY7KmBwpmm1FFP62MkRxlcRjH9f21gdbisakMcsWd iSSxKcjQl5SHzTkxphx2gB8GNyYFhOME2ccm7odjZqOoChlxd0xeJId8ZEnI0QpWhzyGjdECxkTF TUvAOF5jtv4sjtefLkAssnOt48TzcFEwViHR10diHePZ5DP5fr0rssIYDzqnS7+yeFcEjAGV9z7O GmMFGeh9/DGOl0iMjfuz8v6+K7iOPwYY8znUv73xH2CFk79z/HdFwNgQwLNIwDj1+IEU/6ZmcbT+ HCf4UK5/Fkiwvw9a6NbNh46x9usirGO3gHRkkaGHogOCG6iWxF+20GJClCCdn2Qd40/K9HmHK7N2 jId5q2sxacOV+3zkzRiyVRSxIT9YnrHfCZ+HHUgGv16yPJOcTDTKNDncUfpyMqWN149zzLonlgQx rMzNan19vXz+83fJI488iuNKs9QahdZDlZUVcIg8XhVAVp83ptGfTVlZqT5L77z7jjTD0fWypUvl +eeeg4PlWXC0y/vr0TxevlRUMEkFAve/bJM3plEZo3dTsZfxLoa+YtxxMFz+JFfiGAyPylQUD8hS KIzehQXKRhyb4XGjwvx+Pf7yr2uKZeOBfGmAb5v7boyO5KAOHnv/3e/6E38jgRA3yzQ+PVBUHIKj 5LpR3KzBigJ9OwIfOOVon06Va3F0ai8UVtC3uFu0wEMrFjrMroEigUNxwWHbCvoYWGX8pxu6VMm0 E5YYP3uxSG+X+sPru6SL+gA0ou8k6wwzFiBQX1CaJx/HhBu84Mz6rrvu0rmioogmgoz5oVKIg+Hf PfLyncYjYsW4PaukpFQthJZfCafimAzOKR1UlxSXqOPq6ppqWbBgvh5jo/Jp3LjxUqfHCKnQoByn wKCDZn2pWp+j/rJNHvdbAgUerbzog2g/8Hr2vSKljQYWFVA0jKkUufsq3MrGyUUd4kRroXGw5qmE YuIgfDj14WgefwMzHMbc0qKLTqurYPVDnzn0OUSnzuzLMRw7JG85HJZTScRqxM3NKvoNZWEt5qcN SiY6tJ5UDGs3FNPvDo8XUibZW6AwmoJ+/9ENfXCUnQMrNcwXjr1xDm+7vEuPK3Lc6LK2qxOHtBJI NDwIRJSmw3DWOQin4lOnTdW5YhUqX/bv36/Yl5aUQRmJo4iYEx71nL9ggeODjGPHjul8l+N50zmg 5gyB86xN6kqPRsqxYxxsXkHA5BMFVjQSc6PgA2wX/HBRaceb/aCfUr9N9KlVDQUseeljq6Ud6xuO v/X4Hmh0Js/jlEtgWRQNj+KcbFZCcO0hMcw6Zhlb4UzZKJwU1I/kxP01OSQoMWrBwzjVLssiASQi pMlhsYMPDUXrJCFHK+konBxXP9VL9j0NYx2Da8eNyUnQb7Rn7Vus9GhM2lsU2DPOPIM+tzE2EQ2R YWN8KYwpJCUnyoB0fhize4pOGjaD58r1TFtTxLQ/7FzAOJ6reN4T6/hSxtjNqM0uF15qjuPxsPhD XMfaD375IWCsaPjYXMi7wpcTwxwwPifG+tcN4Nl7XZ8e4JbpfZwdxu5vlf5hj//wXhrvY/dmiFfH Bb8rfHk+Nsl1HDBWqPln3/3t1SlwKPGbf7pt/Rl29rsiYGygueeKGPqYaBagGbYWK11ZUY/llxLG 7Bd+d9mcn/e7goOKgnf0jMRUQXra2P2YvLbskvSkLCv35RttqNiXbfX8mOXMW+zLMT6fNihNRctI QlIoG/YbT5Yzbx+2Y7yMM4Vk/Uw8RjNZlk/GJsvasph8Vqa/7fjCoKLAdRSWErB2uOGGG+GjaL48 //zzqnDgelm2bJns3btXjzVxY0ql0rvvvCsbN27Eg4JNLJxVr35wtSy/8kr5k//yp3L4yBFYHz2t CgiWF8IPTi9Mcfbt268KCW7qSd+1a7fsxrGpXJhV6O8OdkR7C0si7IaOYPP+WzjN3XooX0615ugN ZDvgdJhKmqlj+nVzy6Nf9UiPwaZ3NZxS18IyZAaO09DShOJoBMHYD1RUueAaVB2WJl2d7l7409mF 255O5sI/C27IaihQH0O8uasQlkO0YKLz5ddxlIz9opJoHY5Z8Yr2GVBi9MNohFsz/iDIhcLkAPr7 U/h94e1RvHp8xpheGYv+0vpImwXIu/fsVr8/7qF0Uxb322Ywwsa91nikrw/KNswbFEOck25cwc60 C2AGBlQOEVPK4nyXlJbKFVdcrg6p29vaUQQHxe3t8EP1shxoOKDWIlTSrVx5tR5FewHOxq+97hrJ x/E0ysiFhRKvcqfzc5WJedSgGaSYxYd6DFridKM7NJShNQ6dR/NoGefksml9OGIm8AVEZRCsgKCc exf+cujcmnojKgTpN2ob5p7Owg9gLn79WpG8uqtAlXW0VuJxw00HCuRMS44cgj+ktVvy9UgU1wLH zaFzzBw9kaZSZgb8IRXB0zV9StEXURPqvrk3X29Yo30M296FY20/h/NxOsjm0cRZ8DlFBRMVShwu FZw7d+5Qx+45NAnSFjRy42eT5AOzto52qShasniJrFnzFNb8bmmCY3Fa6Tkn8utk2fLleE4KnRDU pWXeXlh0nYbzeFp2vYxbBBdAcVQK5SsVdTt37tRnkusF7BrcukCSbRsNCc6F9gMFyusysnByH3x7 5cgbwFTXMfB4CeuYXLwhrRf1+JyewY1oL8Pyi3jRF9jLmCMq2njTYKohNmutRo271lLUVEe1k3zm XX9QL+4Y66bkWJU0KolkQWwYs9xoqfq+nEgS65BX67o6zFOOBs24pC8nKkW1KMX6ZLMYGcsrh2ZM TjQ8cES1UwVIWT0lRvIGY4NSlA2JsQlOi8GtddgIWtEy65jF1jdt3fWFSauHOB3j4eRoA1pXpWtd tu3GGDB2+MTII6sUxcmb2WHnyslgxfcbY10RbCTusK2VS2QdAwMPNe1uqoeprCJGvKL3sRsXBqUF NjiLrjJpbwAAQABJREFUSdYCLVeq1nU4MH8x17Hri5OtaXy51gPGg7GxOUphk3GuWBGsNneD5Xww GKe1r5M6xPsYZWEd87mK5kV/s+msKWFIbMAfMHaLXZdXBJlFadiAyHzAGCB460YxwlcaVgqUoRit SXAMwtiTY9xaFXTl/SivYxtQesxh6dAQK2RRMdNJuvFiF5HGyypWxngoOeTzQ5KPZdamyfP5rcyn Me3LSZYNymdrUWQVrVEDxBozuvFZbHSL/XpGI6/RjWZ5kzNUO8ZvfIxJs4/lTZ7FuMTMbWzJWABz nYoKXk3PilQq9KsV0Re+8AXZvXu3+quh4uHaa69V/0W/+vWvpL6uXlpaW+Rgw0G5/fduhzVInjy/ 9gU9Rrbq1lulqqoKVkmfl9WrH4RCYhmcY0/TNubMno2bsh7VzfHvoV4vlFJUJvF4zTxcBZ4LhQ8V KzaN9AXzmUU9emzpASgI6qBcoTUPb8Pinu62JV16+xU3s2WF/Xpk6UcvFKsDah5Rok8ajrQMx4xK 4N+GlhF81HkSrhrl9Feje0PQ6f+GTquJCekT4RS7Eid7eDNWeVG/HDqdBwuTfvjMwbEoWDEtgG+i a+fAyfamAtkKPy99sHI5jONVq67okong45NRyjaj8VBx0QErjEcgj7Kb2uhHSeTaebi5DfPRCYXN /T+/X1bdukomTZqkR8MgQvvDmGK0r5xFZKj8oFKqoqJCrWlMGZKqQUaMBwPirXaqiNO6ODaE9u64 8w75j//9A73pbOzYsXorHR1UX3311eg75GNOqCwsxfEmKiqo4OiHIoqB/aXD7O3wZzQPPHR2rpof gofAdyOP7tEihX6D2Acq5nh06zocDXx9tzsiSJ9O9HHz2NsFsDpyN5sdBc7XzO3Ro4E3LepV5dBq 3IQ2Ho6om6Cg4JG/VfAVRFyvnd0HJVO/PPRmoWLKI2WngOvdV3bpsSj+QSyBBRgVjgSSCg9CMBY+ j+5Y3i1PvlMAJSAUd1AE8Ygj/fSUYA2Qh76STkGB8tsNxVDo9cnJFljVYTw8/ojDm9La1iw/+clP 1fH32HFjYVln7py1Kf1jTEEKCWJagBG3u++5W37wg/8A7j+FVdE0VfTt3btPxmAO+EzwGCD9ZtFS jIqlhx76LY6c1ej8cI75vBFgWoDxVkEeF50zZ46uh9Qa4CzQEogrgOPG2sYJTyoviRtxYMe4RudB UXQtfDU9g3W8DT7AuI6pnOU6nox1rGNAe7WwpDpOpe1rxRgHLKAac3X9z8NzQCWUDpSNuREj1paj OEVVeQRFedEX+9VCWhysLgl+OiVHRURytKqxxXK0AdQ3guVdI0bVFUE8jNPkODZ8G8FqsCBdFim+ nIxVyKTBl2O0KIZY7YqJTzbNqlpmMozBVeAy14A4JecCMaZAyotiTVjzMQ5GsA5oL2LkfWzS5Dg2 10C64IgWM2jCl/ORxRjPEodqiDFW1D5JGMfTaigQgRiJ2AJL111MHmodU1hCTsA4RngQNtEzO7J3 xUgxxnwOeq/rKk/MVaqbNoP+M640WxoxqxGsBgtMdsyEFQFa9F7XYrL7VWLWjERXaiJMPOOMcpIy XIWPNsaEwB+XgeCgcaWgGcZG9qsYLU1OTHQJE2HiGQeMY5DS1rFRzxdjqx8wNiQ0HoSx4ZPGxUxG 4B0X6qQ9CiZjUJUkgYyo6yL3W4ssmh/B37zoHWjSPRHoNYSdx/vYusT+2Ski6xlpUbCmLGY1S5OF eW7Dab2QpIOkNNK5i/CDyfFpVp8xPwx+N5m2eka3vDInvkxegpyehTogq2CdsoatknU0Uz5TmU+z NGOCyMC0ffz8cOXkY7kvL5k2mcaXAwfSV+E2qyX0SdODs1Ojx4yWqVOnQoqryg1nRXmFTJ48GcfN JmgZLR14M1pBIZwxw3l1VVW1fPozn5bly5arJcvJxpNy/XXXywQcU+ItahMmTFTnydW4qr2mpgbK l3wojOq1DSo36urqtDkqqqgY4cdtdDkkF3jcKw9PUP1YQj+gt2ZRSTMBSoNbFvfoMRha5PC6efIe x9EYOjj+HJxc0ydRF/b09CnEHfN4bPzpY4U0yqDCyY7RUKHUhwepGseORldCwQR53Fhfi5u3qKxq gx8W3spFpVUFjjTxmA7FToOPoZICljsfLlfBqe8VdX2wjMmBDLdiebSHvlzoE2n6OKeEaO/GESco HW5Y2K1OlvsH8qTp5HHd+N/62c+qLxr+1k1Na3pS6dFcEcvp06erQs/VYbt4wUT/UUopLIhmwn8U bzcjxvzUVNfK3LlzoLzqVEuvyZOnqPKI64AvBb64ODc18E80F0q82bPnqBKR8hioHOTtddPqprnF 55aOlrH9jp5c+GwCxrU8AgarIuBB66LR0ElyaDyeVwxFWh2UR4Uw4WnBrWLFmJ+rcIPWUjio5rxR 2UTlEq2PeAsdFTY3YQ44Fx3AkEfb6lHOwPZG4TjgDVBEzRjfr0cAuS5oVUbFEJVWuh7QD1o4TaiG c3Pws11aePHmrpmwGqJykEpEKhanYd1RudIJ67LRcIR+44IeGYd6WJVy5FCDrF27Vm677TYpL6vQ MWpHMn1F2BB3+ntaMB/HyaAlpK+o/PwC3Bq4SO684w59TmgFRcUsFarf+MY3ZNTo0bBaOitTpkxW Hj4ntCKjsicf88Pb7Xg0MO3ZwZjZSx4fIwYcL0EfDV9R9PmE06Kguznhc8N1XArn7fTPxGdkBdbx 0mgdU8G3A8/UMShBv3pdt1p2qTVYHZxbz0EDGBuaU6WULQHOb/yvvLo6rEQL8GUBdK/IqEa0dax0 FZqR2VUbVESCEV2PUnJclYwVrQoL9a+3T8hODvHwa1GOeyKtXZPDP+EppNIrOVzT5Fh1xE6ClTK2 dHpS6V5RSoQjpvVMhWZkdtUGFZFgRBsTSF4yY0WrwsJPGsbEK3p3O2wS3z42WkSCET1gvaSTYDyR PD97qWHs9c0NwwiMLZ2eVLpXFI0yjtLWccA4DcaRYDzo3RUjzMfaf1thMoZcxyzzKmqSBCN6i9dL uhrGE9X3s5f8OrbB+GP1hq1Dwjsfxf6wopFqdOlgbD20MaF7XtL12XgyFaWPJMUxkr95aNBbY655 6wTbTrXvJ0kPGGf7uyJg7K8jXV3eshrut5t7BqJvvw5Ig9afV/6+reP0h8DrHhr32ncFJBjRnil2 3CPj2SuBmxLuA3fs2LHx17/+9WuurnKRkx+GZEya25ilynw+phl8GY6S6pTlGVtHmba2fBrpFkg3 HtKSeaMx9vmYzxiGaijJ7PNZoz7N5zc6Y+NlOdNU1BA8U9iwk5ZGUnmMz/JWbvKs3I/9NJVfxuun KSf+PPzww//1zjvv/Hobjhu1wC8Nb8Xq6cXukT3CRpVOEfk3mZYiPCJGhZJ2FhYR5OVGljE3pzzu xHc5F1Mfdp298K/iOoCbpf5/9t4D3K6rOhcdp6qdo96LJVm2ZdmWu+XeaAaDYzA1BAh5JIH0hLyP vJt2k9yb+/I9bgKBkBAgIaGEkoBNCWBs3LtxkauKbfXedaQjnf7+f8z1rz33OvvIEtjC994x5b3n nKPPf61zrDk0C0525lY2bYWiTgtsctuObLa1tcIXkz3JB3X51xEmiHZjSxcPEubZ29wO1MefPgTS hj4TAJzEqnDC+wyurN/ZhZuvkCzAziL/YSUcLg8BJoOoz51CbUhCMAnkByGD1tzMlVRpYs1JeFvL oPMxSpxhk1YmcXvUIJJMPkDYch3Y8rNwiC7iYTKEPijjK5agk2iQR9ytsEU7gNJXYvQhCbFwJg6b PvgwVqh8yf7yL//SMfLsCGzIVvJJw3TEGi5gi8kCPgNiWhbpFQQeZN2L7ACfVxGa1/48EAifD8+h 6gegTEIU5qGdVrbQTC/egZpnpEoAFlfIlO9NYRkh+SHIt2KFCldw9XGVWIE7vfNZcpVR32AzfHGV V0oG8oY7PmP6ZCLPR0iM8Ry48orbC1kzPD7rwh1ioF5KJtEWURgEpkOgcXsAnzMxS4dCp7+kEEuu 2mGiifLN8MNVVIydITC5wg798Rm7b4yF71v/QLOdOrfZDm663b7z3R/YX/zFnzuuUCtjqmHM/1ln wboQbMIwE6d8biz8OWPbDxWH3x5sH/zgr37Q/vRP/9RXdfHgcWLNZ6PDrRkpf3ZY+LMk5/TGFVTb cX4Qt5DxJjmnEQeMpx8JNQM25f/J9B7j3edh776LjuOkCFT4M/E8Vn2t2tqMs5l6HR+wYArbT/H8 +P6eg3OKTp7N2OipAJFNloJU1gSYhvO3CV2eA4awXd1l0XRnpKGIpYb6aerCniguXqdbtQNXKQTE Ump5XNQtKclQSU/dXKJklQ1oo+3j4Bj5QqEkixW7NUYtPLdTSGd29PvYjSk+l00Ukcq6tOMjLdVe KozLMeYxZG2OIDAGCASCJcMmEfBdvA5FhW7974qjwZhmq3ZqvmS58NggBkmUrLIBs2i/4t9jH1ox iiz2YsTDsPlZYcx4yp/ELM5XJsbAE4GVvysCYyAAPLKfh5f89/ExYcz/n/P/vnzv07tfxpa9W7Xf A5IqxfUrI/u9VPwMeRz4yu0UNEqwHNf3mA7dcRFfHpdCVu08dsoIXfcne4//18CY8GRPN3UzUglX iU2D91jyeitKpcx0YAwwCExWCkxKuF5WjPE+FnPyFEHVOah6RkWdqp/uPaY2F3lwocGNN974hRtu uOFv4YmTFprnNIAfFv5TNNuki1f883TZz/mSgXidnvRFZy0aaxXR2BdddU6TfCOaHl2ul8uX7TTL KrtHbOgtkVHVoleVxSddMgRKwbEWnbL87aZCOfXJk1zOZ+xVnmxTTm3WVX1MOOkiFSYJmEBIQpgw 44Xk9hROssnjW8GEhBvEtjTeRsWiSW6aDGHCiCUKzilkKcPVSv6XMzcO2/A7yNOfSQWNVssboKgH A4WoI9CP3/I8MJfJADI4uWcjRUAPtIMbsDBPXoetMFM7h7CiZ8j2YJsQt/rw/+5ur9RIPWoOL4Dc dcihHFFgE/9b5l+c2PbCluzoMRWsgpNkJZdq9SiZrKVf2swVTO7E4c0YG7d98Zp6fz5uGn7wX2kB s3i2iak89/fVY0z7XjiW1PAkUWrWY8zEBBNMHE0flvz4XzgKHSei3c8EIgoThpxdE29aZsJiEO8H ySmRRivpxWXybed+JB/xmiWqs9JXHcZpbD89xvQiVOUr0TwAh0KIkU9COteHLWq6SBFtokkO2xwp QXMYP1c6zZyMLW1IrF166cVI6nG7Fn8nokDGdfFF8dTns/KeM2nHE6UDwJUhQbYPz5DFMQaB2wTP OOMMnCU1xrcg8n3wLWmQIf7UoR2e+cXitNSCJzwj/LzwVjkePs1kJWMixr7Ny+VyLEjI+5ROPzfe gh7yWL6ya+teNEDkaNwm6j4khw4jscYkXz/iLi35+wdiWScdf0rFeyw/NOjPAGNLfHooiuuXkmy4 b5JdqvhKEUMHdGLjdijhfNBzO3yPgRHHkOyk0fB33jA7iVXYcY2a7eLnIRmib9hFReH0e5Q076Kq /cyWRI8JGnV2ZCEp5r+PyeFP63HFOIXjgxA2dc+KI5bM/0kY45kxq8qnRAAcAoci/b9zpPc4PdWE mbdpRvi5ndQ5WoyZaS/tFNEc//fYQXjp3+MGGPNnW38/4chxX+ewnwf+NvcnAtkSm8DY39Nhv4+r GANgTq4DY7086cUpfsrq/n5MTv3v4+LnQL/X9c4Nwxjv5U+MsYzyDa/Fln7m/W0f8ffx/2q/K3wg GOKRMS7GzENG89/HIP/vjjF/Fzb+ewXfQwLA/7e4EBvoV/9+UmD3U2CMf+/9CX9XwKmXV8B77HFU sQGREDp82d+5SOTPncInpi87xvRf+3tFw//n4XfO8P/nKchjxRhDxHPl2bdHUSREZ0osFCA5WGor GMlUTcsO6dLJadRnn/qIztuovFTlJSt+tRZfdZVf1z+WRBEV86DZp5O85E4b8SQrOclU+wKBNYv8 Uk46pIlPGRaBJRnVopcyeLGd14JfrLwB61hL0oZDRXasBo5Sft40s9+7Hk7gqOaq1koDHPJtTRv3 YOsYtnhxO1Gt1GQTrdpP1OJ3aE0t85brUVs+M+G6Zk2GZPlTnUSTTI3GH/Hu7qV26mlLfZXIy41r XcAvQ2cizmP+9Wvz59DISW38NVRqL3ENu+G6CT/RZUd1zVr6y53kajWfId+oejvk12zU82r0JIUz jQ6ejwQmVsg1t1pLO7IxL2Fpbx9lv/Zrv2bjO8dbS5syPcfmYMFMsw9fX30GaRz1Y8sxl48aNsSK N/kdQl5rMrZm5kjIDrdODg622OiXFgYFE3UgEAgEAoFAIBAIBAKBQCAQCBwnBLiTgUU1mmn65FT/ SlPifPJUkyGPH05EOF3QlEE16bJHR8W/uKNVk2dbNtRmnRfZoF3ZIY1FvtTPaeS9aDmWRFHVYO5U jhSQ+qxFU60BVZM8lJVNyaomvcqjPPkssiU56SVu7UGwTxn840P6p1+uhuCBuTVT+ncTisIM06n4 LxlM30yqcFUFFpP4OT/8Fyr9y8aIdsrwaa4+PPZYOAWt2Ul9XmHOLUmdyGXVpq5JPv/GZeE2Bdep +3Y0ZnjxJxVZL/qVLq1yOxpX9eDopTJN6YkaqDiwCSqYk000CzuSS4SML++QU1KtVIIdqidptAqM Ozr4HNDNskSSq8eGVJaKnZrFOg4lG9txE5CFHfp0IWCH5KHruBv/8n75RdHKM88RFzZFOFBzw6W6 GsKuxMEZGYa5ayfXYpMN1rQjjIf4r0peKtgMe485xuRA0Y2MsSNU2E0VdTo6JnhHz6uxHXrJ0HEh SdaZHNaZOHGiPxfZHyZwHAljca4UH8HR/QPDcQwsXAUCgUAgEAgEAoFAIBAIBAKBwE+AQOM5ST53 wTyEUwAK8pMXKWvylstIljyfQmSK0lOySDVFahO5ms/cv3Rlnzq5f/mTXNU35cnL9UlrWI4lUaQg ZUgBqF+tFSjplFUyR3qqc71GcuJLPrdLnuJSLRvqq5Z/18GWMtKzkrr5i+GmC6lUYcKMBnbB2GPP 4UBnJFcuORVbW7j0nV69FApoV1vU7cHKhG37OOFMCjzsePqEZLdcvkddRNt9qMm+cX8/tn2ZveuK ViRycj/JW+07nTfEfm4nRaHgUHtGgf0UHbe07UY8D6zst9NPaMFZQfCB8VGMEjynhefl1JeaPo+I IZephEbF3ZWMJDMSxo0SArI6fEzJqPgpipyWc2rx1ttBkoynGkO0GQcqOw+d/v4eX3LYgjN0mrBa Rj9LTL0w5eH/cWA06yUfPYgVjJl46u89ZAd2b8Z5N+3WMWUWZNKtdbLgRr2jWGWnJkGZAWxbxIa3 GpHDLOJg/C0YB+VGwpji3NZ1cN8O68GtZe1jOm3cpBmekMmxYczkH9q3E+ZqY+6YPBsrfHCFHt7f /HnRo8aQ2wER0dAri8akfqLm34qcNN4+qLHlMj+LNn9cC5h/Fu7DZyAQCAQCgUAgEAgEAoFAIBAI vKQI1OYk+Rwkn8tkx9VQWNMBtdVnVDVjqV3lqU85TuZUUzfnVfua+Mm+ZCnHcqQ+eY30SKvq0VZd OZZEkYzJoZzSoHhKxqgvZ6RLTzTq5zZEl1yuI1o+KOmSJ7+iyZb6rNV2Hl4A6mUlueCklhzPHTo3 0SWIvIq9sH3IPvWffbbslBZcdQ7XFOZM0j3U5OvsgMwVbDxo+it39ftWsYOHhmzGpGb7jTciCYQn UeSO3BV3sOzrHrJbHsONWOC9+ZIhTxSVKPoKEfpKpdZCv67DrqbqqfZkB2UYL+wMYEL+7YcG7cfP DdlHbmjDrU+cpIONeLfsHAJ9gFu7fZg+JreXDkG+fEmrTZsIeSaTSkhlPMVW+070F8O4Ku/9AmPP wTAWmmLJXZVtH1jiuwj7RSn0mvAwDu3dYVuevQ/bpkbZ7NMvt/bR43DWTp9tfvJe6+3eZzOXXGid U3jDVlJy3Cp21C1rgJYwAqWIpwlJob2bVtny7/6djZ95op375t+3Vizfyn7xlOr+rFxPzyo9PX4P 9vfahqduswHc0sbkTZKgGypgFzuSUHNOu8zaOybirGb0gRlhS4EUwfChQ3fNQ9+1TU/dYfPOfJWd 9roP2BCXlFGkeI+bcILz1lUP2XMP3JgOuh7qt1Fjxts5b/6wjQMmnk10Bdqnqn4EYYR2yiK/IPCF cl4ho8c0/PEk7To7pcFoBAKBQCAQCAQCgUAgEAgEAoFAIPCTI8BJUjl3bTB9KSwXOYNstuIMzVJI ryZ9RFNsuSzb6rOmLGtOpJQQEh8k50mGfRb1pa9+4tbsk64im1VZ8RvWx5IokuG8llEFkgdMnmQV nPh5TWDUlw5r0jT7lEwuRxkW+VAMqsmTPGvZU5v8rEANHCYi0uQaLFryDlXStJy3Pn37oX5cB2/2 cxdxNRFX3VBRpiBXtP39K8i0QDFeOb4EN0ax/cPHBnDYLg9Tli5rd+pvylQc8PwLV7bYKKwkGoer u73ID15s94O+rwCiHtt0VAgqF0YVfsTyRAYJKFzZNGtSk117fov9/ff67NHnm+2KM3DeCrbV8XDe zbuH7NbluKULmat9B4dsy55BXGffbGNGIQmBuE+bN2gzkewarIsnw0BO4YsHFbPrseDLHypq3jSV omOdl7yP8SJbxduterCqpmPcOBdMSRI0c9FypLmtvI34cLbO3i2rbfn3PokVPnNt1uKLYaPZeg91 2bO3fd669223zhkn2PjpJ+B3SOEFoPDARK7I8WHVvvAsEADlKMNwsBIpHSae4t61caXtXP+UjZk4 Azd+tfoh2MwcMuz0zNxYGkYxlkTxI9x87D0H9trKO7/iSSwua2NSi5i0tI6CjSEbNW6izTj5PBtl kzweX3lE4xgr317flgaf/X09tmvtch//3KWv8iTg4BA2OCI5VHsWiAu3942GzUP7d9hexN85YwES XNjk6AEX8RbP1JfZceTuKx8TPWNAhIcvFQtk2Hc7xVid7l/DCDVWtAKBQCAQCAQCgUAgEAgEAoFA IBD4aRHIkkTJVOM5SHZGUZr81ITZ54eKnM2zVhvNYWUk/ZxOpSPZIF/ylGPJ+2yL7swGfNFftD6W RJGCoFElbhgIP+LlgeV06rCIn9e5rnRon0WDVZ2o6TunyZ5sSU501eTTtvqSSzWopQFKFB2fZFMJ mluROLnzyUG78swWmz8dV45nSR5Xgc5uJFR2YeWQ3+aFY3emdGAyj7kx59e83estF2FLE64lX7tt yJ5Yx0vJM194abuRhNqxF0kHGFy6sNlX+HA1ks/PKYvCvAS3se3cP2T7DpmNam2yqROGbPwYRkE+ Y8B2NCwUGYPzjXbvx/XuaE/uTDEQhGJ4Pse/6oxm++a9zXbr4wN2yWlMLKRtZ6fPb7YPv8VwxXqT Pbhq0D77g0F7+2WtdgoWlfA8pJlYTcTtaZTfjxVQuzFuHvw7fgz8jG9CYgwcBE6cNu8ZsnGjkexB lmzvAVxhDkxmTGzy8XGwKR5aUmRosrALMpMxO3fusltvu8POP/8cW7hwoY3GtfcuwsxbXam3473C jhsE4cCuTUgMHUAyZJK1j0vnI3Xv2WqHD+62tjFjbez4qUhuAMOeQ3Zw71brObDPt6iN7pxiYydM xTPkMjA4RVyHD+61g9ha1nfoIPIgWJU1YZqNRVKoCddlMWF0YPs6j5+0Q/u22oE927GCqcM6p55g zbjljc+WMQ4vXEuEQj94BrNPu9QPx9qz+TnbsfZxGzV6ks05/QqPpX1Mh43umIwET591d+3Giqnt OEer10aNnWCjMRauCGLhmLn1rGXUGBs7aabt2bQa8e+3DrTHTMTp6fA4hAO4Zp9xJWxfas9j9dHu 9c/YuAkzbFQnzg3i3ktKYdwDuK3sEGx1d2GLGhJLTFZxxVFr++g0Jsj0Hj5oB3dtxla2vdDB4fHj J9u4bAubG4uvQCAQCAQCgUAgEAgEAoFAIBAIBI4bAj5DPKK37IwiylGBH06GfIqGmkW01Et9zt7y QpkqjXxOy2WPfH5y2UY6ECnlJFuVY5+2Wdiu8p1xpK9jSRTlduRIgbFmIb1R25nZl/RJorzsqJ/b Ia1RkR/yJC87qkVXLdmhLDuYqZNdFGhQiWs+tGqlBRP11ZsH7MDhIbt4Ma6khZcBz96kUJhIWodt aTfhXKHNuxJv0rgmu25Zq525ICVCKN6PL67Q4Wqe9PS4Ogh88Ohj3Y5B+9rduKodrwx9nTy72T74 +tqjojfO1e9dMWC3PTFgPTxmB/oLZzTZ2y/BVjCcMczE0s2PDtpaxDN3itnKTbilqietHnrHpa12 4iz44yuJQr8Tkcw67+Qmu3/FIJI4Q57Qoo8OJHYmjAUKiGv9DsQLu/OmNdmi2dRHoqBI0OxEUupb Dw7YKvjhCiuevXTx4hZ7zdktWH1k1oXk2T/e3O8x7u3GlrZdkMO14hdh+94bgc+40QgC/xVfbBQF RIcX6TqMkZjdetud9qO77rHr3/h6u2jZBTZ92hTERXzcQE1PJpxTs0PyEK5z79q+HqabbRySNf6M B/txjtAWJHsOIMlzko2ZMB2rd/bbmkd+YJufutPbXA00bspsO+mSt9m0hWc5LjzHZ9U9X7ftzz+G xAm2hSHGjqmz7ZQrft6mn3iuDWIF1IE9OJ8IK38OYaXSY9/6pHXtXG+jOiZB5l2+XYwxcZgagT9j 9Pl+OA0Pa8z4KXbG634FZwS12VO3/LNtf+4hmzB9gZ157a+ls4n4IIHRno0r7Ln7vmn7tr2A7Wp9 1ja202YsOt9OvvwdOJOow3qxMqnnwB4kL9tsz4ZnbM3D37FeJHEmzVtip17xbpsw60S8X9jyOHqs rzJigoxRdEybD/NYdcTfZXwWkNm2+mHX7969DT8LSBSNnWgnXvgmbGl7DRJmLX4205qHvm2bn77b +g534/kN2GjILLrkzTb3jFe5ndqo4cYLR+wPvehHFQgEAoFAIBAIBAKBQCAQCAQCgcBLiYBmXrI5 fA6CRJGEND2TEGfSjaZvNEYZfSQjO+KzZhFdtfwkbvJRzNpF8ppyRyqN/B5JfhiP89BjKdWANCAG z3aVT9uSYVuFco1kxa/WtFG1I3+qqSOZnFa15X7rz4cBqUFEJClJ5EawMmQ9Fk60YE/WCVMxUeZO GkyYKcWKK3y+8KM+e3DloJ12AhIvJzXbWiRXPnNzL1bbYNJPURbVaKaAUxLJvSHJwtU4S+Y24XDp JtuBOfqKDWnVkdSYkKK9zyHxsg/1JUua7WQkfu5+esCWrxlEsgkuioTTLY/129Prh7ACqMlORCLp nqcH7ct39FsfVhfJHmPgiqdFM5p9RdABrFBSrPzZQE7FI9XqKfaZZGKihz86/Nx0/4B9G4miOZOb bNnJ2IqGJNLnbum3x19I8fThDKPHEdt3Hh7EKqchO3NhE1YUNdm/3N4PvPo9Znrx4oEV0fn+Pbax KgmrXGbNmmm/81sfsjmov/RvX7e//8fP2QMPP2r79jOZkRWqFCYSNSWaaIcPiyth9iNZ04xlTQM4 aHrrivv9s+P5RzG2ASSKZlo7Eiw71z1pz9/779h+td0mzFzoNjc+cbutBo1bs7iFbcNT6CNRxGTL 9IXnYMXMFNvxwnJb/+gPgQ0OPUdS5jBW+FB23+bV1nNoH/Dps93rnrCVd30VyRQsIUOsHKoKnwm7 rGsFFMoB8APb1vv2tbE4GLu1La1I8nHhHKPV999kW1Y+YK2jOmw8kjv7t7wAP/9muzc8i4Rasyep hiCH/YK2d+sLePat1oMzmdY9erO9gKQOn6f7QcXYurav8djHz0CiqAiG2+/2b33envj+P9hOjJXJ s4kzFtn+bc/b07d83g7s3OCJoj3Ysvbs7V8EfZ1Nnnear6CizAsPftf6eg6mF01Gy4HyWbFTP/qS HY1AIBAIBAKBQCAQCAQCgUAgEAgEfhoEON+om4cccQ6iiQk11JZ39qs0WR6JLl3VkmMtXfLyvmSk k9e5XE7PbZFe7eeyde3aMpU6csNONbDcSd7OlXO62rKjvupcr9rOZdRmTVtMdgmYnEcb6g9rY7Kd 89IBxHUUqgwv3TiAmqtlfMcT5T2/x3NrzDZhW9r9K4fsBmwt+7mLkHlB6Rg9YB//Vp+t3DxoF+OG NCxaKV+jNBmmFBJN+MNv5F6wAqjJ3n0VtqfB5jMb+2wfVvjQVQkcGt29Q7YHq3QuXtJiFy3GKhec fbRoVjNuUEtbwVpxVRpXQ/Fg6v/rtS1IXLUgOYS1IEhQ/Gj5ABJQrTYbfhi/7HZg21ofAuiFXD10 6A/BGoOAzRSpd3yFEc8u8i1ri5vsN69rNd6EduXpQ/bhf+r1FU+XYVsbAabeqUhY/eZ1bdaJ7XBc ffW7n+2ze58d9JVH5Rg9oCKqkpj88fuC8861M047ze657377zn/ebP/zbz5pV195mb3/vVgNM2G8 r3TRoEp16HkChPFjIH09XXZozxYkikbZNqzM2bHmMQ4O9G7QWrFSZz4kWbjd63Jf/TNz8QWegNm3 dY11Y+VRLxId40aNsgM7NuDcn15s25puJ5z7Gt/atWfDCmzrmuEWDncxUbQLiZNWm3/BdbbwvGts LZJIT//wMx5DP+y04kDtuqRkcl17OB4Jv5p9e1v3vm3Y1tZiHZPneEKGz5UIcwXR+GnzsM3sGpu2 6GwkuyZgm9k2P2PoIOJsOvVC27d1LVaC9VsH4j3z2g/i1rNZ9ti3/9aYAOuCDLercbURz2MaAB5d OzdixVK7dU6bWyazyNsA+f3b12Jl1dm2+Mp3++qjbpxntGvN46CvsclzTvLtb31YlcVzoOYuvQrb 7HCC0pzFvlppiOci8dWqPmoi4T+e6Qk4iPEVCAQCgUAgEAgEAoFAIBAIBAKBwEuAgM8Rj34OQnFX QU0ttRlJYcVpoqsmP29X5aWby+XybKtU/YqumjmRkRbv0A55uW3pjVgfbaJIgeWGNLBGA8jl1JYN DoJFfdW5nSQx/JuyHKSSQ7KVS8oOZVUESslDsiDnpyfsFH7JvNRrbwBX3nBLFndccWLO5AfntNyS xS1bvX1DtnXvILZhgQ+ZfQexZQjH6HRhRxIfTbLOb2hCkQclMwNDCvls0DYTSthhBF/wAr4LiI96 Es46ugRJooewemnX/j4kiZpsybxmTxbRFAvXIU2biNVG2Lo2gOQPLtqysxa2YEvagO3BSqS5U5EY gRzNsnDLGBNedJdoHhU46DFOddHPJ/cHMbZ9SKCduQi3t+Hg7X5gMBMri06e02w7cIYSx0J7HBcP 8u5EQopnJ9H/idPNdhE3rFLiweCOB+0zIC81jEXkyqLRo9vt0osvskmTJttf/c+P2U3f+U974xte Z5MnT0QSZBBPkBYa26HFg0z0YIsZz9KZMn+p1wNYIbR9JR9ck3ViS1c/ki9MmDRjxc4+rJ7hOT2H D+wGG1jiTCNeE08v1O/ECp4uJE0e/dbHvD8HyaUZSNTwHKNuJKSYLJkw6yRsy7rOxuGMnolzTwaG Q/A7zn37UH3QKW7iJYydhy+++Dw96jC2jnXjXKDWtrE2YdoCp/vDYRIJ5wG1jR1vB+Fz3SM3Y9VR f7riHnGMgl/6PLhrgyeUpi06z6YuOMu3O3LlEW20jhqNd4Dby/hT0IQtc8AJK6W4TW5053SstvIg fTXVrnVPAZ92rDo6bKvu/prr9B8Gpjh7iT8bLJ0zF9ik2af4GU/Lv/sJmzR3ic069SKbteRiaxuF W+bwrCjp43WNbPw1onPiKxAIBAKBQCAQCAQCgUAgEAgEAoGfDgEepMEDSNK8o5jdwCRniT4V9KkV fRTH1VAkiZFYaycDiVali5frUYYuWDi1y4tmPrk823k/l2ebPNmT3PBERr1c1caI/aNNFClwBaJ6 JMOSV8CsGTSLEj2pV/vOBypq7odtfciXD7VZ04bs5LqiUcZLdUWR6ClMiteX4rWxKeOb7TBOhd6H w5inj08vWZrRJ3dMsnBVUH8f75zCbWW4HexNOINnzmQMHMkQt6PIkHBgkonJEX9VUSv5VFhDEGiR Tzl8+Z1asD8GT+6D17TandhKtnLjoN2HVTnfe3jA3vfqNtxgBqiZhIJ2C3wwscWLpoh8M1Ya0Zin yVymNtbte2EXK5DGFjea0Tdcu2835kGlmBMRTPzH8bIkm1Qo+t4o5EFq8UGIh7h88Alx16W/xC6/ iYgbZCBsQbAf++a2bt9hDz78iN1x9z1IGo2yX3rfe2w2tqP1Y18cR15nh/EU2PqAsDevC1uh+rHl jMmbs6/7bZytg+TK7q3YRvWYNeMw6M5pJ0Bmgz1609/YYaySmXbi2X5j2X6c+8PzjcbhUOo2HAbd h6vqp590vp2KlTfbVj/q27TWPvxdbGN70Ja964+QLDrH9u1Yh2cwgK1rJ+Kw5/F4hmYHd27yLW7j ps3ByqB08LOPz39lpVE7xsW4iYGPCskgxtODhFXLqLHWgVvZGA9XGmEpkF9nz21wXCU0df4Znjjq O7Tf2rCShwdn9x4+jCTTViSwmtNqJGQG+3AL2n6sJCI2Y/2Q6Tbf1kYZnuPUj3OXxs9YgIOycZsa kE0rjQ4jhr2eSBsPrNrHTfAxto0eh0TZGbgtboHfUDcOK55OfdX7bPOz92G10lrb9MxdtuXZe+yc od+z+ee+Ae8MXko8n9rzSi+P92tEQhMlEAgEAoFAIBAIBAKBQCAQCAQCgZ8SgTQX5pymVjQH4cRk 2CSETH7EYJs5DRbR2M7pVR77KrlOI5rssGaRr9RL37RBftVW3s/t0IbsNdJLVrPvY0kUZWplQI0y VpTLA2RfQab9WKQcuWjgjaTIU9KJfA1YbQ2ccrKTy1DOWltb6wCXkl+FXpV2K5ggQ2PRTCZbDOf+ DNriuTjfBissyOYLNX5sk40GomdgZc/1F7d4YmTn/nSg9Eys7OFiDEpjPu9R0x6V+5Ew4Xk/nOt7 MsBp4IHGFSDMp/BmMQrzynrK7UaiagMOhL56aTNuUWuxF7YO2Z99pdfueLLfXntOOybwTC7hjCPc drZx55DNm97kZyg9i/OKuDVsAm4558HQLBzPYRyT8/T6AZs7udkm4OZ5hshS9/MDce+7WtJlWDzw euyoZluxadCuOtxio/CUt2El0dodA342Es90Ij7UeGHbIFZZDdkYrG7avm/Qt+udgpVHvAEtSdBr Kp48Shkk122G897ePmw5e8C+/b2bbd369Xbe2Wfbb33wV2zx4pPdh8YkG14TQLeQYmava9dGP3h6 LA6s5odJkUP7d+KGs8N+c9gY3Fq2bdUDuBltAw6mnmenvvoXgVOL7cK5QsSVB2C3ALg9uM1s++qH sOIGB01f8wHbhVVHT938Geveu8X24jaxmUgUMSnl7we3s2G1Dn/UuX2Nz3bC1Pl4F1t85RjfZF+x wwBZiufjoRc4UIa3qw3g7CAmfkZ3YpUQ/jCN1NfbbdtXPeyrfeacdpmdfNnbcObQd23zivtsDG52 49lJPQd2ITZsg0McXUhgHdix3vZu34Dzi57ASqBxNnnuacUqJMjgveCZSgM4z6gN5x3193Wj3Qd8 sL8R8XCLHldXzVl6JcZ5tu3BOPdtWmWjgd1EnOd0ELeubcIh4M3YtrYYh3bz0O8ncabRni2rbefa p23B+dfCThpq7RsEjjX9N5xdE4xWIBAIBAKBQCAQCAQCgUAgEAgEAseOwIhzkDQjFbs41zhNIn2G UrqiCOkSFSOnS0881tIRT7X0GsnkPNmq+iW9kVxuT7ryqX7D+mgTRTLWyDl5ClR1I2dV3SPJYorq Jbctm7kdylFG8pTJdXIfpKs0YftSzqspldTMTUHjYc4LceDzfHx4cPTrzm3x84qozETOrEnY/jW/ xX7waL9N6OAV8U127zODtnztoP3RO1p9NdIeXB//DFYAIS9h2/alm8geXT2AZAG2Yc1qsZmYg++E zGqcacRtbruxLesQkjgPQ4YDWILk1DTccr4NV83/9Tf7cFNZs115RovtR/KFyRZuNRMYTDodxK1p 38RB0xee0oQtXoYVSAO2FFfeT5vgKSnh4YmmJ9cO2XUX4twbJH48mVVy0YBz/thwdVK1dOLw7Utw /tL9uIVt/nRcqz7JcED1ELbiGW414yuWfuA45hXrzb7/cL/NmdpsD64atD2QOXdRM8aKRIefjVSz 7vmd4tXiI2BiZseOnfbP//olG9853n77Q79ql196Ea6IH42VRDz8qXx4pRFiVj9SJMGQ+Di4a5PL 8OwcJok4vv1InPRh6xRv/RqFZEjr6E7jCpleHPT8/P03+q1nXdBracUZS1hFw8KVPSuxgofA8Awe JpGGsGWNN6Z1YrVPH24841YvHmTNa+N5yPhAXx8SNOvcZ8dU+OdyL+h4fgRDSDG7+fRVGRaTTIND fUhgQRdJGOr5F25+49XzzdtbcebSct9at231jz1xNG7STN/q1YXEEJNFLe1jsJXuKXvkW5/AOUJb radrv02efxpWTp2Fg6g32Yo7v+y+d+FWtJbmNr+17ambPwufJ/jNaK1YzTR1wVLcErfZnsPB3rxp bccLj/sKpPnnvwG3nr0KyazDtubH/4nE1FabtfhiPyCcq5NG4dwkrq7yRGk2zPJZsYGSxpXa8R0I BAKBQCAQCAQCgUAgEAgEAoHAS43AkeYg9Tel13muzNCG8YoZTR1dHfLEpx21xf9J66od9nP7eftF fRxtoig3lDvInYvOmkX91Et90phqEE+ykqnaE71aU0+6uS3qK09CndxeHX3YQ4cVLeBwg+wUHnwV TWFqPFbiXL+sxT7zg3575LlBu+J0nP9TJE/Gj2uy913dYl+9y+zG+3BOjntE8gXyJ85M7ncfGPQb wnqQFOG19hOgc9MDuAkMNt5zdZPNmdKMVTaD9g0kdziR5jlGPDj7P+5lx+yXr2lCkqfZTppl9vrz WpBAGrQN2wdwCDWSWNOxkmlZs68Y0us2HbI8q+jr9yDhhAOw50PmPVelBBe3jHFsTP58/xHc9IUE Ea+z9wK644COw4AvJr4WYRzjsD2NJeFi1o636F1XYEsUxsTzj9phYgBxv+2SFrsMN7JxHDr7aAHO d34Sq5rufGoA4x+y67Ea6uqlaWVW7XEl+4VnRM8VM4gTz6QFGbW33XC9XXHZJTZt6lQktAZ8K1oK ko+bhbVHXXyTxnQRz2BKiRqeOzRh1sm4iWsJ4uPqq5RA6sRB0JPmnOrnD3G72dyzXmV71q/w1UFM /EyeswQrbnpxNtB8rAIbRHJlqS1adr1tXfUgPg/BDs43QhJp7tJX2dQTz8HB011+ZtDkE07zA525 ioi3rDHRMnneYiST5pcruxS9R14bAoNHSQTGym1s46ctxBav05HEwXlC/qLgTCskfxae/0Zsqev1 BBZXC03EgdI8h2niXIwJh1T1Y4sct5fxEGwmetYvv9X98+Drk6/4eayummpbcRvcrrVP4qG1+AHc E+ZgtRZ87lr7lJ+LJFBPufydwA4Ho695wjY+eTv8jAFeV9nJF9/gmDIxdvIlb7N1j/3Qdm9a6beu tY3rtDlnXG1zz7waMkzu1QpXRaVxFqNNj7AmEK1AIBAIBAKBQCAQCAQCgUAgEAgEXkIEjjQHqb8p vZyscGKmqVte521GqH4erWY4rDFLLksjWTFzHtuyQb7auYz0WOf0vJ3LNGzLcENmRpQcazkQLRMr AyUt56ud12ozg0KbKZNS02OfMtWP6KzVpoz6oqkuMh+lLPstN9100+9cf/317+vD6o66wkg8A+IN NIesG4c17+hKyQTKcpvWx3CT2aSOJvvgG9pcJrfRhVu/1+9E8gfJm+kTm2wWtnMJNrrbvCclfZg8 oRcmg5hAYFJnLFbn0D4PxNaguLKGeSvKctXSqHZyUGBmC2ztxPYybiebiyRTB7a/Jckm++zNvbZh x5D9wVvbbQO2n9HHHMQyHnEnmQTutr1D9lGsTrp4cYvdcKngooP6wrh4OPVMxEB/9QWHLPcM2cZd uA4eN69Phg+/Va0IdT8w+S//2uvnJ112eituPBtE4snshGk4nhnnJnWgPQU6HKfir7evHlZOYUUP f2gHmaHLnlXSo4HCqSOmtvTRR3KDhz0P9Pdg5Q9W2mDVEFUOY+tZ78F9ntgZi+1TJPZihdHB3Wn1 0VjI9uJq+yEkp8ZhNQ+TNPTPQ7C7sdLo0P5dvmJozPjpfl08k0YDuA3tILahcWA8N4gHYLv8ns2w M4ib0WZ6IofPxouHz5iLftZ0Pmx2Q7f/cDcOp55mo3E2kK/XcvEkzMOzew7ssVGdU+CvHauF9lg7 VkiN6ZxqPQf34wY2HITdPhZbxKbirKSNnjzidrGxE3hLGw4WP3QQ28RwjpFjS5upMMZ2nOU0BnY9 TIy/DweC8+yhPujQB7fp8ZBqJpD82UCH8RzCNjQmuEZDd9yU2Uj44SBw3HrmwLt5t1h4iioQCAQC gUAgEAgEAoFAIBAIBAKBlwOBfN6Rt+t9teFmqRtvvPELN9xww9+Co3/h5gSGCR4q5jXpLKKpz5qy +pDPIv28L5omYLIl+Ua1aNTNZ47qi89ahXLyK9qwWkEMY1QIlMsdi53rMxhmRFSqOuqLL1nSlUmR TLWWLGu1paea9BdrMwviMt/4xjd+Dw/9vUwUkZDWrHAIeWlCUmLInlrHFT39fmsYIeVKoV3YHraP N4fhkGpuG+OiDq7cYWlGcokrV7yANIDJMs8nIoXkdGZPYuffLlfYLw9+rgsJq1HQpy8WtyWj6NMH b0lzHrJQqzZx65nZOSdy21aKh5N97vDyHms0ug7hvCAcZD1nqtloJKGSfdqhVBJmjyYYl5/LBAIT WJ6BhU0W4qJxk8KVSp4AgRyOFrLH1wzZbNyGthD5iHT9ObCBDFdXLZ3fau+4vNlvQ6OtwjObdYX+ kjd8V4RIz7creRs0xlktvt2Lg0fyQkmaJhz+1IRBsM9kEO0zWcJzhdwngUkHSSV+EYknVHj2UOGH fgeH+mGHJPzhHkKW0hdonmTKaS7hFhUua4+dzvlxBt5UbDHzBweAfTVRUnU232OOwfn+XJjg5Kou JNYQvz8f+nabHCMSdbDrY2Zyh244ZsqgUEzF44ENJrjKWFwf9iHkdsox1rTKeCiDD5NIXB1We1Zs F8/VxyjdqAOBQCAQCAQCgUAgEAgEAoFAIBB4KREoJ1Y+H/H5ToM5CBNFWFzyxbe85S0fg3dMgOo+ VCOtWqcJFaa5BS/ns92oLzrYzpeMT50ymvisWSjHUq0TNX2Lx57ssZ3T2R9Whq0LGSZRI8iYHFTh rNIlTwuSZU1AMZP1QhnpFaRhVa5LJnWoT7o+aHqp9kVXTd+cAWPujtOei5Ia/OYnTViTU27zabKO 9sN26vT9fmYQVSh1ChacMGfAVUMso3Ct+BiuTEHhCo+k793Camr7N5kw4omW9JWMJnKhyzhexI5M uj18cebN4FAY29wp3G5m2PaGO9UKn+TRqtItkuV505z/8yYyrqJyO6Ap2SHbNE9TLFU7iZb4PqyS gPOHkOGaPmHIpuIMJm6dY0JLdrhNbdZE+NePldumMgqFNCY0iqaz8o7HJYOJmyWIwNCYZK5IBBWi XjHpwlVKTHgoOE+gIOlTFiaLiuI+PSDElcmQVMMGPKw4qi+gFduuypCh5H5dtzZsJtT8WZWC6BUJ HY+RdOoWet6BbfpnHInOmGkHXD7QPB4mtGrKrkWR4TGnH9wcG9okZilZhXYFY3aJexkv/RcfjRVd FOqmVnwHAoFAIBAIBAKBQCAQCAQCgUAg8PIhUJt41OYg2YQoc4y5k89oQGLdqFTpNJQmX7WpT653 JHvkyZ4CqvZlS3TVoh+ppqwG/6J6x5IoolMFzLaMyxlpL1Zy0Kgn3Txo2sj7eVv2aYexN+KRxiLb qZe+RcMCC5ooCqmuldgSStwm3NK0wp645d/QzTm5myG78KIL7XU3vK2cNCddyaRe/becqq7npp78 /WR2eL4zh9murWp1j2wkmy8WT653JNnh4+lB0ooHbvuKqjIWysEOfgaVdEs4p0SS/2gWpnwVEhJg pHnao0xMMCbaKATLivEVzznjkSpx2ZEp51G2MEnRFA/tONcposqO82CkZqdwWGeHWhkB5jzvRLNs k40GUzwkJUkkWpxKXq04PykkXYbH9CloSTvZYY992qy3kzzU2aE6f1u+zBj7KBhMXUCMZDjGLhtf gUAgEAgEAoFAIBAIBAKBQCAQCLwUCNTNQWSQxJ+oaBJD5dyIvJDPUkxKUyf7znVIpnxOUz+b7WXa 9fKSrROodBRXhTy8e7SJIhospqF1RjRwEfPgqjzKiCa5vC8brOWLNYvAyuUJVtof4yL+pYHncmSo z7bLYHtNjSbr5KLICNtYeWTPPLvC/uqjXHE2cvnABz5gb77hndg6xbAqBhuqSUZ1I6Ej8SQvGdWi p0Fz11M/95rVlWo/Zx4L70iyuc3UZpKI0Lx4PMnuMOt8YiCmB4dGKeDpnuEOXaD2mKsCuZ3SlITq 1MitI0gqq1M8R7ZD8cxOQ7PJQm4n0yj95fxymMOIyZ/0VScjw/04nUJgJVk0SpsvHcZlHGWDnumo jkBilEAgEAgEAoFAIBAIBAKBQCAQCAReOgQ8DZAmOekf04vUA6ci5dwnuSsuwNJEJedq4iIekwCy wJofJQYkozqXpfNsX41HkPtRW/4gXlfI50d2JEea4lA7r+uMNOooEdOIl9PohIbz0ogm5wowl8/b kiPtSHbkkzJVm9Kr2hJd/mRDcs5Hnkj0AkF2RZKr1GeyqCxZfqmkodHejqvJXmHFR6QhvQJi40qg V1A4rwBEIoRAIBAIBAKBQCAQCAQCgUAgEAgEAoHjh4BmpNxxUSSJ6Lwgi+ukdLBuNb8gadJH4lGm yqdpfqST19U29VlIV1GCSX3W5DfSzemU07AUA2lHLEebKKKRPEj280Gy36jkOiO1qwOWnAbTyG5O o7xkNXDSRK/WrptvPUtKSYVtZhbTaEmrFZfI90K5UL1MTTpagUAgEAgEAoFAIBAIBAKBQCAQCAQC gUAg8EpBgPN9ljSLT8dzeDqhWBCSz+6LM4qOlK/IzeXt5CR9yyRrfiTHOv9ILmmlb8myl+tKRvp5 v1E7t523JTusPpZEUR4kDcmB6pwmR9KhjNriqa7GILmcTho/uS/pN6plQ/Ks1aZ83nb93IEzaydb QTiJu0ydprTcRHwFAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoHAKxQBTuf58XNd0Uj7jNCoWxBSF3ye lyAjzzXQFAtpbPMjPpplW3KkqUg+t5/rUq6qp77kZEM2q3Uur3ZVpmE/D6qhQEbMDTMwBZeJ1NGq 8iPJVW1Jj3S1FWcjn7ldyutDuuTlgzy1yS+LK4EjARdjx0thpsYUI+pAIBAIBAKBQCAQCAQCgUAg EAgEAoFAIBD4XwSBYnafMgPlnH948NkZRaUKpKTxYrTcIFclsVBHWQW29SGPRbzUS3y1WctONQb1 c1m2FWPVblVuWF8JmGGMBgQ5IYt6jYLJabl81ZwClXxeU0992chpsiUe+1V5yYiuWnaaiocuuVRD qjRKjbJTiBWrjGRMdb2R6AUCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgcArF4EXn80PDAxQSB8OhW3l FNhnES310nc1k1DNu1CHRXT1q7aTVO1b8pTLZav+1D9auzUPRUuOhjEqBDkSmX1+5Jg1P5LLeSAP K7lczpTeSPxcVr5Jk3weQ06X3ZzGdlHSheLqeQ0NGVUth+qrrtOLTiAQCAQCgUAgEAgEAoFAIBAI BAKBQCAQCLyCEShm8+UdV8Nn98UFWDmDbeUcVHOMeVtjliz7slGVE/Glo8oAAEAASURBVF2yVX61 T7lcVr6qNfVYZF9t0Z15pK+jTRTJoGrZlGMugVLA5FFOPParhfyqLcpQJ9eTXJUuWfmp2sptsC05 6nk7P8yaZxC5gqwUtbpUYtFRV6mnAVSlxI06EAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEXlkIpDm8 5wC4a8iTRaTxk6cSyqhFrAqwzyJ+6iVDVVnxGtXU10c2KUca+7mtnE8ZFdFVk563JXdU9dEmimhM gctw7jRv5/xGdNmSXF43khc4uRzblBWPdV5yO7mcZHK+G3HGCNbqhDOsk9Oqa7mIOhAIBAKBQCAQ CAQCgUAgEAgEAoFAIBAIBF5ZCKQ5vC6tMiSLnOIHWtfP/hE3CSJSLG+zL5roIHkRXf2Rasnlfiir PmvJjGSDdMroU5UjnUV16h3h+2gTRTTYaOBVRy/WZygacFV2pDBzv9SRHuucJ33Rcr5okpEN9Wt1 w9POkzq/m5htRKNqsGYgWoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIPDKQ0D7hHj8jNIC6Siapsok f4TDrKXEoXmKoBhjTme7Yq2QGk6XDepUbVRppZGKrOgj5XdGikV6w+qRDFUFaTgPWoOpOlS/Kk9d 8XRSd9UH+5IRj/1cnn3JsK4Cl/clR1s5nX0kfKqvgZNhfDgk5asEizTEL69dJXeTbMR3IBAIBAKB QCAQCAQCgUAgEAgEAoFAIBAIvNIQwDoin8zX0kRKMVRPLi6Oq+GEX5N+tZUOUM1Bksc+P2qjOazk OmLmNOnKl2TyeiQfI9mp0nNbDdvDsyINxXygeaB01Cg4BVCtqcuET26jkaeqHmWow6K66ld0ybBP GX1EZ10WZAfzBFTN+FAduZT3Rmax5pTEKIFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIPCKR6A2mS9C BcFpg55EqMSvCX+WDSjTB9QSn2rsu6UGtfRzGenmdkjL++h6kV128nbi1miyKbrsSafKl1xdfbSJ oiMZk0MaztvVPn3ldiSb06jDItkqjzriUY59yVRr8VnnhXJN/f39dWOX8ggLjQp9uks7GSWfG452 IBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIvIIR4GSeh1iX6QsQfIJfnlrkwRdbzzQQKrBQUm0nFDS1 xXOLGU8OSRdPstRVu5F98qXDdqMiPdnRQp1Gsi9Kq0uWvKh0EpBj9vJg2c77lFM/5+U02sjtsc9C mZHo0hc/r6t6klVN25QfamlpyWmko+TLz6oLz8imijaiUZ5F7lMvvgOBQCAQCAQCgUAgEAgEAoFA IBAIBAKBQOAVigCn8MXcPo+wmiDIb0rP5dCm6EiJgNxMIznpVeXkgvycNxLdR5HFUdWr9hvFItvD 6mNJFMmRgmY/L+zntDyQnC6foqnObcmHaOzrIxrrqpxssVa7kXzTwMBAAz7MucWkrlTRkA64rnpz y4l4hJco9x/tQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQ+JkgkE/q83bjBAJCbJA38MClTL7aZKif kgr1PMk14lE35+d90vmhnopkxRM9r3N5tqWTyzRstzakHpkoB40CrQbSSLaRHpNHedC5HUajPmu1 Rc/t5TZyumSVpMrliidJsyC79RqbOaLx48fb0qVLaWPEMnPmTGjX9EYUDEYgEAgEAoFAIBAIBAKB QCAQCAQCgUAgEAj8TBFowvYzn8HnGYYsouICrJEm+dTi9i7ymWdQG00vjfSKpIPrsK0+FdhWXiTf NkY75KlU7YpXpVM+p8lOTpPNYfWxJIpkULUCklH25Zw0ybGdy+Yy5LHkQOSy5MlunuSRDG2JLlnW LJJJvRQP/bSQl289S4HyO4WWvqk2ZAMD/XbhhRfaZz/72SKSFI5/pyYFbfr0aTbQP+Dt9FVj1uxl bDZlhMveKKRSp3AMduqMwBjsNMF2cdlfIvg3917mDuWYdc0fZVw3s5OHRl4jOxqWW6Wu7Lj1ZDO3 k/t0neKrtENhlNyOKAKu3l7i+reMBMaAowCyATxiHQ+MM/fRDAQCgUAgEAgEAoFAIBAIBAKBQOA4 IsAJYirlMUXeGD5Xws4iTTNzps8wYUE09pUkUrsqU3gsddiXfs4TbSR9yoqX66ndiJ/zaL+qn/PL 9rEkihoZlKPSYKWR67DNIpr6iVr7rtpkX5m1kXRq2glw+VASSXqqh/KtZxJOoaVvp+GL78akyZNt 2dSpuY/hbUTZj6RSraRheCKl5qBgg1AkLjyRQ1FPgxTflC9LssNhNQ2zA6GCNpKdlCSisczOsHeS /GSoqQknvRc/MUkXemDJDqVKWbRk1cn+lVINNReOgMKss+Mek9vMTkEobMsO/dBvjct+8h4Yj4wx URJotWdVQ9FxTeAWUL/8GHtM8RUIBAKBQCAQCAQCgUAgEAgEAoHAzwwBzImONCdHXJXDrBVpMXvy LidW+aIXEjXZYs0PS66TKI2/pSuu+tRXTkS8vJYfxlItsiH6UcVytIkiGpPz3EGVRp4cNwpI8uLl fdllLb4SPSP5F1+6jeTEq6vzh66AJVD2i8bQ0KD19yfMFdiRHNV4xWY0t1OjEqL0TmKCr/OPSGMA uZgCKnhJlAK1d6TOjl502WmGrCd9ZIi6edFoSEuOU86Uepmc2/XoJFUwlT4q1b2RLKFZxEPh3Fxd 3xmwU4aSbJJc2kE7ea/ZqfECY4HrUBLcopQYOeOVgbFiizoQCAQCgUAgEAgEAoFAIBAIBAKB44+A Jp6YH2GexNmnz8mdnOailZg0rfJZ1Qg8JYtyGbVVU5Ve8mROtZ/L5q4UdE5jm/L8yA5rFemIL9uq JdewriZaGgqBKCc5vxGNfNL1yeWrbcqwNLJTHUwje9KXrGzJXs4nL5fjy1AClIyzm0hpTYVUSrI3 9OrIeCZVDNpfNZJhTVJ1rp2TeGUIhTwqqRRSzvA2W7JT06uzw6QQWM6lnXIJXU2eVmqF9JxXtKFX Q4cibszVsvCSGanzp6wopUxmh7S07iXJ/e+GcW30QkE1OTm3aGfYuOT/IRjXQSGIog4EAoFAIBAI BAKBQCAQCAQCgUDguCCguVlxzIomKJqmZTEgZZCmsfUTOk13cx7bNcM1G6TldLZzffWlL17NQq0l 2Rol2cp1R9JXDLnuEdtHmyiikapTBSqnqnOHuY7arHNZZd+kJ7lchrxqX7TcHmX4ES1vi0Y9+WDb FVLCJaUy/NslchUq1fopGPabsL4HHC6Jwcft+PtEDqQokr7cT95LNhRikko0SqFPO64vqndGtuMx yFuywZ7HVNjJLSSrw1I2UOF4pK/aR1OOpLSDxtHYoUyKA68cjDdDrwlfTU211VH0lKJJFmVXVPJL O1WMi37SoUaSrllKFH5LhhIvFcZu3b/SmyQv9MUxOZ78wofvSlNzM5YyugLDKMrRYjzcDm3SV/Iu O6C4C37VRs141E9U9hMVjZqdlwNjj4deogQCgUAgEAgEAoFAIBAIBAKBQCBwfBHQrChNS4rdKZwB ca6Gkk9XisUl1XyFTLDmJ1fJTZCuj+jsS5802ZCdnCc+a5aqLmnSZ5sl15dN0qtxkHbEcrRbz2gk d8o+nbHktdqk5/KkK1DVlGFRpiDXFd0Fsq+qTMbypvj0Qbvs6+MCI30pWBmoraIpKWlA6HK1TXMx 4R8cHLQBfLhAiZP1ZiQ+mATw4YKWkpDJuiylhAkCwyuXJviJT5t6QelkyH0UIygC94VQ9JU8eLKl 2RNKxQiYeAGfdgoKkiGMgz3GVXsQtCE75HJREEPgVrvEQYXivNQsbBbjc+0kWWenkPU41C5q4jWE Ty8O/u7t77O+vn4b39lhLa04YxyO6ItmfQiu45RCO1WSoU/3m42ffW0rZDsFT41CusCGLDpphHGp A7XBIpDyWWXY0CKRUkmLqoZjTFB93NAdwBZGnmXV09tjY0aPttGjRsMd/6QIacvHV/mxSNH7iPz5 DA7goPXBAWyJ7Lfenl4bM2aMjR49KsWb2Xqx97iwSLd1xWMAM/klVOykyJIO40wCJTZF5DSkN4Tt mmppjeQogUAgEAgEAoFAIBAIBAKBQCAQCBxXBGozkspcJpvnKSDMoSnOqU1+GLHYNVNpCsc+Sz5F TBOoNK1SO0mlb9nIdar8XI/y7PMjXcmLp35eSz6nHbF9LImi3FAebN2cEEIMkEU127m8+uKLl/fZ bjSYRjTaUyGf8eS2ZJ90FvZFcwK/6gYBbU+ulFyIewaFhvlnyA52d9vu3Xts//4uO3DggB3u6fGJ +tgxY238+E6bOmWKjR07xlfODA7zBsN8FeB0aBD2UPdAf8eOnTaAxIQnjFyHfhkEvtBkOmHaVNhF UoAJDLK2b9sB34fRbsaEPNGowRb5TFB0jBtnkydPcqrnPTgWl3Czaf5fZIn4s+ATe0iwMAxKs3jt qojEGckOGW7XaYwy+VaLybAdu3bajm07rfvwITt4sNv27NlnO3fusv0H99u73nqDzZkzG5AAFNpA pdva3GdhkSyWIz0rJsQ2bdqMZMxAFi+seKiwwFiL+NwXvtJ4nVEMkuMZxPMba1MnTU5ixbMaQu1Q IQ4+QpqtLwkbjpkwdx/qtg0bNtuhQxg33pmuri7btXu3bdm6wy69aJldevEy68cLIjte8wvjyDHm 6qsDXQds4+Ytdgh2ursP2b59yda2Hdvt6isvt/PPO9eaMW7h5OOinTJAjh/GSfgpMC7NsUEQiE3p JKErbDSuUoeCw4glNxqBQCAQCAQCgUAgEAgEAoFAIBAIvKwIlFMXzWUwJ09zlDSXEb+4KV1dzWJY kya6asbMtvjsq9ATS86XnmrpqS959vkhX9Ms8lgkK57kErfGz2XFO2L9kyaKOFdXUXDsM0CVapCi sxYIsqO+9FVXdfJ+bl/yqhWT+qwlzzYW/ch1MikF76GT95n28PktJtlM6KzfsNHuf/DH9vAjj3py hwmjA5i8jx072iaMn2AzZ86wC847xy4492w7+aRF1t7WDnv1Fj3bQBKyDs3NLbYJCYBP/sNnscKm D3N5hZ1iY6RpZUuT/eoHftHOWnqGGRICA0gwfO0bN9qzK1ZbSwulmC5i7PKGVSdYuXPpJRfau9/5 9mTMTadYyoicVvjMkk1UINXDTNo1YAo7zpchp6UkkTdduwmxtditP7rTbvrOfyKxdsD27ttnvVhR MzAw6GO/9KKL7IQT5tlgX/HeMxMD3WSDAaTkVV0IYPozgajcc+yHsULpH//5X23Xrj0pJ+JMYkxt fEFJ8rLndUFPQ2hy3Jadf469/72/gDigQyViwxqfPJlG/ZSUYQvFjQxZC57rmhfW2V9/4lO2c9du JHb2IVl0GOMesMNIILW3tdrll12ElWVYZSU16rPDUthhRVvPrFhpf4d3hEm2vfv3exKKK4sOHz5s M2dMtwsvON/6YLssjLPsJER9HDT8E2KcmUOzsFM4YZyNEo3EhoGwSl9sRAkEAoFAIBAIBAKBQCAQ CAQCgUDgZ4VANpfxuRHj4MyvVrjowolpFlNN9kiwmO14l+r6iM+as1Hpi+7TI3Qoz7b4uT3JSId2 JJ/XbLNQPtd3YvE1Ej2XKdtHmyhSEFJUIHmg5EmONXksoqVe+hZNdc7TAPI656tNPgtt5HbYrvrO +dSplMbsZMjTBJ686cM2n1tvv8u+8vX/sKefWeGriGZMm2YLFpxgo9pH2ZYtW+35F9bYs8+utHvu e8AWLVxoH/rV99trrrrSt0Ol7V90TcsofCExi2ZiiC9hFyb/q55fg5U2O8DDEAox6k2aNAH2Ftgg kiueSPJk0iASV722dt0627BxIxIQhYIbH7I2xLRg/jwkZdJKOfcDWzxTKU+XlFpCnI7LTIinyere NorxLR7RDnjJJu14MJ4s6kcSZ9v2bdbfh9U+xfa84ef0FApJLVnyJ50/brSJm4wX/oaw6oZJmDvu vNe2bduG5EqzjRmHVUFTJvvqoB6svHrhhbWenGJgHGJrS6stXDAftpqsCyvDdiPB1NPXA8z6rLWt xd7/vneXSSJXoM8ykceYmHVmVWsTG48OpBbYJ+5cPdV14KDHRHE+X3+O1AafK9iSBed6u4oxE25E Z9v2nUgOHSowxHOgfvnKJ/38mzr1z6qKMQSKxFHSIx/RNMCYMdZKYad4j/2dcgF+8ZP4fg5UgVMD zzVz0QoEAoFAIBAIBAKBQCAQCAQCgUDguCBQP5dJc5f62U4RRnUKQ6E05Us1+TlN8qKzFk1yNJ3T c77aI8mIT1tqU1ZFsbGfy1A270u+YY2DYY6q0CCL6rxNGoNhET+v2c77kstpuUzOJ11JnyqdffIk IxuSFy+Xk0zTO97xjouWLFlyFhM0nGZ7Kapqlzyu2HnggR/bf/t/P2rPIZlDlOfOmmm//qEP2Afe 9x577WuutjOXno4ExQ7bjCQFbW7bvsNWrFhlF194gU2dii1MSAaopKcEh5hkczvk+PHjsbrkEmwt m2T33/9jTzDQJ5MDjOedb7vBPvL7v20nzJubEgwwwETD2WcttTNPO90e/PEjWK1yyNra2jxW2j8X vP/x53/i/luxeoVBa4iKI1FSNE5TwqAQLOXVqNJrhtCq2Uli+MZ/HPcpJy+yc7HC6sGHH7U9e/dZ E1dAgc5EzRuvfZ3Nm4utZyljm1mhOi3pkdJZssyWt4suK8r29PbaV772H0ji9cLmXLvhzdfZL7zr 7fbOt99gs2fOsltuu9NGjWr3FTqU55a8v/yzP7I3X/8mO/3UxTYGq8K2bN3uK54WLlhgb3jdq2E4 Wa9PptRHksJJwaTvNO7Jkyb6c928ZYutXLnamjlu/MeVXhcuO88uwmcIyb+knyqEVddlhxhOnz7N Lr/kInvuuRds7fr1/pz5DjA5dvllF9vZZy5NGCqABnaSZdhDo17s6DCWvupkB5bw3tSeVZE8k5DX 8lZHjE4gEAgEAoFAIBAIBAKBQCAQCAQCxxmBNDfJ5zJpdkR6onIevmLFiuVf+9rXHgRRyRcy+akW 0ap85UlGkj8SvRZMCk4+8olVo3Y+saP9qp2qz4b9o11RJGUFpz5r0vIAc56CymlsN9Kp0tjnIFVT Ly+yndfk5/LkVfmUqdt6RgUvbBTSUiKd29QOHeqxL3/160gEbfeziHqw4uTVr77KEzicxPMzAxP5 ttY2X1G0r2u/jW5vszVY7XPHXXfbqYtPxoQ+vSe0XTrCqg2uxGjFi0j9q6643D768b/HAcU9CKXg YfXJhdgGNWfWLD+8mL5UOjs67LzzzoLuDNu4aYsnD8gbRPKAiavFp5zkOjwnCacYudtMHZIaNLXQ 9nhSdIlS8CWG2uPHV70dSqeRJb0UOymMtw3b704+6UQka2bY80h0tAJT/dS0uF7SrX3TISMChY48 WZNoztBXEQ85TJpwtRLPJxrV3m7ve8877T3vegceNpAEb93a9R6Lq6JP3JmMm4WY5s8/wU5edKIn dfhL4Stf/yaSRb1JFDFQdkRsilgYpv9UFiFThbb4XE868UR2E0K++ohtjrawzbYEUJPjJNJQiCHf kTmzZ9uJC+fb7XinkoWUlKGVslTsZBwXcdvuIXGOBePSBxp1dvy94Rhgs8BWEtRRSGC5SG4n2oFA IBAIBAKBQCAQCAQCgUAgEAgcPwT0D9uc0WCmojlwOe8cFgkFNX0tlHyKw2mOpjrkk6ciOuu8HKkv 25JXfyRbkmMtu6rFy/t5W/yGdTXb1FAIxNxgPviqfFWOfQ1OsuxXaeLl9YvJyHauwzb1qkU+RR/C KoyKXJq2a6TFXN7lmSjiipDlTz1trUhA+PsDzglz5zifN09xVQdvszptySm2cOEJ6Pe7KW754ZlG eUkg1UPFRMQgbrFiQkfnDZUj4SoUzrBRmDCoBa7btHQGDwUkx21VWI0Ee0kHHsBK735KnPih2VBh EsUZsEyab2UqnaSGfxchJxeZDeiQ5XZYe2IGSROPuVCCREqU0RLk3SBtuCK+MC7o1RV0aTPRZaeQ cNFEK4bsjL6+XiSLeu3UU0+xN193LV15oozMgaHa+T2e+GEcoDOxxPHz+fHg73e/6202BSuNenD2 D/GSfcaSsGFgHrH7ZCiM0cPHF3XKUnT4DFj4nXwnHdJ8G56bBAYQcBzr7BS6mQ36dEsILnETBdoM LTli5Z3Ks/LVP/AlbN1ppsQmC3T5fBRPQRLR65LvCgzeG0k5azJKsuqwET/qQCAQCAQCgUAgEAgE AoFAIBAIBI4DApquFDOs0qPTxSyo1XONC3JSTZ2Khk/NSKNMlVeoD6NTTrK57bwt3RerZacqJ7rq Kn9Y/2hXFOUGq4MmT4OQnGiqc8fMtDFBJdmcV6U10pd8zpOe4pCMatLr4h7+0JU6KAaTWeJEuavr oN9wlvTgDrTHlj9hb3z962z8hE5XSlN0KHL2zBm6V002BdvOagXEEi5R5ax+ki8uxZVoIM2l+cUJ vjtR6oF956JmC20Pg9N0tNlFAoLnHHXjFi4ernwIhyvzxjbe8jUKV7WPHjPKOsaO85vbWltbsS0u 2cC3P7BUN/m19vv278ONbwdxXk6v9eJcH26rasfWt3G4LayzoxPnA422tmbYKKJJWYJkz0kpKk+U 9OH8Ih4KvnvfXhz0zFvczM8Vmjhxgk2YMMHP9kkYFJEkozKTPCALwTOPFi5cYFdcerFv5+Ph4GUp Mj7JAj2ggMY/Msdk0cL58+0S3EjGERO3ZmY38EyZDOSNbftwlhRvmjt8uMcxHT1mNK66H2XjxnVg 3OPMccuSOnTDV6JaWrBSjNvt9u7dj7Hv9pvM+BzGd473d4ZJK5ZkigYUJVvs4+PvAKVU0rsgaY5t EDYPHMAtfXv2Wjfi7x/ow/lV7TZ29GjHqLOzw1c+1d4xIZQSkQcOHvQb1niQOw/Ophy3OHILH7dM dnSMtXbYS4HSM4siSD1+e/TDyTWBaAUCgUAgEAgEAoFAIBAIBAKBQCDwMiLgc5I03XlRLzoaJRPk bCaf0ciSauY6tLKI9dEWDwvCue0j6cqf9CSb92lLsYg+kp70y/poE0VSUOByxISPnFMmdyxZ1tV2 Lsu2ivQb9WmDhTL0K1nRyVObPH1Ip3xeKFf34Eiggk92G8zqebAxt5UxkUA2txTdede9npS47g3X pGvrkSBZu36jbd681c/g4QqaWTOm2SXLLiiMuwN+NShpgl9kBcBnKkBX3ntkrlPGyQZKySmSIEKA MTJJkGQgVfQPIQnzLG7Penz5U/bk0894gmLP3r3WhzNzpuA8nUmTJtlcXFXPG7TOO/csG4+tbenG NfhC0oirX7bj7KXHn3zKHnzoEduMq+iZ3OlGwokrmMYgacJb3xbigO8rcebSWTg3Z8jPHkrReIKj SKIwNq7QYfKBtm69405bteo5JDRwhhGe2DQcQn3q4lPsGpz/dMbpp6dkEXQ4qnLcNKICIm+d+6OP /L6f58OVXnlpKpIq6eUpLIA2pGQLSHwKPDfpQ7/yS54Q8cQgYmRC7KlnnrVHH3/C8eM5S/sQJ9aB YfXRZJuEFUhcYXbJRRfamWeebmPHjIGx4pkiiDRkd4Beei4DSODwUPQf/ug2fx68GY1bBuefMNcu uOBcuxrbEOfjNjiGV8boAyKKjJ+fAo/ULLFhMofP6hCw5dlIDzz8Y/e1eesWO9zdY+M6xwHfKXbS okVIql1kp522GFsqEbMnBvGsMOZunHn17MqV9vDDj9uK1atw0Ddubus64LiMRpJoEt6X+fNO8PG+ 9lVXI3HUBh5vcPM3t4iuDNNjrRFTN74DgUAgEAgEAoFAIBAIBAKBQCAQOK4IpOlYvUufZHL+plk0 5qqYT6EUMy2v1ZYutZRXII99t9SgBqm0JRnZy+1QrlGRDnlsV4v4iiOvKZvzq7rD+seaKBpmoHDY iK7AxGuUrCGvKkeaBiEAKMNCGzkvb5PfqC8b5LO4LWQH6+JJU3qIMsNSKcwkTkUyYPbsWfbC2nVI GLX6ypVurCj53D9/wZ568hl79dVX+nanG7/1bduxY6d14ratyZOn4AyjtyDhco4nmGSWt0ClvA5C KSIuX0iGUCZSwGe0iKmZmRMWtD3Cgs5wB/nV7AQK4JP00phIJ7XJD2j+7vd+aF/44r/Z+o2bPNnF G79akQDbg1UtGzZsKg+U/sEPf2Tve/c77d0//3Y/74eJh2YkgjZt3mL/8NnP22233wmdvVhB1G7z 5s1GkmkyDtPutnXYZvfY8iex3WsAOOzyRJFvXUpRpdh9AEWciP02JIjuw0HhGzdt8lgHmZAC/Xnc UPYAEkgPP/K4/fkf/4GdfvqpOPiZo9JYXbz8Ir2ltQU+z/BVU1xJ48X9AZUimeaI4IvJFrKUJ5Ih 6p206ETvMpaD3Qft69+8yb769W9gC+I2rLgaa/OQzGlpQ9Jsxx6cQ7XBkyd8Njffepv9yi/9Ig7R flP6xcLES1H8yXks6byhVaufx8HlD9pyvD9Mpvljx2PmQdV33/+QPf74U/bh3/l13Fx3Qkq2FaYY dWlV71IxCGHDX2oHsWrse9+/xb74b1/De7vGt/7NnD4dq5Wm2l6sLnr66WeR7LzHfsiY3/9eu+5N r/eVQgyX5zN9+3vfty984au2EdsueeMfb/ibO3eW/yrctnO7rUAC6nYkSxfchcTWeecgKTrd+hFP 8WSLd5eRFg+gwCGqQCAQCAQCgUAgEAgEAoFAIBAIBH5mCPhkCnOUYm6mCUw5J28cmKY51QkO6Vo8 Ix5r95LVtCpZ8ao2pUc6i/rVtvRcqPiirPQkn/dz2Rdt/ySJojwoDbBRIHlQkpNuXudyCphA44Cd slBGOiSqrzZrFvrJE0ACSzVl3A5WBCkm0lCSyTTRZj+9JhTiKo8ZmARffcWlOG8oJQUo3YJtTpxA 3373vUhmPGZz5szya+qZUFmGFTlvv+F638LU0tzi23+SVXwzqeNZAVipRMF+Sl/UWBTZf6ALSYkd KSFBQ14YBQpsDfRipZO3neJfacpOapMnhR574mn72Cc/ZXv3dTlIPEvpv/7xR3Do9ih76JFHcVj3 v3siiEkGJrs+/U//YifhAOqrLr/UBpDw4I1in//il+2mb30HJnH6EuTOO+9s+41f/YBNx8qp7oOH 7N77H7Cv/fs3PaG2H9fN17YzJYRro0IfiZUe3E72wx/daYuQsDoHCZ79WLGy/MmnfXsXz2qi/pNY vfTlr/27/fc//UNPvmS5l2KwRAyyBZh8JjCNQuTQEMZOK8hkJ8S8pS9iRjvcZkY2Vxfdc98D9qlP f67YajZkp5+2xP7g93/LEy9333e/37K2mze54c+GjZvtU5/5HFZALbElOCepXAmUhUFfLa3Ndv+D D/stdte89lXG7V1csbRv335fmcUE1S0/ugO3sI21v/iTP/CtXbKVhlEMhhXGl66gp2VEgcFzFdgP fnCr/fUnPlVumZyNW/p+89d+2ZaefhqScGvs45/6tG3ACrh16zfYx//+H23mrBl22SUX+jjuf+hh +7u//5wnA1vwnKdj9dHv/uYH7dxzznJ8Vj+3xr6O5/zAQz+27sOHPAlZgM4gUvEQizhBKZ6GuFEH AoFAIBAIBAKBQCAQCAQCgUAgcPwR8IwBZieYM/mkj1WD0mDrmaQ0tWFd1c77uZx0ixmcd4/Elx3J a2JV7edySljRuOTkt5Ev8YbVx5IoqjpSoDLKvmTyOuezzcfCIJXQqdqhTFU/Hzz5LKRpsLmN3LYL 4qvKb6o/zFrutB6DalpvkmjcIvWOt7/FnsF19zybKB3MjFU2oLfj6nme87MaK0SakCRin2e38EBk JjqShRSKewItJXFAK0ZQBshG0fGKGQ/If//mW+2ZZ1YWK35gkUy8BikpMGhbsB2sGSudyuUxVHPj 9At/sPP000/brp27fXsYExF7sHVq+rSp2Go2B1uPTvUxfPyTn/ZtX60YA88wuvW2O+xKJIp49s/2 7dt9hUoTEl9MHhzu6bNlWEly9llL0xk18MTb3Xjj2H///z5WrJIZhG8e6Z2GymjSADlwDAErabhF 7YO//H6/fYxnQX3+i1+yf/nSV12Bcbdhm9ODDz6CbU9dNmniRNCTrhvwr5TcUd99VTEGs1w5RAEU 4ZNbE438ZGcQ28Ke9ATWOGwn48HXO3fvxIqieTj4usOWLFlsW3AT3r9/40ZfmdWOm+62YuvhvVgp xGRR+culeM60S8tccTV/7lz74//n//ab6Zgg4616X8Lqn94+JLqAN7c7crXVW7E66aJl55eHcicb le9iTKQy0bf6ueftM5//F08S8Tyh/v4+e9MbXmtve8vP+TvJ2/BWrlrtq8N4vtCOHdt91dSy88/F FrTR9p3v3my7du/CdrJR1o8b/mbMnGavuvIKmzxlkjtetHChb7X7vY/8oZ99xJ8HPqssjEqACc9h xCAEAoFAIBAIBAKBQCAQCAQCgUAgcNwQwMTMJ9PZBK1oVucyxdazKlmRUouFfLVlVAkb8tjOi2RJ Ez+3IdmcJh3SVETL+8q1kKZYJJfbk86ItZI1Iwo0YCg4OayKiM9abcpIXgFLT3T1Wed66ouW12xT XzaqtqnLktOlkzj4Tht5klkZT8xa2oArTObPm2cf/u3fwBXqF2MyPSolgZCQ8G1ZPrFv9QTKAFa0 3PTt79qf/sVf2b33PZi2DXnCJ1nldJpJC/dV7xCBVgjs47+nsdrktjvvxuqle+wObPe588577Q6s ZLqD/bvv84RAS6aaBpwR4HrOrNl+BlEztmfxwOU5s2Z5gkdbtJadd64nkRCwB8qE0Oat27DqBwdV I/nAc3q68GHSiMi0wMYdd99vd9/7gK3Blrzde/b4IdfX4oDvV115Ka6cn1eOh/FwICmi1CNuTKox gcHtVVx5NQWJiHe+7Qab0NkJXFMcTMYdwPav/fu7Cv1iXPXDgy+UZNo9VTEuWJQqCsZBYsWc5Mhj 8oOJtImIhyvF2nEOzzwkeKjCW+qII89zasHKo7JgJRS39vE8q7yUiSoQB6B70YXn2zlnn+nPYMb0 afZL7/sFJNoWF0nIlPDpQgLpDjz3ylAzs2W0BQ0YI2auRlq3YbO1M3kIUHi+1pVYEUfMeXYT6zPO WJK2mqHd1jbKHsEWvx07d7md7buQeOQ7SyRhY/PGLfZNbKvk+VZc2XYQK6C4YoqJp9ORZGRy0M+y KqIYVlUwHsYPQiAQCAQCgUAgEAgEAoFAIBAIBAIvOwKaWaU5ubsTqeIbcyZyNOGqcH2KRh4/VQsv pkdb0pEsa9HkU/bzvI1otMEiHbalJ3reZzuXpcyIJZvdjigjhpyoFj2vc+e53IsFlOtRdqQ+6TmP 7Rw0+WlEJ00FC39qW88Sg9/85Gkj9lI4nHxzgj1t2mR77dVX2XPYerNh40abjMOfD2HrDW/qcm2K Q5aHXT/17LP20Y9/EjrT/LDgwfx6dpcrXRaPlGkiWKGhgpUyGWbXv+laW3rGaUgwVBOSTHYM2j/8 4z/Z8zw/CX4L9aJOPa6EueTiZfaL73mnPf3sKuNhxG+89hqbiBvFDuJGLN6CxrN4mPjgdjDkgvxz CPQBrH5haccWNepxCxqTCK240ewpHIj9X//ifyC20+20Jafa4sUn2UknLrA/+S8f8ZvAaIdjIH4c mKfeigCJrePrvMTlypTJOCSZuO7Fdq4CfrfBc3OIbZmU1UDdcsFCW8V/rJNbJxVuErv4mecB1+kZ 03/6FKG6HFdeXfOaq2zrtm3YTrcWh3t3+rlTXKXDG9C6D6VbxJq5vRDPhrq0d5Db7qCb+/SxwypD IiYpuQQq2v1YRcQxX4Ek5KOPLYdAi8sR55Wrn/OVTFRLJQ2c37Tl9goOR9Db14cznx7y5zcEfdpv RXJwF25We2z5ck9EcUvd1q3bkUBqsR7I00Y3zpjaisTgvLlzcMYWDzGnUcSJh9iFxNAnP/1PSEDd 6YdXn3TSIltyyil2LQ5yv+6Nb/BnxsSZisemAJMZZ7lJCUUdCAQCgUAgEAgEAoFAIBAIBAKBwM8I gep8sRoG5lGa0eTTGE6d2BePfU7S1c/buR5EXIY1i2ykXn1fPsjL2+qzlr+qnao8ZVVyHdEa1seS KGpkQI4a8UjLg2R7pJLzZDOvtYSKdS6bt2Wberk86bIl+aF86xmJFJBp9p1WYzj3hTXr7MvYGnQ3 JuG7du30rUXXXvNaW78eBzg/8aRtxPk0XGnBs3tocXRbO7YAvWD/ceON9ienfsSTJeW7xuUl+I+J BH/94JEpC18GR7/FMJlc4EHWy84/BytCLvdJvwdT+frq176Js5TW2BASRbRRW73ixnxVE69d/+Av /5Lxdi3eNMakzD1YDbQOCa8NGzba88+vsV5fPeShlTEwFK46mj59qp2Nc4TuxzYwQ56tqQkrk7B6 ZhcOtb7tzrtwsPHdONR6kt9U9nNvegOSHpdgGDxnKE9uYZywx/h4P1aRr8lGk54Et74RKz/Oybkp naPEC6XSyEgnkCAk1cJW4YSsJFjwU8f9umZKpNCAc/iV2WHyh6t9fvc3PwTcdvkhz31I6tyJVVwb cPg2z/fhrWIeK1WLAcmEP1OPiBT68GgLCpNEyW+Kx3wbGld8CSS+SzuxXZDJHyanUklB8i3z4l2P 3ld+dWHLIBNbaalkSlb1I4nzsU982hND7hMPoAdbypisGsNnhD9cMcVVYywXLVtm9+EMJa6O4/vH OLh9bTnOi3rsiSeso2MczuSaY6+5+gq77trX21TcUKd3O40U3ykkhzM1PVC3H1+BQCAQCAQCgUAg EAgEAoFAIBAI/OwQwNyk4Zyc05g0myu2njHEfCKTmClwtvlJ051EY5ufRgkj0ZNkvV3RWOc25Y+6 alNGfdI4NZQ/8vIiOdFyG6INq482USTnMsqaDvk5UqGcZFUr0Ea6OY3tvC8/spPbFm+kepid7KHX oU2XfmiwrINLWSZX/vbv/gFXuN/lq2m44uJDSLpcfeXldqjnkK1a+ZzdgvN8br7ldtuEW6K4EmQI j4srOR58+DGcB7QHt6BN9u05/uLRPgqTREwmkOZ0vKx5sN7GF6+vZ6m/8h164DGZwWvaVfwaeNDd HjhlAW0vDkte/Txu20ISYPnyp2zj5s12CFfbT5jQaZ0dHVCCUBEBW1SnBa6smYBzl97/vl/AQdNd tnbdeus53GsD4HKsLUiK8ba23UhS3IMDnp/ASqMPIpn23ne9yw9upikVHy2N03Bhnzx2U4qt6EGm SKOAxz9pROR6iFQAXp5oY7soTqa1guZ88jQgtyqc6aQIJrMhW1TiQd67cUvYM1iJxbOHeFvY5m1b kVTr9a18PJeImNfUPfCaCXftziFT80sKR5T0WA/ZeKzwIp7luCDDJFEfVlO1l4ki2pA9DBMGlGii UyaABnlmUCFTOMBWw5k2Dck+rnTiH/phcsijQDKP507NwKHkfJ/e+IbXYLvjM36QN1ebDXAbHfy0 IgZ65rNfveo5P5eLt7f98R/8PhKJSTc9pRQf4xG8NOC/i2sssqMEAoFAIBAIBAKBQCAQCAQCgUAg cJwR4CQquSzni5yvOLFuwlJIjRgehTkZZ01ZybMvHprHVGQrV5LdnFZtU09FNqgneh6f5BrWR5so khMZYV/ORKvW4ktXCyDyQCUj3ZxHWt7PZdnWh3JVXpXGPkspx8lw45ImszmP28juufd+PyOoraUN qyz6bNGihVjlc64nbkg7c+kZvvXqZGzJ+ejffMIPiuaBxNyS1IVDmHft3mtTp071SbjP7H32zIA4 RBX28HESW7i9CqxELUMHRbCkujAFucRS0oAW0pDRwqqQHTt32r9+8Su49hwHFSPxxa1wc2fPtje9 9Xq7+MILYHbIPvKHf4ZziHAWEOTph1vGZKUP4+ahyuP+4MM47PgHthyHY2/ftsMOYdtdb1+vx81k Qwu2qHHM/wJfV19+mS3EjWY6v8ZjLMeMnoz7yDkAlYRMSmkkMcoy0cDiCYeidkL5lXBriDF0S/9o J5zYoFF4SszCEml8fk22CSuHPvP5L9qtt97uiTbGdOKCBXbNW19jF2Kl144du+yP//wv/dl6ko4W qI7C5BlL0fU2v+Sq5pM44xY9rOjyLWvI3/h2PQi2YTtgK84YkhHK0Z5s0laigAZ/PIC6pa22BRFM JHoG7PXXvNre8da3YJtbH40zDLeRWkUb+pTloeEf/p1ft1NOXuRJxbXrNuC9OGC9h3tsAEklrjBq w4c/R7f86Ha7EO/Fe3/+Hen9pm0FRx9Fm34yMt1HCQQCgUAgEAgEAoFAIBAIBAKBQOA4IsAZCecr qIs5EedSae5MVm0uk+9CygLUtIY1P0oSKcEgPh3l0x+1xc9Mls0j8SjUiJ/T8rb8US9v5zLkNSxH myiictUgnZGmUu2TLp1cjnTJKuAqP5dhu1qkz4fBJRHqs27Upn4eC+bgSjmQVStU9hSJpAtM/aYz rMRobcUKE9DGdYz1CTkn85wsc6UP2298w+vsLmxL+u73f4iJdNo+xdeOYZHPwlqBOqEMLb2ehdj/ z957AOhRG+3jY9+5nnvvvVGMscH0ZjCE3gkQakJCCwktBEL5UsmXAklIIITeCaFDKMZ0G4xt3Avu vfd+9p3vfP/nGWl29e69d9gECN/vL9n3ShqNRqNntSqzWq3yhA3V8aokzWGgURarp34u0WeBaQFC n3/hVXkEXxMjJ18ZK6xVVy675GI5/ZQTpRYOI16I189o3FJTC+Q4bZx0CtqwfqNMmDRFX7n72U+v 1R024yZM0C9szcQrdnwNi6+0QYQaNtasWSefzZgBo1o32QF86Ewa1dQwftyVcIqT5kLOd0YRlyvJ Q0FwxqcBf3uq7kyrhHGaQeXwB3lURiIINO8ohztutsOoQoPXs8+/pId3F2CHWEMcbH3Njy6TwUcO 0rOoxo6f4OQwr1XKBNnFRCUdskzw10pDxuj8JfhimhMBpZCXbasVdvno4eneuOle8SI/FXety9dE 8zYoqo8v7jWXJTiAGtuEVCfKYbs89pjBwq+3meGOUhQzlGVY7IChaCzOSapfr6587+IL5IRjj5bR Y8bJNLxiNxPnJc2ZO18PLudrhTQYUYPx4D/nzNN0912qH6V7zVRV1MzwcEnxNyIQEYgIRAQiAhGB iEBEICIQEYgIfI0I6Kqn8nrRLa38es6pgzWlW4jmamc0+vyznLlcjh6mWdjyk99kWN4wzdItLV+c Mv1KWNmy+a1MJoZhZa7uZ1cMRfkKDWWzYP6Zy/Izbumhz3C+NNuBFMrL0kI5xpelmXyWYfmzuqkC FGDMbnuJqYXzXPCaEXeH8LW0AiyQ+Zn5tWvX4Stdzaxc9XlIMD8lbq+C6UIfO4maN2+u572QSQtH QTVoqMDC2Zb6VmaOcohUqPEmpVJH05O+E8jlPp1PgWdrcr46xy+GvTH0bTSjcuw2qQWvHOfKNJUj DjtEXyeintwxxEW+k0NZ0AxbXqgjd1XxUOUbb/2FXHzeuXLF5Zfgi119pX+/PWUzDnXmV88eevRJ GfrOezgnyenAevGrXeZIVZ1YJyXiVwtz/ManRPIoHzm9YYUEOPfrsmpObsvx97CKMx6SPcaaUemu TixXeU0YYlmjFOu9fOVKeevd9/UsH+6W4pk9nTu0l0MOPFDzE6/y7XgtEHJUHvKoDwLza31RrspG RKugRiNqhEz4T4MU726+YjYGhjdeG+LNNkQZ++2ztxpgyryhiMYZ59TEk1sRFEBjFne7TcC5Weqg EOV9PGq0vPnm23IcvjJXVL++fw3SsfAg6m3YLVQPxqFSvLr213vu07Zwz11/lHbYdXbaKe3lhNIS 7EpbK0Peekfue+hRfImuWA1FMKnp2Vx8Pa1mzdpWJKumjr67PESGf5aiyfEnIhARiAhEBCICEYGI QEQgIhARiAh8bQgkKxIEbL3oHnYzJXWgkZCw+xSLZ9MYp+PSzpwtfJhGui6NAt9kWB7GLQ+CVZad lZOPl7TQhXJDet6wrTjzJn4OkQWZgvlYDah8aaakySCPgRSmhXmzoFmaybB8pFs4zBOGLW/i89Bk MqhDIN3zQUoN6dOnpy62sbrWhThfxRn28Qj3hTAs3Lmgp+PrXdOnz0LIHeLMnTuH4lDn5v58ImXi D5sC0HdtDyWwTPxt9+fLJDVAoAIGAi7e6dT4AJ8V5OKbpdLIw6+aKY38qn0NXfgjWfPwdTIetI2V PPKxsJr6ytiCRYvgb5WNeFVszuw5Wh/Nw3zg3YK0rcVb3StFMEJs3LhRXhsyVCZMnOQOxEbZ9erX dQd7Y+cJjVK8yfj6VF28gta+XVuKUx1YwbIyuwdAYwJ43dfgqJPnQw124J+m6y9rBoOMN5SE10qr grS8zmPsS3KGDcijsU//QZ9SGMd41pArK5XCeE1cu3V4ZXDb1hLUCxSP2wZgtQhnO/Hrb+vwZbYZ wM3hb8jXkM2btij+PN+IDtXUH+1q8EPV1q3boEY2GoBoHBo/YaJ8MvJTLVfrC6zat2kjh+P1Pcat jfEwbefYSkGH7HKPKw1SPHz62KOPkg7t24Huzrbil8tKcBbVvQ8/Ii+/+pqeMcXXD3lm1cpVq2Xi lKl4JfEN7KAqQztH28DOMO4ee+X1Ifr1Oe6s4sHXvJ5nnHaStGnTyr0ix2uNvw4wnhXinCo6YmdX 2dqoJvBHgUhiMRARiAhEBCICEYGIQEQgIhARiAhEBL5WBJLVo18vhvagcF2Ih+26ivPKMSlMTsSA bmH6IY/PqulZepiHfEw3GuMMV/XHdLpQpvG6lMryjL5T/q7sKMonkIYmKmSVsjB5Gbb0kM404zdD lcUtjf7OOuYN/5gvlBfGSdc4DRrmdLlNK405aMsFuDMMOEPMIHxx7I0h7+gXrvjaTgnOknnwkSf1 daS99thNF9E8w+XNt96VMeMm6GK7EGcXDejfT8467WRIVqFOM5aD4rhm5m42GgB4WPHiVcvkk0/H wHgBwwUNE2SjcQWL9Ck4QLlP757SBq8h1a5VByk4wBppa7Crad68eThzaJ2WSVMF60PDAA8ZnjZj prRq2QJfqWqgZyQtx5lCFWjv3MXCA5rve/AxvI50JHZHrZd33/8QRgrmprbYRQSMli9fJm++864M 6NdPX0+jMWDBwoVy51/ulvPPO0d6desqtXEmTjGMSR998okac6h5QWFNGYjze/bcY3cYmcr1AOxF eDVt1apV3hCiiOiX1/gqUx98ar1p0yZqvJqN+KYN2IlEDGhpgGGFr/ZN/myaNMHZOfzCFo0htMHo Li/FlryquPMR1Dh+aATjp+FHjx4r/KIY2egofjN2PH0y+lN9jZCHMdO4pUYkFosDoZs1awq9GuOc omLUyWGyCF+3u+cfD2I31sGyFAeXD33nA2BQW41sakvCmUI8MHzo2+/Kbrv1lt369PZl8tqw9B3S GK+vjcS1fvW1N6Rb1y6yDoeAP/n0s7Ji5SoppLENxqP62PVzxumn4EtoPdVQV1KyDdivkkWLlzij kccGl1Jmz52nxh9e69rY1UPD5oW4Pvc/+KhshOwdYGLdVyxfKX/C18/e+3C4dOncWRpBj5Uok+2L Br9TTjheauM1RP5xh9lDDz8uJTiD6uCD9gNvI+iB18xg0Fq1ai3qAYMeMOoII9GRRxyO1xkL9Doh Ib3xPdhsT/qSmo+TJ7qIQEQgIhARiAhEBCICEYGIQEQgIvC1IsA1JNZRXJ/wv63JnQ5uLZxHH65i aFZCbv3LsjDd0swPeSy9KprJz6aHcYYpm7x0YdhR3DLM0phujmGzzRitWp/n++ysM4Wq4rf0rG9K MZ+lMWyWGtKMTj9Lt/SqfMoK0yweyjGa8dU855xzDujTp08/7sbR7EzJcSC4//qKTnMYDNq1batf CSvGq1b85DuNNGNwdsukKZ9h0T9WXsMh0e8P+wgVqKFfgDrwgH3lR1deKt1hTOEBwTm19LJZJF8L mg8jyp1/uUdex24dfoWMhiIaAJiJ4bkLFsh0GH16du+uuznYLqj7I088hTN0nsGX1paCnyW7fMxD AwC/bEaDz8CB+8IYVYJzhabrF6togKGxaOGiJbozaiJ2j/SAnv336qsGB/3KFcovLS2TUaPG4CDj LTIQr0CNGDlKDSiLly4DHV9OmzINX3Ubo3qP+GS0Gqsa4utoA/rtJdf++ArpBCMC6/Dv19+Uv9// iMydP9/VC7rSUENjz5w585Q2cJ8BehbOnXfdA70WqX5EgLt5ymGQmI4zctbD6LFP/71gyICxjHe1 ugBMxQxE+qgf6/7Sq6/LvSh7NAxCvidwyUgrh4zPPpspn02fLp07dcQn39uBBXKRn36jRg1gaNqs r91tx4HdTKiBaz9n3nyc+fOJTJ02Q/YZ0A/YdcE1XKzYEPstNJyNHK2GFBqUxsK4MhKvfrEuDRo0 lBNPPFa2AFO+DjgC9LeGvgfcF+hutQIYmniYND87//3vnq9GG15bXqM77rpbd3PRWOmqyOtdQxbh wO25wLFP797SskVzRWU3GBbZtpYuX6G7n/RLaLgraHRbCF2nTpsGWVP0tcFGjRrKd88/V3bbvY/m GYlry51GNAB+Om482tFkGTduEtr3MOw8GqKHldeDIatjh3bQ8QI5+qgj1Ljl2qwW736oJJzq6oLx NyIQEYgIRAQiAhGBiEBEICIQEYgI/HcQ0PUJfvwCRaNek3Atw3XUtGnTJv7rX/8aiWQuPG3xSW4L 07eXKcw33pDHwtm8jNNZXlOHvslRBh9n2GQZb0izsKVV5ZOvWrezO4pMURpfsopZGummCAu1uNHM J92MOOQzF6aH4WyZ2TTGjUZZYZjxrB5KcwYiBr0zrtBHEqN0ZXiF55CDDpBWLVrI0Pfel0mTp+on 77fiXBcu0iuwa6YWdvr0hLGlY6cOMviIw+SwQw7GZ+cbJbssnCT8QqgVQ4MNF/ql+Nw4d720hzGq c4cOyqplozbcOLIDxgm+JlS8FefCaAvWfVCyGq8P8aBjfnUtURa5CQLz89WxdevXw4BRLmeedgp2 J5XL2+99IBs2bdTdIQX4KlsT6Ni/X185HTuf6kFWXZxTMxnGL76qxp1XNAj06tkNhpRO8uMfXi7j YPRYiFfv1kIudV6xaoXuyOnds6c0b9FUBg7oL0ei/l06d9K6F8LwwVe0+LWsvfbcQ+tmClLPYuyU WY0dUawXzzTia1jGZ/Wgvw27rlavXoPXvIL7iOAoUE5s8qs0h+16lL0NZfT2O3soK3R8pW0DsYVR xGEbptaQi3AmE/N8NGKUbPJGwlp4DatZsyayL+p69pmnwTBULHWA3cyZc1QOzwlqANx69+qhBqc2 2K3UD8YzXrp+ffeQH11xqRqfnnvhFd2lVoiDz5thp1Sd2rWkLV43O+yQA+XE478lRUVFigcxZBmb cNZUbxiAaBA0x1A52t86bR+uDjRM1oKsi2D84bX7EAdZT8cZU5s34stl2ClEPWoX1sYOrcaq4+BB h+vuN5UJ7C4472zphHY8e85cGIzWaNnzsJOMhq52bdpK/R71ZXfsAjvs0INwhlJ/y4ZrQW2cEctf Ak1ji9Rdei7Z06IXEYgIRAQiAhGBiEBEICIQEYgIRAS+bgSwKMGDd65XuDzRH0TcK2i6igkVUhbP xYVoloHppNO3NAtbHEmJs7SEgIDRjJ8+aXRGMx7zXar7DXlD+wlTmZbVz+Wq5tcEVsOSJGV5s3Ey ZmmmpNFDPxtmPKRRHvOTRp/OwtX53CXFdP6FYcqwv4KXX3756lNOOeVCnr2S45gLl8J7lZK424OL 8HV4bWstjCT87P26Det15wg/S962bWvdRdMIu2q4g4M7j+zKmjAnOy1BDUUwgnDXDvld6cbtfONu hFfI+JqT7npBEg0rpcirK3+fxfHyZeCnAABAAElEQVT6tgV5dfGVq6L6RX4HT4W+LrVkyXLNR6MQ z53ha1e1YNygKynZDsPNGlm2bDnOncHh3C1b4rW15m63CwxL27Ztxatkm2G0Wa2fTN8GI1cDfAVO X9Nq3FhfD6MhYzsON6YuNEpsgYFlK15hUoKWwhTvcJPyVaeG2NVSAsPWZhhsUgc+7p5Rj+dDFeIV qAbu9TUPLCXlw1gLgyHJlV2iIlWOcgfl+8IaNiyCoQavnqG80NFYxl04i5csVUx4HlH9+vVwBlB7 admyOXB1Z1RtxeuIq7CLa/mKlTC41dVX/ohJTVijS3Dmz2aeEQXRDVBOXaTTSEfjz6JFizUPjZfN mzZVAw1fw2Ocr3rRsY3wsOnNaCO5GJqu8KFHowZFwLKWw4Mk5KM1nHn52t8K7BLiOVMsuyF2S7WD UapZ02ZoU7W0XVvdaZgqw/Vj+1oLIx7beDF0LcDrlM1xCDqNi9SVX8vj7jMHmbtWTj/qlWJssXzX SisYfyICEYGIQEQgIhARiAhEBCICEYGIwNeEgFuXpKsTXa/YogU61MIHoF566aXHTz/99LsQ5cGv ZiSib3/M4Q6FTdNDXqZbPobtL6QxTMc0OuPJxi3NfKanFUjzMz10JufzaGF6sJLLIeeNUAk6U8bi jpr+Gj30qZwZe8gZpmXpTLM/S6NvtNDPZwhiOvntz/iNV+kvvPDCtbjoF6SGIpo2nFURedNaasSu gUbUaKGvecGAQOFZx90dPMxZHRnyXRrL5NO5oOdfTh5Lowgf5kLeFvNUEhs84Ln9JZWKQZrbjZTm YRk0fCRlUTZk0ihhch0P9SFUTHcGizDd5CiD/2E6z9ahHsaLEGKubu7VOKel/vo6MR0Z9RU/lQsd w3RlS3ipKwt0chjSixBElRb86Gt8aA55r6+XS4+vc5neSXFeOPXia2zE2pxhpnlA5lUIsQ3TmZ9/ dIoTymIdiEmYh+kuH68HY3QMeAypAxNSBZWDPySFddAEz6e4orHYNdU05Uc5aKtWb6PTV32R3wxh aRquAbEK8+XRJ+E3HUCwdpykxUBEICIQEYgIRAQiAhGBiEBEICIQEfiaEKhu2RKqQEPRK6+88vip p54aGoq4Es0aecxQRN8t8nKNR8ZP8cbDsNEtj/lU0WSSz+gWDv0wTL7QUQ7LCJ1VP8sb8mh4V149 s8wUagXQkhAWQjqdpefzLV0Z8WPyLK/RzTf5xkc6eU22xemTx1k3KusV5ucuC5PLfHBY+OIfvwjG z9FzMZ5k4Oo2KJHrdN35U4HrpytfJ4EyHKNXjoaBUI6xUZaVrllQFmUaUY1MZHJy7Oqm0r188Csr M6vzHC5r2ixAVlXAQ4OAnpfkc6SqpNJZt/JypljJnpkswMYMHTRoqMpWnrKZDvAZVOBYrhmiAoxp aDAOHyDFvhSm4vTVsrCAJIdrADuBsRo0auBLYXYdKfhzMLZS7JqwztxJlFTYVCIjnfq52LoEf62Q X9uMx8PkZK+HA8SEewleb8U9RwcUquUaPyMMBxizXIrhdS9DSL//qCykOkeME71IcnGWx6Ry5vFy rCTNGEY0C35CjJFH5cJzWnnRmjn+RAQiAhGBiEBEICIQEYgIRAQiAhGBrxcBv0Jxa6Scon1KsnDB krHSDgXNYBzMQGdx862IzGLaL7JcHqYZfyiDYcuflc80cyGPyTGfPJbOcD66yWZ6XmdGlbyJeYgs hC4UnC8cKuZy5P6GeSylKpqVaT75yWtlkG5p9C0NwUph0uhq+IvuYv6XO0I0s1/gmlAmk+5+GPAu NBIpg+WgUQDsKseUszTkVd7EQ8CnkR7KQX7PqgU6Lvcb0tMwa+BleKKXnCNHhXnIyOZYXd0tLZHj CAnAVidP1spZ+SZH07ROgT5ewv+zGGeuleFIf5cxzl4tXIxdxVjL1fbnr4FTyMkxYZ6WtD/NxJ+0 1VCEXXNHtTSweTmJuJ1sxywhuohARCAiEBGICEQEIgIRgYhARCAi8N9AIFm/oPA07Nc5KUHf/Aj0 C1KUagujLN2yMN14SCOf/YVxhumqkpOPnpWbL858pFt+47E4y6zS7aqhKJ8gKzBfWlW0MM9OKRoI srzmM4ky8skhj/GZr3xY/Fqc+eG8UQZUlxCI8zRbcocZE66ESIrLkJC8fPU01aXor2dK5JBJI/jx rypZPueHnPnkeIFejnIHpFQWUryonHol+iBg+Yw1IKVyUjbKsSyWjj0pKcNOYexyhnK8mjlyNBKK 1mwJZ6KJyvHC0lQwawQ/XxrGocZp7f9bGLN1O42CWnuaaWo+tU24EiIpLkNC0molnP8hxios/kQE IgIRgYhARCAiEBGICEQEIgIRgf8CAm6Vo79+wZOudJw6mc0ltiwyNvNJtzAzhnxZOtMsPctrdMuT jZOfafyzNNLoQrqlmRzHsYu/X8RQZAXTDwsPw5+nhlWEfFk5pDHdymE8dFWVY/yhb3LMpxwtr/Kr ZyRbVrKpiYOBxFXoKzr5dvkkLAiEMkinnJRGRUwOUw3BlAM0jaQUq3Aox/GoNBVjchKBpKYilMfk uAw+XXmClCSYBPLLycg2fYJcvpiQwkxhxnwYM1vEWFELoSIsGs/FhuSca65MYcZvHsZO5/gbEYgI RAQiAhGBiEBEICIQEYgIRAT+CwhwueTX9lq6X7KGq6iMVuGi1pKqYg95GQ75wjTKyaaTZvzGa3H6 9mf5LM3yha+7hWlMz5eH9LxuVwxFLIjCTWHzTXCoNGlhOsOmqMkJ41k9mBZWkvlDeYgmuoSyjW5l VBnHOT1WPngsGC7C+SqW0SkGBfpXeVyMabnpjp79pRynOrlZUXuVRzmRlFNOHpFGwolEmkXjKtLJ dXIcl/GGqhlXkhbo44LgSBJ3Uo6VD3bNEcRJsTolYlVJ/hgaDAevu3k5CrFL8umVJTA5132ZGDu0 cupkhflNaIlGScAYAhgjxikoPpQHrko8kRARiAhEBCICEYGIQEQgIhARiAhEBL46BLDe45IvXNu7 JWClIvFxHy5h7C+bni8XaeQ338KWN1/czisyHvPJa47yTGZIszB9ptPcYPkYD52VnaWHPEk4a6BJ EqoJWMFVsVg6fQuT1xQKgSDN/shjLps3lGPhkMdk07d0yrKwpRstjIPms4FbMyRSjM35rp1QBJw2 LEtH3ErSxPw/5Oaf2xnkM2iZgZwgWFmKy5OyMG5yHDVJSwIJRyAuj5yEfxflgD3JSl00QjNRRk6l 0gMCg16O06yynAx3lVGWyr8vjrET7bRnmBo5rZzVOahvyuQy5fy6PCmL1YlMjpqkJYGkpECSy5ey mJz/+xgHlYzBiEBEICIQEYgIRAQiAhGBiEBEICLwNSDg1mnhESTZQ2lMCaz/uQxLl2KWkC4SLd0L TRgYt7SE6GlV8WbpzGcyzG5j8VBmGA7TTQdLZ1q+Miw9x7cCc4hVREww/apcmMawxUOFQoWNTj4L U3a4m4hxOstnMknL5jMZxmPpRmcedTmvnmkqWDUXIoybBI347JaO5EpH2yT8Tn78jQhEBCICEYGI QEQgIhARiAhEBCICEYGIQETgG4SArduTtb29C1NZR39GUY51wHMxN/+Y5o0FSbyqNJ81x1MtPMXk GYOlUX5oHwnLC3mNbrR8fraMfDxK2xVDEQs2ZasUmEkIlc2GQ1lZ2RYP81ilQloYZtHkMT7GTU5Y loZzDrMOU30VVXBWeiJu14GgMtFFBCICEYGIQEQgIhARiAhEBCICEYGIQEQgIvBfQiBZ4yOgG4bw LkpIC9SqWTMxlyQcQTKDtCSYNcF46PPP0iwOUkJnmM7yuFiah3nDtFCG8ZJmZVBRC1u6+aEc0sj3 uS6p+edwZgvdKeGQGeazPFahrMJUIaQZn6lmaSbHZFvc8huf5TO6xfOlWxp8vDQFDhWa/ng0w6LI Y6Jy6YGwGIwIRAQiAhGBiEBEICIQEYgIRAQiAhGBiEBE4BuFANbwfhmfnJOrhEprexIqEUGjMcD+ wnQLW1q4G4hpZkQwH6SEZmGmhbwMm1zymLMyLC2075h8S8vGTUZePxSUl8ETTQHjycaNHvrGQ5/K 0aezsPmO6n5DGsP5XCg3DGd5rVzSTZbpIJlP3SV5eWC0GhYDCoOaMW1Bmmrn8NAEmQhO8sVARCAi EBGICEQEIgIRgYhARCAiEBGICEQEIgLfHAS8aSBY2yfreiqZbi+S4ANY4XI/DDOH2TCyNod8cctL 39LpW9jSKTfkMbr5TKezfC6WG7c0y5ONW568/s4aisLMVoD5TGM4Gzc6/bCSjNMZLcxHusUtnTQ6 o9PPhrNxzRD8UFYojweYWx7PZlEYfSwYCNBg0GhSFZCCLUhVZcmKiPGIQEQgIhARiAhEBCICEYGI QEQgIhARiAhEBP4bCMAswFeIgrV9zlo+iFS2Gai+xkGff6GdIawQ6aGzeJiP6UZn2GRbOEwzGn1z +dJDGUy3eJbXZOT1d8VQlC0gLIjhbNz4w4Lz0ahDSDc5WZmhnDBs/KRVlYfy+cd0CyMYOiQhRZUx iepbJORlOKRTZHQRgYhARCAiEBGICEQEIgIRgYhARCAiEBGICHyjEai0MyRc26ea+zOKmBgu+ENm C9O3cMibDTNuvAxbHEF1TAvzeHKVXpbXZOfLkOXNx5PQdsVQlGTyARbEPwOE5KrCTKOz9FBJC1ul TKbRXc40r8Wz6YwbzXwrj3kYJj2kka5O2wpSNCN8ZTIp5LBcSqtICkqSQl6VGH8iAhGBiEBEICIQ EYgIRAQiAhGBiEBEICIQEfhGIsA1PNf53GGkLj2F2BPo2UqfTMZovrEZD+PZNOMJ6cYfbpphumnE PAwbn/lZeiiTaaGrLi3kyxv+TwxFFGgVMyWyFcjSLZ10C1OOxY1mvqXRzzqTbXTGTY75Jsfi5CWt RnCCOTLB8EMOc+BQUxD8hBxIYvNRuk/UpITRhEQ/IhARiAhEBCICEYGIQEQgIhARiAhEBCICEYFv DAK6xveLe6zh9aiiZIdR7pEywbnGXO0zk8+Y+FYtswYYj/lGD/nCNJPHdAubz7xWbignpBtvKN94 mWbp5hvf5/o7aygywVaoCTZ6eJK3pdFnOv8sn/lMC8OM04W8jpLKsLj5xkvfnIUtLaRbefQrgouO QkEi1Tg0l6eZBPqeJzm6mrXWPFZsyBzDEYGIQEQgIhARiAhEBCICEYGIQEQgIhARiAh8YxDA+j1c /+ty3ivnji3Ku7Y3Yg67z2Zp9MP06qpMPstHPguTbn9GN5nGY34+PqZZOvNb3qzPtGrdzhqKKLiq QllAdQVn00LFw7wWzqaTTmf0UB5pjIc08lqc4byuoiJnD1GVB1hboSqEESV4KkvR4OcWl1eHSIwI RAQiAhGBiEBEICIQEYgIRAQiAhGBiEBE4OtDQFfvfm2fruTxTlH+tT1ZjM0bAhJdLU7feHaGPxHg A5Y3Ky+UZTzmhzJCu042nfFQbpivynAosEomLzhbYHX8lhbmMeWyZRo95LX85lsaeW33kuUjTxgO eS1MP+TBIefJ/jLmd4nKwR/Lpkn646jZdxZzX0FLuWMoIhARiAhEBCICEYGIQEQgIhARiAhEBCIC EYFvFgLuvGG+ZJZrJKi8tg+PqwnqYHaF0HBgosy3tKxhgfEsjaKNZj5pYTmMZ52lk86wlRnSLS2U S9rnuqzRpqoMOyvYlDL+UNmQxnLy8WbLtzykM2x/YZzh0GXlMs1oCV92RxETXGH8BbuLeH5rRPbO oqW7RlZZus8WvYhARCAiEBGICEQEIgIRgYhARCAiEBGICEQEvhEI2DEyXOFnjQQazxIra22WAm84 SBgsbulZSVXRKcB46ZucRHAVgXx8JodZ8qWbDlWITMm7aigywVaoxU2ixUMFw8paOn0LG6/FTZb5 lm5x+sabTQvLCtOMP5FRUFAQpiudZh/39TOwIzVhsLfUEikuPXlfzb3MmMiOgYhARCAiEBGICEQE IgIRgYhARCAiEBGICEQEvlkIcI2fLOtzVPOr/yDRn2ucmAU8u8WrElUdnSKsBPNDGsNV5WeaOdOB cZNjPmlVpe+MbObXr5Zp4HN+woLIanH6Fg7pDIeKMk5nvOY7qvutilaVHPJbWuibHKNZ3HyWViM8 zNoVT2EuC3YbqWgTwHTNHEpQoufYkU1gYnQRgYhARCAiEBGICEQEIgIRgYhARCAiEBGICHyTEAhX 72nY1vappplXz4zVzATmpxlyQ0zP8lBG+BfmMPkhrapwKDebj3Gmh34oJ8sfpiXhnd1RlGTIBKzy VRVGuv1ZVsbDihmdflVyQh4LhzLy5TOa8ZmfvxykMgM3Dyko7iQrVxZolTemUZynMhhdRCAiEBGI CEQEIgIRgYhARCAiEBGICEQEIgL/ZxCwzSJUWA0IVa/tLcXsDGo+QDbSLUwxxsezlY2XdDqm2V+Y xrDlI1/osnxMM17zSTO+kEa6OUu3eLX+FzEUWcH0rTCjZQsj3f4sLcxntKwci4fpWZqlZX0rz8ox n3wmo0bGOpimgENPJGIuOvOTgImg784uUr6cHxUSZvapljeHOSeSFKeqmpyQxZUbUnLCXkBq2PJl Viq6EiFHjFU3R45mSTXMzVBFLB97Vk4+nirEpWQIycrRRCWmbHlCaXHkNTkho6eHpDDsBeRgU6Wc MGMmnE+Oqp9qmMmRP5qPPSsnH09+aQHVsMlmVuEBX+VgmoO8Jifk8/SQlCccMc4DiidFjKvGJjfF 2l+KmEtnG6zepTl8e62UxdOrF4Pu1DJWJ6caIV6RHDkqMtWwmtxpUj72rJx8PKmEKkIQkpWjnEqs Io8jp8WR1+SEWTw9JOUJ52BTpZw8GY3kFcmRo+qnGhprtX4+9i8ip1Ihhk2+Aiox5xDSHB5L1Sdk 8fSQlCecg03EOAehiHEOHGkkBcbT/q+040o3SaU65d4PTK5U2TRPvlA+di02X0I+AZ5WiT1inKBV CRukRIwdPB6bSu3YjltJQPycwFeG8eeU+6Ums1Fow1Cp2SoFbyGlTLnlWxamh2HGaWsJ6cwZyiF/ GM+mM05nculbOF8+S2OebDpp5kI+o1Xyd8VQRIEs0Ao1PxRaVaHktTSTE+bL6pHlsbxhHtMllG00 8jFMZz7DJrciuOiezGQwa0mWBRELMk0jpgp9CzNn6EDXpCCzJjt+fwS2y6AsqZw0B2n4S5MQZ6qn a+6UO9HTk1ITlu8CQjnuICaV4H4COUbNJ0dlBLy5H45DTktjmb5AI5lccuXIQSTgCYLgJKOXE+R3 QdA1KTeH8X9xjCk9LDeQb0HvJ3U0/lDViLG/Yh7LEBtN+RyMfe4vjHE11yq3/fFyG7MvNGmQ/4+3 44ixIvCV9hVfN8Y595m1629aOw7v/bD79/ScOhDAkN/qBHIQJNfX1lfk6GdK7CLGgQyTwDrk1tVR 0l9k0ny5OSw9tx2TMS0kzeHpaZLPHvKn3P9/xLjS+GAAw48YEwxrH2gzQTty1CDNEo2U4Ih7RfNV SlCObw7GVrlATwt6P+xzHMkYUBXOK0yEr5mDYFf6ilwZuWVQuC8gKDYpQ5MqJXhNArpejFTRNMXL T5OcaC3TiCl30iw8V4iN6mlZmJ7Mj42YR44nhXIcKeCNGOdeE4PzP8U4nBNXg7EvPO0SEgJIqkt4 rdLE3OtIRq94wJ5yf5UhK5B+9TrgS+mewRir1Mv4AqHKS7oVSEJVcdLtj3x0jJujjKxsS6Nvci2P xbNlkzekMZ7XZQ00eZk80QSGhVfHzzTjZdgqxi1YRjeZ5pOPjunGk8+3dPPD/MZvcuiHTtNzdxR5 1ZCiiT6aYujEp+0E4vTVtKDYpNQkkNYY7DVqYlObb2fmU6nszZRKDOQwv0bxk0umCHelIb8mmEx2 IifDr3JYaIaeyEEgSUKgkhwQmF4T5aVGUuYOHLDhUGj6sO7OwXf/A2ysBOd7iBz7LmKcKo5iAkG7 hjGKNnW91vSoXRY20zzL/2VgzDIpp0KVB56I2B/T2P6C6Uag85eEcY2aaXmsqGFiPklfIsYqi/J4 n7B+3n1RjNnmwvaXlcNSWCbbsWFsZSb+F8EYypvcUI5rQZ6SVDAJuGSLmg/2Lw1jf62IQ1XtOOyj qKlmyTBTH/4pntAzURWBLMZGoJwvFWMvWPWjonRfc1+RVDwBADp4bBS4L6kds5ykCOKolWVZLlCp HSsOxmQ8elvp/aCUUCDCGqXgJEAuV9JXgbGTndQkrZNVSpU0fQKfdFOIuhJjiyOaSNR6kNk5Zcm0 Y0vTPOBPsiBQSY7HlHK0HWcwVh1A26X+WAtxJQVVYAFQLdEgV7FQ6URhEk1OSMyVk0oMeZDVouZT nFdIJYT0pKQgH/nhPg/jHPghM9HH5H8OxlrI14Sx9m5U0HRzhetv2N5cLZKapHXKzZjKCeV9QzGu 8Q3DuAYWqYTKcE/RDsEMrlVI9hjzwrH9hS6Rk6F/49oxFVJlncZBlUAnLalJ2s58+6uuHXP9Q0wd rrlyUolZcDyCITlQ6P8GxqgD9NcqsKIMf0UYW5t1qH1zMdZLaG3Brq32A8SGzUx//MUPPG1/HkuS La8PazTBGERtWPqjcsmmrsp2bAxfpe+VVhC8OmE9gqJxdrGvTXjTKYPlcJXLRSLMY+km1dIsTp+y snykk2Z0s9tYnOl01cVNR8fpeLM0S6vkW4GVEvIQKDSsRKi4sYeKhummkBmJjM/ojFuYsshnznjD eFaOpZl+lsfkhrKVN2dHkaaCVXMhYlKUM5j+WTroXGDmdAReI/c0xMtQOaCgfZWWlMimzZudnokc Ti7zu1COF5Myan5GmUI9AFh5mWzeUiwlKCdHL/CCQ1lz5FBGjhyyOIL+khl1oqcORJPD9JKSUtmy eYuU4yDvtDzHbffc9rLtshk828HreJDThKsyXraW7EuydCRRji1eNX91GJso8xM5XxLGUDxHZSuH vpVFfRnVuKdbWFOY7giWpSqMTQ6NHQBBtuDarl6zVrZuc9fXMA7luCJAMaIKoYJ0+duxyXE8+PUY sz0Vb92Gv+KkUio2YQQZAwivi6oY0MNgvnacyEkCNaS8vFy2oqxtKDOvC+pk2Cgf6YEc0nBrCu/v DRs3yZq167T9KY5MBC/zJ21ze5kuoHNbCTnA57wETsNGhQT6hOXvKN8BzLbK1mLWI1eOCuXP19CO E0gs4PW1VmBkqkMt2UeVbNuGPmRLUp187bi01N3TFTvKmTUHGw+Xxxgx91/vB/YdXxbGiRxfJ+ph 14phdV8mxqhHth2zUgmGFoC/vQz9MPr5su3b8ygFzUznABvVl3STY+3GEyxL5b4ibce8LmzjxMbd k/Td8F5W7q5ZSanvhz02WqAJhz5h+V8lxr56Wu3kZxcw5sUuL0N/UYz+Am3Wrj2WPhpmW7PGp9Uy XOlb2CtBxOj0l8zAhp46EFUWCjA5DBk2Duea2neZDqEcJwgUI6oQE57KSdKRZHKMq3JfASFeGRNr +qRykEKerANtZ9uxq3kiOSspp05eHcdDpVQxRp0SVlPTl+NGbn8MviowdkK9HOel1dyJdsyxU+cO Vji18nKcbPxm+wq+JUAeu8cRTpBI5CCQlUOByksmBNz/VA7TNb/5YWtiIrIQByqI/0lFLRrmtbAy kt1pqGTm3YV2zHJdgczmBZsOn4Mx+xj3h0KTwlkPJzX5/UIYi84vt27bKsXFW1OhWhQLQ8D9rxZj KpZVJ9HLdPZydMzjNWCOxPLhcn9ZGBs2VrS1PwXQiCySYR9PamDprL1TK6mKyUnu8Wrasfaf6Dsd rqmIJMTqa+EIuP8g5B/zlAG8WXUSWaazl6MYMzGpHyMudyWMwZPI1TCF6NX5gvMKX65VCjKdPlZy kE6tksIRofuC7TithBOjv5D9TcB4B9ZwXKNxrcYw+2aczeJxdvdC7tV1oBg2vIxav6SvQNyIZN0V jMlPOV+XUz1RmOmLgKvdLilgUsKspFncwozzz/izhYR0y5PlYTwfQll+KztfftJMj8/j0/wFVUnJ 0CnMBIdJ2UKycfJaXvONZn6WzjhnuKy4m+mS0zlLszxMtzB9upAnzG985Ck455xzDuzTp0+/HIMR Uyo53CgmGWnsTvi7EYsBLgrq1K7tcngeeuEV4202Z958GTlmnHw6Zrz07tVD6tRBngpe61A9L8Zn rizHpat0vwAghQarjVgQj58wWT4Y/hFu8AJp374dmhIE1Qw1sfyBH1ZMyaZPoATpQf0ZXbx4iYwZ O14+Gf2pdGjXTho2bIDqII9hgE5m5arVMn7iZBn20cfSqFFDadmiBTpkys3n8mPMCdPadetl3vwF Ur+ovtQm1r4Yr6EXRpTpslTGrU7KoD+6qxIZmCfM4dV31ABjd81NTppD5XiMU2pajisslepSMnIs 2XxXusvqw3PRfj4Ajh98MFw2b9os3bt3xXX3cqgEJzRBfldO9jc/xlm9aZjbjgXlZ9NnyMcjRsrS pcukWzeUxwmhinQ5eG3KYEyaO2+eGpQaN2qUU+DOYkw5nKxMnjpNhn/0iazfsE66d+uWtJVdxVj1 Ktshk6d8hvsBmA37GG2nSNq3awOMMAji/liCOo0ZN0E++mSktG7ZUpo0aQzdWS/veSwTbHYCYw6u NKql9ViPenTRSUgix5WQXCsWk5v2X2jH0JvGrZmzZ8sno8bKVFyHXj174F6rlVwDqs2Jw/wFC+VT 3PejcN936tBRGjQoAo+fHVj7M9/XjXmdC9pfUOkkuBMYV5IDgvXHiRxfmt0PXwrGWk4110oXSzXU kDtm7AT5EP1wi+bNpVmzpgmGu9qOXTWq7it4/y9ZtlzGjpuIdvyJtG7FdtwESlbIIvTPq1avliZN m8gq9MPj0NaHo63zHm3RojnaHNGqzgXXCmxfNsbZa6XYaDnVY0yNuSjdgrF3wuQpMgz3dykMcp06 dmSSrFm3TttoUf0iqYX2m7eaaO+5rmqMjS8XLYcN+5lteCgzf8Ei7U+aN2+mfYu+UvEl9sc70451 Uu+VtbHqP8GYokyOE5tK+4/bMXAr3VQq29dtl4KiAlxPdz3yYaxlp0WnfeVO9hXMWrJ6m5RvL5fC eoU71Y5dfe036I+hp7UcwyZQTTNU2Y6RVw1jnP9UN68AX9nWMilZVSIFdYFNgd15pk/ge9xSyhdr x5rfV4R9yuKlS3XMLygokPr16rm5L9PzOF67UswVZs+dK9vxwIXzQHNZbAw8w9D42NKSFgB5lk68 OL+e8tl0GfHJKL3Pdu/TW/s35iVfbhmWF9TqMPYlVNeOk/6zSSOdX6e6/ucYU1aqtw9ZpdOCMiHU LQ9PZTmOUpk1xYbXuAQPGz+bNkM++vgTWbFyNeYpXUPI3Fth0OCrxDipYKWKZTA2xqBSrGXqAmxS QKrGOJCTymAokBMkpCJ9SBuO4RkwMr9GwRe0413uK3LkGBbUjuVbPNWqunacaFcVxlC4YkcN3FsL ZDTWp2PGjZcunTpK/fr19WHn7DnztNQizJ+TRpEIraYdf0kYB0V9dcEAm1yMc4tkfzhz5syJzzzz zCik8AKEf6xxGLfMpJnLl8400i2/+dk8jGfTqopTHhtKtmzyh39huUiq3lnLq57LpYYFk8JCsy4f j9HMtwrmy2808hofy2A4TCONjnzGy7jxWVmk0WVlVWCQy+FxjcSRUpsi4/hLOBHAIFSGAey551+W V18bojsXEs20IOZOMoC/howYNUb+cf/Dcv9Dj+IpKJ6MKEeoEkjmrJaIh3KcRP7m5uPEecXKVfKv F16SO//8N5kwYaIUYDBwbMYb6GPlqE869E1uFuNDyRYkn0ZA8Lpxkn7/I4/LPfc9KCuxIOFNFHYk BTA2zJkzV556+ln581//gRtsjvLsLMaGP+W+/+Fwue2Xt8s0DGxmHKEcwyZVk6EAPPA4OSkHq6Iu YDM5pDtOk5Pmy5WDzJZEOfrUyTRW6ZkfMlsGJlkYJVtQySmfqccFwIoVK+Wue+7DYm+STJ0+U94Y +o7uGmMWdSg/lOPq4wSnWnnZvjy93n4yZWWZOKZt2bJV3hr6nvz5b/+Qf7/xFgaTHb6NUIDLQb51 MOL98U93y0OPPgEdvPBEkAWYI01zIZMDDSFn7dq18u/X35Q//e0eeff9j5LrrBJ2EWO2ERq57rr7 HzIbRqzRn47FhGiElqNPspHOyefDjz8lf/v7/bJoyVLXfk3FoFtIsNkJjBWPDRvkVdbj7ntRj+Ep VikUOSHiYthY8a59JCWDf9fbMSrrr5eC58vMynFl8Ld0eykW3Z/I3cDjsX8+49tXqhEF0CA9Dn3L gw8/Jv944FEYRdb464QahKwacYSwFlov4/uCGDtsIMTkQC9r47llUWPnvhqMrTQqwjANkDVl7tx5 8vjTz8gdf7lH5s5f6NqV18OxOV7LbUmpT3lp5XAZNZveQSkZLK68adOmyyNPPCV/ved+WbhwsZa3 HYaT+x58VP74l7/pjpvZ6Icfg05/RR8ya47rh6081/acYMPRlQ9aUJ6lVaV3LsbGRQEWZolp+wup qktAcDqRakST4xRiO1yFtvfCi6/KnX/9u4wYOVqx51jx7nsfyG2/+K3MmDXLjYEqPPtDOU4W71kL a3mO7DJU0465JNiKXYND335X7r3/IfSV7+gOMicONQjkfNUYV2BjX9mW7VJR5urlrpVdsaDuBifq /nkYh9fKSUgyu8vyRcc8AES78vRnpsmI338s29Zu831IerU9+MFlScFMtGD5jHhCPozZTkrXl8jo O0bLlEemOPudz5DICeBhMJ8cpwiueKLGzrTjAGMUVrEdT+y3lmrd04qlcpwaMCahD1k8bJEMu/1D WTdrncar0tXJSZSCCAu7HK5tk0y6S8uVBVqSxQVY/gzM1R598p/y2JP/gsF5MfJ6ecrs+Kx10Ziz fOVKuf33f5Z/Pvt8ci2RyS4Ngzt5PziMqTdLZEncPf3m0LcxD7lXXn71tRz55NjVdpzsfKJSWogr ydXQjXHsP+/HGPdHzKU3YYcF8yi7u7k1rJkNO1J2AWOV5aVQzhfpKyy76Z3KcZRq2zHK3LS5WF4f QlzvU3wdlqk0xUYL2XWMHbBeQ4rchb7ii/bH2XbM0tPaZDAOrpW1Y9Zf/8JrSiFwleU4SrUYJ3LS ezyV4+Smgr9ejF3pTkHeaRUYQEZhjvwPzBkeeOQJWbdho84jZs2aI7+4/X/ltTeHII57IKiTr0Fa BZVjVGD2JWGcSvwqQ1ax9FpVVRrWOLyMzGCZjJVxptllDnmM19ItzryWL/RJt3IsTN94LBzGSaPL lmH6hHTm4x9dGHaUKn53xVBkhZooK8ziWd+Uo09ey2/hfPktjbKy6RY3ueShM/kMk8dkZOlhvhp4 1YXxxLlOg7d/9sa1YsGKdsKBY97CRfLAY0/II48/KcuXr8gZwFI5TjQX0N8+/WQ58ID9sAMDszpf qg6IOYMP+JFmdOfX1MqkULjMIQ8X8dzxcdn3L5a69err1kGWnPKYDFKtLt6HOGTHU+dV8Ms1j/FQ tVCGDph+VDtm8JFy/LeOwdOk7VYd8Pot3iilDK8FDNxngJz3nW9LrcICxdSVTv0pGINyIp9N0PRi kDypo1GOT5b4R32cc9cBBPekTomW5lkCkTl1YcE5znX51MHV19VDw54vxcEIqALkpPTwNjI5jteV HcgEgTQ6TmZzZbj251IrtMMe+t77MGxMk59c+0P55S03yvnnfhs70uo4GFUWJ5hpndL2xy2kYFMe lu+kMs5XBmnksbJdCn7Bw/bUuHFDueS750vXLh1dm2VSIifVma+L8bps21aqBlPy0OViQ37go2l2 Ubwyyl0h7bDb54offE+aNW2GjXDcoeJdyJa0NCfK6YOw0inXtQXucnrmuRe1gd1yw7Vy280/kWOO PhIDIu9sts0yGXT4IXL6ySf4QkwnF7V2nMXGV80zEU/WybVjEql329at5dLvXSQtm7fQ+4l0GvtM luLj6+TCbDeu/WnIY8x8dJqPhfC/pjnfJepv8OPkUE++jrNq9RrH5suzWyyUwzBRYXu68LxzZM/d d5fy0jItjz/GS0G81iccd4wMPmqQXmvqZPcty3S87loTG4d2ymO8pPgCXND/Mn94P+S0Y+ZAurs2 QTZ/6axspmjY31eMU467VlX3FeDw8lkpJzSUw7BzWlHw+miQjztTBwzYW75z9plOlu8rTY7lCOtO OZrufVe2E857iK9NbtVXq6hfKoEy2I4PO/RgOQ3tmPpbK95RXqE7/Uq3bdf+eb9995FzzzozzOzL ZKGuHduY53RxfUVSZxOcIwERr4/yeTlUMtXE14M0Kg85Tr6Pmzwvx6IU7Iq0fjS9f8izA+2wM3YQ ff+Si6QxnvjzvqZjyaXY1cBXSrm7wfRn0a5c57sW4erIe4Q7ksijzvwk4u4Pl5iWw/ibQ99Vg+lu 2OVw8QXfwdhbT3VhWf9pOzacUKXEpfdDihB3R66fs1amPjlF1k6n4baKDeKUk8hyEcPYFeATjccl +rKDiKVrShgxHu+rVSVMZwa9E2UHdvfMH7pAZr82W0pgKKpAx/dF+oriFcWyYf4GvbYpNgx5HbAb Z+vqYpnz4mxZgPLKcV8k19nXLFuNVE6KcQCcy2VVDWUwnFNdRpwm3Im7YcE6mfn8TCkrRru0sTpH juEmsnTEEpk5ZLZsnLs+HVy0LMsQ+jmFgot1xH2wsVTWzlorFaizq3Tldkze1Dk57OMPOXB/Oen4 Y2XS5Eny9/se1h3dNCCl2DDk86KscuxGLcM9xzmA3Yusu7Xh8H5geakcQ4hUVz55OS/ZjFdK6Rpg FznnBdy9ynLo0rlFOnZaXdz4kJZtamo+FFGMvpQPOFgcy3LOfEhBtVgHvjZcUrJdj3Ngv0IO7Sv0 1V1ESEizJQROXV29c30wKI9Lc/o5GvksRBbXH1O2NRMQkeCuq+ZHvDo5TEvloC9KQHAFcZxq3qwJ 5ikXSof2bXVcZ8U1G34MX6cV81Aey6Tn46QqDXSvD/ndeVLkxZ+vgOML+3Brd6nvpFSNcSoD15wq qEvzGyVIVJLpaP0xiUn7gxyqaLKZkjgELS9pFtbq+zgx1vJAzL1WAX+qLMWoU1nIYDJVBvkUT8vr 8LI8oWrUwfIaxl5yKh88dCmvxpSW/rC+HKtqYg5xohx1xGH6JoHhsB2vq5ehr+Y8wpwrF7oxp+rL erhU8xkjxm7OlWLMsky25gjg1rj/UZ1Dwlce9ork6BNEfP2oRvD2UUDVijE5yJTQSA95s3EDxXym Uw7/SAvzhjxGD8sEe44O2Xg+meQxWQxX6QqrTKmcYErlK9DSePfQGU9IN5rjqAyE0Y3PgAl9C5PX Kmj8Ic1kGQ99y6s0NHTTzfOaGDRyBDP2CseDnOx0hg8fIbUKaumrBh9hWywXBzvwuovTyMnRQrzI Bg0aSF0sxkjjUxgOenyKz50/tQtr4YVDMjI7XgNBR86Blzw18ZS0di1soXeCHQ86KE6GyzgZhi6F hYVSF69kNWrQ0HUMoHGwK8U7p5Raqxa2XKMcHQW1BF4caIJETiwXL1soT/3rBfnBxRfoqxKqBZJ5 o/MVpDI/QBdCDp/a0lpchK2J9evDWAHHM4q24lwZvvNcq1aBFEAfvo5Sr15dHehdh6qs+OGA5M50 4GCMbV0wJFEuhjMHQVhVxeKEY4+WAXv3w+sFHXRQYwdFjLjlma+7FSJvoWKk4n1+VsCVyfLKgLWr B/hRHv/cpIaFEnU6Xpdy1Ae7Z3DxOXmlXuxI+ZSJjrTCgkKlleN6l5WVaj7KIzaU6corB+cO4FFb d2dQPtSAAPygcbEO5Odij3lUCzBRNvUggXKYNgxtrV2bttIKr0gJ/nfv3lX15OtC1IvvFFNPvpYX 1onXlu8d0zjJNlsAg53p/t6w4TAWFcs5Z50GA4fTWQtlvRGvWbNQX1MprFlL7wUqr9hAFnWjvrWA eevWLeXnt9wg9erWVR1AVkcDYgHKRzV10oUStB3qhBPy6RR1pJdiQkYda+E+4L2RTkLB5FiVX/NQ IBwXgtSH9aIeihXnkYhv2rAZuwxGyXHHDNYttPv03xtktAEYkMxxS329+vUQdVizIJUM+WzHPNOF Dw9cW3HX1fLy2vH+tPuiNq4971PiRnwb4zXLAixSKnz3ou1cjV9O90LUk/UqhQye81O7tusXWNXt wI1yeM/z3mY7L0cbYfum/vwjrvZaWAoPQ27Cwus+Fjt/xuGVpMsxyS7EdWd52geAi9emHHJ4Lazd siy+NlCrNu4L8LBt8bUaRmjopUy20gbYgsz7mjzux9XJYQL9gB3beW20e14Tff1Vr6ljJ7fLi1DS /br2x/uO7Vlx9G2Vxbhry/4S9xRw1PoDD95flEXdOaHhkzHeb7ynXNso0DZHeZRL+bVwfXgfkMbM zEu33fcPhbiOxJb3VGIE1zbn+g22Tspnw2bf7WTTKAEhkEljQQO89sTGRNnUo6QUZ4qhLemrUNrK WF9XrrsWrh3btWBTYbsuxmLpCezuGnTYYdK/X18t1/Kp0vhhO2ZfrGI9sW69OnLNVVfofcdXKnl/ FBXhFRL955iS/gw6sx2w/eqdhzgNJ2yXvB+1L3dXzEtXxDVMfv7XOuxAexLgjfbDe41tRXUFu+IF RrZD8tKgyjZVgGth18ELh+fkE52wTRFbjj8cK9hfsU6NMaYW1EgNI+XQ+dQTj5P999tHOnfogHvF PfjgPeT6SbQd9JPaXwDf9es2YCfkk3iIc5L06N5dyqCXuyqpNi4EqqqlNdbryodDD2DXwQH7DZTv Y9ysWYj+Ee2CbTW3HaO9AV/WhWmmC69xIcZK9heKAYpw9cX4g76HwLKfcOMiClfFAmwQ5FBCrKc9 M0NG3TFS9rliXxl0R2vHS1bDUtsa65DKSYKuglo2M1IXx+7CPlk9vZ5UhPct9aEOFORSnYrQRxO1 AMeU8rikWnULZe8r9pbiFT2lQaeGnED4PPSIE3xI0/ueheDVCN7rzrm+gq9kzXphhqwYv0qOffhY yPCpVI168b4GrWHHRnLgrw6UBm3QVnCN3EhLXurNMliY66s1CL2tSto9UQ4d5SLsrlWIjZNjPOon EchHuCba3Ipxq2TEz0dI+0M7SJ0mdQIDTprD+qLeZ/SWRl0aS5sD2mGXmNWbfE4eFGEQujDusaEa 5EAa2+LyT5fKmL+Mk5OePUnqoE9ksrIo1G6cwJ2veSBGaniMWb+6devI4YcerOPB5T+6Xvbqu4c+ nOKDRC2YpUIY87E9d+rQXm7/+S04XsAZbYmpa+cYt3C/0nG+SgU4RyHOIcaUQ0fdOa7yIU+/vfaQ Qw46UOU0adwI94Hrn8jHMZL3GPtqle+FMT/vQT644nVmX19YG3096swiOIaNHv2pTJsxW40kvHc0 gUIDx4cmV191ufYZTZri1WH827h5kzz82JNy+iknSu+ePaQMWPirkeTUtgRdOK5TN1aY9eayuhbq zcLYF7ox3PVD4b3B/NSd8w+WyXlFAfoAjnkOUxiwkM5+tIJzP85/kEePY2BpKNuwZz/LOHFjn5nU k40AYJDO8b4AfRCKUhrLJa6M85owH68VE918CwZ1YMijNgg5y1AMtD9AfwWZZdjVWFHh5spMY5+9 nfMWrlUY137f+mwI17KRgj5y4yZi/JScevLx0qd3T6ynXP/NOnEc1QfF0IZjEsuiDlRPRXhfFYc+ zMPEMuhoOLHft/mn4gQMSzF/5y1hbcmuB/l4nXTOwDpgTGSb1vYLwWynLJdrQM6T2JZ0XGGVoBjX JpoXehZiPqHHciAH2yBx43XkGG94sC5s14xj6oE2wIcX/toirvcoK8uygaUb29wc3OqkqchD2ZTH eYyu39CHsO/jnCx8CEudWcfkfkFbQDadq7AO/fbcU373219Ka7yqrvMpXgdgwHUPxy4+sCEO6E18 G2Srdc6uWSl0qcE1GrBn3dwVcxjx+qROS06iJichfKUBXjT85egTFBgog3oFsYTHaJSgPaz3yWA0 hqtzlEHe0Ce/ybaw8TAeOsuXTbf8pJsLaRa2tCr9XTEUmRKhb4JNkazCHI1IM4Us3fIxbjwmw3zy uNEs5cnmJ0/Ib/JIpzN++pZmYWVIfyAGKZwb2ODlLh3FM4uzvq5fv14+xHkxZ595irwx5G0Zgu3n p550PG4WTAA4KjGTY8/RjDcfyUuXrcBgNUvfA2+Azno/7Lxp3qKZ5uHiYAa2/HGHDw+Lpttj9z7S rWsX7YB4Ay5fsUKm4pWDYhxuzBu4Pc4I2m/gAF02ceDgbpHpM2bK9FmzcDBwCc4b6S59d98tWcxS Bzp2zmvwdOWlV9/Aaz9vqYyWTZurLu3atpGFixbJnLkL9NwVHpDNMze46K6vC2yoyzEFwmbNdvqu x5bFZhhY9+q7u55HxDKYrrX2hXIw54Fp0/BqEA9mZifVtk0r3clQDwsc8ptjXfkUh++/b964Wdq1 ba1nO3FRNw31W7xomWzfgc4VRo19+veTttCZnblzGCzwj2UvxTv3fNd2y9YtwKNUmuJpyr6ohztf BdwsE5eMHe4S8PI1OXagnOD13WMPadO6FfDGpBSv99VCx99vrz21Y/xs+nScibFeF2Tt2rbV60Rj 4MJFi/W1u9oI98BOrxGjPlXZTZs2drsD0Ljat2sre+6xmywC74zZc7XT7dSpg/AdfK2DNqEKPdtq 6dLlOFekmUyaMlUHl949e+ricwYmPKuBzzYsRDkA7Yl20qVzJ8WQ2C1bukxfweKB1GwnHTGh2xsT sOkz58oTeCWwFc6M2mOPPuCvUD35XjLDxIIzQacHECQ2+Fu1ao2eC8KusmmzxtB/d+i/RN9v7oSF WetWrWVryTa8fjMftIW6S4gTubnzFmBwLJHdevfSPy5K6TigzZsP3oWL0da36SHWfOLnbnV4SVug Qm7w50DF87H4Os02bEvn4MzzuHr16KZhGmWmzZihZ3Ztg8zJUz9TAy3vH1exRKirKyVTPCsNzNat 3yDT0Tbps+dphjNfdu/TR8/YUmjAxnbLV9vYJrlgaYmBdLfevaWoARbs0JNGBnUQzOvA60d+tq+W LZvjGvRFnReinJla5reOOUohnz13Hu792Wok+tbgI3FW0wa0o3noL5ZL925dcK+uxb2/Sooa1pe9 0C7ZhlKQtBJ67ecB+6efeU77mYPxdLgAEx2+d872PgfXZhHw5nUi/p1hfO275x6YFNIYreropHDC 5MnoR7ZqO2uPtr3nnrupkYg8bCOuNI0RNn1Kyz5t08aNmExUSNcunWU3nMXmjMau3yOgFtKVBrPD WZ8wFbvm2J5pbKKuXPDTwM4dNcSK9x+NATx/hhNJ3pec67NdzgV2a3HNeL+Rb+myZXrP7IXJziZM QGfNnodruk53ogwY0E8xZiW4+Fm0eCnuM/QPMJyyPfG+5Hk/4ydNkvXrN2pdea5Pv7576PXk2Wzs A/vhOnKSOH7CJByavlGNNvsP3BftCRN0KMY2NGnyFMWcxo1+ffdEP95ZQXZtfwH6iiWo31ad/HXE PdQPfSd12IKzrj748CN55tkXpUnDxpjI1tRdXzxLAgLwl7ZjyqYjlff5/IWL9B7k0/gOPKsOjizK BSZev0k4v4tnyPEhQo/u3aQr+g1Objn2sN/gKx+NGjWQvdA2mjXHYsnatJbCKrhzzObi7Djixx1s nLyyfnugD+N1py7sC9l/14EhuV3rNsBirmzYsEnv2X1wHdhfap+T1IkKQmHI5zg3G9dt45ZNOFOj VJo0aiz77LOXLkhZIdbb5dUq6plM5Odh7DSsYzjWOn02DWPtsiW6YKCBat8BA7Qtc9x+8eV/S0/U fwsOnm+INtcF7TZXH4err7aqxmvBh0PE79STj8MEGAsJndjz7KQtuvtT2zHqT8PqfmjHDdGO2VZm 4B5Zhld1+GGLpk2a6vXmApvyN2D85Li2di3GFNybPFNtT4zbXLgmOik2gAj8nOhv27hVFr+3SIpa FcniDxdL8Zpiqdesnl8QsP/BGT0bSmTzsk2yfQvOU2xYR4o6wCCM83pCx1fANi/bLOV4elynMYyP HXHGUx0ascgFIfi/DWf9bFmJQ9q3lUu9pnWlfvsiLIK8oUvZsINn1VbZsmoLds5sl3ot60vDdg2k Zi3e99AZ68f12FlTUVohjds3luY9mulC0lfJAY1ydmCxWbwCHwNYV6x9ZlHrIqnb3M0N2FdsWbFF SteVyvIxK2XZJ8tl3VTIxD+e6dOwE87IQT9burFEtizZorq3HdBO6jarSw1d29KA65u3o75bFm+R ko3bpACY0KBUp2kdPdqRhrhiYFID15sL6s3LN2G35Q5pAKzrt8FY6eWol/ygApoCP6kYgrh/ykq4 WPYuCSDOMKYtG+dv1B1HhVjQdT60C66DexBnWcwvXl6M64APDqB91WtWX4raN5AahZzt1EA9SqR4 abGsmrhalg5fJuumrZM6RXgQgXGqAbCpUYdjbwUWexWyBXXjjivWr6hFfamHOnHMY1vjvcxxqt+e u8u/33xLTjvlxORepbpsf+wD2DfPm7dQ7/MePbrq+WdbMIedO3eeLMD8sXPHTrq4nI9xvgy7mzhH 6dWju9YZRfmx18nahn7w07Hj5KlnnkP7344HLuj3cL/26NZN+3nSeFbl9JmzdNdRW8wH9x3QX/td 1mnturV4bW62bECfzXutPozjNLC3asndvRU6B3zy6ee0fzho/32hf03c752kUcOGWmfWh33WEryK PhvjZBH6Tz6c5Hz1rXfelxde+jf6yc4qm/c1xzi7L3mf8VVUjuGL0ae3xZhZE5hzvOW4vzfmjDTA zUE6z0ekkWb/ffeVpjhDDnDrNVkG4zPn0uy/2N81hZGf8+2G6If5cQwe5cD+lOexsb9diHlQHRgD 9kAf0RnjO8thH861AecMNPxwQT8Q/R0fMu7QNawrK/lF4a4vKZClK5bhXMdpinWzJs2k/9591aBE o/iM2djhhvkOj5ToievHOcHEKVMwtm5Gfsxn27TWeQSxm445DMvmfLMt6BMnT9VzNWlca92qhey7 T3/3cJwV9+2IH394WzF+VbqiLqxHA8xHu2Hesw7Xk3O6dVh3ce7ZpDHmZLv1xq73xsCO8/3ceQXv A85diQHxJFY6/4Vcjk3sr7nOmoY5BftwXsMi9P2ce3MuxwuyYtVKt2bAte+HNjRp0hS8krVBDj/k QFyLbXiFe640btgI41hbnOs4SnU64rBDtD6cayxegnEdR4zwbB+uh9gGadglPiy3GG2dD+M6dmwv fXr1whx5Pu6XhZDXXtcTCxYuUUPhbrv10jFVH9RRL4wdHEM2F/NaFErrNi01Px/U0nHeM3vOfMzb SqV71y46F1i9ehV2kDWTgfv2R1tPjbmcx/Je4v1CYJlPDZy4nmyDxG4Z5q71Mf4Q642Y47DeS5cv l564J/laJteIHIf2BkZcexA73kf88M6UadNkHT8kA8MW87fC3JeuBdYdLXCeH/ts/ncODeG/6diw clx+fXiPwTExzGBx0hhmo6RvYQQT/jCf0cP82fRQBvk/z+XLny+PlZkvLS8td8aQlyUhhkpoP48U FhgWyrC5kB7SLEw/5GHY4npFEGeZRqMfOksjLZtmfEY3n3lMtvGkPriSSjKHj7Dz0YxoKOOwMOCZ Kud8+wwskNbByDIEN9xsHQwwzjjHA47ZA9OZhxuIE8CX//0GOp31WLAtwfkoS+SiC86Vy7CNnk/K 33rnXXnyqWelb9++OggMH/GJ9OzZXX77i1t10cRDf+978BGZiQl9XwziHBj51JFPYAognxP0KVgc b9yyGQPWUr3ZW6CTuvN3v9RB2w1splaFTJg4SYbgfAUu5N8e+r7UqltLDsWTnLroeP7wp7+pkYiL dHpP5QAAQABJREFU4Hk4b2MGJrE333SdHH3kIFctDBpcuI8aPUYnszTI8HDVow4/VC6/7BI1GgUA ah5OLF546VUYT0bpgMfJMQ0L5+MVtVNP5isULodDW2Ts+PHy2BPPaAf46AP36iJh9Jgpcudd9+hA 1BSDxrARI+SKS78rZ556ig4QrnaAHfqtR0f1p7/9HQvQtc4ws3ixDobXXX2lnHzCcTqAVOBa2dk1 XIy/PvRtnGkzEgNHL7npJx2w6GijRprHnvinDtyt0DmPHPkpJjUTUIf2OmlZsHCRXHzhd2TwkUfI kLfeledfflk7x0MPOgiHKQ/XznMfvJbCxR8ulPzwB5eowYnv9//jgYdwDQvluxeepwsDDnK6ENu+ XQ2RHKA4IL74ymvYzVFPJytvvvmOPP3cC9rmmPcjtBMaFH/z85vBU18nN/fc95AOFJyc0TDHic9v fn6rvP7GUAwKc3Uwfhky+ZToexedp4tzbs8Pne2K4ZNvDmR/RJto374NdjkcgoV6a3nuxZflFbTn 75xzlhqOVuI8JZ5VwIkVJ5ntMPAt4eCF9toOho07f/crGPzaYpCskI9xtsgzz76AtlNXF7R8osSd aZxg2X3ndEl14nvT96Je27aXYHLUCUaC1Yr/RRecg9fJDlPjymuvD1UDAA1pnNxxezUX2Gz7lORv Ry2D7czGiI1oi4/h3KJPx0/UySwx58B48EEHyAXnfFuNRZxY3I9zxjgZonGKu6G4WD5m8BFyzpmn 632D21AdPQ4s02bNkN/d8Rc12B416HAYH3fH+UXD5Gns4uPT0mOPOVKNIzzv5F/PvSQdMME6/ltH 62GTjz/1jIwcPVYGDzpMJ/ScaCxftlInW9ejDbeGsUQNeqyX71/eff9D9FGTpT7u4Vdee0Pp50H/ ZctXyq9/+wdphckarwEPmueE6Y7//ZWbvEMGJ33FMKgOGzZCt+kvhNGJT1PPOesMOffbZ+oky+Hl rgn7xVW4tx7Cu+1L0Je1xTXmYag0Bvzkmh/q/cJJmnPOwGRXk/hQZ46qr2Ex8vyLr8AgtbvuwJs4 Gff4736jT2/fQHt96d+vA5d2OtGZBcMqJ2hX/OBi9AEdcKj+OHkabW7mrLnomw7XiSH7R35h8jjg yEnrwiWLtc+kofcPt/9S9t57L8Vt6mcz5NEnnlajMK8Fnza3wS65H//wcpmCSfPzL72CxVCpfB+v YXKyz1fBfnfnXbqT7u4//1H78+HoK94YMhT3/iA1JtXECrNmYYF8jMOjJwBj9vHUuX+/PeW3v/of XPPGMg2TsN/+4U/SHK9adkS9xsMwx0Pq//DbX+mElca8Z3Fv0YAxasxY3HuL9R7p0T1PO1ZwgSb6 Oxp4qAvPq9sD/fYAGNCdCZDt3rV+3gev49wxfvhg/4EDsWhpqIZEHvz+IvrmllhU0Jg7ZepUOfiA /eXKy7+Psch2K7r7hw8kuAC4E2eHtEUb5IKA51eVby+T3wNf6slFxKsYG1/GteNu1/0G9pdleEjC DzvwAcFv/udmOQiGTNc+rFWgGhjPaHj7y933wSi8GJPQvdTYOh5j1Y+uuFTOPO0kpwTrbfca9OEi k2PFylWr5LEHOVZ0wvgxUf4CHdlX0PDFfv2aH1+hRtYXX30dk9gSjB+fwKA8BcbH3rowcX1gpq9Q jN0P4MPhuqP1wUn3rt3cQwXowRq8/tbbij0NPHxCTGPjnb/9teyGhc1bb72D8+Xe1nuP9WeffNwx R8sl6Ht53Z7+5/PAdLKOi2uw6OWZU5f/4Ls6piTjNm8+1FULwyxm1dTV+vrVvtcNkDF/GA8DwUrp fFQXnary3irdXCpTHp4iSz5aorMeZu1yXFfZ7Tu7SSEMQXTb1m2T8feOl5VjV6KPgXgYdnqd0kt6 ntETBgi3G2r97HUy+dHJapThAqdW41rS+4xe0vWEbphzMBMMXfM2yMT7JsraaWvwelmF1G9dX/qc 3Uc6Du6oBqHN2Ok5/i/jtbySzSVSr3ldGXTXkVK3Ud3kSTd1Xjoai6mnPpPi5VthYNkhLfZqIX2/ t5c07tIIYxXOAXt1riwYtlDWjFsN41WxjLj9E91h0bhrI9nvlv2lbsO6smbaaplw10StXzEMTl2O 6SwDr98PllR/XVHO9q3b9XWweW/Ok3K8EsZKtBrYUvpe0k8atC1C3402/gDadGk5DENFsnwEDKjA qmnPJjLwp/tJ446Nk77X31qQkbZjm1eoEqCzbrmOcfaJmEdt3yFTHsXrgzPXyo4SLOmxQ/LwPx0u zXri4HlgwLkkx5J1c9bJhHvGy8Z5G6UCsNduWFv6XrSndDgchgLcN6uww2rCQxNk05xNMMztkE9/ 96nUqI2dCeA74Lb9YEjDRxuwe2jF+OUy6aFJMOy5LwbWb1tf+l/eX1rsCaMKGzj+OJfcd98Bcv+D j2IuuRgfYempBiSrA40GXJg+/eyz8uaQd+VHP/wBFq09MQ4sk8cwbr3/4cdq7G+Ohy2cF86CsaE3 FsW//83PhQe/27jFtkNsaOB/FmPAhk0bZcKkqWogaI6PAXTp0gV1L8BZSKt15zvHmQU4QJ7Ghdtu vkGOPmqQ9vmPYOwe9ek4GI/6YR6wCQv40XLGKSfLVZdfojtChr7znn5oolHjhhhP3lTsz8e8hXPI Mjxw5PXnw6fXfP/JBfz+A/dR485LL7+mxl1+/GLa9OnSHcaS7l27oDnxersHA6wjH8B9MHw45j57 4D5vp2fCLcB9fCCMxTTmLFiAh4jo/5bBCH4l5sgXfudsbWd8IPFnnLe2An0X5wccQydOmiLXYmfT aaecJEuB6SOYf74/7CM5CEdY0GjOh5o8X5HzkJ9e92N9SMKP5dz19/t0jtiwYZEMHzFSrv3R5XLi sce6Nx60lhwJeI0RUYedLmg78/BA7/d/+qs+PKLRY0D/vdSwcd9Dj2E836BzjflYB7B9XI6xlx/P 4bhMx/UL++mVeNBz/4OPqfzzzjlThr77vozEg1I+VFmEvpzz/bv//Hs1XLCN0fE+o2Hu+ZdfdRiP HKWGoR49e0grjMVP4Hy9UaPGwkDVTfsZnrPHBzIXnne2GhPZN7o7ScXpvH/OrHk4c+cRNbgx30iM odxdf+cfbsfHd9qq3jyjqSvGBc6pZ+EBRncYOrgDm3OqESPHYG76HNrcKjnj5JNkNMaW1Vjz0ZDE YyCex/l4nXA92c/zYz08cuDA/QdiTjUF87rn9CEAP1g0BR8G2Rvj/rU/vlINQ/fc/zD69UU6V+dh 4myLP7r8B9g5/Ky88+4HOK6jvz5M5DxvEa55Z+h0E64t14A0MN6L/LzuPXv0wA6sjTBILZXTTjrB rZ1wD70/7GN5FmM/51+DBx2Kdc86nTtw48E1aAdnY47Kh2M0SrI9cR1ADLgTmnMMtoNa6PN5fz30 6FO6rvjV//xM9aBR6ZHHn8Z8ZJwMOvQQqY21Ih/W8yHbAfvtK7/GeM41hlvjvq7rgn2x5uFDyTHY 3d4ED0RomD1m8CA5Avl197lrie7C8ZdNAvUIGiepX5Pb6XLtzmEG/plhKNTTeEgzviwtjFtejOqJ PKbzL1QsXx7LSz/kDenMZ7JJ/zw5YV4NM/MXcVaQKZYPDOPJJ59p9sd0k2N5zM+X12jMY874TQ7p oXxLN7oOvJY5L27IwUxmJOJgxtfBaFjhpJJW2sMPPVgHl/c/+NCL8sVgYE8KtAB9/PXF0/mrr7xM fn7rDdKmVSt5FYMWPwnODu+TkWPxBK4QnftlcsuN1wk77OFYtPFJAreLLli4UF559Q08Wd1bbrrh WvkhBsGWWPhxSyH7XT65aoyB7/STTpRf3HKjnHf2WTIRi5WJE6ZqfgNHfWToj4XEXn35tKOunHnG SfK9C87Dk4591HgzCQuBbw0eLDdef7Vch45uM55qvKcH9LqqciHNNf3pp54ov4aB4nYsgvgU6vFn nteJtHJBJ1uIMz4SxoF70YEfevDBcj1k3nj9NXjyW0c4GPHLbW77tZvMEav+/fqhk+yGpzgcyN1k awgm2+xsr8Ak+tafXS/HHDUIayRuRUWGwBGvxViYjBs/WY44/BCtBwdU6v3Oex/6iQqurr9W3LbM Ae3yS76rlnXu2OAX6qjN3hj4m+PJ+o9/eKkO2g888qQu3n9y9VU6SJPngYce18XB4KMO1wUtjWt8 vfCnP7lGeH4U//j0nq8o8ikzO+zdevfRHRJnnHoSjAODdVHLKrAufPJxNAwLfOLVEU+2LsIZMuee eZruOPho5EipBwMLr8utN12PycP+8iHayWIMLqz3XDzB+/cbQzB47Ss/Qzu5AoappmivdevW046a nXZPDMQXnHcutpWfpa8cJjthUD4xYRvhlnR2ENydswRPF7ir64eXfl8uPv9cGBxa4gnLQejX3Wtp yOJoGAS4LbUxJohnn3GK/Art8NtnnKaHSvOJFfVbhIX7H+/8K3AuhH5Xyw3XXoX2cAWMi030Hstp NNCEkwkaGe994GGZhIH6qsu+LzejXj+9/se6eLgDB2pzAsknF0cNPlyfcvSHMeBiGGG5GHMtytcJ 9TGnUwxWFG7Iu+/JI0/9S4484lC57Wc/kVtu+okcdvBBuK6PybsfDtPJ7Euv/lsnCWederLcdtMN uEev1/v5b/c8oIOhvo7kxKnONFYsRxvsjidj12DS9+0zTtV+58TjjwGWbaCXu2+JCSeEzTERUYfr z0n3vrjPKaMX2uE1MF7c/vNb5chBh8iruLY0CDCfOTZ/xgfjXXNOXGgQuuDcs3GtvoOnPR1h7MSC EZPZCzA5vQlt8mK0Jxow+KUL2+WFjkSfgn0f5xf8769uk1sxES+qV6QHHc7DhECdx4sNhHfcizDG cXJ97tlnynVX/1AntwvRTz0BLPlyGNnJZ77K8DROCrahX+HODj715v30M+jGHVN8msyDVe/429/V yHgrrsfNP70W9Tkbhwe/i0Ojn1ND9QA8deWuLz7R5ST7KhgTbrzhGtxDNeTt9z+AMWI/rS8ns0tw LT7El1646KJR8u57cQg0JrBXXnoJDFs/0vvrjTdpKB4h38UCvg+MxXy99Ej0H9x2zt1DfFI5Zep0 mT9vgb6eyQl1U7T1Ky+9GE+Im2LxgIUexgnuarkQuv7qtp8JDYTvffCxzMOEmGVzksidOOede6bc iPpegn6XT/Q+xSSM4wwnoZyM0fh/FK7ndy9EO4bRy3VxlduxIgyQ62JySiNug3oNsK2ei9/U6TWA PBpSNhVvgWH1UL33DsCkmzsD78QB3M3QR9CQciPuK55t9MiTz+jDiKR9QBzlME5D43I8Xbz4/HMU 3wtwdtoUPM0eO2GC3pOcgNNwVxf9FCegRx95pN4vvA9Wrlwp7+GeIhbOWaNiG3YH+I8dNwGGxv64 x6/GWHe17n4ainuUux1ca/K/UIj95YC991ZDD59Gs7ERx9fRLhdjgn3FZd9DP/kT3DtHkFkXVQcd MBB6FsoJ6HcvvvB8Pbcs7QMrY0wNqS8NQKvXrtb7S79eygqgD+QuhhdeeVW7Lm3HaKt779kX43kB ru08ufPue7F7qbveIxxTubPiwUce0ye0NPQ/8tQ/1dh4PQysP732x2pMv//hx9WYG+Lk2gCriAn9 W/OlXot6svt5e0oRjBtzh8yFMrxCvEY1ZdnoZfLJb0ZKs92bgmcPGAoayeT7J8mmJZsBNHbK4Dou fH+hjPvTOLzq1EZ5ahfVhsFnAgw6WyEDhly0o0//OFpmPD1D2h2EMfHMXlKO3TEfXv+hrJywAlXH XAf9xti7xsqMf06X9gd2kF4wInGXzrCbhsmmhZugDF6TqFdLOgzqIF2P76pfIFvy0VI1ZtjDCBo6 y0vKZeK9E/QgZxp32gxsI1MemqqGLBqJaFxo2rupdDysg+6QKYTMTod3kA5HdJTWA1pr2+G916AN jJ/HdtWyNi3eJGsmr3Z6KjLADvVaMmyxDP/ZR7qDqNdZvaX1Pi1l0r2TZcqDkwguuyZZPWU1DGQw 4MD41fnoLtLuwHby2ZPTZPo/sfMi6XqBdzLJYStxzuYVAcWSvO+uk45NkNUOr5p1O6671o+Gve2b +aoPsOXACsfrOeXhyTLzhVnS5fhuMMLtpteIBh++psM5YBEMPh0P6yTNd2+GKtSQdoe0k47Apv1B 7aWwfm23BEGxI3+LHXHjV0qvs7Bj4aTusnrCKpnxwkwUgrJShbFTpI2eF7QGu9yIf+i4c5QPi/gw jNefuNNxXDv0wANhnCnFruXm6OPOkl/+z01y/HHfUuM0dxiy3bnaIwMCvH8p6xj0EXxgegj67Ivx 8IevIXEHHwrQ11cGHXYQxoDrcF7jVfrV4bfefk/vcxogPhoxWnrh/uKc8lbMndtihzMNFZu3bMUc s7YcddRhuuOpPfrli877ts5h+PCKu1QNY+76GXTYodKwfgM1enPR2717VzkY+nDn1bHHsK84D/Oy w9RgohUGYDQY0VjOucNW7Fpv3rwFHiSfLr+4+Ubd1fTm0PfwqjvOW8J8/RY8bG2BfpbjN3eTEgsu 3PkA+vCDD9Q5zY3XXa1z2qHvfKCGdO6WPwxpxdjF0RG7RH9wyYVy+y9vhSHsBBmOserZ51/CvVGh D1zYJ9M4djMwOArjFufGvKaGN33XuxF7hHBdaSBjP9kJsn905Q/kIvTp7D8ff/pf+rEAPkjk2H7F Zd+FnhOw++cDufSSi3UnNV9v4iu4bH+cL3M3MM9/5JsSfPDVC/OYmzAec67avkM7xc10IX7Uu0e3 LmhHBziMjz5SMf7WUYN0vfEwDBYHHbS/zsdu+9kNGEuPkAdBe+vt95Pxw+Rxnsi3H7iemABD21VX fl/15jyaX0/eCAPK1M+m40Mn90mfHj10TOBc79yzTpeXX3sTRv6XqRIMnAOkBwxMK7CDe+HSJfog +seYV3THjtnBkFUH7YQPPxvj4QN1Ovus07CjeT0eYN+tO++uueoyjOtXY91xsDz5zHP6IR7OeV/D vI3jjpuTf0/nDa3R7jlmb8H8pS12kV5y0QXym1/eBqPOaTCQfaoPwbg2eeKf/0Kd38Oc/RyMo9fq WModw/ygA3djsx2xjXA3NPl5TW647irod70afV/DwyH2U7xvn/znc/ImHmrQUHoL1g8c749C2+XY Vob1CR9e8cEOz/xTQzUw4djVH8ZAfjGP6d+74Hz59S9+JkcccpDuBluGeRF14Fsg9z7wiI6PnFPd fMN1mAu10p1Uxw4+CjvNMX7oGO5m5Qq4/bAftQHOaF+bb63ICszG2VZdHwcO9pJk4J+FreekbzTj Md94GDeXL2w0k2O82XhIt3A+v6p8+Xjz0nZlRxEFZAu0ChFBpvEv68iTpVfFm81rcSsnlEMaRy/z yWtlhTTSQ6cygouONJBMMnN6R5I1Z3ac3HY3DhNkGoh4Dgi3NTZv0VQt/VyANcfrWfYeaDJ38LIo h+/sHoGBiE9K6Pr06Snvf/CRbs/jxOT875wla9egQ9u0WZ/Us0Mvw9kb7ETo2Kk3xJPvyZM/k0/x 9KRDh7Zq2KgHAwDl85WpPXbvrVsByc+O6g50Xhs2YbIGF4LDOD9Z36QJPwFaE088MDGDNZ2GlG7d OsvPb/4pLPqtdFvkKmxfrIeF0kYsWjmoEwsbZBo2aKTGC241PffbZ2hnNmL0aDnx+G85TBVXbA9F vjewwKOBpAivbnykX6sp0FdEaNnmqzbuM+VQjOLBz0lHqxY4mEc1p8ZYDKGufCL77gfDsZisJWed drLwFb5054Lj4yDfCR0aO0q+NsdXoFavWa27nzZjlwQHKMzvVTRVNGz4NJyvRfDpDA8+5ATmAwzG e2Axyq3If8DXMGph8s/BYhieUPOJKl9NmYSnYFuw44tbc6ljR+ymuRzGIbdFlu8nY7EEazqfSo3F bqSOGEwn46k9t4lyIcnyddLs2x8x7ty5oy6Q6hc1cEYmdFQ7cB4IF//rN20EZht1ksEJPV9/4BZl Ok4w+RR/Ip5w0BDQuXMHufTiC2EEqIen6e1U58bAzO1QcO8dE+8EBTRenZ8CmDKUyU/Mc+F/JQw0 XHgTW56N0rVrF3/2CrPiDJsGDXQw5SybO5lohKQ79JD99UkXn4LQDfsIxs+Fi+V/cL4R9dEzczDI aLvyV0KbmOqE+mCyswCGN+px8onHYlt0P9WBGJ960nHy01t+qV9uoEGqS8eOKKEGJmNNsW23ixqt uPPN1Y0YI+gdy2CZPJflTewEa4p74dQTMTktLJTauF6nQPYTmCy9hbQjDz8M/nvSsVN7GNuOZBE6 KToNRtln8QXEoe+8K4ccfIBKpsyS0jJ5482heLIyRG5BGyQWxI3Fd4DeRUX/H3vvAbBXUeX/TyCF 9N4LSd4UAgm99yJIkV5UcLEAgiiKuCu2/elasPPT3XVXsaEovXckhCYtCS0JIQnpvfeeEP7fzzn3 3Gee530DwfXPsvt7J3mfe+/MmTNnzvQzZ87sIhVdHSHQNwIm6hYTVcoBv65duxgck3COShJO2Kc0 kWACzO7RJ7XANQdShVHuTH6xI4RNnLq6/tZGiHeIJg4INLginfbG8SYm4aiUhyNdbDu0U92ABxyX Ok2T9Wt++BPr94YN01FFgJU/tErQcHzo0ZHWnyHIw54W7QGB18zZc7SLp6Ohais2/kci8RTNIkvl oWMRbVtL8DJHu9BPSTi2b7pUO5ZMghC+ohV4trRI0MSBfxhw5sjkSPHgIglQqD+o1iPIYbd1wID+ iWMBAwb0lfr3xnSk1MWxXcQxQm7PwVgqDmHqC2qHTJDQCJwqIQ7HONkVQ2iDnagjDjlIN2k9aZNL yox6i8bls9qtfm7MGBMkjR491rQD0cQxp8yy+EDIhzYm7nDR9SfVIwQ0OHbgMMSMRhFChLXiI30K WnU4jiZ01+SKmoCh94EDBrxtPSYOZUyZUedbqm4ZcwkoHCriaML+6td+8yaCVgRb1NXnx4zVjuKc dOopJ9nGAuWCoOdNtYu5mijvK6ErVjmE1P7T1x537JHicz9r89QnFj0IfhH446z+DRxothF6qx9n gky9IW+Mk8uXe19gwF6rrE2x09hTC1Q2StACmimNPehmM4NjIDZuQwrOKqNFUz3Ajpur+Id/q11a afK7WUK6pySoOtqOiyN4R4uKo7egQVONI4vkqTIncMTWVxRp8ACesXjtmvWph8onBDjwHn63a93W dqcfU3oHShvj0xd/3Orx9X+6UeO670gzroConbQC0BhDA+MhLQBaqL612KW5NJyeFx/Vhrp1ShMl kETFv5XqpCUODUqKdr553SYzCo3dm1adWqdeR/ZKsx+dkzbqqFlzHTGjXDcu1Xggunoc3DP12rtH 6nlIjzT/iJ5+9Ex9YhOV17qF69JOzXeSEKSnjoN1Sd326SqNE13QUfTHaxU+9e5pad8r9kkHf+Vg Y22vI3qnm4+4KU2Tdk/fg/vZMabp901Pwy7cPR0srR462d5H905jfzI2bZIWDpGat26Whp03zOha v3ydhDdLrC+GTup5E9GJ7ZWBpw1M7fq0Sx0HSOtEZTL/eV3X/tcFWvyoD5f2b99j+qb+x/ZPq6Vd wzGrvaUJYxtlYFF8yqKdtItGDPS6Pen219XBFhWGh2ijLUy+bbJpDh31/SN1lE6XgGjes3aBjsX/ +fW035cO0DE97MTpyKdsMR76jUNFU3sbp7iVbMELC4xmYTN8zCOsDpiHfiyd8lF4GBsCohIo3mBX aKCEP9A166+z0msSTgV0QbnFWz1nTWrZXcc4D+2ZWndunbpIILRy2krxSfzTONFxt06p6+46Kt9+ Qppy69Q0/KLhqWUHjKwjvBZ/xBvmPWt13K5dXbvUaz8dy9Mxwk67dUxbdFxwm7SQRASZsfQ4ksMx yTXSUDdX5It3cDGWDNDiGWGoZyhpvtMu7ap+AQxsHHI0CoeR7N/qptzo4/J8gYt+F21lXFdpklif pzpKn4+WX9cuncxuEbBoMTLnQsMT165dW202fdYWqhzJWqM+qJmEQxs0f9uyFVug2mzr1Vtzv+Y2 BwI3bZc2Dz7Llp6MVXUD+tvRYueA8qM8dlff3kT/+og+tJNr+wpFNTjigmtPHV9m0wJHP/CM5omH HXSgacjih0BlvLRN6OuwB0cfz4ZfR81Z0Nph3rlLy+YScum4o2iEp4xpaPNwHJj+Cro/dv5HtOn5 lARwz0pj5DPWT2zYtDmNVP9z3NFHmSZwO8WNeQdpVzkRi/baY9pQufn2O9JVV1xuGwSkydGkv0jL BY3s5bLn9rTGPupOJ5mnmDZzhvVVJx5/jGnMo8nVX9ovHBFfq7pywvHHmcCGS1EmT5miDfAXRH// dPnFFxmfoD0c7340yfvjXhrP4TE0Y9oDkwhnnn6KhH1qj/p32sknpj/86SZpsY1Mp2uuxpwp+m00 z5h3oHl1puYtaPww92O9xvxp6JC69G+6IZRjYWdqTsFYRDrMAdjEZQPqY9KEYl7ZRcI+jphfrPkW 2vrQydoFkyAc2R6sMrz4kxfavIM+DK1ojoUdcdghdqsuNHGkn3kSm1G0A44gvzJufHpRGjb9dVHM xZqTd9EGNEe2mecN1/wKARVpYfcWzXPmHHM/9tE0cuSTaXet7Y5WXmAfczmOhKK1O+rJp23TnzrS rk17OxZHnhnD0ablaDnrK/qAxRJ+3Xv/QxJ+HmTaqpQ19NPfIzBlc4/ywIA8WoPRrmlvjJUClRBp Pzv+TxkepLkMGyRri7nN8hUrdJxtlZU3AlpKuoeOnb/51itpmNa73aQcETYSrbHEIAugkIO/UjtI 4T1yZBVXJl7QArONUAuNn4AiFouL3BGWhweC3D/giR+w4ccz/CJu+MU3zxyG8NzlcLl/bXq13zls 1fu7ERQFYYGARMLl7+HHM/eP98AT3/HM49W+5zDxzhNcGqZLl4fhGd/13tUY8zBfzFT5lDjtBWkp R47oADZLqsriEewMOi9Lxf350S9pEftBH2wtBsgiq44LHxoJC2OODLEY0fBtcNRHBDeo/d0mFVw6 JDoYDHYyOcQNVEfwkXPOtCMl3/7+j02ae5oWswx6Vp8FE7dDkDb+0E3HU7oqsuSvDgoHTUzMGIwQ ArCQeWH0GKkEazdOuFhM54wOzjIJwSF5RqjCYLd0id+45AE+90CQgd0JbIyg5oiKI0XAAEMHVLHF ADKLaT8heAsfbuRA/ZRjSxw7OfnEE2wREOH5k46yk2xBjNXu9MJFC0Wyqxdbh6RE1D3ql8ScKbxj I+SDknyjOk2Hzm4S10de+dlLTTC4SFoJrbXjhB0eBgHispPFud3mWqgx8GBYl0UOfISvTE4pg8O1 M8JRNuxjoDL9sBbZh2oCwS4A8YyMIgNgZmAyJ97yzq6dSlWdbVfTqrrlxbtMawkNK8o5HNL/8849 QzsYf0nfvkb1RIPGaR86Sdlm94vy0oAgeqy8Vf7OA2KTqjvqHPWH43jsZqxYvUqDrQxsKj554Y9B BleJhbDS60OlHipcE+Bm4o2yYW7K1Kmpg2xFIQywukkRCJ85e4CfL8cMHXMXzLfz2wgkcUEzi1CO xsyareMVckET+bPvSNS+8HOctH7SZnK+XgKbJYuXSMOvu01kaOOEsaBEO2fB4kVmU4xjgNj8QhAD zLYmukFEAz3nrmfNmWfGE23QhV4tsG+4abr47LehwWvLqyiAxoK8kndGt8izKmW0qvzFS74RjOKo I9gH6Nq5q53Zx1Ck77jCD8XVj+MWo/XORBTe8c5ks7kmLuxKkQ+E3M4LYuKKCbPSg3dBa536HPoq 6kHpFAW8LOARVqK9xPFb6ihtjEkxvKOuyGSjqr8iRDJCQgmQf9VAaSztoj7tbGlX/DH9639cZwI1 JobYvUJdva0m6j00Uae8+YcwhD4D7bQloomJJWUBTueT29jgSOM67SajYQL9HKWgHka+0Oh5iz5P NE98fYomlM7jM6XdN3yYC3jQVkIIP0b9B8Ydp8+YoR3fK60fe14CIoSKr0x4LV0u7cZw1lcrb1EP 8cdOFIt7C9M3i48WTZunRx573ARXHP2tGY6s7OGUtyOET0XjsYRgJjnGxdMZHPUIf/4ZhB6k/9wL Y3Uc65XEBQFMwIGl36D/aNG8heqU7G9J2wkeUV/P16S5l9oE/C0LULgIx8bOzk3nmoB1lfoGhIYI /Up61K9Y36dMU5/QBPK6qFv21F4p+1pn/BEKJv9o7KK1NG/+E9YGNuiYJHyDDuBIyUZw6NE73xWB sPPitFNPlGr8dLN7wmLm1JOOl1D+aEEKln4MKqwt6ml9LVjCBdb4VhokrHgIAsmLQwuLvFu22sV2 ln8tLaBf/Oev01Mj9jDjt2iDztSY3kpHghctWaqF1HrjH33IBR852zQlFuoID3ZPsMFCHaXchg4a ZH+0bxYRlrSRolCV5TLdcrZ04jJpjfRMs0fNTDu32FmaOMtNC6bP4b2Nxu77d089D+yRRv9gdOqx bw8dm5I2jjRMWutYmFAaDNo5k4d0TM/8n2dTj326p07DOqU+8mvRSUJr/du8fLNptyCIgmNoxLbt 2zZ1rOuY1kx3oeCGVRtkA2lz6nlQT1HoR+wJP/qnR9sxTBfg0B8hOG5uR60oVBMRwTw5fslDpyGd dUX8XBOCkf6GZToepYJGawZbQaTfpBl9o+IorkzwmtFnqwuOygRGW8UwtHDekj0e/lkKelia+l4x Rcdp9u1m9oswEEsb7S2+Tb75jbR5zSYJilRHVdad9+hsRrEdZufUfkAH3WKm4+DStjWcengWKnUn LysBWeUkNCB4Ftk2P97RAtAgaUfdHBBKw/l4jQbQc99amp78pydTt726pc7DO6d+h/fzY4RCwi1n 2yRMQ+BDGhybM40ZCrtA1rTZThLo7ZbG/2Z8euobT0r7qHPquk+31PcQHV9TvbJxsyCUOm5R1Ubq OxCK/yoXE/JFAqRbwMeTuGyGsLEnlm7XxZzBbmsTFG3TnfImQqy85QeNzCf4xjEmIKhnA47NJPyx JUp+cMYLcMmfvgy6gPG5a5FZoFSJsKWjEIsXP95X+HhMvIb6Cvyhny4w5kDEZz6J8I1NXGCYH7Bh zLt+jL/MU5k3v/zyOG38aZ4qGDY5UufKjDt4afNE4eWJBnZfzclGq2/btGWLHUOaPmOmzFfcYiYh 2KxFI7XWee50ZE5lgj2eG6Sdu37dRs3Heht/KHeO9a/X4h/h/0QJgNigxB0vjW3mSZQ7muzcQPmI tPw/pL4VzSk0UTmiBX0f/fC52kS7UxtN19pxsbMknLF5KiyvZrHqKb2LvGnYcmu0mYv2K8fP2CSy PkT+aCyxkbBg8UKjr6XGinDwbbnMgazQvGSANr4pecqEzdshgwfZXIBj6B06ymaONitYs1AOzZu1 sCN3T8v2HLYFqUvwm3GIy0moJ2jaqGu2cYy62JH5lMYx8kkZs9nEE0Eo9kvBjfYOR/axz1fXv386 V2u3ByVQ+pdrfminRTB/AY2MjV5vPO/gRPi5qzYl2dCapXnQGgkN+/Tez9JEWw+6mRd10gmSmTPn WHm4RrvahzjJaQbow7WQkA0Hf7ArxGbObkMH2bfVQ8IUx26tKwrGNe3UEiirwoXWIPSFQ/ObjVzq Mg6BLlp42NfEJhewaBGyccwaL4/rSRUVoUin+Ar078nTqmNGhr/SPxCSMcCpCU/A+LPoHlQwz/3C P56A5O98F6nW8w+4eEY6xMHFd/70EP+l44hJGzhyxzdhgTsP2+77jgqKgqAcEX64nJCG4Byqkrno /QI2njmeiFP7BJZMgiPiAZO/Bx78wgVTyjA1mjzcS8x8+An0Hp0GxsLqkZGj0gePOzpdJEkyAw5S 2KmyjfGZL3xJ0neFnYDqbCF8sIYTyToeMFuDLFjGgAREE0nCOXPNjveUN6aaZs5hEiogmHpaRyVy Dn/0w2fbbsX9Dz+SbpEdiylTp6Wf//QHhfSXdIps6WEDntHhfkZNERyQfPrkyV6EZ2c72/zTn/2H dpJHmKFuNFsw4Fm1WAk89HByfG7cxMJsk2lDmCc/Fq5Q/WdqiJFV7Pl0VOe/TQIVFupGgTpj8MM9 p4jIikY899K7jnRo9+X/SKX3sVFPaMdhpGk7sAN7+qknm1FYeAU45TBau7ff//G1ZveDKyBZ5L8o WxfW4QFnyP1pJa6IlOsB0mpg1+rxp562IwWtNcnHsLUN1hr0MUx90cc/ZoMWuyy2aBA+3n3hoXdw CT/TfsphJ9VaNB8+IK0ijtpwln2aNBc++tVzLJ/2A+FF/p0nfAtxkSd2OJHW/0S2gmaqw0eD6zBp K4x68q8SVI71qBajid1UwhEedjpulFCNs/HX/vC7XrOVji1zKBub1RaTdn1a8kYzrwjOmuuM+wmm TopK7ze//mUfPA1QiJRHJ1u/VpZ6RJlDvjkgfCDic8tm3dygAYTjGhZb8DbYkD5/+jFS7Mew+86N 8s9tfrnbJHVZBHP5YOjhHq/6XQgLb7Jt6AWAIAENiE1bNtktHbzjmAxt1IDL7VLsaKEtg10i6gFl jsNYH7fq7SJtgBAGMJFAfR31aY6PYD8B1W3sBvl0CLYVrQ4i+DMnP+pkuILcCIavG9TGOArIQtqM DzoHM76BwyM6F5n8bzPbYDfddmc6+YTjZc/rVPH/zXS/jNh7D0SC0CNXpB9p+lXFGO3uRGgB5TRy TIiK3k/Cu8995uJi4qW6VfCGtuRVQdggqcAdoxT4mFSzQ4XwB7sBHO3l2Ou//+yHLszQ4pJJcPTW 4KAvZoKCoN1d8AyqPdeRD0sYHile5Ik4LMBpnxg3RtWehSAA8BhY6icajWgvocH5l8cfFw+6mpYV k2HsP42SNmgzHV/CsDt1IibBlmcnzH/LtB33nTrC+Oebb08nHn9cOltHdxUsoe4jZd3Mo5bSEPPM 8lm8eo4JjNzFUwDZK/0SO9FobT6gfvPA/fbTeHWcYWUBzu7haSefJG29PS3vJgQ3Xkggqrjh/Kjp VrPFwM4ki5FzzjpdZbLB81AC8uIEQKr3CcoizMlIA8LCiyf9NrYevvuDH9kiBC1BjJdyoYAL3QVY uKgT5XfxQklT5xEqf+vrX0mPjnpcE/RH03e+f63aufqzkz5Y0gDvKxTEO0+nM8KgU9XZ7Dm0lxCU yTYLSDvaISRovKANx6UEDz0y0v6wtfWL//sjE4zRp5x79umpbgAaCdIsVD5pv6vAozaAYVvmFW0k wLO5hcJhlW0OOJHOTr2T5twnZuv7LWnmLJPQQ1olm9TWJASYNXKWBB7SPhTO9tKqOfpnx6Tp909P S8YtThNvWpBev2liOv66E1K3EdJYEwx2aY79N2BmpGUTlqU5T+uChVumpBN+d0LqpPiMubQoFu/8 s7oNa+Cbd4EK9RdfeHtZs3u9bb3itoFzbGJQ6NEjEV/Y+LZ+0Pm4cs7K9Ohlj8owtYQ2h/UyI91N 9b5tAzQQHzT2phd/N9qMKAjKiDIA/SiOwfAK3WAKfhYxPFOiR30Z2rnMMI1Sodu5RTGfM1jCHU/Z IRXY6XJLEvUqb0vH8TjvLB38RUjMc0wwY3QbpKMlG4ZCL2KtCUlUVgN1nK55G22KqIyXT1yRpj0w Nc16eGY67j8/II0tLQpVVuEQzvsRcvgFQv70rm5uz4tl80k3ws15cm5aOHpxmnTr5LSbbls7+JuH Wv6DPRx75kZdhPXmQGF4ioJ3lPKBdhhQcf5V8QsKKnwDlnBDWomIb3hRYDQ6K98AiUAA3W/69Bnp W9/9oeYAzW1hjhHrZRIWvCTBi4EovsfiKUr1DcpSOG/vngsDpDDtv37knB/CIH/Pp/tXaOdb8UvC KzRGyuCJWE4MMKoHaucvaSPiez+61uzwnKWxmWPnXF7ix2yJiStoKdIgD2yMYDiYTaCmwoNx5H8p +jvG0u9c8xPbADhR/Xy+QAcT+aC9cjSYo/D/ed1v7SbHr1/9j4YPIStteMiQuvR5HUdDkGn1FsbJ 0b8i3Dr+A0fbWIYWz6Qpk80UAwI6+kZuoRymvLBWeXjkKLus41+1VsFGldVJZ4Hh46fCNebv3Fqn ix2kvWm0F+kyzqKFz21+9KGUSe4YyxBILpNmC+2ccSzma/CMS4e2SIuKjW9KnHDywsZ8c/XHCB1x YKXcaZ9eM/Rh5e+h5q944ejLof8kbTJj15KNcbFBdcJbOkfiLrzgPLNfdb80zW+85Xabk/9MdpNs rCWVIivQSdlzQqFdmzZ2OgBtKYyck6eoheSBa+y5CIg4RbU12oMuL2f/oq5xKx842ETDEc+d0xlt AuEvIWWVBkgfXkYRx3nkhOOH5l/X9NlLLzYzET//xS/tNAcaxNjw5MQBYxs4KhhAjDNKC/zu8978 apxS2tEfe/6cQsuRZ8tIKea1BDqYExjvHqk+0QGfYSqBgg2ViuRBDcEGnjJyzUuePu84Oup4N4/i O9INv3d8Fj3+O8LVEs53/DUUOQgJIhvKRG28gM39Aw9+kV74xTOPx3t8Rzhxw493c2oseXh461mf tyyIMJA6fdYsdYzHWuVHFY+zxhgrQ8V2tLROZkr6G4ukIhU9Ihl/kmxJDO/yZtEzfcZsm2izaPqI zsyiyWALJGEI+Ne08/2XkY+bzZ1vff1qM6A2VjvEGJujY8epfbujA+BdD0+5wFN0DBZksBpwtEja yA6GHF0BBrqXLV9mqpWoFqJCaTtHJSbBGVLSUAz9cc4Zo2U8D5K6rSPzcCZeSLc5aoeRtpc1MDLI MZHhukjOaLP4o8Oke4osgINkIi3ydocMydGJofb5lX/8vB3x4dy0dXhGE3F8AGbRid0e7I0cdthB JtF+U4OEl0EBXKRBWiTGxJzbBA7TMaJnnx9tapVHHn6oCYXYhd9NKqfTpk6TodoJGsB8AYXWArfZ +eADngK36LXJmp7wlTLChgzaC7+67nrTqAEfA1k4uix3RAYPkX1wYCGKNtWD0khiN4dzzBwPtHRh UtGrj5/4mo40Pp2Ok42Qb3/za1rA7GP2T5j42Y61dh1REbbBH6aa+ELxeS2dykEThU4Sip2n+nju 2Wekx2Wj6q57H1C+ffHgPCdeRqviUx98mAlk5IM/d6j5rtBAPkZaeKgBIyBcp5scWGwFlMUn6/Jh ocoCi50qDARiKBcBI3wfP2Gi2pwW67u7qndkoTb9+s3daUS4h9o7k7P58xbKqONMI5K8zVB75+z1 7kOHmOo6N7Dgh50aH9y59W+61LRXpL1HDLcdJbAyGHbv3kWG6s8321N3i2eoDkMbdRPXvHlTs6vD kRQmZNjMYdcx55NF0A/8xPEcM/YV2+2jTJnUFEEWbjD6QV6HQMmuZlc+EELfpnbD7hi2sjBMyq4o kx3akjl7OIWky9tKCSUxRomh5xHSqHHnbRS+ddTRqf4SInPEcar4IC9z5IXb3sCPEUiElEyUfFJS cEBsoK9cu2ZNuum22w0PBroRwMLj2bPnWb/KkTbsCpgQWRljATBJKt6oU3eXGnOFJr2VsxoyEDUJ iOC65wufgQP6m+r5M7L3tWTpUrys3FDRXiztMhztnWNiU6dPM+08P8bWVBPBg8TfTUY3E2m/WSfG eu+/qAfheKM+Ikikzt5+x70SCLRWWXxcfeJQlaGEMca8ShyqCf7sJHp7Iky4q/IFYk8pirHMocDL elOkz41ul18ig53i2y9+/TuNObOsTIYNGWrH7v6qY08c74Jz1EV2ldEY835InnJ0SdyKgm0qbrn8 9Kc+bvZ2aLsmKKgQ4hFERzEy+bd+s1xaMcGb4Bd14tHHRqnOzDJ7DEcdeZjvRGqMMtQigPj2lxdx 4LX0vA3edvs9Jtz99EWfkM2Iz9tGxkvS/jUnPNbv6LY7+Eof6A78FcTRH0ea3NTGBRHUGSbu1Cxo 5ogYhvzZYf/iFZenS8SX2dIkQvOUG/NWrlipjZ+xZmsNjmzVOMSYQUpDhw5Wvz49jZMGlY0p8qSe cCxto8ZHbzcFdYQp3WkS7Ox6TL90+DWHp4O/cbA9dz1214RxZrR7qGsrJi8zjZx9P7O3rpE/KR3+ L4emJS/qRizZwLFFlniwRHZ4tq5/Mx1w1YHpxD+cqGNX+0mAMCctGgttOnqlW8CatWmWFr6g9rxO 9VSFsGr6qoTtnw6DXIDQvF1zM5i8+MVFacsaLUTUX6+avjK9+O9jzci1pSVsaPfYJg2sVj3m+00J +XlnbFwmDaklspdz0FcOSEd9V4b/PzFCR610i5vGWfiPo57AM47Lbd6gG90WrbXjM+DysvKSMk0i jeXWdpSepS0YOinGjnYD2kr7aondoobfltXSeB6tW356trQbxzwdUsJ56pS11UF9Woj9FBTJD6io x8Ty2AWw8rh1o45R6fa5rRu3qAx1NfWm2JkXpGjkxjf4SyMzwRzBYg/l/5ba10LxF5tUh3/r8HTy DSemIecMTVNue0M3pq3SMUJSMwpNYEh+18zXLZTSKnpLxsWbyMg+eLjpbYHy2WXvrumYa49OJ11/ Quoh7aTXb5ykG/KkvaV6E3ngAgSO9aO54hknV7RmcionfP6qb2NM4e0P/RZw5TdezhVo9fD4Bsjx cBmLlVvwgmeBKm+b4cdxTey7nSuBNUIRFqRs6JAG0cBlqegHgTbzJfrb6B9JOajhJTRggw/wDWEC cyb3q99XFJwHVUmrvRZ0WwpGhEEIj3+Amw1ojpx96sILzC5iaF4Q5pSBEkQQ5/EJmSjbNNy0htFx 4tx6x90mLLv04k/qKN4VpnHDJQCOx+OVv0KAxgsa0dgXPENH6B+S3Z97H3zITj1gc6mXjp1xVBYb dubER47Lz5c9I4SXCPWP1RE3nhxp5kQEx6cImzl9ZrrngQfTwQfvb/YcTznpBNMQxWC3bagIYVkV DLmW6po3rVF/TLlgJoGbcjH8jWaK9bNqt5xG4OIcNg84RqweyWkTBPMuNPbZdGIsm6NjiL5xqz5r tW4VVL/EkUDmHNzSaswUj+nLp0x9I9UNHmhHGguEzmvxyVsEL3BdTvS5gyr3Y/5IGWFAfKU0bHGY bUDrmfkqRrAff/wZHffSnFw2u7jRjhMRCPo0gBh81EcwTpnyhmicIri9Esc7OTo3RXN/tKzoTxm7 Jiqc21oxa2CbdiLLKeO3oFU+8YaWUB9pYHMckUsyFi5abDxjvsYmP3FC2Ollo5yXcypwe26DDRBt KYkfnq6nRBscXDfA5sVsqmF/9KAD9i3ZBhaDN3CPCYYKpWB+r5yoEQmk7ZSQrufD6Kl4BkEEOoD7 5O+10Pl3/h64eDbkH348wR/PeCderWsoLPAAG+HxjPh8v6PbUY2iQBaJBAHZqGFpBVyEBwH406KL raXw3qFnLS6+vWV59EiTL975AyaPl8MoSITsvHMebn4WxbALvKj8LAix48GNJhj3ZaJYSue14EbQ gQ2Yv0rzh6M+53+krUlVwWU7ZsKMIIRzx0ySps+aKaOh7e0MMPYymARNV6dKA+VKTAYMbnDZJK2L 8dqRJDvcYLZuj/VSb5yVbrrlDjOQR2fLhAeVSgRNr0+ZYY2em5m4npejT3SqdD4L1CHQwTCxzzsj Oj7skXCtLzescc6UYyTcBAHcC2PGSJVS1yJO1bWdss2AOihXP3JFJ9xlscl13CxYZ8+dY7fpHHPU ETpidbAdqeDoHBOfOQvnG00nn3CCGR389R/+rMF6qx2h4kjLq+PG23nqvn1amyo5uCkwbsKgE0eg MUvp9JQa6n3anVDGzagc5YJ2D7cAVDsvWmyfMPHBnhOG2liAcs1jMy3Suca0b99eyod3fhaDPCnx 5hI8YADvzrvvT0sXL0/HHXOE5RV+M+A9p8Xzdb+TrQ/xBIEhtwpwFfv5Hz7XtGTWq/OnfFjscFwL +xrwE2Ebg9/uQ4dpAH4xfVY7NWjslGd2lQngoBlBGvY5WIygzjpz9mzZ3+lnOyIY0eNqea7qRsA2 8XUZ11T9YUDHLsr0abPs1qS99hwufKrr1BMJpDhGQ93FftGkyVNlZ2Vsai8bUwMG9rOjEcAyqQAG FdW1smPDgpGJwQUfPls7dK/azQcDNRAPGlRnt25wJf1S2QqgrKhLxGPAxmAt9ZsjFnNUD9ntZGHE Qp+F9h1332eG/tDSwcghi9Z1mohxA8giHfXq3KmzFSn1gEkdhrQxBn3HPfebIUhudOLWB+yPHHOU 39LBoEv7YVK3ZLEWRAsWFnZLxNOiB4C3tA9oYWFLvV21epgdE2FShdYNRqAZtm674x674epU2UVq qfPqZ53+ofTDn/5c/nfpKN8pxvs77rnPbD0hQKYcMWK+UYs87CcgDMOO0KuyX3Xd76+XALKLVH6H mCo1wjKEyzfK4OP+0uJYI9pXrlop4URr4xcGjSGaspsqQUt79Q0s3Lk+mLinnXKi8bms9yo7BnUm DJQvwhVuZ2Kyx0S/k476cZX8sy/oOledb39h9ItwNi0SL8DbtSv8xraSbgNSe6fc2NXEKCQ3TaG+ zcSCK1pp9/Rj3Pp3pjRifvKzf0//oR1J7DUxwaPfmStBzyUXfzw99NBjsif2hGwrfUzGzw/zhSFE U9dUFuxs3XzLnWoTu5mwCOEWdoe4faynntwWeJ80V7g1BoEVNt3Q5rjg0nPMCPsi+jbVPSaEc9RP cmSNyeWatavt1kYmi5zdR1jFInylyoQbROAvhs4fefQx1embzJYR9WHChEkq6xbWlmk8Bx+wn93k slQ8OkTaexA+TAt7DH++JtjLL7lIxbSTuqRtRhfH5VQMad7cBS50Ub0jPWVVbWOuTXApi/kaE56V AVZ2V0drkUM/ya0x5IWjpWiWsEv5/AtjTTOGK3Cx3VBVj9V3zlUdp8+Yp6OO9JXER/hKXNoHBqrn ccxOeaP/wzYBttP++V++p5tNbjCD72x0HHLQQaYl1Um7xNjQ4CgZR3a5+YfjtyEUJ/8IRtqrTiFU e0Z1DFsUz0n7lf6D41WMdRw95PIFBH2rNFHGGD428OABWoHYWIM+bpnxKVrRQMXh1q3dRhb21VgA cTRuxcoV0shraZN/jh7MlJ8ZlhYP5utYKjvQy5YuN6H7TKXBLua9Dz1ktjSOOuKwtEpjHMeQqce4 tjrqhSYPxw1aqz9tK2Fxf11/bf2vQfgP3850PfVO/4jGArYjEALtOWIPA8Qo+83qOxD61PXvb30D 9sIwao69qT2H766+5Q4bC7DtxG2CLMIYTzjCSDn/6rfXS2C+3jaiWFChWYex8JbSRFXq3mbUvu2I 2StLpS10tOzM6JiZhC0cUR90+qA06rOj7NavXvv3SgvHLEyjrx2T9r5079RlWBfFWyVcLVPLbrJ5 JIy0vzlPzEmv/eG1tM/n9tWxqnZprYxPt+3e1gQSLMK4nr7f8bI/crNs+ujIWStdpT7tgWkm2Nn1 g/2tr23dpbUZe37jzmmp3a4ddKNZyzTtwWlp/lNzZTB5qKWzVQKkhWMWmeBjxRsrJJzanOZKo6WZ bAF1Hto5ddBRtVaiC6PccyXIQlt71YyVJjhqJRtC9E04r/9NUufdOksgtiW9qlvAuu7TPe3SQbZ7 ZItpZ43ta+atSUtkAwnNho2LN2nFlkwLhxkoRrubdpKNkTMGpceveiK98h+vJIw9k9ZMaersdt7Q 1KyVBPBKiwWvJWirJisBfevp/+0Z30YbPwWdwECxuGx+2GtDs6u18ogQiDGqVdfWqb94iJBn4diF dsQPI9NvSoi0UHaQNizfKJhWqfveOuojLBNVTit0A90+l++TWnRokTYt3Whl1kxaRtb4BEM/0r5/ +9SsQzO7IQ2j3oT30rHAFu13SVslnBrzw9GpRecWafg/SPgvOrdskh2cge3FOzdTwJyXY4Ivv4It lX6mWembWUXGxVdyhcB4zlwf76mvZltH/dRszRGZ62LTk76a+WmZ+4wAAEAASURBVCE3OZEYbZ4N iLZtWqs4hEX0Cqs55idofDCvwb5Mc2mUcJyHeRaa7vQdaHlyzIeNB+ar+HHEv6Xa7ytqL4wdzHWZ c6PVASxHVqEBwQJzEcZFxrtdtfhuq80Tyrky75lrFyw0VZ/O2EGf2059hYrL7Gp2UL9n9hk1pkRf QVx4QX8A/+kDySPZ88X4WxoT58hGyxDzp9/k+BD9MXZy2mq8Zr6IsIs+CZqZB7Vrx/ts67PgN/UZ 244TX59kmojcFIo20UekdQl/7rnnAdPYP+yQg21zqKPGFrstTHHhMTgoOeYp9J8bJWglnYUaQ7h4 gfkPxqPREOaCiLM13/nVb67XZRa/SydJqxwNXo4UMU+56BP/YPPEoYPr7Abmp//6nNlk43IaHOPS TbrJ8YB997E+j/F5UF1/sxXI/BAHPeHaaN4g1mlzVsb3NT62U5nRLzJPvllzJObQ1EsMd6N9ebrm GtQNW4tZ5tSmhBdbddjau+mW23Sj8O80dz9SY4BuNpvCbWn72SU0XL5x19332WZeW401j/xllNYj b6ZzTz/N7AixOYiAhzo/Qxv47VU+2Otirst6ByE+9ZpjYb0kUEPIPWL4HjIFcpiO3400u0N7aYyA vy9pI39/CUmoS7eI9r323N3yiUbzEK1bON6mSmP93RzNGShbNvbuuudBu7CG42qMW8x9f/HL39hl Kid84Ggr//s1L9pbpz64RYz2xjyDG882anxlvcRck/nR6jXrNB5tMtuU2F9CWPWANGxZwxxx2KGW n4kTOXK+Lc0Rjg5Kzzf6tqUF8xZ5XVZBLVAYdZ42xDgF7zGeDvvZFBk6eJDmry1t3o8GMPPQcVrD zpg10zZQ9hGtaBxZu6HwiVjUAhNQ2Td+761TtSr7oErK9Ykp6m0ExLMSJTJT8YlcxrMSUnmLsHgS kr+TTv6dv1ewVL8Bg2uIxsAXeBqC8djZL4Kbd+OCgIgTiYV/PPNw3vHPw/Lvht5rBUEBE8/AH3A8 87B4z8OJE3A7nXfeeQcPGzZsr+i0CKQTjUpj7/JjgEGyS6fMdYZIcvcagQRXghp1zq+9/rrtFKKV wEKMjhthgO1YKD5wdEQYLuZ8LR0MR5ue1cT61QkTzG+FzlMffsghtsjj2ly73lkTaSzic20yhmeH qBFi22G0Ok5uKGDxiT+7EG3bttPi9W5bLDHAM9nvIGEPC124woS6jTpEhAVI7d1p/02ZZcLCFd9c 48mzvYxs7r//PrqhZ4Y6rSlmM4njCtqPsnPTDIrkn0kAneY6dWqvT5piC32unb5YC0JstnBd8sjH nrQjHljKZ6GLgKCHFkFcc84iAOEKuwVMqNGQYGIQnQfpPPm02wmi82Eno27gQC2ElqbXpFVCRzb6 xRfTvuqQP3zu2aYi7ZOyyF0TE4whuHht8mQblLED0VSDC4sgBnR22CnfvKVQcfDgjDC2dFhYHSst IIFbB8fV4giHWEyzkBqnckUbjIUsRu/ue+AhTRSW2AKHxc3AATruoTpBGuBmYGDhg8Hyz156kQZf 7HU4BZa2fsg7QjDqHNfFUocQ5o3QYgND6NA/acqUNFn0rdEg0F2Lap74oy3ChALhGIuzV8aPt8U/ N4Bx9ASDjUu1oMLo43QtnuepHPcYJkN7mkR5B+5Giu+6935bdCLI4VjKQQcdIKOO3ezWCyY/G1T3 OLvOJA7BAZMwFnXknwGWyUhvLabh9z33PQhXTYDSVZMXjr0gvJg+Y4aukJbhzSlTre7vrAnzFi3m WcQNGVoI/wrG0dZYwIIXm1HY8kKDDXXrz4iPaODN1MQLutlxQcUWujkWRL7CNRWeZ7Q4ZMcJOzYI 9dAIOVj5o96++upr2rmZKuPkE1QGq9MlMjjI1af0EwOkPUM9ZmE/TcLdV1THGaAvu/hT0n4ZLps9 K0wAhrF0BJDUN+LSN9AemLxij4vJDHUCAdDrGlCnSpsAA4lMRmmf7HxxtSjHULnWF2E0gsJXNZGj bXO1Lv1BrolGBaXPYtKCQHeOJuS0Z+o/V/3uqiMxaOK8rjbNTWzsGHJDy0aVI4Z1ET5hn2aVJoGL 1Y9xkwZtjZte0FzDjgJGtF98aZwdxWMy06dPb8sfk7hx4ybaRHPchImGf5jaArt+z40ebYa32cX9 4PHHGh8pCytW1XPsLL2ifDEBxUbLa5oocTQI4SwTfLS4uL4W45+TxQ/6xjNPO0WT2FNVz3cyo/bY 3UGQQt0YNGiADG8+b8apsbtD2WOz6xYt4v2oo2xEiEd7q99gooZgCtV/jEyOk/FgjvVxHK2vBE6U eRtNdia/8YaEA8PTCSccZ4SjHclNO/SkF+jmEIRq3IrDOPHgIyM1MW2hRcx6mzhxAQB2CVgEsSNN G0Q7zspC5UE/yuKHdLFLQV8+ZNBA0Si7B3Nm64r4+TIeOtP68L1HjLA+BP5Rj7kCmqPJ5BNj0qTB ZJ+FErZgEATQvyNMRR0fAQ1CM246Wyhh7GS1u2XShjvs0APVtwwz4dVYCS8oy4kah8jXIdKoYuJY aUNN1G6aW59EG8CAKf0BO7n0CdDBhgRCodukOYWtEIRWLDIGDuivCfB95ocWoIpffc9uVo7kCUff x0Jhnvondn1ZTLUSHS2ay+aU8LPgoA0+8NDD1q9xfIo4CAfH6YggNK+X8BFD/QsXLLb6hGYO+dpP Y8yHzzlDY0UL9Q07WX+BEG2G+iGOf3tfEeOj99clw508+2XnfKTaAgtRbmaj7drC+tUJafrUmdZW aT8nf/CEdNyxR2hh09HGBxa1YzTu0UYmq65g5+kAaQOgVQoM7X2shPGMKQicsUnIzZ9xFJbKhwAF zR2ELft8bu+0i66ZR/AAnc3aNLWbzroO7ypBShcTCq2bvy7NfVyC26fm2tGyIWcPSrt/bHez90Oc 1t1am4bQ3FGqa3+dZ8aRh31smN1cRj+K8KDzsM6mGTT7kdlp/rPz0ybZ8Nn3in1T3UkDrV5gzLiT biNbM3O1DGrPSvOemy+hx+a0z+d1pPS4/jbr2rBsg27bGp1mPzYrbVikm6gkjF2q28jmPafbKvu1 NUFWy07SHpJ9nVkPS5Pz+QW2idZ1RFcdRWsmIVid9esi2VzrHq3SZqUxX3ALn18onOtNoNVMR4AX jJ6XXvzxi2nBsy5ERVNnkYRUaNL0O1aXBiidDgPaG75Z0PuUhKyvLk27yn7TvlfKDkg7Ld6U0CLx uaX4y41ndFi0p8Xj1LZayOjxKXXuJ0DqX/mPd/sWmXoyFq+T1tOSV5ekVVNX2RX2aE0tfnVx2rRs UxogQQ5xx177ooyDT00rdYywRbuWaaVg5z0vTQ4Jufoc1cfKC8PTS8SzOSrPOU/PSxt1sxwCvr5H 9PX+tKCiZSc3Zr9Y6cx/ZkFa+fry1Ff5RlDUrJWELxKELZAQkXox75l5uoVu53TAl/a3cqZTo1+l v/3DH2+09nKItJcZayyP4gt9N3OS6dNn2Y2XtEH69y4a25n3PqjbnTCUziYW2hAsrLmFtZnmWrRh FtelfULDKoRCyvwPQTsLZjYiMKiMph1at81aoNW+zeZAd959r81hmDuxiXjsMUfZ5g99ERo28J+N 0vXqgzdqo41xCEPCaJVgm47+lH4VoTFHuBlziQM8cxXGP46oMrbvrv6phcaWmRqbEHJxcyX5x6h0 9IkcXacvJC4CGxbQjPMY9mVjg6NBzF+Zv7HJyLyaY+hobyJg4Mp27NDQ53JNPZsttPl1shtE/hir sBXKzVwckUIggBCPudmln/qErrLfy8rntUmT0qTX3zA6x8he00G6ueq8s84wgYpIllMJqvxMI1T9 MJu0jFuUCxdBwAu085lbs2nNeE2dx1YcfxM0X+ekwZ4ah+izwMdYAPySZUt11funbX4LL9dqPopt P/o8TkIs0tznY+d/2C5+oI64EzFy1CvqE4K24DFzoA8ef5zmZt20efOajVXUSWwQsenEDV/Bf0V3 J7Q+T6xTWLL1BZr/E7VpxoYnx6oZ/9joZP488bXJNodF4IMg5kMnn2h4OCaHpnor2Z1DqNdV88Pe 2nBDM4g1FXNy1g2rNQegDnHZAGsUtGgWa7OGUx6vaH3GfArbZ1wkwiYztqTg1SvjxtlGOXNy4jN+ Mi4yP1mguRkXJXGT3iWfutCEW4zhg+sGmpLCC1rzMDaQBpfmcAPwkMF1Nve554GHbUMMu02btugW Z9UtTKJQ31urvnGUbb+995LAcqjNVdmIoExXLF9leWAj29qCeEc9pUzQTMcu5hKV+ygZ1+aoIgLa 3YdKA19lOvKxJ+TX0jSfGa+YG919/wMSUC1Jw4YNUVvy9RoXGW2SsJzTJsxRrREVxeaPqAtVnu/5 BzWzipLCA15MmTLl1Ztvvvl5geDLX63L/d/uPeIFTEO4KhORgH53z8DJM1pIPMGUv78j5h0FDrh4 BhEIXnhviBhgA453/oCHATwDV4TJy1yEhX/Ea+g7h+U9/kAU7wGTf+909913X3n66adfyOLCHNgL au21yBGdHp08Ryi0b6zGs5NuPOmuDleiEwFynIcFIhWJBTO7oSzm6KnAQzbZhedGHRtE1GH17tnL pPIssunY2K3F9g5x2E0Ad8+e3Wwhu1CNkfCuul0N7RO0JBhAGVRRI2RnhAGHhtlUu2motCOQYqeC uNBFp8tNY10761aYyKRRxlniN21BCC10Amjo0OktFD46ZQy/sahk0COv3IrEdZ0MquQbgQsTZTQh GFzgFwusFStWaWBeZR0q9Ldp08p2SpmgL9GO80KpNUMLt8/QEeOQaEe1gHfssBuPlAcmKhw9YrHD 4gqhCHzu20e3WYgvdKYV54UHLWiP0FlhEI/rJ9npQUuKsiBf8L8s+AoCe+OqRxbI7H7FoAROJlII BRfKoB5lxcIBYQMTBDRVKEcKn44XIQ447Khdgf/b1/zIJkrcIkb9K6pamTppMLliAOEdAO2X2G4Z 5ckEDEGP5UGaNizCUBPH9gVCLHZa0AJCqwXhIjdXoLnAbhX4UDXFiCF4EWawQxOdN4M2C6CFi3X8 xgZ0aaloUOyh4yqUNcIOygKBU+y4Uu+x49NSV6lzsxwLQ8ocnmM7CP5bPZQfWkeUG3SQP9pGey2O qe8rtRti9VCDGnWCOpDzBr6TR3jMYpj6Rl3EQDo0IUxjJwgNO74ZtChjyi7wkC51goV80IlGBLdI QONSDfQI2IBzoSB80wAqHPghXCVtBkn4zCAK/4Dh7Dw7OMABj+AMQ+UMkGhYMVlB0NdO+SVzaGHR nskHbZmJLDs19DHcVvGA7NZ89otflg2y79sOH2XZSari7GhS1yJP4FJyxi/Spu6AGxiOT5EmvGMS RrvFVhZ4KEsmntY3qA7Tnt3Y7jabAKLCj7CGvOHIG5OZKEvf+WtrhbRIC3V2UulDKDsWDcRDUPAd Gd5nIfytb3xF9R0bU5Qsvxz/Uf+jePCU9oI2DXxngQUPbUIm4fpcqZtvVL1F0wgBOo5wtGioz9BE v0P9R4jD7h8pYHOE9okhfdo6dZV+1Ns+xxc3pXkqA44GcdsHx7LoP6O9wuNl6q+ggzoS9YBJI30Q /S88549NAPpJYLF51LWrFiESGDJ2WF2TXyfxhb55rhYG8JqygFf01Rxno++lT8SBi/6KegZt9EPh SI9xgL4/6jtxKU/rR5Uu9QjBCRo9lr7Kg9vfEIKj7Ud/zrHHXr26Wx+FYNT6VvGTWwPhBXWO8cOd t0jSpmznqUzWC7a7ypvypT5R96ifbC5Qt4GFHtoiCxHaPOWCH3xCoASMOUMPL+G5aym2b99GZdXD aKVcqccIWTnuyUIJ46cIwRhXGGOx30MZU+YI36CB+sERC66WRmOBekJSjC/wgDzSBulH6CnKduVU +W/hCa38/emmW+0450WfuMA2fhibqIvW7jQGo5mLQBh6ox7Dc4zVYqOtc5dONmYwdrJwor6zQKUd UU+px/CVPpf4EOwPzSfGSNtEt4m17dXW5iRBINqwa+avMTs2LSVswNHnoGGD9gkGqttJ20Si/yKX 3gYRcnGj1qaVqn/SOGqrW8eY6+CCFxhHXTVNN+dslpZRr9apTZc2Fu4wzHXU7xQwWzdsTW16S1Oi m/qGwjHPWDufY2I+BoGeIZu8keYurSXckJOlwrSCm7yUTrtdiS+8azanNt3bWBrAUEKkR964tY0j Xc10q1rbHsD4kbR1EhzhWOjK08Yq4rTt49obhIFn9dxVaYN4w/G59hIeoZlFCJHWLV+rR5PUumOl 3a1fKWGlBBYN5T94VaGQVPyo4IYlMvZOARZApN20RVPLFzAcoduifGhWWc6SgW8mo9ptdMNZ4N4k 4cGaeWvT1g1bpH1VzWPwBG/QBkNAtXmtNkwk7GvbW/lWvQo861eu0+1nHKWSdh2aYu3R2pLrpHF5 7aL0m9/9yTSZr9FV3Wj90aYMWCCi0H7XacFo4636XvoDxotdNN4vWUof6HMAxgj6Huq2+21VX9ZB 7U1joPIHSwqE1q5YmNNOiAM+jnRa/6DKwhyFC1PoZ+ANcWk3CJ3oexGgtJKQpY/GD7QquGyBNsEm Ev3PJvUHCFwQNrfSvIfNKvog2hjjOhuqCzVOm8NPbZe5PmMLbZs+Hzy1fQVx0YZeog048MELxk3o Jj8xXnZXn7BaOKADwTRwCM2YJ4AfzV40adg4ID/Mn5lfcuyIzZCP/sPF6atXX2UaJOBkHsV8inZA 2TDfY5xDixOzGGhXIchB4JXzmHbKeiHyyWYe/TBjHmM8czfGCMYl+n6EPMzZ6R+Z53ZUmbL5S9GR 92t+fK2V6VVXfMbms+Q75q/Mtein6cPJv7peOWJWO+IEjxHSwWPmptTZpRJS2HE3RWOdRN9uQo0q POD0mslYYHnRHIjxk406xjLGR3hOGeE/T5cIMF72lMYn4V6n0IZfWq7XmJ/DZ8qTDTv4a/VRqaE0 gC1Tyo+5MEbKGU+on2zwo83bo3sXE+isXbtecReqjHSDpzY9uOGP8RDB/6sShJ39kY+nL37uMrMb CP3UTeoC9EJXpEn5gJ/LEcABDOXFeBprAPo5XE+tDVjD2FxI/KXBMF+GXuoyp0OIixAMnpjgUPUN e5vcoMw4BJ+5GRtWc6QO4+bMK7to3sNpmOXio7VrjWn0E9ij+tGPf55+8qPvmpY2m1+U6ze//X3j zQ2//6UuMOEyhbwOOL1oxKOw+d/roMWJ4Ncpc6P0d9111x/POuusn8mbWpz/AdrQd/jzjEkUcHzn fxFX3lX+wOAClndgw/EeJAYsYTl8wIZ//h3vedzwq3pGIlWeDXwEHM9AGn45eO7X0Hv48Yx3ZiTg 9JlJtX/A5U/g+OYZ7/l3+MWTkR+Xf+8sQdEXqgRFDuOU0KiMJH/SSOmY8aPRsuAOl4fhxyTUJObk qMBDZ2cTloJ1dL50sCakoMHonQYLeKQTaRCX3NJh4Jj8e/YjLZ94uT8QLqih43BchZ9oLoUpli0j 0DogBkTyQd6gnydxrXMSHjpEBiyk4kxEoMXzDS3iilARhzR5x+XhQRO4eWdwJ01cnqZ5uK9+Hcbg jFTnO3gjLuwM6/zAUz7+x7s7+ALtlg6CkiJtvoOnFq2MwovTCQ+cH3l7VEoCCZ6RLvl2OC8/45sh pdy8fDhexxEt0rzhzzen7337n22XmY5YGPSvIMDyKhKUiNFe5AO+klfQOm+9WkceoqzL76LeEJ1B zG1BOLJK2Xhd8R0eEi6cSLE6C0lacFaXebQDhSncqY46x+SKeuN4Slqos8IDMBNOqgFYmfhRNmQK PgVP4aXXFYcreUOSRfkHj4lHWeIqfOHbyyXaUc5j6rEJxmCm4KwOmVBM5SqaCMfldJhH8RN1iui0 qZLWoszAifO8+iCfl0/QW8Gj/CvP9Ans4hPOH2f8r/zS19KNv78uHaLjP+SPtCI+qXjOPR9Fdqr4 AGzs4JEetDkO+O1tnMU29grgP20TPGAkb5aW8VftznjjeTO+qS4TXlsm0f9xZBKD8nffd780DS9I +0oNnUlGtSvqufKGc3oreYQQSxe6KFP9Y6JvJMnH+xJvCxEXv6hX4ef9KDjgbfSn0O7Cfy8zr4fE CUcM0nc88idInpFnr+Pu6fXP6w7xo+552TtO91P/au1TZQGPKXvrg2VANKv7TBipDxBs/nq+XT0G Bhr4w1m/pDiWlvsYTeSlLGthZOwhY1W8ND5HORSZNhz+U8lr/fpEvVe2jG9OiucT+rxfcfqoJ8Dy 5dyppOP0kXf6PdmzEyLqa1me1OUCXGgNg9VdJ8/y6XGiPOqXLeUCTODkict57GlUKLRwxWHxdfPt d9rO64g9hukI3/kmbDME+qnFiX+ZJ8L1DxyRJuFlf6B3ExApY3k4jMJo9ajPP542y57MW1uh1DJP dCql4YCv1CnzYryzdq8vZa86TS8Hay8SqIZDEOLpVvJNPTRDz6Ch3NBiAqE5j0u3GWnBSvCE42hB E+O3fIhWSc5w2aaDAvJ0PA1va7bYNWSRpvyhiX5B/z096jF9aIUOixI/0JTzHH7p9lVzhMFv5c0d fINIytrnXvhThqRXnf+I4TXHv+IXegJX+PnT6oi0nWAIfLM5Ip8ki9O7wYjm8IQmn0tGnis8tggW UdDKm5VFgQttHOO7/Tg9JR4FwRdANx36Znp2+dgkvSNpblxgx6Wq+myjD0j6Tq9vnmT0Az53LMhQ O3Te1faBxmfFd6LimbURFShtgDT4M17oh7JgcW1RiS3aGb/LtqU4jKVkhv6TeHzDR6PX+l15K6KV N/nB8VQ5WZ8LOXLEMVwKe6e+wnnh4xBxba6mp9FQFCi8AM7qEEBKNOYv0ddHeVudET0iwRwaHud/ 4tPpx9f8i47AS5tW9aC6LkM+7aGozxlux1DhsdFAfbMApaE6D715HnzuwnjiOAnDwTMcGjcILahj v5fm2bf++SumUeNjide/mG8AD79jPOTbEo/MFZRsj8fBG6KRvs9nCsZUskVw6YLPTneFzwFQmQM6 bdZnFvSQJ+Zi7nxTJOoP/C2DRIKVn1UeoKmr3o/znvfxOW+BpH+mbiGgwaTDuRd8Mn3zG1fLxMM5 NkYa/0v+WIyiLEjDy9jHWdXtkn+UqfdPpE198/pMXqhLXs6Qm9PjZepzApIEzubAJrXx+TFxatsw VHkZ8+bt9Cc/+7f0m+v/lK77t2tNW47+mZvkfnztv5rSwTe/drXVUdJo0G2nPBuE/bt4QkeUdf5e jZzNukxQFAMCTxoEEfNnhIdffPMENv68MVXi59+BM4gLXIpu8Rt6hh9xc07Gd4TzDAdcpBt+9Z5N 6/ls3yNPGKg88fjmGRmLd+Aagg04wqj5OUyEgQMX3/HEL/Dm4eEHXOCLJ3BlL6pGVOJy4CKK+RLF nb2pUsetOPgWkAZAhY+BtIJHQZYjx+MLUcXLKLHOWTsBrJ/D0XYCV/ht5VpK+UeaHM2p4FEXwUIe GjAKWeOi07Zki3QCD50LeLxD0URc/4ALFwN8fFtHr/pUkkuaTAKIZAkAaVjdy/hSocnjeeq+QIi6 6R2qhZd4oCYGhYADvxx4bTInYEfn/krVohcCCTzJn016ZT8kHHyPwS78ovY5OvA4b5wHBY8BNiKN hOpBLxApnDiGRz8i1WhA02vUE0/rtqG/2PEm7Mtg9DR4THrhSvIV2Yx4GjKFWuaA0ov+16snWoA7 qP/aLlMgVUh1dOpsQWcJU3mBb7GgLZBaIPXMNC1KZJ4/AqMe281EFVT2ZvWwyAcPHCWCgU4Z/uLN 6rFNrgIAILmcN/7tA6Ch00/wGDqtjmriDXm1LsfDjRyxiAk8Bq+ITL7Y1a5tD4EP+DdtkVRf4GGL OxbdOX8En/cRDeIxIoSXzGjywCCOJsQbb0w3lflxUg/uo11FNMPAFa7yBgK56EUFQ/0wMuzHg82Q O68FeNQ/DyVpJmFFuOIZmH7gnbUl4419VfEYmmpxMdlCW2zchPHpk1pE77UXt2nlvAk89eM6efw6 ESVdosNbpwdBoC+KPa+RDy8f76ui3Ln2OCfaeeP4rC3gIRf12L88ik3Iw6PgceQ58ECL+UmbxFB5 JixWbVvFM+ixXOqH29+asOqxeM4bW6RYgUTi0FNB3FA9NhRGFHEcj40hFRT2xkR1a1zxXYR5vwz9 RSolHu+PLV8FLHmt9CFOk7XfDIjxgXoTJFsdUjkYSCUb4ptA9F3mTe9e5lRG/BVu/ba3OfAY/zIc wNWwSvHoQ4t6AH7SMWRA+6KTz1pX0qEA748diuT4pp1Tv8/XpP5QHS1FIw3ctAH4Es7Js1jmVcmT 6p0IMVoAd0Bf+DUwZ3MM+gV30yZp8Fk6drqZsbWCu0zTCC5LUN6RALmqjANAuCsSz+Dwd9gcpoIn 4nnrafjL080pzNPxOBHTn55Ww+luH49zoCHcHlJJw+l3muvDBx5/5vkGQ3wX2P6X8ljL47S09YrU o3WPtPfw4YW2QvW8wqpcwQ+q45Zo485e49WbDYzB9IHBY+OnFUHw1Wsj7SHaiLUNYbMewGCd9yRt GwXFp9NTiWdk2I/3EeDhEzjrs9C+acgV83XDbbCKUuABQ1WaWfzoK8AdWqgEQzLVpHa+jidGjmsd +TbhWfDW+jsN6eoYWWhjbgENmzemTrXLFeoGDKhGIVpj08FpslxnMBUe82YblAWIPSzPPm+ABPpj ckG+avt1Fs1P6cgzt/eiSYnx4roB/YWzki/jNeN97sAJbn/oVa2dxC2t7fM4HwdL8CIa3+ZXBhT9 HHSrbuYu0sXPNvhyehVYkFHMAQs8GQLjBfVdftvjMUuTtzQHcGR66NvgRc9WrhwMJ3/GEOxYchQZ rW6OHXJZDWVrAq4yT+ApykJ4RH1g0dOotm+bszOfLtIkyOcVAVbJk5dPRo9AEDzhPAVPw2jXD8m+ JY1oT66Cx+Z0FsvNtHD5xyhdenPd9TekE4492rS5Jk16w07aYK8TYRPzqVo8BQpPvPx4b1+MxyRZ YWkVASqTCOGZF0IVnD7oTQiHleF4J17uF3jCLw/nvZhtWhy+cQHrX/6bx8OnoW/887gBk/sB06B7 N4KiQBgJ8Mxd7Tfw4Zc/YSAMwAUMfgFjAdlP+MeTIN7zvwAPv/iufUZ6VNjIT8E9fRIbX/6siLw7 MA/qSBFuEfnhO3PmX2DL8dDIyioGvOI5rD9zNBW0eWIeh0hVeISIwShwRa0iiRKPwq0zDqACbT08 WZwCBDQN4wFAf5avKqKYhlUi1eIxbOEJ4P8iHlvGt8NjJgFHHnGojkBsMsPnGEXGz5nVyGMq047U 47fjMdXO8OiXYiiqaLC49COgbA8F0PutHqN2P236dDsmdt65Z5hKOhNEBEXRfMht5NNzq6/t1D9g iUhwgGyvr6gCKhL7W/oKJgMcn/vcZZdIlVlGVG3SqDpfIvvv6yvIY0lGxhte4Q/ZDhf8cl99hUdD vHmPefx+rsdvx+PgbTxp++4Kpr4LHpdRhYBo9l2geduyEiTwESeiQEf4gcx5LB8qjP5HX8ETV1cn m1N1A10wK89aPIYtPIkTY57Fr+Al0fAyJIbdf8zfQ203duDJAwXi9IM6o9gjNPALDoetD52H5VE9 3Uo8wnLY/L02zPE4xI7gATN5quDJsefvjrn+byWtyKfD7HjchtKuxK681U+7fkq10LXfgQN/XE5z Dpu/A1f7HT47gmdHeIzlGRyCkRBwO279QiQf/G23Hlf364IsXYknfEo8Rf6tsSkR/XfYAKw8/5a+ gtjga5DHeZ4ALL6rxgd5Ej9o2t7Yub2+ojLYVPMmkiZZx63f8MRDCaE1x5EijgSfd87pOtr1pi65 mSj7Zf2FNqcELBke/3SPAgzU3qHpTf8jPwEaz3fiMQIJ7NpxFLhvn17p7DNOEy4JevRnaRSIwO9p 6oWPSBBPve8Qj6ETWEXh57/OY8dT0gOPwW20FUThISaElwMA5M78PbTi8TfwGLnDIh3JxI7TOWef rjXBW3abMmWL5pKL9pSE6PE0/Wn0ZrTYNz8ABWDx/V7yGMEc9nev/scrdSHTi2ZvDDMLu+8+VBeZ HGq2Dt98UyYBIMro2z6Pi+y9Bw8IkdMjWMez8LWg+JFwLYICNIICvCH/kG0QVhvON3Fr/cFbC59/ 18aJ+PEk/js5YLdHd724AVgvoMYj4GoJBCzCIkr+He/xzOFpWvk3MPGHP+Hxnb8HrhByRRjPeAcm vsMv/97pzjvvvPLMM890G0VAlyyu+lCAB0WiTlL1hLAEUgreqQmaHs1w5uVhkMUPGKMO5f7+7rEc T4kqwKpQvj0ej7IjeIDMEDeIFs/qvGcxPCn9OlTxGXjgPsDmqiDMpxpP/XRKoP+hPKbjZ+KF4UDT PInRr14VqJ/3at40wMH/YTwu81O+kKfIBM/tOYWpMbx9eyBuhrhBtHi+f+sxEwjqigkT1Y010S4R k0LOgttQVcMez201b0oOlC9EapAZNdiq8ZSBVXjwzTzeBi158fG1KkaJlqhgMhd4GuwrmDb5UjJL WdEcQxUekAG0nb4i8ABWcZE4zxonr7xf9/pXoSdnxXvLY8+1/zrN1bxxvzy8rAKNPC4KOeMYjPr/ vT+u1JssZSVcvyyNwHr1WL7WCRR4FC2GEoMvCxh8Na6E1UvZj1boaazHlELwDcY38tjaw7vqK7zO wUU4WLraemwB78TjKgwlKoro/5X+mBrJPCDXjmFM5cjSfyePYz4LHYzvaHN7H1Yppuo3UVv2OVkI RUxGSpd51MsgQO6ZB2UxSix5uEWBvO3U4yDgHfGAHaB8XoGfeb5dX0GkBpyIZEPNyrYgGBnKzrK5 x6ehtRc+eHn/85gjk2gNYYQdDTu0z+xbQiSrJ0VOyFE4clZyaEeyGRH/Hs+qQt9+4tnRs58rWVSx iEmB8BfvPEONjWf4A4ML2ICp9Y9v4vGHi/f8Gzhqcy18FSuLuHqULnCUHnqJTOd+9d5D2FIvoMaD BKqaWRFOIrnLCa0NAy78Ai7/zvFEWjxxkUHgI07QZADFD345TMDGEzCDUWdb8QvshoQGX0mEt/zq PnXbCuc3hyk+FBGk1mWUOCOZWqzgiWwqUrgCLMcTMR2lfrOdBKenwGMrmCI9gHfSj20P8PSMRzL2 NBYAGK4GT5Be4nXeBHQVb0BTwJe8iXiemUo041AJbhH/p/M4yjznpmW44DGDvXWY6KZSGDlvAIzv gjcW136y+ve/hMeeN3hQqf87Uo/ficcVnv3PrsdMupiA1boQuJT+RX3w5qVeSd9ZFRHYfyePncqc 5uhOSvqdwspnEM+zdPFRWcJV4/HwgCqjFX2Owyq0BKjgKWHtBYBqzGW4gnI8jirDUxXtbfDkCAXm eErPSKRhjwbROoYcTxUpBaY8vKwg9TwBruSpGk/9dAw1QApyWL2UOCt4DK78AaAacx6U43FUGZ6q aG+DJ0coMMdTejaQfIa4QbSOIceTxSgR5+HvKY+VcDU9UFLtkxPpIYLx/wZbQpcvxHgbPDnCEk/p 2UDyGeIG0eJZXVZZjBKxQxWfgaeeJ+GVelONp346hg0gBTlsjrDAU4YZtAM38rjkQDWPnUc5F83n b+Jx8LvmWZaHXvy/ACplXhJm0aCkIQpznDmezL9etMyjQbR4/n3rMfiwM8PcMXex6M79LJsiwal0 Wjz87epxFYbKR45H746twuOYzxodJrjOeFPBkr05EseTedeLlnnUAyaee+ZBWYwScR5uUQCq5wl4 JXblrURTHSXAhcdhc4R/G48RuDVUtkZBFUGkVeVRIbJ8E4z/L33spV60zCPPQhnLPfOgLEYNVPEJ sICoD3bMVOsehCu40EzkfUfxAPueuGwNXL0GUeo5A/RJWRW+ZCMPjWwVXCjFA/FNOMtivsMvnrFc 5psEQoik1xKe98AR7zxzFzTleGrpCpjaZ46nwXfLeYMh1Z6BOPdtyC8yT9jbuYAD5u3wAIcDJnCG H/681+KqxRfwAWfhkhOFf4Gcz/DKk5JfeOvFhTsVYoIInsRCma5QqLM3/HMSkU8R3pCQyJKJpMt4 9iJ4HL9Gvn25T7Eotg+FCaTEE0KiInYZqXwB0qALn+Idtct63u5RRR5xqea4CjuNQvPL8Jjxbosc iAMT3/oLb1508wh8qhiU8+DweyceW9rC8/fkMf0J6VtbDnL5LHnsqdb/JWOeOV80+7upthavFsfe 3SM447jkt4M8Jp7XvUAcmPjWX3jr5b9aj0varKz8K34tmUjaPMuECxL4BiD3r6nHEWpg1bCGsuoH PBVc5XtW/wzcQByuijzF5XyyClh/FTwlTA2et+VxlJVw/ld4HBMwhEa0Ra87lUwblSWB+Ffo9jd+ AQj/oKf4tnpbhBpYDgu+Wke8wEVYBc/2+opaDI3fjRxo5EAjBxo50MiBRg7sOAds5NUgW5kT5OPw juP5e0MGPX9vvP+v4Qs+xvN/Q/4jLzzf3y7oq50fO9URypfywiS5oYkyYG8XRvTacOJEvNpnngbv uIDxL18VRlj45WnEO2HxDg5c/ox3D9nO744KioheS1QQvr2EgrhIOo/Pe8QLiVotXISH//aeOS7i 8Bdpx3v+NDx+rMNReiSP4oD65dN+8HHnMmP/rvUFAj/ERC48ILZ8SjzyVqPhOkZuGALScfgv8QGt fOnbFq+EhK8hq/dV4rGFbpEk0cwRR38WNfCUMSzMsWapSHJqN6EInwm2TPPDofw3wyMP/yok6sIY oSy8IYm0uWZyk66X5INwXdpgt3fUnrPG2v4mXXO8bt06Xbe7pUjfE+Ga43W6trFBHucLX09Sv38H Hhd54Ep6ri7n7H7JTqXgrsg7eS1z71x4R94UGAypF1LxG1zU07MvyLfhcZGy8UZwxK6uf4EvsPh3 rS/k4LcjPAaW68Up28i3CfOkfuoFD4Re/5Z6TDyLDSrqUXETxd+Zx57GW3a1M+qy3BoR6Za8iXpc 0BM85rMej4vIXlL/dR4HffUxBcedqP8Kj8t8KjeWnv2Eb55ybf1TWA1vvNQKJhT8anw0cqCRA40c aORAIwcaOdDIgUYONHLg/cKBmOXWm2drXovLZ7JavwP+dvKKHF3+briKn0DJk7+AI5j3+Itw/MPl sLVxgcnDa79rwwIneN7R1T/fsP0okRDPPBNBcO4HloDnPYfhG4cfLp7+VfkNFYOIS8i7EWwBH7h5 xnvuz3vhPFsGqNcK8ZVoFT+QObxDAhOhehaVLLxY6C5btjzNnD0nzZu/QAa/9k69evYsbJBE+v6s Sg08hrbiy7eh1+Kbm1NwZeh2pLdAOWgsXx1vfTwGmTZt3GRIiWNyVgmOUCPEto7Ro4ikyYK5knZO j+MhjHOqs2fPU95npebNmqZDDzlEqpY7pTVr1qUVq1albl07p+Ytmhte+LRQNyWNH/96mjt/fqob 2D8ddshBdkPB65Om6BaoaWm9BEVHH3m4jOj1dv6RFM4JKljvpRPeGYdKUHsJZhqOMicFLcSSMqKO jE2fMTNNnDQ5LV++Mh128AFpyJDBDZad8cZiOW8CvWkPvYuyMjw7yGNJHz0r5W+F915+EVDJXx7j 3dTj4DFCxPUSmk2fOSvNmjUn9e+/axoug3WQwpXoGDns3q1bat68mfzUryovwZugpsIbBRWklRRm eaJOIKCj/XTRDRutWrZ09giRC7Mc/d/CYwxFrl27zsp3pvKx+25D0uDBdSpb51DJm4wep995zK+d 7iwzVebAs1v4l3gyyks88AbnSXpV1bt7/33qMbjfKtIpKczyVPo5JQUtlTZOfIv+bvucwNf4bORA IwcaOdDIgUYONHKgkQONHGjkwPuEAzb3tXmtE1TOhbP5cQ2pyCBqj4cBElF55sIk3sPVzPLLWX+E Ezfi4xfweXjuByzf/EXcPDzixTPg+c7fI3y7z3cjKArE8YzE8mcQHH4BW0t8Dgds7Xf4hWAohEYN wQEbjvT4CxfwPPnL8QRM8VQ0QbAgioVrhZWBJo9Sm0yEOZ6y2OTNGdQJut7y+j/dpOfEdO2PvidB R59C2JDjAQffRXq1yeagheCBGO7yQHwCT32GGHyAV+FBMPJWevnVcWnlipWq7W/pfPTOaeCAXdOQ wYMkbNLSHG0RPSENzPFWSKLMt0xRoBsk2LnvoYfS3fc+lIYOGZQOPuggExg988Lz6Z57H0yfu/zT afiwYeL5trRy5Zr069/dkBYvWZIWLlpkgoED9t83jRv/WvrtH/6UWun2pPHiY+tWrVL/Xfs5/8p8 FEnbw6nLfarfifTOPCavkydNTb+87vd2leXE1yenDRs3pKFDhxToAk819jL1krbSpxqw/KrgsShF PI/1DjwuccSLRzaMBZ5KVSjybIHV8P6V0ymgAtziA1Dg46zu/IWL0vU33Jgef+Kv6dMXXZj2Gr67 CRIff+Lp9OioJ9IXr/hMGlQ3UFUlw9NAkvDYBfUNBMqLtF565dV04823p49/7CPp0IMPlPG/staV NFXXv8CVPyuZ5khjCEDnzpuXfqOrPJ98+pn0lX/8YtpNwqKKtmGR4RyNvbu/YQwQ+8gAq74DiPAd 47FjymEz3OVrJKJnlFWE5Unm7xZe68F3/bRKnwCv6itAFAGGtPj2WLUhAdH4bORAIwcaOdDIgUYO NHKgkQONHGjkwH87B95xXusUZjaKyqmxQmLyjB/vISTiO4fTZ+ly4VEevxY+8EXE2vBICzhchAdO 9638vlN4BbLm7d0IiiIRUIQAh/ecqCAY/xye79xFnMDDd/wRL/x5D1ieuYsw/CKsNs3wj2fgljJB JJGhFFSJgBjFh+2tFzvytkQNIMFQx+LTCAFOaga+QFaIPrFqv9dew9Mxcw9PY19+JVuIetosXE2L gTSFzR74SXiC1Mq+PUiCLP+qXlw7Hg/afrhD1f8lBnlw3NvSG1OnpQcfflSaQHPTAQfuk84543QJ eSQcET2rVq+RVscupmEEDREXrLXvNJmWEuqcdfqp6a/PjTahkeUPQcP8hdLSmZKWLV3uRsJ0tOiJ p13I8Jv//LmOnq1PLOIxhPaf1/0u9ZEG0Rc/d1l66pln09DBg3V8T1b0labZMVLCbxVaINCBIy/B I94RDXAjvREp+ODqtqIAod1cUZjEodz+8Mcbpfm0Ml37g++mFyWw6Nihg6UV+HnitumfHf+xL0+f 15IG3rOw0j/iKzBocJzUIcNg/mXcHE/xznEpF5REnEpaETnya5JQeXKZaZUjgSAgAqwec+TLw4LH CFL69OqZzlS5PvXXZ3X0TJcAKB+0qDlz5yUEaitWrrRyBfYt4YkjXZ6lIjd6oIHUqlVLM94cPInk edr1sAsWpYmTJ6d5Ek75UUWnPcrA4JQ+ZJrWGx71nLVcg1m1enVq07q1Ha/ctW9fq5+jHn/Kbmog mguSvOzA6dT6G7/OQw/n05AKCAooToPXj6doECWYA2Qhqn9wx/EKrMBDhArF5lmE6UECilBUHfuG x/QV1qsVAVkqRQSiyZf4hQt6ox9DrheH72rLw2hUvCx6oCmeFYprAho/GznQyIFGDjRyoJEDjRxo 5EAjBxo58D7jALPb7c9sIVbzYYDiDy/eY1XJNy78/Mt/axEzTa9ZgBlg+IODOPzFuwHU/AAfcAQF bG16gScPj/calA1/7qigKBIKLEFIEEqiuIDjSdj2XA6XxwU+MpA/G8IT8QgLfLVxwj+nh/ca50u1 qgB98B0IsU0TC1OETCyibOFsKy2ZrZUfC8ytgsMGEYvrnXVzEfFZvHbp3Dn17N7DFmGxADNtCsFu 3rolNbVbDbRgFB4W19vkt9NOKh4hMBqKdHxRnnTNOrcguDCEIN4RqkDTTjratRP4lK4FKTTyQu1k IZgvIiPf+JGPC8//SJozZ16a8PqkdPZpp6YjDz9UqLaltWvWpltuvyudcuIHXCNKVzs2hAdqWMWS D3jWW0IFtIHMW2kj5Dn1lJPS8D12T7sPGyqebTVBwcjHnkrdu3ZJQwYNFB07p/333TtNkjDp1VfH azH/odStW9d09hmnKY/ij/JJ3rCPQxo77yxeR2blT9o4eLFFtpGsfFQoCBqI+6bS9HA3nE3UvMWD c5Xy++wLY9JpHzop9ejRPZ38weMtDnwGP+X75laufdS7lRXlTv505aX8KV80siCUMgcn72+Kb9SP nWQImrwrSPmnPN2B3/PkZRjlQ2j+TobBY/QIJ+nZdaVA6T84SBJ6SJdvhF/kn/T4jrrogiYBmSMV hBdcx/6mjg+6pqVdyVrEadOmTeon4V3ldi7xVOmce/YZ0hrbP+0hLTHSMhqEqapu0lb0t0pHD2++ 7c50xmmnpO7du6tclY5l0NOHFNrdCR84Jg2QBhlabeCEx7Qp3tHWIw9bJawyfvNd5N+Q0bdbtiiL Jmnx0mXp7rvuS+ecc3rq1LFjatuureWDemLMVJocl8RZ3iicAh9H7sjjNspH9Md19cbDgi9btsAr aeKJDvKOMz7raTwQPuejPIRaNcZf9GvfCqdVmdNDyZTvvFjeivw3UTnyz+yJvaVWjb94iK0lXF5e YRTbAohT0IZ2FiW9TaQ2VV3dprq8RX0PlNOH5DbEjCoCeIknHxmP6VnKIE+s8beRA40caORAIwca OdDIgUYONHKgkQPvQw7Y7Fbz2mI+W05yK6Rqng9QAWhP3pnuxtLRF50Vv0rk6llz4CC8offAS3jg 5D3S4h0XcfF/OxfhAQ9spJH7bRfHjgqKIiGeOeJ4D0bVwsV3LQH4by8shw24SCePg1+ssmI5FXED Pr6Jh1+JLwQJALBQsgg5lDz4ZEG1XNoRb0ydbu8tdmmR9thtNzuCNHXqDDO43Lp1Sy1iB6dFy5bJ BtF805zZpgVYjx7dUt3AAbZoJB0WtiCNBeTqlavTzDlz0pIly9KB+++T2rZtqyNfK9IsafIsXb4i HXLAfqlVm9aiXEawdeQJOyrLFY6goacEFxy/MmGF8M6R9s38BQvT1s1bTdtn6OC61Klzp0wQYGgs T7bYhCBz5LIoPmOCFrkSIrRUPlk4ohHEoh7Njyeffk7HjW5K/fv2MeEBMNii8fYDMheG0JyWLl0q 7ZL5phmEYIj4Hdq1g6FptbSSli5bKuFY00JAloz2OfPmaOHeTjZjZlma3bp2TZOnTjUeY5tommwF oc3UTcKktTJ2jY2cNcKF6927V+rbu7fRsGjxkjRvwYLUoX271LF9h/TquAnGi733HG42aaZNn2H0 QHfnTp10lGyw0cHROhzlQ1lNnzY9rV671vywU9RMNpZatWyV5kprZuOmjWlw3SCjb51g9t1nr9S+ fXvZMVphtqjQiEKQ0L17V9HVR+8SWEmYsXjJYtOmaicBBfZ2Zs+ZKwHCm6mubqDit1PY/LRAmjNN mzZLw3QMqkunjhl/IQUaCwGQBAILdEQP+I2yK0VJ9lXZ9NNf5GHxkqXSzJpvfOsowQhaYus2rBdN vVLdANVN0Uj98uU9+HHgb2JaQdC3bt1alcFW06YaKmHNLip3eGf12cEt1koJfpYvX27lih0qHMKR mbNmp0WLl0ootkX1ape0m7TTsHk16sm/puv/fIs0xOrMDhG8hV+YNXIa3pJwck1arLg7iX9Gq+hC I2iubH1R9rv266v2szQtUX1q1aq12Rlqp3bEUcaKAMOqnexirU2PjhyVbrjltjRixDATTiEskujM 8rtJBsuhlT/KZIBsL/XrS52SQE75Wal+ADtjq1evFS1N0q59+8nWWA+Pu2lTmqH6uFT5f1PCIgRp w2S3CQHpVglesNO1WDRukTH7DkpzUN0A4wW8p9z4oc+YOm2q6qbXObSeBg+qU1pNZZ9rqmVnaF2d +LhNcNPSGtU7BKTwr7VgseM0e+7ctF5tY4vqb1fV7cE67omwEnjaIH1d69at0m46PrlW8adOn2H1 sl3bNmlX9SczZsxWf0cetiXq6LBhQ6y8seU0Q+2ye4+uqVsX2rz4G4OqZYBMePuxfRd/xbPRNXKg kQONHGjkQCMHGjnQyIFGDjRy4H3GASawxYTVNj31bpNY/Iu1cTXFMbsNgAgNRBG+o/4BF888fuAk DH++cbZK8tcGfyNePAHK3xuMtD3PHRUURfzaDIR/EB/fPPHbHmF5hvM4Db0DWysIAi5wh7AopyHe 41mLI/wtvSBGazZ38dQXu+qLFy1JP/35L9JqGek9SoaUh2mRtVKL1RtuvlULsOnpxBM+oMXULulX v71eRn43ps4d26cp02aYMd9vfv3qNFALTpzWuO4K/GjsIHjBJtANv/2lNGw6plfGjZffzaZJc+uN v08DtFjDcPD9Dz2annn2eVsQrlixyhafn774E+mAffdJb0yfmv7tl78R7rfsSA32kC791MdNUyO0 I6IdlFwrSMnrHuSFwIBaCJm2INST42g33XqbjEmv0wL/qfTSq69qsTlUGj6nmjBAIHJgaKIF88x0 y213yY4NwpoOphWCwKJzx06G9OVXxqc/33SLLfZ/9e/Xpj4SWvzl0VESHq2QQGxzuvWOuyyfRx9x eOJIEJoizzz3Qpqphfg+e+2ZDj/skHSHtEJelqZRGy16ERQgvPjcZy5JPaSZcvd9D6b7H3zYFsND Bg9M99z3sIQ6A9MPv/fNdO8DD6a/PPaEjk71kuHsJaLnzfSja74jgZEEMuRY/1lML5eNJo7foaEF PxEs9tMxpY6dOqSbbr49LZPA7sNnnZFGPv5EWqT0f/Tdb6ZevXRUTXaoJk+ZKg2yTiYwRAPlw+ec abZ1Vq9Zne68+/70gPDu2q+PFviDVN4TjA8ICsnbhImTrOwRtH30vLPTxZ+60IRmFWGcVyI0PSZO et3s6yDQa9WmVZo0+Y3Uq0eP9PWvfkmaWV0l4NmQ7r3/wXTf/Q+nzl26pH33HpFenzwlzZQwoKsE Mv989VVmb6n2uBaCwTWq37/9/R/TG6rfPYVzwcKFJtC86guXm4aZlbZXGF6Nb2PGvJz+dMutaidr 0i9Vrj27d0svyybXr359vYQ4u6SmzZqLxinpq/90pQQpbdPNt96RNqzfoPJ4UkJSCXl23y2deeqH 0tZt3KKmtqd8jRc//nTTrWmyDJn//CfXpD2H75FeeunVdPPtd6ZpEtSecvIJsme1WHRK+CdB1UWf /If0kXPPEj1BnPOLqjn+tdfS7XfeI0HK+vTgIyPtyNtBB+yfBvTvZ8KtCRMnSxi0Spp0r8tI97y0 14jd0z9/9cupc+eOqpvLpU13pwQ201U3W1qanaUleMXlF0u7rq+O4D0n7ag7VI866ya4zSa4/eF3 /o+MYw9Kzz0/Jt374CPSAmxqAkZwnXvmaelDJ59oQib6Hajc9tbW9NwLY9ODausIgU770MnqO/qb 1tnPf/FLQTRJP/3Bd6w+jHriKdXPkWnPEXukz152sWlB/fLXv5VQcIGEOd1MI3CN6ttX/+mLaa89 RwjvmPTQI4+lNevWpJOPP97axjIJNX8vO1NzpT148kknSPA6O91x592pa5euae3G9er3FqtefysN kobf+PET0/d+dK3K5+R0yUUfV5sWi2t5LAqtIpi/fTT+NHKgkQONHGjkQCMHGjnQyIFGDjRy4H3I AVa67piHV+a1+OFT5fAwMD2JGO8A8R1+uT9huIb8GvIHDlchrJqQkF7l4R7Df4kfS/jcn/cI2x4t tfD23ZAApiHAhgjCr9b/nb7BDYHvhkhgw+Vp8p6HBUz45bSEX8DkYeZX8ahGi9bEYO3YH7jfPrZY 5hYubunqrVvL0MrYVdobF17wkTRhwsT0uDQkTjvlg+mrX74qna9F/pixL6bnJODgGAou0oh1VP9+ /UwraL0WyyGQqRtYZ9oxayUcQjiAZsdo4fnZv/8y7bH7sPTlqz6frvrCZWmWtFquk2CKYyIPadH7 3PMvpIsu/Fj65te+rFvV9jHaW1FGAABAAElEQVQNjVwyVeaqJMJIKmmq0FcA6IFgK+zuoDk0WFpT O+u41P4STh139FG66Wo3EwJFXAQMXGv/r7+4Lj0/ZowW7Genr0kYcbUEA/2l+bHFjnu9lXr27Gaa SiswmC0tCoQeQ4fUpZbSFurSpVM69qgjddvZwVqwdjaNLIRXe+81Ih17zJHScNgtPSKtkF9LiHHs UYelL3/p8+mySz+Vxrz0ioQ0t5jWD8IhblUb++LL0j5Zmz718QskXDpYWifL06+v/7Np6Xzt6i+l Ky67SMK8FrbIhs/BDARGaC5xuxkVZ7AWysccfWTaZ889Uj9pLaFZhNbT82PHppNPPMGOw3GE6cZb brejVCefeHz6xlf/MX3+8kvTStk3+sGP/69p9ezSooXVJez3cDPYHnsMS5dd8sm03957Spj1oDSf xqfjjz0qXXrJJ1I3CXJuu+vexGJ+J/EneGwvIoo69eTTz6YxyuMF55+bvq78fEiL/b+MeiK9IgEa 4c2bN5XmSl1aKw0i7CwNlHbb5ZdelM4+6zTVzZfSo48/WdRNRGNy9uO4Z0kL6S7RhGDmKyq/qz5/ ubSCFqX7JPCIuur88sNG1JrefXqmFsojGngcD8Qh0MO+0OWXXZK+IRrRsFu7dn3qoWOEtKumEgIe eMB+6VjVpz12G1bUJ6cH4Vx3wXXo4JpatEXS6aWjjGjbLF6+zI78naP8fP7yS1Kz5s0lVLotbZJ2 D8exygwpFsKYPn36pP4S2lJ+hxx0oNUzNHa2qg4iit60eZNsie2ZvnD5ZRKGHZwe+stjaZwEXdTr O1QWt95xj4Q3J6arv3Sl2vxH019GPpbukpF2jnr98cabTND5T1ddoTr5BeWvm46UbpXAaH76wU9/ bhp6V37uMzKYfWVqK9p/rjaySIIYp9PpQ8OOo3vQiGD12KMPS60kCJ0yZZoEihNVn19KM6Tt1FKa aPBsizS0LrzgwyZo5UbA+x54WMf+9rM0rpDwaJrqKHng9rlzJdQcMXxYWrRwSTrowP1MOwvts64S dnGk7+zTP5T+IKH1amkOfVnlffWVV5i23UYJveDjWgmI161fZ9pcMNMFypRGUWm8MjTwLa9G18iB Rg40cqCRA40caORAIwcaOdDIgfcNB5jLMoutzGh9IVi9JoJc1gFygPMXLt4dTf0JMXARFnHyJxPo wBH+4Zf78x5/AZc/a2EJM4JzIL0DF5P2mqDtfzaEqCHoIDzC+I6/8OMZBNTC58T5CjKPVXmP+OFT i4fvgImwWgbFd8CBC7/w5xsBTB5ufuZfnmZzL4Q1zaUJgdYQR0DGTZhgC3eu7H5Z2iDYr+HYxjAJ TVhMD+jfPy2RHZRWOrKFEIKjKFUuo6KftEo4OmNO5FBl0W7A9os7t1d0170P6JOwXdOkKW9o0b9a ML1M02XNmjW2ICV3kxW2UsfZ0Kg47NCDS00fTNw2MQz6KbIdwir8naNBmPnIj8Wr/ux4iRbZEooN FG1o9+wlLYZDdPsUC0zXRvFGRUN6Zdxr6bEnnkwflZDoqCO00NWiliN1Ye8FnMOkicRNaqRInhFq 7L3XXqm1jh5xLAfc/x977wG4VXHl/Q9NUDqoIIiCCPbee8GusZfE2Lvp2exm/1vz7rvZzWazMZve jMYWsfcee+8KVoqgdEGKSG//7+fMPffOc3/PD9Dohs07A79n2pkzZ75T7sy5M3O5n4jjZNxhxFmk LXQ8jMV9Px25u/GW20LXLl3Cuto18+Zbo3U/zRLtXumj+hhh+eylL6t17NjBju18/csXGh6nnnKC iqm8VLzpukB73Lhxxv9iKWo4EmdHEQswKFM3he0opQHl54jfHrvubHW8jb7uBRaddHTq/LPOCKee cmK4UF/9QnZ2q2yje5c+d8Sh9mU2dmKcetJJYZR2Yz2or4FxNG0vlY2dJezyOFJKJu5/OvpI7SzR 7pkDpCA7UAqpww4eJvc+totlnhbuYE4lFeJZS+Y435577moXfK+n3UIcXwQTFC8zdQQSw9fhuC+I 3W5DBw8Kxx19pHYVbaf7no4M3aXY4jhYNNSCuBdNAMVHH/H8ui4PJw8Uehx37NZNChvxjvdDiZ4k ZimhbMq+kZQxppVROwNH7pBaqqNY7HZaKAXO+WedHraVwm0DHdlCUcpdPzvoone+ZjZk00FFe4qi 0FZQ5AyVskvs9UeGK6xNoEzpJMXQiccfFXbfdZcw7ID97PgfO7EW6AiZCVSUDjcyc8/RACmz6Mc7 7bhd2FNKX+qWe5AWL1oa9pb/sIMPDDtL0XqMds5wbG6Wdo4tUF+/+dY7TDnctUtnu6y7neTu1UM7 ALWzjiOFnMTiC39va8dUJymSL7rg7EB/ffDBh3WUdIKOxG1mxww5jskRL46oTtAfu6aiAfw2qpdu 2rW4pykvx77zLuOULnl/Mmyp9t9OxxGfkkKYsNe1+2nTTTbRMT4pMwULfeWvvvEVYbC9HX+kzXTp 3MWUo4LMjjVyxxZKvpe0gxHl4xztnoLP8cceZconWgFHJkeprrqonBdfcI5dWg4O+wibH37vX8OZ p3+hqKMobwmxZCcfN4w52WQEMgIZgYxARiAjkBHICGQE1jwEtKrQvJX1TzV9ZbURw5LAuEaMC4tI ULk9qdskhyb1p27i3TQLT8OcD7bn62ndht7pPAy7NT718DRNU/fqHj2rC+gZsRpwNxngTgV2P2Eo iHxVJGdT4/Rup0QuA3GeL2EeDq37ofE/DyO+NFJqNCisILIEdvdGylL3rGgnDDshuOPmjzomc/YZ XwwvvTxCCZbbopKFJruLWCi++NJL9unwWVqEcam1fymqzLiRtRapUQwWaY6e35+EfoBjZxMn6I4Z LfZfePllFTwWvY+O9XC/DqvEQw7cP7z48qvaLXOVPiU+IhyuHS27aceBGfFABjal2EKuWM05gEZD wRtgLEWJoYXMficNF3aziDc/aelpWJLlbe0e4U6ULbX7CS7QeRmNa8GLMuJkkYux3SLIJkxxE889 Nrgh4V4WzHQpKrizhi9lPaWjeMtEjxpsM93Fwk4LFBrUF4qBDXQEh50nLOQpP0eojjnqyHDrnXeF f/n3H4QDdIzw8EMPMqUScppRWewDUlY+LvWNFxgTt3yp8urQVvyXhc5aSPfr11fiqhxSGnAv0hwd 9dlkk42lIFzLFCQsxjfaeENT4IzVHTEYLl2mnpfryJsbdsJ00B04KH/crNNpbdEJPxU+QlTI55Z2 wQyRooD8USRw/I4dKgC6vNACcilylZ/yFC0Gedn5Y5dHxxD9Qm2qGGot9NJRPHY6vaYdNY8/+UxY IAUCSivrepLB2iu8cMnPzjOUalyGjAFPFIccDUNR9rNf/CbsssuOUqIdHob06GE0Xl7uA0I26g6O ceQmh1hyju9RJAuJQaKPWHHRNmnJq7OOt9EGyz4HbYEXfQljlzdTt0k6ougPjg90HaQcRoFJumlS Ps3SUbxeOoL2qI6Y0b5AaicpM/tpZyHHHo+T8u2yK64J3//hT2w33FFHHmIYcwdQp46ddJfVWNtV Bi6LdE/RoVIGdlZ7Jc9KTOEnPwpKlH7PPf9i2HefPTXWvGoKmquuHi5F0fM6kniiHWfbXzvq2quP oMjh3q7tt9nKLqB/aMKj4SPtUly0eKHJDwhgvKV246HMu/f+h2wX5FPPPhe6dO1su8boOxwru1J3 Rv37Dy4J+0iBiSKT+4zAsJPa4y4772jypTglwlteBrcKZDvKvHMDaDYZgYxARiAjkBHICGQEMgIZ gTUFASbgDUYBpj2q1kRJdLGisJWFu30Kjx0XQDFBGk4I9B6G2/0eV+fn4Z4Gv5s0DHfdpPFpXJon 4Z5nStPCvbqKImdWz9zDnXFd4NTfoJtQAo+rCw4vp63H1dPgdxqXxf3wcXrcbixeCoiGOE9sC02n LGwWnrxhP1C7Fn6gheCLL7wSHnniybCrdpmgrGGh9kfdpXOpjkOxEDtUuxK4x+Qe3SHifGFl+hQF mO15FFL4ES+jEwEXK7eRTd4sTNfXTpoLzz1Li86O9ka/nZQQbaRc4Gtpm2lXwb/8w7d19839JgeL yX/++78Ohx4yTFfwsMi2Iot1JY253GsLOvdEwaLKoEhBFHKWC7+E1lEsgjgyx24GLi5mdQ+eLLZJ qiJZGDnA35IUP8bGaMzVUHGQxFD1QikiOG63ycAtwld03IhuSXdmhwfKApQ0XEqMQcEQjThIFi4k 5qgOR9M4pnPlNcPDiJGvh+9995/tomZbAENKIs/UPM6l8rRQgIkEhVWlFItM4Alt/HpUUXwKg+bD jbGV3wCKgR5E1ZW54ijwRHF20223h1tuu8t2Ow3TkbV5Ug7cfd8DzjW2M7Etq81jHJYSVWNc+vga 26uvjQg/uOQnduwLZdoW2tn1nI65uZLAikAy6hi+haDmxqs/aHfZacfwf//p73Rk7d7wiI5mPivl x7/+899LmbIbqUrhaCfRiCl8xaEKoT8UsbJL0hhUAgR8omzEy7igYooGnkDvfkLNrwwS+BUIhcLU z+hD7LLiK31f+9IF1h9hwG4gjo6hzDz8kIO006y/3Ql1z/0PCKsXwyX/8V3Y6/jY2uG0U07W0bd+ pgzkgnzScsE5aVMDZnzdj2NiI994MzwuxRTY7KFdU9zvxP1YTz/znB0l3GWn7Q1j2v4zqptLfvpL fWGwr77Od0hgZ+JjOpqIshpZaYOMYYcccqDV65NS/j362BO2c42Lt7lXid2R7Ha67a57wu06dsiR 10t0JxJ3c5Gecc7bcSkzMKUYm58gr72SMjsyAhmBjEBGICOQEcgIZAQyAmsGAj6HtSkrHv0VYeks lvVlYogqiMulikdb6sKT0hHkcc6a1Vga5jyL5BbnPDwM29OkYamb+DRd3Z/GpemauhtK3pSiZaAX MI1xod0mzgUhzP88jHinTfl5GOCl4dBjPJ44j09t4t2f0ns6wohfUav0MlXJoJaCIxscTeEummtv vEm7JMaEgw/YH362yLr6D9fZ3Sjf0HGd/bVTpWvX7qbQqRbAIgRt5Z6uodpLecGilDtkfDFmn9gW HYte7igZNHBgGK9jKBN1bIU3/xwp6qD7Zzh2xsKSC5W5NPpbX/9K+PY3v6aLcD8Mjz35tBQ02uky fbrtZmC3U7X0RmoZ5WF/DbBaTPHDARIRQYcRJuS3YCH3lqTlUERBw9GjhVLUvPLya/Z1LRIt0iKU HQ1gEY9RxcSWvWQ0XmiTZHyZT9nNb/FKV4DWS7tR+LrZW6NG6ctqMyMewoT7XfiqE/IVSSy9/5B+ ki76ffKZZ8KRhx8a/vU7/2iKv8eF02R9Qcs+Yx9zjEks+yhDy07iskXbv0K3no7CjdGlynM/0tel lB9NaKwug+aLZFvqC2aYaqGdNLDIxnb6GFGkjL8FLga+0YG1vvyli5uvuuZ621n1ja9ebMev2KGC fqNgF9ODG1lhu2lZICMpo9Umb7vzHl3+/GY4/5wzdAzrSPu6lx0zlELF6lDs7BPr7idXsrB8Yn1B f6/uyBm48QC7N4fLxvnq2rPPvehZmaJk0eIlhYiVjAk61m3QFFn7KVI6pbULxbkBdb/TKYZVceaX fChnFitPN8ZDnhJquWOYuKk9rbtub7sc/HXhwSXT9D+OlqIk4ut7HNe694EH7W4wLq8//dSTw0jd WTbqnbH6ct3mdnTvrdGj7W4k0nbUkVSOri7UziKvFyuPRKX+2O21m5TQ7+mS6Zt05G0HXUKOkgdl 0TIRDL/xFu0g6h0GDRxo7R0eN+oOpfG6k+ji8861XXLraYcRSlWDpqh7yrKP7v5irLhS49WkyVPD sP33sXGHL7nd9+DDdgTwX1QGjq++okvnR416x3ZWIe8o3YM0Qzv6HC/HLzawwucVU0VmV0YgI5AR yAhkBDICGYGMQEZgzUKAOatNlFkrVBPY2sohzrWbS+6kbqdUaVjqdhrPsFkcNMSnca25ndb51dMR v7K0xLdqmiwZW6X1jD0zF4gE7nabMOjw+18ahttpU9vdxKcGXv5HuMvgttN6emx3exy207ep7ygq Y0RhSgpLrZ+CC8qAARv2D7vtvFN44MFH7B6hwZsM1KJT95OQmRaNy3Q0adToMXaHyTO6S2TpksX6 3P1suzOET4dzjwyLVDumpHuGMH026BM66ljZXXffbxcT8xUsPvvO/bqTpMCA/vDDDrJV7K8uvcze 8r+tPJ7RzozrbrzVlEXXXHujvhz1kH1ivlv3rrrnpLt91YtV5w033R7+4Tv/qi9kjbIdNZaplcmh sJDiJ+6qmDhpksnMTiY+Q84n3zFc8LxYi1su6aacU6dNLxfUxKOk4TPxXKB8/S236utN95uygXtV ZujepvkLFtqxsek6ygMufJGNz7t/pIX25ClT7UiOu3UIxxQ/095/X3yFmY5VcVcOux+4tJkLoX/z uyt0L9FIU4Q9/tTT9kUxLtOeogt7l0gRMFdHpfg0PPXCMaJ333sv/OxXvwtjxoy1i3l79+xhX4ji C1zVnhMUEvG+man67Dz4T9c9U8jMAvl9HTFDIcXn4idroW2Xjiv1uroU+JijDtfXsiaEe+75o9Xd 69oRcofqla958aU2jhxNnjLFjqVxmTW4cpH5dB2l4zjbdPHmqCFf3pqpi5pRrkVcFinvqqtSfShh +AQ9PN8cNdq+lsbF1hyD5F4s2hs8p06ZFriQmM/M87UtysNXwhYtWaJyfGRtEX7WJKjEwoAHO7D4 Ehb3Cz2hnS1zdP/VPKvD6bZ7abK+hIZS84OZs+3yZdo3994sWbLI6pUvml162VV2dI0231OXUveU om8DtXkM91ehROSSZj7/Tl27EsJkEt7UOfw5KjZN9cH9Q3wGfqZkAZ8pCmOnC1jO0fEwPgs/acpk w9h5kVdU262QYrGTXbj+gnb8oNR7b8JEtS3qebkpHsGN3TVTJQs70vjyF3FHHH6wfUr+0suvlhLo Tfuy3YPaRciX8fia3c/Vrl54+RXDuKfaFV/R692jl+4K2zUM0I6cK/U1vEd1RJC+y5cNb9DXxd7T 3UXsBmIAqcacePxs9112lvKzjR3943J3DF9b5E4ldgrtKYUPu+dQLtsfBBqDxo4fF+tLO4bm69Lw efNUxyoDhqN+G+lOtH323MN2JfHFNI5j0t5nz5kVfv7LS002vvjXS2XgMvmevbpbWr789+1//E64 UzvxWijZjcIxLjzNhpciKlsZgYxARiAjkBHICGQEMgIZgT8fAulEFXflr6+JChk92O1UdML4q5hU /mb0TtcsHXzTePen/Fvj6elIg3F/Sp+6I9VKfld1Z5Anhakzdpu41I0wqR/3qvzwwLAK9vSeLrV9 lYztbuJTt+dFmLvrPDyuzSmnnLLHFltssZ3tQFGCMomnLMJcKLx8PYjF9+gx74SzTj81DB48yBaR 3KWj9Vp4XZ+7f+vtMaYsaNe+ne50mW+7jNZdd11b/KNgQrHEDgp2BKB46iYlxXsTJugI1Bu6mPlt U6gs0UKVxSoXAXOvyFY69tNe/FAi8Wn511573RaQXFbL571HyE/eH0hB8NjjT2th2s+OWHGJ9N33 3adPoo+2O4u4ZyneHQLY2vVRFs58hNguhBt0KfNIHcnqoEt5WXz36NlNR702lnJkiSmcJminAxf0 gh1KkBVotcBNIPSQIoBF5ltvjtLn60eInjLNNMUE9+WsrXtkPpDS6FkpmzB2cbKO2jykY0kThAOr Vug4wsdRm7vv/6P82gEipVv3Ht10IfHGYaCO1aA4eE4KhhHChPKTD1/IQs6bb7tTSgcpdvQPLIfo qBk7sWZK4cBRHpQWo7TDg7o67pijwt577maLba96lEoo67hEfL52YpEXSo2hQ4aEB/RVsZelEICG OPLsq/uiMEOH6Atj2nHy7PMvSIHxfnj6ueetDi++4Fw7SvS+lA833qovmX0wy47Lcc8Ui3SOZS1Y yJ0yS/XZ8iHKe3zg8+coN2grQzbd1I6AoRDwbsK9OOxkYWfVqLfHmsIDxYEpsVTm/rosmrpgp8kU KbSonx5du+l41AbC5w5TIBHWRTtcNhuq3U5eeOWAgmVt8edLWuA6TjtV4q6wJXYPV0fdudNFd0Tx BbTZs+aozejOJvknSOmCsgSlFgopvhb3mpRl3FEE5k/oTqltt94ynHLScbYrh109b6rdvqtdRnzN CyG4vJx2hQHjZ4Xho088JbzYubfE+hwKOLvUWb2ZPrLdNtvY3VxPPfOcpVkoZdbmujCdi6cjZnDj uJcUa1I0oTR9V234vYkTTUn32htvGW70bXDjTqEbb75d9TvfFE/rS2Fy0LD9i7p9UcrPN8IrI0eo XO/YVw+5H+sxtSuUTpO06+85fVFuHykGj5RyiWNk6/Xupf45Krzw0svh9dffDi+NeNXaM8ogvuhW KSmRMxouGx+hL53xZbJTTjzOFErU78zZs6w/nXfWaXaPFFixG44v3KHQe1N9ZjyKZpWFy8NRrHVc u6N2Ng3VRe46qtq+fViwaKEpe7/51S/ZF+TAaIF2vaGAmqivKdIPn1c9oqDivrO1NL6NVB+7T7vD OF63j74gaLvLXNjSrhoRx/kqX0mQHRmBjEBGICOQEcgIZAQyAhmBNQCBOFMtr39pMnFlLaL7d0dc d911T0tgX4i57WVgmUIYHLDjQqaiV5CFY6fG06Rh8HBJ4OPulAY3aVPjdGl4szDSeHiavql7dQmb 0TULq2fuNKlNAVxhk9JDwx9xmLrf06ThTu82NE7Xmo1yrN2tt9769WOOOeYMFpqVifUVfz0U1hFz FtAcwRj7zriwuRbva2kxzSKLcHaw8BlwdlTwRadBgwZKoTTWjqZwjxFfumInBzZ37PAmn69nkZZF 9OtvvGGL3CFDNrVP0E+cPEkLZr4QNsR20bAgHPvO+DBBi1sWvKRnRxMLv/FaZI/Tzg+UDezY4M4i djSQBvqJOnK1vb6yxW4K5I1qoVgmL6Xb5InCik+M0znY9cOnvgcM6G+Lz9E6SsWxJ47PID/HcqrF uCpN5QGxsVJ2oEyCbuimg/XZ7bmmqGFXEhfwctSlnXZMcAdTfy0+p06bajs4xEyp2wR2O3BBM7ub OrTvYAoBLuzlDhXDW8ok8J2kHTqdlEc/KUBQErFDBwUTO7zsUmPZW0ppgGIFBcKbUqzw6XHK1l+f WUc23F4GcudIFZ+lf2fcuJi3MOiunVpDVeejRo2x40ekQYkzUDs0+vRZz9KzYAc3do1M0W4bLtIe PHgT1VUfw45jSizmScvOn95SIHSTMg+lFHdN2d1LgwbZrqKqrSw1BRRfw3IZqStknI/SQ0qOeVJY ceSvf/++GszGmHKgr74Cx46QN956y/BaLmVe125djA7lEry42Llrl3XEf1NYmkE5xb08ItAOmnds 11QPKf62lDJkstovu4ZoR310zG6cdmhx5A+lBOWgn8ydO087kVA4rgibCS+OPr4nOnai9VJ5t9x8 c7tAmbohHUokdletrV11/VWH7MzyclLPtG0UjShKUeQMHjQwsOOFHWXtlPdyKV5RLoEXdQa28KXf dBb+8PIeHNvNElP0olCjfrg/iB1LHQr86VfsfEK56nXCkULa1gK1H+qWHUjwHiDMN1K/WKr+/Pao sbrEXm1YeYMNMsULw+POr3cnSBmmemac4FgYSrS19aW8eCm3SxhHGnz8jXv3XeurlJm+jPwog9lF RZ2hwAFH2jrxb48ZE97Xbrp1pYTma3FxZ+BsU3Juttmm4tnGLoi/9vqbAjvwfvT9fzNcQWip5CL9 VJVBrEJfXQS/hcaRDjoGR1tgpx6KasYc2laso0ru0qUOJDEldzYZgYxARiAjkBHICGQEMgIZgf8F CNhEtpzNlgKzGeSWW2658vjjj/+xAvVFIpviumII2/+Y+tbd9TD8Hian0XtY3SY+DXN/M7tZWFoY +NQN8ci7UgPR6hjo0gxJ4/46j9Tvbmx3kxaDIgfj4U7TzHZabI93d2qnbuhQCmGn4bjb3nTTTd9U pZ+OogiCOoIWVvxE1YqIZFis+WLUF7SkZeFOuBsWjJVfHEREWjekhQYDncdFnlq6FUeNoCHM8/X0 2B7HIjoWM8ai7OGYCbk5b6eNFM1+rbDKhzTtGwhc1roMLE45nlOVKiazfKXAcoM83OfSmmkWz3Ei jlY5DpZWOKAsaIY38f41qgr3mKOXvS5/TKM6oHK8FSCmvNxzw9Gr1KAQaC+lVWrAgD839TxMIVJ8 oaseRxouv07zgRd0/Llx+d0fZYWurdWvhUtm6tzLTp3By/2eFl71MLDGOApOixLSTT0dvFs7gtRa GsJRkHHPDqVDccHOOzcoTSKWMZZ+h7KmAQvKKIVcaqJs3sVjTIVZUaFFgmZ1kPJqjlv8aliztPGC 58a+D78q/8g9xdLjUaZVtQwaKOkUS0XIeBqvHyLiBdrxy3s2LojO6k3tBazcpPWF3FN0tJNjhOxU +uGPf6ZdSseHw3SxNUcoDW3R1NtFWgYvOzsS/ZJ4mqh1HeNQCO0CZDsjkBHICGQEMgIZgYxARiAj sEYjoMksR2z0P53X2txagSiKbrvttiuPPfbYuqKIxR9kbvvXabAJT+OcJrVFUqZ1ereJczc2Bpv0 LHiwMR7nbl9FpOH1OPxu6nQeXtrVSrAMauqAEZmnplkY8Z7pyui9IE7jtvP3eF+pN8uLMI/3dM3o PK7BThe5LrATlH5zoKRRjAfqgtilS1nCVoBYtFZMvqDzOPdHvh4afSwKo/iVwshiSjJvA5GeFVnF rxIIPkt1B48JWAXHY2X6zjuLvdZNkqAoEYtP/2JZma44o0YcO4xI5aZ0l3IXrR7lQ8Je68sGk5Bb uHRJJcYRG76chhKqllBksGWRvaJQcBgD+4n14jjZwtuaCMzFvgFDC0p+4qJdJFAa/+UF/4pP9TU3 SwitMK5aQrM8SoSK/IvxwwalGLec+kv8jRwtp/hTRlBOpaU8xdflnMrLjh/yBozIToHQxDI50lCn pYj+el1H3qUQptSpsCE8MQVZKg+xiBBLHcvg8RUfxfqALVqO/RnGpkGBg+RfHhVb0cev6gW60hQF LfhUwcqzKH9VijI2OhK5Sxr4gFiT9kOM1YO1lUp2gmOZ+I2YE5aaQsoED8VGhnJQpljOChu1e3Wk qEwTRRQrpk9kc74oNhljOnRoH0a++Wb44Y9+ZsddOQ63p45b2gXzCCQ+K9rEcQ1vM+O4VXERD6+r MtwwR4JsMgIZgYxARiAjkBHICGQEMgJrIgI+W9aKSpNcvYq1eb5NquVvMpMtZt1xpl4rkcexaHXG TkIcxm3c0KQL3Lo/pYXeTZ23h0PPn/PBduNpPN55u+10Te26oqUpkQI9kzS+WRjxhPtfSl93Q4Np xqdemGb8PL3TOi/nl8YTl9LRGEqAInO8MYh3+9EUJCVlbEjEOQVuj3Y+cWlIuFNB4e6YggZZpSSs 8CVk5OYmutzvNmkSPgTrz2LhU25PqOidX7SLBGVgQad0FTopn8ZSWDJnbavWyKgsguKcD2ERl5jg z4pxFLMQ3wtQ4GboGXglVSPGiqNcxBpZpK24lMkKBzFpbOH+1DCu6gpJ1hiMEaYwzdtxxK2iSdtx TGxIGVmkTVH0dNEmJo0t3J8BxuTXOsbKtxz214SxIuLGrrWN+2+o46fb2RcDLzr3rNC1OJZnSH1G GINVNhmBjEBGICOQEcgIZAQyAhmBNQsBXzf4fN3XDlFKj8UnlQEz5TipjtH84sekcSlNAwvRuR+b vzS9+z29x4mshXHaNAL6NG1r6Un7sczq7iiCqQvgGbigddvj62lcaOfjfpZWqcLKw52v86v7CSfM V5jONw1L3Smd52G8IfL6ignUaIybs4zkxeGQMo0rO+LC0VuAaGEiy8KNRUxfBBdAxuVzTBtFM9JS EqVHCItKU5bsW/Kx42qVesoEjVIUu6KII8fIL/7GUuD2XCD2MkUe/KaSJnxEuzp8oDFQ9ItbettP F+Plwkr/vQwRy7Skny3G5Ef+aMYyxlU9GCyfpB0bjqR2E9vpnxtjpPEe1rQd2/ZDmoL3M8fCWoiF Rh78KqxosNaLIPkM2jG7CjcdPCj809/9lR0v66R7h6rdSqUIJo9Jyc9qtWMJrzEnjgBKUxofE8qA 7MgIZAQyAhmBjEBGICOQEcgIrBEItLpeZC1dW4MUm0ua7RaiLLBydthubDYtD7b/OR005atluZ0H 4Z4Ot5tmfD0O29OTFpPS43aeabyHWYLWflg9r65JMyWNZ5ba7ibehXZaT+8CE45pTYZm4Sn/mLrx 1+M9D/z+10hZ87mwziBqMSAqQyLq8jrzxiJGhsanSGKWaZxinHOyhaY8bMKJy19SRZMWOiqrCIfK U0eJ8FmqlI+Oxbnx+JKzOeDOIi7y4jeli/IoMOEDv5JH6XYpW+FDIow6Wmrw8RdT4XGX20Ve8lZ0 nqriZCFFErPgk/otnxj2P4UxMkWgMsZA4S3EYKFuDKA/rR2vaRhTNjNrejsW/hzV7KRLyDlrzT1f RYWY+NSV9SkPNaBjO/aORRV6NRJd9quVjBUiyyYjkBHICGQEMgIZgYxARiAjsEYhUM1r5eK/Jre2 1q7NaxG62FGULm0suCiQs/Iw99tsuqBxN3HNDOF1/ildPZ37U74e5naa3t1O7/5V2isTamWJycgz SwXyMNK2Fk5cSue8nN7j3IbeTbMwj8MmHj4pL8I8XE5zt+DTkEiexrfkIk84ElcxcLULrGuZt+AT aey3kCjuZiMk8nFVTyqPxSZKF+IsOT8JnxXlboaopnQe2NFIbtOSxpCUj5VXAciTlqhgb8ktlf3A hyDzmGV0+kmxSVFy6iKF6YgsT+PMjyWOvhof4jwdBLjdH3VE5N7EECzCCrqMcQVcY139yRiX8H9a GFd8vL69zpF1TWjHyNO0/bmgf2o7TvhYO/4TMCYpF6uDG0LHsWLVGHtPs7KKR3yQWsHEaxVjRSlv dmQEMgIZgYxARiAjkBHICGQE1hwEWCaawaGJbnrCzKfgxOtjL1D4n0e57WzcJgluj8fvxpf5aTxu /4PO0xHmxuM9zPmk8bhJ67Qeh+3p6u6Upqn7kyqKSNesIB62KkG8IE7fzF8X2Gk9PC20x7ntce7H TsPapJdZO8PSFqUTExY1jNEVaZL9PbZYiqHlr1ZTlh4+LkEZiSMJFK35Cj4eQ/oVzqeWxGVr4A2f IgLL+ZC0wcTMLMj5ROIihctTJCK0pCPMPQWfhF2RacSG8MpFwpoRn1T+zxbjQrRPC2NkV3Gs7EWx qKvSJKCUoRZWpPhLxNjx+LQwFrr/OzEWEFbp3jpWMVaI2Mj1k/YHa0sNfGLrik2rERvIVjVWNLRW 2l/BG8slJYdPtR3DMJuMQEYgI5ARyAhkBDICGYGMwBqJQDILLtdycZ7t4hYfkYGQP586u+1kCSML Ip6/1DTTu5DOw50/aVJ+uP2PuDq903p+Tut+0rhxWvev1PaMVkqkyHpG+PnzzOoCpXH1tOTlYW4T hvF0Hu52jG389byhSelwp3GkSuPx10yhrGkRCqO0sdTZyF82qiSxVnwuQPOcG/mYr0xQ8eGOoibB FcGn5GqUpiXTlcmQpm3uTkNrvJOoylm5SupmAqTYNElSr3IjacLnE2HcCp9S3iaOpiImdE1YlrFp 2ubuNLRMFh1JVOWsXCV1MwH+nBiXglUOu7Or8rZwNSlVA02zIjpBmra5Ow31VIWdRFXOylVSNxUg 6eNNknx67bgp81I0d3yWGHse2c4IZAQyAhmBjEBGICOQEcgI/PkRKObH5Xq+1flyGoGbWX1qp+60 WB5OGG6Mp8VNmIe73WzF4HFO7/6UF/zcsOvI+bhNHOlSP2GtmtVVFDlDt2GI2zNDGHence7GTg1p U17Eud8L7mGeTxpOXD0/wtyktCldGe+fmCagVAa5BIUdM05ZxUydSVzirS6EnirbGYGMQEYgI5AR yAhkBDICGYGMQEYgI5ARyAj8eRCIC35b6evleNz8QVjUANRk8kBsTKogSBN5PDRpOP5VGefpNvTw wO+8CMPU84mhVXhdQeF8nG617DqTVSVKBXdaF979qZ0WIg1vjU8zmtb4e4HdTtOm+TaNT4+elcJ4 TrJTBs6YsOT9v2pNIXYBTjNqT5XtjEBGICOQEcgIZAQyAhmBjEBGICOQEcgIZATWDATiiaJybS9l kekEWl/bs+B3tYEv/vH7n8d7HMUkLvUT1sykdHV6/PylNM14EAYNxu3oa/TX45ymhb26iqKUYV34 lGmdDr8XzOnSwnpYM3tl+UDvvOtp03Tu9jyddoU+Ge1xRVjRTIoSoFisTAysfuXyeLOLRFWC7MoI ZAQyAhmBjEBGICOQEcgIZAQyAhmBjEBGYA1CwJfx1do+CmfhHlnIm24uSYqQLv5rKUodBTT1OGdR D8fvYSlvd7vt6VdmO586jYe7XY9v4V9dRVHKcHUKDb0XyG3P3G/qTnl6XD0s5eM0bntcyj91Ox02 4Q1xLSs9XipbaRXT5GSViia3uK0IXpSUNrszAhmBjEBGICOQEcgIZAQyAhmBjEBGICOQEVjTEDCl QINmoHUJ0+tqCipXDDgHbFcUYOP3O4Kcpki6UstpnRfEqbue2Ond9vjU7/KkfIhP/Z6uhb26iiJP 6EzJwDNJhXF3Pc6FhE/Kw/m6nab3MKd3uxnvOi006Z+nTekatDxOsGJFQ3CkN6nsx9PbMcaoVKq+ WlRGZkdGICOQEcgIZAQyAhmBjEBGICOQEcgIZAQyAmseAr74LyVTgIUVa/sivNhc4ooA1y8Q6xyw 03j8aVxKi9tpnSb1p/xTWtwYT1N3W2QS7zydzv2e3v2erqn9cRVFzZh4hi6I0yBAGlfPy+OaCQot 4R7nbtJ4nJzG32la83s+xGOMXtrBBnm8SbRpUyePifiNXwQq1EMFGacbzdl6sopBdmUEMgIZgYxA RiAjkBHICGQEMgIZgYxARiAj8OdDwLQLLOCLRTxfPrP/5fmiZrL5ip/U7oYOdxrmcYRh3MbttB7m tB6H7bw8zmmx/c/joHdTT9dkB4yTrtpuUJasmtwoUqFcaCJcaGdTp3Paup3SeVoKlcoGDX9pHp7O bdISX/d7ODbG+LRr187liKEWXFxiZSHxgitzFhxXtCXJcsukSJStjEBGICOQEcgIZAQyAhmBjEBG ICOQEcgIZAT+tyCApqFY25vINc2AF6PJ0TOPSvUO9dSpP6XztHV9heknPFK2+52P06e28yUsDU+V Q4Q7D9h7GtyrNKkyZlXEnpFn5gJ5OvxOQ5jTpfG4yTMVss4HmpQPfuj9D78bzyPlkfJ2uhbxjZdZ e7TvKyIZSiMPj2xWNLkFvZHCs8t2RiAjkBHICGQEMgIZgYxARiAjkBHICGQEMgJrFgJSF5hmIVEb 4JSpr+2Lo2f14EgcudSTOVO3SVtw92QNfuJR7jTLIw2Dh/N0Rs43tVP9Tp2+mSzOq4WdMmoR2UqA C+wC1ck8Htvd0Dh9XWAPr/NJ/c7LbY/DT3rnUeftdB7u6Z3e4uM+IqIaBYZtSSiHb0SLlEaefzIC GYGMQEYgI5ARyAhkBDICGYGMQEYgI5AR+F+BgK/mtbr3xb4H1eTXRhFinKoWa7oO4vhrxmFl6eDl aTwPbA/ztG6nehvCPDzlg7senvpxO39oV2rSDFdKqEjPxO1m9GkcbvevSiCng2edFr/HpzyhxZ/S u7tZOGG+FatNevSMiMiqclmQflw5lOZSMvfcjM5TZDsjkBHICGQEMgIZgYxARiAjkBHICGQEMgIZ gTUZAVMD2Zo+WdgnAktR5Ev/qCiIcU7scfhxu99pPTzhWOo1CPM0Hp/662mdJ7TEpfFpOo/Hbmag Je0qzcdRFDVjlgrcLD4VInWvLF09zgvjdsondXv+Tuc24bgxTr8iPXrmgR6N38KKCE/s8TCysCIC q6IhNpuMQEYgI5ARyAhkBDICGYGMQEYgI5ARyAhkBNZMBLTYZ72vhXybZGtRev1McfSsLn596Y+/ 0BwYKe6633mk4YS15neeaXzq9rTQ8ed6HfcT76aeDppVGme4KkKYpRk48zSsGY9U0JWlcT5uO6+6 n3Dnk/J2+tbsFnzSSneGMbEOoonawoofEkeaRkpvROkV2K0JkMMzAhmBjEBGICOQEcgIZAQyAhmB jEBGICOQEVgTENDavlje274hE4kVvh9CKmWEqoU+oYj1OLcJLrgaRaVKKBLU4qvQ6PK0Hzed80nl dLfLlvqdvlV7dRVFdUHxe0atMfd4T+t+F5R0HuY8HJhm/pQWt/9BW4+rh+HHlHSt32CuxlGXwhNW LahgVhC2KQ+oWXj+yQhkBDICGYGMQEYgI5ARyAhkBDICGYGMQEZgTUOgWMMna/uGjR9a27tJTyF5 mGwnwOYPhm7LWcYTXmRGcOn29BZY/HiY22lc6m4WT5jnk8Z7GOlTWVKalHeDe3UVRSSqM0wzJr7u T9O0ljYVGPrUNOPn8R7XzE7D3E06ZHB/Gxl3O0+zCTRhS4krMqUpaWMofv3JU1GVJNmREcgIZAQy AhmBjEBGICOQEcgIZAQyAhmBjMAag0Bc0/vannW8reV9qZ8s7AudQRJihXA/Nn+e0iKTH8LTOHd7 evzOw8Pcdjar8qc8SFOn9zyJS934V2o+jqJoZZmSCRmnmUOfpkndToeNDM3i6rJB4+nkbJqGcKdJ bdKmeaRu0lhkQwZ2sxUxzqZgIG9Fh6sFKxJlkxHICGQEMgIZgYxARiAjkBHICGQEMgIZgYzAGoYA K3xbxcvB9hE7H5TsMHJxi6+etaavgA1/btyfKgjcTRxu/uppUr1HGgff1vzO1/lBV6clfWo8TRrW qjsVqlWiViLIyAVzkjTzlQnqdM6D9F64NM75erzHuR/beaRx7oZn6oa+qWkrKhcYHVHD9jNYeKSO LBLnTGFvUVVAU/45MCOQEcgIZAQyAhmBjEBGICOQEcgIZAQyAhmBPy8C5dKd64ikEVlRfv7MbyGO 8hVfSndylv2uFYDAw1M3YU5Tj/dw6DEe7zbx7vZ4/M3+iMekPJ0uxsS4lJ+Hr5b9SRVFLpAXxv1p pgjl4XUB6+ncX6dL+bXmJm36B53z8zQt/Oll1hbJjxtJYaqgUhpFutucxZ1EliaqlDiVZt6CR9XE jFkMdR4lTeFIExZBblV8FOLpZTcqspx6ZXaTTD4RH/JwQar8WsiTZIcz8VaJ4NOSlcWXwUnCOp8K m4RPmTBmU3oTPokARV5JpCeQ3aJMntBp3C87BlV8StfK+CTpWzpbZtJCnjKTiG/iTdiJT0tWFl8G JwlxJl4ldV/Cp0wYsym9TlrjAVXFxzwEmVwtyhRjmv7GfKpMSpciPg6finkpeRnUgk+ZSca4BTYl ah/P0YLPGo5xKu+a2Y5b4p/KbLEZ4wjSJx4r1mCMa6KVo1qLOi9j1tDxuFYQef887djlEF4VZB5o dhn8/wDGzUH4JNhUEJb4AXDlqQjkKoP/RIxLPg3cK0+MrzIpXYpo0f6qZB/L1YJPmUmcVySlTfi2 LnkZU+OTeCv81gCMY6Eq6UpXxtigWZ15RVnnSQtp6SyRLWfuVH+L9tcy4f+bISk2gs42EpW30rSK GiBTHf5Xx84rweOxPQza1O1p0zDcpEkNYfU/4j2sTk8c+h3iMWl8XZ5IsZLf1VUUpZnUM3W/C+TZ 4SddM6E8rM6XtHU+hK3MeB5O4zw9f8I9zGkabItskasC4v+KFhoLwyFDQnPGHUYpn6qJWQIjL0tG miQYPsn1Rw208LEsCHWHbAt1f0xhvy2CFBDDKj4ljRwVnzK0OZ+GPCJtmgI+bdoSUoQaGNGHM8Wm YiXa+L8KwmVhCR/zr0EYF6KVQpt8EruwCS+Kb2X5tDAWwPyXKQT4jDHm3G5V1KRwHkiQ6lxSIZQV 2ttxWn6iPnY79jxIjCEvc1TtOM3j08K4BZ/PGONYLi9JWUgvbLSL4Ni+VCcRiIY2FiGqsCnAsvRV mQxA+6Fu29JfC14x0L0VH5cMuopPmsjTVLxTl1O6HfOhHVOO4vHzKWNMsWBpbMlYf590PI58jEEU PaJg7hI7y6+iiZEFiYIbTEn2yTC2Plnj6d7StoYibC2gCP2UMQbPPyfGEYdYNu8PJc4KjjGfDOOS T+IoUCyrnKgW/WEVGCNz0Rgb+Fg2JnORC3zMv5oYG4OYJqYrAsTHsYl1ZUwtcs0cj6PcBQrm+bgY k8ieWlVRI9MYEeNwrxRjT9KECcKpa7VNgE2cSZtAjqr9US9mZFdlKsI8ymk8WP4YVPFBbDMNfBoT Nvo8QZnMk5cRlTxFyiITfNEpV43px8M48jFe8HF22DwDEt7WR1IapFTCPwXjhH3JB7ZmkMEcnxzj 2K8LfrI8P7eJ+cQYJ/zgY8ZkLrgDqvlbwbhKEF0OJMmLdBbxGWNseUQUPLsYJBlaYBNjShwLb4OF +Bj6oePfgo+VyVoqTUgmLbAFKCRycn4x1EmL0I+JccqjIcs/BeOa6F6NDXmZ55O345JX4WiBSZ3g L8GvQpbtZhUYN/kAFhA5TG7Hpha7o4eBVNGKDDSnId7dbjsttqd3uxmNhzlNmp649LNtToNNnPtJ s1JTzNRXSkOkM3S7WVg942YFIF2djjCM8/Z0MTSGE1YPdz6k87SkSd34PV0avqJFpTu3GgdPTDCc 4tHFGGoMy21qRlHlhhhpjkW0WSUf+aS9hCxud0uSeMYaEdyZsjBK+HhgkZf78TKA2kDIqKLVk8e5 HZMqzgpVhDbhY3RFOMJ6erctH+WxbOlSRcdQJ3ca44HHI9xWUAMNfguIoUYmjKvhL02g2IKPy+AP DZhGPuT52WEs7hJB/yj/smUtykK8CfkpYEybXbaUfp9gU/rIR4Yox9btIphoNyvDmLKg/Fm2bKkw jHl5OrcNb2iWLgvLli9T8CowFm0zTkwUyzYK80LmT9YfyKHIxfnAU6aEwh2yXR63I6V+k7py8gYa PB7hNslKBtGxMoyNggSWSEwSPg1sFA8f8F6+fIXh3So2YmLsGhjgEXP4FOEoaWirixctCSvEU6yj KQlWxgeigrBIVyYr2JRlidlaaElj5ViuvBeH5WpfsR01Zl8mcLncVoTziSnkt4AYau1W7WmpylYa oixaTBI+ZTwOxUc+cjcdK5QwZgFB5SRtaSJNQmYxrdaVcChpSx444ENMEesyi97agMq2bFny7E9E I0VsJ4wTwiDh42wa8rQE5CnjBHI20OC3gBhqZM3GY4tWbMLH2BZy08dLjIvsGrFRwjLj1rHhZR9l XKpnzeIli01a51tm7Xw+JsZlMgTHOMNENKeJBPpdDYyRF7NU7d1Nnc+fgrHzBD/4kJ/9KeKTYGx8 nGmBQSMfGBcEawjGaV2p8FZ+7NSsPsZK1Zi0ZEM7ZurNXAcDWSM2CinroG0JkxGXP5HGIfS8GvnA uEiwBmLsorntba5Ff7Cxoix4LJMSWZ+QvZRxSsbT25xDz6RYVzFdS4wV7hkLvNIZyYvf1jEmr1TR Zwk+AcYNMnveMVvzNcpFBCExlDJhGmjweESrfEhU49MKxvB3fiZr8dy3OZ1YfJYYJ1lXhfwEGDfw SbCxcJXHngOLeQ4UpsAm1nHblnPyzxBjF6G0P02MkRtTYPA/OVbEjP+Sf2NnK/tDDeNaydNWSK14 zTgZ8YQ5HeHurtOmcbjrxumdn/OBzt1up2kJ8/C6jofwlG+arlV3+1ZjGiNcUM8gjW0W5vGpUGmY u+u2F47wNE8vrIcR77zrNnEYaEnnPBvSpkfPIDbjFLKdqUdhR0ZVjC2NaV0aACvskxSrw8cn3cYH Li5E5FMEN5EHOmQq8pY3TblcCVewYDLZIq92bSOMMWUMa0wFk/jgjWVN5HHmsqs4xSuf6TM+CO+/ /35YsHBR2HbrLUPHjh3tIURZnNZzK4Us+MA2NZGe3xizWhirjIu08Pxo3rzQrVvX0L59e633SF/w +YwwtvJpYTp7zpwwffqMMO39GWG7bbY0GVjUV8ZlIUTuj4Ex9cfDcMrUacJ4eui0dqew9ZZbSGmw 3ND9tDGmucydOy+8P+P98P60GWHTTQeF9ddbTwoF8ouGh/DChQvDVMkzder7oW+f9cKgjTcOtDmr ePFArqqlWKmtNqqapWm2CUu02Ptw7tzQtUuXsNZaa1l7spTwasZHwelgUIgkK81P7o+BMSkbDVJG Q/v7tDGOsnoOZUbeWhsiwGi5+vGkae+Hafpr36FD2GarLYxmdTCOzKp+yC6iWbPnhFGjx6o9zQiD Bm0cttx8qA0T1mWUAPuzwJiyzFMfHTN2XJg4eUroo3a1/XZbW39lHKlQLyDwKpWdtpsitqCPMfCe PedDtdnpYfrMD8LWW2weuvfoZoowp6eJrIpPbDeiamh/JYeylbXk4/IXMcrLxG/g46nUphS5uhhT OQsXLFB/m2Hj7HrrrRs2Ub3F/hbL5OPEVNqJxuKOa3UMW225eSn4n6Md82xCOTJnztzQeZ21Q6dO nax/I5Sh1YBNKepKMaacjIOjxo4V3zl63mwdNtpwQ2HB+GSIG3dQ+TgYe8ooW+HzQNnUXIwrHKXl MbFM9bGCcXOqng3vT39fyoXlYcfttzUpy+RyRA7eNlJsqrCUHgatxKhNtdH4PVd4hNCta1cxi8QR m4qLQo1HSz6fXTv2PJGirCsPjGKagAQ1GqSMZlXt2NrckiVhTu2ZEjlUpa3aXxXmeTi4aYyandry cmt7jMPt2rfTOLylyqGIEmM4qGTyMyfgedZ5nXUsvrFM/7sxbtb+GHs7tG8b1lmncwljik0ZGBGy Zw/9eMniRWG77bbV+LYwTJsxI0ydMs3mHH3WX9/mOKRL+TTiSNzHa8eMuQs0d1mg8bR7t26BOTE8 PslY8cHMWdavP9T4tu02W4W1NcbZixfxwzTK6pJ63OrNK7x5xVTe72mZ0aTYeFhpFw2YZ+OC+Xp+ TJ+u5+P7YYMN+oaNN9KYae8bopQpn0a5Pz7GNvemW5S1E8v+STCmLCUfF8zYtQkz1F5Gj34nfDBr VthKz/tBAze2euQZwbOB+fj7KvN222wdunbtYv3SsIniWMEMSWR13iIgzPAw4sINgREXgW5F4iKN B0Y7khcEClpzMDZhytpB2mYYV5JD8ZdsvLaLEquqrYm0VucRCiOR02HCj/Fwtz0M22lxt2acD/Ep fRreLG2aH/FO77anqdN5+ErtdiuNbYxEaEzdjqHVbz3eC4vdLM7ny87B6bA9Lg1zN/TEu9/p3b+y uDYnnXTSHltsscV21c6iqHKBqRm4lKaOrfzMHDANdDGoIaxZfEFmlsXrp6QrHRaGj7+0tiuKxpgY vkJHStraYuGtUWOkYJgapkyZag/HXr16pjlXWZY5RA7OJ+achhXJY5AgYKG/JNxxzz3hst9fE55/ 8eUw7ID9QufO62jgXV7wT7H7bDBu265tePHlV8K1190UNt6wf+jdu1f1UEBkk1c/hdyJw5wE8/dx MI4p2miR2y48+eRz4fKrrgk33HRL2HfvvUI6ySmzLHOIIfHXsUnDEFimSNjOFvazw5XXXBcuu+Lq MFuL/IMO3N8WRhWZ84khRVI8sXyqp8b8YpSVuNaOdWFbeGXESKvPa2+8KWy12eZh8OBBYZnq0017 0UyYODlcfuXV4fdX/0ETrq5hpx23tx0vLndZABIpc/LnL8WYdjpqzNhwxVXDQxe1mQ1Vd6XCgK0D Zarocj4WrFg3sWz43BXt+NuETy0h7dhhiFGkVLoisJEPFI5npC6zNa/nV8QlfBrpmqSNGXlCs5nI svC79robw+/Ux+jLB6mPtVUdNICptCTnDwncpCx5izr3o3nhmuHXh4cffTw88viTYeLESWHfXSrP 8wAAQABJREFUffYKHdoV7wwKPnVZKz7uija/wASGbioXkTHUx4qbb70j3HH3feHpZ58PI197Leyn vNdZp1MhdIrdx8MY5fATTz4dfnfFVeH2O+4Ou++2c9igb59am6zkcVlb2C682yWiCoj/Y0gZXxax OasW7TgysS3z6tv1CWpk4syj3U7j2/j3JoQr1dcuv3p4WEfK4l132VkKxKJPioy+NGf2h+Ga624I l11+dZj+wYwwbL99Y70U7KL1yTH2/uB12lDgIg8LK9zIRPu6/Ko/WL8ePGhgHJed1u3VxNiea1ro XHr5VeG5F14K993/kI2/O++0Q00UMY7/TeTm/cEzj7bVhwcVBSy9cG/wNGJojTcZK7w/0OYXLVli z4XfqU5ef/Ot8LmjDi9hjI0+ZSy+3o/SYC9dGla4Y7+L8qAEXqK369feeLON4dttvVXoIMVyuQiw kUEJ438rkvTppUmcZRgOCy8jo8N6p5z4EHl1MI4pHbvoi79Fdg0ep3MJ5C+waeQT4z2pPVNGj9Ez 5VotDruGAf37xTZXZJHWVSxYGREdMPLCOFMFgTMvUG646bZw6e+vChMnTbZxuH50yvqhFqmXX3FN +OCDWaaE/0vDGCy8TJSXF3RXXjM8vDthoinPDEjHzu2IruHInPGWW+8Ml15xZRgx8s1w+GEHhzfe HhV+r/nNNcNvCJsNGRqGDNkkKoo8vdsFH8+DYP5cHsKbkXo48j7y6BPhtjvvCUOHDpYyVS8T9M/4 6Mer3umxK46RM8pY5rcP/PFheyY/+Ohjeo7tHXr17N7yeWMcXSLs1WvHZbalQDicD7EVn4ZgS1iQ FmmZ040ZOz78/sprwlXXXhfW691bL2i2ifhC72zddh5FHMH8rQxj2kQciwpi0haMP+2xgjqcOXOm Yf/Us8+pHh4JS/QydfdddzYZ2rdrEx5/8ln10yvDTbfcEfbdd89W5uSFiJ8CxiWGVu56XZVQOCRG Vf4I3NXB2OmhrfIzn7yRifHRT1mklLRKZKxiSpc1+uKvRSd5FP6/QKuhvEn5LDyJpA+NGjXq1eHD hz8rMkBL/zylh+FncoYfgw23NB5/taiqaBVcGk+X0pWRNUcibS0mej3/NHJVaUpaV8SUAa04UoYu vNtpEqdLhWqNzmmJx7g/+qpfj3fbaT2PNLw1t9OWXIsbzEs/9eQPDI02Vm0lMx8hSwljPMcUGk3h l2WkdT5OXPJRAEnaVBP+mLCRT+EzUlhYEhxliHkKPwO2Fhbj3wvX3XBz+Of/+73wy0svCy++9Io9 GMrBvKQmreeAG1PlEP0JRVEmD2/bpl3YdqutbRfNtGnTlEdx7MOwSfng/mwwbte2XRj5+pvh7nvu D++8+16gUze0JhPj08XY+KseOQYycNCAMGjQwDBp0hQ9sJZUD0wrsYuCEKlJsYnhFUXRvhTMm+GO ehO/+667hI+0yJ+lxSAmrj9JkfKJ/qodx+gFeltnx3FW2Y453rQ89OvXN2yxxdAwSYu8hUsWkZ1l A3fMMtF0794t7KA3gTP1Vm3uRx9Zl2nj/YH2bW28SCELr6d3m3oa+874cPe994dXX3s91hsZeJlK PkXagk/JyGhL6iKdc0/4FHQeEr1iDj+158VaXC1auFgymtCKLnhg/Q+2Y7Itco4i6pddI7yZ3nnH HbXoXBxmaIJk9Vu+7ahkbYaxFaHghnLp8aeeDjdo8vTFU04K5595WtiC3USKh8446cdQME+RsIiL 6JSUFslwsHjx0rBw0cI6eopXZMGHyd0bb7wZfqNF/mGHDAsXn3922GGH7eJuIuMEYczBpanaceRT itSkHXOUbqB2tW00oH+YpN13LEasUcJbCY3zao/HRU4kcpESPharn4LK7JQM0migUEzCJ4awA3KR 7YJsfTx27moDGgS69+gRdtppR9tVNnfuR55B5C9S3mSzY2fnHbYPC8R7lvqlGdqvZcqPOWK4uf+U 8dhLDE8ZWRaSYEz/fm/C5HDPvX+UYuflqNwsaMtnZ4JNyse46qfgLjsq1W66/Y7w0qsjwoXnnRU+ f/LxYcP+UblsdIVInhZvqogrs/aMnLsIF2tnA7tSqzGgytvCXBBjUmRU8pGDeGFN8eHDmAIVCiiU 6CA9Y8ZMK3bJqkk7dj7GOiJaMI+W5VxgDOLsjKh2r2rnmfJ+9LEnw/33PxzmL1ygxZ1yI5EljFzJ A6/JoR+zC39KVlA7ZQMfT2t8nEGRAG/kgyuNrGIK0jL242BcgJ3kVrVj2hw7Fu++7wEpIV6r2lxZ MDlMDJfLIwq/LAtJ2rHL2rFjh7DLzttrh+8SKYE+sOD6M6+t5l7sNLn/wUfCo08+KWYxP88N23N0 vtEuKIg0Asokox+8q9WOoY+FM5f/FJzFR5zcY6SWUUFWRGCt5JlHeuYTjDeQ0r4//HBuePDBR8PD Dz9uR8kochSj4BkLFANVkDZ6FmynnaQdO3S0HR/smN5g/T6ac2xuu0DmL1qAEPqTKeWRmyALLvjK 8qygK0JjEtLWjMmlBC+88kq4S3PFKZOnxTmH83EGRTq8lp1xTCKFD/WxuZ6d66/fO0zW7lg7Ri3q TwNjy7NoN2URWowVijEBXa4oaYmCgp0Pc7revXtovrZNYMfpvPkLy5IZ/5QPiSxhwbfgYz79FKEN GPscaqHGUMMYpgkfT0vQp9GOUYjfqZdNj+rF0Hlnnx6++IWTtENqgHhH6ZYtWxEGDtwo9O/XL0zW nHzpknjE3aWn5VoRP0WMAcSxKTVqlglgyBBp/Qq7+PMUijNsFJzysSSEtTBFTgkfC3E+RbQnwxtF wZVGVjEpLe4W7dgJ/sLslgh4AQucInAWWGwqSQEk3Ck83P1uexYen2ZQp/E4D8fv6ZvFeZjzTmnr PJy2Hp76naaFvbpHzzwhTBHGBSM8Fc7dbhPfzDSLX1VYWiBoMemuIfwuX92N39NYXLWTCG80dA7G mjiQmM+jYiFTDsT44G1u/ZSjJA8S8dI/BIqCJ6IVfLAszvkoIFLFFLCFp4VJsBgaKVJRSj6iIBbl xU56y8oukFvvuMfedhzzuSPsrbMPpp4Tto2XBcO4cBEX5QcWVqRCBj9a5IsbeLXv0C7soO30G+rN 3dhx45HYDLfcIAzyMJFlcmDuIh/SMqkylNitQkb2P9oFG5MBN3kyOYkCEVJhTHkPOXB/O8qy4/bb 2XEHQ4IMS+P1EQMLMWI5rZCRkFh7S2j8qcE4GSI2Yuf1QYhJEYZuuqm2vg7VpFTlSXhRPjiQLvJx vewKUwBFHznG+CiZ5IxBxp+fbp27hD20Q6Kbts8KRjOGh8EheWRb3RR5m4QW19bu8bjvjw/Z2xbb YUGl6q+UE9mUofvBeOBGG2m77laqs3ahXbKpT89nGcmn+lpv3d5hl1121G6QtS2MGFg7Hzy0WPOb G4povJws7nfbecfw93/7LcvP7/AAf7Gy+mZSQLswfvBJ8IVbWlfuJy30xBVJCTCe8FOU/kw6k4/d CZ06dtIiQDsTiBM1GFpafnHIlPUvGfhn/jIfcCxwpY4iE0unCNkKdD5FOwYbsPSxwnY1kMJkEC/K LnenTuuE3XbdKfTq3tPyNaZK2xY644EjYpPiHzOM5SYNMt+jBdT66/UOe+yxq7Ub3sR5OzV5NKls o3ZsMpjcRcpEduhiPhHj1994I8yftyDsvfceJofJYrKBcTQoih54+DFbWByw7z62FXy/vfc0qcjL 6tHyU4qiTBFlYQRVMVYU7PQqRryJKAztdrOhm+pt9JDQ3sYapS7ixU5GPwX/tB3HGPK0Ipu8JVs5 YtJYoeTBOBYN0lHn+CCM+YG210EJX8EHUo97/MmnwoaayLI4Mg6RhbkLpiUt7arv+uuFXdVXOq7V oVSoRtlIEtsiOzn32G2X0FNKXOQphFc89VC0v6LtEW/tVTGxJBEewRz9ytPk5Sc1/qwi1ghMClGA hSGi9DFr+ve2W28R/u7b3whDBm9ii0jyjWi6fCQ1RiazHXFF9sJEl9Ko0ubPnx/uvvuBsLMUZhwn 2GbLLTXuxRcARic2FK+d3ihTV3B1Y21WktkRNeUX6xF54/j+/EuvauGKImDHcjyFJ6KZssUZYSuC dBZvtuUuv8Ybyfnk08+FdTU+MoZyDHs37f7q3XtdUy5Yn1Yaw160JqOVn+JHPoXXqpCHgdEoDbk6 xuw0BI97738w7L3XHurT6xoFbeCi8842RSnHeV0yk7XkT3uQKfzm9gIRXghAEGMSJUVeBMFvfc/I JE/BQ16T39oStJYhoZbMvD4eL1N85EskZZKlzlqVP9YdrOHHs81GcgVAGzlGy+rRwoyV3UnCWMkz ZXu1EZQQlNPKaD+eZ+mxPKCJ/TuGx74Ri+FjE4rYXXbaKfTsoZ3ZdBQz0FOA6KN9MRf6669/OXBE 1HBTVBzbdTccL9KQx8pSlLPkE1kZDorHWHro3S3b5KEtaKyOvNpGjCyJ5DJMhZnaiONldtG3mfsS B1PDtsjLAshUEVYfVia5LUxl0Hxg1szZ4aHHHwuHDhsWunTpbOmZC3ztqxfZruAO2mFNXrEuSUtq 2psyK8rcQbs/d95xh9BXOz45do48G+ko1A7bbGM7BL1twMPKjTzwKQSpyq8gK3MUMDpjioLUInBb qBw8M48/+nMal7YKQzYdbHdNWTr1RX9eNCSSJ7aFiIPLhkKS406DBw0Kjz3xVCwbtPoXy868N+Js skRQJEdVplIoHAU2Md4xj2Up+Yl37AdIaFKbbXkSpDDLy9y4vI0G21GDwpodhp7SUhR1H9sJHCoe nq/RGU9Sqkz6R56OC3Qv6EV0h/YdtNN1R9F4HK6ivMogHSuMnUkCJ+iqvCPGysuEUnp3wk0eFPF3 StG3uXaEMd/ffttt7OUl9N7fNhuiuYDm5cxlmN9YBsgiXozT8fkQpSMMgyQ+54pSITuRlsh4RJHE QYlMbnvORD5qQkYfj0HLDUFhIpYFnyKMaOMDU/EjJ5zwgZPNDXHKeF3EtVSUK+KPWJU8Rmsp4MU4 yxhAachN6YrCRpxinjE8jgUuQ4tnXsHzL9ECGTcRJXxWCVbnHmdjpnsaYizQoJMrZVdRlwyNMTTp H3Tu9zSt8fFwzw/6QlhLSnwal/rTcHc7P0vc2s/HVRQ145MK2Szew1K61O0FcTq3Wwv3tG5D31ph oXE6t41WHcX9RX42TBh1jEhYKoCwNkzazB27HQlLIWOiKqRIA000Fb+Uj1ep8zEq/TC2MSgsXswO lRDW6rCWCRE7uDhaAjJlmJCJzsK3IqytSU3f9dbXpLlt6N2zh91XYG/ZoTUTBzcGNd50ztQ5X3ad kG6DPusXZ801JWRAVPi06TPsaMOyFcsUt47RMHFCDu5QWS4tPiIwCHN/zQTtRrEHpR6oG23YPyxe uET3+EzX26ePpFjZRHftrK2dKHPtbp958+aHoRrYO3RobzsmZs+ebXdatNVxGO4/ogx9dWado3Ox /FZ4KzMD7fz584RXWy26NjNlioi0cF1ovNjpwF0os8Rzjs7RI/sAydOJe5TY+VcMnAUoNpCyK2iG 8uWc8xLtluigxVn/fhuErt10ztkeDAXYJEIUmaVL4NVWO1MWhXd1TGTmBzPtPpkNN+wXukrRw1MD PJDjA8VRrww866+/rhYRvRml7QmxWLsBJmtHBLuHqBvO0TPxXCJ6JnXLRAcm3JOwSG+tewuTfjpz 7ot9BLKa1dOGy155+/7zX10aumlSR1zHjmtpIdlTbwUX2ds8sENZ0FmLigEqI7tXYnmWGRYzZ88K b40abfJwPIzJXZfOna0ekIn6sPanRDyEKCPyzaI9LVkizLrZmfi1OAIhWjfAzl0B5L3FZkOkeNJC R9HwmDlrtt0FQXtlQoaCq6facN1Ay9tdsJijt5r0l969e2rRtL7a8mIde5lsYaTroW3hHdWHuEuL pSWLKBZX3MP0m8uv1K64LXT0rZ89uDmywB0TTGL79e1rO6am6u6bjTfSscZevcJi5clZf96kUqR1 1+1l8iMP6ehLHM/rIsXe9OkfWD1wzxNlYAcW26ZBYsMNNtBOke5y80BPsZttCxzO1fcTzVpqf2Cx nEma6Kj3CRMmhSVcBi0BaJd99Eb2A/EFOxXa+NrdUmTEn8YTjiONGz/B8GT3G+2PbeiLxWeG+ib3 eixWPmtpIt9PbYE7Tqx+VVfcLcQ9WdxDRn1zvLOPlBczPpiuI4jXhm7du4bB6tfE9RJG9GUDR34M 7X607kUC9+m6W+DDDz8MvcSDRQN40Wboax07rWV8Oc4ItgtVVjDzuuCYw1TJMWDAhmFd5UPRmLL5 aG475xBCfxancs/T/QzcXTRfuy+45Lmb2iS75mKbXK46m2syIAv9aey496SQaa97gAZq4dJBbWu2 2tgM29G1lvzUIwt12iZ3ooEjfZrdXlzS3Vn3dPTr18eUj+Wi2kSK940xNv7815eFYz53pNplTxvf 1lU9LNGbT+46o6y4O6ov9u+/gY7ydraJMP1JHURHPT4Ko8eMtfaHIoKxkfZNXbGTxZTGFJ48RY8B Y8Y0Jtlrd147bNh3A43BHaEwfCbrSCPjNqZXrx66d6yPYvRPfHgGGMYWW+CKO7KWI9YCfg8iX9rp fO0+YEG2gfhBx/jGHVmMxeuu1yss0jj0wayZwrO9lZXxLh0nLBvGTj1faPPci9ZZRxU5+sO43Fv4 8Sab+7Y+0s5GFAOd117H6ndtPWOs/UoqxiXrH1roMr4z/jNu8gybLJ6//d0VYUs9PzbcsL/1MdpB W7WHWDakaDRWThWbcoIN9cLFvJOnTAm/uvTycOB++9j4wrOLutWDwxgwPiArSp44tm9gbQzgUKy9 r/rneDHtuJfGhj7CjePNLBoMXdExBixUP+So9y9+c5ny6W1puZeKhQ5p1tbxxHZ6foINi3vw7qV2 izKetsqCkecKbXeayj9H/ZFxnWcjcw0fkxYp/RTdG0O/4xmzvvo82FDjlDk1lIm+ulB1zPOSNsWz ffAmg/R8WUdlXqB+NN3GEvoOys+e4gXG4EiZZ2i8pP0vsh2Kba2tbjRggD0bZwib6ZqrdBEvdhCg dJk+7QOVZ4b6YXeTnbtu2EGwxWZD1b562/Ma2XkeM0b01Tg57t13rXyDB2seIhw+1A49MFigHVhr CcN+fde3sY/nCS9/GOe5T4e5BHU8f8F8UwB62YvWb/2EcRp+A3VfCmMkhrKBw2RdA8D8gLqm3fZV PrQe/gMofKhb2qzPyejP9hzQMxDZoKWdcwSZ3WNW3yrnenq+kI6xlfrl2cBYtaHGjy4ac8XWng1x DFik9rG26qivtROewcy5ZunZ0b17d6OlHph/9FG+PCOQbp7q95EnngiXXnZVGDp4U1OGdurU0foW czzSMgeiP9APGdNpV8x1eIb117Osa1fNQyQnbd3vPTQMlMOSZRrflBq8GK/Y/WKLfIX269/X7l1j 9w7tCx70VearjeOFtcwIJmBp7ABe+1HUhxo7kXnLzTezl1yMlbQPjgmyK6iXygpGPO94/vVXH0F2 8ojP3kV2LyNp4DtVu+gJt8ojG/WnD9XXuJOMZyXjc3/NITpr/sXOa3Z68oztpfrn/hyeeYzdzHHo 5wjKjm1koD7AjmcM8cjB+DlT48OHGkfW1fyFcYDnTnsp8XhW9ND4Sb2hTLMxT/2FO3x47nE0UJER C3KS3NwROW2q5uUfNc5lGBfAgN1xPDOYK/lzmOfRAM2VGG/I6/0pGj8vuzJsvtkQPZf7G1+ezW0p j/KzZzMYtTCSpaguZMFDfc9THVH3lA1MmE+sq74EDWWarPFoktr/ZsrPngOiYV6mKqJQQjAytReP YssOOI5uM++ycU/tpqvqoy0JFM/YSH0t0sc92DW4/rrr2/2GtNFJam88x5Bt7U5rl3PtCZMm2bjd V2slLrafpHHf5vSSn3rg+cJE09aLaoOUhefPPM2319NLA9oC+XKvFS+MmKszBjGGooimbzJGst6g TNwBZnPJxdrNJ2lYC7ELz5RvqoPZGqPgT731UD9krcWzt4fG/A01FsNn4uTJNt8GadZBPP/gy11P 9IOuqlfur/JKiTUi71+6seai0tr/2CYAmWAwcEPbS4zDY6kV7jbhKWFKB01K5+zSMKdJ00FX9ztd GpfyI540bup+D18t+5Moilxgtz2jVQmSxuPGwMP5YLshnlGzmUn5pPGePrWh1VLBKgcbY/mpE7oM MbRBFIJsuV3WqoXYK3ymUJ5FkbTBqsdBHTXwxoOfgo+JUpOCaB7+HE14461RYbyOUnXQxG2brTa3 Szs1DsUB0UpFYv6UZ8mncKjjM4gTYQsHuVoYDWBvKg/O8XIPCvks1LZf3vYcecShoXuxUHx5xMhw 6+13a8DUwK3JJ7Ltvefu4dBDh9mk3AYr8cK01YWGMzRR+cF//8wWO5vrLf8F555pl+dee/1NKtPb 4Vc/vSQMHjQwvPLKyHD9zbeGd3T86IpLf24ToZtvuyM8/Mjjtkjro0uSR772ht0NwDGV07XFlMlt rcOG13Sk5ebb7gzvvTcx/Md3v6MjKBuFF199RXeV3GOX5h528IE64jTO7sPhMYI8B+6/rwbPqq4K FK0Mzz//Urj97rvtQcDCj4fSEYccFE495USrm4aJSckiTiSeff5Fm+hyH8V8TQ5POOZz4fOfPyG0 0xG90ePeseOAPCSYxE+YOMGUW1+58HybDML38aeeDbffda/dQ4Lygx1b/+cf/tYGdo7YfaAJxJ13 3ROef+mVMFHHOgZs1C986+tfiVtveahY21Qp9cAYP+5dnfu/JkzXA+ihx54Ir735tl2Ce8ShB+uN zD3h2edetMs2Z2qSiGIKXPbcfVfDADYU7RmVZ+Rrb4YJU6R00WWsBx+0fzjh6COlnNBFqV52t5X9 G8rjNsnHxJiFJxPGk44/xtoLDzwaL3XAQx/5brjltvDKyNfDP377m7ZTgIXS76+6xiY1XbTgRul2 zNFHhC+cdLx4xfZMKZmccUfL8y+8FO594EFbZHAkhwfgGV88xRZn1910S3j7rTG2MDztCyfbJOZH P/mlKScoxyHDDgjDr7spjFT+LPxvkixraxG6w3bb6U39H8PLL48MJ554dHhn7Lt2ZOuCs8/UHSOH hScefyo8LDyBm0khlyafe8ZpNil/4KGHlfYhq7/txecVKeq4p4Wt9nvvtbu1Z/Ckjxx+2EHh/LNO VzuLw/AbajN33HVfmKsJGgseJionnnB02GfPPQwvJkBttVtirtrFjbfeEUaMeC10kGLl6CMOC8cf c5T68uhw9bXDbbJw1OGHhaOOPNQmiIwZLHDu11n+WVqUszvjRvW7Tpr4nKY+NUJ97Jbb77SJCQoK Jl+HHLh/OF04MvFgYsudDk8/87zVO4sU7pD42kUXhtt0H9DTzz2v/jxIPG+zox6nnHCMFhHV23Tq +qlnnrO6RMlGH0checoJx5nyhiOyKKE6agJPuYcOGRKOP/Yoews6YcLEcIP4vvzKq+GEY48Rj3fD o48/Hc4569Rw8gm0CSkry4aohkFbpIHoj3aGQvTmW+5UPYy0hfCMmTNsQvflC8/VTsjtNKYtCQ89 8qiOrT4Qemjytdduu1p+TM6//2/fsTbH/VDjlW+XLl210J1mu+lYmDF5P/rIw3TUbaryuMMWGyx2 Fqj+DjvkYLt7A/zigC15hPsH02eFK66+NozRmPfiSy+r382VwqC7jlEdF556+vlw13332Thol1dr snys2v4Jxx1TFqudKnPU6HHh6uE3SnEyQeVbEHbUcbPTTz1Zk/n1VPCiWyrbCEQI702caHeCMBFl 8sxC86AD9w/HHHW4Ud917316K/6MLeJQiHJ87+/++humRLFniJ4jDRjDusH4AOCBopackzUxveHm O3Qf1XPhqxefb3mOe++9cNttd4XnXnwlHLjv3joetVBjxpumrDvq8EPCmad93voDzyy4+lgx56M5 4e77H9AzZUl48+3R1tbA/zi1+4ceeiw8pHtC6PtcLIty+9TPnxQOO+hA6zdI9fobb4c71IaZqKsi 9KyYEI4/7ijdM7N/GH79zeHVka9Zfjepra2lST7H2lBq0pQw2PVSxpkF84E4HqEAu0p3yb0l+VgI 8gUnFlVf/PzJyrKdLbw4MvHKKyPCO3pW9ZSC9+tfvdguwuWi65fVRqkLvkbIohyF7SmSY+cddmjA nzY1Zuw7dvfTDClJ7n/o0dBbaTfSs5ELl29Vn9x86JDwT3/312Hq5KnWnnku7bLTDrZQekn58ww/ +sjDpeDtpjH0Zb0MGGV98htfvjDuCtAKB5r7/vhweEb9m3qYPWuOFucbhLPOONUU2OlzmD7+yquv aZy425QYJ510XHjo4Uc1f5kYvvMPf2M7/TjuQ94iNWXYpoMHhTO/+AVTOKAQeU7PXcZVFHmUEWUo CvdLvv9dq5Obb79Lz637wt577Bb+4W+/ZTyuv+lW21XFM/6bX/tSeGf8ODtaO2KEnil//9e2q+iJ p5+xZyqL0CM05t50y+02N/nBv/9L6KAXJ7TH0cKTmmTxtpP606knn2CLe8a6O+6+12RBUUP/maYP OETlHy2jMu1UsA+0gOc58kfVyUnHH6t2eKI9B238VD+gTXFv5KabbBK+/a2vSdkppVzjAsTmKbeq rFHJslhj4mKNA4db/+HlCnOml18eYWMxz5ZdtYPqqxedr/FgorUJFI0o+1BIX3C+5jr77afx6z0b o6bqRQnPFcadYWr7x2l8QXlxozB55PEnhNc2dqx85Guvhykaf3bfZafwlS9dYPcQEvaH4TfYs+tu 1UMn9bdNBg00pQ7t+tCDDgjnn32GPRdfUP+mHbLQp8+ySD1UdXS6+gJ1S5/xPoVtRg7aBspV5hHU LYoYjpcyfvBigvpnxx5zvC/p+PI6zAeTsSL2RnHz8U9x1nOLTJCL+5FQ4nz/3/5Zi/IeGneftTr+ SLtiD9x/bx2Rfkvt6F2NJ2sr3wus31BFjLXU65Oi5xnaTv3TnsFSNjI4MD7w0uoOzX/Gam5DvfKy kd27POue0b18twsn8N5fu2pfe/N1Uzr16tlLc9uTw+6772L9jBdzzLdRRqGcBL8Tjz1aJwP2DOM0 btE26Csooxco/vU3GD8/DEcdpvHzdMbPqNgCw9vvvsf6CYoLexljO9oiGDzrH9Gz9FHVO0uFOXPn hN5SUtC/Ue4yx7xd/Rnl7iEaSxlzRo8da8pTdi3uv8/eYe6cj8K1en5zryXzV9o+bfoLJ50oBZd2 nAFKYoraqEKI5486VOXPmTPb5hQva26DspuxsGfPbuFEPQM3GzrUlD5cVcA8YZwwJj+UJiefeJy1 K/gUVW2M6fPPvqA5uRSWzMmZl5543NEa3zUnVztkrsPaYZzqGwUi7YIPRTBvRzl1730P2viH4nWY 1gynqf2iEPrpL35jCpm//etvSsbF4TbV1/NqW5tpl9MF55wZ1tbaZXmxzmujuf/bY0bbuPOm5qPD DtjX5uTIw4vb45UXyix2ZbFO2UAK5L/55lfDJqqDNprvoaS+WvdK8gIZxeNkyczL5W9pvEOxs3jx svDgI4/pzr4Hbd6/x+47a077hhTi75lS/1vf+Iop7m/X3PIl3eWK4dn4Rc0Zxmoewt1VjCuMoSef eLyND/ROZtu16rO0f3E/rYwVKyln1cQqImvFlbd0pbTe/D3MbSdO452f207rfmxM3Z/SpVXo9DFV Nfzi9zQe18I2iFqENg9wgVpjSrzTwCGlw+2COk3qr8tBHIXEOH3Kj3D8/ue8PNzTtOrXwzJJ487G QaY+OY4KAqfFZvq0KsPyrhId+gY+FtWSDxfk/Z/v/kf43g9+FP7te/8Z/vOSn+j+nXc1mBZQWTp+ CglMbZ/IwhPXjNtpnBacGiR5a/Wf//VjG+RPOP7ocNH5Z9mEjkHwzrvuNZpJGpT+7fuX2ETjCxpc Lzj3LL3d6Rf+679/ahN0BnfX4CMK+iLeRMwU74HaTny8lAq8qeTrH0g+UZMZ3oyTjl0Iy7WAnaA8 4mdSV9hilQfc26PH2AThJD1gN9lkoE1Qrrn2ept8kzY1bInmbccoPch4qBLNG2oW4yy+J2myvMvO O4WjDj9UkydNpq78g/FJeThHjrFdrQv/RuqSxTO+cIowOdsG58u1uONB62+40rSlW09bJmdDh2wa jj3qCNv9w+W6yMHbgfuk0LhVD96DNUh/6cKzwzZbbxmuHS5Fxevxfh7eXP7i15eGj+Z+aPl+XpNt ysWbWOSjzvDzBvDwQw8KO+y4rSbyj9hkHv6VUSXogckbd95at5Hyrp8WVdRHH70BYdfCr357hV20 er6UQ2edfmp4Z9y4cP2Nt5jCBT60WRaJAzceEE79wonhrFM/r0VG+/Djn/4yPCGFgbV9mp/aHRb2 dN3b8J8/+ol9ueQ0LdQuOOcMU0D+8Mc/t7da9uYN0pjCJnPz5y8Mo7SwwqZen9AdOlf+4XpbsH9J i/nBgzfRXUmTi3ZvORkW0L45apT1D+Q6VwoXFEQoFH72y0vtQvWjDz88tJOiDUUiyhgmHtNnTLed A/vutZc9VHvqbR7tp2f3Htr+PkAP1A2jMlQLlxFKd+tt94iuTdhTi5Ouaq8jpFT6j0t+arhSPhb4 Tzz5TLhMyi3eiHOEbdz48WGk2t3y5UvDgQfuGzYetJEWa7dLSXir7Tzijh4uJL7qmuG6w2Wi1SsK su//8Kf2Fv50YXf+uWdooTAnXPLfv7A3iyj+GI/YUcZboiNU/7MVz04ZjrgwpjBJ4QtTHL/aTRc7 lpcdW/0EvRHrqLza2+KVN/L+9o8LRF98+VW7t4i7g9g5drkuTkaxQLtiUf3TX/5Wu0zWD1+64Jxw wH57S/k1RbLoDax2n7AY6K5F78ZqK7xZ5stscYwj4zi2MVHlbR42eW+sHUEoEX/2q9+q/T5kSruL zzsn7LXnbnbZ9lV/GG4LRlLztm3k62+FW+64yzCAhl07DeOotQprXOWQSBDj168v/X3o0aNruOC8 M23R/qomUTdrcWh9Xu2WnUXjJ0wIT6ntcTkm2+f5Ghw7jO7URJvLa1HWXXzeWfqS2BbhWikWRo0e bQsJJvM//dmvTRF13DFHavFyjnbqrGPj47tanLF4rIzGN7WlnlIiyLLFJljw9nDpkmXhMl0OP2bs +HC2+uOFGotZAHHRO4sNFiYYvYdXup5aOHwunK/21194//6qP0hxcnvEo8gP3HhWsIvql9q99PRz L4SjpRj68oXnaTdD73DJj3+hxdAEe3P7k5//VpPeruHiC85VPexnCp44HpNj5EN/gx9/9OPob82G TvKquy7SG1AWPvEeM9EL70VLpOzRC4O3x4zR1xIH2M4qJsxcPsrilHHOUWOs4B9+e4boIYIShrbW V5Nkxsxf/+736iNzbJHKOECfuEZjOG+C4cXi7b8u+bEUoq+b0vpMjRO8Kb/zzvvsucMOGdo5b/Y3 0gKUlxEoKFLj8tgDzj1x4CvJqCN2yHD0rbf6xUY6wss9GYTz7EMZz26ZA3QZ/bD99jJlGZcj8wLg XT3bedYvWrDExuOzzzw1vKVn4E9+/htTblEON7T7tfTmu3vXbqoL7SQQDoOUF2/eWfy88844G0eM XvVAO3pN49Fb2tGHPIccdIDqY571PV7W7LD9NmG/vfe0cXi4ngEogMCDIzU/+dmv7HnGS4SjpCS/ WYv/6yWzj+VRpggIu29YsL4o5fjtd94rheMA+6ohO+Puf/Bhq6ftt91aR+POCcMO3F/P2Rtt4U/Z 2B313f/8oT2XmWewEB0gBQGKJXbOUC52NfBVLHZl0b7ID+UBz9zZWghamxPS8z+ar/nD6LCQ56bo 6N8srp6VwosLiLeVDNzNRrtiDEbpPmz/fTS2nWvHiX7x699pcfmSzSV+c9kVUqLfZXcEXiiZWASy q4q7GGmVNAFvDmDBDk9enIE1u2LIn5cdjJ8oci/WM42XVBOkOEFho05r/YS0lJG+/sP//rktyj+v lyPgsHzF0vBfP/qZnl0zTAn5Cz3fNt10ExuLOZLOnIp+xUcCUNgcLeXPxReda7trWeQv1E6pX/7q UlPYHiPFNkpyFPmX6Lk8esw4Ca1ySIy3Ro0Nr7/1lsbKHhorjtAYPSBcpWfD6xp7eUauo3Gtc+cu Ni7233BD9d2NpGhRGxQCo9WXmefwnGLecPXw66R8HRlOO/Uk3Ud3jo3XXDDOLhpoogE98Iu2I4nS lN19u+ooOAo/xjuePYwRgwcNMkUbSmU/2uf4U5+lwUmhytphN4rmRGrXU9+fZvMd8CcNihV2zb0p hfUHmrfycYdDhh0YXpWyYvj1t1jZKSMvgH7081/ZXOo8KcQoFy9VF2vsBkPmZbwEoL0crD7O/GWz zYaGn6oPPyvFDi9iufeR+S3t53N6mTNs//1M0cOLVXZ2sBP7+z/8iZ5bk/SsOjFcdO7ZYZ7as82h tOtJI6gUA0vt8u+31MZ5frAzlWf7b/WcmjJFX+RTGXn2fO+/fqSXXOPtBctFatsnHXesHct2mHiJ 9QPN13pLUXXBeWeYMuvhx59QGYbb3IFdSjOmaw6tsXrKtKl6Lu6keefB9uLsSmg0TtC+ObFA++ih HZCMefTbdppzGvxlhUSH15WNox6naiKcce0mKfF+eekV9pyl7R/zucN1v90r9jydpRcAPDj5giZz spjfAClWNojsrPrtxzmL53LNVSbaGHYMc3LVOR8FYXcRyulf//b3psBhTsO4xMsLXhb86reXWfkO PeTAsFR1NUb9hPKvpTaIUv2Rx54K9+keMnaor6P50lAp5qdMnRIOHnaAnu/s7o3lob4oF1c4zNMp h9c012dH49aa+x+w375as4wLP9HYMFn47qMXiRwPfPSJp8M99z9o9UhdviDlzhUap3bYdtvwJWGy v2REWfbEM88aDfXAGMvaBqUh7WWY2h9Hkp+SUvUWKcK6qN8ecegwezHGi/lttmXOGMKmgwfaHIEx bR89A+IdsxHDsq5KNP8SHVSUNT79FCWOxXdfWejiGQxRM2iKVCU5DsKgddvdxGGa+V25U+eX5kkc fz6QwqtO7/Gerh7vedfD4dXCpBm1iGwloLWMndzjsd1NnAvkQHgY4R5HGCZNS1zKx911GtK1Rpvy J13qr5IpxpiXXBrJ4kSEbGToZSkbS0hE6WgpDdEyKR8932WqfGiMM7Tg/vVvfq/FyBjbqvyRtM0P 6u3cDTfeSmLlkORRpLYz5bAqTcWzDJJDyZWd3oYwEdRlcCwgTtMDae89dg98XhKlAQ+fa/TGmjdT aKp5sJ1z+ml6s7Kj3jQMtF0QHN/4w3U32OTX5FF2TIcn6kgLD5ptNRB986tfsgGUvPh86NbbbB0n CZKBty28udtCn3BGJiYXTHSP0VtO3tTwAD7lxONsQfztb37F3pDede8DNsEvlWUURQ//3TSAc1Gf LWAkBQPzvnvvocnG5jaxOf+c0/Xm7Egr2w7K810tCtlJkNYDGOFHjj21W+oLwqSftpCyRXvwJhsb FizcmZy6SRFm0siE/AvaPXTyCceGUzTJO1KL+Ul6+8hbbsxmepic+cXPS66hNmkYsslgG5jZok/e bGnnLSIPXcqAAuDcM0/TZExf05CfN61DbYfWWeFzRxwauNAVJdz48e+5SLIFJngKX458oExqq/rm qxzH663U7rvsbPged8wRmqgcYtvSmYTxsJ2o7bN8NScaMREjPrG9tRbHww7cL3z9SxdKjqB7bu63 Rb5VHJpBgBA5b6ZefOnVsNdeu+ntzFqmGODz1bSfcbq/inZg7U/kyLf1lltqB9MutkVZ608zKOPo W5p6mVLh8yceqwfqPjG/SGJYgdctt91t2/n31iKerdU9uvWwN7XP6e35R3Pnhe21AGJhzKSYN7q8 SaQs52mBvcEGOs6mCfF+miCg6Nhyy83URo6y9sadWyiSaKP7SCnx7b/6Wvj7v/mm3LuH4TfebG+l 9pI7bslez+50elS7jJgo8paedjxk0CZWPyfpTdh5Z5wmzHWp7Q7bWhtkZ9rJKheL2/e1I4A+/+jj T2pR9Kru+dndjl+xuNlW/YWJO283y4WrsEGBQX86VJNZ3njTT+EBdkyEjpcSgUUVbQaDhfKGN7pM atgafZzeYrGzDAUaF6Wj2GM7OUdxNh28iS3AOY4AzvDnDR51Rz5Mbk9RG+eowX777mVbsgcNGmj4 cRcayknL27KP0/cDtBDjmCWYQ8Pkdvx7E21hc5TaMjsYBw7cyN4c8vUSFtBjNYlie/mBmlDBDwUR b9r+P+12YbFl931QQExR1ujRL81Xhl0mJ2lX1kEHHGBujmL0Wbe3veE2xZ4m2EdKgczxVI5ofPmi 87RD78vhm1+5yOjZUddFPJiccQyBXWhMgjfXAoC6fkM7Ve7XhBEMOdrDxJTF8ASNg0za7Ot0kgMo aPN9dQzh/2fvPAD2Kqq8f2mhhZoEpJpOkd5771hQFuva+6qrrt391rV8btF1XXU/dz/dz4aioICi SAmhRVoI1VBCQuidQBqEBALf//c/c+6d53nfNwnFxXV3kve5986cOXPmzJkzZ/oBMsjQYbtqlSQy h3HJYAJy/jrJBXzCsEPXsi1r4YIFyg4ZEi+Fg6uNGWQmzY9JxzLjztlTrECksxlsL4Puou+30puc bzRq5IaW0R13fJk6Sw+qA6izpbTCZpH0DuVMCgeqk/SG151gehjUYNCfwbD4W6gnf/k9yFMDEISj xxh4hW/IstDboU+YiWbVwPGv1mrL1x7vGV5WNjysjtDcR+c6bQOXOHTwGBxiFVTopKirB8gQZuD+ 6CMOEx+P0Qz2uqp72oqrMmZ7FysakdfzL5qiA2yv82olzjfi0PPjtWKNwXYGiZBh6sHWW4H32AZ5 ZJsBOjh5CT3kwTvW7YlP55hgYNDioP2jbHfcYXvjYlCYgWxkjdswGWhFd79HBj+DqrOlF3GsIuUQ 5v3230ttZAyK0V5cJbrpxJKPdAwAbyNad9h+W7dH1AVWVvFkEIjzkcCBvLEyAPlC3o4RLaxweftb 3mRZY6Xg61/3GrdXH9SKDXTg7dp2ySAhWyWwAYZJj+8qfYiuGy2521h65WLpuiXSdZ2DIc941Sjn AlFsx2vQlLr615/8Kw1ObeIONNutdpDcUi7jJducuTdFNghbiX6gyRsGWT6k1Suc/UIcOoLWe/Jn O/DhaoOGa0A6JLWxLrFO06B72gSuF3vv7rYG24o258jDD3UHltn4tynvnB/0Cel0Visw6DVxwjgN PG7pPG6nM7VYNTT1ymnuEJ6uAWX0KSsWmDTBRqLNRR9xkDV5TceWIeo3etmd2RLIKiVWCGKf8Ec5 sUIWmUNvQSeg6IpLL7+yYQXUvlqFEgOjK7kdmDl7tjqrt2qQTNuRxHt4BW+Q4Ve9/FjheMYD+ytR /5/S4ffi11u0umS3XXeyjjrz3PP0vrMGV0a4Ld1pu+00aPOwVrFd7y0oR6kTOUxySkeZVX0MKjNB xPZyVkDhaBcnjBvjARs6ncgcdsWhGlzm9rB01Nd995INpXaObTVrqHxsQ4kPj8oWClmGd8m98iy2 BGsZqO/HHHmEtjOP8WAWdZEyZhXGXrvt6pXPTDzElkylnKiSCJ5U2OKoyQzSH6j8obsdIrFlkBYZ YoCY7e/vp35Kr7/r7X+uwbhxWhF3h9Ng1fX3f/STZpx0B4N92FZbbrF5M0q6Gp0MbiYlTv/lr33I NZMwDFQj76wWuURlepjkl4EULgJ5x1vf5FU6TESiA9HF11w73fb4tKuulg21lwd/VlVbs6Pak5tn 3GL9wADaQegr6U9WGTGoygqZV0lvMYn4qOQjbaMZM2Y2H/rAey1L6JrRo7cwD+ELfDtZg8KLRRur yLnMg0lEBgcv/N0lXnV6kGyjvBnuve94m3Us9uiOsu1puxlooY4eeMD+1nHwNfXnWrKb0/7oLxsX Swp9KR/klu12Pzn5F6qPY2Unv66hrtEmvl51b4om4/hjO+ARKi/qNefe0X4eItuC+AOc5Elio50A J1jHMfB6jFZd3asBHVYWoW9Z/c4ADXSPkf1xnJ60B6zsnnHLLMntGNPAyi7iILvcrvpSwbLCbKpW BVOP75edj77mjEAGBENexWcRxftOqjt77bGL7LBhtrVYZf/+92iyWO3hMG1zf48GHo9XOX74g+/1 imUGk3DIFtu23/rGN6gN38mrPrHPOEaB1VA49NoxujlwI8Fx1lfI8FHNe9/xVh8hcDv246qrWO6P lc3HEQMPPahJb8ksO0mYxHmDJqU55qC/zXMCf9I/K0Xual1RvIbINkXa74jBn4u7vNcwdVjtD3x/ agnb70+8xJ/Cnt88B3MZTljiTTjCBksjw3uez2brWSIeiigQJ0y+Z2I1QUkwz/QnXmY+42ZYjQO4 /jTqeBknYRJv+icuFA1h4QhFo9hHH6XBqgLjNcMFiFx1CIivP/xo0JwteRS89vF7oGnTUYPYNZYR hqF/n5QO+9nZnoHSh9Kl8r/5Fs2SSTnRmfPeVScAhhh7q+nhPf9KqkmOGwsGRG5S47OmzqnYeus4 UJVtHByGuZ3Oa2FWhJUEMzQzRodwwsSxzhtGFA3dVjJUMaYe1AoNtmmAnL26J53y8+aii37X/Os3 vupGhBU+6TjLKJyAS8WkY2tLiYZDDoMayrPesuqAbR7MejKqjtHF+RlPe02rchjRbBQHX43GP4yO G4/ASIfGJbbT8Q3PcCCghPSrssP4YDvJrRp1P0sdLM5mmqmZNpQq4UO5aBIQ4sAH3nXEp5VkNGGw 4/ZXxwYD4motUWUV1a233RZlIRgcy9kPUSf8rHPPbb7w5a/ICDzUHTc6sHTYQI2hiYP+tSQHa6qR oEzsIhNkRy7g6FTAWvIP/fCTzhGDWbOUR5ZJMxPIDIvPOSnxiM1f8omVX2M0YDZanb87ZCQwKIJs khZwOLYx0ilk2SszWaS7QKujdttlRxtkpA8LIS/LF+Oa+CZZzz3UkRs7ZnTz/R+caMOYlTPbv2zb AhGQpEsjPXPmzGaNYWt4BgbDCUOSAZHti7EP33fTDA2d729qlRyrqv6P5JKBDDpJbO1ggAmXsgl/ kAH4ReO6g7aM+VuytPixJTZa11h9NQ2gXqRYMvwlF5xFtLVW8bAqhLIgn8x4+YwLLT9mH/oaq6/Z DhqQHiuYoO8Znb2Cu1mzdjT+zKDeqtkrJHK+loLvpsGElD1yD6NSDg877ECtvjq5+c3Z52pr2/ba WnaB6vIEdUBjtY55XBjLu1eJuAAoh6f9jZHD7KzlfdJkdzaYQWSwMg290WNe2uwtY/LsyRd41dix MrbodFCfyDNEQRM6JflpvSY9apoFgb/LX+/E0WI3lx80befyhb7gPZ29M8+Z5GXuDCzgT/lyACk6 EdnjGXwgBaVTEuLh18InztR67fGv9tYSltFjjM7TtotRG2ublnkT52WgdziXCfmGptS9LD9HjjkX AV6xNHzYqsN8xoiSsk7mOVuryE5WpxO+spJhd8ndMN3qk2UFTNYU6zwlnjJHflj2jpE6W/iZLaQT N1uGLCtGnoYAu3iyqgwHT5kJ5HytC6Zc4tUIfOPgPPXkllmzLMuc73PyL4I+zrnYXQPx1BVWmDDz eOHFl3g1CIY0201Y5s5KOeoAfCJFdFzgdQLyICBpM0ACuozYIiR2RPwKLmYtU1cqXG7d4eu6jNmu RUpgDXkhH/EefKNehT5FLliVesLxr7LRf6a2CD0kXcZKuNBNwaffqxOGnmAWl7gM3DBYgtFP3QKP ErNRDi3+5kUu5JinQZIyh8VP5F9o7IJGBmlCr4CrHeRxPoqcaxXDmhqARL8Sh7Z9Dc1WT506rblW q/vINP47q5NIxxn6ggoeka/kA3DwCn2T7xATUKH7oa/uTG2gFXbUX9oT4iHbbJN7dF4MOrO64a67 7vb2q1+fda7zw6AcnQnOmaGtX6XUQbJu8vR8SqsMwUMdhia2k94p2eNcMQZ/2KrKDD18HavBIs6F 4wyl3994U7PfXnu6DaQuMhiO/vG2dnO/tEWZKdIU3dRVa5kkQP5eSSm4UiTmCYPKrEDZeqvx+n5a nfA1NGF0Z/PYgoVqoxZ6VRG8o04yQM/ZYddotRUSv4cOsMaBg7jouXQVOfYizyHDCdE0o9XhZfvR uZPP13kycxrrT9U/2hXbKKIUPAz+3HzLDJcLW1Tu1a1cZIKVaEyc8bGt7K5dd91RK7vO1MTO/cJ1 uFchMMh04P57e9XU1775rxoYZ9DwEOmzl2qrmlYKP8mW4ns8MEZ5L9FKP9pGBkRxqYtqGWHrN6t4 wiaLMnaZiFj4Dr+oP7lylTyQf8qOwdZbb5vtLdwPPPiwt0XHBFjUi650FMe5Nxl+z+NDGYQ46rDD mu9+/4futG+hTjCTQKyOIV1utwJPyB9YQle06Ah2aNjZfFJnnFci6Y9YlOkzyKT0AbyJ8JWlkzir UGf+SXfdfsedzZ13xzZ4Jg+xa8MukCwIDyt12Za1UIPu8+dqa7i2IlO22ANcRb++2nsc/MHBR/T3 qtJFrOb7+je/rRUhd3mCZjXphunans6gLWqTiQK2F5NnXCtfKMbiGEBh8J2yYADn2uuv10DWFh4E pa5yqDPlhWOVK4NXtPmrqXwnX3Ch+cD2WAbbt1K50ybhoJMB0eQTOgMY6l7Wg6SHQQ1crT/t0ZaD a2qrK4S0dfR7mMDlrMTDDznIE7TJ4200gM1KbXYHsMUe2UMFQhsu8+UPl3e8gR8OuS0oXu6rFDpv nT1bA2RPePUSkEzEYr9uv912mqg6wzLHCh8monGsSNxebS3bpt+ugaz/+/9+qFXIV/hYClbCM0iP rm/pMXlQEHRSNqUIjQ+e0pfiHCQgkLu1VB+hIe0o7GPaLeBukXzdccfvpBfub56SDkpZApnTdFnF 2VR8I1vrqO8Q9QS5flqDXvs27HI4U1s4DzxgH227n6KJpk1kN24luCjznjbPlP4J/8D4toh4Gdgn z9yX9raFTn89wZKYMjy/qRT5XodV0dtX4NJlnPTLZxAZVAPLNy7h6/eMY4BBfjLO8uCaZzNQlJkc JL0hveo4mSGA0z/9+r+Bgfh6ECi/Mw4w9TvfwCQc34k333naqZJ1cYnRuvhwxBIbnwAuHvruiZJx 5RkQoRDxzkrXG0FQxchG14e+IybGiGZTNOu+gQZn7tX+bG7wCVJXkhG1oQ26WkEMhYd0A6PR+sf5 UIIsb2U7B3trV1lFt+i0DU7EwGiEDq7j5rA7brJgAMTpOuNa+r6aOjBSRqnQUJCPaYkzjdzK+vuV zgeaOH6cV/S0sz7OqOiqmOcU9VN5me7SBrTEY2SstsqqVsR4omTr/BXUWQDxzFwLsIb1eyEi8SRv 6OT9VOfWsA+d2Ztd1FHngLnpN94sbIklnjk4FPSYKKfY/ogoS5nAUdznqUFmiwgDXSyrZmDoLC1n TofhweonVvhM1g1R3/z2d9Xg3+DzQujc9DDJkYQ4SeK7ZmJ+yM9ZLXCUEweuflvbUWigaAg5u4It W97+lfH0NLpSEOTDM6Jq6aCzR2T8oQPExTsObTxBMyN00FGsGF8YODR0yIrJ4CdpLeWQ0rqdzuL6 zCc+qgGssz1zc5mWzv7Vhz/gWT8MVscXTeDifJNRG49s3qK91syqUJFY8YWssLqD9MkvM39s08AI XKCVRqbL/Es6IMaY20cEd0YwoRgSHLLKQcpv09kaXi3iNHU7nNJdX8vwE3fhnvEGdmEovAS3w0Fa GMmBy2urA8a5Fi95ibY2qFEP3q3sFWUYTcky4iNPY0eP8dYOlhcz0HTVNdd4+TS0PKP4VXLxrvQs s0YkjittBtxOOfU0DRRcpvOyJuoWEa0e0GoCzhuBPBwHU0CUj6kAAEAASURBVH5c+9x/ecZvNCh3 afOlf/in5vUafHmfZl8L+YZr5cz4g1p+A49+XRnkU8rcW0pkeDKrWzvLujzQT50T5SpPXI/+K1yJ 1OBr/AEHbXeqs/tv3/meV6pgbO+lGT/OuOBwZMjptEhgCJlB17EaYWWf/8TKTraF7aOO7IUXT/Eq NLYn4FgFCL0vP+YId+JssKlDzQwzh4z7WxyodQXxzJPCPOoVcsk2GLbgbLf9y5pdd9zBZ8LMVgcl c0Qcx0tJEB+h37cTSjdixLe8CUDTxwrNo446pNlpO90OI7mBMRjm3FrEiquPfPD92ip0VnOhVt78 3Ve+5i0I3CTDGUqrqK63wgPhOOEGPRyjKM05+4XUk1vOt5kwdmzoa8KIUDvH6zwzZpRHfhmpE+jK CSQRD73CKrrv6nDdGRpo2Vk820kDu9SFWZwRUtJbsoS6I50h+ck6EZ2HKGfT1pHS5a0QTZzEBUre K3B/BcX8Zkg+iRHOPoocaDFIeY+OKiv2OCT9ja/9M8sNHTE6d+gv7AF3ZivsibN9QqQR4kMJxKfD S6aDRvuID4IgIy09ei0ogGDF7WLpnJ3Vhr/zLW8q6WtlomhCnvhLWQMN6dkVHNCLsyxoUIKB+e0l 12/XioSwGWLFGwNJTILwx8Al5cI2qoirXyPnB5fP+CLRNt32pQurQosnejPowoP2ji9WKh575BGl brDKJOoGh5KzaofVoGn7FJFo8VGvgypyqreWjk4WmJhhFRPbzlmN9aV/+Krq2Gu0quxtwo8JHnJJ +/SYzsmhs3jcccd4OyH0IgMM0jEoytbdT330wz7/5xJ1TtEXrH55k1ZN7LfvPkp/ZZ/FdYa2VXLe 4Rf/5tPNk9h5suGOPvwwD1q0OkpbJFkdhXMe9BN5sZfzHJIU372hmdU2w5Zr+LNIfP3Zz0/TCpBL favjLqqXrCJj62fGAmOmmRhcdyj/khyyQGf2+9K9nF01cdw4b3/bU7ZTDBAGNvA4FhHrDIDJCkqh ei3VoGCPB/HakkqCwNfiEYT0DKtqaTMYBOtxggOUerxIbTgf+2tVMKvYLOdKF3liVVXrTJYATZNy LeKwJahTC7XCExuKoyA4/Bsbu7WhdJadnTNjJC3KyDd+MfBNe8Lh19Zz8lNI+87gK/YEq2RYQfTW N78hwkSS6VAd94AK2OXnclGdBEfr+FBYut7QgHR9KADJ4ypKRo2naEJPoxXpf6SjzOAfq3jRSa0T fDpwdl/4Zvo9JAa4lVxQ+4RWFMIv6kbt3M+QB/0fHNvkx40Zq62UN+i8oqvcJ9tPg3tTdabQFVdO 89ly8zQhygph7IfOiQ7LX/j0590yJk/LZQonpJv8yAPvtMP/74c/8Xmw3Mq5n/QVAz01/0kh+BD6 qMQOXyckW1ZpbKbVx/trt8VF2jp3g1b6/079HI4HYeAcmQgXlLrc+xMpEH8yj5ZRenFZSTb0GsWR gcEP9HBxBIRn+sQTv/RPGJ78IRiE5Xe+9wlMG1+g7XvC1rgTP3C4/AYGQuv0CE+XcPmdOPN70GdX IwcNbj37kfFNgstzwCVsPpPQlusVkhpnwqVfPhNP4iZ6hvHM9wrtoH51ePUu9ZaVmxREPggjUXu0 sISEMozQNqCLUJRAG9LhKagQyBrPM8+s7G0xLCX8uQ4YZMSbhoJbdJjtZbQ5Z3ic1aJgyqNQCnLO IQqFmKtQaDToTLAa4i6d+zJOKwUWaRCEE/xfppFywjHwfQiaT97XclXNSJ11zmQf2MpWAmYRGBC4 8467PBjANhschtS6Gr3+0PvfpUZmuAdbOMiaLVhurASD4YsaW6j46WfFqrgry2gJF00KjTOOysk5 FHQEmFFia4HjVDwOOHko28SjIXRsGU28sdIkSlHhEeCBL2hw+ZWygDece0PHkmWgH//Ihzyjdued dzvfSZMTIrFIheRNJ7idLwxd/Tff9aThY1vItzTwA28+8Vcf9HkFl12hs37UsEAfjm0mnBnwbi0Z ZZnyN//tOxpwO9NLbykfI40MGD7pKayyX/ejhOWgkgaCRgAf8siVypzL8OXPf1aDOq9yB+qHJ56k szC0PD6VYeEJgy44GmtkhjNEjtUKFA7LxIXs8raSluZv6TMn5jIDpgEo+4peOgEYuiagVosCkAls OAH4ebVmcdla87nPfkJnZFzWfPZzX9J5Mmf4oD1nXXRBGobXFloNwUGFGGRbjt+8baSZgaWgKQsO YOTwx1cfd2xzoWZP/v273/cWAgbpnEWSVXllI4lE4EgL2ci6gxGPUc0taCzlJS4DUJ5VE38xzJDc nPWzHBSCA4c4Vb7BTNmhZuwlXJy5wioatjfuoi1qdgp8XLxjIIW43uoAXSUSZy5hkH75H74mQ+LH 2iI13AOb6AeR1OOIEvHIHzmLjtqsWbN1Vsn3tB3miOYTGgxitpTDE5lhpXRwLINmsJRDEdn+84Uv /2Pzs1NP10HYOuzashv8I0nzTxmLwe0ggnwqwAMzIqIt87FaocYgMrO1MXMZqyhmz75DK+XWaEZr eTcu+RZpGZWoj6cBqp/kf8jxSh7cOlMrdP7P17/SHHrwgTZGV1vt/ypylC3cAJZ/dFCdFnkSXXRG OOuJc0k+/6V/1GDnOtpSsUfDkvxNJAc4tumyLYdbgjbaf5TrFzzgBqXsSEebTUqdg/6UOeokq16Y oXzHW9/ogRsGY9m6xoAf+h9HHP5aPohOztqZeessbYUY4+0ayZjsbNMRYKXogw/MaUYdPLI1wtHz OM53QeY+/KH3NofqPK0v/f0/afn/z7394ot/+9dFDgzqn66tSj/yhTRluZD7+GaW2zrOYV3+Lb76 tOgkGmURiJi0CFhwGrEe+FCPeKb8M4t/0cWXeIDt05/8iA9GVrA65GdZrrLujtWKjrM1y85Kzpdq tR3xwbP4ycXNGiuzxSzSi/JQqiaQOr3Q9ZQVMgIKWiQ3AU1KOL5Mqd/JO/+zbEOeCkqBun1CB5KG VhuCjc7n5ptv1lx/w00a/F7kCw5Cdhg40LZAgVtZ8AS9PeJdasmz//bjAzk2Vr06H/JBfhSU/FCI eQBityHkzbAgDt5wjtbIDUdoFcW91gkMYlFXAUW/IpGkVpGiL/DR1pJmhDAoAR5u4rlL7SgrllnR Sf5oxzm0G52z0ciR0gN3+FwfYGuX5QMvkQ+2xeVKLQb/ICplgnjOCllqqYMr8Z1tJpznYG4Gee++ 6x6fK+IbtEQ2q29YlcFtgrSJN8+YpVuytjYfyY/ZBXYlFNJAjl2owWfX11htCj3YU5Tjx/7yA1rp c2Dzhf/9FW1hPl3b/o5vRorPMXbFYMFKXtHI9s5H58xt9tljD6dBOuhfBpVYtUvH9lMf+8tm2sH7 N3/7xb9vTj7lNB+Iy2TPHpr02VOdSc4q+sLffdVnney1527NUq3ivP+hh7yqKjvi6IBY+Qb/ogL2 yIjK0BJqhpqBZMdtXjfgRtyQBfNYeDhb69vf+Q9tX3u5B8goX26FQn4SP3nyuyKlzQHbaCuyLOH1 xPHjm53VHk6afIEuvfh9wxY5VlhTv0wWrJfzo7yHT/HNcD9TWiG4pA+YvSP/aYvhB35qE27EqA19 Lhida7bW0j6lDPvMYsEhT5QROpWJKlbBQBmDpMhTOPFLtDC4Tz6pA9dP16UUmlxlKxV+XJAxby4r sXdu+UE9yTplmmi/Cm3ghVYohafoE7YYcoA/h51PnDAeCOmJWHkIPOdNMWHJZCF5ti0jWihvtu2n K2Jh/Mlel50AstzC/+lK55Fr6mXwDlzdmz6I0OMhmVLanA23vibL7lB9QTZpF8kXt9c+8cSSZvyY 0YpIHqMfkXLSi4qvQqkEiq+Ai0TjXb5CzFYzVszecfudtoHhHXTMvuN2T5CMLfYHK6j23GNnbVM7 24f1s3qbLfRMHJ19znk+23NTTe6ycpD4uEhNv4UU/MAPPZb7AiNB0De81CSPyXILgrcdWz+/o4mQ 27VF+T/+/Zve8sh5djihs6PMKIv4DLkuuS1AIBOUPFfTBP9RshnP/O25zfd+cKIn49guF6vAIlZg 5bcivvP8E31TXkt24VM4XvgrjO71jK/uF6D8CyHo4HnLsFxSiV8ir58Ji1864tYwdVjC5DNh+Y6C j5D0z7j93xl/0OeKDhSBtHZ89/vV4bxnOE+IK6Lfk+H0Ax5Xw4XPwN9Mu//ZD5np1/6tX1boOpB3 FFwa2REGScXksIXQopBv4Tk1trwSh4bAsSq/xGVMFZ4WhyPqS2F0DDmUk1F9blBhWwJnPbA32YZR YFeMLgHwhNGi9KVlFi58XEvwHzE817XGflZTJeN9mgeIjv3Lv2heKuVGR4r9xXQ8p0+/2YdaHn7o QT59f9999tAy2l/pcOtzPMPBloypOujxTh3G+KbXnuDVDlzJzQFq7PnnSsa3aLUF+62/oyXD49T4 cQMLhuYorYjC0GNWfvjaseSZg6aXyoDg+lo64fAHdj4mYxSaUWCs7mGbFjdXoaDhUfKYRpqzNOio s8z3EZ1zwdYbltY+pr23xGdbFbN6GGCPaQUFHSf2c6+uhjw6YcE5GhEO+WRvOcYUK294Z1sJHTbO z6DBd0OFGCht6OUWIQ7YfEqNxCNaRs/KE4wDZhmYEeKWC4xQDAzOCWH7HOlwsB3L2bmRAUOQW8z+ 6V++2dCA0Tl5mcqEGUhmmh7RknVwcjgtV40zaEEeyDMzo1ylyjW68AbnhlrP1TWrxJkGN954s8/I wFBndoxyIL+336lrQ7XC7GHF55BxyhLDDizQRloYPtB3mgaXWMp6jGYmuTGD9JfqyR5n8r+3zhti JvFEHUbNCiJWonDwIoYQS3bZ1/80BSdH2hg/HELKQM888Q3j4KSTf2F5YQ83161yhfbwtXVVOpEi qvL4tLcGHXzwAc0ll0/VQdIn6VyF19n4oRPDuT5se2HwgYEhDiD8y/e/1zMybEE7SSvG2K/OOT7M GHOzHDfszNYqBGbh6MhQRtyy5qu8RSN77hmcOkSG/tf+5Vs+EP2NMvRZycSeb25u4mwKygOZeUJl wu1krNoAB3I4f77kTx0P0pz3qGRD8sJNQtw4gdHBYeLwjo4SA6LI2vXaxscqK5bhMyCxaNXFLj/O rYKHB2h//Q80YHbOpPObv/nsJ10+2UmFZTBNpoN5TDlbhp7QNdaqJ1zfzA1rS5Ys9k0l3DzGknOW pC8V77iBBFxTp13TTFGH/POf+4wHh7cogyMYM3RaGLzmHCVuDmGAY9TIEV72nIVGqzlXhi+D3uSB 63o3Xm0jbZnaVuf5bO/z15AdBu+QNc4F4twEDuVG3pFXOg1sA6BcuI2G6idBQJB4My/QA1FuSy3T 8JVzoOA3g2fQx9k8HALOyjMOjkVO4QvXiGuM3u+UP/Uf9BhgDBhgQm+uGd4Ryts9On8IHcuZNLvo ZrvxOsfg5FN/qQH+TTzIyQDTjZJBtumwQsvapcgutGKcEp9B6dtkpLK9Y750xVLdmLbqKqtJ7+kK aA0Y3HHXXdbf6A+MaHKKzKDH4BNyNlk3fj2iPHIbC1uS2V7CSizis82ObX3bSo+gw7fcYjPpltHC sVTbjmfpTKpNPEj3Sw1G/8MX/9b1gXNYGHxCP6MzGTAM7QjllRMxpSrbs8qev5FN6JurA0gpO8qF CQYcBx7TjlEHgGH13Py50tXoT+mbvBY5dRm4kNs56CjhopzRN9QTzuSg5eNWSVaPUVbc8kjHmGuk 2TbNDOqpv/q1b5zkTBEOW2X2+j7d5Lj//vupYyUdoPJmUHm2tnugA9CT3C6Ffj9eZ9Ssp/oWK9rI KSWRrjfnXm0jeeMw5awP4OM2HdpHZI02DJ2w5Al1dld+ytuRaN85D5DDcGlj0bOs9uNGwr11FhVb tFYSf5x6SRK9tkTlzGHD4GS1Ce0veXt80WLrH9r0R8QjypwJF+qE+S0ewkvqB3p+gcpksfQCcdm+ x6rWQw/Zv/nRiSf7xp2jjjhMsskFEXM8UO7JAtFZO8p4gbZ1IsdcN77RqI3cuebMpINlu3DjEytq sWOoV9xoxdXcdP4P3H9fr7jhHDnOCEGPcLZfdIAiw5z9wZX3M2ff6pl88HNQNDLEQAxyAY3kkzyh L+AhtgBtJLe2oveGbbxqs1ozzHWBLaLnXzzFZ4jsuP12ys4z6qje5cGQnXfe0Vs7ORsSflCf2TpG GY5ceYRl2gNoMEEyyj/0J23oUtkAC6TvsQ24mfOii3/XfOFzn3XnnAk3VqbSBrs89ctTxasbzHbz uT6c/7iRBqo2lrzSdiAHbL1lmxDnn336Yx9W/d3c56bRjlJHvv1/v68za17jixe8fU66jXOOXrbN Njp/aqJvPWPgeOyY0AE33zJLOncDnxWJbRNtlM4lEz50eurd+dKX2C7gQlfRrt0k/QaPsRWoz9gO C2QDUi/RT8g6Zx65TZGNQPvAihzknnaedpp00FXwEzcPWZRMgg++MdCC7ctqr7/+/Jesbw7Uqilg cOhnXF0bwye42tM+FB4jG6wCXfIU6UqHqN5ACwO0tIPIDMcxYDNTlzg/iwO4x+hsoR21IvOSSy/X ao5zvXoRO+92yQp6a47qxRjZ0rtom/15Ok+Udi22VD8jnXK769yRRxyKmJj++3V4MTffUgd8WPru O/tsO65G59r7E3UYP4ci0yai+7Chttt6G9nrW3p7KDxgm2jqTyYioYNz3tCttJ/cjMZxDZyJiG6Y rskIbF8GosDJpA9b3jh76fUnHG+9Rx2+acYMDyaEDf24bQDsQGwQ80qrnsw/6QnsHwam0HuhP7EB VnVb4pXNpZBKiUTxuMDSJ57YyWz9PuTgg3ShyeW26zirjFsqzzr3PPF/C8n1Hqb7EU2oIqvICHVt HdlYnVNrJSYThv5wmyKYJ9UesItiAfam5Pahhx5uxo0drdX0u+pcsKnq99zgyR8mQi+55Aqfb8kZ mt5iq7xhn/3kZ79ortIKvne+7c+d3K46DoMb67ht7K8//XEfKJ22V2RReRMt/INvTKBa58oWAo72 cBG8lM6lDmDX8GSg+nGtLMS+pi2YKz9u4kR3I0vc0El8cCLP6Hjsf1aIhd6b50mjefOxqWULLH7c csGZcNin6LltdETB2bIZP/qh9/tMTfjZ1aTesul4+6f4VvJa25LWFS5Bl5+Vs7KuOlc8rXKIiMMv 3/lO5uVgUYYnTP2d7/kkPq4fFj9gapzpl7CDfddh+Z5p9X8Tf0i3ypAhvQEg5w9HAvmez9ofvxqG sISrn/neH57+9bN+Bx7X78d37Ve/A5+DUviv/PrXv37PbbbZZsduwChJVrcqX4llV1Ch5VtXA8m/ /YwXQ7Z+GQlf/Tkw/Xj2emA2oIB3VaPDobmH6vDDiROYFVAyzBpCh4ef7VX9BB5Gp6ffeKOWJ5+p BuwRd9pYJYCxcYNmLa+Xotls0818Y9P6Ws7KrC8H8d11931SHlLKWmnEDTh0mDDGMA4uvfwKndfz kK+kPPf885ud1Wi+551vdueE6+zpsDOLTsd49912llH1Es0CXaj9tPfZwODASDoyXHd/jc5gmDlr ts5AuMe3KXCNPKf20zDQAHKtOduKUIRX6mA/BrYO0Sz+m7WCAcOBgQJ4Rm4xJLne93wZ2RgzKFZm kGkUL5xyiQ0A0uUQ46t1pSyDVChmjHcGLrh9Ki0O8GGgzpx5q296uF83SHAmyXwZNw+jrIV73Nix WgKuARnP3kZHmau3z1NeabToODMoggHLyh0fMKuOA7essLIGuujQgJfBGQwMZjlfKkOEZfgcugw/ iA9PWcZ84H77eGsIs4nIGben0OnjClUGEpEHBhbIT3au4A+rgBbIaIM/d6kcHlIjSN7ZYkRjQz4Z DMPYmauBGgw3GisGaOY8/GgzRSt66FCz4oPGlG0e73jzG33NO1dfcwArt2tAE7f87Lnbri5jrmK+ 7rrpNhwunzbNZw1xpk3cFhO6jsHQm266uTlr0mR3Vpg94uDAW2S8ctMN16gzSAYvOJSTwb86b7xj 9LI1EsOCA7PhxeVXXikjYE7D1aJcWcpWqR232077zHdTB3iO5O8Gz1BRhSYqn5wLco3Sm6XBEc7l gB8YOJPOv8jwGEBra/YN4x7HLU1z1ThfLn5wTTeHTFJ/aLA5sHDSeRdpZcCNlmMOh+SGsjPVQbpV hjJpIj9s7Tr917/x2VB0ULk9hm2OyN7lV+qMkut0TpHOp+Gd6545JPGKqdNE+00awME41+GgY8YY ntlVDjp9SLe1fEyNPvWv4xMUS59JDjCcztB2UOilvDA8tpoYdZK6eMONN/sckVmzbrUB6gEW0cMA Mp3DcyZfYAP0+uuRm1k6PPMYnyeFUcZqGLZnMQjD6jtmRoevIzpU1MycMuB1tow9DualfiOXXI2d V8xzqwcDdfD/3EkXqE6urkM43+NZTlYScog9NzQiI2yVYhUP+eJ/OuR0mgzjyRdNsSFMnpklHal6 cZ3qJ3lkEIUBFs5EwehippDOFvWU+sBgMIW0hQZl4Ct8BP6355ynWdaFnhVnmx+dBc7pop5zMDiD dtwax9a/2arXU6WzbtCAO4cDQ2vXxgTJXGHOgaXUu4cefsg37XCOBTc9cj7U/TqfjsE6Okx01mgL tho/1rSdq/oistSZf9idZfh+nA4H5+wGl7FkLW7V0RlmqsvIJNfIc2gtdHEj3zTdIkPHYxvJHFqU FaOcTzBdM9DEfeXRR2qL3h5irYablRh8iL9YURLvCpUO9D8VNDTZv/gxa4pR+5uzJnmFWqyWUCdH HY6zzsUvDnHfVmcjcJsT18JjGFNuzMxymC34cPgx88112wzSMbO+niZRONSTdOAZ5+1x4w/5Y4CI toAz3NCJyAF15jrdZMkyfg4pveY6HRKtG6H21Wwqtx6hw2eqzsFXLhdgm/f3fvBj3cg32XLOir/c +hgtD+ypZTBopW266uprPeDEQN090pN33XlPc53aPToJbCvZRvX53MmTJQM6i0gc5JZBDkmnLl16 2ZWqTzf5bCnqPG0k12YzKAY/EHkG6NgiwoHhXGF9jwa87lde+J4tuaGdhw4GMaCVM6/IKx1TVp5x C9zZkiNkmk4dbSO3/V2q9JgAQN62Ub2Hd9wQxSGytBU3yKa4YupVXpmwt+Sj3rJh2mUjXKwtDUxS UVfhIW0V5TX6paNdl9DVs2bfZjuAm6DQf2z94qB4ypi2A7mh/YMPDEpw+yd1FVoZxLxKK8PQV7Nv u806C72DcccAIBMavz1nkjtO5JcBNsr6cg3W5G2r3Ja3vgZRsAuwU26ZOVtXl0/1hBBtzzTVZTro XD+uIrENQhtBXYMP6EMmN2jzaLPIKzoVOeUWJNpF6jaRN1c7zQUR506+yJ04bs0EDzcw7b77LkST 4zcmCZlIWlu6Z5o6pKQ5U4OX8ImDibkMgQ4uZ4dRL5GzOyRbb3zt8TpnZSvrWMqfzjWDjrRbb37T 67x1hvxcIxlnku92dMDV1/lq961UzpxzeMaZZ1mnsbxh/JjIE/YjqzmwJzdXJ54yIn10Hbc0MQiE zuEGQ255w43Q5BAD/LRJ6BJgGEBghQydYGxJzs65bOqVtktYMcFgE/r44ksvKwe3y8bZaCPr1pWU z3VVVhzIz0rOY4860nyEZ8h21QQ4/fiRr1lahaosqD9c4II804Hmwo2xY0Y3bG/n6noGE5igY2KT rTmXT9UWZekz5IQLCjbRqn5kkrM5KRfsMW66YlsdE0l0wMcJH/oFfAyOcUHF1eIXOpiBI26z4rZH BrLRWVxSw2UJH9Bh8rQV1BkmFTmL6RrbUGpPpl2pczJnN7vJrkZHMnDCGXa0o9af0lkMXs3RhChb Q9GfHCqPvX7F5Ve6HEjrdtlxTI6spHhMRu4j3cfAGLYddsGNys/lV06VLbPQg43URc7eYeB+DbXJ 2OfIInYhegIbYoLs+tWHre6bkylnbr6lzcTeZSI2CgLp7ly8p4+eRY8y4DRu7GhNCt9unjGBytl5 3Hr7nne/Tat6dtfKWAbWfuvBXOom9s5E6SmnUPBQH5H1Seefb/2BPWebXHWSox7AS11l4JU2errK 9KabZ3pFPyvXcB9877t8syADL+SB1bG/+93lvsGW7cGkwflet8v+pSw4QJo2q27rrTwUm7RYDTdJ tg2De7RF0HzdDdMbLkFhsJRzLieMH6+bC8/ywD9TAuutv64HeaH3Wtldt2kikzJ8UO2KLy7RgCA2 Jme/Mdl/rfQFk5scgYB9iKzR7kvsfXEAfTBowS5ghd8tqrMf+8gHPNgVfSpyTm5Vr/rrTwT9Cf52 8tebuZTP8KW8b7755utOPvnky+UDd+o/gPK7/z2/8wlc7TJePvvD8rs/Hv6D+SV8HZ6Z4Zlx0q+G H/J9RYEHg1sRv4QZ7Jl+tPEQzzd/fOPyWfutEkEtXIblkzj85TfPjIN/vq9y2mmnfeTVr371W3IE WGEtEbwHiuRpkhchvV/hV/9mOImHaZd4aqh4D5iB/umDAYZLo7n1x4+PgiAekTKG2Y033WLlzYAI M4gYFunYLjN6iy21AmQ32QWrSIlNdweamR46b9wCwNJZlhdn+tNklGAQMGNGo3fAPnt7xRP7htmL jrIElgbzYBlYGAS/UePFjB7w+JEH9qlfqcYGQ5c9vcShEePJNhrgX/7q1/tmBQ5jJF8Mouyi0fvV NFCTijhyquwrHjMns7Uck+s84QqDa6wCwsihMUU5HnnYwW7kmaVfRVsWGJzhClOMkOQtadGI0vEA J4YpNNI5zS0UzE6z8inpADfGAIYcZyzQgB5+6EE2qNjTzGw1szcYnXRmL7jod5qpWqSO3zh3whnI wNDgAPExulFj0vk6MFgNAXSzNJiZVs47OfOc89xRYbaI2U0GPs6ZNNm4oYVVHNymQl5q3mAQTVEa 92ugkAbqZeoc0vmfIoMdo5cVFczUcNgoB6oOl3F5uPjObQicC4BjgIzOMIMZcZC4rhxVp5uzXuDX 05KJTbWqhZtaKI9p6oxhJDIoxaodDgPkzCJow7SDQvjGYCaNNAY9AwgsmV8oQx8DmLgMnO2yww46 zG8b50kITE8KPWkxo3aZjCEG3hAWbllhKS0zgRdW9HO4JzOodEIoZzoo3AbEKiw6iTeozFkpxgAc My+cSYXhQnluIb996DgrInQz4HepDMHbtPqAvfMYvnvvuavjn6cBJoxe3Es2HuUtC9zsQyeRWRsM ToxRVskxMETnZXfxh1Up8OAqDZrUvGPbAIbkucLLTBO840YdbhHjinjcV7/+LXeQPv+/Ph1yKTaF FDjYZcJKC2Y6oYFywBjlthcGXj3Apg4gBhXGLjOZlC2OQUoyfv5FGohVp4BONR10bvBghp8yoP5i pFA6lDOHIXtVGuVNGcnQZACH+Hzzd6RkDN4j57fMutWdD2hk1hJeMwADnQwU0TExr0Q7K2vY/oXc EY7jFzyXq/PBCh1W7CyVwbTLLjvYYOJGOVZ3sE123733tAwgB8j0PuqkYvh6i0+h7SDVuY1Vdswq f+4Lf+dVLsy8rTt8eHObOrAMCtOx+va3/qk5eP/9PevIIN51GnxhgILOEnqDGeak0YRWP5xtcKu2 2KFjxo4Z7YNlqQuUP/WNGyZZCcXWSsrloAMo7zU1cHGBB94wXBg8mKgBJAYx4SmDMKwwwrglXQa7 WMmBvDFBgLE6T50AdDs3WY0bN9aDBlyJTIecsh3LweWqP9BQ0w6PqTdDuQwHhlpOG8S2xquuvVbv WtGlsuP2HhwTFdR52l7kC33IID75RFeygobJCjppYKPOWd9cOtU6lBVb6MCD1XHEwGWw5PfSteSX AQw6Q9NvvMkdmMO0nY5BBnQkbQ8HojJTzu1Ue++xq2R9A1G7UnPt9N/7dij4uMXmm7meUge4lvzj unWTreDogpA2chH8CArj3fxRfM6NYTCV9mBzDV7QgeMSCmApCw49ZXKF1RfEYaUiNxAizhyYOkN6 mTaaQYw9dtvVnUfKgvhZBtBJW0nHl847ed9yy818ADLbycE1UoMO6MOrr7/eK22wAzhzj5nn6VqF RD0BL+0VOpDJJOoVeo+bhZipZ4Ust3Ax4YNMpKxSv7EpoAdaIO4SDRTRSUS3UrYMftKRhffIMh1X eEpbQ2dlgmR3l512NF7KngPjGSBBjikDZrwnTT6/OeMXJ5mPDNSxApXz+7A3Nn3JRjpUfxd3KtEt XBkPfxmMYRCL/KLPWJnMJAGr+BjcpL0DP3RRj+5Q5+sy6T864WwvhWbaY8JYhcDgnQ+xV/65mOGB Bx/WAMH9bnNZCRZ8jLaBvNG2UgDofAbbKMcLVccYmIM36E+2tA6TfEBPsC9K17wUT+noMqlBJ51B Hs4m4VZKBpDRcwyIsf17K012oCvgHx1+9CXpsuIY2WFAnnJi9RLbpq65/veu6wwistoRWhjMoY2i /WOVDKthRo0a4U46+cDm41IBeMmKE2wWnnRIOQyfS0+ot+gdbCNudWSwBB1HuVPvWdkHfcjLHqp3 N6tjzsAmdY9BCFbEMUBLXUdXTJww3luwCX9Ag28f+MgnvYoKvtU2u9AVB2Z4GK79Ki/wlfaV28fI LzoJOeeCkWvFEwYgcdivh8ouhMfYYUSnjTzs0IM94Xn99Tc0V2vgEV2ALWXdKp3Cih1kgVW6tC0M slB3kCduKN1m4kQNrAxrPvjRT3lQ8sMffJ/JBZ5yoL1Br0EndZLJE1aBM8mCTc6tlcgRg1PoMWSz 1p+0kcgAdHFr6PixYz0Aj36gXvvSA92SyApl25saHIauBQsXqFyu9AAEODmPh9s0WVHJtl54T5kw YYYNjVyy4hWbFHv2sEMO9qD9db+XDaWJBuhHJvbUIGi2ISHZZq9+4ChuYFnhg7zAd8qJJ+XB6rjt JH84Brkv+t0lrsusQkJ/o7/gWSlq0ws/GJANXfSUBuIPUl4e8gA1ugHeHbT/fh5IZvDl8qnTPNnH Lg74x8SAz5hSmuDF7r5Ycs+qOmQQ3QFf6BMxIHjoQQe6zwMdkTdihYMn1143XXbSDMmczo1ST5Rb plnBfudddwsPdUA2ndpq+geLpJ9hD+07bQUrEyfL/kI/casZ20uxP1lFxCQjZy+iJ1mtjiMeco3O wabCMdCFDUwfCrr//bs/MO1f+8r/Dr6ZboNWP8nRyutP8LU/l/FNOXZliP35q1/96kfHHXfcNxSQ hoBmFi3I9bN+B0mMNAZc/Z5wAvFKoRSc+jvfeRKOq+FqvwwzUPnJ8OfiV8epONHjPeCj49iAIA/M JEE13GDvtR8DN7j047t+zzD8Moz3+g//Ooz3djCoLwz/xLVy/0ARI6gMSNvp6e/ymX5tESkQtRTg 8eZ6lvGWhSdxwjGo5fYuD98GHqSH6D306NtpF7w8iN7C4CE8z2gplFHpE8VewPU1uKNBxqFMwxlr dDQw0vkvJODpYAKSRjeVM2nVjjAcDU860gJPP2yG80Sh0iE46hUnNG/SNb6f+eRfOQ3CnB40QU+h C39cP22pxCM0folf04MvfhjkWZLJ4x58KlglZ9ocRw2Ezw0RHZQVDoOjdoOlRRzOvsJASdcPl9/J VyVqGoHvpx1jkEa1duZxH2/gaR2X3NCJxrhN188v6KCsGMyrHXD84Whs+Ksdy3ThVQ//9F3HSx4D 188351v04tgqkbxKOXVA/rhQolzq/BEc9Ichk+DJ2/xOOAx1bofocQV37WcalpMm8IPR0u9Hh4cO WTrybZqVdTrQtaOzQ5nVOFxP1CHjMGiuNv/7r37dh03vvNNOMjafHFxX9MkBabCKBL3VW15Kjc5L oa8ub96zzKEXOPRDfzk6DMQUpR+SwUreIm30B3lbSfGRszCQyRv88RkY8ENhbf0kolyPPLhM4BB4 enkHXzEma51TyxW4BpML4iD7t8ngP/Y1b2j+7DWvbD798Y+4M4AhfuGUS5rP62yQb3ztH2Q07uIB vC4NE2TesPoLBkN/6nXSxPXyPPLU4wdvxIvMO3TCy34+wkPzCj7L4KzlhHQoY9RmP2+gC5yUM2WK HqSjGHFCtyvxkCVnKXiMF57QRRED06OP81tB0EJ5to4I/uz8vEqHfFZwdGwpA6BIgj8udUiZTHwM nAJU862WUeAsizBA+GudRxhpeAJFwbUOgBZWPzDg89NTTm0+95lPaEXMltFxMJ3gEwIe+kOvB0fE E/0bwGsSqxzL/9kiVTt0JzgH1v+gsZ/HTlu09Jd3jdPv5jnEFgcvXMyd32B1wHxTXAZX6IBGKUSc DEuUfgptzcPwY7AEG0Px4JXwMKBrwTEfS/lAo1zdplAGX/7HrzU//flpzW9PO1mDJJs0T0oXriJ6 6KBmW9Ff3jWdRtqff3kShz9gkWPaGepOTZfphuZ+HkNqxzoPEmfpg5H8pY7Upx11FD7WtNIJJZ5x VTZgIu9kOhJMnWh/SBX9WR/69Ximk+1K0tHiTJ7oyQ101Pt+mgeTCdsX/fxI5NWTNohB59rV9Nbv NUy+w3M68qxQYQB00nkXaJXu9Obvv/C36uhqcE1099QHRXSRKB6OX7jWOjyKAu6vL4Plc3C/wdrK NgW/ZL1o9V4lK/COzuYHP/JxDdjf2EyZ9GuVXwzUxkSuylPw7oOI3lY/FBwuf5V5W4YlacqabCNf 6WiXl+r2QfC7vpWArDMJh/4cvM0I/d+f1uB8GRwWunIgOdNrn84T7Ydol6c/nffIrOURnZNyKphs 801vZUOD02EFUfCQWxx75W8w2k2j6PQZkFX9h0/c8tvpdVLp2hmnV4jOdLLsA1K/mbHI0qDl9lzr XH9eBm9PsHs6+506dZ8GYjkmAv35xS9/tXnbW97oCWxW9WU/bwD9rcd/gxfKimpU6WPbOfKqBor+ RZ/RwQ2tEg1J+IGB7/TrfxIPmPwjHJdw6c8Tl+F853v61xJGON+4jMuz9q/hDVj9ZJzKq/e111rp DVuRL9iaxPQTxneG1zAQnEQTjsvv+h2//C6vPY8MT0++E09/uunfPutKavOuNDJGJmrdiKv24A3x 8RMphHkR79QwZw7MxCp4DCOFk3haygxX8CgiB9RGWMEDGjk3GDwV6KPbWsrlV+JlWkFANJ6OrB8b nvnhZ4i8adU3T35IP5VwZNYhjgFdSW4LoxDzS79JEmHpFxEN1OIFLsNrPCag8Ji0mVFhyTmNAeck MBPIzBaNXddm9PFYmYjOcSG2ZJBGAFc+nZHetB3sXPTzOOEyfwHZ+9vilTfw8d3xOAdNksekwfvT asBrl2mlH9+ki8s0eIY/0pSh8sMIJ1AOX/O4lmP50Rg/9aRiRfKA2vWkq7CnNXiEC+xqKPXGSiHS A68TQigB0Gc2ssQh1PFKmGl1gpZ+QIynlmOCbahI/uo8GVg/NGw9NBoH6RQeK76Tk2AEnohZ2CGc NPa1bg0eJn6ezpfSacuq+PXQU/JkeN7BrER6aZNHkeNe/+DNM+JjEEv8eFUvtc138FiwJS+GDdD2 l1ldJ68fjEiumb5SK7eY2d9GS8JZ1k6HweT6JxKKejMYzS3qIluFVkcTjyWnWa48KW/KjEFGvu30 TVL9eS6hRhikMDgZ+AhLXcCb45dBkPgGu/5ITC5n9eyXusIh5Udgyb/++kAIYUFfUIIfZ2U4YZKS d9JfPkuYVm4NX9ur6K67fnpz3vkXavvjZl7RcKFm944++jBdALC14mIoQyc3awXNNXkga/GWAL49 e6yQOizlGL+hXNJahztn/ul0ecfjyE7Hm6g/yRs6IC5b0fnUSpJTVZnCekDCCXfy2FlUOZhuZ1d5 KBEMI2Y4V4LBoA3Ajto2v6a3Ra8XYhmhn22wIljuNEiwUlVnHDPA2/LLVMhPpFPyKjgoTt61uDOC POowOuCssJky5bLmLdruzIpWBpUgL/hqcuPdeQ85pqdHcw4u0qjz5M/ih65Y+kxXHzIMORpMVzjN Ph4bt8rqKeHpd5F3+VYZ7aFH8aI8gZSDZvDoiT2Q5eAg2o8+Peo4EU1JBI+Vpa6O9+CJlKEFWePM ENNl5IkpnhmuJL0FkBlz+HnnPXd7RQQDfZJW6/XguAJFrXH2oJK/CIJlQNSOb1PEj2D4ZvAYuTeN RE0YvUELvDG4/NO1MBUeG53ClfT08FgJZJsWMmQqSmJgwxU/vYUMCbIkbEr17kEhQ+qj6Ghi4joZ Vl3uszMy3Oj0A18z1Wc0oJ00G5GBkgbg2txGG0V7hpP34DwuOrfgAZTXnjZPcmA/kJDJ+ADKHXfK /iv//C1v53nwoQd1s9tbvSI62kFRVNeHQiGruegIw+d+R9vKahBWt/eHB84ix4pIbPPS+eutD8nj gIIvAx26gpAOozpCoolJUM7SRC+ybZ0tsWxrcwNCHpJuRe7S6U0p/QO/EwnZRb5MStIr+w09mPWt yHcPtYrAYM5QOqdLK3JCXNooJyQCal3R2ieCgb/3a+UPZ4b189rpK03sFlZIgcx4nPfIAZMWYbvx TU47xyAYsp0hEUPh0NPycHD5cz/BMTt8RGQl3ErwR65NTYij/sqzJAY/eK3T6fKtmLUcJyLjKeVZ 8JAOr17567dMq7RRxC2w5o2+XRZV/CwbcOG6707qWptL8RnEP+/Ci7W1f7JXKHI50p5aiZh4Qd3j FKdKrifoT+qDfGabpwzTBvMdzlq3zS71qQ2IWpeA+azD8ev/S5bWz0SafokjceaTcFx/TU7/hAuo +M3xlZoOQvjOeAG5nN8VHSgaCnESl886ucw4YUlwTVyG137E7/9O3IP5D4WjThOc9Xc/HiuENtVM DY9+yPIdh10LkCKzddAp54yzEhJnV+FJfC2eAiJQ9CSNWZsoMPib9AJXxbcxV2BKqB8DvOQRRkHS U0ErrMPDRwczGJ6OFEJ7XQ8eAIs4d3j0ltHaZDo/GpSHtdf6HG3rYOkz2wPonL321cc1q6zBqgKM fxBUcVp6O782DUCBzrT0fFY8VlxHBU/iAKGc8cRr/JK8YTrA9k1hA3hT4g5AXTyIy2u/G4DnWfK4 B5/TKgkWOUZmnxePhYeJLeS4Lhr492zlOJhecUKkLpvHyl2dp5LZksMu6z0efPS6F5rH/bpihXmc ZBUSWzmmrDRRNGqjUT5nga1YnBtFJ8pbRfviwZMuTxkYz7o+WF4FOySPFcVlCj3Zeyno7FXe/Rjg UQfW9BTAVo6RP5z8CcKFh14qPweUH7yTnmXIcY9AJu6+Z81jmY/eQvYhnR3B1fHMarMFgEHrXbRy iyXhbN+z8SA8K8JjU2x6eWsz1r0Zj4KgK/MEqJy94jV+B3jUgTU9BXA5PDbnIQnwfie/FeHxs2rz RE+rK5woiShh0YCuKK/hBz3yeEF4HEmUtNpUSKFLU50Rtg2+7z3jvI2iM8IN1v509BQ8LY+djcBI EK4tbnmkX4TEL95Z5suQ40F5nHgK3lqOXxQei44BvCk0QmLbNuBnjxLIp5TSkqVLmvO1TRYbgBuG Jmvb7Whtr+SmwWdykFcpBEuFABy4wmN3ldIvQuIX0CF5XAANk5H4iPe6+PB51jxWnLDvat4E7vyt 9TF+7e27CYBfec/cB/8gMkMAqN/1uZzgAWW1AnJslIU3pNg6+Q3kcVJEYEC2/MOj+CUOpqno2HKQ 912aLDz6iCN0mLBuZmKwVq6jl6j+0ou25+uoA7aRcb05UHABWeD9KcnNeJ3P9cH3vdMryFoZJHmz q+NZ+6awLq3AI2R2pNvC4dMbHEAVBLDnyrZlOz1nxXCA9WuPP85bOb2qEQTgwBXEg6IkHNABcpzR Ojwtj8GXuImPK98tzFD6GFAxC3CTlXj07HjTogOz3W/POdfbiVfTqlIGwEgHknmyio2zvT7w3nd6 pcbQdsWK8DhTrOkp1K6QHHeWqfOX6ExrhUd2rfPgcAIDsOUfHsUvUeR3C/N8eAzSisB+XeG0HN4B tW+iCx5zcL3HDTUR/663vaVZU9t/PZnTEqwX8tBGrAP+RN/hDZkm33JtWfFOWCucDs6f5BCx+t/z m2cdnnF5JsxQfhm3Pzz9eSaOfJYc2L+Gq3EkPQmb3zXMoO8ZYdDAyjMR1vD1e4L2++U3z3wnEwyv 5Dfv6RIun/jn+jn8gE34xJF+GZ7PDM/v2N9QcJx66qkffc1rXvPmnv3OQCbb9fr83PKRDQ2R5QwF BaoPuP6s33tprvGUkD7g+rN+H4DHtaby7QPu+6wA+16HAMRA5MwF9qlzbgedXpa+MusQW5AGK5gh kFVJDg1R86ZA9QHXn/V7hV6vLyCePzCPe+le0a+hc54YhoZ4AXnTqouSWl+i9Wf9njTGU/T8CfCY ukLnlT38nLPDGVrR4D9P3vwPjweofwbgOJPq4Yd1hoValBG65YQDNNttS0XAapmr3wfI3//weACP e3nEV3Kw1h+dbw0xMG4d57nXh9hu1W39dTpJVkm073MgKemzwoAZYVnP5SNbPgT4E6rmV+dbQwyk po5T8CS6Alx/1u+9uISnTx/zSduPHcAKALbxsN0TOyDPPevFMUiCPW3yoNDP23PoPNWoE6rm14vP 47boB2NdTX7/e2bH/r156gd9vt+0cZw7xdlxHNiLG3wrUyFKD86BeUCHHde7BZLbnHfGLY6c0cVW oxiCqPPQ4akVVJ3l+r03fwPleDAe36UzM73qV5MNtN/ki7OkcgDROHsSGQRvb8LP+6snuSGxJVTN r+RsREoIvig7VuFyjlceH9AzbKcVQ+vrdjfO+6KseuIqPqkMdIPwoo6oCH2fA1GkTw/gIHgT7gV6 9iQ3JM6EWjEe96Kp4xQ8ia4AMmDKCiYuDBmu84o4hzMmQABM94fnRab0x/SsWVW/1zSy9ez000// kcYMOKOIEWuGIfmD+fnEv/5O/4TNb2DybzC/DOOJq58Z1u9vwAo2wwfLEmn2FXxGH/z5fFcUDY61 862JJIN81wQCuSx/BnsI54lLJiXexJU4gKn9crAo42aYdFk9dkiwXGLRMxOIgPgNvzpE74w4Yt04 cg0NsmXj6cbLEw8xkgje+YrRfKgNjOkfT1JIPP0xI/WEjy1sIBkcT6QV+Hpj+iuR60lul4UnUgy6 DBse8duHJ2mhscQQZLaFqYecTYvzN0j0vwKPdQYRuRS5ma/yGXl3ECExi9HxJvwcqWTTYcvAEwif HY+TiEiiJGRPvf+xyXFhSXDS3DClyPp/dx6z/JpB1M025VB1rX1pZ1qH1hVZ5j264n94nNIvqYq6 FHUk60Ms6V5Dt5tsueVaDoLfGFidREaMZGWNx34ZUFfuktZ/dzkOnQP/WiaZmW2bV/RkcLiD+s/g sdsdEo6KE+UtMqE0Xf0efv8F9fGLyGMzN4teT7NaTzqPL9WhrXQ4M5jyyNndlI8sBz8T0HgiXh0e xVgK0wF6H6rNK2A1dOIKv8F1RcLkM+n0Cqf01LMjtcNjvwyoIMJW+GNs84bicZVRStQ8rv3K+/J4 rHjcBMXhwktZRaZvm4B9qFoeC2S3XXbqCx342W7H+UPwuMoa6CnOdLxzQDIsIevYuN56BH9qx2fL G0P24ClBVQz5PFceKyH4F25oPC2PDd8l3ZHa4TE2tZEMyDUNf0O7GKjo51NgTdwRu3wZefiYM/qu vHreEypp76GioCNCrDjrxfNfgcfuvSYTUmBKeQ5uV8T5qNz46O17smFoR43CzClMqRiaYZVXy8YC Xcdsw+JFEFRYHiWkxoMf3/xleAH7T38kDUPbFcskKbOVaHIQpn5mWGa7Rtjvl/iAqcNq/zp+vmca 9Tfv/fH64RJ+mc8VHShaJpIqMInIDOY3T8vvELB4J2yCgIO/dMv7TrjEU8clrP6WzeG1mxnHTwBS bzsUTHaBMj751Z8rAU8AIsSg/BhRfPXiKX5+lDiZqPEQ0L74FYVgEP9E/O61e+tighd//kpcP6Uy w6slt/vkLeU6Yw6Cp5Dcm6eEy9SEp/Am8NfhhZ4h8MB7zu4Ip4+0DIyoRCqhwZQCSXhfcHwWT4fr PQgScPvi1xeEx0LpwbxEXSdtMgl48XlMhjvewBPR1RoahWjTW9hUvHrLPAA6PAkLvjpyeZffs+ax I0BbIOSX1+XzGKq6OCEYfHd+y6rjQTGwvXKcbIrwwNaPJ2Ai/Y438ET4XmAe02myAV0RtCwed/R0 OYx1tn280eeLxeOurCoaRTi0p/z9Z/I4qYgDo2EMhJRHeQeGV9zyeBxwqn96+WPicb8cd7kptJI3 y68If4HlONKCM3APxgRv7JPeERJy4AjBaV4BaQugvLhjXvAU9ZGFY4iInciNocQsNLR4Irsk0Ysn 4TLx0BVoVmM1QwNvQiyTxwBl7mpdkSQ6XD/Vd9aHCAp6Il/xWwjp402hW3ieva6oiQDtH0iOSUZk disk8SDjvfo4+IV/OLNG8WJwSS9k1Y4XSgbHr/5qHneAhnBSAdzqnAjAs8bjT6EDX0DUcPj9sfM4 +JHE8xyEx+ZV5AwIZ1d+HmAofEo87ecAHkf89teI4mtoORZWJkFgIi7J5NXvQUPN4xx4qNA76sAf cAbCF1SOS0JD6YoYfE4eJ1UdLfiY9pLlZfHGPO+R48RXnhUThsZT8XaAHHd4ah5ndUn0gaHgKfST CU+m6Jlok4ZWnOqknVRi5JmlAxDfnV+mBD7qupaZKTzh9GrY5HHo497wgIAuXNJVvvTIOu5QEmkz Yd2SEQmGrD48AaP0WzwFwLB659nv5LciPK5IqfAEwhWTY7FLA+7hiIGDPt4ST5ulZbZ5vp6jFGYv HnCCTXzs402ERHolCChDR9h//i+0Q0HQk1QVbkTGWqJ6Vyq23omCZzKXwPzuwzIgXpdoBCU+vghL PBE69G8dbzCowfAsL06Lp3/wpg3oe+mHywR41i6/68xnZvMJPHD9sPld4+O9xpVhCdsflmnwrMOA r79Z0tzzDWKPPuNbKkALYG2CP1A4vRiuhQjvTELeBu3HU6A6PPKo8RDJEQvegsdf+im+EcW40icR 8y0ELZ4SR94t2hIFhcahnfFZPBNNlUJ6GYKfkqf077QJPgWP4fjxSwGNsP9OPE6OmPfJm8KNXt6E pznkH8UIdpWAwFBBlegA8ZfhEek58xiZKH9OS+iMuZR5YA8qQn4y3SSjQODtoPJd8PhLP8W3ojx9 wA0N+vXhGnyHy7gt2ioKr/Y3xiqgSqEfj2P0gAaGKjUTChkcru5Gr02cIBkhTpgmMfhmmGeKqmzR 6cVwdWKkUr71MOggPDYtLZ4SxYnqHX+H9eLxl36KbyRtRP0/QAhBi6fEkXeLNpEIskCXtyqgCskU HOofYeoBNeYCVgJ4OE9+acNSvoLvvTx+Zrk8znS6NOzznHlc8Akdb8aqH569erSQ3z4MYfnhCly+ +OPHGFuPiMBnpNQXECkFUPkFIpAphj8yIGQRutoAI06ckUKG1XIMnhaV2jzjkIe3S2R9TPkrlLYx BGfMz5nHSX/gMR368bPkJCkvkF0E3ggsABnXn3wkkvIaYH0BBioIBIfr8Mi/Bk97oEDBJzZQcIUy f90NRJHwsnhsFG2ykY51jvkY8dsM6NOg/TxOelo8hfgsK/z7wvg0dv3UqdRgps0/BaLCk3ENz0ci Ka+Bpy/AQBHieqN8dHjkX4Nnnur0CR9EVxhE0bktyee9CM54Aadk4Fcka58go4Nw/Iwhb4O+6DxG auSSHj7s0VEbWeoLMFCbWQM7mn7Qog5OPH08dpkAIx6bZeJnexYOmBTEocz9PE4bkHYyylVtYCZq CpKekrBpAV/Qk+QkHtJpHYGVHJPGUgaQtIoW2gB1fP0kHkdpEdQvBYJITuMPx2Mos9wNyEwheAg5 7tcVLfVZVkPxpk2n5FEPgz4HHkfEXjz+0k/x9bMmpaVTIeSbTjUHwRMj4wIfNlINXeg0VGKPeBmS 0ImHeg5/GUgke63cGLB85GyNAABAAElEQVTg4PEC8Zg0nB8TTyJdGuaBAKK8uXRHYcsrKyI5Yi8e fxGdJOR4GhT8+jPqNiQD8ejlsSMmEocmJ/GsAtoUwBHOofohPz14Sp5MduJoUfESIYn/WclxJv4i PGvKe5MvmctsKbAcZt3musDn91Co0j/hMpn8zhTySXj9nvEz3mDPxFXH7ceR8fr96++EGfBc0RVF SQhIec/vfM/E+M73fNaJ1vH6w+u4GWcwP8ISTw5gJS6eGSf9EjafxF+pOsGcbztXDr1R2V3x22QK 0hoDMVIh+F0/aBQ7VROFubIYU5JUEFQPx0g8OR6ZeERHexMC6I2bXzB3LrED4dAWT8QhvAdeeB+d O695VFcAM/I/btxYX7Xe7QEveDrEgRc85k2XNgEJFs+gMnljehwQ/n+yPO4rq+CQc2/+JG+SV21Z dR4djxWjcLFFk2CJxwGV8lbyQvnceUxDxHldXAvNjSNrr72WriTe3I1xrxyHDHB2wOrDhunQSV1X m/Q+TzmGfpaGz9GNd3PnzWtWX32NZoyupeYWDHPyReDx/HkLXVcWLlzQjBszplljzTVa/RCF0zSP P76omfPIo6J5rm8yWW+9dc23DK/LKt71m3Uc7q2ArnA8M4GRKxV2W8eLpKSAGBDpwjmCUuhcB1bi tXgK9IvA435dgRilDKCnx0s/LXriieYR8fjRueKx5HK99ZfFY+XSGS15XEEet7wZIMeFf/280ffD 0KT6QoLjxo51sbZ4SinMmztfMPOaxxc91kwYP1bXpw+Doq5Q/NaVVcSPTnTkYBn6WHgylzYm9T1v /nzL37qSw9S3/TxO+cvw/jaPDtlC1fE777rLPN980021HWgLyWqSrRcTmqmvmBxH3mBXidfKX/nu 4THUZYxejqVvSnpXH/4wcpy5zqJq01c9RkY5G+Xue+4zW7fZeqJuWNLZIyXSUDwm2HgSUN/APrbw Menhuc1ctdGjR2/ZrKMrwt0BEfRQuqIfj5P+I+Sx86wyJm/c+LSm9Kn9Wm7504XoPOkznikf8eTX slj06FzVsbnSDeiJ8ePG+ZxDbnx6TOcesk139dX76lzyBuxOoODXxx8Hj0NqKPfaBgzuOPcmO3kT T0Iznl8NHtBkE6jKKSDjoUWW6iyoRYsXS3bXbLjNac4jj9ge2GCDDZrNdFvYo2qT50ou4fE48XiY zpIMuRROlcOSxcV+UDlw9s4WuiUy9Ao8DZhI/TnwuGQi6xmrc7beaoK3phXkykGXmzqn6WuhgoBK 5xjtC8xj9PCiJ2QTzHm0mSc533SzTXSW4PoeYEtdkPov0u94k+HBt5LpYFrkrs0YYXJFjt3bcEaL v6BfHDludCnNI24TWYkbR0mIzBeIxyrk5rHHH7dcYqvSJq237rqFtynP/bwhffGq6IpnxWNFfHSe 2m/J9OInFne6xQiDx9C0QDqb/tT8+QuaMWNeavuZgawelzqnkj+H9/AG6kysgvQUzU+ovmFfzhH+ LdQOb7Dh+mFfVnjI8QvFY1JXzkxa+6ME0odn8jDC4+s587hN5MV5yXyReuSNtyJD8Li89q0oymhm fYFKPxD0u4Klxxv4/OsJKP79fkN917jBlzQBX3/X/vlO+HJdHhS9PMAkJJ8JnwM1SQz+CZPPhOWb P2AzHmHpzzsuv5f3BEfCDBWvhklYniu/7nWv22ubbbbZsR0wwhenp4nry1FXeQMsk27BqvgeZhoM j6O2MUx8YCvYFQddYlS8683vmeQQzwFQxNVfGzdflLQHBGQE/Oa3Zzc//PHPmutvuLE5+ID9m2HD VouSqdMAj74zOi8DeOPwgGrhjKP6ytfqOQCPwlaEx9BPJwalhN4fgMdpd1Rnki12ebS84V2pdjCO POjPAKgaj2L4Zgdidkn34Mk0BsUjyDZcebPrw5O8SbgAqr7ytXoO4I3CEk/E55cIzACt1Dz44EPN yaf+sjnxJyc3i5csafbaY3cP0tR4UJb3q1P0i9PP8E1bm226ifIMsbiCXSifDY8pUxy4MUZPOvnU 5kcnndzMUwN9wH5750j+C8LjTMspLoPHwKEbLpwypTnxpFN8Y8k+e++uQxjVSLuQnV0ftnrNtdcL 5uTmF6ed4evUt9xsc/PNmfJP8LhNLrJr1q+IrgCcGdTbbrvDhxFigGIkYTg8oneMCL7XlnHOoXvL crX8mR4hb8tKEV8oOUasnM0200FVyp/DWkK7r5VXWckG2eln/EZy+NNmxoxZzaGHHNhMv+Gm5kfS V8jdNttMaLbcbIvBeZzpJko9V4THkEKUkI/lyzGyisF6xm9+2/zoJz9rZtxya3PIQfs3K+vw3Y7H QcSkyRdInn/aXPy7yyTP+4YRSZ3p402yoyM930qIPnui6NsQ8kQnMuh/88xZzaRJFzQPPDSn2Xbr CSVXxK9w5Wv1rOs4PHhi0eLmtDN+3Zz520nNWWefJ+N/jm4e2sPy3spLFf/Z8DhoGZrHni9GJ1jJ l7z3PToeF54Arr8k6YWUYyfdw3jSCQ/kYNats5sfSlYvmnJJc46uH956guRTZ+zYtkiC9Kx5bJym txcxhzdfceVV1sG/lGztutMOPvQWnTMkjwfBszweJ1m9AtXL5GfNY+gouhxMmUaNh3fOZvnNWec0 d9x5pwZwVpdOXU++gu5lhXzCI/EEddWXX0NPny2+/1D18PIrpjUH7r+vzzucp07bqaf/yvWUW+zo SHU4hF3xCwp7s5KrlNIKldWLwuPIQPub3Kh57EAF9LAzAYsn5RRlFR7c5njzjFtkF57TbKabNB/X ANtPfvbz5sQfn6zLEtZsdtzhZc1vpQd+eNLPmssumyoe7+1LFMxT4SY+hxef8ouwH55a+lSz5+67 NUtjWUktDKKLtFesPiSPqWd33HlX8/0Tf9pMufQy3XB2TjNak0jcnuV61pPZlj2FFZn5gboCHrRR 25f++PG9ojyGFzfeeFNz4k9PaU457Zem0fIne6JzHU0hhApJr2fJG+TYruepj2eLBxIUp64XLquC vmNUenRPeAMvn9BA4+m/+rXbu5tvntkcefihrncvlD5GP15z3fXNT8Tbn8pO3GG7l8WApHQKGU4W BGXVV/1aynx5+hibePGSJ5uzzp3c/Ehyh14+9OADrLPCBhRS/YemKZdcZp195jmTmr1227kZMWLD St9ADQQUWdPrivIY3LfMutW67SeyQ8eOG+0Jy1i5WuER9heKxy0T++pD1hRyMqjrD9D38ng8KJ4X 0bOWIGe/5IlymDFjxnU/+9nPLhd5BOF4DvWe4fnMyp/w+Neu9q/faxje6zDeB+F6D1394f34Vuh7 RVcU1chIOAlMopdHTB1ex0+8iS/h8jvDn80zcWQ6yCr4LLMF0TM0PD3OOYko8Roq0u8GVJiD8UnU A0uJlAjFdXjY4pWY+vEEZMbJZz8e/PlLLN1H6wOi1rV4Wh/FlScNAVjWXW89zYY/0jykDsDTVrLg GYirH4+hEk8Ljkd/9DaQBMPZKwDj9dnxmIYo96FTcXEdnheKx6jDQnubp/IduWh/CU6X720DkAE8 Wzx8DMSVcQldooaJW9/asmrBBdWDZ3BchSFOx1G1+gTl16IBifHgUyMUlOrECM0ezrr1Ns3WTXTD 36ZiPCu7UZw589bmByee1CyQIb6HjMF2sFWpgBGXTxLO90wx6CkUKfBJ3W7DcmIaZmrlyA03bG6d fZsMgE2NK39aPHrJ9wyzR0E5JI8VCf5yk5UNRPCAqI2HR3yn1zprryNjYXFz000zFFeHGBPBgQGI ocyVtysL580zZzaPaxUGnXbPWrpjUhAKLW89TnjSL1DCv0HkWL4YYFz/O0MDAVwbPVoHY64+bHXL CbfD3Kdbgj77qY81E8ePi2X5itMjxyTcdpSCikw7n/jm+/OV40hBSQrhUDxOmKoAWhI33GB9rdKY o07eIt8wxuq1VeDxjJlacbEMHmfBJfIV5bF4A3vQL6xASD7ks1+OKXfCNtQtaPfce59n2Umy4rq+ wMmhrOvoBp/Hm9m33eYVc5YhQuENkWqHR5uH9qWFGABPiBncNFOnXdV874c/8e0+x2rlEvlpZaBD 2uIKr0jQKRVdgW697Mormx//5JTmQ3/xHnfQlmi1YdZzFrT1OH0nXR2eQeQYggwZCDJOPqGH+s9A AqsIV9U11/26wukaT0dBxs8nIfn+QvF4IB70pToSqpf/9t3veTsM111PvuDiknjkcSgel9CgFGIL b5AXVtpQbjMk64s0YIde5Lz6Nk/O4BC6YgV4XONBdF4oHjOD/qQGCFZT/TGxbSbbF/nrUFUluo4O Kj530vnNBRdf0vzFe96hlQfjzaqkjSwaCR5V9L6PSEcgHHo8b/7C5oEHHxCvnnI7dZ8mNH4oGd5d tysdctABrfwmjlqO4cFSnY8I/30rFum6Pjw3Oc58QPoLyWOh61wPb3qYZJikoYugnMvTdUwCxYqr VUpZUeenTru6+Y/v/6gZr5WRO2hgaB3prZmzb9PkxByjWEc8ps3nRjpW9KQeI5DUGSTfUDeLzZh5 S/OybbdyeM1jIxFg0mWKV4DHpINe/o/vn6ibPh9qXn/C8c1551+Uai/kRkifixyzijpsSWlu4zCV 3Q/EtqxtX9rwzEvroRdW5q+mtpnLWaZPv6lZsOCxHl4F7EBckU4kmLxxJlvQQmD7HS+D8TjpSTyD 2hUvuK4QfcK5oey3e+95oHl84SKRAQVRMtD0fHlM/WRweTXZA9Nlk7GyPeSwnzdOjZ8BbolWzq0m WyJ5MxSPzR5BbaDVy6ySmjt/nm0rIwzW+5ULLrwKb+mTmjCaKVvtSaFULVtJYwPPk8fkd5gm/9aW LN148wyvWCK/SAkun/X78+WxEetnIJ7BeJzQ/U8oK9YHAooSbHn2bPD04/0DfEMqLgo83vWb3umR 9g+Q6df3JEp/WH5b7Sq8hskw0OCfg0l8D+UyPk/+0uV74ky4DB/quUJwEL+iLhEmIfms4yextR/v wGZY4qlh+ukYDKY/Pb7zL3HX3wnPs8Znf83QZ5yKtM6sJkrX7Q1SqbS92ahQBMggv71dBwB68Jia ZePJ0Jq6EMeKHmr1IM5KFMWiPww03DAp2Vccc2QzYezotlAyXyg4K6ISx/EVpx8PqgpDuYXlW+hJ I5Rkb5G2cILJd9KEx/nNEz/iJx7jsm/Eu/73N2g7xD1efRLw+CutCi/+z4bHwJOe+VPwKMlS5UVh 8kQmFrCZb8Pox374Fxw8Y390gXAZ+8ceLb4SB+LxYwDgsiuu1GzeE80qhDlTpB+47dPS18lnG55w LQzJ8ZFlGk/74W8HbhnDkm1WB/3Zq1/ZsHXKeSgQCYf8oSwnyKh/65ve0Bx4wH4+HM/pQ22bTqG3 zV9iiGfKMfHoXFw+dZq3FdEyjRw5sjnh+FepA76B8RGjzp+/Aw3Z6sKcfgng0Vcf6GzNn7eguVwd 4KdkJFOGLm8Vy6B4xA+udj3owP2aXXfe2SxbRatdghb4qDT0Az922WnH5uD99+s6SCQP3pYfwCfv IW4oR5l2cgKU5Vhea6rz+IqXH+2O6Y033eyVKa9+1bHN8a98ebP3nrvLQJnl64QZAIdGF7uephfe OMn8DZiar/melAWkvjDkazzlHThxsAtLmAwvT9cr0q/VgXmTeMHR4SG/dJSPU77GjNlSqazsTslO O27fHKKVjwyiKgLJL5fHLd09tNUdP6Mxjynr2zVjPV0zwUlPhJJc8JG88M4TOlnB9apXHKN6s6k5 HHAlL/aJuIcfclCz/XbbGi+lm2Wc+FKfED+KP3lDejV/kqJ4pqQg2/ff/0Dz9W982wNXf/OZTzQH H7i/aQwbjYpS42lLt6IGnKFToO9XWs0yYsQGzt/71ZH/i3e/w+2GoQofki8Dn8Hj2h9+JV9DbmqB AGs4BqtnaoUOA4KezKlIFTf0jzam43Ebbwia4LFd6U2ZJvBU8P26InFGvIDtykq+BSX0zb7tdq06 vKw59qjDPXv+t//rU77xp7uUASxZ4rwHj8HR0mB6Ik/ok7322K3Zd++9owNruiPBFt60U6bgC0cY rp/HdZyWbwkbUU1dCwctBY/xmbZefrWwFR54cc999zZXX3Nd5MtYVObGRfyQP4hmcOIVxxzVfPrj H1EnekHz9W/9u1f9QJ+dhTZe2/pgPIPIseSKunuUVi5su40mN0hRdCFvm2q71JvfeEJztMomjfyg fWBdoA4idzdpVc3Kq0RZmMFGl/STG1x5uo1JP5IdyKeUmyCrhAeVFZ7B44LPqemZeJJF9gePQBKu X44HoweM1DFWHs6YNTvsKOGhHd59t12at7/1z5uJE8c1m+p2pONecbQH9KA9eHxIs20ZAMIPHvPE cUguEzvHH/dy6cXhZfClN18BWX4VL+gLOfZ7CTLeRCweM3B39z33NqzMPOLQQ5vDDjmo+dxnP9ns t8/eHlRO3hClxWNFy09dJlGuyRdk4jLZHmwdpszBg4PHCaPYerd3hA3R5hGY+hj60fdHHnawB8+w G3AtTiUQNcPePf5Oq01Q8YSrbh+SnoKxilvnM0KTHupe8qYQ4ocn5wAtctzRh7xlHQgaB/AYGise A4UMMTj26lce22y+hSb5IjOmMeMHZQJWHW/T6ykj8LZQHYxwAc8gHPbWYQcfbHsL3uCMq6esip51 aPygox586OHmqquukkemL94MwWPKkUGpo444rJkwbqyRdOkU/kCuJjWQxb122620WdAknQ/ewsfU f8SvnfGVvCWP6tYCGd1q4oTm6CMP8+CYpLSjo8Trxwce4xJv2vRUViTdpjcInha2jx7EB/mxs1C1 kuWAFmemS0LkP2IYxh+Jg9AePC3gi/AiQqDFBBUCO8J76FE+Mwf57Akf5ANMwCbG+h3wob7x5692 9bcpVmC/Xw2faSdMxkmY2j/9hnw+mxVF/ZnNhIZErgBgMh5PRI5Rs5D2CKthFGRX4873+sl7/hEB 3HU4frj0GxBuIzRg9FuCUV688geFIc1tuOWEMBxhiZ1v3h3WvlR46nCBIm8FDzoRlZaONzBUCOOL KAHcxnWAfiJZGUz5Xp4MNsxfwBkrc73nfC11wDYaNbJZRZ0tzoJ5ilmhKg50sR+WbQZLtPWI82dG jRzhTiozOuzDZfVCXFm6VGcCzPfs+8ajRqgxW0XbXx7RCP8iw2+00UiHhbKMGSFG5RdpSTMai1Uj zCoSzqwp52qgFDfQMnS20rCCYu211gp6NVPFDNYjmk365r99Rx3G/QxH476uZr0WP7mkeVhbLRYv XuLcrKfVUqxISLcsHlMUpMWZKKw2YSZ73eHDvXQ09cLCxx7zNijOU2Dm4J5773eDuPFGo7zkuuYx HXp4zKqEZxCmrmhFTnB7ziNzPDNAo8dKiY2Eh7SmXXVN841//bfmy1/8m2bjjTZSh3mY0llLs2lP qkweNe+Ag//seacxgH8LtQVmvrZpDdMs1nDRft9997lT95KNXyKjXGeNqMw484LZszXU8I1S2Qxb VWcLKS74HlP+2LpEGc/XrOwSPeXdOfJQhAu5WEMraI456ohmlModfoF3geQMPo1QubI/n2X/q6rc Nho1SnmIc31ACF4l63SZ+Z2l7VT//M1vNx9837ubnXfcQXSLLskBtOGQC2Y06XgxgDVSnVeCyPuT T0kmxEtmlWA0ZymsLxiftUVdtm+k9cQTS7T159Lmxyf/vHnpFltY9tbUtedrrbWGB+Y4/4a8kS78 JR9ZL58uM81zHpkrGZ1tOR0+fG2v3GDVAw4eBMX+NH1sF4OvnPUCXmSbrWvOgMGSQn0QOStw5U35 EHcVyfpEGSubqPNziwz8rSaO93lIGGcjR4xoDta2p3WHr2OsrBB8RLQuUHmAl/OmmOmlPMD1+OJF lhfeR2qJ9P0PPOg80Tlg6xr+uJABDWAufqJ56EHK4El7jhQuZpsf05k7bA9E1teSgRgytNQDDAyi sF9/nrYSkgfkAF6Dmm/q89y5j1insIKEVQjUm1xN4booOcgygJ7kMezBIQPB47mWPXixwQbruW6Q cVZ3zZX8kCfKlJlw0iGf6P/MJ0YxcvbTU36hOIt07sGWlh2uZ6Z8F6j+0JlABqEdnq2z7nDzFhmm DjD4+OCDD1qWwM12mvWlh9IRbqQmPgw45A2d+ITOPqB8R6kc11JZ4azvkB2ljTynXvEKADNRQBST /oh7nlay3H3fA9Yd6D/qMoFiicogzk6AV8yed3VSIAPaPMFLr8/UVrqxmkh4SIY1+YF/pMWsKmUO Lsp4pNqHJ0s+UlbXXW8dnauzjsrrKa0AeNi6mHLlLC9kBMf3CMkRjmxkmaKnfvCjk6TX1204F4kA dDyyO9/lMM8rEOEHaTPbCi0L1TbN06DD+jqvgmX5nFeDG6WB53XWWVvyLVQquyXS9Q9KnyBfpEwZ bVC1FaSX7AUeGeY8P+oUEywjlOYaemIGswJlpurik8IJHXRC2KYDj20mkzEQDuAxuilWI1H+tFus chwluVpTbR5u6VNLiOk/5BRaKFPaxsel73EMpnMOFZljG+RctwGrSVbWNBz1inaW+k+ZIePgod2i Q5d4ecL3+eLf0+IlbQhbJyh3+LRA57Oxsm+kzsbgSRtBnafdWlNtAfFpA0/5xa+a2bPviHNJRPk6 0pHwgra1X46Jv/nmmzVvf/Obmo98/NPqvF1rHYbcP60GO+o9HAiHHM/XGXDkIeV4lPQFeofyggb8 07H1CfYffujB1ruZV84ZYRU1dQ/uIoPINvn/3g9+3GwwYv1W7jj7BBvpYckw5/KAg7N3qKcr0fkn YWNhFZza4ccWuB2kXsBnziyBhxupnVxttWFOA12CrNC+09a5rVKHDj5TN7C/4AFyRPuK/sGuevyx J9oBA/hOG4nskGfS2HjjjTzAsTK8gCbhxK6CduohboTyRr1Chv7jez/yFrNNN9lYXFjJbfrG0tGv evlRzSZcoa28IZfR3evKAdpwmDbKYpkDjw/CWGEHX9FpbBXD3kP/Ik/riC/RNscEyxzli3rLigza 7ayH8M6ZAJMSQncyIIv9ucaaq1sncVbgMJ07tVhtE1uxoRX7kXbZ5eMBhNCznHdIHYZnIbeyf1Qe bLX752/8a/Pxj3yo2XblreW3qs8DQ8/3ttvrtzJEPZsnHUiekA9Wk66mcmRQkgE46mIwppFdGu0l dM++/Q7rHuodtgU2VBRUnA1p21hlT5tGez58+FoWLwYYoIc6BC8ROcLAkeYCtlbo5KckC9Ijkhts Z2VY8sGZdaGz0Re0S+gReIJuoy1bV/nA0b4+JN1I2VHu6F3qB/KFnCE32FqEbSg7BlylCji+7Wx5 AEtZYP+i87M/4bqjOkseMXaoo7Sr4ER2OEcMG4DVQsgXfGQLZNh/sZobOSIfT1k/hmw88OBDzg9b /oi/lvKOLUAypAQqPpC1s845t5mirZPjxo2zLAyXbiRdaCB/nM2Fw1bbgPa7ZJA2njqB7qCswEn5 08/IAW7HVTqpu/B/SnWPnRv9/R7XA+HA7qT8wE9fAJ3Gs2s/oIaV8JH/p55Z6jYVeSZvG6l9W1sy D23klnScD+xReVGvzC/xmvaJugZHQg43sM5HDlK3YSfynX1G2lloaldgKXbrlAB6xmdGFd5BE3IB /8wkkpOguhx4tyf1srzi9aI6CJGDINOnh16Lb4SVX/EICIIKZBuMH3+hHHthMg5h/fEyrPYfDH8m lHBZ9flOP2Dq9/7vfrzA9vsRZ1D3bAaKQIpLYjKh8I3f2i/hCMm4MCuJ45n+wJL5dMDld42TcL75 g/b+eDW+TAc86a/XcKXQ48OQQgU2QNFSfo9vXo0gwxVYyRVAISJKCVlCVYSmk7++i4/B/NPioSNk zF1YeWtjiRaT09IjgJYg4oIh2FqDoNzv1YDGWZPO88DGYjVCJMXI9D577an3SDdQxTvGHEt6b9SS zidkSBFnz913bV5x7NFqqB7W1pdJzZVXX6MVFju6Qbr62utsWL78mKPc8WYPLzNyHL753ne+zcuP SRRD5fKpVzaXXHaFGvQnpZQX6lC4Mc2fvYaVI+s3V11zbXPOeReogVrU7Lfv3g2rhm6//U53bt/1 tjf70ML5C+Y3J51yanPtdb+XElrfjTINwsuPPsJ71i+86FINbK3sDvI4dXDe/+53ugHAwB+Kx7AA w/dc7UH2SgIZfw8//IgHJN71treoI76ZO6AXXDilOV9/7InfaqsJzSk/P91bfz7zyY9a+Z51Djy+ z0aeeazZzb332ks09pYVM/+zNTDCWTYY1k9LedMo/8X73mkesf//zrvvac6bfIE7Wsze7bLzTuLb 1OZi7YFm1o4GZb1112uOPfJQzfxNcLwpF1/anHfhxRpE2EhnCWzvcwJesvGo5q8/9TE1xI817Ju+ S6uwMJKJf/ihBzUH7LuPt/Lcq0GlcydfaH7DDxqaxzXA4FkokU9+7CTHGCHkE3xXX31t8863/Hmz 99572IhjH/d1v5/eHHTAvs0Crdy5XmfKMAD3ymOPbF5+zNHqMAiRGimhsfhiLNynAYofnnhSc+ut tzeXXHpFc49mDTd5yUvEu909w/eIGthJou2KqdOaex+4v9lq/Pjm3e94q40BjIyrJTcXTbnUA1Ns 7dlCZyuccPxx5gMNoutDof/3N96gs49+0dwt/p6t8mKmCDmeMGF885vfnN3cNPMW53mOyh/j6Z1v /3MNKOj8JZzKEePnfNWNBZLdB2UojJAMvuqVxwrHDgGjX5LKOoihdN3105sLLvqdjJ3HbaRssvHG zQl/dlyzuei0ISXoFdUV6BUMZgwq0kGuySH1YsasWc0H3vPOttN+neoPZbqIDqX4vLoM2UMOOrDZ bdedZdQ0zTX/n733ALiquNb+t713rKBSRUBjw4oNUewNuyammEQTcxNv2u3fvf9bEmMSoyYmMYmJ KSYae+wiXRFRUUEB6c0C2EFEsPyf3zN77T3nvO+rpOe73xl4z957ypo1a2bWzKxZs2bCk8W9w4Z5 YnjskUfKFs0dbof/9o9fLraTVpmmeiX7ShP+e1TfjyoNk2MWHgO0ezbkxOOK0Wp3w0eOKjbUQqtf n50V54lioTRb9u6/V7G38nry6aeKSRMnawH/enGCeMRJohd8CYfNoXuHDfeCbfmy5V7kw0eOPPxQ T7wkenFbSXwqUZVfV2dJZNNYbc401kQPgefWovHpovHWEoY+IH5z/4iR4hebFfv037O4QfYimDj9 81e/rD6+kXk16MCfhqlu7713mMt/x113O6djjjzCE8fb77i7eEGTrPdEcwQfaDedfcZpnpCKWNL+ k6BJwpWbbruzmD9vQfG6Fow9unUrThN/g2fYlTjDyykDRmNHq+1Cs5U62ggfwt7CSdJQ4ojHM9On FrfdfpcXqCvKBdtFF15gw6jvavJPvm47WhmyyLzv/uFFTxnR7N69m9sqedJfp06bXtxzz1DhtEz5 aDGqPoWWHPVHXdAfjZHHmdVV3hXF8NEPWNDCxBJbMutrUXbCccdoPHm+uEs0YuIPn2ChdupJx2vh spGEbDfZRgmLixMVd999+xczZswsvvuDHxdnnnpycdCBB6jvPScefoMX0wPEN0484TgL2mnb4ALM u5TfiDEPFDuLt92ud2iLJh0L6Lvuuc8GoxknwPto8cADD9jPC/C71EYfGje+2EvHjNZeax31vUnF y6++Iq3HAcXZOqqyzjrrFW+r/jjqhD0JBDMIB3r17FFc8MmPl4t2jaP6Dx8En/niFXfouOcLsr2i PVqR/D3B370YJG0tJueEk6ciSxP0US+MP9SvX7HXXrtbiOQZDIhmNHa9KQO0RxlXnpg00UaAWRDt oZ1yFuos3OAMJIukbOzQVhB2QwsWPTvssH1xhto6C5YRqjP6AYsbxqjHFBcB8H777m07R0+on0x6 arJpf9LxxxbHS1uEjSTgc8wXGz8YKl6mvrj+Buu5ffTtu7PLBL98asqUYpB4CO3/aWk0vr1yZXGi NBqPPXKw+9HoMQ/6aCwL1N/dfg8kKQYfPsgLkZtvu0M88A0J1FZaiPeFC8+3kAiBHmPcFlrsjBg1 RnZvDnC9No/XtONp0oC5U/W/RHyeBS2Glg9Vmxpy0gkaWxJPoSXjqDsWYIxJY0QvNC/hc8slVBg6 YpTsGI3XXGFNL6j22m234ozTTlbburcY9cCDRZ+de7vNAwOt62k6Zn2H8qUamR+xWfGFz57vxdC7 HC2RQ0DwmoQeboNqB31697QAkrkSG2doFHbRXOKRRydobjXVbe/DZ50hrbF93apYuI9Wm3/4kQmG xyIe99GPnGWeMHbco5oDjPOCrGe37sUnPvZhz81+e8PNxax5872B8ImPnpOEf7QcMfmV4hlDxV8f Hj9BC+81Pa9hLnfqyccXt995d/HAg+OK3XbtZ5tEaGl279ZVc4xxxdy586zphZFg+gH8CkcfNZ/I HvYq26n5smOiAbSatb6xJzcHAYn4K2Mt/H9zCRvhX09Pfaa4//6R3sxYpjG1U6ct3eaYu8HXnZfL srrHFPos86dHHn3cgiKOxgPzvvtGuA95o1J1zhGdj4sW2C7CoWl54823aa6x0HThUoHzFI6wFHtH s2fPMz/wUffOnQs2XJ4ox23GTza/2JxhTGFRPmasxjy1oc0lzNlbvAAbRJtrfPmXr37RfPtdES1o wRvTHrTsZsycad4F3zlCNvcGDRzo+elKbXI+MHa86v5R8fq3PGbTf0858XhvetDWx6vMox58sJCM QIv4dMnHx889u8DuEXjfKbtSr0uAGhtn+++7j+dBCCJfemmxxyX617lnn+65vGly6+9U7nHFBed9 rDh80KEe55ij3z9slIWgaF8jfOToMcKCCU9MUv94wPgtXbJM4+Q2zgMt9CR8SGuZsnl4DH9TvGSY 5qVsgM6bt6DYSnPS88/7qNsaff+xCRMdjgBvqdoAwljKfZDmphARnvi7391VTBLvWVMbm4sXLy44 QnrmaUNct6tLiPrM1GnFDNGAudayZW8Ux4gfodHExgLCGDdfwWLuOVb9/sabb1dZV6qPi0dpbBkk ePDbW353ZzF3/nzXHYIpxu3ztPZA6IEDBDwbG14vLEyCqS4qO3nBM5JjraYcnWmaV1TrnhVa94h/ eN1z8okWnGKj7QatBTDsDw2Zv1zw6Y+Jf/RO/S2IaeDaLFTbmqW58mtqw09ofMPINvifqbbJWMzG PeWaOWuOEF7NQj9w/LTmzGyqY/dxxoxZFt4fLF57ssZfhKWUnT55+KBDxG/6it8N9VjPeoGCMw9i HIEGyaU3+iNCqd/deY/6+3wHQbtuXbuKR50jXilBIn25IkmI0BTVNKohloD/8o+gcYVPx2vy90GO 1A2Qmr4jjAJH3PbAERYu0oRfPAkPBsl7DrO9d+K05yJuPNuLU/k1jrCVd7svIJoj214kMu3IERbh zch19B3xgRl54xfx8/CIQ7zwj3iRNuKoHzEMli4PrbKJQAGrYwpwmhyk3zpOYJQyFMAKZjlwwEAy F8KdzMuvMTDncEhZoQCcDKFGOCkPFvnLxdR+ePXPiqH3jyj223tPLdiPKhaJwX3jW5dr4F0kJpkg pt+U7nYxwR/rHDhW+1mwsNP2re98T0xporQHlouRLvDCfKQWiCzUe2owniJjs9+87LsSSA0zU91e gy2Txt9cf6OZH+fWH3viieIbl14hZraOJl+DLczAlsZtWoBRMiT0j0voNHLUg8VEMfyumqT06Na1 uOe+4cV1N95sxsYO4HINHJAfBp8WF+nIxSWXftfCgpOPP85qmo8/PlGTSXZkGyhn+vITNGa3c7om oBdferknlyceqwWOJlO3aMF37333O192BBYtXuQjYbdrAcnka6tttjQsdiGuuvoa2VoYVvTXpOEE LWjYgb/426LxoheMZ9QVzQ2midbC3YJ9xKCDi2Mk5JqtweLZ557zThy7ceyKeJatimGy+pgG2f++ +Nu+CeeYo4+wgGe8BvSvffMyG5+mHtgFQphyx133abJ6nwQpwk80YuC9+he/Ku64815p6+xanHDC Md4d/rrSPisBEUKqK6+6urhFk4a+uqlniAZpjA+uK80kBEp2qWlANfqMBSWzZs22Yd7Fr7xkP3aY p0lY8YAm5WNGa0KnydDusnEwf8ECLxRf1sKSXhC14Tann7e048ngS1uk2Gkyqlhq42uuJqHUsy9o gjHfBqI32XDj4le/uaEYqQUR9YbNoK9dcpmFMMcedaTa+F7F9TfeUlynyTO4JgesBHf5sreK5WoT a6wu+TJ1oQjg+bQmId/4zhWeDJ2kBe4eMh57/U232NYI+dgBQ3W3lQRxqL3vKWEck45vfPM7Fpyl SOk3csbA7f9ccqkG81e1oD1CAtD9ipvvuFNl+G2aCCsicT2VARm7VeAVSoTQil00Ft6PaEH4vR/+ xHaS2CWaqYn5f33tW8XUKdM0GT2kOOrwwxTv+eL/+9olxZTJU0Xa1bxb+pgEP/fdP0o0u9m71+tI e+3td9RnElKJPppcTJk6tfjmd670YpQF15ZqW09OSv1rsYTHY7UwGqHJIPXUQ3yDxfiPf3qNbOX8 UvW73NoFL4jf/OBHP7VgkDbNwojvkSMfKAYfdlhx3HFHStvn+eJHP/mpd9dAAeL4aX6XqBO/7Pjg ZmhC9LVLvuPyHKXjJQNE41tLGiP8QaDx8PjHZIx5qCdQW2wuTQC1q3feTdo2wIAe7NiiBYdWAPgl zc10RIZJ+I/EEz/Ub+fiJAlXNlY7/OGPrvEE1X011aB3T7nR7KgjB+lmks7F9WqHP/zxz7yjSj6p shPi9KORWtRf9r0fWovkeLW77logoS3JYpWF0lU/ucYLmKMHH14cIeEZC2XKwzGMRBiACl/1c/jQ XPW1bt26WmMw9SNFUz6//PUNxU233m6j8CedeEyxTDzh+6I9QgQmesmVDVCMkQn8K1qE0/tZcBqW 4LBjfel3vy9hxeNe0LPhQB/85mXfsyCyX5/eFnwgiOraVYtMpadd3CVBy33DR6r/vFdsI77J7ukL 0rzq02dn93tXL/1LL7RrxhkE4pRLnhTCi+Kf/PTnFlKxOEQQhRDo6+r/z0mLCgHTPI1NLH5HjHzQ POFDu/aT/4ri+z/4qdrJXPEMbZxIEH3Jd76r+l7pSTK2WB5/8km3x6ofCnHohiDmu9//kYR1d1rT 8QQfw9lAfeG7xV3i3zgWkUu0mISMoEuneTcGFwhQkpW4+QfwEex996qfaBG6XXGCxtpttCi7TPQd O+6RFL2EA0fg31Pqu18Xv+GYw7FHH+lxijGWhSp2gRDqjdWGwvBRo8R3n9NCuasFg1dpDvCzX/1a wqgVvnFvgcYabCq9qDpAwMFu9yXfvkLGd5/RIvlgtbWBWsA9WVzx/ats0BxthKnTp6ktirfrj0Uj Ak1oeuUPrk674Woz7j+qP4zRe4BVGVfKZgeaK/Dso444vBg8+DAb/iZPeCs8lU2fLl22K6bOmO4L FGJe4gaUKOH6uFa8H8HDQQfs48XZSmmIfv9HV6sda5yt2rESkL3+0ScQ2mJA/rnnkpBg1qzZqr8r fByIRdKO23exQJFxEM0HFksIJml2tD/awGVXXiUtqTnFiZo/HaANjElPPW3NFvOJEj/yXCb+gcYi c5/h6ttov3H7GkemLvveD4pbtUhD+6nbjjtq4fxkcbXmP+SLEIzF1Tc1z0ID53jlc7gECWO0ccJ4 Rp+gb9Hvh0n4z3HQ9dZbxxqda0oQMO2Z6RZeIsRPbSzxBARc39S8CM0VHwXqvI0Xlxjn5Wi79CMs EEhNdDUvVhkfEHzSn3B581V1lj61r73km8IIx9GTNH5rbN1jt12KwUccJsHtWsWVGqNuvu13pivl vFh9F+HN0Qo/5KADrenxY9lHYr4F7et5rfoiAhvRk5qNuqb9cFT44ksvs7bFidrMHCBj+7dL4Hf7 nQgqsae4uoXNv7zuBhvWPknzQ2wssVmHUAaBKwto+iMOfse4zZjyqrQwObI44IB9tZFyp4wn3ygB gzSNtJH0kMYUhNa3a77VafNOSo92TK3NVlNI/EB8Dw2zA7RxiCD0eW3efv2SyyU8etw4ImD+lubP aNucqPkjwtmrfvJzzaeHCv811T6fLv7r4m8J76XacBtc9OzVo7hZ87UHJDiEBr/VXAUhPbYih2h8 pl6//+OrPackfMXKd7zxx2bsYs2zKSuaL2g5IbiEj+IHz//WZVfqEoTFxUnHHevjswhfEPJhTPnr 37xUwqilEhoc6c3BGzWmcOkIfLue2ZmM/qGeEDwjGO0uXrT99ttpfnqPxyLwYi5/xZU/8GYfYwnC iMlPTy1+cs0vXC/EmSjh9nfUd7bcopOFiAhtJqr/hYN/PfHUUxC52E0CjkWLXtRc6Me210hYcuAn zWPNS5arj9sepmAj+McfDV0Ex1eon+8gfgBf6NK5i3jmb8QHH3cbAg7iA3gv2ui02d49e1igfOkV P7AmZ5mZqK8eIHpC0wle91xerXt2V3/wuufOuxx+3Q23WsgyUBs31O188WY2Mim7mZBghOMNG41P PT3Zm0wcbeTYLv1q9tx5TvOY1lDf1vFzNNJO1mYAGuhcxEJboQ0yt31aY/YkbdJ179bNdddF67V5 cxe4v+7YpYvmZT+TAJc1415eMzJPuFhrRrSl6VO5A0/4xRVX/lC0276kXWcJYH/tMSTNj/IUzbyi Meyv8tVAY896OkQjK39dMSl2fLv6SwDhx5O/jsLwj7iNBG4/DeADJu/h8jzK2YjzJJw8wkVekW8e FnHaPFdVoyiABgC+mwtFWHO83C/CokDtpY9CkC7ihV88A07AjrjxjHh8h8v98vcIb3ha9Yxc7PSS /pcIpeT81ojUbyRx2wsvnnYpXe1doxF+hpg13IoCSs/kxd+5p94r8FkeDJATxUDZkf7Ux9HI2cnx WEj9pxaME59+2pOzKAmTFSaa3ILWXbsU7NIyAAw8+EANQjdL2DSy+D//8lXtCB1jRn/sUYcX5374 LMdB7fAmTeDYtYURMaD7rP+0GR6QQIvFMdJpGKwHTWkR/eq66z3YfvScMz3ADR812vA+f+H5VqsF zrhHH7VBTxZO2AE5Wvled+OtssnSvzjz9FNcYpj54kWLi60HdvIuJcKabbRbtJZ2IDRGV64iH5QI GquMCLIYwI8YdKgm192ssrupBGQzZs9WzKQSfcapp1gLiLhI57muG+k/xotv1SSCc/39NMCTx4Gy LfEf/3OxBF5P68w+N9+srHDAICyLW3boCeN2kXPPOUO7M521g95TwpVdtKM3vzhNu6So5SMcu/Dv v2raXfiZT1mAxgC0QgKPL/3Dvxb3DBtefOIjH/aOKLsC7Mqcd+5HtMOxkxcxcwTrhptu0w7MyQUL J/BjtwbNMCa8HINCiPSPX7moOOuMU40nRzbWEX6OHJjTUJSYSeuufftK+DBIQrxhxRolC+ivHfT5 C+Zrp210cfppJ4mWA50SLYmrfvIz3861jXblqMdoxywG2Tnj9hQWzUcdfnixnybitDurvWrx01cT 5C987gIPgkwCR2lXEVs8xOGYw4sSVBzHEbhOW1jLqHPnbS2EY9cK1X1lVznq+I577ikmapJ89hmn FJtKfRlkMAA88NADfea9uyY0aN9wtTWq4rXDOOXatkOEEBXbTEyEEQiO0UKEyb+dGQcTivfUT+7w DuKX//5zxo0dzO7apUL77IJPfsy0RxjnpkjFlDROgPhIVZC841fTG01KWWDcI80O1ISZxDEhQ9OI fG+57Q7tKM0qfvi9S13XtGE0VD72yQuL30h48d//8a/e2cXoLpOA4zTBHjzoUKtuow2AoCAcebHo 5EjKtjqiwC4b9qNoVxxPOUt98KZbbi+2lgDtor/7jI/m9Ovbp/jkZz9vYfCFF3zSoBBgffuK73uy weIMQVGvXt2L3SS8RDuHozQsPmlTHJ/BoLoUiuRKwvAIJxozxaOsTJjRlPvSFz5bbL1lJ/d7+Ndd Egxd8KlPqF8M0a1k91gwgU2tXZUHO7JovYj0duw60laOkbARQWSPHl29I03jYeGwiQxZHiO+c8D+ +3mRvO8+exa3aaI3VxO6vffeSzC0pFFctNAQysEj9ldbhbb3Dhvhvtl/zz0Ce/Medkp/oYkoRwi4 0Y3jEAcP2N83q9wnXoswksUUvHIH8YktOm2uOn5Ni0Qd9dSEl3abGgwPTchVprclCODYXTjaFbvR O3TZVoK4oyTI3sMCkr1E7wnwTGmGMDGm3eBousBFEICdMiaY1l4Qb8Ox+Bohwd4/fvWLRVfRmOjc avRDCcpZgByriS6LXzSlMGaK5t1jj08quqq/TJzI7uerpjuLsyMGHlLs2q+v8WMKThmoz03UTtlI +PV1v/Xi+BNl3o+oj96ghclHzz6z6Nevj/E5SGPUvw39mhe/J6gNoyVDWzzyiIEF6eCTW2+9ZfG5 i/7Bu6NoTyDERyNuq6220sKls/rB0eLB25YTc4P1DxPgxyZM0ELgvuKz53+iOEX0AL+dJAgcL62P n6vu2NneRW39YI2pCAeO0wJq9913dduGT7bnoHHSPtPxOsHgGO3AQwZ4Aj7wkIOKa6+/0QKkowYP coWwkOE/7ev6G26RduhrFrhwRAeeh6bDXXcOLT4l7ddzxL/RnOjerWvxxc9foDa1lg1EX/C5L0qj aLfi0+d9TL1JhlHFx66Ulhe34m2nMXX06Adtp+W///2fNCZ1Nt3Y9LhWi092ibn5crZ4IdoH55x1 mm1xCDnzC4Q3r6leOZ7CTj6L6W3EJz72kbPdpjkmNmP2LLdz2ho4cySWo0GhEYmAA15CP2YBi6an O2fZ52nH8IvOXSRQO+ZIaysi2N1DAsNxahfMWzgqyiKO2ZCie5yCDp6v3Ha7+7G8iwUSGHFLJJqd sSicLI0E+Ohxgk2b79uvt9rPOUQ3n5uvfri75jVoWvbQ+EB/od8mTWUoofqRH/0UY+bXab5EXf7d Zz5tWqKtc4UEjmgnodXJbaJcPDBJQpk3pWnKsUB4bv/+e1oLc6dePZ3X9uq3aAZAE7Te0GhBQwoB 2NprSai/2tsy9r9Ym03ahFBfgEa0URoMCxoWnRxPQcsY7aAhJ56oTbHpFswdpzTc0rnbLrsUnzj3 HKeFB82aM0+LyMnGm/K7cH4pfyCu4FuGqfdURfpN//WkhYkfih5sGlBecOJIORtJt0nT7MxTh1ho jybDp8/7qLVWmBv0VN8aoTHp5b/7rPpnJ6UjM2wivlP0Fk0OE8+4W2PeYAkyB4gXAxfNd2zD0OfR 1OC4y5baDGCOlbRc3pO28mwL2dAO773TTsVHNN/iOCp2Xw6U0HGsFrrMZ/fYfXelebf4n29825rN X83G7W5dd7A222c+/fHijNOHFLeK/y+WwOjj52pMkQYhfQAzCowlDY5PFWOf/nuoTRzoIDRwPvv5 L4sGQyWM2cP1QD+nXBzHRdPyl9deJ+3WEcVpJ5/kMRvB3YXnf0pttrNMBqxZTB083XMOaEBbPv5Y CY5l1wyK7bX7HhaOLtTCnnkqabAHBr8JISyaSGwc//yX11WL/xc1h+DWOsZh5qXwRY5ArSdNlRs1 h0QL6R+/9AUfa6N+GMfvvlfjrOYyNiEh2uWOfoJG0t9rXkC5aIsIsjHIjGMjp2+fPprnbuu5M8fE e6gN0EYRwHOEcO68Z61pi/YSdXDmKSdrLF/s9JD2HQn80UBiIw6HAfGvfeNb5gmMUYkPp7GFfshm 0i0S/FPPHzn7DPEahKur2QD14MEDNRcdYK2xA/brL152vbT15jkc2PCkDdff0PWEBhInH9j0QJj7 xJMTyzkvNcAcDZ71juYTN2ruvlI8+zALAtH04ia8u+8ZLl56hudp64q+8CIELWh87SBexvFfN5yy hzl7wUQjmP6OMXccQvav/PO/e9O3b5+dVV/rWFvtMPEfNBjZeP7ZL6SxP2u2N5A4RYA2MTe1UnbG SP50TkHai2dKW+xNr2c+dd65mpvL3puIzDj7n1/7ptaTkyVA62zaBW7UwXriX2wuM7+mX+1v2v1W Qty5hk03Nr9wX9BP+u+2GnBcmL/aD4gll0aP+IqnEY8PnnjUiVJIREoNwJOaKk7EzcNSqgQHfzpP PAnjPU/He+QR78RrdqTDRdrVy3f8A2aERbz8G7923aoKivKMABSZ8uzIRRrCQQakcbx3lL69eE6U pcvhEpbjQPqAn+eR+zkNzKI956HOg1SEpqTOhIGAmUvpqjf8iBZO706V+5VhzXCY3FRFaIJDB0uh +s3yDd88U+BEQ6fzT5o0uXhbjGWBtDKYQBLK8YidNOmIiSywoR6qwrM1uD73wvO6dno7LXJ/58kL Cw20hmCydiUaa6+ryZycJ+NaADPJwC4CAxeTPo53oO3AwMT5cW5vYbBgIch1qSxA2SXAdg15sOhm pcJ5fAYn8CP+FlLpxb4LkwUmPya/ysGuCY5dgm00UHLcigX4O7JZg/okjItzxzFwd0RjtB92kYDn CxdeYM2QoSNGehLH2XLsT5jBlU0VbYN+mkSyEGZSxmLoqad1E5YWaOwSVTTWQnenXj2kWSEcE5rG lR8mxfv230s3sVwvIcNlVoffT4stBlQc5fOzTMhO4zOaULGo3qFLZ+Gk21xEaxa8aEdg1+FcDTg4 aNGrh4RNWgiCH2fY7xVNYP4LF72k3Vi1AWWALaHeEkqtFI050ra+FqMHadAjDDp7wum+kZDhN9HB 2ZQ/tLRE1fCNtodQIByLd++2iZ6p+QpaQzumzAlO1Ck44Jj40xZYtFG2zdVe1ledgh8CtImTJ7vN jZIWE9oKLNCxi7L2mmv7KE6OB1m6LZT0ZWLObjbtbHe1HexFcKwGtWt23MmDv3BlMmvRQSfaNYP+ RhtsqCNC0yOatUqYJDBAsxu3gdr3A2PHuZ+gIbWO2jSLVwSGUddUNfDb0lh+QCYiBdBf4EF/6aU2 xtlxdpnYtUaowdEKduHoE7RTyge+9GG0XTiStmTJ6267CKlQpWciAI2xOQCPgE7Ol3fRiHQYcvz1 dTd6sneohGSDpJ5P3wc2/1h8cpQDx6IL9X9sSBAHh00gbPnErit9myOlHGNEg4Z2Pnf+ApeRRYbL S0KX29ThS98iB4TSSMKCi93FROOHVf7VpYW2uvr9OtbOQKOweI9F2NsS0O2ohcCuJuVmwo/2wr8S ZKoA6IyjPUI33oUKO/x77bF7MW3adE1AF+uYw9NCI9mLIQoONEVOT36hArvD7EQPkybNrNlzLKQJ mqIS/4IWirO0C9hNk0LUttEKJJzJ3bqy4wSf2GfvvXyk4BvSdmS3laNb2F9Igp2Altoik+wV4lfw 4HAUh7zOOfO0Yr7ax/jxj9q+wlRpGoiZlnBSbGixWjbmJb4JBdIYSV9hMuwdd7X3hVpQEH2RhC49 tXhmE4BJ6j5776ljR3epLz1nvv/WyreKj5x1unYcf+QFGwIvtC44uliNvyZeiQe0d5uiSvRP7x7L Jk8pViiPF6SleZNU9RkBmKTvJD4WY5krVyH0sWh3GMbH7ghjDI7FPgshjg/gZ407TeIRDsdYQTzS P6HbiuBFHFnEoYWEKj0aTddqJx0NOuojms27nAuRK1uR3/OfoDEaN3PU1udJA6xf752LW7VwwQ4O xxq7ajG0bl6HgsZYCc/m6BeaJPfr2Auw0DDBPhH8G/ssHqOVufuixggcgsX11J7WF0zKxD/sz9AP g/6PT5ykNGtpLJtqTQvwR1jbQ0JhxkEcZSRtjVuyOUYYCz4c/NozPMWlfzF+Yg9vH413tHE0mbFr x1gD3wkBJWnRYF26ZEldl6Zi2cYFj7IilOZo8vhHHrMGLTdrobVQw1HbEY7gCn1wpjm+uCb+ngAA QABJREFUZSV1l6YbfBENO2yRHTbwIGvvMLeoBOSkV3zog+Chv9r0w9L6QPuPBd8Rgw71sbIkiDBL cl40Y2erJ+0p2iAbBNhFi/GIMY1jS4xh5Ek+nVUnX9ARH7Tj2DBDoPn6a0uLzXRMK8YpBEhcUX+n NGagBcLZyc88U/zPmf9ifN1XyhIDk37Zp7eOyd90q7RHllp4hVBaRVWe9KtUTiNf0gcKOsAFUYji uFx8J5K6kMEqKHIU2u9uY/hp8VnGZxxloU+/YXMDPs/cFE2n8Y88ag1F2viaq8lmlYQTK8UzElzg 1K7iCyVcxhPGposuPN88hY0PNJQQVL+LxqjKRF/jKCpHkNGWgZejMY4GG87FpmglTAQUaPBgS2/M 2Idch2yi0o7ZDKGfMXbRtnt26+oxBS00bMDAP5KwEuxLgIxVIla0UcaVXSWw7tatm4RZszTXeFZH gWYXm26+iep1qOc5zC0YvzfZdCPb13vksQlus51FQ3gdR+X/89/+ybaa+EY4yfgPf4YfT5k6haKJ XyV+BC6M9WBUYuVwj7OZz1adtvA4x3gMLzlM18AfOXiQ83xccwrGc8wf4BhX1t9gPR/fwz4ddYOj /dAHcbwxN2FcAM+NJUjD5h80xG2qDZjPnP/x4tkFz3ujEG1Zjpa9+y59OMFj87TrDl0k0PqNj04e evAB2qQ7wOkF3vWWj3nbSIBFuRhPm53nmeoXkY66ol7op/AkhGcIcDk9MX36bI9875S8raKc6hN+ R3ngswcO2NfH2dkY9+aowukvzHlfkaYWwlDa+b2se5R3vu5RQb3RgsmLi6XRiQmNfcVrmItWvAhk q97g3qm2qE3c0rFuoN29vTLVNbwWg/KYHJmq+QqaRtR9tD/KcbgErqxVRowYo83pnawFjIkFzDr8 5JpfWuOK9nRTuWZkLGCuGeNFyjrVD3Rg/sjmHOM6x+GmTZ9l2gVOdAE7N4tUnvSqd7+U4X+1R8LJ jYnKk8vbsSu0LIPKGxjzLH1dCt7jm2fE02sVzjuuOS2TLPzSZKuG01Hc8OfZ7AKH8M+/c7xy/xyf SNfmmWYUbbzb9QjgkWFOjAhrTxgEMPwjXQAnfQ4j/CNeFCB/xjtxI23Ez/0CVsThGWntJwYROJdx A4ymRHqNwTAA+Vk2pOQX8fVFZJibISf/7LUpukIcWHunN+BUb+UH0zNcUwLwIM+sCHlSUMGI69qa WMLMuu64vRiomJgmVpzvZQenWggrLousV5e87sXOhyRoQCINEyDXE4452kfQwML8m4zyzBSLwcEL OCKFM62kAq5dMzQg+u3c22rIMHKSHy1hTkxq06SCoaXMI54N9E5hxIliA4td1S9ddKHt8owc86CP H5x5xhDvsCI8iAmGkiWX4Q7jRvL9C2k3LVr4ohnijjt0tgArRQsaQ4k0BBqeCAEtXkP7RgMBu0Dc 0FTRWLtmTCyqAUt15SFU+WEPgYH43qHDfZSDhchF0pphV4Fc0k9ClaNjCBXWl4YLA5r3TJUx6TF0 vXQJhiDFX5wwpaXeYqB9RW2AuAP27V/00qALvYBzunZm2N0dNWqMtGdkFFI7lCmN8BSukB31WZx/ TXR/+oeymz6RL754KjYT23CO4w/g8pIlqAKrF4Xzrjhl3Grxpm8vRIxTspuD/QB2wAcPOsx5k+RI aXQgtERDpMxQvrymfkQNggF/1AcLBBbyv5DgDi0mhKhoriEITTFJ3YC10zL40naZCNWhgi4kmCQw GeIoAwvTwYMGOh/KhBo+6uTsSJXkTemDoEEeCuN3/VR+ANdoorzX0WQBzTAmBahcM8Sw2GLHCQOm LEoqtV9lxGQXe16LXlxsAYugQwDDi/YStI7sCGRnC23Er37p88UNEjRyExZ2VS7QzipHoqKduU9Q 7ZBDcN1TUoXLA2fPqt9CH3aHR+soCwspzvizM4qaep2/UgVdjGwCA425+QMYb8heybaaQLMbS10S LdF4DR+VizatKiknarRPI+S4KTPl6EyV2E5Pe6n8asvYh0BLC+ENE1fanDJTlBJTRXd5+eSvBMPF Ae5DARbYhIsHL0Gwo7rauc9OxZFqHyFAO2bwETZmjODuvI9+2GUYPnK0ju1eXhx80P7FRZ/9jAVx 9aQt4cDiZU1pkWKwPRz4ARe7NQjo0TZiF317LcZYyKeUWWzKYU9eAukUi/xeXbLEGkFo02FQNAln 1baKM6TtIZrIHbDv3rLfdrNtzM3UxsMu0hpitxdbINzmCK/GBlkPLWLhRXaRlT6qMQQUUqh/seGA DQaOb7AAjgn+GeJjIWRPBRK+Fe68CooqP40shRfkX77oc57cs7DE3s85Z5ymhfcQj4HRXigvggsW Odg7SsgkWmBsnH6BVlijS+F5/imckhCmGgEd4cMxknc0uecKcfhXTOQ5Qou2Su2UTv0XATB2zrp3 7apNkMNMe+LA7+Dv8DvaU6IZQg54GzGcoY7D8Z4cQpMgketVCwHs7tgYvjS6XK9KTH9CGyE5pQEG ncc0LQFmcJ13QiDhoXjw4k/QjgUfel/yncut/YKWARsZ0Y4RmiDwQiCU6iBRDHCpHWPDZ6w1GDaR 8IZ2bFtqIY0osTQ6+mGMsxPSqaWn725qO1/54t9Jy/bW4p77hxUjZHMFgTX2umJOUYIybmhKfP6C TxfXSyD4gI6CYWvlOB37O19aFOmCBtpwgh0bHqSPMgQsP6FbRTvGYSKmtC++/IqPD02dPsPCYzRt ERSI2VMYw0P4zM1u/y2NF7RgWcx1lRYCAqTgHyX5LXDo2b1H4tvSBkGDGK3dT0mD5wQdr0/4pEeq rLIMeIFjWSbC6rGzjE8Y/kQNr+aniZlCgcyfjY6rTa6QnSo0nzG4jOYkfBV60a7RhLfWpHEIoO3n Qj96/oXnvOmGYLp7t67a0EAjXBuWJFWm9CuOabLwxr7V96/6qWxwjpTx6s/7hryIFzmwwfPGsqW2 TUi/ZH4I76CfwZMxxeC6pfL0987bpAzuUmaKlyvXQcYjYtBaaOMIEulKjF/LV7wlntZdeQys+ADH NOnT5jMaK9ZS3vRH+jV4eH4jWAiyaZe3yy7Nhtq06qOxGm0gCJD3AZCIelCy5MKjLDz9kX55vTT2 0bLCnij2Ho8/+igf2eI4tcdZcXzKwztaixtstEFAJNvalR8uu+qTT3AK0nBsCltmCAvRstq5d28d 49vCZigAwjyS41VfEr9m3nHjLbfantHnzj/Px2NBH8d8KFxquswDIjRCeCYcCAocwId5D/OOa6/j aOHb7k9synrz2lQjbYLXMGoqXRLAkx9x5PSkfcB7sU2G9iwmHZiTxHiHtijCYto9mrvU671Dh+nY 8Q8sTP2itKOtucP4CKIZ7PQRHvqCz0dhlP2MmTOkoXaDNbTZRMFmJ0Jq00XhCA+xQYQAGVt9Q2Sv DJtbHDVkAxqbR2y0oKHYsGaUjUHGbq8ZTcCEA2WdMvUZ026FhHM7ixftoDkpc5FwsIJ2qyPDO+L+ dZ7QmEZR515TWH7Zh9pL9lXFDz8g0BjjSYT8ne+OHDCImz+JG7DjPeLwnbtI1xwe6fEPl/vFe4R1 +Px9BEUBJJDJM4/3ZoRpMfgFQhEesPiOOAEjnsSJFhdxmtMTJ48f8PDHRXyeERbvjlD/CIxCNI+v GzaQ3cpJkmdDqvxb4dWnXiJ6+MWTZA70S/nTECg/vksAASei51HbtNk6kD7ILv5bWjiwMP3QLruY SQPGE8qSuZLCbV8dfhtJspnYsQDfWYyEhTCOhSS796CEoMl9qs7KvIzpGHQLvD1ICT/wQLtoY+3E viJtJqT2HPtwTOVp+zRilCT1ooo0ZY2ns+gK4X8TUwEnHEz2OR3x4MjM//nnr2gxMt72VK7++a+0 QDm83IFvJiIpnaPTX3vDTVK3vKv45tf/s8AwHMwduxaUpRzeXG4XhqSlSzTeVgtW2RUS3VBBBh8c NPYAFhzatEhHxubOW6DjZmf6+NK1UkO99robiv7SWDj7zFMhsQfIWLSjWrrFZrqVSjv4HM9hQQgt 0NJ6TYsnjrlRZ4keiVZGoPzhJg40DaAtxySYZODYTYfJb7rJprLv8prU1J/10aIEJwnyoFDl4qN8 0g6gT14vCBtxKcyvDicmgxn0qlz+bs+k3ZPqhXotI8RTccKP9soknV28l6XyzcKdhWs4FnCUE1rW jsabYHoXV2UXGPtx3JKB+juX/I93ljguwbl4yhdOsf0KDvgygZw3f4EmvZoIaIKDc90TTRHAr1On zXzkqfM22/o4hiPpB/zYkUMAyAIYFWuO+6S2pghl0VP8Gge+mRx7yifk2TWlDrnpDcPblJmJIwP6 BBl8B/ZG0u7DLV0quzCy5bHNVts6P/xcTwIfbRa/ZkedommIWvR/aRcTg7nYM+FWKvpKlDnVvIAZ XjkpzSo88QPolgo3ddozxbcu/540ZQ4v/v7zF9qgPbZtmNhX9Sxap7LWOBpng+CI1DqisTRUpBKP 8AF+F840Vr+AHkFO8q6oGZ5OgG9JffmnnVjlrHfs8nzniu97QnbZt77u4w0IPND+qIpnWAkG9ABH JlTTRTcWmhypaHCa3HFrHFpXGAzt0aN7NvFPtwbR17EJ8NlPf6IYJK2Hn17z6+L6394qAb6MoIru scAma/osFwJwG9DLshkWDtsbs+fOLS6RbTgm3F/43GesaYVNKozolwzb0YFTT+YoOzUqX5eNtrK6 bvXZxseKOQ6HFl44+B/tEDx223UX18VdEkzBRzkCSr0Qf8xD4yz4OvTAAR5bQssnwTEGKbuykmJi TTjC2+USDEJfhE9ud/IHBnWMC14UbQy/9C5hVllZ2GVjscfV2g9qMYQNl6t/ca3His11DOw9babA GIC/g3ayl+t2wBcWLTQdgE8ZWaCjNYs2Hy7lC81KYtk3/0n+LqF+WACRdh3VF7cSon0KX8dRr1wA gAMcvA4+Bc0333RzGQ59VRP4HazR4kj6oa2Dr/uNIrOwNyH1dLkpUkTmKcAJtsKVrrOOitGmEeZQ f+HAI9K5PQAn2oXhpJhVuct83LYSI/D4/oK0PM4/7+NquwcX1/zyWhtvPexgbCEdagDUIYZ42UlH 6FVCrfoq7Xju/PkWlmLkFe1feBw73tS9ultyyt9O5eYfbjVplNiVkbBZxBHR//jXf7CmJ30DmyEI KWL8ov+TCtpw1I+bHbkV64hBh8me348lmPiNFn4DfXTybQsKUhap3ZQ8xnRK/hV9wKFsI/bjU37k M/T+4drN/1XxFS2KOQKONjTHQ7BzlGZHSWh90ID9fMwPW03YGvvY2Wd6wVn3pVRexie0CdBM+Y9/ +0cdjx4r+n03lVVCj8AJPmXOlxi4aKmXsn2AvfmtX4KiJdtQNhjWTcVJeabS8ktFEFYCVSQ2TWZq Q4ZbDLfffjsJu7conp8y2bfmcSwuHBtjtFn4Se3KMpWUiL7MeEcb+K342df/698tzGEz6Sc/+5XS p9TA4VZC7BcdpLnSTbfdbrtWaJX1lZCeZR1xgtewIYcWIvb/0IKCfuE4/oXwgPZRlszld38rW6sx bSIH9DVdBQi6oy22cPEi25rkmCY3MjLOYDOGuQAOnKAFmprbSbA/R+12ofjQVlttnWij8pENRpWx mcYc6J+/8kU/samHBnZVY0TUH3l7Hk8GOJa0wCn7BtqyzBP/6SsX2WA4tn6uvuba4tCDdBxr607C +yXXHzfuhYu5TF1fZJTyEig5/+CRaObg5DdOR3ixyfZhteELdbyXW1QnPDGxeFenD8CJKuTIK0eU OTaNUexLpIX/Cx2ZxI5a6q+JVwc+pCNlNL3w95Nsy3YRglVic5EENvvQCrri2xebB2J4nKjRTwKO YaeCWcA0Q2M87bB3754pC/XlRHcdWfe6Z2NrYTevexgbwYHx+ZyzTjWNf611yDW//E2xp44JY8Q+ xviKhK4nQS/zJ8OoOwSsIPxj2YN7hJuTVQ42oLF9iv3WSEJb5BKGI2U64grVL3amGFe5eALHDYjM aTHb0WbNqDZlXlFWKXwLBYArf/hT9e3Zph3mLabPEO2UYeBZzyvIoUwcr2V98PlXdQyyDS7DM/On zHJZS3JgfLvJyCee+NPLcJFBPJNvHRf/+IswnjmM3L+j92b4pG/PBc7thbXrFzyv3cD38SRdIJUj 0/wecQJUHo5fjjDv8R3xIj3P8CMdLsJ4bw7DDxf+PPlrDw7xklOMCmjEVkjq/ETBs8lVCTL/vOFl cOoYjXD8VcGpXpRd9k7ips8aXuMbjHtP3eaBajxGVZ+ePEUDzSKrbo8d97AHTzo5Ag0ECdzAxRng 3T7UV7cljbCq7vNagPHHbSmPalcdafsbulWAiS4CHiYnDDwMaAxM7I6QL2foOY71zgoZzNOuATey HKhzq09P5Rafuz3RXijhzjPaPRujHT3gGJ4mpkxcmFR4oFQeK97Gjx2oBBumTF3MnjffgzkD7KNS Rf+ebC6gYcCtMbv266P0IlU5EAZl2qMxzHiOJjCor2LXyDe6yKjnsuXcEJRwYVcHo5bsAEMv1Lhj YOSYF/YuoDFn+01jMeeHTOOZ5WCWMGCCwy0QF3/rMtseYOGFuiqqpBzHwyFwekPX4M6ZM8/HXLh2 9WCp2rI4YZcHPLgmlZumpFddHCz7FjDkN+QPnbjpBNtJ4IewaVdN/NEguFEGT7mRDLpz3AcDvxht 3Efn2jmic6N2kZhQYVdlus70M5Cx88fkqGpyIiDHUxBwYJcK2nGsjd1g/mwMVO0AlX4mU9CKekUw s0TtBpXdGDxqoFJjlnHpt3VkcNacOT5bzo0vwMdA60q1UV8FTbuijMAXTNoJxqHnaTLMTXjz5j/r 9jBTZUJLCsOqMTmDriKR3dprreHbteZp4oVBVdrzbOXLbnanTlsYBnYPGCwZQJ03KZU/i8TXpcHl 44DTuIHnHtl+2FF2lfp7cWea0FboIyIauzLPP79I+N2os/ZM9BbLKOps7ewKP5VhjvLFCOA4LdIq /gKeFcGNsn5K5BVA/aNdAL0wLEmbh6beiVf42muv40kH+N+nndNXREuuOsWg68JFL9oeCppFwOH2 QTTesAXmiVMQKeM59LdbtWD5pRZHTPwpUw/tylP31Cv0oV+8pbpmYWk+ID/g0dZpF/Rvtw0JgZaq PcFHFkp7D6Oi7CQSB3s8tHF2TOnr5gNqRyveJr1wVJumLfJHf8QQJzRGq2qhjmtg1BcYprH6MzSG p2EjC+OVXC0LX4oFQXs0xnYMQnVUqFncWhgr/vKs1LjRvkP4R9+ZgWo1ZVcbg/7UDzt7GDpFyEj7 4HaqsTq6cOD++1lLjbyJ63oTXptrsbq37FZwI8p9w0eUeS7ybVLjxj/qm0S+dsmlOpqgo8AS0nFE hqN9CKiaHX0dQUIX7fhiO4rr32kTTGoQvtHOWfAQj1u65s6Zr9mLFm8lnas+WQKGRtx6yNEO7/6r fRBnv332sqbdtdf91naxoDXwOI7AsU0chnaxtYKtEWiM8Bw38OABxRSONom37LP3HqafA6q2nl74 XU2TXgSpwMYuBgsreDrHc34rexDciJn47PPiiY/4VqpoLwhPWbzAe+iv0B2aveG2uNK3SrEogIch nN+ln+zKiffS7qo2watotbcWJ9tJyDt02AiPg/RvePzjOuLBjX7sOtPmPV6Rl8LJN3XX6LMuZcMP /QZNHewGjZGWDIaPOfLAWPvUU0+bHzA2m3dKcMUNemzaYE8FXsWNmdAGGmCweORo+MmbLitHr1n4 cJGF+6K0kBC+wjPb9EXVMX1xf9kgWk00YMNilvoO9YoQfLSEwhgdp92635mOGHxPG0doLlKW6K8I qtZQG12o9k9ZuHUMG3Jf/8alOvr4rG1CDZTNGrQjRPGKJi9Lk/M59beePbta6BEBQUHa8UuvCJZs wiAgwlF+5gBAWSo+YR4jGjAfod1SFwgwaeO0A2jJNzbDMK4NTTimYduNKg/1TT5ud+JDHGFCw3TG rBlanH7XvASB3oB993P+CBQb+o3SxzyB/gOPhm4xt2HOxPX2CRf4RjraTj/zHERlERIWCnCLJYbr ucHo7ZXvuiypjb7r9njIgAHWhHtP+fTfa0/na6SyH/g29mMQglE2bixCWzb4H2VlzOBIKnOCdEW5 eKx4GjwKmjIHQCvCN7OKfvQrjEpjBJqjV/Bk6MiwEXWVUJBAVeWFBsxVsCHFjVszZs6x1gwCwQH7 762NriW2yQXPos3N0Vg+Sn2B8Qr8wgEfWqJRxzwJHKhLHMd315ZmBobgX1EbmawLHJZKIwiTC7RZ aHr5937gxTN2vY4ePEiXEWwo79T+2GSjjmbOme35FnOhA/ff1/0RQ830A48pEghQBjRBaUsr1G+I 6zFfZe3QiZfAW7jxj6NVjHHcIsmV9YMGHiq7elvKaPDevrWNI4WML8zB0NJ4QHwVzSG0rrgd67fS DOO4K/xw2rSZKvtctcsl5gPYoaLOgT9T/pr8WZMffkT9s4mAIAZDyNirId7cBeo/6hvwL3gDWjXf ufxK1/Ouu/b1ET0EsWgnH3TA/krzfDnXSjQBzkhpF8NjG+pLxEi8kOP7iUbQh/bDnBreyxx6geZs y9SWunTexjhQ/y++JGGVjvAu0/hO/8K+5k233WHN7UMOGmBbZBzxBV/aA32H/OH/wGU+yrwXP+qV tpOcZliqCwQraNjQLqEBYyPteI7oy22RbMzCi6dOnVG8K5hh8BwY0JF5Lbhz4+LEp6ZYO401Ezdd 0t4w0O15otrwhtI8PVC2CrHJxHFs8qOvTZs23fMxNFYR3j6jukQr9shBh0rrLrtEJjBXGSgL83rP O5jT6NtjHjSgvOoT9DeEwxxH7iTtMHgwc1nmPwgcU38QULWNATplwkYbR/owfYE2GeXjBshOW3Sy duPTk6e6bXHc1+uZWbOrOTVkRWj0lsYa007aypvqz7TTcTtMZCDIhoc08Emlq6rEAv2ykH8Tjwqz D8JGLcmOBIkUWbHkR3jEIWLE4z1cR5kF44s0wIm4zXADVv6MuLkf7wEn8Ipnc7wOv5OKQYfBVUBH CITAKA9v7709vwBOWHvh4U8e8Z4/c39gEZYTOvwiTXzzXOOss87ab+edd96NzlfTkaBwoiWNWamb qco3QO3Kl5RJhCSJeApKcJwggsuk1WcFrAyoHglOFCqvbmsC1VhUKXih02+p3XYYI4sRJpTsPjDJ 5bjH9pqoshM/RgINbgJAI2Onnj29c8s1mI9Lss9EjxuhUFmGuW6rG2vuHTrCAgak5ZxbheFyrT23 brFI2KlXTxvRHvWArvAV42LntEe3bsWO2gVFMMHtAosXvWRD0exyLdAiDFsvj8pw6AMPPmzGjAAF Ww2PTHhME+lxZohMLroJBkyYnWAWJhyzQaME4QE4sBszfcbs4tHHH/e52YEy2sauQ0c0huQMrgiH EIa9KLw44z1ZZYapa/QzndBcGaHJODcKcNSIAWWbrbfx7ie7kwySLO6maJKySLsunBWn/NhF6d4t LaqpRbRS3tLk4joJNlhgsJs8avQDXuSdI20imDXlelhq5dikeFkaIezasdjkPPtEXTPOaMdCabgm LagqnybVVQZI8Bsve0XspGCgmgkI5+o3F64c2UAwNFmMf7EmK9jOGal8MWTK9bwMKA8J/zlz59iQ NtdKMykgHUIBypp6QJpML5Btjft1lTiDEpOP7t129K7JsOEjNYF/zsZ/UW3lJrt7dLyOwQN7Tjvq +KONCKttRqUwWX19iYwcqh2yEEDAgYFOdlq4uY6dkq7SQuMWh6HKkzrgiBU2Bg7Yb19PnNgNZzds 9uy5VsNmZwiBBruyuQMWt51MmPCkB1YGe4R0LA44W/2itLQwlMgASfnZ3SYfjI5j2wd7OJtuspEG xvnqE6M1yXi1+OQnzvVu1zMa/IfL0O88LWAoY2dNfjDszg0WD417VH3vBU/2aLtMAg85cIAmrxN8 4xwadwcfNIBOm+jMFgyNs2q4elc7QPjCopDyMhHCFg99DtrQ33E8d5QmBP2RYxLAxCg3hoixxfUp 4Uu7gCdgO4lJL5oUwIi6oZ2SPX8c3USQNf7RCdqJWt9tb4omAhgO5rjYcE0U2cGidffo1tUCN66Z 5/psjjSi/syCklvH5j+7wNcId1ffxlbB4+IztCEMujLBB08MTXOrGlooGKmHdti54VgaE80HhfPc +QssfDaNJailrz4kGyIId5hQI1AF3t4ysI7AZpzaPlJj6MyCAkEZgp2cxpSVb3Y0EWCz0H5ei2Sf 91f7xQ7VEgkJ5wjHZ2bM8M0wXAnP7V7wgPvEf16VTYK1dISTieFQ9YUtOm1RYPyUPKEfN0a9JsEd dUYd9erRwwJ8jpHAa7EpMGr0gxbiIcC4TsaLWQy+Kh7HLZMc0Tv91JO9eIj6Bm0cauyvS2uM4z30 C+KGS4uDOaYfNzwywafto4WEEXYbIi3bD7wM3nO/2je0gO9jqBg6bCs7Bm9RBxLO0Neelz076h5h DRpL2L7hiOObErKD75CTjjd/YXzFcCZH4Hr26mGbSYGb60Afqb2VDV4P6DVTizMEkBhY3VP2TcCT tj9Z7S/4LMeRdlR72ki8/z6NTVMlwOWIDju8LGK5WQxj7xjJhpexaMVOCpp2HPN5XNdWswA5RIKs fELL5BvBMXSlfAhTuQb4Tt3aQ7/kymiupqffwwufE46byeYGVxHDf6kft6mGTpxKjT/q/WjwIniC D7z8yqu6PfSZgqPTKyV4RcsAenGkZlPxcGy3sMNLf8Eg7MKK3z3kNrmnhF4Pioc+6jFgNZW1mzc/ 7tethsDdUPZEepcXHNxzz/02dMy41l08uVevnq5zjppwkQK70ND/4UceE2/b3Qvw+4ePdhk397Gv nazhihbMIvHLLWRHp6vaEePvk9JkhCYsTBBMcynA3UPv9wILWxejxzxgunJkkPiMv+PVP7lZ7lOf +KiNNjPGQyNaA4560X/zZXg7fID5DJsCzD+widZVc4Mp0lIc/cA4C6DRemCTBd41Zeo086Luogkb BFwBv7Ho+5T66SSN+xyNxG4NPIyxFw1KFti0MWw33XnvUAsjsB8Ez+wru1InHH9UsslWIgmfREAM H4DeG6y3gedH8Nd7Vf75Gk+4sQlNbbQQho0cZeETc7TuPbpZ8EJ/e1btCEHJpMmTJaTAuPcK27Rj /rSWxi82ksCTY+tcyMD4bSF/IlX1C1250YpxdWPxKeygwAc4htVffYn2zXXs9GNsFb6gDQ0WxWPV BpgPbb2VBOPaPMMe1CSlXVvjJHwMg+MPjhtnHBkzuOHW/LTkHyDAxiE3HWJvko2ICRqzR4kf9O+/ e/HRD59lwQPpfGMmQmbxVwQy4Pqkxtj9991b9YMwh5IyDUvHw+8bNtLCBeiI4J6bXV9+Rbflaj6z SG3tpZdf8nwVHJnRswnRRUdvbr7tds05X7SQaZT4BXOvD595uo8ukp7+/fLLaXPqLeHOWMy4PVZt B01ubqWFLlPUrvdWP6ON0DdooYwp8NpmGtB+aRPPikcOU99hvsz84qHx4zWGTvZRx2NkWJm5B3gi +GEOhmB/uto280fmNIccuL+PITHneujhx9SOJCBVnbFwRwCF9skkCSymz5xpgQd9Am2YxfQL0Yl5 PrYH0RBhIxD+AH3o49PEK58V7eGNHH1D4Hvb7+60dj6Lf/oOdqU47kj7m79gvvIV71m4WHyCudY4 81DmWtjhcV2p3MzHx4x5qBirssLL4F30T+LDY5gLYxOHI3LMZeer7tmwo53NmbNAQqNlNmaOIe7x uswGHo3GJbciU4ZTh5zoMXCoeBv8MPWrnXyhx73DhmsOMN+XYbDxzRH/aqw0H1nN4ywXuSCMX7Rw kefKS5eyCTBFMF7xHHbq9GmmDYIb+DwbLWMefNDzQgRA8J/hI0a4P55/3se87nnC8+oHVW+LbNsM e4MYmGbd4znqorTuYdMO+mN8/CYd50eYjXkOLkRgow+bgrajSJ/Sf9o/gmt4C/yPvoFtIYRF2GWd MUs2rjRGYIeSjTFo+pLate0UifcxNjGX375LZ9P9HcEl/qSnJnue+DldkoNCAXx3yy21ntEigraI sJq6Zs04SnMX7BB169pVc6c4caCNAbVf+i6G+THDgeB5qjTCmPNzYQ9auazdkmA2zStpJ7njm/7y V3NCIK2lEwYd4UNZp0yZ8uT1118/rsSVqPzh8vfkI5Fc+RJhHcUN/4ATz/CPJ/6QKv/G74Pcn4S8 v6+gqKNMQZ6w5nC+I4wCRXget7338Iv4pMU1+4cMhWfEjWf4NX/b//TTT9+vT58+paBIUYgVMcmJ j4bvMtzeZQAlMwZRxDJN+QBKA5wyWeQVn47lj4CTkpWpeSQXCfzUT3xHuJ54AYXZ1S7aiaWzIsmH GTOwcQU4Bj1hAFt3Src/wEy7d9/RZ//7agGI9gu7FbaFIqOsGFNFiMIAursGJxgwizl2d5Aa777r LhaisOuGRgpGIHfeqbcGM26s6OHjCHvu9iEbxOM2HBwLV27yYJBFeMECqo8Wlgh3emv3C8FLpy23 sACLKcNO8mNXiIULCwOEYNuJge8sewUw05c0UWOQgQGfceqQdCZe5cpJxIQzb47AZVK9yUYbafL0 rhdPGNzsIuHApiojjBvBFRMtDPpiRwgNh149u3mhnsrRRws/2YASA2V3Atpw89pemmTXi4802YWu DHrsGnJTFYsRjqEBm8kbE1w0sLiqnHPMCMwYMFG9Bb/nNVllFxiDdEy2ObLETgGCDDNyTdjZbemh NBxtoR1wbp2bujSv0IIHOyMb6uYEGc7Tzj+Lqt20yCNPdgE31AIKI4aoyrKQZEGFgC7RkDKs5oU5 asgcJ8FeBxNI2gBHnfbQjgR4d+vW1doVTHrR8mK3eYcu23tS74G7rBTeN5fBcgZ7Lxw0EaZ+2eFk AcNZ7Q00YWWQYxLZR3WNTRpsh0BfLyA1EWYhB/2gFbfhgXu4MiuVQQZY1V44esICgJ0ybkrBaDAL GtoqOzHcfoP2AoITBEnYPaCdsNu05lpreXK3k/DgliGOalAvDOBoz3G7C3WCnQXaKzgySWRnlt0o BIcYIkUwSxnQUjn0EN1QoUlTmtAI2xrhVAR7aZdW9c7NE8BGxVcJLEBhlz1NqVN0BEhoPHCbDsJg 2mR/fX9Mk3TyhRcwmWCBxU19aP/RrulbwInsg34YsQQ3NGxoW1zdzIJjhXaT0FKjrXTdYQfTkz6M IKKfJkibiF4IeLTXbiE1i9kQvjGpQasCLSUmJizUBmjCCc1R72fyjKCAskFH+jr1y9XJ3AxoGquu aCMYK6X9Bo0RLJ5z5inuh/AVbmfpLiEB2jHdunV1O6voVRYW2dyaanvbSrUfIRYCD+qN8/zwUDQ6 3tFOJsIGbh1BWAx9ub0JWylM2tEspA1BL7RvzlY9I1xh5w/hK/GBhaM991a/ZPGPfTB4LdpM9HOu smYnGSHFa/AJ7bxvt51uklL90U6sFQDeJe7Ao1+ycBsrexUIgxHiQWvK0K1rV/FmVOLFc6XGP0i8 AzqzE5/qXUeuRNvkdBW12gvXFO/k/qd2qbKheQE+aFDCD7GrwdXzW4o/n3byiV4Akx4wCHSoDwz/ bizBKtoXCJSTVsx+wke8SLxGDcOC7ZofJ3E6/INbdTYRHMYCjt5itJa8ud2KXXB2VykDt/3svdee FkojJKRfkD9jE5orHNkwn1JfRzDTteTTCLGXa6zYTzu+3OK3nvoMNIBG4eAX/SSw4zYrhB4s4ljc cMMlt0qCxwy1UXZz0d6lzWD7z0czBCtRVBABmgPWJ+WnjXMpAe2OeqY+uEWOm7po+xjlpcxokjHZ ZmOGhSHtCO1K+kPvXr3M7+jz9Gn4PoJt4tCf0dLcpW9f9wV4GjyIBTp9kUXq9uob0GWPPT7khbeP u6iPU4YzJJRkbAQXNCIQfLNRwliFgIYdffidGp8Wgl3EczfzzjjjHxsA8Nmdd+7lRQkCUi7SgD4I C2j/CGNYxPz4pz+30WZsBUGLZke9UKe0G/KnvXCMGj5kXq7+g9B43vznJBTZwIsz+AXH0blhrZ/6 HLybPy6FELpaIL1sYdaB0kg88fhjLBCl3W2tdscNkYxX8Mo+Egqx4EGQx/E45jcfOed0jVG1faXU jnUcXIIKFm277bKLhe8IM8w3hcMeqkf6D+MTwj/GEeZg8I2dtEjHJhGbKfRSbA9iH2dnCTtZ0NEH mOMghMahDfqINtY+J9tJzOdi2ebA7Cct3lezAAsNHC4hOF63H0JjwtjEo1/SzplnoTnEPIoxDcEC fAyBMjePbqVwbmfidsVNNt7E/J2ysUnEHIF3XMx36AuUnz7C2H6E6urkE44376Xtryf+hkbfpmqj mDp4e+VKz6GYt9F33XtUT+AGTAQXnl+oDUJH0tF/EAZQr8AEj6OPHGw/5m6Us7fmk+tLaMfxwVdU D+upTZx12hD3K9Iw1wA/+ov7A3xZtKZ/QFvGFBbQjNuM9/Ac5lpckc5RMdowfYT0iQImQ/0jT3g5 mwqEo/lzim60HagxH1qDAzyU9sFcg3kh4yFjHDctMkehDey5++7qz5t4c5S2TV/kCDL8nTpg7KAO 4PuDDxffVfnht2iqbKk2jZ01blxlXomwkf6HTTKEbWhTc8EG8zxwhM/Rxjied44EaszLNtT8iAsd MOa/dInsq6ndIlw6+/QhmsOijZJYHH0LHsOGHscMd1J/I4R6gG7YzKEPMCeABmxAwHUZ87n1c0+V i/JCG/gM9bNc/Ih2yLz7qCMPl1bYERb4oq0ITpQTGlDHbJDRruhfXVTGLdWHoYvQctlY7MODGOPX VBvl8hN4OfSE/zIHZjzH6DkbQBtusJF5DHMIymzeLljwCmy5ItTp1V2aepoDskag3TLeUB8ch+/d q6fGBq17NCfELhd4wI8wQL7JRqoj8W3mjawF2GDgBmTS0C7slIA5Epq1CPiYS7Neov7k7U0z2irz IYRvGOVmE4INJgSYJxx/tPph6ufMcaET9KBvsEbrqfkMx1lx1CF1tcsuWs+ovNB7mdaMtLETZdcM DVj6YhnNBAUO8zP4CRsz4MBtevBOjrhRRjaIUyLgNznKZ6o0+f8lP6kUcOBZPiJ72nNCPgnFpk6d GoKiEAIRIX+HPHzzNKmanuEn78q9n58xUEyeATP8Il08K4Bl3IiX+zf7NX/ncRveVzUi8UAoj5+/ B9BmP8QokS7C4tsiFoXHExjEae8v4vDM34kbfvEez9wfP2YZEbbGTTfddNGQIUM+gmQWRwALhqp6 8fwDXA2ifusITMcxYG5lp0yYlQjWkPK09XuQNsWjocO0cCxY6Ng4Bj+YZu7wg1swkOBYlDFJxRHG AJUf56mkxKk3VfHagwtzwh9Gk+fNRIIJb+BlIPphl4yBO3feOWsnLnjATFnEkgd/5EGeuJo2OTTe E63AiTQwZwYoDyyrWCagELUjGjfjQJ0y2UU9HsbKIIejbsCHSSGT7HAMPKh5gxd/lItn0DFwBf/c NZS/LB/hzW2A9BVs4RB1n8NKuNU+aOZA73DGgY8mmjHZzuNBXw+ATRUS9A947T2hV9A4wtmtpD0G XWy8WTiQR+x6RB1HmihrfBsf0ZiJbbSjoGnEyWkWfjyZHDi9mpHbalZ+YERdBX48KSuLAwQK6RtI qU/w9n4OsrWpH+UDHZp5BX2VdkQ+dIPUvrnpKE2amuEQL9GCXHBlJenBzjAO9f+1xQ9oo5QN1167 y/2gA3+UNVzUj3EAuYxueZw8Tfg3PJUWnkA8/hK9U5tzHgrPcSFt3i8aYJUfzXyI+NGuIn7ePqKe m9MRN+XFnIGJcKJhwEh8D+EUdEk2jSIOYXAmcOc4KXUGn4i8EoySbkQsHf1yjHZtf/jjn1ngdLgE viyo2dlu6AcZzaFTqveAQnUkflj7wDeob7WdMgxcSBf0zelKv6c/NcOO8lEmytyeK1tdG3oBH1fl l/EqeAMWMLBlE46+DN0iPv7gzB9tJR8rYgxqoJEBUV6OIybeymKWBUheDyxw8rIQRpvMS+cyRcEM t/6J9HGbJSFuc038PPLM23q0S+hMeOAZ0JvhQBNFc/kjjusIfEUT0ptvQiPe9YQ2SThTlwi4bXl7 OY6XvCKHD855OwYJNjvQ9kMzBm2IL33+Ql93Dx1MvKxdB+mi/QRs8KM94sCbMry/o/5T++aIGjyb MlMeYOGa80h8WvbkFJ+8EFJEuw68Is/oG/ENTMBCq3DNdYI/fjhwATb0KhG1P3DZkOPIEdoMV1/z K23MvFn8yz982TgF7jU+lKXmORwPQfAD3Kqsihx83Zn8gT8VvCx9Mx0iKOIGntUYRflVRvCjLEEP 0kXc5vGVMMblyCvoRnr8wkW/AiZ/jfOt1Baa+03zvILNPdoWbYy5anP8VC7xefJNzShlr0/Swgsb HGUs+2z4AxO8A1/8qzEZGOU8B6E9dMOlfNvOnXMa1PRUPPVNtUile7dNOyde4perW1OFNst8q+aN iW9EG+IJvtCEsuDAKorf3I/am0OBP+XO8TWg8ifC+UTQyeYe/Bj/yD/iQyvmQDkPiH4aceIZtI7v BC/NGwKXZn7SHv6kz/NoLnOERX75HJbju2pMns+RP99sGOHIq9lRXv7CAVtVJvrVfg38ncCyfnKa 1LBpN2sZHPlT7uQax7y8PUa8vJ5JE+uBmnZ1GyU85ZnwqRoIAX9DLi9T/Q5N+EoO3n/LLbf8QjKD y+UD06bh80fEeIa/vNqER5x45ukiPn75H/7xHe88gYEjDBfPeI9iEK8uBKHJNfvn6SNOw7M9IA0R so+O4ub++TtJackgEf48412vfg+/8M+/4z16RP7NO/785e/xjV/M5MIv4q9+8803X3TyySefG4Ii xS0d6BKtkXbJNxWlDoE9if2SU+2ZsPF3FpCSOpqGHSUIQZBe9d4RHPpwAzYZHKDXrgzAw9lm3/ZT HgKGr90HwPFAYAaSw+Fdg4SgVHAawZVfPLKyl+W1LwyM72YACkzQ+V012iQYMPmUJoFNuP0+NCZd Xd4SEaFfQs1KEj5GURGavhVzVWgsEqQyVvRN3/ySK60hvflR/yihqep0ePurDM9wsQ/fDS2nKmOi bhONU5bZoJGDz/Ips0nQ0we/yYGf6J9Ft7++QbkBm5S0pjHtoqJHWU7DKSMCqAM4TJ6MQ0UXImfp UmgCQFCJX/nAh3HVOOapHBCR/dEcyndDqapYefujbaWARto4TwIAk+dTZpOgpw9HIZrirSqNTUVl zQQ3xydo4/L7p8wwgW9TV8ae+iF8VWlc0t/gSZe5KrcqsHpRrCq0TMH3H05jA6nAVy9VNgl6ypPf 5BppnFWfsWvAJiUt/XM46d05+qeMSAb6howBJ+c9WSz3V6LnEzm+U1vhWeeB3+oSPE2c+LTV1LeV YUq018KlaiM+Ls8lvgMbR/APsRrbDd6pb6YyZPONirTVS5VNx3Dq/lClaqJNhQj+xgcU/gheQUZl hTbSlQAcueDq79SPIs8Uyi8xI1by5SvSN4fy3ZbGpDM6Yppp5LKP4AZtMjgl+OAnNf5BmxSX3+Sa 2rE8HSY4eftzXAUEH8VmESVLcPhNdZ74evp2mvbgOCDlA7q4HF/e2fy46uqf6xjQm96t5ogqC4qy eClR+ZvlZjh/dDtWJmULNhHaK1NFpJICDfjbT7SpkP39aEwhKVNjvwoaA1fvLiQZINBZw8dhL7/y qgKtKo5Af/kLn5M9yV0scEuxHFU/ObVKmKlxlTykrMeIXj7zVMkLqPjimkP5btuOky8tOMeopE0z nAq8wh1d6crsAo7bXx5PkIPmmbfRo36qvgAARcjhlJk4jtP6p4wIbsTXZ0Op9B39oUKuuRzOpQSQ hRm8v+ufLLfSM4+VQt3OhAj/mrBJaVTOhvmlfRONeU3pgCtXga9eqn7YMB+gAsr25h6fKsR+YNFM m4RjyithmXB3XOMNPgr3TwoDTDMc+ynYNI7Ktyc/dbqEDsBACf8UZvD2rX/qVOGXx2oKdVAeLlz0 KfmN8Q8I6ZloDITI369V8urF3hGr6uMC7BiG3diO67YZqUoQJbo8KjgOSgGGF0AbMFZe8m+vPxC9 dmUG9uAdFzHKNYgAVXBShKxmSo+ojyrPgEF4wj49I34DBWvPv9obvUZzp7IciRKJNpQkeA6Cottu u+0XJ5100mXyRiBEJAZK/uKdJ2G4CItn7ke8/C9ghF/E5Rl+8Qy/5ifhRpkAuebv5Jv84z2exH1f 17jV2XHUvPYjVnt+gVwgHAjwhA/jIk76qn/b88/z4D3+SBVhzeniO8KJG36826kD5OHhrWfDcFH5 J1ZRffqlYsxtGF3Ei2z1LHNrAwd/pfcAWz7NsEsQFZKOpxBNJHgN2UjkVGWAh7Iru7qDUxYJ25KL uAMYDjFShPKFD1ACd56J8fCeulMJJyXCW64sVQanLFEKdtz0muA6YhlWP9rQRkEpN8V/HxrnN08A rQ2cEq+OaGwMgO94bWmcKJEgOy4/vw+NAeBmxQvMtwTAo/yGuacvWJYjOMwZlSEkTK22hKN4ZbIy riOWP23bcdA+oEds5xccMTwbnik/41LhmbdSRTbtgKQX8NQzj1Hh6Xjt0DgRpQRUllrZJjg1Mk7O ZxoNS0buiE1dt8rRMAFf0VhlBUNKVSJe1skqtmMSGnxbGieIeckhR8oL6GVGREuvFZoBFEQdrEcj HPuXtCXx+9OYkUoxAKe/99iJJAu7lIE/CXNOERYU0TfRFM4oxgTV6RuKXCLqpMJVUSoae+htpLGj OS8iAltPvaSSpNAUQJiD9NOQYUQKKNV3RzSuIvglgJb5y29VaKytU8cEZ/Ndw0rEodvw9ofQOMDU uJfwyyKn/upY5c/70Vi7xW+/6wUkR9ywxZGnj5InQGAsV3muGo1TkjJRWXeG0/ATQPUss2mmcYpR 1rrg0P7KVmZIZTK986ZwPXhLNMYLCLgU01/6aa8dV9EIT9GVlT4ocuUiAI/U58InxryqcWd5OyYR S1pESRLYEgLI+bV9Gjs/pydicsBxohJu+Mcz1WtgmHz/FDR2OZT178srjIHpQB2k4rqftNOOwZ3F 4cfPTfZq2JFGcIQzBUq+bg8RLqcx5Aj4Ee5n5dk+jRtoYxhBYSHdLo3LwrjiFNdxyCm1jcgzZVvW uuLwnWNY11CC19iOydsJ9JNi+lM/De3YDHU1H8fGbs05Z5xmm2Ds9uc0TpDqHCtcS9yjHTuP96Fx Spd6ZANMEhr8KtC4rKWgck6TBJNfgEHbHGd8V4XGNRS/VXUoeAIHxAZ+XNVfoi113kBj4gdIXqgD P10ZTUNQFdOpKrL4K83d8Iv5Ca9Az9sx3wmDFBq5V7bzGsa8EiGiCrBHosCthJPS55jkcMMfWhuz wCZFMi0yjKrvgBHY8S28s/AGGjt6oo1bj+NR7tpV78Z/1WgsMA20+pO141TBJXIJIfJKNaUS2CvR jrpKVIhnXaZGf8KTa2zH0tiSd8pFvyUNHTNl6tcqnBLrg2/T2Mg4Cj5+aZfGBiAcAk1eMzgNzaqE k6CmPpcgk0O5BjFu8uVp17YdV/g4Sgkh8m/IkLAEpz0alxn8FR7CRmhxU1vt0nvQuPb3G4F1YRrf UwHrBPl3/l7HCKLkPrUfaciL5oPL35NP/ZvjFL55nnnagBvxPvD5+wiKAnhkzrN51AAZXMRJX3UB 0fBphhNxOno2wyJe5NP8Ht+kydPl8YmD2mMebj8nwdeLqpo9JIwVAJQslTVZsu8SiOM4ajkgE6VG oAmOA/XD0/HKFz70WmXpKG66hKRxyG/5D2lTTnV+AgMceRAanT7CeSY+ED6OpJ/0nfcfDzQlbUpo 6UFPi2RVOvnZO4dbRsL/fyONVSwXuWSsUfKyGSg0fEo6VLTiOznT2EQHkqG1aFwRJ1Hw/WlMaNC5 fm/Tjv8YGhu8YAP+r9WOhYOHd7c1fQgX0AIlfngaTZ4EO4DAcGUMhTlehOvJtz9LP4fLr4ZDQPjW 738OGteT0d+HH1clSIUVivYpC1BjTHAEpqiJcPIrIyUal2VtiJrho6Q1bUo4flRA/gI0JsNkx4nM MFqeFgYJh3qsKstCdL9qTFGUJBzIyuRk+iEO76VrhJMFRNRVoLGzdaYCqo+/ORpHYfWEhtZYgAjR iSj2qo55fwkaBz5ZXf0t0xh6Yn8F2vpYI21Hfm59fxM0FibN7XiVaEyDMeXdZ+rqyPoVTUcBUUx9 lo4M5BRmCI6QjqViW+S//v2fdBQIW5JdTTejU8HxV0rvzmoICU74Ct5fjsZl/tHHjUlZPvDRq2v7 D6ZxFCrRKkH+w2mc8DFa5U9ZB8qmrqu/Do0rhJw9dZjoFxi+Pz/+Y9pxi8Z/MzQuq6J+pBZPt3JP K3nFX6Idu/k5e+dcN5KESfpOSDXMKz6oHddl+8u/uY+3ybakcebPkT+5CIhnFiMngr1NLr3FM48b 7xEWT/zzd/LJv/P3gJE/CQ/XHo6EEeeD4AQMP1dVUNRRhvhHQRoAt/ORI7aqaTqKhz8uBFU8w0Wa IFjEjSfxVisrPdL4iaST/6hm8u4JrGOXhcwh4B+TAqfOf8SgFcbQVcPJil/C4WEkA07AtyfwS0Zf gk7eCU5EJaiC49ycLKVQVMfWTx6/CjSGdfo2cFJE/1ZwTJvGgEgXT4eWZXK6hujy0f//dTRuqqtU 5FR66BK0iSdEaEsbxZNnajcNRGsnPUCBUNax39KPISvo/2YauyQQC6eyUFIWFo2S/zKwoR2nXhuU cTqilc7f+vm/gcZUb6xHA/+oczcIe1Ki5IJcfNW+lLU9V8ZoJ7AdLwOo/XPo+XuWj73rFA7pIGpV pix5elVdkkb1jquSx0sT+BpOc0BJg2Y4hqqf5uhlv2rj3xQ10ABMMwj8KozbCWzHyylq/xx6/u5o 6cfedQp7llGTkAif8OgAhsJbNM7oZCJmPyIbvKLBdUTKaDcNkfn4M9M48GlCs+oPzf7CKPeK5GCa +/OdXBmjncB2vJyk9s+h1+91+1R0ebdo3EzjmlYIeHp07+6ejA2soN0H0bisvKoKWzTumMY1LRuo lvWHuj4qntoY9c/SjqssIvtmRCue0xxQ9uXmMe+D4LQFk9GgseTtRBW6LRoHCRoIR0VGXbVDuNwr qshJ+Gnj/no0zvGs0coxDt/GMS98O6RNFeEv/5KXifdUmozG5WtuJ6odLImVg4oo4V9CCW8/iR9/ DQGlf7PfqnwHDvkzxyH8VwVWFScXsFSeH/CSF5j3QIJkORLhj1/4hx/P9lzEay8s9yN9wAiYER7+ ASvCw59477WpdIUGoiZKyWBroAGu9gGFZl+wQjzE/0Y4ETOedQEqOKTVn53f4yPy5FmnD98kckhf Ds3gNMTu4CNyaQMnyy2SpjJFzukZVAg44csz0tkPvEq/Rto4tB1qAjGgpzj+NRz96H8jnMgtnn85 GlcCjDproVp/UBLcqtDYceukZbrkEXDsCQHkGqLKi2/+GmlDzPaoCYwWjXPa/K3QuJ1aAc2Wa1Gg RYEWBVoU+H+IAhiT9YUe/w+VuVXUFgVaFGhR4C9JgTbrs2wx0KRcEiGx/IplF+jm74E+6kgRN/zS 4istU/Mw3gN+xI1nczz8I27Ai7h5GO/tpc3jdvjutWSHoe0HRGYglb8TOxCOlIF4+BM/Txfxwj+P F2E8CY+84ptnRy7yDbgRL2BEPuFfQ1eMEPQY1SpmvAQIno5Zw+BN3o7ZDMexSNMMJyUK36pCJKgK OE5a/aR8q0+TBb9Gl4xzZX551u0DVuQPgKPgmjaKHkjXL00Z5nEy8A1wBKQNnMCD5x9OY1QK2Y1L robz/jQmfsq3TNjOdwrJaexcSBbZVR41lPQWZav9c92umhsAAEAASURBVDipCpS4AQ5xw6NO1159 pfSKo2zqusrgVXACD541bSro8naOzXAcgTSBD+/hajh/LI0Dek6bwKfKuvKI/OMZOIntq/7544RY 5Rwsj/CLZ+VRxdRLwMr8wkvPjmgc+ab2R4KaNhUkeTvrZjiOgGeFWJWk9dKiQIsCLQq0KNCiQIsC LQq0KNCiQIsCfwwFmJuH473+fp/ZN5HaC8aPv+ZwvlkS1cD1kX3n6VJI+o34kVcz3Nw/0hGnOV4z nIjLM2Dkfm3eq/Vcm5C2HgCMDAnN3+O72S+QaPZv/m4mYqQDLq75Gz9gxB/fuPw78ogn4VHe97RD U8GsXojhjzpJpVhUeeUyRxLUrmM4pdJvtvBbTe9tjpUIVJVNFLkEGrC93Kzg6Iv3OlGFTL4sdXC7 cCJ6Hjv80jMPSdmmzAIfx6ryz2OXcMqwhvj+qBLFyZKsHH88jZH+vvb60uLZZ58rXnrp5UxglGXT Lo2pKyH4e9LYpS0LGWVNcEo6JKjx0fDMqfYH0biEFvn60x9/XhqTzx/Wjv/8NKYFcW3qq6+9Xsxf sKB48cW6DfzZaSy6LHvzzWLhwkXFggXP+hrVJDByzfin47pqyyvqVK23FgVaFGhRoEWBFgVaFGhR oEWBFgVaFPhTUaCjtXTA1xw+pu0868VVRKiflZyh9nL8SB/eASdg5eG8xzfh+Xekj2fEy78DJn4R /kF+kb7NMwrUJqAdj8gkMo1nRG3+jviERxhP/OM74sSTuM0u4saTcN7zv0gTfvHd/KzyyY1ZV56R Ax5+jyW8PDLIjl8lqrNo44VHCdNNLODryWLVf3Vyv9UwInIZofxsgCPgOZw8RQVHnrm/PxTYBo6y iTR5/PAjnf3DQx9JiAawKER5WKaMU3lnsKu4xCkBpnglnDKRQZRwAjrPNl54lGmiTBwrfH3JkuKu u+8rvnHpFcW9w4b7ppWAU8MoE0ZAE5zkvWo0DhB+AkeZBD4VnORdRUn+WZmUzigEgvr4Y2nMDTPk YLhGSp/pI9Ey8gpkHDv74JU4ZZqGMsnPRnDFRZrB1N9lwgDZHhwBX5V2HCD8BI4yacAHOMnb9f3y q68Wv7vjruLib12uNjACA/ZOYBQCQX38sTROtEk0Bh+uen5o3Pjiyh/9tPj+T64pli17s0FQCf6R Pe92eBix5jKV4a1HiwItCrQo0KJAiwItCrQo0KJAiwItCvwJKBCTbs3JedVfm7l5mYtsw8UsvTlK CaRNUvwjDVCa0+VhZS7Vo7244Rf5ReTwj2f4v9+TuMBphtVumlU1Zk3iABjIxDP828sg4kRYfUtg I5LEy4VWfAfc/D2HA+7theGHi/TN7w5sOG9ITFI5pT6q2xpS0iqTCFdEFoT+NLQyLQtmeVofJtSF om3lkSs476a4AUPPQDrpXCRcjE6k58lfRDSERNaIArgq2J6rAoc0CXAk4VI+L8QBGJ5CBthRzpSC CLUL2kQSX+5H7eIRnn9mGq9YsbJ48aWXitEPPFRssfnmphICYfp60OZ/N41FaxWUq4cRFvGPkrvs UQf4yMOfUX18/F7tWNdy67rp1RvOdtXtrz0ak4W7h18iY3D707VjyrXyrRXFYmmTDR8xuth6q62T sCb645+pHVMaeMuSpW8UEyY8Xry1YkWxkjow4cuy/j40DvK0ni0KtCjQokCLAi0KtCjQokCLAi0K tCjwx1Mg1iA8vTpquyZfhUycugKQEoQfX5FLrAJY6LTn8jSEEz/3i2/Sx4qaeLjII+JH3BTa9jfC eX6gI7NVcZF5PCNNcyaReXM84hMW8SNeDidPE0SI+IRFeMDhO8IDTh4HvwgPf/ycLlMjqyETquA8 Mj75Ii8tZrUYJCB35KSE6aGXCkh7KBAv6joHkmDgk8MBVEBJmdRfDXC8+ia1HLiIighHwN8iAr/z ndKvJs2bFB7wyuZQCnEsYCBNCQeg4GJ8SlgICAJGwKVk9iMd/yyoAKlw7dM44KzOIl7wKwPRZbIQ eKwO/mWZUp6BP5ilhXrn7bYtPvqRs4qtt+wk+zSEB+YlTvILOAS5TIqVcNAzo03Q2GEVTV0yRUx5 ukQlHHDApfg1jROuicamadBGuPCdXEkb/Mq/jmjs+NAq4PB0mpT3yrdXFhOfmlyskMBkNWUQwhxF UdkTjRXgNJG7QBhe0MawHSeVI1EqxUZza+68+cXc+fMFO8JLSIksgBNtS+oKDnD503+QdGRwTvis kXApcXNZwCZoU+JGuqBNCaD6Tv5rSFjzXrHDDtsXH1cb2GTTTaRNVOcVeZcoGgRyroAZz6qPt0tj 4DW2Y2iFW3fddYtTTz6h2HWXvvoCcJ5T8oIkFYQqOKXPaQy8lmtRoEWBFgVaFGhRoEWBFgVaFGhR oEWBPxEFyjUI0GKdZ8gxFc+yKS/AYrbeHBrfERZPUhPGH37xF/HDP75Z6RAnXMTnO+LGe8SJZ4ST hvdq+aL3gIl//EW8CFNQx25VNYoCiRxS+PEMF5nHd/7Mw3jPln8uSHtwIg1hER5+wOYdl8MiXnOc vAIcrsVgpC0Bx6IvsiK4jFLFJE4CFciQOcGRqkojn7SEDziNKQIO6cMZTh6tghxQIyeeyTXAKc+y WYVOaZctXV4sfeONYuONN9RxmHeK119fUqy55prF5ptt6oX9a6+/6mMx62lhu9nmm1YE1rK9eOc9 2fjR0Z0331zuBfQmG29UbLDBBkIk5b38rbeKpUuXFmuttVax/nrrFYsWv1isvfbaxRZbbG5BwPLl b8k+zGvFypUri/UUvpkX6zJNHBodzg1YCR6LbG71eE1pyJNjQuS5/vobKA1t/r0CmGhqrLvuOsU6 66xdLFr0omFTngSnJh5aHSulVeRaLb3fE2HgC8Ann5U6IrT++usbtyREWU1+K4tXXnmteEvlQ1i0 2SabKM56KZ2OEL2idNxAstaaa5lm66jM75WaMKlG0i/ChjcV/9XXX3f8ddZZJ9FA9HdZV74tHF4v 3lxelnUTlXW99SuNpxXSRKHuoNdGG2wkOOC0QnWQ8K1KqjItfWOp7DEtsSYL+UCPNdZYs5g8eVpx 6RVXFv/nn75abLft1sUayptwjkY5b5XxPdFpww03KDZVOakJ4K4Ubm8sW1aAA/7UM98IQBJsNLMK 1cXS4ppfXlds2Wmz4mPnnuOC05bUAAwnUUIwBfRd1+3rtt0Dw91k441dFgQ6L7/yimiU+NpawnEz 4U/7or3i1l57LeGxsbVzXn31NeNFG9hs002LNVXOd957p3jzjeXGEfyg0ytqu1tKSLhyxdvGFTpS hpdfJq93nMcGqlfKYfyEB+2VY2K0Bdor7TZpoK1umK+pDtBUo24D/0QxhG7S3non0RX7RLilS5c5 bs1p6laa6i+1fWC0zyuIFXEMsvXTokCLAi0KtCjQokCLAi0KtCjQokCLAn8UBWJ+Xa/tDa705pHm 6pqJs4CMCX9jnhGN8FxAQ6zIINJGOP6RDr9IyxMX8fjO4wa8SBPfpIm0ATfS8uQvYBIXF3DT1/v8 rqqgCBCRaYALZOIZ/vEM5AjH8R0uYPEE+RD0EB7xOoJLnNzlsEjDH/DCP4REeR5eVAeQhGDKNmWq X6cOECmM5W+Ik1I8ICRf3io4ZSCxazgpHEgJaoLkOPYJ//QEno1rGfvILeGRfwElfZNXKuoaWugu XPRSMWL0mGLSpKeLvffaw0KWCU9OtGDn2KMGF+uus27x0CPji+nTZ1q4c+7ZZxY7SgMDoQwCm0lP PV2MefAhC1XAZdutty4GHXZw0aVzZy2alxfjxz9ajB77cLHdNlsX/fr2Lm64+XfFNttsVfzdZz6t 8LeU9wPFzJmzvfBeV0KdIwYdVuz6ob4VtXLasMhGeDHhiSeLhx56pHhzhYQ08ty+83bFoEMPFtyt BWdZMVZhY8eNK7p361Z03XH74rfKs1ePrsX5n/y4hVQIh2raJMrwzR9UlXzCQokRo8YUs+fMs9Bi AwkDjhw8qOjXZ2cLMx4e/1jx4EMPp+NDS5YW/ffcrRhy4gnFEr3fc9+wYvqMWab4mxIGnHLS8cWe e+wmmpWCEVcsx7DWKJ5/4YVi5ANji2dlzHiFhBXvvLOyOEZ032uP3SW8WFE8+rjKOv6R4i0Jv1ZX ve2wQxeXdcutOll4M+npycXoMWOL5Yp7wD57F489+WSxYN6zxTYS+Jxz5qmuB4Qci158sbjz7nuK 555fWLwrGtIGzj37DDeFX1x7XTFlyjTBebDYVAKU7l13LHbfbVfV3YTikScet6bREtly2lQClzNO HSKY25pYM2ZOK0YpzQsyxnzowQcWU6ZNL2aq3BtuuGFx5ulDij69d3IbuHfo8OLe+4cVu31ol2Lo /SMtYDns0EOKjTbawIJGyEE9UrdoNrk9STAGtTqrHIMGHVpssdlmouvwYvbcucr7vaJ3717FGaec XDz73POyL3R38YaELbsL/sBDD1K9jCsmT51WvPHGsmL1NVY3vfbpv2ex8IVFxTDV6TPPTC+OPfrI YsbMWW4r5559etGrV3drEyFgokzjHn7UbYB6OOWkY4sNJIh8W0Kqp6dMLR4c+5BsWy112fqqPRx5 xKBiow03Un5v6AjjA8WUZ2ZaSPX6kteLnt27FaefcpLKuqHrH6HaE5OeKmg/y4QfbW7WnDkWzHp4 oQm65Kk1RpuMBlv1h3dFNf0nPPEGJ2z9tCjQokCLAi0KtCjQokCLAi0KtCjQosCfgAJpnu0pt9d1 1bybtbTWI5qKV06CIoKbBTREwT/+iI9fCGUiHH9cfPPERTzem2GEH08c4eECTnzzzMObv5vDIl17 cCKseiJZWFUXGcUzCppnFH7AJF4eN94jv4gbz/CPJ7hFmoDVUdxI0xwe3zzjnbj5e5k2ZeWIkZtD 6qiBTAIQXzzrOEY5PnM4ek/eLP/ircw6e0TSCs7/z957wG9ZXHnfQ6+iAoJSFBSQYq9YUOxJNLEk sSQmbpJN3U2ym/fZvM9unufZfbZmP8nWVHvvFXtFBUFUUEBRQKQqvUmX+v6+Z65z3XNf3H/y15jE +M7ofc/MmTNnzvyuuS+uOf8z57JhalQQsZp2n9aUjm7rWO3anC9dskyb5RfD3aMeDPeMekgb8fky QOwITz39bPjxv/1XuPPe++QxJI+Wje+FO+66L9x17yjTAm+PadPeCP/0438P06e/GQYPGhj22Xvv cM/9D4T/+sUV5qnx3ntbwitTXg0PaCN/p/rddc8DYY28YxYtXGyGjzvuujfcfMud5nUxdMiBZiT4 13//z7BCXkfIt+NHmoX9J105FjXx5cnhnzXm3AXzZbQ5MOzVrVu45fa7wq+uulaeGevlDbJRhqTJ 4T7GvOe+cN8DD4e12sC/LYPCdp+3JMZjTbxUHZQk20DSl/5nM3/DzbeHO+4eFbp37xaGDh4UXpz4 cvjpf/zcgl+//c4iBT7+j7B40VIzfmAwe2bs8wY4Rob/+sWvZVTpEg49eFiY/uYszWuaeT6Vl09j YCR6V15Ev77i2nDbbXeHvWVgG6ZxHnlsdLheY2O+ekFj/vO//ruMSAtlZBtihrobb7k9XHH19WZY Y9xpr08PDz/+ZLj3/ofCE6OftlhDGDRuvOWOcM+9D9i4gi7cc9/94bqbbg/99t03DJWsCTI+YaBY rOu/4J13zGT69qJFZojhDWCLFi8J//CvPzUD4SE6GsW1vfnWO8MDDz9i2KHfzFlvyQD0jI39oAKC r5PxBMPMqIceDtfdcIvunzvkCfWejGZvmVGF9rnz54X5C942gxiXw1cs3jlTZKz8xx9rTPEPHXyg MNlL13BU+NkvrzBvpR57dQsvvfRyYCy801i/neW9NlMYvzFjZugqj6VRDz5s+ODVdNDQwWGu1vO/ /OQ/dPTt7bBIRrKxY8aHe+97UHO5PbwkfNfIO2j5yhXmFda6ZWvJmh0mTnzFPNEWCo//+vmvZayb qnm1CjNmzgw/UdDzhYsWywh2YOi8W5fw37+4Mjzx1DMy9LQKr0ydGv7+X/5Na3tTOFyGNh2yCz// 9VW2ZrneTHasjII/+el/m4FrqPQ77JBh5oGHx5b9UoVJvJ05MkXdq7TzoZ7gB1dOGYGMQEYgI5AR yAhkBDICGYGMwIeDgD1+2146Poj74zhGoiZS1WbijN6V3J/kveyiqrxe93b4U/mN2p2X3Md0Pq+n PGk5bU/LKU/D8gfxKGKAqmI+KHQvkzuv87sSKR+0at1pDpobjRrxuUzPfXyXkeqQynH+IhebpLP5 Lj0AvGdD9Wj0hFqeohybubN4biwpL4S6xqJeTLPIrFuVNT3PYgw1OXjWHHzw0HDhBeeGJ7XZPUde Fuefe7aCDm8P/+f//lN4XLT//cMfhCOOOMyO4nz9z74fJr08xTw/MNpcd9MtYeFiGU3+8f+EA2Uo YuPeuk3r8I//8pNw/LFHh88q/sqffPkL4cmnn5G3xcZw3mc+FQ45aFh4V54WvIr86utuDueKdvYn zzTN8DD60d/9kww9U82rZjNHnqQuU2ghA8S2LdvC1dfeGNboCNUPvvdn8hba18YkEDPGmROGH2Pe HYz5iLxY3tNxtos+d34YNHCAHSFrrc36Vh0ZS3/bHINjgx7HkQFJ47wmrxEMMl+Sx81Zp59quq1a tSb8+Cf/Hl5/Y0bYvGWzPI0WhM8Kt5EjTgj95YHzirywmD85hqYRJxwXhsjY0aLljtCl8+51nmkI bCVd8Ei65/4HbS6XXXqJjmitDRNemhi6y/jFcbQrZRAiyPEPvv9noW+f3iZ/k4wQv9Ibsk447hh5 bo0Ml1z4ufC8vF/mKwbQn3/762ZwWqFjUzMumylvoCmmO8fkMLB10jGsU08+sfS84sgV1+M4Xat3 Fi4MX5EOffr0kW4tzPDSt2+vcN6nPxlOOfkkC/h9r3R99dXXbX2A4bnnfEqGqjfkqbM4fOOrXw4D BxxgHmkc9XvplcmGQ7eue4YLdQ3uf+hReV0dFr7/Z9+WR9ZWw9mP4vFb4ujXtTfeHJbJ8+mnP/57 eYAdYPPFYPgvP/1PradjtH7O1jzf0VvCrpKHmryalPbQ0S8MUpddepH1+dH/+odwxJGHSe9PWXvr Nm3C9//H/wyjn3k2fPWyS8M7Wq/PPjdOxyx3D9/7ztfF08KMQhwV2yy9hg4dZHh36NBenkMTwte+ 9d3wmrycRo44Mdwg4xs4/fUP/9KOsx126EEy7D1pxlNiDXFU8aBhQ8J5550TDujfz46tPSCj1hvy YDr91JH2G/rZ5VebYfRv/uov1L6nzfGZMePCJHmOsQjLe4rdS2wKpmN5axFWljwvqjnLCGQEMgIZ gYxARiAjkBHICGQEPmQEdrGXTkdiz6LErpyPJ57YnUY59ThK+ZyfPPUiSvtX+V2e9622ex0+Ulr3 cmyJ307zMdO2XZbfj6HIB0GgIVZITgd1hWlK+QvWMnM+z2mgzId+Lp+y01JekY3PaZ5Xx3S65y5b 4Wd8CEQVSVylAHoUFTxfYjEheh8aXLrTZESoP47kDZ7Xy7FaKacYVKw7JIcdZim+1uSCGuZs9vGE aCPjjnasoWu3PSy+DMwE+CWuUHcZEzCmcKyre9duYcXKlWptoXxFeGXya+ZZMUgGAo4Nwc/xJ47h jNNrv88/95xAbB7iywyR98/JMqp43Jebx9+lWC+rzQtllLx/xBSWr1oZ+vTaO2yUgWiF3kI1eepr hhneFhwha614P1OnTTOjAcaZrTIEYQg4/vhjwi+vuDqMf+Gl8MmzzghtbMxt4fBDDg7DZQRhzK6K rbRSuk+WocOOnsnrplv3rvL6Ociw4R7gm/RX5EFCnJpVq1aHUQ88ZIalJcuWhX0U+HqdjmD179cv 9JeR6p5777fjYMcdc1Q4X0aTVlorAwcMMC+eX1x+lRndDjvk0NBDGG7fvs3G2aGB7KigLtY4eXK1 a9NWx7aON2MHWGEAI8YTx7lelcHqdB2p27dvH4vhBL4nnjA8XH71dTIoTQqnn3aKXTu8cdq1b6u4 QIr7JB0wzvTovpeOjL1nx+QwSh0k/F+VB9h/yEMGg+AndFyqq/jg58Pqaam4P221FvBUGjjwgPC/ /udfyZvsXfM444jcFnmIcZ3j8tph1wNPmZZaQ7wxjrXEEate++xt3koW20nrCjpGNIxwrLWtmrt5 Z5og4SGjIwaiKVNeCxzlwki0VUYb4jthxOLY37gJL4RzZfw5ccTwcMW118t76plwlAxCU7VG1qxZ r+t8THhRmCxZsVyGrG12HI14R2tlVOQYJDGFiGfVpmUb5a3DOZ86w+isBeb/9jsL7Sgf+hOLibSf 1lhrXZ/NWmcbNqzXep8aOurajNUb8lhTyOuuddVKnkgY8E6ScfAArY01MviNGzdBHkhvSsoOM5gh b8aMWWHWrFnhRz/8H8K+q2GJjO1ai+BjCUz4FNVIpI4PV/Ebpy1ehLI5FzICGYGMQEYgI5ARyAhk BDICGYHfBQK/+eFbexuY/Aney24YcqWgNzIEeTs5xoeUx9ucjox0x9DUrqDKl9ZdJjn93eDRHLlp Xys311CEcJTw5IozeNrmZXJXzPukufeHhlyfoNdTOem4tHtK6c7vcrzN6Z7Tl3Ilxa1aXYMq1Nlq s5WLyXPvrrqNVBvOjEo7HBbxiYVezlEnp7BimPxSDgX0IeMIVSxXV2OUU3yX1hAGU0/rrJVYqIdB xxP68R8bad9MazdrfVrqzVAc89q85b3QRcGDCeYsJttot5MnRidttFcrSDAbYPfeac2GuJDF5ni5 DANtFTB58IEDwr59+pqXymDJP/G44XaMbfacuTr+dZvpsHnrZjNuHHLwMG2ut4XdFTiZhLYYHDiG 1FHBm1fLsMMYPqgd9xEPHlIYcZYsW6EjR3fIwLQ1bJEh4tCDDzZDkb01jakV01+xYoUFjB4yeKB5 6GxXPCbi7eA9hHcShpC/+PNvhdvvvi9cf+Otdkzva5d9SZ43J4ZPf+pMHSl7144j/fTffxEOP+zg 8J1vfC3077+f9AKP2jVHX4wsHTt0ihjLYNKjx15muJj51izzvAFfT8wVowlBswnsbHMtG7mO2wwP +CQqtNhGfH5iIbUMX7zkQhkstoaxiq8zRcaVU0eeGNAZAyDJpq5+9OUir1ag7qfkUcaRrt12203G qt6htYxRtmzgc8OGdWadiKZPC05YqY14SmWyWx2yRSnHiOMwVisZkAh4jaeWrSdkqxmZBIrGcIbR DsPgwP33N0zxCvrmn15m8bWOOfowC569dNlSBa1uZYamwYphhDEHII496sjQS0Y+krQQHqzsqJ/x xNmjeNTR1BSn1i+8JIKjb9i4PhzUb6itBYK4k4bouCCBuVnTHOG7T8fuFuvYHl5hBPjmyJqbjxcu WSRcZFTrTlD1qIsVbAhNmDUoQoQOXQww0ZCAvtRjRilqZpT8lRHICGQEMgIZgYxARiAjkBHICPxO ECiewdO9dOVJXM/t8cE9PqKzUfDHdco8tsfNQ33Z+ziv130W1D152Xmhu0zK6RjUnf83bRloh9f5 076Uf2NqrqHIFfEBXbAP7EBV+bzu/J5Db6rNecidz8dJ+0DzXVaye7Xuzm+VQk5aljNLDf+4YSu4 6MkoymNWFeViaPetotO8Xhh6EjnOUZfH3bl5osRRamN53fbWqqQTjzIK4VQKOamRCDIb+9hU39to GIHKJH0ZSBt43jTWWZ5DK2TwYYOP1wob7TUykuB1gwECDxIUQsdSz0LD7vLmwTtln557h1NPOakc wY1JbfQGq2987TKjYzDoqwDKvImNt48tk8GHvoyHPgQgJnAxAZwt9pDGYCaoSiLDS2bvnj3MOCLT l4wAOxS4ORqc7PqAXTFVvKi2KFA2nih4QXlCN4whS5YqNpGOHRHw+Ul5tvzi8mvCr668Ohxz1OHy tFplR9ZO0VGlu0c9YLGC9pFh6a/+8rthi/rblS/06tGjh3mizJo9O+wj3aWSjCPR84i3qHVo1yEs 11wxZjBPPis11w0bNlnMIOZarCDD164N87WJGwKGxDZhhWHv+3/+zXDG6SPDzbfdFa5XvKIDDtg/ XPy5C+L0uLdhxFEND6D7H3ks/FxeUT/43nfsGBeeNA88+JjNXyDbGqBj1EtaCDvWiyXlyHF9ipr6 6rekNvQWjEr2pfltt5hOBMFeofnyBjyTq3F46xxvdQMfjC4YZM487VTFAvqJgnM/EV6bNiP8zQ// wobtJo83vIl489kpJ48ox+e+beul0Ml0s1UBAQQjtszfp4BuLTS+//p5ixwBrXlj2XHDjzYDlg2q L/RlbVx59Q0Wg+gf/vZHYcSJx8krbEm44prrkWSsHdurv/gWLFhkRiD5crmIOrw2y5DJ8UWPwxRR KqQgSoSanrFeTyjF5kJGICOQEcgIZAQyAhmBjEBGICPwgREoHr7pn+6l7eGbnULdU7lx8aVEg28l vM5jfXy0hxKTD9AU3fk8T/m8L23QXZl0XO+X5t7Pc9rScqN62r+uXNvR1JEbVlCyOgFndOW9Tg6t EZ22VA71XaUUnJTPJ+15tY26j1+V4XTrUza6Vp6nEhuUG7HVBKvUiCGRY7xamDU27+1bUDH7Lt2b yv6VXsZX0MSLEWKzXhOuna5i+my2Optq4trsUBtxg0jkePMQD4hXtXN0hpgzc+bM15GhV21ju0YG onHjXzQ+YhThyYJsPDO2afPL68ijKSKEg4cNs/gyBNHm7VMYe5YvXxGmKqDxHHkTde/eXXF4jrXP CB236qdjQNCOOPSQMH3mTMUKmm4bdPqNHf+Cjim1kufIUZiAFNfnPduQ8/p2jgRFG4heHy9DBJv8 E4Yfa0e4DlJQZ9JmvZ2NjT5xanjd+qEHHRQ6yCBFAOi58xaYbhyN4ujRYhmJnhw9xgJO4/1C3ByC Pa9SwG9k/PrKa8PLOrq2v952denFnzejxWq11aXiWg0/5ggzft09inHmy8i2RkewVmp+b4aee/UI h8kbadr06eENvcELYwReNc/pDXPt5Yl17NFH2HrASMf1wsC0WUfDMIpgZODoFh+f00//8+cW0Pvg YUMVt+k8uzZri9fK49FD0OmF8oThbV68tn3aa2+YoYU3lREEnGuybuOGsHW71oZwIjEOZYwzxFIC aMbjyNkO0cDSjOsyuGAcAruVmgPBxaG7IYk36GHkOVpvGJs1Z46Ok02z414Emn5O6wnjHEfLWska BcbHHnWEjnx1DdfccJNebd9Nx/32lzx5fckDDMPjQ48+HqYrLtAqebVxhPE1vRkOzyhb68ILgxVr BEz53TA/3tDHOOge6ayLuHaZG8GxDz/sUAu4PVpvTlu2bLmtCwJzE7eLt+1NefU1eRJ1VZyjA81D aq7emIeRjrhYHF8bpDercUSP4Nes31U6eslb2wgejuXMMBSuL7w4Mdx+571h6dJlMlbhq+hJpdrP 2Ym6ezUi1ppzKSOQEcgIZAQyAhmBjEBGICOQEfggCNSes+2ZvNxLQ689pReSITixykDdac5TdLOs EY2GKp16UzToPgZ9GyXncX1SHm+DRnuzktxFmp2qinvHKt3rnsPnZXL/OL2putMxZlFOk9e9zXnJ nQa/lz0v+S666KLhQ4YMOZQNan0CO9jrU6RiwPGhaS9qKSmSi85JAwJUTeVQjqkqp+hX8juf8kRO Ir3WoBKGnEXyehj9zFjFr5muV5H3CAfoaA9vgXrsiaft7WR9+/YWrZ8MFjPCUzKQELCXeEHEzdmv b98wRW/0mjlrtgUE5i1o9z/4aDjx+GPDpZdcZBvzcS+8KOPGBPMuwrOGuDhtFWunmzbUGBnGjh1n r6AnwDWven9Eb/CijRg50QCikMfCng8xenophhGBf3k7W1vFsJk8daoCCj8RzjjtFDOAbJLBA2PK +AkTFbennTxveoa9ZGBqKw8ljBMmS4YrjpMB0VoZZzBGPK/NeTsZYPr07iUj1lAZmDYq6PF4xa55 R148q8148ah066fYTRwxenr0s6Gn3lQ2Y9as8NKkl8PJik8z4sTjLQg2RoR27dpaHKEFemPZRZ8/ T8GN+9vYfm25QLxJjJhPvIp9rl777sYoYiSdNOJ402XixMlh/tvvhFYyhE2aPFmviH9Kgb7P0Cvb zzH9MV6NfvY5vWp9ozyE+oXe0p+jZaOfHiODx1Zdu/10LGtPBQ6/0a49tPGKH4Wx74tf+JwdrZsv YxgxgDiSRyyeuF53GM7r5KmFhxjBsGfMnCWDT8uwv47Rget01Uc/M0YGjRWhf799FbdpPzP0PKE3 oeH5tL/WCfqwasfommBUaSevMN601kt0DF5mSNKIbUTneNgUXU88rDiW+KrW1oMKgn2yYjh94cLP mkcR/LvLQDdLa26SgnV/46uX6e13g22tcdSLeEcTFKuK+EDr124Ir8rQ9uhjT8kTqbWtvSfkAcab zXrJQ2mPPfawtbFOx97GKO4Q16GzjvVxbA3voWfGPmdGmy7ynuM19wT+5tX2xELCg23e/AWBQNSv v/GGrv0J4a3Zc2XUm6G3nm2239VEBfSeI2NRF3ne7d+/n65Ff/VbZ+sCLDk+OFlGVmJxbZYxadAB +wuDXuGXv74q3KE39h0moyjxv/BCYt3EVBbK37gm7Y05zwhkBDICGYGMQEYgI5ARyAhkBD4UBHBx IGBF3NvHPXncZNvTd/EIzomHmTNnTrntttsmaFg3GsAYu9Ry16rKg6SU3/nIXYbTGvE21df70F5o 66QGhow4VpWv7NBUobmGIlfcByD3Tyo7ba8q7taXlO4yvJ/zOD2tMw71aht0p6XllDelG++FF154 XCNDUYxxgor1qd5AFNuiF42rCK2YGiOUqaiUWV1jcmkjvc4UJRJUaym+MHYaLUXRxjIGK2EowpuH N3kdOGiAeS9giMGzZ4m8GfDUwBOCV9dPmjQ5tFIg4n337a03csW3O/XWxh6jynLF9Jk9d576rZTn x5HhTy79gm3miTszZux4C+bcQx4y6xTkl40vm3ANrQDLeuV7dwXIVhBrPCvwVsJAcuLxw83TJmJZ w1g2AjNQYBjgWM9cvXkMI85JMtBcqhg8FstGR7+ek9GjV++9Q3cFd16/YZ29kQ0jUAliAQFxi5Zp ruNfeCEwFwwNeOYMk15HHHaI1ZctW2YGM46/nXrKyeFoHS9rLaMDXiBv6w1YSxYvM95LLv6c5tVR xq/NioW01OLUrJV3zvl6q9upCkjtyff0zAVjEsfX9pTBAs8o3hbWebdO9uY2DDEYM4iNtFiBpPFO WS2jFrK+cNFnFReng3n0jJUBpm27NhZDCI+vYbpWL7w4KbRVPCGMXu/JcDZMb+JC/4XvLDa9iGWE Ie+IQw/VUtwR9lRAZtbzJnnZYEDqrWN+I44/Tr+iFmGV8NwqTE6SIaSP6BwJxANnmLyxMJjAP2BA f/MWw0OLV9xvlHcOhpX1CiA9ROsK7zOOUZHWaE1gKByq2D4ESfd1jMyePffSW8OGhqU6fjZb88Ub 6Hi93e2yL15sAabhIXEz7tS5Y9hDsZN4kx5yaMNDCbm99tnHjDALFKAaY+Rxw4/SW8dODvNkXMSY c+DgAbbW2mkuxJxinHHySuvXr2/YrUsXjdU59OzR3QyceLJR7yCjI4HEhw4ebHPFWLhaHk+9NdYF 556jo5Y9Qn8ZEYkDhfGP68Mb8zrryB5GPt6ixrUcrOvDsU28ubjmGEQJ9I4xiR/sUBmp8EIiLtQp I0fYGjRjWu1nKwSKSkkrC4ZP/soIZAQyAhmBjEBGICOQEcgIZAR+WwS0G2X74Rs4E+fP3Z7HvcmM GTMwFL0gFnrETYvx1xmOImVnuvN77nzVOvSUhhIYnWrKwFGf4Kc97VfPUWt3Ppfn9Sp/Xd2Z64gN KlhDGinRiF6VSd2VwTDlk2IYb/M+XqcN2XxI5GmbG7ichzYvp31SWh3PqFGjvv+Zz3zmMjuOUgg3 xbQxrQvoq7Y6jakrlTGv1OibYqPryyeYAsbgaR3emLzFLZv1fN5qvKrYuN61Lq81Mo5sAeaFgdEI bxv38KDObwIDA3Q24U4jpoxvXnnlPJCvlycKbyXD+MHbpnxTTz+ONjEpPCNcPgS8U4g7g+cQx3zY TLdAD+uvMdVnJ4w1GjF0SOvWbTBPIQwFHH+yGDi6vMzJ4iMVY2IMYa6e1FyrM3/9h/EBOwSGIo4x tVDQYfS241XSz+PFeLwgxuMV9ng5EXDZ54wcjlwxn07yTuGtbPRxvBgYXBmLRLBkgm6b95RwbSv8 SNTRjLnSd71iDNFWzlW8CDJ8hZlYNU7Et8RcEoymQTGKbdqg41Y6jka8HfTEIIHsFiq3kiyuD9eY I1j8R5njgu1kiMJTx1GrG6cYm8DlbqyJ60TyknmzTpAf11Fs0zD2YyygkHy/tgRLX2dvr4tvzYse ZcZQfDEG2KEL47p2ce4aS2Nv0hE6jhDC62vbAllrLl7368LROAt+Llm2Tpm/QGV9wuP8BMsGd96K hxcU14OLSQws1gu/Fzyz8GaLSbMTbZt4DGvpTDyvjdKNa2D9C07WUFypLUxeG7UbpmoHo7p126Be iMlZRiAjkBHICGQEMgIZgYxARiAj8DtBgM2jnsx5ttfTOc/n7AfvvffeGy644IL/VBXDDUFneXzn Q50P5RiMtkZzuvN57nR1qZNBnVRtpx+JnA9qwUNK2yIlfjudWsqf8lBO+aptVm9uMGsXxGBeRkBa pk57mtK67/m83duQ4WVvc95qm/M5nbqXyUlep+z8Tve8hTacaVttItosNpV4/Xn06NECKtniQvI+ qRJOI3c6ZZcTqd4S5ViNr0K+t9IPIWXdeGByijcih82rWrSBZyOcJjbaZYJHjPFNTy5HrSpuxWCh AjFcEBYNHGVP64enS5noLuzQiE3wdhkrqLGxZoMuRQpWcRRzK/tSYEzJ4/eJYYlUGzPOEwPE9nRM 46p9oYKnFtvjtarJoEU0GYu2bo1vS2slb6QUD7DAyIUHEwnDAHMiwYfHDB9SKTcZVN3LFA1xEQMM BxErZ3A8W8jgET1y4ljqXoyHLhgp0oShZyvGLq5v0YBBBS8j/rM+ZoiKcrj+aAC4Nk86qYrhgtfZ 29vryntNIRDuRmOLlmIFNxijD/L5T2GOLMURjWzjQfS1gvEt1gtm06nsYevVl0pJFQ/yiQnEmmqP AU9M5dpW+zYWB4tHfGVS0daMK0YT8zddi/ELZsfajs2JVl5flcGYcVsLs5RedLXMro3GcQORr530 WqGbvSWwWCiuqecuz+p8+V3QG3KeEcgIZAQyAhmBjEBGICOQEcgI/PYI2AO3NgZsOGz/IEJBM1Ix An+YThJNcPFJ2WCx3hSUUj7q3uZ94gaKlhpvrMVvl+/9vK1ad7rn1faqHNfL+XeZ1818l5y1Rp9g jVKbfKqcKwLNP06jr/Om8pxGntLhJ3k7bd6e5tV+zp/S4d9RueiltJLRezKqjaCtarERTZvSMqzw Oq3oZuTaV01OjVbrYzQ6JnJSvrJcJ9wqRZOPHmWU/BSSJqMX49QadpaD0SDtVjdsKVwcRUPKS0/6 l6kQD2UnOd5fuY2Z9EskRFHwFEJ3kmP034wx/U2/Qo5nPrbpXSccI1Ocj7V5B+Op6VMqVrTHMeJo kVR0sEoiLyXT5hOMnSKh0Kfa5HoZayInsifcSX/rU8puMJx4vWfRLeGmKN1Tw0zB7H2MmY6JHOtV YGjtfNUJt4o17SRHVKz70DHK1KVinIrGBUvCWxMf25ImJ9i1Tdaej2PX0emJHCsmcuK10L2/aEia ou4uA8Hi8faqHOuf8roiOc8IZAQyAhmBjEBGICOQEcgIZAR+OwR4+C73MvYkbvL82dyFl3+YdkIt d1bPafFyNa/1iiUf0PnSvpRpb6otpTuvy/McuqeUPy17e5P5+zEUucI+QKqIlz1nQPio+yelUXbe NPeyjwEfibp/vJ7mlEnen9zL1lB8udydPIrKSyEONqSxt+f0dnEuIkp0aiHftDRanRxvpa/3aCzH W2WViJz1bOoPISVW63GsuKWOZfuGzYW7gklzLKZyI6VOjppr2CTySsE7CayNSZOLr5MjZVyvsuCM UV7Z7OLV7FOo08fa6es9Gsvx1g8TY9enHLokuNKe1+sEtYqx6e9Kel4KdjlN5C5eeQ0bCdlJjjNG OWWzi1Wz0erkJI2lwMZySnkfcB17/xQb16ccuiS4Xp7X6wQ1lRPXoTrXBik6OsHlNJG7+DpsEnml YGeMcnaSrmaj1cnxMem7Uw9vzHlGICOQEcgIZAQyAhmBjEBGICPwgRBIn9Ep1+pNPH072fN0VGh8 0od3rzc6H+CDpf1SeWk79FQudfpVEzzez9u8nvKnZedrMn8/hqKqEB/c6dW6T572altapwxvSqtO wuuNZKb9KHvdc5Es0dfnW9cWhRdDWFZrLv+oX5Li8apCZl1WJ8dGKjtFpWrn1ez4mRkx6yTUlC/X QKFxoZ3kqFTKUY1ybZhSmvEVNWtuKMfZU26nxTxticPGwdCnHDYpuJ6llKIt0otWy8pO2Gt8sKLw x4exKf6HwrhEjULGuICjLvut13Eh7Q+xjusmkisZgYxARiAjkBHICGQEMgIZgYzAh4JAU3tpF644 qTz+77RbLdq9jfZiJ1jywgK92JxRtZT2oZy2U3Y5HE+rtpsAfbk+Xne+lO5yU5rzNyt3RZrDXB3E B/e+1FMeyl53XufxuvcFCE/VNq97jkzKXvec/imdepro5+Mozm8r161QkmoklQ2ql8LLgnOJPaHh sVDXuybE6LbEEn6z7xj6IqZ0NE76ehkSn3o5GpW+LkdFTyZCXzSbeCNEGTvUyWj2RY/U36IkRh6a EzmFmKhWtBwVA1TkIKYQRRb78V0r0YN6OWJZcC41J7SPMsbFVMrsD4mxX02/Vhljuyy2qFhOfBwb yz/AOv5wMa4tcvSp/40XuucsI5ARyAhkBDICGYGMQEYgI5AR+BAQSJ69KTbYS/sgCithj+eq+/bB m8id5tuLlNcHcR7v5zxp/7TN+VOZTnM+l+3139Re5av29/a6/P0YihoJrCpVJ7xS8cl6Xmkuq1WZ XvccxrRcdiwKtHm761zNdygwr9MSW0Qk8W2l4suF1VktGKxoiAM28oKJtDo7JP2Qjmx1bIFbkclh 61k14Bhz5Oe76ONUy1M5BSGVY6LLDjAzdD01NhdtpZtTwqUm7+ESopwaPcpwqnI6WKcoJ/artVM3 WvHl8gsqjDEVDVFcxjiCUqAZQRGpHmM3vRVcJdAZ49p6jdjUvmvYFOsurs4m1/GHizGjN3WvcH1y nhHICGQEMgIZgYxARiAjkBHICHx4CGgvwHZAj+K2JzfB7KviHqGZ4xQS6jq5AHL/NFNcnRz6eP+4 YWhaivPBUd3a0Pa+U3MNRdXBGKgpZaE3xe8KomzKU1Xe252e8roMaN6e0ihX6d5e5mkw66pw6kYr vsxAYz1ZNpE7fkdxPlhKiy2Fl1EhJ9L4lpzCOFkeu4KG7J2FGL/1LeX4iJpoKqcIyFXKKY0+1rsm x6t1MCFcPS3jywaLnImcSPU26eyqOEn9ymKhD0JKWpRodaMVX6UctWSMU8R+O4wN7oxxXHW/o3X8 u8U4qp6/MwIZgYxARiAjkBHICGQEMgIZgQ8DgdoGtn4vjezaXpRaYTNgN+WdIKfJ2zyvtlG33VjR gJxd1dO2ootl1X7eBr/38dNT3uY57an+zu/tDfPmGooaKdaIxiDQ/dNw0IIID6mRHJ+MT6KRPO/v vC7L5aXttKV8MojUTDRROM3pcN4lIatdL1Cn4f0jXdeDkVxNE1f7cq1rlEqpvl+dHD9CQw9j+03C fL4+RFFP5dCU1HeS6CKShrKY9PMRPC95nOByGK7Aaice520yr+9Rh03ap54tbSnKMNQUqpOTzsnY fpOwmpwovKincmhI6jtJdBFJQ1lM+kX5te+Sx0kuh+Eyxo5KzB2bBLSy+AfGuF7RXMsIZAQyAhmB jEBGICOQEcgIZAQ+OAL+4O97+6Jen5l4mQzYEvDxTtB9m5C2pTwpL2WvezntD60qhzEaJedN26p9 XTY8adl1gJ6WqTdMzTUU0TkdiLor6gN5TpuntI+XyVNeD9RU7ZPy0FatOy2VBw8fp6Vlp9GPcpli J0jRl6UlIowj7QKpVqdPZGp0HMoa81dGICOQEcgIZAQyAhmBjEBGICOQEcgIZAQyAh8RBOI+vtju a98f6+z/zQAQzQCFroVzSdVe4TOhK5/Y0am1OnT/0OrlOGTs6zJcjre5tLRO/7QOD/WUVi3Th+R5 tWyNjb7ej6EoHTQdwAcl9zLtqdLQvT95yteUDind+6b9GKOavN3HoO6fKm9dnQ7eyRpKLwIXWUxA 1Rqf96oTlSsZgYxARiAjkBHICGQEMgIZgYxARiAjkBHICHzEEHDjgJ2wUIXoFOb6sWPnk1uFR1Fq l2A2GAFILoqymwigebvTyaFXk/evyk/5qv287mO4jLRPo7Lr16itIW1XSjXsUBAZKFXOeZ1G3SdB OaVX6y7L+Z2X3GmeexsyGiXvk/JDczp9vF7Xnw5lJxU8Tk5kUpeyMbYhxNu8ySk5zwhkBDICGYGM QEYgI5ARyAhkBDICGYGMQEbgo4dAuZenoM18esIs3dsXb0qHq+C0uTiLi/GcxpTPmIsvt0Kl7ZT9 A1tVLjRvJye5nFiL7ZQb9YXu/apl6rtMH9RQRL9GyjiNQVOlqkrAR7vzN6rTp8oDzVMqP5Xj7eQp 3fmhtUiDWacdrCxOZ6YeLYyxZO2REovyPEp5IzF/ZwQyAhmBjEBGICOQEcgIZAQyAhmBjEBGICPw 0UTATQXSrnzpTf3efvt2s8uY/UBcbPspe66ipUSQ1Wmvmgga2V3o53SXi4BUHmX/0Fbld14fz3m9 Th9Pzuv1XeY+0C6Z1FgdiDofH6yqUNpW7ctYTvMcGsn7OZ3cy8aQfPnYVZ6U38vkzp+I8KKH9vV6 zGOndLG4OOdTvVxUTst5RiAjkBHICGQEMgIZgYxARiAjkBHICGQEMgIfXQSKvX25n6/u9UvN0wbK 2BXSPC2XnRIeaC7D+zrN6S6jkc0i5aHs9Ua8LtfbPK/Sqe8yNddQ5AN47kJ9QpjavEwbfLuaAO1V WV73fi7HZaV02qrjQfOU8jpfHa2wDho/HkPW6BoUeRw47VabFB1jGOvmQuiq5TwjkBHICGQEMgIZ gYxARiAjkBHICGQEMgIZgT8MAnHDbzt9YhObsQhatAA00AnW2KlqEmjcaZfCmpDPGPXGh5rNw8em a1pORTnd87TtfZffr5UjVdwVSEGrKuA8VXoqx9uqNK83JR/Z3ua8Lisd1/m8jTxtr12NpqQlPaNx KBJs0B3eKWHKxYxARiAjkBHICGQEMgIZgYxARiAjkBHICGQEPoIIRPNBubf3cDKN9/bYDlKbgtsS EOIfp6Vzba6hIOVL5VD2T8qTjpGWXRfyanKa59X2nerNNRSlAlPlqwKrfF73HP50stX+aX1X48CH zEY8Kc3L5F62vkUEc8pFKpaJa5pyF6akSIJBH6voy3Lv5LJynhHICGQEMgIZgYxARiAjkBHICGQE MgIZgYzARwkBtu/s3m0bX+zz0c/qkUjVUhNxjdPNf6WHdYNWGyKKSr+rfag7LZXtZc9TGU2Vm7Lv uHzPm+pf0psSVDIUBQS6guRNDeD0lL8qyyN1O2/aXqXtSo63uV7IScupXOh1bTtf9B3F1SxUqOOG lsYqUl3tOyzoeMGfjpbLGYGMQEYgI5ARyAhkBDICGYGMQEYgI5ARyAh8pBBgm89Js7rtfqlh/d4+ DVdTsETDQK27iUvaqGPvgK/xEAVzJXPeVIG0XGEvZXs/b0/rrkMqh/a07v12yptrKKIjAl0oAzQa xBXzNq97P5dD7m2UPaU0L9OXclWG0xrRaUs/KQ9jtZBHEe1lcjNQNBeV5FgwTn0lPRCID1JD/kr3 XM0IZAQyAhmBjEBGICOQEcgIZAQyAhmBjEBG4COCQLK3N1ODNvjVvX3hXOKc5P5x+wK508ijmaB+ is4L1XlTGvRGcuBNU9onLTtPleb6uBxv97r3a5i/H0ORC/ABvO65K9JUPaVTdjlNKUq7t3m5UR/n cZnOk9ZTHsppHT4RYrda54SlILZoQSEeUUtarX/+yghkBDICGYGMQEYgI5ARyAhkBDICGYGMQEbg I46Abevj3t40bdrFKJ1IYRWIPZIGp1dzZ0lNBz6o08ir/ain9JSXctrmY5A7X1O0pvql/GX5/RiK XGFXwOsurFHd21Kl4CO5nEY6pPzO20h+lc/fvmYDJGN4nRw5svmY1SelW1PNz6gMbVXy7LBo6PV2 Rp9MyZQLGYGMQEYgI5ARyAhkBDICGYGMQEYgI5ARyAh8BBGQCcEsApgS+NSy6t6+OHpWJXsPpxdC TJK3kdNOm/NBIzXir9K8L/xedjlp3WnOR56mant1nJS3rtzISFPH0KDigzUaxNvolrZD97rzeO70 6lAp3ftD837wp2WvQ6vSaSM5fUeD84ZqlnjjiGx4GfG2PEuMnGpUkHOWEcgIZAQyAhmBjEBGICOQ EcgIZAQyAhmBjMAfAwLa4Pve3vMm1C5egNWUFcDpWAxSqwFll+xlHwG680JLy85D3oivSqPuKS07 jTylV/unfDuV34+hyAfxfCdhFQKT9omnfdKyd6nSvF/a7vJSXsrVuvdJ82pfHIrKfnEwviOp5jMk U5FzRSaTmRTTMXI5I5ARyAhkBDICGYGMQEYgI5ARyAhkBDICGYE/AgSKyDJNatqqVSusAdXtv9fJ afcPcrytWqZOqra7tcHbvN3pnjsdPqdRJtHGp0qnrZrgSWVV28v6+zEUlZ2SQlWZtE7Z66580rXJ YlXxtK/LSzun/JR93JTuNO+/Iz16Fol8xy5pR2jeyQctOQvGsl4wVPm932/Kq/2q9d/U39s/aL/Y /7fr7Tp82HlVq2q9ueNV+1Xrvx85H3TU5mr3wfiqWlXrzZVa7Vet/37kfNBRm6vdB+OralWtN1dq tV+1/vuR80FHba52H4yvqlW13lyp1X7V+u9HzgcdtbnafTC+qlbVenOlVvtV678fOR901OZql/ky AhmBjEBGICOQEfioImBPAbanr1kA0ieD5BRSSvYyOR39k9J9yk5rVPf+aZvzI9PLtKflmrKxJ23e Tl5tr9adN/Zu4vv9GIqqAyCyES0dKm1PFUrLVTnVNq+Tp/LScapl+FJ+7+d5SC76TkLLjgW3C0uH h8fjGfm7z0rhpTYxzlEaDYl+JsdlK3fazv1dkOSUSjmtyBM5kbJzbKVaj3KwGqksRUG10E3UC+Hl unNml+PtTiev0mK9So3Tka7WEFsdh1RapCG1UWscj94Z452Rd8Qyxr76fDX5ChPdSN7u9Liu0pqj W+X848FYmhfK134rfzz3CpTfeR3XXyG/uh/2vaJ6zU2XRksEgP9/j3GEoLbGav++OTZAV7tW8Rp+ 9DGOeubvjEBGICOQEcgIZAQ+TggUz256MKkdNqp/Pq689aypyfNo44838PBokz7epGXaU17qaXJe 5/E6PGnZ+/jY2HUow+N9U55Gfb29Yd5cQ5Er4EJcCa83lVeVhM+V9DavN5Kxq7ZGOjSipXJLeYUb mbW5Io4tD7lGM0sQ8bFd6Vg2gtGiOH9jmsvxhUbwa2g62+hdislLTkGiKS7H2oG3GrP3MyYEFU2e u6JpU1UOvM6v3FT2OuIoQ4w0HyLq7Hzebp0jrxVr86jKEZMln7tLcr6IsXS1AT8OGJcz/khhDN5/ lBijt0MaV1JSU4utv5SDsq9Tzbpo+n2s4zqMXbXw+71X1DbmhQIOQIli7bdaNv3RY1xc5GJl+D/r H/b9uBylPIdcrM29vFGoAABAAElEQVQSSOfIGBPTDzT8vs+lsZ8qvweHyWiR6iTPa2e9qxgjiVST U8L/Ia3jeNNwTWr3kjhu/s4IZAQyAhmBjEBG4OOHwG9+rtAzTXxo8UeaCILTqPHwQN0/TvMcugYq U8pXEpNC+jCSkK3oY1XpXkd2mtK6y6U9Laf8deXmGoqqE6JeHaBaTxVjUK/Dl8qr9oOXBD1t8/7W qC/qzuNtjWguw3np36LqURQFFL5BDdeDdaMrhUKxKDod3MrbC2kVOa6ITz/Wa2rRq8aDki7ZN82x 7huhyO1/Py96isV7maKq1fNDdTkhtGzRKrRs2UKf+qVQ23hGKfRxLeq0lKg4MjJjqW4OhTJksfg7 wrjAujZ2HLGmUSxBrfFIpw8J4zg3sHLpkVId1VvhTDHGk6tly3gt0p7wAVxz5NAv9v3DYtwynRg6 fRCMy7moYMnNAFQcxQQpXX+GZR2na7miivr+dusY2a30adGipbSQHpXfeHEBbBy/GlHb2hVkBuW1 qt4rknVcWxOt6KKEjJocSuWcpU/0BvRfqWMTcx8x9o7fSKQ1rTl3jepy6rlTOR8EY65CzXsR2XEu sRT14vt3jXEcjzkyFonvWHJsHJN0HRuroQd3ySFyKqfGFSVS1zotK16I/etHFWcCbFKMQm0c7++5 ia9o77OhrUVo1Sr+PpAdR20OxnHIOEpNS6jIMDm7WMexd+SsaVqTQynqojy5V9CP31n1Nw137F2T Rv+01lyM6+S4EgxsaSeCN+Q8I5ARyAhkBDICGYE/YgTSZ4amnit8enpmcnbPafIyDwvpY4jTy+4F rz9U0O4feNK+XnZe2hul6hjweF8vp/1SeWk55WlYbt2Q2phYVao6kNfJndfLaZ6WfST4oZOqeaRG md7mNOf3/p77GNTdDct3W/SBXiYqTqCjPTq7hFIdvwJxIxYVid/eu5QjcmwRhUIh3LkjSdsL6LYD qDE5j1psD2rN5WYUqst20Ymcmpi6zXLZqV4dI69ZszYsX7EirF+/IQw+cKA2EoIpkQOTqakccmyK mwzfIEEjkWMu9brNrfizLzL4kGj/0DE2ybWxGYMr9bvEmCF9TpT9WqU4OBYlLQUz6bxx08awcuUq fVaHfvvtG3bbrbOE2wwQXWJayjEqDaJ8ZDBGlR1h8+bNoW3btq7hb7WOEZLA1CTGwLB+w4awYsXK sGr16jB40MDQTjqkfVPowZH16znjUCaRN1rH27ZtDytWrgyLlyyz67Pfvn3FuD3aimwglxBlcPV8 zJr0qBHf3iX2Uq3W3YobN24KK1attHXRb999Q5cuuxWXOsrgxvbe5i1h9ep3w5KlS8PePXuEHnvt ZddATZZcJHnd7yESSp4osehjbY5NQYtZDRs6AHoiBxYj01R8msJ4u9bJlnSdJOsYOf5nlyhHmpfj UIgpkn47jJHkcurvFbTEOxxzMnzEiJpRGdpjgkTaSU4kJG1WNEaXk7BY/5qcEDZtei+0a9emkFz0 VdZcjJGdruOtW7bab2Op1kr3bl3D3nvvLWFxjru+H9fGjLNEF0PEvktsIENh4CJ5Mc5TY7nyJdOu Md64caN+c7ovrlod+hf3Re4x5bWKgm20pNgsjA0b00c96zr77Oqm4lPKeUYgI5ARyAhkBDICf+QI 8M8+Kf7z3/i5InKEsG3btnr22OBPDjxJ+NMNuSdvp+5lcj6kRryN5FR5qbs8yiTq6SNfKjstG3Px VZWRtpXl92MoKjsVBR/YJww5HdTboVfL3sdzeKqpUVtKQ6bXyb3uZXeRcR5vr45j9doDbNFc25mU on0S9lCtocnLYQvpqRxTpE5OlO1y0B5+jqiVciKLVeNmIhJaSE7kK+r0oFsxS0T4CuGvxW+//U5Y qQ2ze061NgNQi7Bt6zbTGq+PDh3ah2lvTA/PT3gpbNAm+8f/+HehY8fWgU2cgWa61UBmZIY0CoM7 spFi+mB0pXec+/ZYolMxV2tABKkOm8gU5cPucqAUAorM4CrGjuPYt4n0L5fj437YGPs4hRqxaoOK orxmfI4wGVwoLtzTa0VH/mI+bdr08OgTT4X5C94Of/Hn3w4HDxuqa7U1di4Gi3ONsj9yGDOPVi3C hBdfCVNemxY+/cmzwj579wzbZVz5YOsYMCO6zcJYGL740svhmWfHhoWLFod//Pv/FfaR4QTjDteD pZbKQbpRmrmOW7dqHZYtWx7uuu+BMOmVyeHE444Lf/qVS8M2GYrq17EJthUbR0jXcWzz5byrdcya eHXa6+GxJ0eHefMWhB9871vh4D2Gha3btklIxKalftNz33wrPPzoE2HqtGnhCxd9Lnzi9NPib9yE x/GYt823AKC2/qIcuFJsSmZrtp4myOSoamu7uo5Fby7GzG38hBft3nPu2Z8MPXrsJRy3SQeNYGNq jCK3gfmqu1dEKiykD/VeIXnR9FSvQKmPD2qIlZVaLcE4ttbkNBfjFsJn3rz54fGnng5HHn6YPofG +7hENRfj9Fpxr+D+//Y7C8N9DzwUXpnyajj3nE+F8z9zNg8/hqF9/Z4wjgOCSw0baFWMWSev6b74 2JPxvviD730nDB0y2NaK8yMhldNcjJu8HzfA2IbIXxmBjEBGICOQEcgIfKwQsGcln5EqPIdUnyto rngU1T1q0Fx86MrH29mWk5yelp2PvFFCRtrm9ZRGP5dD2ccld5MAdFLaLy3H1l18f1BDkStM7mWG aaRwo+Gdz3OXk8rwNu/v45CTPIePDyYTp6V5tU1sJR9lS2xmYSTZw/gOeQqUT+VqRGLB4Jt0Y1aD NfGl5HKMlW6pHIgFH7z2XF4KLuTQoJTKifLVuehvC1lfGIR44EWE6VSscI6SPfL4k+H16TPDoAEH qG17mDN3fti4YVMYMGD/0L5du7B46ZKwRX9hHnH88PDOwkVh9pw52jREwwRiLKF/USwzUwYvCgpW ieNLEdNHNO9TlgqCzwlZv1+MXfsPCWP9/NK52Hz0FaepbaYV+BImXDa/Vs6hzmxuSVYSdp06dTIP gudfeCl87U++FFroGqZy6Gp/SVdfu9bWO/YvBMUMvqLt94qxBmuhY4wvTXol3HnPfeGoww4NvXvt E3bgcSN9+BgixRqlUodNwVBbx/XXiim5DEopNsiF1qVLZ3nHrQzPvzQpbJY3RhwxZpEHviKZMs1f x2Dfuk3rsFvnzprjy6GP5mbr3eaR3isk32THcdJrFS2ptEdtfA0xr4iHy+F3vSN01pp4b+N7Mqq8 oDVxqdaEbnG2sS+wEU/79u1Dm9atwosvTgqnjjypWDeSWIDlGNsABe0DYYzIdB1rCnFuCC30j6Xa t+FQuVaigduLL04Mox5+NBx79JHybJFBEYMbKUJjEBWS7VrX3Uedr2Cow1gCbNiKHGNl7Or9mH81 XI51RDgpXX8awX53Jaxq1bzoZzIjNlYpaOhULHBKPgSCrQyNkq/jHdJLhwetztFGDMa33HaXKC3C 0UceHvFBpPVLvkx4TY5JF616r6Detm0bedm1CxMnvhyOlgEKQ4wZUgs96rBhCJMdx/owMWZNxrQL jIt5dercMeBZxx8z1nxlbaGzjFvMsVQwleP6Olb12Pjvwf+tcjlcT0uSy9A5ZQQyAhmBjEBGICPw MUZA/+xHJ4L4r74/j9lzlJ4EoPrjCs9LSXJyNYfFu7mhBp70sYKy88BPcjmxFtuLh2InGU8qi3Ja LxmboKdjpuW0X8Ny3cwbcjQmppNKyyl3U3R4XElyT7vid540d35kNJLj7fShnNbrjma5MjBaEicP oXHR1GhFqTZY8cSLYFfCB7ElVpWTakkf22mIKZHjY9TJEdHqRX/0Qr7zxB2LagWBttdefyOsWbMm HKG/Rh9x2GFhwYJ3wqTJU8KAA/qHI484LOzRZfcwcdLkcPzw4WHQwAFxBtoMtWwYEyJqxcM17a0s lk66w6roA3uhKz8uNj4W1yX9oaErYxUxM+xHWE4ododGu4a1TTIy8ISCLcrVMTlVWqCP+Cwl4xqP xoh0emnToG+TK1lsvCmDl82Nuo2nunLmaYMjwK+VBBhP0Zf+pDhs/LZxZegxeiHHNvlG4SvqYu3i Y+yDhg0JJxw3XC3qx4QLLnhN3wJ3bzMGsVkbuojgGLtODJOuY5fjfeIoJsl0QEe/VmhYtJi6jnHs m/aUugU2bPaP0tq66LPnh549dQSqMBLRByzpZf2FCflvWsfoEMeL/OjmSNPmvwDK27fvCMccdWQ4 +KBhWiMiqLW8pkk/WkhqlWxiQiE78oIXdOSRUl2pd+/WLXzyrNPCbp06m2zj0XUBGwx7ZXIBIkBF D4yyY8dP0BHPjYYx7M5mv6dCTlzHWqfC9OCDhobhw48ysXYkVCXaDTuVwXv//vuFU045KbSXd2Ci gQ3Mb8XXMX0sJeuYuutAGX77jRW4oLejwbVqZTrye4x4pbhZf8My6md4FMJjVnwrY25Hy0B04QXn h726d5cHY/z3EB1tDUuY/zZNb/qgSTrBKI5hTW/4GDN+ohy/V8DDTJhs3ToWlikApQEjuR/H30O8 D0T94pqx4Qt90Cu9b1IWREyUoW0Ij7Vja1LttvbEhMy333nHDKwsXOrgsW/fPuHCz54XDj1kmOHl elp/8cDHx+mMU8aaY57Mt5DvMnvts08447STQ0cZIGtYRh1NZ657sb6Ql8qO60LjMVeNa9eHdSCm KKEYUxWuFdfBdESe5uvJMcb7kHb6phjDh1TrI/l4Vh4//FgAVkNNDh19vshhrqUeKkd99btUmfZW 9Fdi3lFrqxZzLHq6gKIpZxmBjEBGICOQEcgIfEwRKJ4HfHa+l/F6E48E8WEiMqVl7+Y5bYjwj9NT sV5O5Xg/5/ccuvNV+3ndecmdN6VRhpdPU+3w1KXmehS5UAS7QtVB0jZ4/KnO+6YDe3ujtlSut3ue yoDPx0zbvb+3eT3tC3+Z6iolNQqvfxSuoFt72i5Bid196FotEWtFU1gPsbaZKOVABbZ4ZItNDSP6 g235V3ej6qvIeRiOm5I4VY6Oscnsuuee4bhjj9bxn22ha9c95EW0VEajQ0PfPr1Dxw4dwjodN2ur GBj8NZsHbfot0rGd1TIw4TnB0SFPPGyvW7c+LF22THFRNoduXfcMPbppk1fMPGJos7IuprN2BUuX LlNcjHcRr/gp3cPuu+9uGx/kERfJ5XVRTJ6ePXrEzYP0YI9FXIp169Yp9krP8O67KxWvZVXo23sf /WW8XVi2fLkZBzi2MkfHNOjQp1ev0EZ/Nd+suC1Lli4yfTt37mTzYKMdddyuGDNLLVYHuIERc9n0 3maLb9NJuOA5skR602dvGTw6duxkm7eIbgs7gkQcHObQVX2RgaGCa4VxZLn03LBho8WMYe7EkOnY sUPotc/etnHxa0p/5kRcoi1btoRFixeXGxpAtI2urg30d99do2vVzubSoV1702eL5glGyNlDuBKn hr++M59uikHChhwc2VAxebBetSpei+7aoO+5R3ItNujaLlkuHN7TfPbQcaDusa+6ctzpbXmdcS3a tG4d9tJ17LLbbnadmXVcf3J20VE5DBd7de9msXJYrxw9w8uH+dFv2eIlYa3k7N6li663xijuVTU5 VjLZyF0hbFasXGGyO2tN4n1ixyiZW/nzN/Y6bJkw812xYpUdseyleCwE8kU6ePlaJg5M+/bt7Fp1 0LUHM8SSLZKuXDs2vd327Cr9u1l/GJCxadOmsEDHeYj90lPrcHfFEOI35IkSawaZU199LVx13Y3h Rz/sHkKv3qYL44ER1xejLn27de1q8WOQ4bjyWyKW2Fuz59iY/IZ69uim9rgRts03avMjKxL6vfvu u/qdCDtdg+7dWaesCRhcs1qZNbJWv2+O17EG2muN7b13j9BBHkt0Yg6r1q4L7655N/Tcq0cgpha/ o94yPlg8LYniOhNnCzWIl7Sb1gi/B1J6H92qdXLA/v1tLbNWdkg/vBmXL39Xa22rGY+W6D60bv16 W9fcN6KMejnQmMl66b1Sv6PuXbtZf647hph99ulp+vucwWS1MFm+fKUdX9pzjz0Ma3ADe4MP5uJ+ zH1zlX5fxL5i7S4Xlvyu99DvhrVQLAZbC6zpGnZaT1qnYBd/gzvC2rXvCru1tk42KO4O2Pn9iuNg 3HeHHDjIdOBI8J76DZ5x2kjDaLuO5bGQbN36PVPrlnt0T10jfg/v6ZqBPzmxs5j/e1qf/tuzeFpm V9eVkCyuhyfWN/cz5+3UsaON26YN/zbsCNt0D1ql3+EGGTnBdNmKZTaXPr176bfVwdaHKVgAgp6O BwZSYmvx+wBn5LHmV69ea9eXf2PAlfH5dwl58K3S9SQ2Ef0XL1lsNDcF2fWSDI6Y8rto166t6Yt3 HbK5RqwHxm3buk2YJ+8s7ofcF0n2E7BvA6KmfwkJherdxbrmr4xARiAjkBHICGQEPiYIxOeB+FzA s4UeUjQzfxiolXm2SBpg4BMfcGtlOvhHxboEP22e0kFSuper/Klcb2uKlzG8zccj9zEpN2qHvlNq rqHIhTcSnCrsfE4jd1o6+K5ojOH9sZq4DKe7HOp8nMfp5NA9eb90zLq3njljOaqPrga2o2mqE0K7 /YmynicOL052cNWmQpjJoU0L09hMDpNl3cWNy1uzZoUFijXE5nzwgQO0+e5hD8JRRFQylcP6NqoK nzrrTAvmy+LmQd/0VLttOqRU//32C1+65EI7hkY/Hsgff+JpHUNbqDHfDm21SbjwcxfIsHSIDTdv /oLw6ONPhY3vbQpbZaDAWHTWGafKg6Q4FmFcpo091GMYeG7cBIvn0lkbxtXacGHEufjz54c+vXuH efPfDo889oRtKNrJALJBG6AhQw4MZ5420jYLryt20pNPPxsWL1oaThdt0uTJ4a235oYvfeFCMzqM ee55M3YdecShFqOllTD64V9+N7C54dgdMZr4q7d5VcnL5ROnnxpai2f8hIlh7HPjQwdthtZqk9F5 t07hIs0TGrE7umvjSqDXWRpr3fp1FhPjvHM+aRtF4nk8/8KLYfzzL4S2Mi7s2MYGens47dSR4dCD hwl7xcl5ZYrJWqoN9+Hy5lqyZInNlc3TBed+Woa7o3QNWFU7wsSXJ4cxGpebE8Gfp8kLLP71nYUR LCj06GfG6gjhDOneyoxF/fvtF84/9xy7Pk+Nfja8qKNebWXY4kjhW7PnmnEDI8+XL7k47LtfH23U d8iQoWsx4cUwSbwYzjAWYQy7WB4LfbWpJHbJo489JcPh+sAmHuPJ6aeeHIYfc5Q2nlvCY088IQ+1 6ToK1TksXb4sDBt8oDA73/Q2RVl3uvQvae7PjnlOa+S98L1vf8M21OMLvDBKghFHat5+e1HoJMPZ xRd+1gya4Kruxc9GJcnDSPbiyy+HceOEtQyDGzZuMCPEmaedEkaefKINW//jMglx/UvAM2PHaXO+ LsyVEREjwDmfPDOMPOlEkzt7zlytkadsrvRauGhJOOSgIeFzF3xG64cg3DvCc+MnhHH6dNKcMS5g BPrmn/6J9cfg9PY7i8K9ox4M02e+aUbLgTrieenFF9oGn80wCdl4Nkx7Y0a46bY7w+vC8JEnRoeu MvQMED/4PvLYkyYDwy1GQwxrF194fjhw4ECTgRD0f+GlieH1GTPDEhmviE10ykknhJEjTgiyEsiu wQUQexzWvEKmT39Tv59nLIbSJh05JX1a65hrt22H4pTRpbjnoOObb83WdR4tg02MYbZYxqtDDj44 fO78T9vvdpZiIT3+1DPadC+wtTFzxqww+dVp4ZKLLginjTxZv4uX7INxde3atdqkd7G++8hAFz3L CuWkx4s6+sS6xwD53W9/3Qwe457X70prFCMVXiTz5s+3dYIB+ZKLPysjymC7d6X3Y35TXN/Rz4wx bIbJ0MLdk98BRs0Thh9jvxXuCXijvK7r8PiTT5ucVoo5haHv2GOOVLyp4aEVOBoo8X4MxhP1exk7 7nkZYPVb1n2Qewq/504y0HDvwwjPb3fWTthpPWmtG3Zt2oU3dR9/osDujFNO1vWeFaa+9nr4vNYb RryHHn7c7tX3ymDUWgae/v33la4zw0xh/uVLL9LajF5Fc+bOk/6j7feJvosXL9WaPkH4n2TYPas1 v1n38b/90Q9DO+n/rDAe89wE3Ttahr/9mx+yBKL3n12KeD3wOJsy+dXwzJhxuidgXNosQ9Byra0T w5mnn2Lr/eXJr9k9DcMN94XxulYYSL/99a/I4+kgWzNx8ekOKE+h2cL/Ed1PCETNHyLWy3BzqOZw Gp5vutdP0++AezsGotPk4cQxxLn69+CbX73McH5J98Xnxum+qP/aygj0qrAy706bQbwvPvX0mPCG fg/c99fo98l98YLzPq3j1RvDw48/IfymhyMOPcx0e3rsc7rGx+jfjovjNbYfSyGsuOaWFST+DcZM ZPbC2rItWnOWEcgIZAQyAhmBjMDHA4H48My3PUPrmS59Pm5ijjwZ8EmevK1sYhrQnb8JcQ3J6dOH y4WxSvd6VRfoKc37Op16sxJGluYkVwTeVGHqaRv1NFV5vS3tk/I0Kqe8aRle53e659ApN+JBB4XY 0WqoJu+hvL4xio00vmPd/uZof86v5y7F7iQnttTkRFE1OUjW47E2QBO0MfzZLy4PP/vl5eG/f3FF uOqamyyWEJujmKIOpablWBgvdpj3Cn9FLaygcSDrGP+q26Fje3u7lnnaSCGMCYsWLQpd9Vf2vfTm pKfHjA933nWfyWLjd9W1N9pxtkEHHBCG6ZgUm7FfX3md/eW2plPUDGjZ9P3qymtsMz5MBiA2szff fpeCk75hG4err7sxPPXMs6GfDBXDhgw2Q8jV191gAVzpz4YVD4pRDz1iAVjxEuqov7TzF/PN0vUF bS7YqD/97HPauHWy+W3esjncI9oDDz4iY1SvcNDQIXalLr/i2jBNxhY8mK6+7qYwWxsujnrtIw+f FxQAmU3lehlJHtVGGUMQ+O+vzRrGs+tvujXce/+DhsNr2rD87FdXheV689XQAw8MB8p4x2aOa4Su /GUe7xIMAxirZr81RwaG3e1aPC88br7tdsMZQ8Nrb7wRfv6rK82zYNCgAdJnaOgtnW2zajuUYJvp G2+9Pey+W5cwTHPBiHX9zbeG52QkAyO8OohfM/qZ58wriU15Bxlg7r73QduIYXSCj7X0y19fZV5T QwYPNk+pW3UtpihYMpvla66/xQxxA2VsAjMMhb+6/Gq7tvPm6zpffV3YoiDoB8mYwoZtogxCFsRZ sm39KePGinFw8tTXpM9YXadNNjbXbdIrU8MTTz6j9btYf9WXIW6vrhak+e77HogLxr7jr4ILxjEd DAbX3XBrGCNjI2/jw3gwfcabwvBO24Cal1TSu/xNSqftMuARdwujGF5cxGS54ebbhNcm88p48JHH wu133mNtB8nzbr08V6698RbTj7WMh9eV19xgm+FhwwbbMTqMG9bfMJVnijwg8DTB6Mk6ufGWO+z4 EL8nUpxN9IHAmMgag4rRt5WMdBhiMcr+UjgvlvFnqH4j++/fz4w1bLILNDStCC4xrAb076ejo/uH 6Yo9xtohBpmNxK1AHzLSQuH866uukWFjYRgsgxOyJ0+dGq694SbTmQ24yW9R/DFElQcefizcodhS vRR7Cazf1W/+uhtuNlmso60yaMxf8E544KHHwj33PWgeJeC7VevijZlvhsuvutbW0lAZotCRANus Q9azLRPpxVrE0MM6eVlr4hn9dnlDHnQMki+9/IoMKk+bdw0eb9y/Hn7syTDq/kfMAGGTsy+fqe5b Gh/Pr8fEh6GX43H79u1tMq7U/eQdeZ1wTd/R8a6fX35lmPLqq3bUFky4hj8TjhM1bnkPMxzjPZI1 jzGMuSyWHLxpesoDhnsE123B2wus3/0PPhqxk7cj2K2W9991N9wSFsqQwzrlXoaBDezuHvVQWCNs wY572RbdszCCYvhpI+NVG62NbTLuzhf/IzJ48IYyW5MytF9+1fUyXE2wdXLgwAPCOP3277n/ITO4 4UGEMfd50fCEAncMgFNenRomvDCxvA4lcnZR5C2ktXvTbXeEJ0Y/bbjwG5+reHY33HKb6clRNIzH 0998M9z/4MPh/ocetWvYtm3r8tr5deH+t1pG6Cuulp7jx0vP/cJQ3W/Q5XLdQ55+dhyLwOS9Oeut MEr36QeEHcYyvCTJMSL94tdX6b64LBzIfVH3Izyvomda/FVg1Lrp1jvlbdYlHKR/O7inXK/f9zhh w/patfJdGb5Hh7vvG6XYfHPDnuJjfcW1iIwSBZVVVzVKjnT795hJpWzUc8oIZAQyAhmBjEBG4GOE gP+LH58CyucB29vvcprpw4Q/LXhOx0KgPUlQ9vquhDbqD39K31V/b3N+z51O7np4nrY1LDfXoyjt zMAM4HmjNmgpT5W3UZtPKFW+Wk7r8DeS6/qkvJTTOg+NPl7Bz+ap8LxBsLjhsE5UqBtnMSQN2gDW pklj2lZw009F2D0VLbFqcrxFfDxs6y+kbDT4K3vcEO8Is2bPtqNbf/rVL9eYTWqUFomU40huIGJW 5VQLJeCCxobCNkjyOsLb55NnnWGxMXgDGkaRl6dMMUPTy5OnBjbXf3LpJQFjAmMMOKBfuPr6m/XX 8tnxeJu55Wk02bH4S/Ktd9xl3kJflNcSr3tnY/SujvFgzJgy9dVwnzYdX/3SF8IF8ljgjVIHaUOO cenm2+4KJ59wfBisDecRhx6izdJoey3yhfJgYcPSpXNnC+B76x13661u74bj5DVwlLyKOEqEJ8wt t9+pOfQ1wwteOGzmb9Imfpw8AzgO8/qMGRbI9RAZCPCW2k0BkDkWcdqpp2iDco0MV/uGCz5ztnn4 HHfsMeGHP/pbbTgeNM+Ee6XznDlzwl//1fftCB8bXDZjP/zR34WHHnsifF8bZDycxox/3uZ4uv5a zsYRYwkeG1OmTjMDSEsZC+64894wX3+V/yt5QWF44zpgTLjl9rvtmmPAAQuO1Rxx+MHm2cKRkKuu uVF/MX8yfEoeMqfKk+OOe0bZsuMNRhxXwTiAIek1GYHiBlyY3HGPbey/dMnnQv/+/bXB2k3H41bK ULKP/lr/hjaAD8l77HwFPidW1Q7bMP5cm7WZb87SBmuz5jzf3qZ1zJFHmAFuhgwDGA9i0mpiQSkR dPeAA/qbkQYSe9ETjz9Wm/3H7QjU2Z84M/Tt29vmNEleA6wD3nYVUyHEKlqbWp/79++nuENHaJ4j 7DjJ40+NNi8s32hH77i44mu9ienUwrwXDh42TAauLWGuvJjGj3/B8O3cqaMdUWKtf0JeIXgrvSWD Hl4pHAHDyMFxs+nyVhhx4nHygjooHKYPx5TwhmA9bd++1Y7JnPfps3VdOmozfGB4dux483D41CfO KGZApm2rNv2D5emCoQ8j6emnjgz7Kf5MawxFuv5HaL3gJXXiCceFhapfp98UHmTggleLgau1QdDn EeLBuICXzd/+07+aMfCwQw+264xbIniTRj87Rh4i48P/873vBDwtuKf01mb7Uf2WvvX1r4aBmuNW 4QJyrBE83Lp37xo+dWbEBK+qGbr2z2pDTtB7DFjENjvm6CPMaIoR9ouXfF5yW4bOMkxeoTWJdwce Yhwf6t1rb/v93P/Qw+ErX77EArXb8VaNw3jHHn1UeEjGFzyoSOh30onDZYR4JKxbuz58+uxPmBGP Y0V4Uk3WW/Tw3iuT34+1Rvr32zccf9yx4TYZ/g4//BB58XxGRuc2dtzwH/75pzLwLAkDdMztCXnf jdE1+r//+6/DZ875pN3/esuI+M3v/sB+Q/Rtq3ljaOC+vmNHy3DUkYeFAaP72zr9xFmnmRcYno94 f/1chqJnx07Q+P1lWBd2rCe9cQ5Dz4yZM2XQEXYyYO0v/FlTxM+6V0adPjImffHiz5unDkZdEsdG e+h47Xmf+ZT9rjAardDR2lEPPBJ/ROIBh8eeeso8sMDnPd3r+O121D2BxO/sAeHH0T8SHnkjTxqh wPL3mxef/UoMwmKRFGXiIe3Xp284YP/9A55JeIriXYkHFEafbjpWy32SAO7gd+DAAXpj2ifNaMr9 xt7MyIASy73wRfE9+Ojj4bvf+rreqnaO3deGDB4kD6Hn9W/CnYrDdrQZ6fltjn56rGHD/RbjP/fi f/vPX4R3dA/7f3/wXfPm5L7IOrjtzrtt7XBs75bbdV+UYf9w/fvA769jpw76A8ANdl88U79p7hfX ycDfufNu4bxzz7Hf7nYdabSkNRMTOPi/31CgF9hQVaLm3EbIXxmBjEBGICOQEcgIfCwQ8H/j47/z 6b/2Oz8P2F65/pHAmdLccYHmdGiU0+QPINBcjWrZ+xd/0U27v68yctiw+QOP6+Lyvd6k0OYaipgI ySfkgn2yaXvK5/zebkKKryqNepUGq4/lkyq6l7wp3XnTfs6f8mmP4xvdWjN2RYJZbdfGBWPiTspA 8BGAXHzaUYgU+fUkG4U5T8FfUH2gGopQTCt9IUf98dggXgUxTYg9wSaKhBGEzcKXv3hJjCskw4xt aqzVvyJvsY9KZMdi1B1tY3I1UQijChs84rXw8N1jr276i/lC+0vuZP2lHiMNRwjw4GGaW7dss00D 9FqKf8UmrsckHWc4WRvbfeUxxF/UBw8aGL77nW+aF88vL78qbNn8XhiuoxtszvAwwGjBpvde/cV9 vv76zyagnf7KzMbrpBEnmAGLYzk+Z3Aixs3IEcfbZok4Rniy4E0xSH9t58jTNnkEbJJnCx5LYNtF Gwfe9vOqNuy/vOIae+PbyScer2Myu8ugsNU2IhyTIwYMOtPvaG0Wb5WhZfacedowviZDRx95Ew2y djby6Ensi5cmvmJjdezQMbRv21ZeO61Dr733Md06dWoRevXcO0wWJnjicAxvwosTwyHaLGEkwqjH esTwwbXhr/jEduJYE8aSl4U/Xiu0DRp0gMU7og9GD46qtNM1I1YT3iy9dA13330PWy9cl9Wr18h7 Y4qOOR0d9tNxQwwQA7XZ42gY8UHwnNmotcUG8ekxY22hsBkbouvFX+H3k2FnqDZ6HEtiU8mm/CRh ho5+LRiHxKaV60nynwJrqY027u3atdE17mmbbOI17dV9L20I3wnbdY04PlIaM9UXuR1klLnkos/a a8IfeuRx83BhXWF4wfNALGWyn5DXVGFs1hNjY5jopXli8LJ+QpFNPx5g4/UmJbxKONKD0YM1QGID fITWySu6Xr+WV9yJejMgR72YHwZJDCtd5KWAhxd69+vX1zyENsnDq0xcLOmCbhwrxBCLYhgZeJsZ 66u3jAaX6fe8UAaqUTIirFb8Hzxk8EqT2DIhqhWTUkLWcTpGs1e37vZ6eQwwkVX3ILGgD0HquXfg +faMrikeWhzhwWCLB0vUKsrjNobss886U8boOWacBpN58wpMpAuJ46F49GGAOOH442xdMhbGzUmv 6EijjujN0ZE+fieMTUyoNevWmtdJR10Hkk+J698OPErNg10rjj4xDr9l4vu0b9/BAohjGKwZFE2U fTE+eGBAJfXQmuK3S9pPxuJ4TaMnycsyTII9xk4Sv59BWuP8FiZPmWpeZBiOOA4HkOAKP/L5bfaQ lyU6t2u7R/jEmaeb18wb06ebrLM/cVaB3QQ71jlv3gKtMtYTxrgadng7YezjN834rE1ij3Efaa0x 8Boj8Ttur7HjBY3X6SV5tGEsG3HccDMmcYz2CzI4EbeMMh8MTJE7Isu9vJWOnVkq/0HzX228Gni2 ff6z54Y58+fb0eJ316xRbK+VujI6ssrvQToSN4jfNfeZkSefYJ6P6J/ej+1S6nq8onuNbhR2pA+d uLdjPOQo3lOjx1hcIV5x3659Gx3fbWvHQfuoHY054ve8jgYffuhBZiRijHhfjM83lJctWyZD3CwZ mLgvTjWPKGYyaOCAuD7Fwx8lkMeYGOqRw1qxXC1gFFFwtERw5BBWkH290ppTRiAjkBHICGQEMgIf HwT8n/ud/60vnhL0/OOORTw/VFJkikQX4TTPfQi4nMfLKY/TyJ3utLSelmkn+RipfOdL25xGHy+n faA3TM01FDXsLKIr4e1er+a0o9iukivsfNRTOW7Zod0nCS3lp57K8bLIJZ2yPTRaofiKhyIkKlkY ZbuPEJ9XjSw228yZkQhKwVPKgZaMTnNZTeTARkNpbFIbD/htFdtivWKL2KO/tW/XpqWdNj/i1UOv /i/HNBnJl+8JnIex0TdqEBU1fUqFaOLITs0QYwOJiU0xG8cO2rRhMOiq4yAMfqA2WSfJSDPwgP7i 0eaq1Kel/XV4ozwvCIjLX5m3aPPFZqOvNkJsjvgLMV4LbBjTRPBbgtkSjJTEwzwbU2JskNgs0t+S dGBDxYbMNxTEqgCb/fv1NyMWZRJeIXgTYTj42le+HB7Ua7kxfhH74qzTT5Hx7WKbv02iuBkgE/ld dOwLMXhJERyWtzRFw4YEi6eNNpIEu96g40sYpkgRRRk0pC86oDPXjTXim8N16zaEPbvubpu+7YoZ ExOrB9NvC8VH2mCbejZZ/BXf58Jf5wkkjX543cCvS2RGnJbb2eCCS4GR2jiOR9yODtqUsdECX455 IJc63mvtZUQYrGMebNDpz1Ev4rYMGrC/BeX97ne+YbF0RstIyDGySz5/gTbLp0WVi29GpK9ppIrF xNI8MOygI98YajCUcU3NU05G0JrZsiZOaMl4tdHiHXGMD6MDR8iIe+M4IJMUx7UrFwnFdx32jCdG 5OIB8Yo85J4Z85x5cmD469ptDxTWB2nBApR/42uXhYflRcdmFAMhnkLEILL1B96ATmLOKoJl1Mao LIK6KiAgnWvGR4LC8mUrzNuKQMF9+vQywxO/fRNYiPEMcSQMGHg2tdf19OM49g9ZoQ7rIsYI6mzH fjp0kDwljvGcdfqpYe8evIo+MvONYZzrgrHn2bHPm5GMtbGngmrTliaqzLONDBIkrsUG/SZ4kxtB qTEA2CylEOOZwUP3DeZuKcJr/ZBVVK0POsVry4Z+m61vumHs8QT2xuMdXa4wITH3WpLRHX79Bx1P MIwvGCdMhvpyb9pdvyW8c/jYIuGnqLbauoyDoFNcyztkjNrNYnxxHTH4cRRzzNhxwmxPBdvvFfbs FoMms948wQt2GNFIrE+88tDF54Setr5gEB726yhErFm7zrBoJ2MdawBZGHrpWzfv2pBIsbkYybGS VOo+PwyozynmGr8J7pEcPdxzzy7WL1EfSOyPGK1b8sgQ562CpYgyb2vDcLjejJIY2cqk64AXHEYj ftckLhmGs9YyOCMc+fw7s0GeQhhqmR/YeuKnafdFyeee1qdPH90XBxoW8OC1x3URQXrwMggZVWUE I7kcw0G62PzF1zCpMbarlaXXBFvDvpmYEcgIZAQyAhmBjMAfDQLlo4A9IBRqq8wexo1EUHkmSRJP Bv5JyCWt+uTgdXu8qPR1mufIc37PfQyvp7yU09SojX5VvrTPLssfxFDkSpB7mUGqijRVh54iTp1U nURa93E8h99l+DjO77nL9D4pv48JjyV/cK41uFjnkILFxsMF1lpqJZeTUpiayyVno8wGxlJFGEaD feSJcorc5x+QQYPgohgZeuov2qeeMkIGFr2Jho2ezZIvNkfKSzmxYNJVJGezZYFrxRQ3IoU+sNIe MxWKDkaLD9R4jnTXG384CtVTGwm8KzyxSeHh3zaeJkRyRcMoxNubeBsZhggMG9D5MD4bEt4yxluC SIar2hYvWWKeBN30hjaj27e+ig28V11fm4uwiXMKFtOEyeCZQODiNLFZWL5ihWH/bR2/IZ7JTbfc rhhEtylY9in2BjDjL4RzU2BuBMvFc6SvNvJ4KyxbsdKOXdgr0jX2OnlN8IYeXsuO9wEJ5BBjevll 1rz9v/bavBPkdf78t01WW/Ou4EYEBytjh8XfwFi4ddsWvR76mFI28tEL2SZfA9lY1pNWJbX5r4M3 KPFmtjnycohBmdkEci3IdORIhj/iAWEASzGjDaPOHHmIsPn9cwUd5rjYz+UNRnyQkSePCB3l9cGm jOSXiLXNootzV4GbKxiIgTbT1XJK4sOCQ7t9qaz/wf4NxSP61ZXXhTMUPPdsHbPrq43hvAULwosv TarNvehlQhGhFBGMY6V09MNrbrmO5vzy8mtldOqsYMLn6YjjIB0TGh+u2X6zwYYMguxyTb71ja+a QfE6rZHrbrxNR8ROlbERTw8MmHCiddTZphBJ9l3AkKpgeAO8X7tHnxwdbpO32vf+7JsWJJi3zd16 2936RScGg0Kw4SrJeAfxxj/edsf1MjVQwdSIr0znLXyvTpse+svTaYiOxXnCoIDHTGpYwJizcOni 8CvF8dpDx+sIUo6hEM/B6268xa6Z9/ecsUiskY4yBPF2KYy7BF0mrpAnPFJqBqCCanoiIH5snVCT UGlvy4A5MiHjKAYja4SxSVWjVDEMilFsXcGPFLDjN4yHmB1/lUGU3xpemot0tG53zbtzF70y3u+r 1YFUJwaQXTfJ5DdBbCWOtPFWuV9ecbV5FTp2HGO8fvutNrbrgw78rm1SEKNy1sw8o5FI4zB3pR3F AmPepL3lMcixQ4KUczy2heJLgX+a0A85ZpQq5AAK4/I7M4xKuQjWkWYduyTeEkc8MYbidcYbwzh6 ZoAWwJpWVlYv/7EXg/MbYBSuG2/K26iYSyt0nyRFnYgjtdQ8ffbY3Y1okmNz05f+B3veWsY9lID3 /HtjQcglA+wlXv9jpNvdPLt4Sx7Bys1Tz0aK90UbswC5Hh2U0RvyZNCH3knGfRMaOxRFFLKrZLzG SHtOGYGMQEYgI5ARyAh8/BDgn317ZiieGOJjwE7zTJ+b6zvUsXrvau5M/lhio4pI3Wnk0ItNvdGr clJeLzuPulqC7m0FqXgo8lpsT3WotTQoxafSBg0NSK5MqkBa9kG9a1P1qhx0qPKmcpFHvcrTFN37 +jjk/qGPlfUAS15JPO56ihsVr5FvL4K/1ngaK5X2gSOVxKAux/jiPtuUos7DP14FX/7iRdq0nRdO HnGcNssjw5/KE+b0U0bCIh2lgWnv60nEQk6Eytjil1j5a/rmrZvNYwjvEv8LKwwYHXhTDhv+TToO Fmlb7dgEPwz+4sxxDeJA3Ko4EbxNhlcZEyyYIK8c28GY5PrQh9eujzhhuAVAJWAxb25jY4sXzxvT ZypGydEWF4g3EHHEiiM/U6e+agFuj9VbwYingo4ch2IDwaYs1XmzdGbDy0aUzRNj4hUxcOAB5n3z mN5oxduK2PBgjCI+xgsyMGCYueaGm80YxduCDjlkmL2iuZStJbFZx60Ies0bs57Um3Um6wgg+GOo GKEjV7x6G+8BsMLr5wkdp2DDearexMWbxNCJ4z2Gp3TDqABt8+at9rYpAtdiRMPLiTcfPfjIoxaM l80RRypIvOIe486xignzwguT7EgIxoEViiv08uQp4cnRz9pmkNhHeDGZfGFC4nriNbNNRwPBjdfQ n6SYT7NmvRXuUrBixlmh60d8IN4CdazevEWMlNvvulfGhdft2hKr57EnnrJjX+Oen2ABc/FeOOO0 kfY6dIxj8chT8ktQMc4zGg43a+60QuODtxrGQdY3x+g4loNXBZ4c5YaRCWgdYyhaqMDqi7TGiGll Rse5cwNBdlloGLYqN21bf4zznrDH02bjRslFp2Kd2DpSG4aCWW+9pTXaxY7QYBR6/fUZpit4IZd4 UtfLMMRxKgxiByt+1nq9AW+LNqccx9NUbA6Mx+/N5qrfj8/VplHcXRwhAphzXTE8cpQKDzWuCRvX fvv1tSNXrIfV767WWo4GWOSwfsCaN8nR7y0d77r73gfM+EpMGYwC72kdoDdrkrWMMXerfu/Eu+KN XPxeue4Ynomb438ZQUXKxGR6c/Zsrbk99NvbxwxR/M5pd6z5fdnvUeNtkvGauXItMZyN0HjzFQD9 1rvutt864xHj6EEFyCaWTDw+WyChbIuMn+hnMlknksNvmrWL585mzSOuk7iWmRv3oQJSULHEuqGN 66YOJQ7Gz7qCRi7ukSeeIA+nlgpY/5S9CRGvlLHjJ4S5MvpwL9hTxzXp5/fRdCzut9wPOJIJ/hxF xcONI5gcI31rlrCTkY+jhLzt0IKMa1DWIjJtnWueKMK1iusmzoF/hjDkL9WxK95itmbtGrunbeG3 Db/mjQyOfPLmvTvuvlfeX1PsmvK2Qt7MB24kfsd4Hr3w4kthie5TxBIjZpGWj/3BwfFA3hZhxjHH JQqWvUBro0fPvcxYPE/3SILwo5ddB8lF3/e4NtInroeap48NrC81WR/e5LfnHntabDkM8/zWX355 inlvHj/8WDMk8ZvkemtitqZYs+iEVxqx44jl9qCOmxKk3O6Lb75p155g8hi2jz7ySAUUn6g3CD5p a3WFjlhyvJY3qWHcjpjF35BhI+WYD0dsiW13y2132pFJP9bt1zzOwmeU84xARiAjkBHICGQEPr4I 8HCg2fmLXZionpdI6TNgpJRkHneqydnTNspep52y89E/bafuPF4m99RIDvzex8vOTz1N3t9p3q9K 9/a6PPrB15EaVlIlUgXSMh19cKd77kLTemqkcjo5H2/zctrubciknPKkZdqpp33L8oUXXnjckCFD DuUBtcZSlIDOOJ1ddSMldXYpevjcZSrl1HOlhiMTU6pYrCptcPjL/BC9WYu3Mp2gTQIP4MReiPqm 8grjFhuOhMzQ/BWbY16jHnjYvEHWy0jBw3FP/UW9u45HwD9GRpSnnx2rjce72iztbh4WxMN46qln w1ptjvEGIogtf9XFo2SONusEN35l6lQFAZ6tOB86stSjhxl0bHgJJa4QHipsSjFs8LYkggOz+eRY AcGn8WTAWMFGhvYnnn7GNstfu+xSi+ExVW8b4u1P78hgQGwYDB6MQxBe/mKP3vzVGe+lHhoLrwaC w/KXYrxReNX82wsWhimvvRZeVbm7vCxov/HWOzSXFjIGzLEjRRhsOEbFW9/w7sBoxSaGuCUE195f cX2+pKNpBLzmaBYGG2IcrVEsD3Qcp2MbJxx/jOJ8nGexUia8OEmxOJ41TwM2dhyJmCb+R598yt7G A57E0+ghLy28A6bIEEVQY2LmzNOGjTdhdencJQyQ0Wv//vtZEHMMbAtlNCEYMseguIasDd4Qxauq 2ZBypIi3puEJ8JxobJi6d+tmQYjRfdGSpXa8xK7F9Bl6C9x0++v8UUccbpdtkjZzc7QJxhiDt9VM GTGIKzVbBponJdOul+ZLDBpi/Bx1xGG2+bLO+sLLgBhaGLFWrV5lx8T67dvH3gT29LNjbAOL8WvQ gAPsNeqjZYTbsH6THXMh4DJxjOyOpTWL0wOb01eEDQYjDA8LFbcL4+QiBSfeQ0YeggR3wLtHvxUS +vE6czBZIuMj64Eg06w7XkGPJxHY8zY7cH5r9jyLCQSuGP+YO+ts3759zChwiwLvEjtmpjapU199 Q4GND5fXxeH2Njve2IWBZd8+/x977x31V3HkfbaQhISQECiQJEBCZBACk3POORps8ODssT1539l9 9+z+u+fsOe/MHk+wBwcyJpuccwaRMwJEzkFCEkiA0n4/VV339r3P7xESBgbwben5dXd1VXV1dbjd dbv7jk8rrzJSl4FfY7rFUMhuuXXWXqvuD1k28rjr3vvM2IPxkt0XyPOQ+sB7787UZ9fftkX7dOmX C5Oj7qbLEMvXwUbo2OSrr72he64etS9C8an7PWXE4gt+18gwigGWozZjx462T4zPnfuR9PGg9S0u 6+ZoEYbSzdXeV5YhF6MBjgU0Iejp2xiqyId2jhGYe3PWGjdORtcZZvhhlyB3LNHvuAcKIwdlRueM D9wRNk397yH1Hwy1tK8h2iUSwyVGPO6GulF9eJZ2G2KgGS+d8xVDvmY1W0eLrOzarXOnLiC/UfeO cc/Yyho3Jmq3C1+M84ai8U31Q9moXwxTGNjXV/uao3uTuHz/ORlwuB9p/PhxaeONN8z9+jF9Tn1O ekZj1w033WJ1ddKJx9uOI8bWcjymTTHOPKw6orzc4XS36pCdj8dqNxoGOYxIXJCPwYmvnb0m3WH8 fl564u4kdiJiyOCrctxdtKLGINfd6q5/6Y8xAKMOhqg31Q44vnWHvuD1vNrkCkOdB/eu8eW5x554 wnYBTX/+RTPsYujcUn1x8KBBZnRhxx199LXXX9MOypnGF32w04d8+Rojl2Czu26M7rlac41VzYjz qu6FY8chxtnXJQOX4nPUE51zUfn1N9xksvGFyZUFZ4dW29GmRgvOQxmdYYDEMHq99MxY+MOTTpA+ xtnYeo2MPPRljgOP1H1fPC/YxcfxY/rsw49oXFQZMMy9/PIr6v8uD3qYOHGCGUDBob09rt1zDz+m L97pGTVO96DxZbbHNebT7oZqRyWXr3N5/JzZH6R/+dV/6O6359K+++xhzxQMrfSB0tEfmpAytQt3 Gug00Gmg00CngU4DX38NxJM+fE0vFaxjXkLmgtOmTXv0vPPOuzuXmWlC/AEiXLpIgxVGhkgPv40b cdKhaeO1RQr8/vzgE3R/Fs/PYigqBQshAkY8YGWY9DLeDpfpS0tfGoza/CJeGpLK8IDjjjtu+9pQ lLO3A4kiDWrApQMergwDC9qq+MD8L2oMNHMFbRGMVGMFzfDhw2wCzVESJvZ8NrmJ7zF+469iogDH GD7W2/nnXnhBC6K17WgIE30ueh21CkdEFtuigkU1BpMVdY8E9+FgrBghGEdJuEeIS5033XgD7ewY bYYqFkdc4MxulI11TIVLS925PKxBMYRM0mJvhHiygIAPuFMmb2qLgUmTJkqGVWyXBTsCwD/skAMt T3hhZOI+nS02n2yLyVVXG2P35SzQF6cwVK2mhQ+GAI5WrSODxPDhw00EvijFYoSOzdvs4SNWtAtN t9bRihHC4YtI7AxZrLfYE7QIOvzQg8wAxOLsj3rbzO4V7uvBMIaPTHxZiV0dLGhYqLDIZ/GKHjhy xtevWOjgWNRwcTDlZKG1waR109tadA/R/VJTNpeOpf9JEyeYMYwFDHBb4GgxvuWUybZwHT1mlF0i zaJ34joTZEAbbItcjvlM0r1BO+n+IBacGAlYiG6w/vrS5UgZLsall5Q/OuDrdCzOuMB6NRnYqAsu 6pbItmDECIQ8yMgXrcboaCOLeBbLo3QUZxvpizupuH+Jtmc6E/FWWpTuv89etsALYwOtb4DaP5/0 xtjCroCVZHREvyx8uVx7s003NnmQg50Qq6ju+dLditq1wxGeOGZCC6Lt25eg1CbiLquNZXDjYtrV tfOB4yfrqk64OJw6wLHYY1cLX9BDj7Rf7smZocUy8nNR+nCVBTnWk26ooyG6JwvDEGVaQ8YO7t/i U9x8Bh1DEJ8Ox+CGfPaFM5XtRS32N9po/TRB+WOgpN2+qHJjuKOPYYDl3qOQy4TTz0ojR2iBPVLG oZVMd3z9aopkGikYd3CRhozrTpyQ1tCF5Hz6G12hj1VUt3wunoXv6LGjdIH7zrZjj4ufMTph5KVc yD1WxkHaDWXEIMSuHQyjYyUnu1ImyVBGe/Oe6tLRh7hoHH60x3W0w2mrLaaYAYg+z/1J8GGnHRcN Y8SmjYxXm6W2MOLyJTX6IDvFMJihRy5uxkBhO5hUTazHqa0X1UZH6GL5yWontFF2VNFOMCRutslG BltXZX9F9YlBgk+sY5xCHxhEwlHn7FqZJWP4FPVDLnSnzdEuuSR6yuZ+FI5+hjwYKRmHuCcHQyQG yiMPP8R0bsfOxLjUixmK9AUwDCvba6cjx6JW1m6ZffbYTTs9dzLjA5duc4fWEPnoD919S+0Jo/Jo tQXypg2x+5B2yY4Ydh9hfCMz7knCWAYu7RlDOsY5dMX4O0aGP2+Tq9t9cBj5ac+M4bHnEgAAQABJ REFUQRiAt91mK2u76IIdOeiT8Zg62UTGMdou5aQ9UW8Ylhg3qbsx0jdjOzwxMtIOMGIzpq2++liT a4JoZ+rrZ+hiC8YLjSHUKbqu23itNepn/fXV9tRHP5Qhn92VXOTPOEteNACM/8zGaO+0f8qxmvo1 zzd2ao2TbEPUP5vj4tpq26M03o1XPa6nMq2ttqpxUTuvMIDxZTkMd+gBA9Rk9QfKyJhPm7APQ0hM dlHxHKIu7KgwD6uy3oVjpQFczjAMq/vpNNBpoNNAp4FOA50GvlEasIe+l6gIVkXMhqJHzj333HsF ZHYQfxWOAp9mECK9dD75cF7AiZN96bfhQQMcRzzwifcSH3h/LvLrL93gS8sUvF4Me9GXsAjjRzgE imlYmRbhwAWHv4BDG8atdlo7Dh50QR/p5l900UX/cOSRR54Y2/Zh3Nvxxr1toMnKgLuqiFqCKT6u rDWH6DfjVnECASv4EAy3zHwyYUnHogmDCbtQ+LeYS1Q1mWeBgqvLz8WqC23yDD4OWThCxSKeiTYL Ho7MsMhics5EW+/gQTL8+LEyaMLOpB1eft/EIMMnX/iweLQjNTqOw3EGdkvxZR3kZe7OziFbvElu DBjgswghJ3b8RB6LdD5j8OCBvhhVmt8FwhGPT5SvLnEeIjm16LCFfz7ywIKXxTOLT940Q/OeDAr7 HXJkOkD3dPzf//N/6KjUQltwmYGOMyC5VrkomjLBA52yawDdLJCMVl4tXAxXPJEb3XG0wo0qrmNg tngWJseRqAPerDMYsfBBLyz2iMMTY9887RBB3+yaAA5PDGzIYCZwyUdZ4GW6yRKzAISH18V80zV6 hJfVAXJLtxiIONrBkReMUFzSTanRA7qcp/ICCzkbO9vIUMgYCVwWlV1tCaMcd4mYM33w1S7/ElIG WlnRBwvfykKqRORFZ9x9Qx1Qbolo5QPOrjWjMSmdG7vBaDsilRzoMHQPQ0BeH5QbvdOvWegTtyNr MoagW6sH6ZFjYRgM+bocd6HYMT/BBRQz34kALjrn+CXykTWylQ4YQtFuOIZEH+ALVSyEoaX9c1H9 UBkEDcfaC7rSLivlY0dz5A9UXSMPbYM+hAykcZTH6lJx2jLpxElDf/Dw/jrY6pl4OELWPuTTt4mH TvwoHpej+1gBP/hy7xA6pt5whDFKc4R1ro65ohPum0EPtkvH8lN96h+6oMzuvD/Qbv0z66S6bPCu 8Siq6lztz8awzAceyFTLpfpT2Q2utuCy5jpFJxKUo218vREa+j99gV0lppPIPvvI8P/8v/9qx5Wu ufxCO1ILTy83l0h7GyC/PrqTgYTjlujC5FF+9DPaIO022ki0cwwqi3UZ/UCNZV6v4o3aJRt5WnsR gHr/WEZqDHd8FZL+FPdAwYuxeY6M3nw1cIVhQ80wQlnRKrLQhn2MdD0zDlB2djNZvYkOx9E8xl/a EnXo9x7pMniFwePPxDNsrzXqhlDoHZ0wVrPLM9oybYCv+sVOHvIAn3vlTEiVAS42Lmo8wfDM+MrR XR9T6nGRo3HsnMOohJEOmWgz6MB0rXLBk7zpmbRTjipTci6Er/sBEHL1X2I4L42Hu99OA50GOg10 Gug00GngG6yB1kM/ZgbM+S6++OIzZDP4lUrvd064YQjjD2htP38WxeCRVuK1w8R7/QncgEe87UMb 0hPG4fedpjncEPJP4JewRri5omkk9Yl8KrM+FLXgJEHvs7EaHvEepIYbBQ8/Ch10Jc/IA5wSH3jg EzbH5DRcIEccppZRToj0mAiDBw7zUNJiCRR4pLuDQlPjIsEFFoAdSNArqLmy8Bw3KPEhc6c0ZbY4 Sh9g/MwbPsjjnCxARPwH2ETaIvwsVpUrb8dlEu0XMHs6zYFPTuPXuWtJZAsEeDFxt8WNhGaBYoVw 4vzr2iAD/rHI560uYZwtcLPPV2xYwMKTSTtpaAGevhhz7g5xmQnbURb5JqF9ZVtpjuSLvoxTLwa0 OGGhpn+8hR46xC9UJU+MMvMXLNIul9dskTFbOxG4x6b+8o76eObNrhnuj2FBwg4RL1LIjdjoTgJR VBPOQCpL3dZ0pTKIVl4qn7f47HJADsh8UWMotlCjXPZp6pXrhQ2LRByLo4ZT/ugmnGmcMvJPJCz6 VtSfi0b9OR98Fo98/nxArgtb4IsRhigMB/4VI5e7SoNT0Y7Z/RO8KSf6HTiwlsfkUptptjl0JEkL PkT5gxmGKZy3tQGVfnwHiJXQ0vnBKFY6+EY7cjjyO2/0bhkIAO/lZVTKVWP6smMrWb/wwSBJu+dz 5KVjwVvWAxKBH+0Y3IBhHBhsdm605PrHsDFCcJFUhgXaF84X0xgV6vYDL69/Ql6n1GvD0TdV4RhD 6Xvo0cogIwn5qBjmk0BvJUI7oy+GQyccB4TWnND65IOmjFwGBAXo6yNHsoPQiTBQBC18glWz/nM7 KdotNMgbeMrCaJWbEiLsPnmGXOCRLs2lQUU9WSsXPxVJZV9OOvHP0CO7GXhDOEtH7877XV3I/J6O z2GAfFP3drGjcHnpump7KhBygu26o4S+K890l6sFuUNGpIPCFCc646XqxVBYumaVomfXMW0QI5xL GG0Bfs6XfNix5PXtY1W0J5Mjt63IC7xqXDeg52VGe+JKD3qi8WTw8aps5YbMj8rkRnPG9RUlL+3Y +m/u4xgGcd4eEFx6MD1CrPyVYOPiAL7wBiZtgZy9n1AO9MZ4s3IeF4GZwVBGzSEDm7o0HStveEVf jXqDtz3PLB/rDZYfcHpx5zoNdBroNNBpoNNAp4Fvsgb0rG+tQZihxIyAkmebATMFJgY2YwBeOGDx Fzj4/OF8weVhfgOnhvQOtfMk3rYGBK9II6+AlVyDFzDCS+VaK4x+aUrmIIUw/RLkBPCCNpQVwter n5pL4AQkaIlHWvghQy+coG/7QduAwyCcMROWTVAtwfVthKy2WWVlV0+THRZ8YiGGYaHmA1FeQMIn F8cm6n3q3DOw9ZaYWmMli8igVKnPpJUPiQ0kZwJZkZ8BC1wnL+l68cnla+QFp8A1rvop+Xgy023+ lc6ohGoyKxLyWS5Zx14eqCh9TW8h5BCyL/wy5wrFdcxiZXFVV8C8X0Hq+Tkdnf/9D2anO++5V/ct rW+L8Lun3qfjJbv7W2cyapRb8hiTnG+RPfJXchuNQQTD97CjI6ziwiFU0TRKmkk0tkBf49R8aphz td+QFXJQcaYb52NRcKpEJKn5l7qJdmyGRZRdud7tGE51XTk+Mtbt2LOt5QYHIV0XsPe0XEYl1/xy OMSwsgW9+170QAhYxOEeTlwNHGnEjWFGcH3UcgZdyFfHXUc1H8riovUdK2p+gQ8fDI2uF+Pqghnc OKk/oG130DWfD8GzrWMR8R/u+hE9fHOdN3ScOTu+a7vMzRUFBIb4OWx05FDHyaKpV0NyFHtGggtO k66GWXL1E2UjC+dLko+dxklA1w38cCFL3Z4NCj2peTyuefVux4wV7KJ6WPewfaxddhzB5BPy7Hpc T8fX2ClkLrLNfVTWCzLxpNaY65qtyTJWFjlSQy9RDvAD5pmVsju3/GsM+44VlQ4zWuRU0hqO6Gve 9VgBsCqmEUUfr0rg0ExfjRmZWYztztxpIlxzrnOIdky5a3nIwus9aIHAu9lvARplpTXwrFlkSCVP 1VbgQ/7IVsuRiaDuXKeBTgOdBjoNdBroNPCN00B+9hfztd7zAZsn5AlMn4lCTCBIb+PEpCJwIo4m e8GA95qMlLiRHj404UpYr3AJg6aUJ3j08ZfWUATzMoMI44eLgkQ80tq4JV7gBE2ZFrC2Dw6rpeAb 4cALHiXvgIWvDTrNaWgQm5/npA0YkbwIcDissiOnkkZJlnkJM9QsUsEHSDVh9khmqkWMzZo9WuQm gBCtJDW0QdqIgJoXr5lzlq4HH8esuVYEFqiyhH/bVYkkWKSN0Yz30U1OLnTjfAIuv6RRFiZGCTPU LFzBx9WBTHIe8bDJqbf9esu+oYxEm+ruDnY12a4pGZCcItO1SRt8ao1mxhmbmBBhgbU6OzPMRKTl V6jwb7sqkQSLtDGa8T66ycmFbr4MHX9e7bivSgLy36Njq4GvjY5DV60uAJiCZFdjtSG9dNwgDQLz q6bal2FuupGpYTZoy4il/jfomMfDaN3jxh1l7KjhbpsVdIdQqataztBNXVhCUcLmmLOsY0XBp87Q Qqab/tRXJYLaH5IztNQvUceNEjUU1XzmuXTx+9+j48i98zsNdBroNNBpoNNAp4FvkgaWfl5R2AzK WQvTp9IRjz/ggRt+4Nq0S5Fy5kUYFzxLGsKRbkgFXsRLfGAl78ivzbtNE7wa/tIaiiCKDCJDMihd GQ+cSA9hShzSAi98YCVOCe8vXPJZEj18gze8+rjIgHV0jRAkNbrjFXAMOoUhIPhUudWkCkFXc8c0 U7kanPGqlL4BW+zXBM4n51yDKwUHA3IrW48bv9xUxYLebVOZTxBl3yTN4uK5WSmXJsvjlBmpRU80 OH9VdMyRCI6i8AWpyklIjktUBryc8PnoWDow9YQmqlwtYElZfXjfBB03S9iK5bIGtNNxaALfW0BA XDc5RvOpXEuJFTwHWsnLouNmNi5PtNwGn1aelmXO16ncWG38vgZjBccrudTZRM1lw3gEvKfLZY20 hm4KJYbuAs91EzH5Dd14/69HzQIPVKI5X+fz9dBxJTTyF7ppwElru1zWAH/ROm7XVeTb+Z0GOg10 Gug00Gmg08A3QAN5zhUl6W9ekdNbs5Bqks50YWmnDPDwKZv7TCpLWsK48NthS9RP8Ih422/LWqaX vEt4zzC7cZbVReZk1M4s0j6tAEuTJzyCX+C34yW8lzykB01/6c5DqSViHSO5KKbhlSaEzDZQLN1Z Or/g6rCKV8av7UvBIOO1ouWuDDA4AGBiZfbw8Qbu9EHezJ0jGc3dRcHHfCE3+OQsskSFB592Po4M n8i7CtWAr6SOKYvdu6N7aLjbhb9Km8je6bhWgle76ceCuW7rdhaVnRFb0b7tOLPqo2MnDPKaP3xp f1/VdpzLjSfhy/7gHVbAKJSlO76Xr1nKCjHj16nBIOfVivbUMaiZQd3Hm4Q1f0duH+uhLFEmw7Bo pvIkwC1HXTkoe6aT4BOwZRsriizE4IvSMceUMCQzNnDcrLkJta2tLFOhY1d4lNDT21R/iTqua6+p m6pfVAhtbX25Om7mXgnVBToNdBroNNBpoNNAp4FvgAZsXks58nTE1+Q8/VvzEy8rQP7a0wPiAYv0 NpNgGDwi7pz9t4QFv0iPeJs+aMIHv503sDKd+FK7z2IoKpkjTAhfwgn3goeg4QdN8MGPtPBLnBIW YXz+Ir+IQxf8gj8wXOB6TOTlm2NSdQVnLYkDHFdpGGRqBjlsgCYfdo40+ITEWQLS63t0Sp6iqzOw fBf76s7CHsx55ZLDJ2ggbZEbnRXIeoGnNvhkCuOTsQH14WMA6cb8nCqPhZ7nX5ejChlapGfmgjV0 U2Zm/CpqK42x6MFn6XRcF8hYhAhlRDDTMTYiuYZuOh0366pXO3a1oTlqsnLRJgOw9O3Y+ZS8gsdX ux1LyhBavlp9Fa10Y+nN/tCzHZd8jFdooOQproGXk3vp2JL6tOMmn+DuvpCXNFYgjzKuslagCgcj A8AHQE6V9+ePFTU72H6xOkZpzbry0ghOklyMFRYBhkxUiv7zY54ltn+E/KXpGDmyJOa1yiRYczw2 0V1gpX2eOq61UEkkUEsey34pdGzMSj41dw99Djpus+zinQY6DXQa6DTQaaDTwNdbAzbF0A+OeY79 6cdcc15RfgBLyRCBmIkrH8pgwGoywoEX6b3gpIUL3kGHH2HSetEHDB7glvEyTHo7Dqxf93kYikqB oiBk2AsewuGX6YFf0gML1wte8irD0AT/kj54mF9WOs0hEo1AESbG+b/zKBAis5q5YQu95COsgo/h tghtjQBShpNFoNTZFY018OQ38jJk/WQivOATMjqFx0JKX5xGLDAzkxztw0fJIVFFmWENyoKQYENe eAt5qXSc+cC7Lx9BCj6wbRfcdVzDgw+ohN1FiRSL/OQ3ZDZky8xISj6ZiRFnctE6907HoZ1Ox2gi 2k2jbdHorGlZo3OF0ZC8CVn8z23HzjR4WmYGCnmqdAvUddVvOzbZCgFFF22/4qXkgAUfytQse5MQ /D7povnCxoqiCP3puCmPl8jIcuGij5flzhVqIHBDDxWOldJjoZvgU4lkgSpmyH34KDlgwae3jms+ 4DfLJICSv5Y6dhUifqWHDDJIWzefScc1wy7UaaDTQKeBTgOdBjoNfBM0oAkCc6Fw1Zo8A6qd7oHg fhD0nnbUuOCBwx+upCvjvcIlDXTxF/DwS3jA4IeL/AiTFnHCZZz0JbqlNRS1BYApmQY8/DKzSA+B SiFL+oAHbTse8PAjPfLEj3DgRJ5tOOnQN+AWARqcwerlKpwC0YI+RW8wbWbRi1sNKwiLYE7v3VT7 4tXsCPVNr/mUaWW4ycFjvdIDFn7P/IpEgkW0TzZLSisJ+/JZImUznwK1CGacWjclUV+8MrVXmWo+ JW0ZbnLwWK/0gIUPZhk2ygJAsIhacvmzpLSSsC+fJVKWWTQE6EtV66Yk6otXpjZY5oSaT0lbhpsc PNYrPWDhg1mGjbIAECyillz+LCmtJOzLZ4mUZRYNAfpS1bopifrilakNljmh5lPSluEmB4/1Sg9Y +GCWYaMsAASLqCWXP0tKKwn78lkiZZlFQ4Cl5fNp3PumdzoOpX8ddByydn6ngU4DnQY6DXQa6DTw zdCAzc2qtX1dJt+pX6/18/2UAGI6VyfW1oOYzgROzXDJoRI/n2upLBKRhh95hh9pxNuwSCtz7oVX pvcML62hCOa9Mm0zDUGBB37A2vGgDXg7Dpy/KFjghR/4kd5fPPBDDvAG9LmUNLCCS/YbYCIGKKBR pS26LtppoNNAp4FOA50GOg10Gug00Gmg00CngU4DnQY6DXy1NGCGgby2DyOBRftf2zfQitJARlr8 RVKJH7DwIy3i+AErDA19eAZ+4EY86AMefqTnkkZ06fylNRSFAkKIpeNeF3hJdFEQ/AgHPvFSWWW4 xA84fhnuhQNvvnRX5gXMKTO0megsHcZvZKGwAT3FeHQ/nQY6DXQa6DTQaaDTQKeBTgOdBjoNdBro NNBpoNPAV1IDrOZ9BV8d3l/aZT1ksfgPNmEcoKzttIiTFq7EB1bGS/wSHrSl306PePgl7+Abfsmn Z3hpDUUlQzImXgoQzANGeuCEH2lt3IDjRzhwoA0XPCPeH37QhA9+m1YXwFY3UmR++daGbEXEjFQJ k21KHudXicY9TI4VZubVeZ0GOg10Gug00Gmg00CngU4DnQY6DXQa6DTQaaDTwFdJA7aMl0D12j6k 67umz/calwllOFiVDEgPeIkLDvBID5yA4+MivU3rqc3f4NeEeiz4ECvzKuG96CrY0hqKgiAyCcHb wpXpgVMKE+n4EW7zjnj4JZ+ABT1+pJNGuPwDFq7EG1BeZu0I3Bnh11rZF2uEXQpoxG1A9bmhMiGy 6/xOA50GOg10Gug00Gmg00CngU4DnQY6DXQa6DTQaeCrogHW9eXqvTYSlFCXts91Nc1CBGkQhh9Z RDyoAo4f4UgrcdtpgVP64IQL2vBLemCBW6YHbb/+shqK2oxCiMg8fPBCkJKG9Pgr4YRL2kgDFnzC D9zABx5p4YMT4cALn7TUq9KNQD8DFgu1PJkGDPEaHMSkArUTLIvup9NAp4FOA50GOg10Gug00Gmg 00CngU4DnQY6DXQa+AppoFy9h9EA8Uo48dbmkkgOP0iJBwyycMACpw3rRdOLR9C1/ZJvO59Ia/Nr x9s8G/HPYiiKjPHLcINxK1IKVdIFWqSHH/Al+ZE3OCVdwANGnHDA2/jELRWkINJ11wauf4I8MIiX H9arMbtQp4FOA50GOg10Gug00Gmg00CngU4DnQY6DXQa6DTwVdZA00wQK/5+JG4nh/mgDS/jYTwI lpEWfggQfuCVfskjwkEfeAEPP+C9/DZtL5y0LIYiGJJxZF6GezIvgNCWAgWPQIm08Nvpgdf2e+EF DF6E8eOvotcdRZGXw4yqvsyqlxFosV1rFGQQRFYV2y7QaaDTQKeBTgOdBjoNdBroNNBpoNNAp4FO A50GOg18JTWgNbxZB1jLE5Dfz7J+4cKF5eK/V2kiPdLgFNwyc8ukVzqwwIn0Xn7g4If9hjyI81e6 Ml7KAk6khXwlXZ9wZNQnoQcgGEYGPVAaBQ188NpClmmkt3n2kitoApc44fDhE+GABww4fzjzm0fP apYWypjcWeTOAQPK42gWjvSM1nmdBjoNdBroNNBpoNNAp4FOA50GOg10Gug00Gmg08BXVANaw7O8 L9b2RbAh88CBA7NloDIMNNKLSGkYIGw5yI9woBIvcYGD2wte4hEOntDgQjaP9eVT0gd+Gxa0ffxe Bpk+SBkA0xCwPxzgkXng98INnChc+5xXwNv8iEdaKUvA2nlFPuFX/IpKzyyFElj4Fg62OSHSjQtp kQ6gc50GOg10Gug00Gmg00CngU4DnQY6DXQa6DTQaaDTwFdWA7GEr9b29faQfmQGM6gCBVjAy7SA lelBg1/iRjxoSrwIt/GDpr908HvRgB/54H+qWxZD0ZIyjYxKoUr8UFQbL4TslR68wg/aNk3ESSdc 5ks4YKRXrthG5hiQWU6ZnYVBL9hXsIpNF+g00Gmg00CngU4DnQY6DXQa6DTQaaDTQKeBTgOdBr4O GojlfbW2D0Bf4ZunkBrpUPMHcTCoOOa0SFfULQ0E5Eq8oA048UgPn7TSBU2bf3+0bfz++JZ5VGfc GsCljESGJXovWKSXApWF6C8dnJJf0Jd+hEseJV3k04dP4wbzBpfFVc0EU6QIlD6MDClSK4ou0Gmg 00CngU4DnQY6DXQa6DTQaaDTQKeBTgOdBjoNfKU0UK/o61ApYL22zzYDAG3UiJMWfwHDj79g1iuN TANOGFfmVaaVcMd02sibDUAlTps2aMBZKre0O4rKTGEcArUz6ZVxwEJY/Da/4BM4xNt5RFr4QRP8 iQfvSAs/cEiPv0hr+JiJmtdc61ScqC3TxU0jksGMug41mHWRTgOdBjoNdBroNNBpoNNAp4FOA50G Og10Gug00GngK6KBfOtNY20f5gJErNf2ixdXtxe1EYiDWP5BjGvjOtR/SYs/aAO3zrTGJi3gJW6N Ueffiw808VfSBG4J6xNeWkNRCBgM2nEya2cYQgVupOMDi3jwxI80wkEXcHxciUO8xCMerswjcKo8 VelV2AkiKtT2jUkVx2ADIPAVFLhMCfTO7zTQaaDTQKeBTgOdBjoNdBroNNBpoNNAp4FOA50Gvioa 0MqdpXyxO6Sxli8ihc2ggFaGgDAI4McfhSxxiYezXHMEnDY9SSVtiZPJ+njBIxKwZASs7Qfv8IOm p7+0hiKI+8uINDIrM2zjgoMLOOGgwS/hvcKBE3n0woEn8MAhHi7gkVbSZxwlCQpC0WaI6a8HepmN DI29MDLjzus00Gmg00CngU4DnQY6DXQa6DTQaaDTQKeBTgOdBr4KGmgu+LWWDzOBhOu7sC8STfgy DjbxgIVviK2fSMMPuvADlTh/uHaaQ5u/wTOgxNsw0iLPwPtUf1kMRcEsMo8CAC/DxEOQtpDtOHS9 aAMv5It4Gzfywl+Sgz7y6sXDaYUViAaIXHvqOmdn3Nos2/GMuySvB0nzoNuSiD/ntJYsrejSZ/aZ CVtZ9OTTE9gibEV7kHx+Ou7BvJV9I9pCb0UbqEuMfGbCFteefHoCW4StaA+STsdZRz1003f4a+mz V7QHn07HnY57NZUGrEe7aaQvbaQnn57AJXPsQdK146yyHrr5po0VS24cS0jtqZsl4PeX1JNPT2B/ HBzeg+Sr0o6XLPgSUnuUaQnY/Sf15NMT2D8PUnqQdDrOKuuhm54KW7KGu9ROA3+hGujZgfroorij CIKwDpTEJSxMCWV6GYZ/GScc9KThiLdhltD6CT7ht5KrfCI9/DZev/EwxPSL0E9CmVFZmLJQhEs8 WLXjwb7kAU7glX7Je0m8ggackibCZV7gyNUkVWiAQvkIWhAGuwoH0jqx5iMLZYUDn4iEn4nCcmks GnxgLNYlHwBBb35EDJOf7HowiqS2n/nUFDlkXh9oQV3nXWNFaRytZhEYNU3FqNBNYIVCG9h1okhz Sqmbgk8k13yc2H4bfLKcJR9AkbH5ESGhIK6OqgJ3t1h8errMp07NIfP6QAsWdd411l+QjgtNRPAb qWO1q6qmv9B2HK0o/NBq0//8dVzzr3P+ktvxn61jr6HGeExhouLM5ydKGH5d9jLU6ThrqqGmvxAd 02i8qFVriXaTwd5UeugGvOrRU4wVNaqHondZrE4U3y9Xx3Wbz0L0FahGaYVqsaM0jlCzCIyG1jIX wTI4sJZJxyHLUujYUOtMFP3L1jGqaNSI6SYUFCm9n3mBVddVDSk6S5XD0o7HzRZkNdb4+bTxuEbO 8phXyFYj9AnVWE0pahaBEbopWdSwwEI3hOsURWpmRUpLxyXbLtxpoNOAa8A6Ej/ewxr9ask6ClQI nbjmWMYjHPhtriU8cPH5Iy3Sy3CbR8SDPuLhB7+IL7O/rIaitiBRmMg4CkW8DEd60PcqdC986Np5 lLyCXwmLcJlHn3Djq2eNes7kzMj8f1EQF7HKtJLYHwI+hIte8BonM4FtDbRMYiivJn9FToaQ+VRk ETCWEQGzEqQVNi75p5KuFiPzqanrUJNnyYdieN78BgWwCINd3wAVD8hS3szv66pjJpAtF6AoZfio qqmbkrYMNxl+LXVcFacKeKEURR+lTiwh66YueYuu0aJEn5ODT/hfax2Xesn9IXTjevFCR+8q+1Wt N4U+Vceh2/CDuhn//HXs+VBXkVOzP3wJY4XyrtrKZ9Bx9MXQsZWIwgRT+Y4TJQzfMPXTjHc6btY5 WvqL0TGNxv8XrcLbRzSnOqE1r0BP0ZSKdhygaGf9jRVfto6pV3e1hCFjpJR+lB8/KJA5wuCW45/j B1WLk8Aln+BYYVdMe+g4WC2FjmvhnOFfuo7RwldNx80WROVWlW81HX0q5A7f+2kVa9E1eRij/BMU +IH1mduxeJR84PiZdFwK2IU7DXQacA2oc/mY7T01+m6tnujB2jeyqLq8uI1WI9XdNWD4EW7TteOB 16YBL/5KnBCzzaeERxp0ES7TI7xEf1kNRSEkTMm0jAcMv3SBE0KGwBEPv6Qpw0EffuATj78SBi3w gBHHRdz8hQsXRrxObUIcXv6SbjgZsYiHIJaek0vSRriiy1AR+4aUIATQoOgTIb++OGGUCXTn46z6 26g7IC03UH/LDQwi+b35BILlHZHs1/JkwQuvwgeW4S3yZtRwCgYKxoO2yufT+JBe4ojwi9RxFCDK Gj7wSuaWQKV4hlUASvoGb8PJiIVX4QPL8KDr6RtOwUDBto4HLEe7WM7++uVR5gUPiwdQUkWwJ4NS NyWC2t8S+ERZw4fSwg0ahzazb8pT0kfuffhkBngVPpEm4yBv+oaTETNNW8efyifTVYwV7083vGGl vvBLV5epCe2PD1hR1vArmLEu+X8Dx4qWjtv689KXminbH/VT18MXoWN4Ljew7pdNSbyOa5lzXRVe hQ8sw52q96+PAwO9XWWadjv+c8eKWl6XwcWqJDVgG8cx67ECmuUYs6SbcMEhfOA1n7LwXTtu6iY0 6NA/px03+kPJlnBRBWUdBVqfusr4eBU+kYJPX8NA5mY4GTHTtNtxySdkaPiZroIpXuqmltcxPLdK UgMGTqkXSlPysdI5cU2jUMkp+DQKDx/POv8KqwCU9IHWh0/Gx6vwiRR8lk3HzqfKp+ATMjT8Vl7k W+qm4pOJnF0lqUHbOI769dRxs52oJFZgL7WF0Y/AlLkqd072cne/nQY6DfSngd59pj1WVNTR1QCU vSzCxq7C9kCktcD9RoNH0EUcP2DhR1rJLPDKy6wjPeiI96INvIZfz6ga4J6RXkx7wUpihArBApd4 hMEtw8R7ueBBWuAHLHzSCMdfxEufsDkNvsHH41WsChg8YubzOssDzoTfQMgQ42qwUqwaz8n1q/8l Rv2mDEaavhgiaPmRHMgZbtnlsCcRqR/fNmGW8We5AVo45sW+Lfo1iS7j8xcuSO+9NzO99PLLaXFl MQ0+8HS+ll9ZWGWas/ckfg3QhHrMf6NMbcqgCN/219fIhl6lKZuvio69HLUiqilav3UVGJTmv1PH yt8UWmg1QNQjbtHi9NG8j9Jrr7+R3n77HV8kAs8kTu5EUVxLzumE/6x2XPEh8M3U8efVjqkTPuL4 4Ydz00uvvJrmfPiB11elQ6kwDzBeV67TeszpdIwO+2/HSsu6rMbjwM5wWjs8eDLPmzc3vax6mDV7 tmLBFcQ/tx2Lhdz8+QvSO+++l1559VWrdwPWrC1qPyZbKWB0X4dFmQIahA0KNZJ5cxkHXtdzYkbV rhwnY2qs+PjjT9Kbb72dXn/zzZpdTjaPxqb/oQ3yqtuf5xzyLFnHztT5ENY46qA0f+HCNGPG++ml l15JCxctdKb8RqYZzxIs/HUYj13ofseKXEovjn71P4pLUugmoy1lO855GhHhWseWATk4irycW2Sa 4UG6ePGiNHeu94fZc+aIlSO6F9QFUc06RM55FThK8Zj/RrupoZ5HUFS4FgioM6nSFK11XGddhpxc v/ofxSV9WXUM7WL1mQ+llxdffiV98AHj9XIFH3KqFRFaqjI1QchZzsKB4XSezK/HDS9rzMI1a0/i 14icMoAe89+vm46tDLlivK4ox2dvxyiowccz0K/ztejnoWPYxapMbYJGMbd6nsyqxt9cYVW2Xkv+ +2nt2Im6304DnQaqfsRYof+NPu7dqZeSHM2JS6wIkx44bb/kB36JG2lBE3H8wGuntePgViMIkZYj z5CzldR/dFD/SY2UKFADqEgvIds4EQ/c8Ns8Ax74vfwoILiEQyElrwgHLnwIB5y4xl/2FdfOkO0H cLCv0x3qJIamJB4derz7vQEZGGl1dhnipLm2m3zID7MBEtFeSQ0+wM2Fp0SjJm6BwM0Rx07vyvjz 4YcfUk6DxE4Dm0ALxFuK5ZdfPj3y6GPpwUceTx9/NC/97//0d2no0KGZA54/WG1SZ2zII8vqbAvc CJKA1PGuDrjLZiQFn5A8KMFatHhhuuvu+9JHH32Udtt157T84MGmFKutnGf2hE0IqgzxbAxC7rga 97PruM4hZwBjBWlCBURhn0xklbu9K4QwRHZ1EWhRScimjnOpauHhUjgSgk8gOU+L2U873ckdWuAK 3G7HtBUWoldde3164smn05ZTJqfvfvuYtEBGxRC9Fx8S0cFnacfw85K4bBbXz7LruMknSm39qsqk yCPU54jFLwn9tOOKBj4V04rWoZ5HoLZ1DHKkeajg46TGOVpYjdtXx9TXU9OmpZtvuSO98NJL6bij j0pbb7VFWqC+ZKxETH+v8/Qwv15XkYuh5FIrLWcKjlEQd9JGXVVUlg9MgTgiv8EHaNM5Q3SDpt05 XU1D3Lg0SB2acXPKF6VjG+Or8oScnmmpm4Eywr/80svp2utvTM8881w64vBD0q477ZAWyGjx+bTj lLQTNl1/4y3poUceNa398z/+bRo0aOAXomPaFYbi6268OU175tm03TZbpSMPOzQt0jhAufmhXbHg veraG9Jjjz2Rxo9bM/3oB9/TC4pmjUYLQ3te617n8KGul1bHvdoxNQH8ttvvTPc/+LAW3h+m/+N/ /H1accUV2S9e6aasq1ydvdsx/GBqVe1tzIprcRLazkv0xbRjz7/O2vPKwlWCgPVF6tjKr59laccD 1S6fmvZMuuW2O9Jzzz2fjj7y0LTDdtuqShamBx56JL0hw+Ieu+ysehomvmjP20JVqB6BL0fHZGzS NCQAUunYdOHx8pm3NO14gMaJ5zU+XH/TLelZ6eV7JxyXvrXFFPUrjRPGN3Lx7P0pVOvmq9yOvZ3W /cH1QTnQXq9WW7ds0pdOxzWfepSBWnAxsJzEttdYQdpXWcfs7n/q6WfS0xpv99D8d47Gsqs1tj7z 3HPp0AP3tzkxzwDXgLeMZdUxeupcp4FOA2hAI8KnjBV5klCerCgHLRtSxAiYDT1wzQ5Y+Rfw8MHv b9dPmQf4wSdo2z7pkX/ghmyBGzwDL+Cf6i+toQiDTAgSmUW8zCRgIWDEgybgvQQN3JJfiUc4/sAh XPIFhgua8EuYIRigtaPIE8TOnjTOthLIAjYdqOiNh+p4MbaqelXj6ZVkziHMA5FIvHKGW/PxKUJO z3zM049P0oq0ikkEPD8WLNffeJMeOM+m1VdbVYmL0zszZqYFn3ySVh07Ng0aPCjNen+W+ZMmTkyP Pvp4evW119I//f0v7eHKW8BQY15fWga8qVisH5cgC2dZtgQ1anjgSCudMRHYuRg5yQpwZODjeR+n 8y+6JL39zrtp629tmYaMWoXNLRS+ZOJsDcSP102dU6uuTLzPruNmzp4f8tb5KawIIhpujlTpBPij bVUu81G8r44zHyfyiCHlTC0T6UtNr9oEVvElIIQ/sx0PUGE+mjsvXX/DTTIoDtYuNMlupzVz5lnn VbZWvs9Px7ZsyMVt5pF104+OWaAusgaT9ZBradl17HUlbjn7ou4s2NSxvxEWLupRZtFLQnb4fKFj hfJ9591305VXX5d21wTTDMM2oUQebw4mWwhkEpLgTbMCC1TpkHKW6cQNZoXMJHX4i9ZxlZMFlqxj dlRW7SCXI1dOlDzL3+JjuHVdMR6TnbnMxz2nIxxpgTdz5qx0xTXXpa23/pbt3pR1J7fCGrdiWvAM Pv3pmIUPeTDO3PfAQ9q5NC/9b//wN9benJ8SQLCKUMB4u4TRjmmnOBvjA6+/sQI8tdu52ql29XU3 pJErrWRHu+zUdh6PYUFw/vz56fa77krrrTcp/XDxiaKMKQO5NXXsEn1GHVuZ4EkxnRNlXiQhMDY8 8ugT2qXxUvqnv/tFSrITmcs0Gdv1YjBTVkaqwxWeUvyZ52o1vVJYQy2Y5nE9dOwZZLbGDBoFejzz Po+xwtqFiYVg7rwMf76OnRujmTiKvfMtMoksSSjTMyJTiXffnZGuvv6GtMP229q4tGDBgnTVNden e+97IG22ycZppZVGJGDGKhoUkWif4mX9ULr/cnScC6PccsmrOq/G9aqspY5BywXPLNwr+FAs/S3S 71tvv6tx4vq07z57ml4WLuT5UXEQllzmU4YBVXFLN2VlYB2u8JTy5bZjz5m6smee12yWD2H0Z33G ZV12HWdWxidU1NQxeVRZVDmTk8/XXcImH4sVPKu4wWq9Usuea/w6n7aOLQ+hgm2/xsegEq/3vIIr IG678+503gUXp4lrr5NGjxmVZr7/frr2upvSlM0283bCbslizFkaHYcULmn322mg00ClAXVJ76MV RIF6rCihlhBDTishp5VQ6/EloEe4F06Ig096OVhEuM1qSXzALdPhW07Q2rz6xH3W2AfcBxCCtxPK zEkjjivxo7Dhkw5e4BLHteMObfIKWOD24kM+8Rf4bV+nr3oV3dnGVxAiEySzCUIFyOxiItPmzsNe Ejif1oMf0TIfhDRJg49JbVDnqAUvqIHHozBcKUobyqTq3vseTNOffyFNmjQxTVhnnfTE40+mm7Tj YJQML+utOzHN18TshptuTTvrjfeGG0yyiTa80QsPq576UabLDfQ0ExkCE0RyCsAxNxwLTfCqghIC lnlD20vHTPYHDhyUtth8ctpGOyIwULjL/I1e8hkD8VTBe+mYqg357Zid5MI3TaIs5RNOKWmg0ixd 4P50TDlDfudNIZwLcViiCteDl5UwzuD6dfq4WyTSWnCBqXXXl6fBwNqfeLnoBkiP6A3+nA/mVGW1 zMhP5bU7TFQH8PGcXJD+2jGihnwsuEaNHpUOPuiANCy/7YW3H2eUrqxcucAkyJGLtw2XvVIOiUId iBzQEeYeEasP1w2/kbfDs8TCBb9yuT+YbsQraDxdNad0FoofaCddycfwc37AeaMbOUeZUFLomHbs 9KAhi8sTfCxf2noWExkfe/yJNHvObNO7Ca20wDf5jE/djg3Gj2jr/qL2L/mqvEkUH8sPuOVJpoLr f7RjLtnbcIP101577CYQrcdd0FkcfLnsSTbPB5yihVge056ZrkXM2xaOMoBn/cS4ew7oLgwP8I78 KA/z2JAkdOx3x7gE3o4pXrQbjsmG5HBDf5KRurJ8vJ+SByL0145JQU9PTXvWdsVF+QYKNsDGLuVX 5GPsyrjlSb9xGULHVjaloYNcAtNExrIw9bDO2mul/fbdKw0c5DshSbe+KLpKz8W4Hm3N5FSmZBt9 nHxc/zHmDkiDVIZ999kjTVh7bdmftBDTIGiyWZ8Sdeim4qMATrwZ15+b/oLtEiIMbyOATPLBp2p/ gi3UKn+N1VZPB+tN9pDBQyr5vT79TjuMccNXXCEduP8+aczoMdoVES3McrUfw1c9wr9ylnf0B+/L Jo/Ikao/HecE48Vup+deeEGye53uvusuacMN1zMZYE89x/hf5asA/PmN51ylB4O3fsR7YH4eVtKL AfxDXuMmgI9/0iuArAZksHxUfn8Gef7QNuotZ2swxm3LzCXNSdYw2s880J58alp6X4tJaGu+9J3c jk0WbyfGS3UGnde55KAw2RGKNhnyusRKgE8ul6F/SjteIAMpc4u99thV7VbvJHOnR8aNN9wwbb/t NmnFYSvYkXdavskeerEx2tvHJzrW+Mhjj6cFMkbaGFjVYOiQtuVl7TWviLGirRsvjEocdUUfsD7u 7YaESjMKUCfRhr3uok7FYAm6ITH6FXQ8p9afNFF62c11X+Xv5anyRMlZx9GOo45JAi/GihqeeZR1 qjDPPNoxOoh6gEE882I8Nr7oIdq8wiICLOd+Hx0rBT7lPWXWpowuF044oTPSbBdMTocr9c84Cais JyVZ/sCN3juGgUM3ENmzSNAyD4lkLmD+rBIQeE6LNmfPNsqa4U7pJaZNxHPOeYUeA8t9SCkHjjJy NPj5F1/Ksgle5mnPoh7zbI25605YJ+2447ZpxErDbYfmvnvtkQZrZ321QixlRDHB2HLOP6pQXvbF /LhM6sKdBjoN1BrwHuvxumvlflUD9OKx6oE1cTNUsipTgPeXFjmU6WWY9DJehss8Ihzp4Qd/0gMW ftB8qr+0O4qCUZkpsChE+IHXy0c48OKvLWwvHr1g8AaOC595T9sF/8AJHzxdx9O30o3ApBQqKx1m ZdmZASFb8QNG7mBERgG36YWRl3yMsVAyrKQLPkIp+bmxxfmzAOQvxwwv8ivzj1zWXnu8HRk6YN+9 7W3vZVddrV0676Tddt4xrbPO2mnUyqukWbNma5K/ok0o4cViao7Oy8/VTpKhQ4akESOGe57Kloc4 b41nz3zfjiANX3G4bRlHj0wQPpr7cfr4k4/TyJEracH8gcKfpJUVHjRokOlnjhbv8B2sODg8SNkh 1dbxYO12YtHB9vRhw4ZZ5+ThzP0rGADQEPBhK6wgWj2W0UnBhwc/23VxlG3WrFnpk0/mm6zDbFLq UyObyAhn1uw56aOPP7YjbrzZHKgHuO9EcDxjpJ9PPp6f5ul4HrIwQRkydIgd3aNOZosHvEn7+CPp QfwoNGVdQXIyyQOGbhfMX5iGDFnedAASefPHRIc7ooYKn+N2H3ww18q+SBMHyru8eEXtI+OLOuLy uz+ckX7+kx+k4RsMl0iLTHZkmKe7hbj3AP2MGL6iHSeM9t6rHTMRsnqXjqnLFYetmIaLbgWVERlt caxyzpg5046+jBgxIg3RsUVvj0zOXOfzVL/IOFzGJWQmXSJYo55N3SlxxIgVddfJe6IZaG+SkRd9 z3x/tulo2ApD00ojVrLyoMMoM2wWiRn4n6htoXPeQnNUElmZSE1/4ZX021POSL/82Q/TsPXWs4xZ oHA0BsPoSNUvC6oFCxamlVdZGfZpptozulklx9Hj+zN1t4xkX3nllc0XmumA9ks7plwjhg9XGYfa BJL7aH57yunppz88SbKMsHpkQT9XOz44/gkfdvHR1pGFOztWAaajGeh3ru6A+WTBJ7Zjgz45f8F8 9Z2RVp9MPLnbgzqljPQp2jitM3SDfKTRrsCfr/LxFhKaoarDlSQT9WD1oXTqC7k+UH0PUr8eWeWV 0gfK69Qzz0577rZrWm3VVU3XH6lNW54q9yDlQx3h6Ge0A/r4QuU5e+4cwwOX4yTkQ998X7sXaeMr qK5WGol+bIS0uqReZr+vutTYQj1yXIj6gJa7eD5UHsM1DmEUmSPZaJ/sbGHXpMRpOsXpa9TpKaed JUPnfmnsmNF2fw79D560tcHLq18O1fghx1g1dMhQqwvaE3WGDr0fqAyqR/olZYAH/X4ltX/GDwzb 1J8KaXUBP3Qx1OpBi3G1PdrajBnvSVbJrbKTzpMHHUFJfc/TMVva9UpqU/C3MU1p9Dt0T9/kuEG0 dfQ4cJAbBRizMVDO007MFVQvjHmhGPiHIzfa7xlnn6MjZFunNddY3cbxwZLRxgzJwJEtdIAMI9UH ocdwP3So2pWGPY4tz9a9S7QbxigbLyWjRgCrWzcsSCe5XtDRQumOtshiH/lGqO7sLjzqSunkSZ9A BsaNISpb5apxvalj6DBC/OnSy619r4vRTPkw1jLmslkYftHG6RfUmY1X5Ku2s0Bta6b0RnnRGe0O uRCdP3LkD/kot9eWNilZu1a9fPyRGaQoE3x5PtFuCfMsoD8iZzxPxcry8XFxkT3LqNPgO1x1zzOP vm4wZY5c8AjXmFcIa6COqXAv1O9OPTOdcPzRGmdGSq5PpGv1V5Wf8vCyxY6TSy54Iy8Gg4/V3xgf xMbGmWErDLM+hT7mqE1+onQbO6Q3HG0dUUrdMB4jHxJyHxd32pFv2Y7RA/3BnZcFmt122zlts/WW afSoUaY36DhuTn9Ej4wxK2o8GDhgkIzwT6Wzzz0//Z///I/2ogte9COfjyCrngOarzB+8Gws5wPg MlouN2CgjWUfiD9lox6G61lEX6Gv45grWF8ULot0xgXfXU0LX87qDJ1SV/Rb5jsrMhfhWWf/vM3A qzKmoDQ5xg94M7+J9rY8elEyYxnPtJnvz1SU8Vjjm+rItE09SkZ2gNPm6I/oF1rg1sfUjuaoXNQ1 1wlwpyAyxZxkPs9LpdPekB04OsbZfEC/LiXPcvUNtQHmRdANHqy5CvMijTdV5Svfho4pg+hodzwT GNPpy9anRGRtWCTWRjSeMXYwt7SxUGLY2CLZPpjzoY0jyGD9QHxHrqTnoHTBPT0fak40WGUEFjsi 4f2hxmz6M+MRdMzBbP6i8YAy+7xlkZWD9hh1hcykQ8MckTYEDxxFpOrQE/2B5xz6nTFzhmgWa3wc LlmW935henSVwBuZeHadd9GlaaxeuK0zYa20SM8B6s7rer49y2i/Q3Ke1CN9S48nvSTdMk2aODGN Hz/OdAQOwjgG0hVO+NAxCuPXTtiSvz0/rtO7UKeBTgNooOw36jKVA84YEI5xqXBBFj6YEQ6/QLe0 gpslgQesrzGi5lXyWJpw5B1+5Bnx4NGOB7ynv6yGojJTwvyRYRtOZpFGGBf4ETZg/gke4ZdphNvw 4BV+mQ4MBwxHnHBZy4FDujtBeDiASePgTW3TBQlwwh7vM3gLbKR9+EAXtHAuw/VDIHLh4fnmW++k 13WJKIsz3jLw8GMy6S4w4VM/JojxcDvkgP1s4szCF0xysH8wllt//XXTSSceb5NBFm4Lde/EnXff m1585ZX0+mtv2OLssIMPSOtNWtcmUlxketMtt6d3Z8zQQ5WH/fKJN2IbbrCednE8qqMQD2vCPy/t vstO6ebbbreLT0864fg0ceKENPX+B9PDj/obQRaMG2+0Qdpz911tUmM6lzw8XLkQ9Z6p99lOmdW1 SOVOg0GaJEybPj3dfPNttjhg4cQi/dijj7AHP5VGXUHPBOeue6ba7o6BAwenSetOSNOefS698847 ac3VV7c7Q1ZbdaxIuHz143TnPffaeXAmDAu0EJ04YW3dKbKjTRZ8IuU65uHO0Tx2YH2oCQsL791U zg1U9meeeVbHfa5Ph2hRur6OXbwkA85NKj+GpS23nCzD3E52sS3biedqcf6xJiQYCnbUNvxdtJuL S8RvveMuWxAzudtP29DZlXD31Knp8SeetonTQQfsK9h41RELaIxEr6Szzzk/3XXvVB31WNfugVhD C7+ddtguPa07Ie646x6bxLI4ZbK/+y47a+KxTrGwlcJz+2Pwe+yJJ9Ptkg8Qi8mxY8ekb0u/9AMm ae/o6EDcV/S+JtMbaffKYQfvr4m8L+CnTn1Q95M8afUwW5MqjF20HSY6TDapk0cff9KMMRuuP0m8 brS6+4nuMmGBcMutt0tHr9kEk/a90w7bpq223NLqyfuX/7IonqEjlNfecLOOM7xLo9Gk8KN0+GEH 2yQPndB+NlAevGVfY/XVNKEemu5/4AEVbYB0vo1t4Z4vo8z3v3dieubZZ9NU7bxjUfCzH31f7Wd+ uvHm29PDuv9lzJgx6ceSj4kkBgZ2qNxx9z22+KINM+E87KADTMazz73AyjhJffQZtbdxa65hZb31 9rus3cB7nO5ueeSxx9Kdd92b3lK//uXPf6wdGKN1V8fDdq8KE13aA/dWMNn+yQ9PTKuvulq6+977 rH5o2yxMNttkk7T7bjtpQVzvWPEBR9WXhxTur3nnnXdtVxATXI58cL8M7ZhKfvjRx9J99z2ky38X 2GJxknYY0u5YOF5y2RXpJvU1M3SpndpEWYYK9D5IeW6z1ZS0ve4ZYaF05jnn2e4/5ObY29Wq1xka HyaoHx2s8YeJMG2RXSzIzx1X22+7ddp2661sQTJThsebVPfvvP2uLVxZOOy5+y5pkw03SK+89rrK PlW7Il/S7oP100cq+3Txma/+s9OO20kHfryuKjSjm9rHu+rrF1x8Wbr51jtsoTlTlxtjRMCwiMGC hVrIwPHWc86/yHQD7C0turlrhwXNeho7DthvHzPU3HHX3elZjUH0Pfog7WvnHbc3Y3UsJBlhwzHZ d2PuS+nyK6+2MQYD1NZbbmG7jZDBxp+7pqbnnp9upOiTNnfEIQdZ22GMelt6ufaGG22RyUKdujjy 0IPSuqoviObP/8Tuf5n+wovp9TfeNOP/EYcdqB2kvtso5GFspN9efuU1um/oVvWZT6xuGBv22WsP u1CXepqr+keujyTrrhrftt92K7UW/VPelP2FF19OF0q3r7+uC6vVlCZvuknaS+O4LZSFgwZ4xvCf cQUjy62335Fefll9W3XvfXs79e0tbLx+6OFHNQZPFW6SoWVeWlP95mjd68RilzyjXdfzKOpYfV5t 4fobbk2XXXFNWnutcdaPgO+/z96Wzlh+p+65e/X119JrakcsWBmPGJ8xCsyQIfHmW25Lb+seNhbo 1AeG0Y3U7hZr/IkxB53fM/V+jSVPm+xrr6XdYvvsZcai666/Oc1Qe/rOsUerXwy0seFpjREYYg7a fz+NAaune0X72BNPmQ4ZF3m5cdghB6ica1q/fkpjFO2H+OGHHGh1dM11N9p4u9b4NdMRhx6sdoRW TbGNeQX6f031cM4Ff9LYfacMf6ulV1993drITNU1hgWMbjurr7BD91XtvrrgwkvUv3ZOmyv+xquv pevUtlh8b7zRRmm/vXe3dn+L+s3LSsOAjFF1k403tGdV1EnohqGGxS3PbMb35557zhams2TwH61x 7YjDDkqjVlnFRKc/WNvQcxqjGzp96JHH7Nn2nW8fZYvlV155Nd14023pg7kyVqqt0N6OO+ZIm0ec dd75NofgGYShbqONNkzrqo3TV2n3jGtz1X54wWnSx8YAAEAASURBVDR5s01szLaM8w+8MKgx1mDo xGGU2kM70LbYfDMzDt+p9j9duz9w6G5VzRMOV1/E+MbYdc/9yPyoPSPXV/9/5tnpZpBZTUf5jzj8 YDO8+pxBDJiPsEqXw1B8p54bj2r3L+MbRoktt9g8HaixhbGLuQf3FGHIeVY8ecHG3IBdWPQhxo3b NT946WW/uJ5+zLPkCLXn4TLiva9jrrfdeZfJM3nyJtLzAJunbaVx+pgjDrOXg8zbGPuoK/r8furz EydOsLbiNYOkCqk+31Wf4E6p98wgonFz1py06aYbqW9pl6QZ4cCT6DbJdTrk5GUJdPM0P2MuyYsD xpaNNlo/faLxhrkK9x3yLF2oBjFefX2P3XYxo9h7embcpmcl4xhw2hp3otGPd9xumzRSdfD4k0+m l158RfKrf2k+NHnTjXX32yI7gvvgw49ozPo4bai8nn/hpfSG2gRzuW31zOOF2jT1y/dnz0pTJk/W 7sh9ZfQZorbLS4I5mnvcYR+A4HlH29xYcxt22WOc4Tlw5533piefnqY+urrN+5AL+CbK/1Dm2DK6 MVbRH3DoEIPpNbqn7qqrr9WzYj2bT2Ko3Ed9jJcdt9x2p/TKCyEZZfVs3fpbW6hf7mpV8ejjT9ic 5GMZBb973LHqI0Ns/KDfeYvyfPzXIRjGGS4rB5g4/U7hsq4qnC7QaaDTQEsDdBo9WK3zWHdspFfj u0NBjMU4kNzjPDHHiURvJAxO6SINH2NRpOMHDD/wFKxwIlymEw54DlbxSCvhhEve7bQqTmGX1gXD sjARhkcZDp7QxF+J08YNHPwSL0f7FCboww+8oA1+pAfPSDNfA3oJr6UXtByS8/O+Tq/YwbpH9gFq 8PHplc2kyB0H48CtA5bE0RyMBCf/7pT077/5nf5OTn8874L0nhZrtgW2FMr4VIyctZ4aTIrHj1uj ektqCWSr9siDjUnGZC06mbyQ/SefLEiPa0LM25h5ekhddOnltuCCjknVGX88P91yx51ajKysBfjq Ntn7w2ln+QJMOzAwMp0lnAv+dKldUsliAsMRE8Lfn3amvY1bQ5MAJkIn//50TaIftIkQ/CmC/ttk /PU339Bi9UoZW24jKc3TouDMs86zySj58uC8+rrr7e0bE5eyrljUs9i7WpNt3jZzISATcRYGp+lN +o1ahDOp4anKhbO/lRy8YVxdfFEC8l90yaX2Nii2GptypB/eNvFG8Iyzz9V24hftrRyTvBu1qP79 6WfKAHCPTYKYONxzrxYXTz+dhmtnDm8gzz73wnSOjAkj9JaeCceDDz2aTj3jjzbh4C04b59YsD7x 1FM2EaJpcoTjiquusUkqi/26GesrRDJWvaiJI4tWdlzE7hG+oPIfv/m9JtUP6U3tmDRGxwyn3vdA +vXJv9fC+7VK3+gVfkzaZs/+IP1Bb6Qx5CEb5b1aE/K5mrAjBzgY2l7ShIs4XxRi98wDKgNGJCZl /9+//To9+sQTMsatZkfVLrjo4nTd9TdVbzvf0hvOK6+6zvR7reCzZr2vbdmvafH/icp4bbr48qts cjhOxq7nZRj4z//6g8r3si0AbOFp8kpiyXLDzbemc9QXWDCsofu3MKQweWM308uv6GtH6EQGOd7g sujgDeB1uvwXI9LFMoK8q90dr776hpWPCR8X9d566525/enNrybiLEAwCtFWqGMmn//+m99qwT8t rbbaatYf2LFyu+qcifHL0jvGiA9kWKEubNeQ2grHJS685HLjaZN+7Ry6X5e40reQEX2y++VmGafO knwXXnKZ3c31uha37BDhDo9TzzzLFu8somfP+iD9RmMCfQp+9BlzNh7QE3wcYGGzknZu8NZ26oMP pX/79W/NOMSC6XFN1k/+3em2yKU/weOU01WW2+9UW5uvelHekh2DrJVFCxXa/iWqIxb9w9SmyftJ tVV0cLnaKA9QJt8cBbpRC3B2pCEJ95Ccq4UsYwzyvyJjIHX7ghZkyHj2eRfK+HqbLQRoO/c/8KB2 yZ2uSf1sM6Y+8dQzuqvhIluAzNDl/OR7/0MPSQenmnHJ37qHFni7nmx8eVltNAweLOYxJvI2+CIZ Oe66e6rJZ7ykG8p+1bXX2ZjI4uDZ56Z7ObVjknESQ88pp59t4yP6wrBg5b7yGktXJarLhAzUhtcB srFIQSfsxuRo4m9+f4q1UdK4P+5f/u0/bAE/bo01rb+fesbZZuhENtyV116r8ehy2322qoy3N0m3 L4gnjn5BG6FNYjzjHqHzLvyT1ZPEzs4DtDNwML7NUxvF6DZT/QPjGca8M84+L11w0SVa2I/UnXar pXtl2D/9zD+awdJlUcsSUxaA1D/Hl5/T4vbXJ59ii2/LTHmQG39ogx0/6O7iy69My2tHEoYTjH7/ yVj0qn8R7mTVNfJTftoe4zrPGuStHXybOmYR+oa+roZBhLGTxfL7Wngx1rM7EqPrk08/ZW2AnUw8 T8678GIrA+2CsQBdsjuPdoex+Hca097XuER50S0y8EcfekRj41nnXCAZF5pRid0bjOln6LnE8wYa 8r3siqssTxbjPMf+9d9/Y0ZeXlKwY+c8jYsYucFnhxPPp7PPvciM8zzL6EMY42694w6lD7emVaki 6hRVuITWTxmX5+vZzY6mGdqR8rGMh8hyju44eVBjDUe7yO9uvRT5g55T18tQiHZXUFtnjnHXPffp BdQw7WhcoP5xufVJ0nkmspCmjujTXqve7qJu4Iux/V9+9R8yLr1u9UhXOP3Mc+x5TToOfv6rupSR gB0v1+jOK54z7H5k/Dhf84bLr7nWXlKwA/MGjctvvvWWfcHx1Vdet4aFPIzr81Wnd2i+ccZZ59jY NG6NNdJ96suP6RkUeZKjtUXpgnGest+o5z875fj7k/rV+X+6xF5UPCGD3f/SM4xnme+0W5hOVZ+/ Xzzhh8HwHcmMcRBDqRn4JDPHvs889zy7vws8LycZe4g6fUFzhd/89hQ9d2bKwLOGGbZuve0OxDN8 XpQ89/wLZtjnImMuYz/5D6eqfb9lhpmHNdb/669+reeY07NT+Pc8rzWekCcvLaY//6KV5Uz143vv u9/a8Ruaf4F7Wq4Ldm5h1OKF0Cnq24wXPpc0UeyHcekaPZ//6/enmvLGyYD50ivaLat5El89NEOR ilbOuRjbeClxsmgwGI7WztwV9HKGsf1KPdsHLF4u3ax5439pzKYeVld/QzvnalxH/xhLmHNO1zP2 XM2Brr3hpvSmjj3Tr5H1P3/3h3SLnjuMVbyku1Rjyrka59gVpg5tBi1e4NG3HtfOM3Y1vfHWmyr3 H9XPL0gviC8fE3hSzxKeLc8885zpjXZ3sdrAWZqXUb/IhdGU3XnXqZ0w3rHL9QXdd3aRnstX61n2 8muv2m5EjpOdrDp96pln+rQ3FMnY9/obb9hzjJ1KzClmzZllbf/iS6+wtsXLNAx+T06bprHnTHvR gv6ZD2Bwu+iSK2wXlQ0Cue/HEGCVZT9A9IdXNT4HWXKrrgzW/XQa6DRQaKDoVYzb6vf9OY0J0ctA 6oVIeuDgBw5+xCNdIEuPNOBlGukRb/OJtHY6cHCDJ3FcL7xeMMfu8etP8h4JPUAhbGQQfqC248AD FrTAoiCEw4FX4iyNXOC36QIG3+AXPrCQhwdBBa+AYOCqJE0WDUs/BZIFK2on4bdAcWDFJz9aCwQm gPy12TA5/UCLXiZbF112uSZAD2qSd186RYYFJjo2Ear4MJkVjx58WLj6EapaPstLBOZLNu6gwPE+ hLeiHEv77nHHpF/89Eea9K2e7tLuB3YkPa4dJyxCNtDuld123dG+xsBb/st1nI23QFtsMVlvuSdI 7g9soveDE79rOyZWXXVMOl2TuTfefDvts+fuaecdtrOdCxgJrtSkECMEWkPHyMBCbaftt7c3wAsW +KQfQw4TkOU1id57z93S8d8+2t5UcXTELLxZx5SJnVe7qAwjNQlne/X+++yRvved49Jf//gHNnnm 3ib0+652R516xjmm/BO/e5ze3B6UTtDbG3Z4nK7J//MvvFBMADiusiittdZ4vQ0+0Cb8TIT4ug+T Vt5mDRs6TAaLB7SInK/jOmNlXBiQeEO0tbYQY7igbFvqLfqRhx2kv4PTZpM31g6bJ2zCPFG7UI7R zqnR2qI8f/5CGXhWsQkZiw2O/rBzajUZRDCC4VgMTRANXyKjLVAfh0v+7bbdKl2hxSsGjkO12+fY Iw9Lxxx1uN6y7qvF3G2268kYFD8YDt7VMTCMLWwv55gi9c9uqUFaWGtOb2Ufqwnm/kr7wfe+m046 4Tu20wHDErpkYsZRIM7RH3rwgfYWnC3Z92unDDJTp7vuvINt82cnFW+3f/GzH9tutvc1KTpN7Zpj VuxO23WXHbX7ZRvbhXK36pyJbLknk3rAeMKkm10yR6uMR+utKTsx1llnrbT5ZF32qMn2brvulA6T TrbfZpu0jS5ER38cl+Fel5/84K/ST3/8fbvUfdedd7I6j/4zWH2AdoqRJbou/eiyy69WPT9qZePN PzsXNt10Y9s9wI6GLfSGmLfru2g3GnXBJey8mZysi1px1l3FcMrkTbU7ZgPvl9It+ttKuGusuZrJ N14L5h+ddGL6uY7ODdfuMnTDkby99/K+s4/eSLI7B2MbdU+br536tQrCsPatKZunY486TLy+l447 6ghbjLObBCPH+Voww4M31uxAo15ZhPxJi+nRo0bbbi5489b7UO2YOkjth3bPUVYm9ROkZ/K4UwaX YdqpwZ1Q3GeE8YDdFJuqzPRTJrxM1gcOGuR1q7e09E12E9DenpGh4ZzzLrKdbux4211vlzfTDpUr r7neJvNrq79tq/7D4nzDDdYzvf5YdYe8jz3+ZHpNE3EbC6UA16/aqvoGfWbbbblEeoB2P21lu74O 1Bto6o2F2iL1R8pA27xD4xu7NDHc0g9GjxltYwhvnvfUjqU333zbxt0VVBcnHn+sjxPf0VtelZPx GSMQk/vmwK/xTDXD2+5JGhMP1Zt/6vRI7TqYph0DLOqQjTfGyHrgfnvbbpdD1GdZvFE22gXGEMZ9 dpftov5zjNo69RC7NHy8HKxxZvf03eM1Zv/sR3acknqxcdEaBrJozFBH5s6xXVTfLOy2UDtkh80+ e+8hHRqGjgF9y9r3UdrRw47Ph1Wv7CJDFjoDBm/GnaOOOETjwHfSD1Um3o5f+KfLzOhJ+7d6UNk5 rveG6ue0s85Nq4xcObHriL7G7oA77rjH7s/jpQc7bsaq77IT5DvfPkbPh+2tvZBf7fo+O9nBtMtO 7Ogaas+dQ7VL55AD99OYP8x2BSynfryz+uLxxx6d/vqnP0xrjR9vdU2dszuAXTg8r7j0fQ/tYNt0 k42s3WH8ok3Zqz2TYYC+0rWN6Z/dGBjSyYOxe7aMBBiWHnr0MTOEjlHb4eXLUYcdorFljO1wYEzd d6/drQ2ww4bnE4YA6ge+jLcs9FfSjkZ2KHLsBcPWLjvuYDuXrI8zTtTK8BD1ob+19AziLj/a047a hXnoQQemg/bb1/JDBgjX0ZiHcYy2BP+p2l3JLgZ2jbITZ9tttrRx4AU9x+mv7GSiPbGz7cTvfFv9 ZIHGoXO0kH3HnkvleEzb+Ei7RfhAxgFqx7T1Qw88IM3VEe1H8/MhC1yNVRgbGLt51rKgpvmhW9ot xgHq5Dg98w5SfXJMarONN9au5ol2HJLdXIcfenDaeOMN9TLmPhnj3rJ2e9QRh2oH7OFmqGq0ffGm jPdOfUDGwqtsF+DRGhcP2H9v29XI8V/0yJGuNWUgZRckfYwdK7PUtqlnysjLgh21M4vjyRzLZBw+ QeMA8ySOp9GOhWZllFc56o+dR+wmWo+xQOPpCXq+sivUnV7baTzaSHMpnhs//v5fqU3sZbtzX9Uc yfQr2dbSM+ZgG8MOSvtLzzM0f3nyyWmWPnr0KvZ8Zbce4/Pee+ye/uFvf2718dDDj5lxnDGZHYJ7 7rmLxtuJep5dJaPHa6abaFzkxZiC4XhDPaPYTcW8iH7GPWDsGIrxtu6fepGkZzRG12tlRNtnr901 zh1iMm6lr7ixG4vjdBjd4Et7OuLQQ3RM8pjEWHKGxgd24NIWmSMw1q+j+zQP0zziJz86yfrdUzLw rD1+nNrEkTpm/0O7XxPDLsfNaEvbbb21nu9jTbY9tFvuBOXx0x+cZHOx12T4Y/7zg++doPHlaHs5 9YT6P+XAwHrqmeemNbQT70TVCWU98bvfVtqAdJrk5eXWSI1d9EVgvOSkXTAHQn7a3rRpbnSKCre6 V3viyCRzgaHLD9WOonW9X2qXIXM6DFzs/Dpc4wF5Mj/BWPTGG29ZfW4xZbLtKKcuq05jjO0nsvJq aw6TltbEEoLk6VyngU4D/Wmg7jGM4XSs/nqMxhuSMlZ//AxeM63RgrZkH7xKWFC0eQRupJc0vXDL 9KApfdLbdGV6I7wsR8+CaQgQfsAbjBXpTxDwgyZwmH8EDD4BJxzw8IHhiIPXNiqVtODh2rT2sPCk omEER3wLw4r0PAnO6QYl3HLAG5kbH0FYiWZaI1HYx++Kc8WJhxjb5dmSv1i7SngYgsvdKmxZ5ZPL g7U48dsUIj/PtcwiGOZpdkRzxsIHOc/6oF5+8CBbIPCQ48HNW96HdaSMRcZ9mtzy9owjC7yRxHGE ionWHL0lYvFidxbpremB++1lF+uSwUsvv2KfwWVCy+6KBx6WsUOTZN7asWuBxVA4jBKUlbz9rhWm LYt1jImH7SQtdp+xN/s7a5LJkZ8xWvgwybNyuKXJJnRMkAcPWT6NEK8N1lvPFkbsPmEij6ECN10T n2emP6eH/ok6ujBeE5QFlr7Lzttrh9Cttrtmk403qo0zomEROl5v2NjyfL+MQxzRYtGBIehATTw5 bseb0jkfaoePtmtvq4UXslGm7xx7lBadb9k2ad4uvaejXPDDsMQEjQXjblosX3L5lVpIvmATYXYq MaHmq3UYK8JRZO5F4E03AxtvX6HnWBtH6Sg/BjneVHJqgWNco1YZZTu+/uqE422RS940VIxO3GHE 8bVHHnncFnbbauFx+KEHphHaUTFDx3aYeKPrdSdOMH1vpvKzw8nuQJJQHJv4hY5RfaTdMtdr5857 3MeiymQBRP2wMGUhMVh6YFcJX3hhhwrtnB0E7IKaosnRHdo+z+Ia4xFv92ZJh+hGRTBng7hiHJPi TSOTTBa6GMjYBcHOLMoCBe0Sgx0LQxYKvD1n9wDb/eGNXJQL/uw0YSGFQtAZiwGOokS+85R20213 pHXUTrg7ADqMe3//y5/ZApSt8NwZgT5HaWJMXXi+A23CaHpWPkq2hQ8LTZgzJFCB6HYFGRqR/YD9 97KFHXKx04IjYhyzeEiGDCaOLNrGa7E6V8aD0ghMH4e/CaHfIeoztDv6Mke01jr9TNv2z/GL+7Xb bJguH2YC/sSTT5kO1pD+WKxx3IT2hGORy/ELykJdYcA9+Q+n2Bvm8dIBuxGO0QLt7PMuEJ9pMhSN siN7xx5zhO0OY4H0vHZHTJwwQbt47rE2zFthjuXxZvlBGRJtd4B2ktxw8y2WJ7vC0Ad37nBciEUQ Y8BELR4wzOK4tFsVaMfkDKAfKzs6FZzJOIZHHHcCRRnQ6Y7bb2e7STiGg3GTY59WhnMv1K6058wI wDGFn2mRwsKdT3szhh2tctJuGCfYHcKxs3/9t19rB+DTbnTSnN4aDHUqhzzoDQMF4wuO4z2kcM8Z jvHll3/9Y9Xr/HSVdlewQwbDKEdNcCz+1580yQxx7DTC8Lz3HruZ0ZN0+i5tbyNd3oysGFw4rssu DPRAeQ0v/9JnV9aOIeDcoxV6oT1jLH9bbQMjHgY+vtqG/CzuzImGMi2vfAYP0p1GitPvWNQ8oGfD OzKyraldHVYP+qHPsWOK40QYHOmvtFeOGq6uhRk7gGhf9OWp9z9guzS30vELjHncvyTxc76qfXUU K0qeIVA27h2jj2Okw1jkfd3vaCOdsYYXGbSDAQPG6AisdrNpFxNpDzz4iB0tYgctOxGoE3Yx0dZo n+gnV6OlEaesGAfv1/HqXWXsvO32O9OuWkA+8PDDZtRmYYvhYhMZ2BjjyId2/suf/8S/HHmjjspq RxzGNsYadE6f2k7HHTFesquOhTkvUJ6d/nz6v/7nP1n/pb3hUAd/lVwKUP825qkd41axscf7K/nv sN3WtrP2HRkVOArDMcujDj9UOzkuTi+qX7JA5ggzx7vY8cfR4DfUBjDamhFHeXMEevttttZz4Rwz eDDOVk4y8FziaNHf0I7VVjg2x24ONDjXxtSMHTqVXOhzzBiNebrfDUMb/RsDPUeSb5Fe2eHHi4oD ZIxfffVVTe/UMcaasTIu8RyHB2MwYxw7MTm6tKWM47wQQLemKOWF0sBlty+6xxhtu3OV9oOTTqju rWJn9S/++kcqwwLtHOE4m4zQouM4E466GjNa8xLtjOPuHeYVPDcYQ1YdO9p2Ttt4LBp0z3hMjyGM TMx32EFFf8UYfsB+expf8NDhBH3dKsY3jLTz1feYH+G+NWWK7YBid/aV11xndTdAD/YYJzimZUZB lXWKjtHtLMOO6UC07L7hOCm7jvl6KY52w4sQdsWhm3DICt3+ej5vzBEu7Zp5QDvSXnzpJZVfuxe1 66dykPFHWfV3q+qNXWn0De7h4Rn61z/RyxiNR8/LAMlzBkPNBB0X5DnGs8LnO1fZrrfNN9vU9Ig4 vKCMMXOj9deztsk4wdF6HEaz6S++mBaqrhgvaQ+8NKR/ri/8VdTnlx+iupHP83j9SevaWLqlXmZi lWTXEO4xHWV7/Y3X09/94ic256SvrTV+nF2wzo7ppzX276XxlvmoFGC7l9edMMFoN9pgA3vOsHO4 cqYPa3I2RjLWorcVNCeOuQi6OlKGZHYMP67+xo7d1zEQqe4YF6gPm0vruW0OnnJKrn4tGLGcHjB8 cPnzJP0S4M+ZKNC5TgOdBioNRGdRH1H3lPPRu0ovAjGuGlIBV5Aehmv3MuB55mLphEvXxi/jZRga 4m1Y8Ap4+AFfkh+jQvhLwk3LYiiCUVuQUFB/mQQ+eCUu8BJWhoNX4JQ8SAs+vWgiLWjbvCI+QBPh wHWOUFhOgBWwMOj+0CdUwyzW90ekbrMQTTZexDZkJ85ZFrzbTOzhzYQDy0l+kMcDnYcsE57FmiA1 ZXG+TFG8MC6HC5PLYymeMSUqUBVzSu4G4MjTcmoVy3F5oVJYMHCnyop64I3T20Yu58M4MmrUynYf ABM2HMYHJpxMXiUiz1Y7GsDij4c8xgJ44X70gxNtEs+WXysji4FcIOuM3mPtbRv3EfEW5/yLLtG9 I7fZnS5MIo/QzhwmiuZs1e1Bzr/TNSkpD/9BA7QzRjDOoHspkx3hQ78czcLxAMex2BqoSSuT6rYD n4ked5n8+69/p10Z022RwNuh3TWxvULn0R969HEznDExZLLD20J2bXF3xB133233Oo3VxJIFlxfX 82Uiytu4Cy++RJPluywfFq7c32B1n+UzGq9qyeyFtHYiYXnDxj0nvAVjWzPp3LbBwmsVTVpYALKj hAmV5y01qaKYaP30h39lW52v1DGie7Xg4c0wdy7l5lfph/qy+6C0EAydcV8IE0G2eHOXwGgt4Jj4 m8iSFXHJB1p2efldAL5QevttXWqtSS9HJJmQ0a7GSp5/+Juf25tDay+oSH2JBSNtijer7DLjzfgz z03X/TLf0pvK48xwFjLh25/qDHmpf4w/vA02WRQ3nqSboDRDL5PFvVqsCbD9/N333tUEXwYyGZyg x/DIzqig9XZMs3N+4NA2rY6svnKliSM0DA1WB+RNX1ddsdi3XXKC8YW4d3RXBMc0aUuuG+87P9Xu OHRkd5XR7sWMvuPZ8Ku/XCbGCo68rKyL67mbA2MzhszNNGHnLSz6xp14/LfTME30cVWZ0JEcZcHY t60untUpWBmInrK3n1wqyttj7mK45z52hoyyO2m23mILo+POIuRihwI70qhL2trf/eJnMhBMsGMn GIHHrzmumkizK2kT7e5Yb911c97IoLvH9LY8HAtG+suSHDKjX6sXIbIYw8BBW+EYGXdlYGxYVQvP I7V4vkzHIjmiaXdXqD1uMWUzY88xRfoAC2dc8BvD4kFycZ+H6duUr6CrTAGNf4rQ/8Mhs+2Qy3Xz wYcfpIdkcObNNfwxcIETLGg/7EKiDbBrkTu3WIgdd+xRWqy6QZQqQq/gQkvfMgeTkCkEkI9aEFKS GRQ9IePLL7+qXV5TrfwsalgEg1W7CLtPuzL9SQ/Ix9En2pxlmX/efucdHdMYYLteWMjS1jAQ/KP6 9rqTJto9Nj/78Ul2LIxjjXfruC7l3W/vPS1v2JiRyIRQvjEY5bjVhcCokzYbfY5kpFyoHanUOzqJ XV/cQYJcQ2Wk4OXFWO14pfy0O3ZdTJJc8YxyLjz/ZBiWoXJDLUIffOQRMxw+KWPiP//D35jhgN19 L7/yir0IYccB/ZjnDoZXvjSKsZRF4ygtnrnjy/q/5ENedL2HdtBwDIoF9T1qgxiOMIZG36Q8KJYx Aw2jBudhilZBKa3zc5/jccubEYrjdtP0goXdd+wI5H6rCy++1F5YcIcLuxYpN+49tWUMbCzycTEO xNjjx96VP9mZMFZDduTtQd3dwxE8jjfx/LePcOR2brxyW4rHNHMMf3xphFBTxNiBIYHn4r0yHLJL cc89dknHH32UPQuj3zHmMVZKdfa8RKa7p95nR7u+tcWU9D3tCKFvxDPRFCcB3tZYhE44zmftRM+n TTfGcOt6Y4cVBs939QKHMYpnBcbO6APWxugz9rzwPrdokT4uoQTqVAH7C7UMUJy6oi1tpvGMHawY is7843l25yNlHTNmrOXPSLZokRsEAaA7jFTh2Nk09YGHbOyO+clA3XdTOjNSKT9eIOHs2aA4d5zx AmKcDKUryzi0UHJtr5d66ApDZtXWrU5VBNGiK47nMte0sUB6Yw5bS+T1nqvUdPC29Ea9k//ixdpF rPrcTMYfxmpeNrJzjHurzKErOXZOc88ezwmctQnl4rIbSHNQ10XZF2yMU1V4W3LBaR/UBS8eYU/9 s0MevdDnB0lf9tVLSpELQl3zsYGqvecC+bNqkd3FaXKpsVGv9nJNOCa+ABjE7PnuorryxNzajJBo Z+GQzeLKmxcCt8pwzryOo4BD1OajX9T4hCiIQ7w9VVEDeo1Ybo5rBROB+CJvFBQMjxtZ99NpoNNA qYE8HkRfi35ToixFOPdU64TR8QMGOWH+IrfAiTR8HOklHfESt0wvw9AG/5IeOC7SoAkXsF74gVP5 y2IoajMMQcvMA0YGJZx4CBZpEe+PBnjwCJy2H7zwcfDk2VvSAY84YXBka7FtZMQdYuA66gRZxMhV OAzQQEuXsSo+hqHRv4ITajwNgk/F2NiBz8ObtyrsSOGenvnzgfoXUNiuziXS8XgA7hwyHyYYalZk ZXMN+/G8XG7w+AvnYTCMyGT0/KKQTJh4+8vuFy6Z5c0vW4Q5XsUOjGqykVky8SNbHqIYlzC8sKOD y3LNyCXGHHmiDLaQgoAqC7FQVebFW3V27jCR/xu9neXOBe7S4N6ELbfcXG9wN7RJSJTCycQ5eLkS xNoel5krb1/1xSulzdDRsdJhTOECxdEygpUOdqYj/W67zdY6QnCq7g+53i7X5aJiLndmK/WN2hnB AoELRMOowJbtX/3nyWnM2FHp+yd+x95GMtlggeGVxN0fC+3S0MmbbmqXrPLlKSb26603qalfe+Ln 0qqQGEFiQs8uHYxq3NXBG3Ima5SRr+DwBROMCyzuHd/bBEpnkjx+/Pj0tz//qb3d546p/5J+uXB4 xeH+ZaioEctZwod60RGXP/9OXxo79sjD7cgR97hcoqNa1LVXZMamLkRL3cbEhYk7C7rx48bZxcEs sJCZN3FMDmNyZXoSIRNOjF1sEeeLOVdr8n3O+RfLKLeWHZlDr5YBPi6PBGRNWUNXhpRxTCxbAKhc MhbZWtvwHQHjJzsTmHRjiGM7/SLJUfOCt5zQDZaL60CftJkuHGBlC/FCkUGCoYkwfLjDhPbPG2yO GyxEN0qjzwnBjCfoquEqBTiUdHbR8cZ9Lel4FRmMWMjyBba999zDZGECbAtp5U2/rHebVVJaP2VX 37q6EP3WO+6yo53oH2Mo4wG7lHDci8biG8eONxbqo2V85VgKYwYVz6We1O+tureCbfi8Bd5Jxw25 7JhjDFH3xsR+mu2NItaSUavNOCSkm25MH45DW+Ky4vEyXN1y2+22wNtBO+94Q72l3sTfo+MpHCfa YvJke+MNH+5jY9HB3S+40PZMLVDJg3R3IQVQ2hHQgDkGdYajSeL+pPtgLrni6vSj759gO534MtQf TjtT5I5HX0DmH/7VCWbgukLGLHZ2TNACnx0sOB/XLGg/Tql8LX9iFqgRbLwQFUOuHAYmDBS/+s// 0vGO8dav1tfuQu7P4nLZ2vH0kIuB1frnQtsliZFr5ZV1VNM0IhwKrzLQfunb3MPBpeDet1V+xn6V izuS+FDC3/5C446OkpyncZ27UNi15y8VaJcaB4Tr+SIBZdKfKRg/xr+inAoaptIC6o81jStqXyO0 mwrDFh8i2EFGf5NL+WBoQ14bc5SLM/H82AVIWznnvAt179K1toOQnR+zZbDmBQb3dM3RGMsl3Sx0 0euN2q30+9PO0vHfw+w4EBfrX3zplUp3+enjLHr32oMXBJfZ3VLcj0Xdcuk1O3TI3cpAQDHqu6oD QHI5KZqNcNxAMVkGCo4zX69nEoZ16oCvnWIYuv3Oe+wurq1lOOWZgWPBzE4WdlXhQnc8EzEUs2Op SrA6Fo78Sy69wu5c+77a6S7aaYfx99QzzpJgJlkmabZUXqLBQp75lJWXMBhUuA+Ke624N2+KLqbe cYftreSU1GpUlblIxgi+FHncsUdI51NsJ+tFl15mu29/opceXofk76VgzJ6nFylcfD1WO4NI5y/G zwsvutSe53y8gDkWRlDurKqKkGUtWpSVi3Skkgk4Z2UApeW6UgrtfHvx3EDjHPc4ctyWsZwLjF06 SCMEqfNANmSkzdEXfyKj6rZbfcuefyf/7jTLv/pBkcqzFhi9DrA+aEedVOfsZKKt0/94hFhbj4GA +lCZZ2u3829/f5ru/ZlpX/DkYvCnZWj8wxl/rLIiH3JDYmoV2bnbjN05GGEnTpggufWKKs/r2NnD mM9O4dLxLOVeMnYXmatUUAWsSHWZPFfUQ9uJcRSkqEejNF0olMcq0vgCXVWXWQjG7kXSB3KYg70c dxoyFjBHrBz0dUQhcnJ5DGxRx6hSlD8QnyfwhUK/UP3fdYck/Z62xvPoNj1PmXNVzgRFr6XzWA3T yxM9L3EYrHCuF2H8/+y9edhX1ZXnexhFUBTEIQoC4jzPs3E2c2XoqiQ3lU6N3V1VXf10dffz3D/6 n/s897m36umq7qpUbmpK0qlMapznIeI8B1DBgUEQQUQRBBUQlEHu97PWXvvsc36/F18MGpKcA+9v 7732Wmuvvfba49l7HxPDUha0pjCk7qfTQKeBlgaoI15faMu85imcwMRELVJbkr2JKHgFHHSeIAs3 4hl58Uc44uS1J8LExxOwcAeKAz94gkvziBtPpF/CiGuHA7/HrdvbnqgeQCQWESQSwrVhbVziS1jQ Ai/9hOMBzl88JX3AcEv6kKekCz6B18MHgHfW3rjXHTcxKpuCWzThBShnLPOJTqoR02AjlqQVopEN VxBvRxiY/v43vqbz6pfavSbc1fE1nYvmLgdYxhs2aBp8Ug6Rwx6FLQcMjNRx02nZWxDrjMDwXLgk 8ht+orYofoZUJ2sAzASVo1HcywEP7nzhrpGXXn7ZkrKeSgziCwtM9A/QrgXuaXls5iwbJPEZW+BL dD6cOxN8QGcSOjmpKWhyys8bqRUrX9NZ8itsEMg5/gt1BOM1wRiY06HnsjKdpxD5s//I71o2gGmj st0q7FqYoS+Z2D0j6rjZbcERif20oMI2du/gU9ZEBxcWdA7RRO3QQ6bY5cwsBh2pCQM7TDjuxVtx jjiceZq+FqTBLPJxjJBjd1MnT7G7a+BImiwChEykxYCde364OJnLQ7mrgMWeeGtFTrw0zSN6LZxI nytWrTS5GGjztRQGaxwh4YHvTE3CeFt8zpln2ATEqUnZBy8cdbvip9cqX5PtS2fsmGJr9IZ32Fbt zQPqrB8rINH7wxEijtKdrkkHEz/SX6cJd92mei4ljNGQa9OmbOjoow7XW7UJ9nUQtnozKWSRi/uP GheTKjHosJcf6sgZE9lLLrrA5OXoDm+zeVhk2LR5kx2/ATeONnrKUXMNVT+yFTHly20MjPk63js6 FsRlzixOhq7ZkcVXULjEm638fP2PQRoDYyZ2POQVOTjaxeIni4081GMWf7jji63+3Pny+irttFG6 6IAxLbJl+Yp8cvfR0UccoSN5utNF5ckgn7e8lBc7eLLdW0r8iB9K4pGuyT+TPi5t58s1fE2Moxwn aCcUX5tisYTjDUzaX1Z5P6yvu2DfTKaRh7yQJjqEF8cVzjj1FB2/ecoWF/g6IPbNF8+4ePX+Bx62 BVJbyBb+kZqIcxyJIw/PasfZe9IZl9A+qwtnmQxyN8NIvVHmAmCO3LAgw5evuIOK9iEe8lnan7cv WB9/luvkmmM/vJHfqvr3qo5hsbhIeWFb4/Q2nXS5wJd6yVdxWCTj7iTSfERfITv77NPtnhzaWBai J6ocaOd4883bfi5ufVhv3NmRwj1VtmiYZHGbQV5Kt5bNhGIyJihxPJQhE+Szzzjd3u6/vHyFHdcM u+Oi9+/ryBllwb1M3GfBhJ/0edAJ9TuK3GApVUMoYlxTcHarof2kbMkjC9kcgzj00Klq54+3NmW5 LmLGmDJ3EtOD6NgCl89y4SpfArxQRxs5LoHdG5Zw6Wv4WhY7ifjyj9VtxXOfDccp56quL1i40BZZ 2D3DLqnTNHHmwn0W2tllxUXYHO2Nx+uIhyzfko+FXXZ/sgiAXMBdCPIauZbf5FdY8p9y8gm249Hs TjaADqjvLBRyFBGbtif1J5HWGVoY5ULwm2+7XRP/U21hw9uv/WzRj0UYdv+xEER7MEvH0thxxtEt 7th5Te0iLwC8XXTZsEl4cJz5ppvvsOMntL/x8iXKFtdKLtmOl6KLST/ArgnqK3TsvkNmjv3Qj/EF Q14UkG8Wvam3XETPlx3PVZ+APOAff/wxaov3seNfvjg0zPqpx9T2HHnYYXZPGPxNclel6Y5dUJTZ OcmO6Tu4CL98Qv1h+8QBo0xJf530wmXT7DhlVxa7RrmEfo2OKPKwYEjbwBcVsS10fPlV19ji/YU6 TsbRbr4y9ood3yy15jZ5lmRDg1wMz+XE5IMj4HztkxcPj81kLLJVi1Jn2Jcy+VoeR+slmj+WgWxa xosIj3f9mXEFPoYmeVgc4Itj9+trayxofeNrX7HdsxxnNVR0n/55QuglKVcONv2o2p4hWqjjyD31 id1/1F3Dy5K4bFFHYEFfSJ1iUfQmLUhjH9CsV9/MfVDoytt6y4ntYuUlE/c4csyOsQS7UZdyV5Lo Ij3H9ozSPjCO4a47jrdde8OtZjPoly+lct/atClTtHvrcO2KetLaeXTC4syDelHAItHJOprKY7ag XyVkYYPhRZUGS2kmlNqWXP/WVtHGGrn6X3mcDhjciQiYvth43DE6BnuAvfigX0Yu+jE+RMI4hqOr 8cDH+VLzEi/kSAgRF/jEYBvYNtcR8JVg2pnXxJ+da+wa5EUw9ZGv6aogQDZyq+LIK4/5gSqBss7D 70b1m7fosnDuuiOdRI66HBf68MOjezoNdBro0YC3Cw6mlnm4rtxeKz1e9YwqFX/BCxSvalQ9f8Il RFw8wCMu+IQLnIlD4JR00BMOWsI8bZw2bYlf+p3af9s8yrjsb+5hzeAeT79EAoYbieEv4aUfpoMJ p5FaVlhJg7/9V+JHGsACHv6SbuiXv/zlM4866qgT6Iz98XKwxPAGtUUaVAm7Cyia4TpLhqgfEUer XfIpwMGn5BbUwGj4uZuG7e5sXeYiRT7fy7ZoBuTGvsEvUTNqLB74rNOZbL4kwVspvhLDggT3U8Q9 Hkz8+ErYCh0v45gIg1ouX7z1zp9poKsvbehOFHbvMJhjwsSAg4kdl3LOVOfPue340hifOEdu3uDt pTthOMrBIgqXKnI8iUukcbl/iYHaaSfr0tmkBAYt3Gvz0MOPVXff/4AGOJuqqdrBwJbkf/zO9+0M PBf+zXziCR1x2tsuMma3hW0zT9lmAMVnnqffe7/uDXi74lgcb3If1d09P7vrXpuYTZp0oL3dYwfO 7DnP2GB+vRYe+JQ5crIYxSJEPx1TbiwO8dWm+x56xN4WM0jyZ5td7MpbuK/89pdEz1ETv0vgUX2q +XW9qeK+AD6z/fzzC6vFmpjur8+fc7FubBlHZ7ffdVe1/4T97DJHtuJ7w5UsJpW5Xxa7QpOAh8Rz gy1CMNlhMvDC4iWaCPA55202QbtZF45zoekffON3rVxs0JPsmMERFzLyVTqOjS1dtsy+PMWlz9jb Q488ancvMaBh8MTbQb5mdr/yztfn2N2Azrm4mjP2TNo4MveMvj7Cl9m44wKb5Y6I6XrDzsXXHNux Oyp0CeieWnzgXgjsiok6djR7zrMW5q06Fz9ThXjQJZPyb/3DdzTxecsmJ9w3wsIN9+JMUVrLNdm+ T4Ny7m/AXilXLiS+/c67bZGG41YsFuzJbh0NxtAjd0fxBR3smiMaS1S25IdFOOxvsnZ2sU2eY24c AaKeLHphsX1Zjok+F+GyIMHOKi4jZocWE0Imjhxbw9bZtcFRMiYIT2tywte/+KLMlKkH2zGo2yQf A0rus+DNPpex82lrdMBX0uYtmG91hwUnLnbnbgQmHm6kaEdb4XVelK9a8YUnJu6va1LF4Jw7YFgQ YccXl9my0wMZ5qiOozvu4WHRlonDGcJjsYyLSVfrThUmUUxwsQeOYzDp4KstJyntr0rn7DZkMsFn q5nA/fmf/nur7wyK2blB2zozLSy9tvJ1WwDkM8nwOke7D1icZSJEGbFY9YT0zkIRx2JYUGbXHRNu ju0coYUnFtv4khr1FrtiRxN1hjoS7TETfdoWPrUNfyatr69abTw5fsZCJF+/4/6vL/3WZ22yhC3f dsed1l79qXY1sOjKAhr2yVL0U3N0r40mN/zdo7ZpgXTG5bncVaRCoACs2UcffHKdYyYs7qHrQ7So zKSNHUEs2nJkd+LEg2wiRXnyxp+8s+jIPTHIj+3wxvtvv/VPWhzcZPeBzZKts7DHpa58+Ywjf1xC Plm76dAXuuMOE76Mxy6pyUqD+s2DbuDLgsr0e+7TQszrSneL1Td2BKFzvgyJ/T4v2+aeJj7HzRfB uFeEsr3y6uttgYXFDS7/fkgTPfLB5fZM8Kl3LHDTDnDUmIkW5UL55rr99DN+qfKeY61u8EUm+ooX ly6Vncy2NoZLqZ+Qny/1vab25OO6c4UjKqZga/+kb+mTyeiDDz5iH1PAzl7R4jv3M3GPH352MnE/ CV/5u/WOu6xt4utY3FXCPSVmd8LnWDB1jHqC3jmS4xNMU51y4CXMnVnT771Pfehau5OH3TosIi9Y tMj6HC73pq/GbtH70qUv66ha2S4utGOblCE7IEmHPgLbo72iDvHhAhZePf1kVy6G5986JfcyPuFF CotR3GfHixPaBe794mJ/dsXwCe6bNZm89OILbEcRrOhTblAbsa/GAOxWoy7SV7CDgkXVmbOeNDvg gwFxrO73vv5VO64UuoAPbQ8LstwdyNc635Uds/jKJfXYMfHTpk6xPv1u2RzjBb/TZ4J95etnGnNQ n9g5yyXgHOemnnCPFW0GvL+iNgY9z5c9cv+eLUDIJlic4HJqXrggO0ffGBtwBxPjF+y1fNhNywuM GTOfMhlph1ksx2VnD/z5khkvGaiLz1sfNlflONz6Z14e0e7epTqHng+eMsnuK2RRhS+3cX8PC8fY nC80mqGaHbBQSt2gnUJXXJDN5e70jVzcTx9Gm8/uEmzjZu1O46uWHFGn7r0kGec/v1B9J1+kXG79 EMd/OarKkUh2iN4huezjAmqL4cWRMWTn3i3ab9oiPjjA+Iyvw/E1N+7/YRxotpYKlv6Vo38sXvBF xcUvvlgtXLjI9AMvdv7CvxxzYaUTJkwQzatWbuza4st9LIiw4MudSdQd7jvi66nscOVrocj0+c98 srrskovsrh7GZ4/O0BcphXvEYYeZLbNTj7vO0D+7thfKtm5VO01/y2ILu0MZq96pMmAB/RDZG30o LwKm332f2cGh06bZXX20jY9pHEa/RL9x6CFuJ7TJ63QMmMXR6ffcq6+uLql+73e/ajuq39Q4g3vM HtSYFD3TlvPhEl5+PKiXiozbkGM/jStoKFDjUNOlvryoF0dclbBk2ctmo9gV+ub46mvq7ziyz/UF jJcWKV8sAjIWZGyJrHZcVPqmTjyklzjcgcaHF2g3OFb3f//l39g4j8vL6depB/Ujv+qPtSAmVB3T +ToNdBqoNRB1hPkFj//iac6l6dPnzZs356qrrnrcEL26U7ui4oW/dBNqD05OpqAPXNzgWeKV8MAd KB54yAFu4IU7EAx438dHkn2jGkASiEQQIPylW+I0iAt84IEXLiUSPAMGXgmPUgs38MIFjh83/BHG 5WnEfeUrX2ktFAktSZFsxqmMbYiXQOYEWwItf6C3wE5dAtu0jhG/TPgY9POmkgGlLWoFeVNIkURE UAsiHCYH3IXBBPlwDZwZGE7SQJWLIXmemTtP+d5mg2oGH7wJZtJCx8MxBM72n6ijGUfoAr/ddHTJ JsJ6e0RnxTb244871iYCfIKaxQQmuEwwOE/PIITLPdlZxFvHtep4OYJC3BmnnWo7HFAVsjP447Js Bp1jx+5lE/Sx6tSnaLGHRSMuc2QnCRPTL37+07bYY4OclG3yyqIDO1EYbDDI4jO4LBYxsNpDX5Zh wYSFK47IsAjAnQpMKtete9smOExeP/vpT+gi5zEaZEiyXpXaQJDLtkfrAsXPffZTNolFDi7zZuHg fL1hZ6BDWQFnYY6OnEUDwuygOVI7RbhcmeM5DPaYLPGMHD7SttFfdumF9oUgk8G0Y9EUaPJot4oW ERiUsuuIQTUDau7NYWEDfXFhMEcjWChjUjtNA2iN8EpuZh/IxILKO7ITJuLjdTzp33zpc3qrOF6L CXNFf4DZH28ZKcc5mgRM1ISLzyfvI5uyXRlqRPlaDxPxww6bZm9NsTfyPXnipIovjZifBYfhI5Rn ymGMTXSY5I6VHrjLau06P/YwTWXGl8NYzEQ+HnJu9qw3aBsl7wbZG/ejXKwvbHHkgYacCSs7RLDT IXIp3/WyVQZb7CBjkjRp4kE2CUe38OMoAhUf+yR+2tSpdikwA04WbLDp8Rokc5k1aTAZY5LNYhdf nsOW7bJVLRJw14aVhQa2TATI82jVB3jzsoCy4KsuH9POHvKPTOxU4l4t6hplycBzvL4+xsPdTfuJ Pzs4mFSxc4DLsrkEl8lA6AbtkBdsjInqOC1sMali8ZVdIp/71Cft6CE2ya4i2hNsFRvBpZ2xi3VV V1kkYQJKXuDJYgeyYWvcb8VCAcdIp06ZYm2E30m2tTr+6GP0Fvo0o0EuFk1YSNxbEwsWMbmgGjj1 8pSTTrIFZY6yQU+5r9fkHZqjtIvnJNkxizzsdmGnGwuUuMj6khYwsGXqDpdFs2DkesBCeHxHJhdz 8/U98sAkDRr85IG2jeN8B6uM0AltAsdu+FocO+PoB7A69ED7gR1ydIK2jyMbXBDOLh+O2eQyUPLw X716tbWf1Otxsj8uH6eu8hlx2hwuC6f8eZPOhJZdKuiAo0xMFlhI4kth4PI1JvRC3eC4zacvu9Tk e0btGfeAYT/Q0mZzh9GIYSNsokz7xE4dvrLlj5aKpHu7RF51FDunvSXfHB3k0m/aDOyIY89HaJGH PLPbjjLi3hcW3rm/I9o1jiLyla1DNHlioeNp3StDnaf9Ib+0sbzo2FOTG6/b602UaeJHmrSLXIhv i7pr1yvv+2ii/zmbCPGltyXLXrJ2m4V7W7iT/BIvP3x8gclb2Cl6YMcaxyq5BJwvU3JhOIu0HPVB XnCPP+4Ym5TD0+xObQlHQdDhierLuCfMF+c9KZI03Y3azWwfvV50/nlW1uyypX7vIVvkonzqStgD E33KgzaKdvFw6WKi6hfHqFmoRkb6YjGyRW2+qvgf9bXDCbIZdFynnrxkHqM0OwtYZeVPvXE9DLW6 jM2GreOyQ4d2HL7cS8TuR3ZF0X7FBJN2+ZCpmgjLpq1PVNkoM5rIX1hddMH54q+XFpRB8cAbm6Wd YVEZWuyYu1dY3KV/oDxY4KCdZ7GB+5pYzILf1ClT7HjzNKVLe0X/zniFBbTPfeaT6s+OMT/2RB4Z c7AAwiI7C1vsXGXcAc355+lrrKqX5KOWU8qSzOzsJG+7776b4WNz2D4vdbBvjjrykIeoT5TfONVF PgTBGIzdMdxxx+L+WPX101T35j+/wGwTfe+uvodFCV6q2IO5Sj/sLsX+WaBmZyf6waaRgUWBaao/ tAnTpAt2Nb24dImNxeg7pqp94s42Xg6yiDUamY85ymyIBRsWUFh8o+5PlozsImPxkjqJTaM38oed MRbgpdII6Y98cxSNl16mK8nJM2rUSOnV+w52YaJjvtBGW8COUi5A58J8N0QjMXr6SdqrkWp3WOxi sZhFdurTxIkHWT/GeIJyp27zQpCj7dyFSD65a2q+FqR42UN/x8XeLNS/qkUn2m0u36cP4mXGu1ow O1xtC+04fTULO9gLCz9j1c5zxHrR4sXWZ+CnPpH2c9LRFC3w0V9MUNnSD1Fu2Mab6gdp26l2l154 vsYUF0g3I628WNw7UPnmJZPZtWxirmB2r6J4sSuKsQGPadFVaeNmb5/U1ko+2l7qG7a2SfWPMmWR njaK/o3+jDEDL5R4uXGY7IsFVMqQRU4WfxnjkRc+qsK9oZOVH8ZfvJCtbT5J0qetMCG7n04DnQaa GkjtXw1MlbgGqN8ZpmO482OhiNoVf2Dh5wnXQ/4bnTmh8AceLolFOOLB5QEecYTbgkUcLnHt+DYs 8IGHX973f9qMB6Loh9cPBn0JZ3EmMtEvroRBxx80wQM/zzD9wSfiSryA4cZfO77EIW749ddf/5+/ +MUvfoPJR/kQmTXYCJRYhb/MXQb7O27I7dkhPjWyD1iHZGWYJwsXzAdyRSdW7PjgCAqDFgAMyBj4 syjE85YWSphcMnFg0MhXI3jDAh40wJhoMblgcAM+Owvo2BjwMoBjYMkRFSaTDDDofOng6LyAMUBl UspCBIMTFgbsWI7SsO21yhPiIYctFihsapVMLNow2Yeex3YraRAChkRr6IY3XUyoeaBn0o6c6zQR QZcBY3BCxecNGrIziGLiTt5HjBxuchiTPj/ohIWCDZo4MdmBT3TSyM7nchlkBAwZ2DXA9mbuemDQ xT0BTJwZLPCWaJMmi6N1weozz83XLoJ/qP6f/+u/ayAz2crAc4jkvY8t8GhQweAUfZMug3YGPeQL S2JASd5igmdciEB3ks3sQ3KvlY4oSxawGBQygUXn7Lrh+BsDfu6cQr9MkBjI8elz8NcqvfWyMQbL 5A874Us7lD35Y3dPlBRy7KlFOzuiJPtAf0ymsCsG/GNGj7EBH/aGDTbz78eTkAudUbZc1M2gOCY8 XBLMgiM6YTDJoMtsWbLgMnHNA2S4SwfUD77Aw2If+UF+yox8cgkoOPwxsWVRET3x6eYxym8s5nEs iC+klWUh9pY33naST3Ym8bytnRvQYT/kmQUgBpPIxwSGwX7UHeoE+SVtJrfkmbKGJlce4+p1HZug HiA7OrTFM6UwQtH2AABAAElEQVTtuvT8UvZvqUx4O869VchBORmObGOj7v/gzS9ljyy0FeSfssO2 WLQemQanoRfc0bIz5Ma8eLB3dmYxQeCydd7AUvdYECMtdLJRdoKtom/Khsk2cNKnHFj4I6+2e1CN BQt1LOBAT96Y2EVds0Sxa7Ub4DFBgxcLOpQ5dZE6z4Xe0KEfk5eyVfkhL+2S8aPKKSPYMAsN7CSh DNAVA3sWalg0Kx90wCSJyRA2idyUGRMG2r6QmwknfNAL+WQiRJtIPWFnBpcK7yk9MXHmOAhHDtEL 98QgD/eeUCdJD1mpc9Cy4CiQlT9tNumRjXjAx96wP/igF2yJusTuJGSmfYUH7QELWbyBZ4KO/Gan Uoq3BbqYXvnCJhp9TEqMcibfLJKyAxCbwrbHalGKus+knLYEe+IeO9pe+hPyw8Ii99Cxc+vv/9df NeprmRd4QE8m0SkvIex+FGWA9oC6TF6Rj/pAHBNrFlXQA7qFB3Uq7I78UPDeg0dqXm8oK/hSV8Ju aCexU2DYmtkOHCQDNmX1JdpFFgy0+EddRxfIQF/8L9/ze2H++//5X73MpAMruKhIWQyXKoPlYXTA sR8m6KRPG8x9V8SwQwibpe7ki7QlF/0Ui1e57sBQSdKuYQvUR456jVU7jb7g63pBkIRsJOrflRfK 0e3Y9cgCDnywJ2yFOk5bAg/SxbWFetjpod6z8A8f6jW2iz2YISqevoY+mjaCBSazWfnBp77RFtPP BW9jamImWeXQjmBXyMZYhfKCzh7pm8UCbBQ4+SY9yhbbpA5gw1YmEEiH1Fd0G/0OakFXlDuPlZR0 wwsU2m/qMm0QC2i0MezeWy97snZCeeYLlVDSfjM+QA/RF/B1LPox2gxslaOEjFtpv+jzsTHqs7f7 WhjPcnD8TV9SVDrYOjzJM7KDX5epiWyyg8PuQlzqDzIjPzqjvfALq1OrgsBqk8ky/MgjskQdQV7G OLSrpIUMfFQBHuxgph8AThnaCx3hkQfqMnZFvTI5JQv5Bo+XgVGXqbO8QIw6Ty4Y66Bb6iH/0C8f 96CvCxtEb/CjrGgbaIfRO+0PeY56jA27br09wfYY32FD0JJPbI62Luq9axIToS/w3aAoiHLaQ2Ob Lbq4nK/J8mDnLGyiX/olxj6btmyyPpM+DHvD/shzlBeLfuSbMiKNceJBc2HGY1zjpy8wIju300Cn gR3QAGOZG2+88cdaM/imyOLrA0xQGDBQ2cIFRjhgAScccfIaPnE8JU7Q4vIMFPbYOj5wcWmZg3fA gYU/ebMTaWVA2xPEbXg7PBAecP4ioRKvnz9guPFHWuHvFw8sFnpKvICXi0NtWEkXeOZqoegv6oUi xIe0eBSkAQbKn2ew9jlmO9uJT0ELcfCpuTf5+LCUWODFU9AmzkVkP6+wWHkp2NCZ0OnwD0GYxjHJ iI6NDsjQPdo6P4EEQ03gy+LIgP7ooJls8QQMPsYDcBKSDtT5uzykT78nBoakaBv8JZE8faKRlT+w Er+YEDG45jHZVQWQLCVn+UVESGpZXKvIiczxFTryHwOk0A2UHEXiqyDkc/sPHPzSXXiHHpGXL2sQ Bo4s8ZAOciF1DCwFssEQbxq/98Of2ISSY2ATJx1Y/fl/+GMjDT7wCqlKv+dVMrzHhJAy1eSRf5Qp CUAnWZjQEqppC5/J5rhggL+NRQjyqK8WQQl3gU1vliaMRdKAkZ7SR7fs5rEg6lRhDxEf15rzsTQg To/rBxlIH77csxGxtRs6Bp9oTgwzmYUfj3FIefc0XHpk4YEeeQLfYPphQu08ybskFUEtv/hbal7m xkuMgNV2JCYqe6sbkqW0C8+b264NaCUlMEkiPJHJz2Wb6JjHvtpXZN7owU80lLHbUMqUUaUf4XCf R0FuefX8eppgwtNZRp2q89LQMYz0P45yQMMAvswfCFxWivJDH02RPL+W50I3IY23DV43lDVx0z95 qO/sBEMr4mC88ZM/fxKszKxFOEXUDQodeXNdgly8UVJpB14/PQ9eujDztOoyQBcCt2jBjMdwqesm BnrFg94oZ+do7YzySv6sIBK/KBcFLb+eB2QAwH+X2eGehEVZnUv2Bw4UmqDxeOqeLjGUlZWFtRfk x+3d809bQU1Nssk1+cEhT4grhvBBRtcf+Ko/lJXyaG0FdPY1ruANR/2JKGzHbQmGlH3ipfiNWkjh uAdHULn37ULdrWVtfmTEpPOA6xrextrckPE9kpMMpmPFYEOCWH5cD4KYLUlupWtpoDJn57xav9au ClbaucmgzNR9B4pBV542dgx/8u39ELplG/uC6vpbbtXOugPsGN+f/8m/q07W0WEm5P6QxxCm9psN paBYGkbYCWHXFQiKEznyOdxhwME365DdJLUAtsfz42XtenHdOGJguQtH9Lo9OyZxsx1kI9VUCZDN JAIOjgAmKzwVDjshpXYatEdhc8ZFPEp8aOCN9vizdKAgDTO3VObq57Be+0eWU1lRB2hnkJHqy0JV 1Dnkx37q8gSB/94eKTl/yJ/gpOl1y8H0Lya/wZOEwmPHINKaLhUmceyMOm9f7CIMw9CVcJED3ZGG CUu0KKz7tus0PM2wD0Jhi8aHsKOIm/ut/KnrpKxKRBpWNkCUFvTx4Es5sGKlb0CX2D5o2Rals8YY UJF1fYGJ59tEFjlmiTRW32CkCNohyoes2iMwX5S1fiLBPM0kL7BUVq4jzxMMwIs6TN6kQFowBG7I ZbqIBD3axwfYiih40E/wMkD6URJ275O3Mcba7Ij0wx4YDyCj1x9kctlNhfBBTjkmG4Esg/JtZRT5 UFxqc4wIRCd3H0EE6p5OA50GBtBAu5JQYbweQcBC0U033fSjL3zhCywU0ViDwB9VFDdgEcZt+yPc po2wSIwm3BLe9oMDjAe+IWzAwjWEFA9ev6eN24OT9sn2wNsAGCFIW5tlOPy4PEHjoeZvKViJD1aE 8QePcIHFA17gRnyEwQEWcMLxAMuNtQNLsoQmLE/AO0uHGmlCkKNG3iWIZBIfOkZLGpxayILQvaAr Xt1DioIPHRAujvOJWAf2+U18LKWMnIDq/BgwhyXB2TrzxKbRySVa76ixex7nY7+KAJo4Zz4NHkaj H0tImPpPR23zBqMOBMeBl+fSByHlQMQwxccvsGURF+x4+uu4RxaRxGTNKdGE65i0bHwm7ZScI4WG C4IVi9uDTegTldGqrHwAG1JmAs+/3hjZk8BKWvnyTzgvXPiCbc/nHpYvfvYzZpu80QM1dOPESYQU 4G2di1CXFSIysC2fXj6WEUOxstmiMEheaHJdSBfZy9yQ9dOjX2DM8EkStgzE0kJTSBs6DhRhNR6T AQPxZIs4GHpZuXi1jolpEwCzvBd8zPIN2YHGx2idGq8N3i0DHtGwQWhtsOiDVcdo/lKWYmJWxMCx fDxvKh/jgyMt0G6kx2gFixIMeLhGD1LkyfhEoGgrQBCef2Y4qEs3yWVo1DXiSBUPfEiCSC/PSKHW krG3wXlCdlLRWPkbP6eqaYWJTPobyI7RPRdPk3T9yIZEs9UbjRosn42tTeYG2APIkMsKa+MxYGZv +cZeW4/ZdZLBLko1P7Q+0beJjXGxjLao66DJ7ULWQMmwlYG8XNOxxagMlHfn5hqDtnxyvSqB4oCs TuER5hcMaHBskChgrKWbuqxqDNd1aYHsPG3qKLcpiJh1g8fTdJX22nFPORqt5BH7rTYzpF1PurG2 g0HZyOoz+nDDccceY3bQVEvSkfg0eQOvdexYvToWkj026W63OUk2z6D3yik117e1qxnJ+JgMISDI 2J/lS7aq8vU6ZqhWD/AxuWXHGxfnshvhwo+fp8+JHy3bTjoPPmYdpBdpynqKtALa0yYTIR7ouL78 3XVD+i4XiehJjgcUFH+rjwASnzp9kGsdO02vjuHReBr1QXEW7cwjCWjC39tWSCbTpbhCK0RrR0uT bSToEjf5eDuUG1rj4ynidfuFoVM1xwzorFkfkMFwkjwKibbWMW281Qz0GX1/IaPpuW1/ypXXO/hQ m/0fdTZ0g3wswJSPtU01gmfeEFL+rG1wCiA8SToP6Jds8JhcLFYaokN7ytNRDSXzEaq1LSnOHNON GOm/8TV2ruM6RUvU+q2SFL+NI6AxPvCAttCxGKMLoOXTI6/Stx24hhQMEx8FGR9rL6Jn2XDIvOza 6gL46QGsp7YVQg50CsIBQV7pJOq0RxnQ7AG2RlrYtkA9sgvWr11vtsdilNqcOnUvGUu2yIKFu59O A50GWhpIlSRXZKucwskVtewDAovI+AsYfANW+okvcYhrP9DxhAs+TxmOxj9gxAce/oEe8Nvpt8MD 0VaDXSgKQdrCleEQpJ1YG06YVjp4htumIxxxuP34AOOBX/lEGiUs/PAa0q/jN4TgmLAbA++QxiZ6 QjROQiwmfi6x4lp8Ejt3Mp8ayvjSv+QAIbwNYAgDsoJPQndOMSEj5BG85Q1Zgk8jT6Aanzo9COpu 5gPwIUF4Bmv3ZljIE+AB5Qk+IV8QGG+lERkKeOmm9EucD1fHLkwtUu0zsSIPjB7swR1ixyC+9tXf 0X0sy+zeAC5otDdNGSvwEyD4hG6MS6GKPvmG8iPRsdLeaToWo7I+uB27LmqN1D7TTuim0PGvnR1/ qDo2QzFV1pqtfb+5OlbOzbZcF+a1hgVf8XhEURnVjvbYsfCTSmvN1j7jZnz08xtlx95G7aZ7Ui7W LiLe4OUdCYWKvRxqHUL1q6Zjxh6HTJ1inyBHfj7J3nNsKmwg8k4Yw2mZSkSbaziOFuFmeyyo8XUm 5jWGQWhUCafgI5xfLR2TP1umSRkq8+W5Nj2Yt8i7eTsdm25Mg4W5hZqy/Q1ex6xhZLJOx9KstJH0 idPUTQkgZnB2vMM6Fufu6TTQaSBpoE/7Vvd5DS2VVRZ/GQbRK22DxHBY4MlVPUW3aYMq8MIt4UET bsSVbshAmuCVT0nX5l/iNfyDXSiCKBIPBpFIW5CIx+0XF4JGXJtvSb89P/TxV/IIGLSRRgkDHrLj t6duaEtWEZsybwN3WBXkhRfsmk8fPIGMe+JTYuQ5gSWp6a0Qwc1LNoFsDAwpi+FRHsGvPwnRACwT MGXWMyAfMGBZ8gluikl8skqDjyfmvxmnBjoHfus8OTMYNB/H0m8sxEW0M4lQ1k2dmRTlDDwHH7mO yVValgjdJHlMOstDS8eSkW3Hp51yol1uy/02W3WGPS88Bp+cc3kSnx6Q57rQTZl4je1Q/e7qOrZ8 InfKRwrvsI4t68FMCjVv4kncb4yOPc+eXffXbU7SB46eTsfSQdKFa0RmojCgqMFuOAbIXifydja3 o5kPnrC/Xxcde55CN66InGFXWMqy74QJ3bhW++kYHkPVDjZe5CTVGZURBR+PqPkkxCTCrmrH5I2d RFwKz2CUxZxGfsloykMocUAduyoNfbA6hvWvtx3TytWPW4V+B+zzHKPWcU1b+gyrYX8eW9ufh4NP p2PpA7WbWjoduyJcG24pA+nGdWXtKaacSALaw0cRjuIYYX+RRud2Gug0MJAGUq1qtOsOa7friUMi sCqHn794Sn9Rcy2acBtGBDCeNq1Da3jgtXEDr3TZONNvkShoSavkV9L29bd34vRFErDNmETir6Qp Mwu8DJeC4S/jSh5tf0kHTdCV/pKmjA94D662eJZ8M9P+2QqoD1BrpimcOaV9GxYmyRyRvUCgwg1B HeLoATNXSLxPMC4pIksdiJmPYSmkR95E5WEBiO3LJ2FA4SwLPqJoqsm5lHwyefY4l3b6NX8QnU8m SZ7gbvwTDD4WzsCPXsck3aMbARt5VPj9y6pXxzRGHLHh3LpvSfaM2q8n2lZTlqaRvmkp+EMCB+dF KB6HJp0m4K6oY5NcP408Kvz+Ou5TVlDlikOmjbv/fhAdZxr4OK+kSnMcumvpGGmQy0V3me1XP52O S91QhKnsTDduc6Y3hbP9WUlLd6ZEV+xvno7J/I63x2GDpjr9EEavWcdqFEOtqPkj13EjdZfEfl1w RGo9HtGUGgrlKdMQdl4Qc8TE3lji17GqOgaq2v6cptYNsSUfePE499qOPdmaj1PVfH7pdtzIsefe frO+PF/1r0c0NQXFwDoO2lI3Adu+jsFymQI/ILmOK7rTca2d0LFD6rKqtYivtj/Hq2ODU/AxbP38 xuvYFWDqMZ2EopJmsh0XGEYCcoaFv3M7DXQaaGrAG5ncrlukVx77zfVIx5b8XjAgRa3MHQWwAttw Ag83/JZC8dMvLtIoaQKvhBVsGvwDp5QHXODASnjpB6fvM9iFIvAicRjhL8PAyqed+PvhB22bjnCk gz/+wA/ciAeGP+DhAi/9hBmklXQGM7hBW1EWZGhVC0MgBrfNwWBmlbDbSbf4WLR3oPBJQ7uSifsN r4htsy0onE8NCCrPhhM2yBPvmqL28bYzHvdGZ58inKmjBJ+km6ArIs0bfBrxiQ+OeYlMfAyWgSnd TExEG7ZzdZyTzmlKNAHLVMNvuElpATNEC2RIwUl8BI6z6YFR8nGFpBhzICB9wyp4BXXI1op3pkaV Y+TZFew4y5NyQ7it48io4Q6o48Bqur12bCp05YPqTJ3o/XSc1OxOS/LEByfHyPPR6zhsQIJIUCbb WR7PpduByZYAhWO4jXw6H3gN9Py66rg5OY3cuyKyOuTZUR0bp8Sg5PPrrmPveZt93i6l4yhiuVEu Xh9SqKdyCG71yCKa1InEnWY8C0TQAc0x8uxwW2HE3hsEn07HqRj66CbKiij6GH9SQUXQSqSAtfko 3KtjyrGgybwclmPk+Ujaipz+h2vHbrxuf1mX6EcRWb0WkTWQJCO2gBlyYcfwMFjZVvyG6Tg61aQb 01b8oJ8d1XHSfOd0Gug0kDSg+kT1sipWKMVgbaCjRaMVbmCFCxfiIr7g2uMtcYI+XJCJJ7w9fhFf 0kFbhiMdYCW89EPT9xnsQhHM+gkamWgzbyceeCFsGz/CbbqAl27IAqwtU6QDTvyVtOEfok9gNtLK gmVPoMo1mNALimi/wfLOzPEDtWbjRO2wY+s3vy6NzBSJyEs6BuFHCdV8MofkUUyKxMl48tDNZnnT yCjHQ10kacyKyOw1PhbrPzHCMoTEIDk5rUzsJK1gwUzekk+KyXwiOuC4Sqvm5wm3wwlduHUMvnJI Y3wENA78fFAdI08k0+n4Q9FxlJWVa6fj7evY7Nw05T9eRRJAhppsFSfM1jwNO3b0HE+wwackbvJp oP06thVJEQPrRjEpEifj4Uk6Nh0lReV4Rf+66zi3k0kvA7bHu4iOc9nsqnZsAjZqXN0XdTruqVBt +xOCPaHGXN6l/UVkIMsdiI+hlHW85BP0jeIS85QoTvK6p+STaHI8vBp8SuImH9Ay3Udsx4gZj8lA ngJQ6iYic5zwasSCJiHAR/GuAv8t0CMiISsmReJkPDwlH2dTx0OdYHjtycRNPqDlqJ2l48HwSWKF YzKQpwD0ZCBHdJ5OA50GCg14VVfNSZWnnNu3joeD6ugZO6gKhu6tq2IzKnhEfNsFGxzgkRaw9hN0 JXx7MOL6xZf0Df9gF4pKonYChCMT7bg2XSgG+PZwgy74RjjoSj74S179/G0+23TMp8TLpZETKhYX HCYWBUUwNHcgeGZWK6gAJW9wyqk0UKKfMKBQm9glajMy4yVPg4/IcnzJIvxFZPZmTyAN7GbU7HHc CIY7MIcmfhsv6MON+HY44O3ctvEaulFkO77Bp4jM3uRp8BFRjq8Z1L4iMnuzp0YbyJdRs8cxIxju QPQBHwgv4OG+H347tz10JUD+Mhi83W1GZrzk6XRcayvrJoEGr5tOx23dDaTVNl6n41pT4QsdhduG Rzjc98Pb1XTcljfyUboZJ3s8NoLhljT9/APhBTzcoG2HB4K38Todh6ZqN3QUbsS0w+8Hz/EtwlYw 0OQqpojM3uQZfFk5q2DcwycituO2aQI14OEGfCB3ILyAhxv07fD7wXN8i7AVDDS5iikiszd5fhN0 XCij83Ya6DTQRwM+lfe2wpqGYm6fjp61qUArsCw6tSrmb8eV9MTxF18yK+N+UX8pA7wIl7DS/75p 7chCERkqE4swieDnKROP+DZNGzfw2vTGMP2UfAFBE3ThAm/jtcPg8OjkWfmuAkjKnChg2NgmRNih coMlWHGoi/ju6TTQaaDTQKeBTgOdBjoNdBroNNBpoNNAp4FOA50Gdl0NxHweCfHb7N/ErX0WjA9O BLhcOwkm4UIQ/nCdSf9feIIXuG030oQ64tp+wuAFbrglXgkLf7jgDfiUmR0QaYCIUmBQCLcTJRx/ gYPLE7hBNxBe4IIXuLj9HngETvAPt8Tf1tpGVqtf2PUBL22KD+qcYgnIwJJ35+800Gmg00CngU4D nQY6DXQa6DTQaaDTQKeBTgOdBnZlDTDZb28tLORNH8CKSX+4BUZjrYOFAnDCBa9NQzhwwOOvfCIc dIEbOBEfYdzgWcICL/iUcf1gZbz5d2ShqM0wEg+m7TDwgJW0+Mtw4JWwoCOufIAHXtsFD1jQ9osH h4cNRRGfCGrW5RV8GSu4Qmwsup9OA50GOg10Gug00Gmg00CngU4DnQY6DXQa6DTQaeBXRwP1bN7O GNXBniyke423g5HXJgIn3ODVLwysXLcocQM/4iMcOP1ccIJnv/iAxfrHYHhWO7JQRAIlUxKKxNqJ Ey7jSzr8EQ768oxexAXPCIe7PTg4wTPwSjfitpXnDR3IrydRJ1TH9GOScwFlcC4RO3+ngU4DnQY6 DXQa6DTQaaDTQKeBTgOdBjoNdBroNLBraKCYt5vXJv/1CkApZHEKqaAqMfr6wYUhf226Mox/oHDQ Bk6JJ7L8RHwG7CzPjiwUhbBl2sA+yBMZDfpw4UVcmdb2Ml/SlXIE/4AFXnYbl1kHNGEPROzRRWzp 7VaKQted22mg00CngU4DnQY6DXQa6DTQaaDTQKeBTgOdBnY9DTTm/prQ25y+mNj3Sry9SLgRH39B HWHiA6eMC39DmoQbcbhBH24ZF/FtWBkO/qW7vfxk2sEuFEVGM6E8JNZOJGBteEmHP/Da/sCDHhz+ eEp8h/SmDbwfXeDjBr9taRuZx5m0/JjHYfab2AWV4vtdX+1UGamg77ydBjoNdBroNNBpoNNAp4FO A50GOg10Gug00Gmg08CuoYGYt8fcPoWTU64IpA9gERNEZKEMpwWDBqyMB5/TU0EfcWW4TLL0Q1s+ JZ+Agx8yBKx0g1/bLXH6+ge7UBQZKpmEQJEocQHrhx/KCB4RDpqAhwu85B34EU84cCKuHyxwwoV+ SLGNLJUqpLq82n5LdioPgPYQ73EZJHhgJ6TO6TTQaaDTQKeBTgOdBjoNdBroNNBpoNNAp4FOA50G djENlPcRM7f3sGb3aYJfzu3TvcbElNN/ckQYVP4iru0Gq3CJL/+Ax+JP8AlcRfU8gVNGACvhJf1A /pCz5NPjH+xCEYRthpFwuG3m4Eccbpu+jR/hkiZg0A5EX/IOnOBBGH/8Bb+GCxIlVCPLFxxqT/K5 KXn0dtk20ugCnQY6DXQa6DTQaaDTQKeBTgOdBjoNdBroNNBpoNPAL08DMc33k0JaKmIRgJm+3Wzd lKvYXBJkIBhFckt/EJe4JQx4GQdthEt/0OAG/4AFfoSJL3Ha/sAHHv5wg0dfd0cWitoMSyGC+UA4 /XCDBreMD3/JK/zhlrRtPzhtHoSBB33EZ1qLLKF8Ki8/HmG/AtcxQEqiTNB5Og10Gug00Gmg00Cn gU4DnQY6DXQa6DTQaaDTQKeBXUwDzOdjbp8n99sGPa+P5QDctj+zTlkOpuECLmlKOHGES1jgEscT ceES38YxxPRT4oW/jB/QvyMLRW3G/QQqcfrFhyAlHrASFz9/4AQ83DadUPo+bfwyXPJtEicsT0S/ QVV76qIJysFKFPid22mg00CngU4DnQY6DXQa6DTQaaDTQKeBTgOdBjoN/FI0kKfw2dNfjOKOohIz /OFCHP5w+zNs4oGbVxySn3AJGyy/koa023TttMDZ7rMjC0VtRu3EiS8F7BcfPMDrJ2zAgzZwwg16 3MDBH+kGPTCegIMb+AYbOrTMekQZjf8IKxYVg0nNLvBE133tLJTRuZ0GOg10Gug00Gmg00CngU4D nQY6DXQa6DTQaeBXQAMxy4+1gHBr0bfpUYi/QMaNv0Bsh4EHXeCUbvAr6fAHDW48wOMp4cCCT/gD r8034CV+wAZ0y9WSAZEUEUKVgoJfhvEH3vsJUeLBJ542HeH4C5xwQwEDxYNHHE/g4u+D3+dbZsJy Ir/gGkJIg6GHS7YO6X47DXQa6DTQaaDTQKeBTgOdBjoNdBroNNBpoNNAp4FdWQNpbm93EzHLZ27P 05zxO8x+QSAy/trhNmG/xYJIpKSFObSBHzjAedp8S1zHaP628ZuxgwwNdqEohC0TjcyVceGPuIHE ID5wAydo2mkEbgmHhnDA2rwCXuIFzPgVF1OZIBYZXMK1BIIMVk2hDa1xl5HjdL+dBjoNdBroNNBp oNNAp4FOA50GOg10Gug00Gmg08CuqAGf8Pt8XvJpschm/Ta3LxYDXHQARMfCQImAP/4c23/bNGUc /uAV8ODfDx78cXnC9VD9G2kOFA9mm39N3fINdqGoRWbBgTITuAg4kJD9BATWD78fLmkEf9wSJ+Dg 8EQYN54SvyYOCRqxTuKgQChgdvSsZB1JdG6ngU4DnQY6DXQa6DTQaaDTQKeBTgOdBjoNdBroNLDr aICdRMzri7m9TpjZjL7/tTIFouWCME8wiXB7UYBwGwZdGxb82/gRxo00oB/oCT79cPvBBuJj8MEu FLUZl0KXCbTxCIPbfgabWehKevhFGqW/zZ9wmXbQZDwdNyz5ZnjmXkPM58gcUatZYWAG729QLQ5d sNNAp4FOA50GOg10Gug00Gmg00CngU4DnQY6DXQa+OVpQHN6m9KXc/uY7TelSvcaE1kvAjTXJ4hz YscJPNzwN5n2hoJHmybow+2l7IWELBEDbfAPWBsn4A13sAtF4EUiMMAfAocLPBLFDXiJC048gRth 3DaM8HsFAuHACTfSAa30Rzxw/I24YcOGlWFw7Om75mOYzi4TyROmla+4CiYfyE1nJD8QbZMoyxjg HkBEvI/bpovbvUuyNg5xbVhPuA3oQ9Pgk3TThwy0wT8foo4HL0QTs52nTsdJPzuvrHrtsa10JdkH 1ANr4+xwWe1qdtzpuFkZy9DO0s3O4tPHRnfY/lL+ftl2nNPfWbrZWXx+RXWc9VnYb4btLN3sLD6/ CjrOyqsV2gdU9w87Szc7i8+upWNTYo/+egDv0wfvLN3sLD6djuvK0fZ1Om5rpGsrkkb6VPtSN4bV g9MDeJ+2okf72weklYJ2KoRLWLquBlCsLYQbaOGSHnH8BX7gEjfQE/ThtnkMli7w4FPyAj5QOGj6 uoNdKIJ5v4xGRoJ5CBH4EQ7acMGPuKBtwyIemuAXuCUseAYObvkXNA23vKOIiNgpNMA+I2GIJVzT Y3deyQ/IBEhSBJ8QKuOHB7fgE2plbxI0RmfxjtTgo0AON3jAtI4Ex/DASYGQF0yeHN/DJyLdzXjG x0KQ10+ACj45rYhLbtZNRqjZZF8fPqEbFxrZHSnYB20jXPBJuRXVh6hjCdHOlsmDHA1ZkrQhrNyM h6fNBPTALfhktIhLbtZNRkjplU4fPqGbSCvzKekKUQxc8Akhg4+JY/GOFGIanQI53OBBrEf28EkE 7WwZGB49fJwVHBPLurK2mSQcwy34ZLQQNmQI+8sIRtn86cMn8hSZ/1B1LGlCbBO3kCcUEvJkHUb+ MqFnKcc3eKTsBq7cjIenn24Ct+CT0SIuuVk3GSGlVzp9+ESeIvOZT0mHeGW44BMxwcfxQHCkBl3J p0ZJnIOy1eYkBu1sGbiHR4OViZbx8LSZgJ74l/Uho0VccrNuMkJKr3Q82wYJtNBNpJX5lHTyR3IG 3g6fGs+R6rAzzOEe/ShG/0MewwMnEYS8ziWBe3ik2EQDbYNPmwnogeviGoOMFnHJzbrJCCm90unD J/IUaWU+JZ38kZyBt8OnxnOkOuwMc5jogo+loMiQx/CITwTtbOX4Bg9PI2hwMx6eNhPQDUFuwSej RVxys24yAgxaTx8+kadIK/MJQGIRyVlwe3xyko7UoFNcDhNd8LEYRYY8hkd8ImhnK8c3eKTEEw20 GQ9PmwnogVvwyWgRl9ysm4yQ0iudPnzIkz3ZcSRvFWviSM4gA/Bp4CQFNmF1liy64GMxQu50nHRe 6CaKNHQTpZLLPADJzTqHR8HnfXXcj08Pj1YiSszSAw9PCFvyCoEKWTJaxIWb+OhT5yWHpr8Pnw/L jjsd10W6s3TcLMxBhCjvoszN0GQeyVQyg+aX0i06KMOYcAMWHCOuXzhwA6d0I46NMrFRJ8siT+AC K/2BE7Bw4Rf+wBm0O9iFopLhQIm1BWmH4RGZxx98gPV7iI+48PejKXHgEzilP3CA4S/DwARwspq4 QElAb1y8iytijT5+gk8d774I4wYfo2ltYTI8S88TJRy0eLK/wMl8LLKmsywlAl4+Z9rgCWoPnzIy 0YBTEBdeRaQn8WmgGqJFGFLoJkgaTBOat9+/2Tr2BqnWW9aXgVq6GUDHdRnVvqgZvxo69lzn7KVs /CJ2PGToELW4dZNXaCarOOoDqs7xWYiQycsmx9eYufX5peu4lB9xy4ERbU4tvHstw9LP0KHVL6Lj ss1BW0UyBK3toxxQlCVpUP0YIhB/oq2o6Wufl1FkqcUnGCR3iPJDWjW1++pwVQ0bNjS1yaCWMSG/ ywtLYkuM7DeUOkdDlGw5GDW8OvpD1TFyuo5auslCGIbygUBlfnJuEj15AKPFB1DxDMQnuOGWfV7A g0UdruUBP/SX44kelB075w/Tji2FfroxYT0f4Aykm5o+stTUMdksB6YD8YnkcHdUx1mvJqdJJCbG KAXwC6tANC84CfaroOOham+ijhei13lMPtoK03m2Mc9k5Bl3ezquGZKKqyipKYfN8yusY+ofOkKn +UleV1vTjh2nxv1F7TinWbRdv246rvNT+1J2U/P30ei4XVbY/lD9Zal21I5VeJk2/MaDUq1txLyG 6LDsLYgLL8T+GHpLN5m4wBGspq99IcIHs2NyoH+MN1JWBtNWlDouJKnlg5cJFExdeAfrlzgCiRin 5EO8jbfACcHCa4gW4TQFH1AafADwJD6Bau1lwSfjCFbT174Q4YPp2PnYr4ut7OHxQJGKiTHoH2NR 82n3eQPw8UQ9sp8/YOEGmxATePwFLHBwgw6X+AgTxwMs/gzQ+unHs4Thb/NssaiD9ayphg3kC4Ej sQgH/vbCpVAhXPDpJ0OJD/8IBw2wSC/4BR5uPCV+wMCXfbmpBtBdNYKZwhucMt43VDa3VZaJl7i1 35qPFPRmIfgYMKVX8qETzn+acQxLAxjcpthZWNdQydBUVkuBr0yjIFDMIPmUsjaZpYSaunGg8ixV x+Bi6NBhRWqFjsXPGh1N2pCnkKgld0qq4ey4jkO2YBPZcYlIPSQItwD1i0uMgo8HC1qdoHQ9DFN+ Aivi3QX6ngzwzTffqt7d9G7i2HaauulNB4g4BesiteDkUU0+IVHg9Lofoo7LyXmSu5YnZySLVMcB KuMLf/a6h9r+zjvvVG++9Vb13nsJBnmTGRA9Td0EzN34FWFOoy7RiPWoJp++SQWBuR+ijmths9yl POhny5bN1Zo33qje2ypbbciVMypo4c/e8IRboxmfzGxbtW79+urtt99WXWjqxpMr6A0gwgzaMR1T 1957b2v1xhtvWb6cP7+ljmG/rXpDNoFt2JPSyyI7VL9ZkKwblwh4xOGKUmlveHtDtW7dumLdKXAy w8zHIWV84c/e8IRbJ2uy9gpsCAV2SrgNEWEG7ZiOE8M+TqnjPn1eougVOQtSrZeNrF/3tjADK+LC VVTyBkYGFBLVcQAL2tKfweEJtyZp8ikSEJ8CO0W0IaJOoCGpPy/7cY8q+Mh+tmze4nXxvfLkfZlu qWPXknNopt0rdx0fcf3tuJmVwM0ZKUSp4wA6f1uUZ85Ew1KDc3zglXFNPhaTfgrdZHCdDweJOoM8 R5H0GrUBy19dUb37rvrUAIoo0kNG/LQVr7z6qrUFLvcvV8fIwJgo5MtZrzMqUM504Q1YuDVa5Lnm Fb731zGy0E6+Il2ueePNrL+aA74mH0+vkKOJrNAvV8chDm5TN8gccodbgFpxA5cVnONp6sahBW8D SIoMkr8pVIpq8nGUTBSJNfi4hXsU+M6hSdNKyrBqZpX122vVf/sTtOHW6DWfIi5R1XEAiA+ccAtQ vzjI9DT5OMx/PWdWZ2ze5HMpwvUjbagd9jmJxuPloqeQXJId0zH8N23epDbkjWpbarN3VMchoZdV WzdJP4WaGEfRT7af4IOSNm7cWK1du1Z5KvnlTBaegnFimPm0E4CXIrds8T5qm8ZZobUaVQiZpfwt Zh61YzqGSWnHpNWTr1qAQfpCSNzkT05LZI0nrS9ug0kHioAnasD2RJj4Ei9FR6IN3KAJnKCNcMkn 0sWNP/ACHjRtGPHtdErchn94IzS4QCRQCgsl4XLRp4wPGlz+eMIt8TzGf0t40BNTphE8gi7C4QY8 3ICrLvcbgClJw+AHE9TCkSY0No8tpQlu7+sGHzfnIZxrM/7G3qkjnHht1STtrbfWWyMG1TZNanPS wh0+bHg1evdRvnJNTJyVa/GhQkHHk+k9aDJwl7fly+h6MAJTXAo+wvWKSrqedFM3vXy2bXuvWrtu g5B9wQi9jxk9uho+wk3PphFisnnT5urpZ+dWe43dszps2iFZ9izIgB4yYJryfA5Cx04BQ8t8g7Nz aulmEDpuMEmsSx3TMb259q1q7twF1bSpU6r9999PKkFfrlPeRLy4ZGn12M9n2mD10osvrE48/rhq ixrh99OxMWn8iK9lLXTz0dvxDukYPewEHWMH/cp069atptdn582vRgwfXn39q79TjRq1u/SvNiAl /WuvY+wD9fC0zJ63hE/Ofrqa/cyz1Rtr3qj+8Pd+t9p773GuH+GWdjyQjp1t/7ZCU51qzVtvVg88 +Ej1wuIXq2OOOar69CcurSiX7T8S2GR1a9qR9njeguerWU88Va16/fXqS5//XHXIlCnVVmvzvYYz SFz60rLq5zOeqJYsfam66MLzqtNOOblHJk/Zc9eWtd1WMFhkYPbIYz+v5j2/sNpvwj7V73zpC8qC /wv1t/mQx19Ux2HHuGbLCG4Fbp6eJGvAB9dxzaP0ucZcN8iicIhQKiBgIkVeQ1MbuW79uuqBhx6v Fi1aVE2ZcnD1hc99RroRUj8+BQ8kQMtlEsDyI9xfWMdiZs2UEvkgOsY+WIidv2Bhdaj6uP32nWD9 e9aP+IPzxJOzqzmqi2+9tbb6w9//uvrEsZK9zBkZdw0DrWUxsH7SU+gndIyW2k/bji0+kmuhD0bH tCcrVqysFr+4pDr26KOqserTm/IjRV1WXrSeJ9L+RXTs+SNHWijWWOrxGTOrp9S2vfraa9V5Z59V feLSi9vZtwkAeLSBr654rTpd7cBvffZTSQ3w+uh1zILWW2vXabwwr6IefOyAA1yHUtMvw45pL195 5ZVq+r0PVstefrkaOXK36o/UT4yfML7aJj27klCZact0l3/qos0gN0OPcPv76HUcJl4LlXw7qGPK auXKldUi+rajjq722svtfWfYMeq0+oGwWbXZU4v+IemY9ujt9Ruq+x5+uHph0YvVpIkHVb/9pd9q 9pOIw4MMxVPW8QLs3h3UcSThOa8z20/HpPvOO+/aoiZ2+57GebqTttpjzBhLmxdib+tFDnFeu6tq jz330MQSoYRi+cieWvQ62SZMBI/PmFU9+9y8asOGDdUf/+E3qt1HjXKcEJyQ8XXwB22PWdTiZecj j/y8Wvji4mralMnV59VHNsdSQ6rNWrR6+NHHq/kah4xRvr/25X9TjdCcq9GNuCj2W5bV++nY+qin 5lRznn5OL7XfrP7o9xkv7pVfwDpbcbH8JqUp+KHZMQm60J70Dv0WhQIPngLkAP9NH8AKrDIKf8BT hi06pGKxofRbZAHrRxs4uBEfsEijlDRwcPkr44IucAgHTgkLvB63XHTpiWwBgmG4bUH6hQMWNLAc YIWmkVrQBRB6YPyVvPC3wwL1PG1a2boNrwzRE6tZR+MB64zlSAV+Ow1b8hAwIZrjovFrwZKH/GqD Gw87ht5SI3DTrbdXP/jJFdXlV15jfsI33XZ79dOrr6+uvv6G6m01RuDC1Xi0+MDUlJw0Y9EJB4fG ooQZH4j6PMai4BO6MfoEjyy3+QzVwH/jO5uqu++9v/rJlVcrT1dWN9x8S7Vy9WpruD25bcrLsOr1 NWuqf/in71ZXXnO92NBs9Xt+cR3DtdSNpZISwyFLFswCDE7HPXzEqORDp/Tcc/Orv/m7b1f3P/RI kf/agHlD8JwGhldcdV21ZMky68iydZfyWGK9P47CrxdMlBXhj9KOkeyXoeO2/SEHnRr2zoLB9On3 VXfceVe1adOWXPdMZ66uVGBGNYD9Bcqvoo7RBQohf61HEeyqefiRx6qfqv6tt0GU18Gd0VaQ8KZ3 N1dLtDAD/yeemG223U8UJHM4v1Ew27wuDNKOKfN169ZXszThvuKqa6uVKvuhaaci/J2rdv1oUYeB 1JXXXFcteuHFlAYY9YMdN+QsAvCxYIKh3y1btlYrNGm4+ZY7qvvuf1i2p7qniO3WBzGCBfS0E4QS S/mbj8nuGTCcqOOGn/gQQZrs3hyIj8P5dWbB5yNpK1pCvacwIGTepJ00L2siet2Nt1SPPjYDKBGO kFRBsF/GBqPjmu4X17GLMzAfxHRBXcfY4Jxnnqv++m+/pcXEx618PHuxcwRs1UUNvh9SXbzquhu1 8PiOHffIGTamUWYJ6gl5avL300/o2JBCrBSAm7Fo8XFgpjDPYHQ8VJOyhx55tPoff/v3Vr98rNLk YznwbFgyYX8mguBNeQav4+DDUTP60h9dfqVZ+BvaAbPohcUSgjFEnVEmkM/NnV/98Cc/tbr6pnYV LVi4yITFHgfSzc7WsddXH46jY9qB+Vrs/ptvfru6574HbbyA1DujPd5hHSuztJU/+MlV1QK1lyOG j6jmzZ9vu0Ntco22skpL7RKhJxW2o2TEiPjIdGyypJ/B2PFAefLd/l5WZA0beuTxmdVf/69vVc/N n2dlt8M6NrmgMmXp113AvWO3D1fHTOjj9AJ2uXnr5mr58lfVJt+kdusxy5+Jm3761QWifhEdl/yT +RjINeS6GUjHtD+Llyyprrnupupff3x5dcVPr9XYRu2tBKWsXlv5enXDLbfaHOvHl19VTb/nPntR bfzsh6QGqWPh88JxtV6w3Xv/Q9V1N92qsc6mrCN0008/ZXtMXffxieea3DVlqXmopzD+y159pbrm 2puqR38+S2lloY2Q9Bh3rFi5qrr9zruru+6+t9qil3K8rC4wPbH0uyM6xibe1Iu/hx59VH2U5qNq G7RzwTgZ/4LZB7PjlP9C2uDTTzckbDpOefmgTr9yKnnJdnLyBTxUiku85T7FRxzB0p+iG7CgL+OC JtIN3gEHN2BtujY84ks3+Jawvn4v3b5RgwK2hSnD+CNMxiJz4Q6UQDu+pA1+JW2Jjz/SLeEBC/pt MvYc70B+HZQjLJX6zVckmjEToocDz7nlnAfXJlMX0mD6KfgMHz6sGjliRHX1dTfbgsIee+yhHTi7 V3vusWf1qrZFXyP4Oi0oxHZJW1FPfHAiWwlUDzILscomEHz+Ygkm8oibxLI2gEa2hEWeqaGRJvEO l0foVO5hasTGarWe1e0rtdBFxEjt6ijfMBqeGvAJesPK21OjFL2liEvapKN/no2UigeIUj49Tf3m h2jTD5yItx+4GLv0AxJx7hha1ArIxNyiM73D9JtZWpSzMCj4Kdahic+o3UZV++83oRo9ZnTCBs8f 9HHIIVOrj597trbIb7JjM8TUeZYfHSR5sjiJgXUBKELSRtrB21MI3SWu4MLPg4YScrs6/Dd0AwI2 EHZnBPoBq9RxXVaKKAUQIqmBb0mXnVviUwrT5lOyErrxYSGy91EqyEki9sgGNWk4/7xzq4MO+lj1 jnTr1BFby+WQgCOt4pREJEPYteI6tnRKInKY0w0+0hveEAfZ9C/4GJYUGLwMLXCdhetX+jLeKc70 2Idv8C75IBK0lmYZIXpgHHc89aQTqyOPONz0E4sbIjJZkxjZcdmdZxInZw9PwMxeSFf899lnXPWJ yy7WgGi4Bp5bjBdazPU2EeE4/9qOOSrIbrtNmza5DrIkyaM0Mh/old7RRx1ZnXbqyVpU3+i7NgQv dczgbsrBB1fnf/wcexPGQMqfIgPkH/lTjDlFwEROchPHm/4xqtuXXXyR3irvpeOj2BoPedGjH2zB ypGwHtiFllkkIZ/2dlDpNh7yCCZw/2/RgRV8zBUOR0ReXCpe2kWVdQOy4nA8G6Fjh8EQ9paA+YN7 yJmjQJI8Uf+cW2oILK5gY2F+wPK2Qh4heF5qebDDvfbcs7r0kguq3bXrdNPmzY4HcX6MMInYX76A 4kb51TnMjIi1+LI8gnZ7Oi454Ded47EE8bi3qWOHjtZORnYSjdldfYDwSfstHQ14efkrZj/Y5Wmn nlIdfuih1bt6K251UROJXC5ZgZ4GXJP28WYdgx9tdchX4pVElmfaORGFLgzXIuzH4cSTiH4cSsAf 8KM9Jo639/vvu181creRLeRkx5AVfDI/pRF8QIkn8mAJJ2RzyKgyE+UbfLZqJ+51N92ixYy3q6// H79T/dl/+OPq4gvPr2VJiOw2uP7mW233zte/+uXqz/7kj6pPXXaJeKKLGj3kQD/IkovB+Dgz90Lk 4R4dJ7DpWfzhQ34Ir9eRnqUvvWzJGJp+Rkl3+++3r8Z/vhPCdeBMyG+jrIyy/gl9wN/Hbhli6dYh Tx+uzl8eT8KY4WUi+4x2e996x51WN9nl9kd/8G+rCWrTY2d+yAJRLx9S8/yGaox5+onkTB8GEwQ9 R0S4ijNvI0zAAe04g5Ngb0QGEWWyp8RddkkrunaeEI1J+arX19jOszJ+zBjq9X7VKO20Ah58kmiQ JjiaIMCPP+FF1LD9gAVGrRuHOH+xsXoLDL7JppR6Gx9+8Pcf8L2c+upYiMvUHtEu8ewxZg/ViYtt FzYv2eyRHiL/lpYJXEgtHvxL/51GiCGjxQkaLgiWJ0hMUCfJHJ2VAQNm+OJg6Tu6/dJm7q5TF6vf WFNdrkWiufMXVHuyq1GxxO222wjru264+XabY3HCwfRepovf8iCiSNC8KT2t3pmcUiDuOWedXk2d erD1uyYEuIKj37aOXe7Ir3ajrXrddmBGvi25lKaLoYB5oNla7T1ur+pT2hnJqQyOKCNg1HHPpE6e KO7Siy6oDth/X5tPKOMmVuiKtCw9XIsxNtmfx24GburY+qiTT66OPPwwjRffMZ2C73OQ4ONcgzcu C1U5AYV5cssdiIKZ135CWochr+fTdWcM0g86LliUUYP2W2p14kZXS6Bxsu1I7wEHCi7U8VfCjUg/ AesXDvoyLvDhGX7iS79JHEQpLuJx2/HtcOAWLHq9MdLrjemF9EugDWtTlfGlQKUfmoHwiAtc3BKP uIEe8Er8oAu3LPQeppkwYQezMnlwUt0TvTfMwZw4f1IlrBmkzAiQYHZXhxFwp4YGyppgfErHMt7T +c+xY/eoPq8t0L/1mU+b+9nPfLI67NCp1QhNtmBA47ZVb7Bhqr7cBtY+OVEcAD0bNdhkq6UPGpWo peVv6Gk0mVBs0GSK+zy88TAy/SCjn+N9V8fC1msXExMYa1wUF7ibdO6f7ZacV3V9pEZF6XijPKq6 5KILqn01ON6ke3fY+r2fBj9MYFCB/Qh3vwkTqj/5d39QfeW3v+BAwTiOtXXLe8af+wW2Sj/RgFme 1HDwvKNdS75LxMOWRZNfkfBRo46uyONWTVKRnUmIDcSFEnmKN59brDMcYmn73SViov/DhqmMlMmN 0hnnkREevQJjoklZbBF/KxMR0LCww4A/toIec8yR1X/5T39WnX/OWWmrKPR66488TIL1j4VBy1bK GwkjF7rk7TLla2VLPHnTP56N0s/GVEYC2xNuQjEHWnTAG0Ly8Z6YBI+B7Nh2JiiZ2lZUduJjcGah STe44KBXekfXqw80EWiz7NDyonJ8R3mp7UmRZCPxMR0rPi8MEKf8kh66Ra/YwcaN2J1P8Clf0uNu J+x5s8qXMDZJB7Xfvvto8rm7GMHLHfMonidA6Af+UR/YCYN9OZJrirQh45iRH2fyASRlhF6jQ4k6 uEl1A0ryS76hJY46Q8p0vGyV3qywvR1KMpEmeeYIxcYN6MPzlN8MCc/yKLx3Uz3G/uwNpDJEmtKa dLLZZEU+11Mk4Bgoafz4cdVYbE+8eOtGHijLsp4hOOlh8+gXe6MeYQvBEZkJQ085YGPkezdNeqjj lH909tQJdhyarUCo1OETZYEfWV5dsaL6/o8u1zbntaa3QIiyohw2oFfZFfLx7L3X2Gqc/oKbyYss 2I4WDtHFHnuM0WRnvC0kRpq0FaZf8aFto7x4SKvOI3rTw4/44IEn9epd2QuLRbtpoBYPNcz1rvqh +mvtpQZ4wPxRuSifzy9cWP34iqvMFiIfZIe0t8o23n7H9WkVJeXT6YWUhEMk8Oc8+1x11TU3mO5V IFZvqDvwsbeLwqOMsDnkxg+LzUkus1Xpy2yGOg6+/sxixA885DF9Zt24EIbNT5IpQxPMdEkbIP4b 6Xtk32YT0uXIkZoc77uvXpYMN/UOMf0qXeUXu8Merd6pX6A9NqSkX3hg/6SHDVJfqFdGK1g8hMGl LWV3LvXQYCoDdBVPEj8FlZYB1NdLJmjQEe1P6I54YKDZn+o1eNY3ABfdCccfU/3X//wfq7M0sYCO RWx23PJndV9y76O6yFEIHuw/ysLqdhIPVXre3THR0AN2KN3QV9BmWPmRJyEYjcgc1xkAM5rNW62+ oi9oDFkOOiYMv+ijLA4d9rTHGy2/4J9z1pnVf1M+jzzsUMnP/Xxul7SrG2Q33m4ImISivHi8j/Gx hgHyj7cNoVzqyxbpD7mw4aiz5I16xVH2GTOerKZNnVrtq3bn+GOP1rGgI5R5+FCGyEM7tiXhTbYx ynHHHF2deMJx4qI8yzaRnQf74CE9yg05wo6wScugMsM4hXbDw1B4W4Htkh72wrEXxg+E+YcNsMv4 5ltvh8DbBfE/8sgjqr/4T39aXXTBuWYDpGk2Ipx3lIbduQS+yoEndIyfvtbqGWWnela348qHyS58 y78fw2GRGp3of/rB4zqHD8f30BULmAfo2DzH+MZoAQG9Y5/oJeoRsLKtwG4Z2yIf/SPH6eMxrdoP rSR5gd8W56f0kNE1WOfT26jUnypv2JSN3WCgTFAu0EVbQftibYXx1x2ZwkNWHtovZDebV0qkDz/a mIB72Yun2cCQ6sabb9NR9hmmd2DQnnX66dV/+4s/q45SmaEP+KBIJvLO09s78maKMEUjAbIqz5KD foGy4oGGcjXViI9lzWL8hzjy8e473sax4Akfx1e9xa9yIJ+0dcjJS7I8pgKzYErZ88AX+/zBj6/Q rvaXjOeIkSPsqoSR2kmGXnm2WNuK3sQGGC7jbKXLw3iEsZirzGmsnZFuqT9eF7aoP/S7OKFDRvpP XpSGrj3ncPQ5Fj5/PE38zj2B5WBrh+ql61lnnm5yHH7oNNnrmWYblO1+6l94GcFL7PF7723zk5HK I+VoZSV7ifJnLCrtiSsKkpt0ya4hn/dsNskm7LOP9fuoYphe9pMObRl9rtNb8iakhU1fLjmnLH4+ c6a19aZegSlJ/qEL0rHxrMLomz6SOdQIpSOQ2dsGpcV4yvpRZFA57quj76PSiU67YgAAQABJREFU EThsxR+3ceyCush4gDkIDxrGhshznh/Q1unJ5OBJBsaLNldRzLChwyWDdKZFo83qR6xOGJXolCHC tPf0tbTLXrY+/qCO0j9uEZ3f7UQf7v0qMlKWYVNxnJBWCfuhREwyhFPAwwb8AD9ikvhgx/54GQSz JEdEBrjtEl/iwJW/eEo/sBI3cMIN3MCJMPGlP/AjbW98co4i2lxw+tE2kNqBejTbjmmGQ9CAEvYW ISD93TYdWAgJnD/82xN6e3H9ZOgHUxL5yfzSNjKLgMgfJ8dQqAz+4zFO6N1fQpbgQK16JV/CxdAY kJgLCsycQ+aTai5RNR/38yaJRpVBIhWdhpWjM5x7/aPf/0Y1VhMgLoWdPeeZavHiJdZojNaq+Lz5 Cwz31FNOsreWzzz3nDX28Ljw/POqQ6ZOsYpHRV3+8vLqidlz7B4EOifOsZ5/3tnVQQceiMBWmd/e 8Lbd8/GyzqbT4A3TTqBz1PhO1blYBlGP6j6dpcuWWZrD1dhcdOHHq4MnTbQ0xMQeGl8a4eGipaIx YeRxzXl+39ZbPyY2HP849ugjqwN1Hh9NL9RW8ZmznrRB0WYN6g9Tg3/KSSfY9v0XXlxSTdWOgI3q aBaLjjeXp2hXxAnHHZMaInEIHcv79NxntQ1+kaU76aCDqrnz5tniyjR1KOdqULunBuZLli6rnpk7 t2L7+bnnnGl5X/7Kq3ZfwdQpU+xt/8wnnrSOFB1+7GMHaIBwmspoN207faBatWqN0q40kNrfOh9o uXOIDnO87nzZbbfdtCtsRXXB+edUe+lML+bBFk7uUlmu3WJoY4l2FFhjj5L0oDPuBJgxa7buelpr 5XDUEYfZbokR2nnGcTXuRCEtBhujlAYLc9xp8N42X0QMO6YsntE56nm6q4cyZyB00IEfk218XOW/ u/DrciFtmzSrmpPuY9pazRGeLWrw99SCAnaCXU4U/WTdobBy5erq8ZmztAV3jXUGkw+eVJ2jznnM 6FHaBry0elZvJDlbzUCcXRMvayvzXrLjS/SW90DxYLGEgQ1lMFP6wL6xuaM1uD9dO0PoaOY8/Wy1 cNFi7byaokWNPau777vfBgSf/fQn7LjGTB1pem3VymoTC1UqiDNOP0WTgyPFm0U71VMyGA8GSBMU LiHhUaewE3b2ocO52mLPwP9Q2d45Z51hb8rR9RNPzVY+XtIC7qerqZMnVUtUD5586mmV1fLqt7/4 W9WBH/uYdnQssXyvXbve7OnnM5+wuwzOO/dsXXr4puru0uqwww8x/0vLXq6ow9yPccxRh1MDLQ8L nn/eBul0krQJ6BV92ABAKG/qHpPHHp9hx53ek7521yLFJy+5SDt4xquz31DNmPmkyQT9uPF72wCf t9Tom/yjEVOBXAYIBLhHiHtSqNvsDDj/vHOs7UA/XJ5IHOXHoJNJwMknHF+dcvKJpj/slbt/Hpsx q9qYJkSTJk6sLrvkQktT0Xp7/nb1qGR+9rm5tuPnaA2uP37uWdL5CElhpWIudQx9XnXtjdoefr+V JZO+A1XvjjrycNnComr203O1mLPBtj9PGD++ulht0N4a/PEwxmE4QVlxfwQXTe4zfh8NIE+1tsNx aj0Qpi1eq7tBqLev6QgZkzH0RZlxDt9tyPWmDBk+g/Snn5lvR1hsQVuDptdWraomTz4YFKvPXP46 68mnxHOV9Cb71N5z7JP2jjJYuOgFO3ZLPTtJd5ONlt4PUTvL/STPqh1/du7zkoU6+2418aAD1Iac Z3e9USalHSM/euWY8gIdXTlBk17u5eKCfAauPLRP6Ak7njHrCQ2mN1WjVE930wAUuzzqiMPtyNAb ojnwgP0t724z22zRcZbaQO51wqZoN6kXEyceaINFJe8FaHK5Zfmv9Kz22MpUb6ufVJmsle3Wfc85 1paQHwadkJMzHgbP72gCMUs0ixe/aANjBsvH2eT/SKq6Lg/3PgQ90jbxRnnuvOcl48bqePUJZ6vf oj8lferzDLUVS196KfdrUyZPVJwv0tDPgOcSxJhL0giEfa96fXV1/4MPS29eJ49RGZ5w3LH2Bv6O O6dXJ514fHWE3raueG2VjmA9bpOOiepzjjj8ULMRjiayc5Y32TNmzDb73nOPMdXkSZMsz2edcaqr UektUn4e16R06bLl1u5ectH50vVBPqhu61jhefMX2u4PW4TTRIByo31v3BOUxieWP+XzebV3tLks nHk/e6iNBYbphRTt0gyV9zrVCRY56HtOP+0UG8xzjxLtMXLvM25cdde999pdYOh77rwF6jfW2aIC bRV2uVh99hO624K2nQI+TneVnXTiCVYu1E3ahJUrX7fyHSN9fFIvlcZz94UZQliDikF6ma+xzlNq q6lvlAl1jXaRMRLtErzWvLnG7P6e+x6QPexenao2ystV5ajSZVLKhH/1mtVqR9fpiNcDttt3ivIz Q/p4YfFiu0vt8MOmabF6pSZzs6x/+vxnPlVNUd18S333U3OetWMuTEyZ4CxcuMhc7jsjvdAxCwZP 69jhAumaxQIWuY4/9hiz4Sdnz7VFXRZ/WGjATg888IDqFbWxy5Yvt13GtGlDtGj3mmwKObjrime8 2jzshXaRurPsZY1hnp1nx2soB3aqed+yu+r8+SqriaZAJmG0i/N0XxZ3DNGXn6V6zGIafh5aOcYi 9AeMJZmc0YeRh2P10os0n9G47Rm1N9gOch829ZDq5JOPt3HeW+r35jz9tPWTx6qs6c8ffPjx6pRT jq8uOO88cfd6bpXdLL5SOzevekZ68hdiw6ppUyerb6G/GyndL7G8cU0B/TrjwzXa3bOfdk1Qvycd dKCaGF/8o315QWPjjar/o7Uji3Hr5CmTdITqFRtHvL56TXXeOWeoTOZWjCU/+6nLrH6StzmC+cuH DXqRsI/3KewQ1aQde+FY7JGqB+PHjTfbO+CAfW3sShtLfRutF1LYOnfW2JhH7dTiF5fa8S1eBF9y 0cetD6O8sOWXGN/prjzGY5s0cf6Y2ufx6qsVXR0h2xunuuUvQbxUWAjlguLHZszUTpQViqsq6svp p51UHTxxkmly5eurpMe5ajdetvacuviC9EUbR3vNwmlzOETbrAvdVWduu2O6do/dZW0GR9IZ7x2t /pZKg4z0GTaeE0/6qEsuOL8axb2pYrBylexTecE+WRSYol02pEffzrFbjlMyRmXMh58PPhyrMeHh hx2qtut5Ox7KQttZZ5ymBdvjpQO3RWt8rXWUkPZ4e2z1i6bBwHi8vSaf9GcsfO2mNgHbZHkSNNoL 2iTmJMNHDteLdxZKoK1UH56v20/NcbhL1NtPX7inXaWPZrxnLzhEe4n6UuZEiErVma98sCOL43q8 rLr4Eo3HVaaeBLXKFzpoux5+9OfVtTfcYm3BXmP3Mtlox7A1xgvcmYYfW2GnKeUGH1uAUh5XrXq9 uvGW29WXv2L5OVb14lS1PfSPLFZhQ+SZJp8HfT79rMYqugaD8SHHSGnP2R2EXPCh7eRDEoy5meOw M4k5DjJ4JtAxXi+bF154QTYxq3rppZft5dsF2qVt+hA6fLgCgLEG/S7t3inqH0855US1Va9YfWLh d9jwodWZp51q48xHHtW8UrxYQD9Pc1Ls72HNcVYrr+9Kpomq5+eceYaNPcw+0jzPhfqgv8pLzBeT rsgrXvTHo/yHFzewSn+JHvDAi7h6lbxgbQn0/gRt8Coxgl/glHH4oSmfkkdJU/pL/IafGjKYh0TK hMMfiZduGRe8gQUcWL9wCQ/cwOvnJmuFzFoHcPrBiG/zG/rlL3/5zKOOOuoEOsVgDpprv0R3CExK sdvQRiz2ZP9LPm5ZDuE30qrLyaBqbNmBwJ0+4/ba2wZsDCDunH6vNaRf+vxndaH1MA3o37KztVdc fa3udFhug2nuALn/wUc0yF9gE8gVr66sFi5ebG8reftLRWTSwNG1v/v2v1SzZj1lk24mRtffdJu9 MaKRosFnsHWV7u644867bdJJR/XTq66zwd95mtQ9oDdgvOXfVxMvFkBuveNnOtpzoDU4LFjknMtD I33HXdOt8v9bbQNnQmxtjrRAo01n9LPp91Q/0tv0fXU54ulqEJmk/P23/9nuNaFhYNDPIg4XPN91 9306d3y1LofW1lg1VkzomCw/qYHjNC0i+MWPUSK8NdpaPfTwY6K5RhOUOTYYXKPBxnOafHHB7jC9 vT5Ol24ySLn+pluk63vs7eoCTURZWDnxuGNt8PTtf/5utVR3Bx1wwH422WXy+pbukzjyiCNssHHd 9Tdbo3i8Or5jjj5CA8l1ds/EPA2a99dghkWmazXIOEM6piFlYPEj3Y3Asby9VdajdRyBjpbLTi+8 4DxbJGGQ953v/UiLNKs0MBmngd9y6epeNeBaoDl4YnX7z+6urlS5MHnm4W4UBjFTNcFkccQff2u5 UJcR/o//+U2T/YAD9pduX6puEj5bZlkwi681UHb8uY2+V1119Q3VjXrbOXnSQbaYQFmjR97kjhu3 txrsPavvff9HutuBC3z3tUHC7T+bbuVMB8QCz3U33Kxyu99sgQvwmGjedfc91pmdcfqp1qEzcfvu 939o9OO0sEbe77rnPg1+DrJFJc6SX668viQ7R09Pa5DKm48Lzjun+slV11TXXn+TTVp424yOGKwx SBkp+yQ/0++9Tx3ralvIYbDigxBifGGUDgu75kw7k6Axu4+pXl/9utnFgw89aoNfBqhLX1pe3aH8 XX3tDbaIMkWTlEWaMKGXa5XPy7RQwwLcHNnj9TfdWv3s7nvdnp5faBM5drHMlk6ukMzs+KPTZ0DA vSTPaRHviMMPt4VeBmP/9N3vV6tXv2Fvu1frbi90yCCfBTTe1mBzN+gNJ8fqkP/m2+6wxVR2ZVx9 3Y1aTHvA3v7Qyd8te10lvTGRZZDE47n3OjpDi7IMAvfWYJYFTNoTzrdzZxEDN9oO7OX7P7zc6gCT sgelLyZsvL1jUYm3kf/4nf+tgcjcatLBk6zOP/L4zzXYON/s8WrdG0B9HDlihJ2hnzFjliYfT9pR sYM0OfLBiMvFII9Jyg3S4YrXVtrkiUkmE+w99hhd/eVff9MGNgdpEs7kGz0wwD5GdZk2jIUS7Oew adNscPrqilere+97SDItq47VgIvFRuhuvOn26uwzTtduj2Nt4fXHanvRBeXEwgy2xKIIEzt7e5qH D3o7p8HaAw8/Wv3k8qttIDROb9roU7jokfr6uc98wtq4H195ldundDJ0iNvnCy++aPaJLTLZ4k31 +vUbTLfcUzNhwj62uPP//vXf2VtF6iyLrDffeocmUFM1qJqc6njqjVSY6I9J/2133qXJ1hbtztnH Fn+wjXvuf7B67LGZmpweVTGg5D6862681ernWNVhbJ+2dZQm1fQJ1B/uXWBSwkLISA2qb5F9MYkY pwk8bfcDDz5kdnLySZocanAagy1zkSfZGCXK4H29Xj78/f/3z7Y4fsjUKeK93sqNBWiOCjIxpU5c f+PNpv9PXnax9RW3KU3umxo5YqS9yXz++RdMXiZmkyYeZJel36VyuuLq6zR5es0WzVdqUY7J1Kwn 5miyeYJNbLGL6ffebzbMYiq7ylj0eVBlSFmzwERbiBze/rktRk6g3/D2Rr1kma3dX1dX9CNnqv1i cYrFxb/6m79TOzHKJq4ce7pB/QkvVE6UbcHxxltus79zzz7DJpX3PvBgdY8uCB4tne+55xjxe8OO gFL3Z6p/3ksLBNRFFqWn36O7JlT36aNtZ0kaZ4ittasM1P/qb76p9mKNTcQYF9yg9A5SX8HCVW7f Ex08mNB989v/pHq0QngHWH/HnT0cE+Wlxnf+9w/saAQLQSxaUBeop4TvvucBayuZwLN4RnvMQjL1 hsk0tvPJSy+y9ocFvO/8649sYkhfh21N10I/dkzfxd1lt9x2p5UlC3C0paedepLqwv5Wn8gjD2MJ PnrxT9/9V1v4nTBhQvW6FguwW95OswuHRQb6ChalWCBj4s7LAxaXKT+zSdkixyboww1vT474j7bJ LS9x7qBflS1RtiwcvrxseXXT7T/TvSDX67jquRVtPm0S/dxV6gfoy5kYA2MxhLtqoI2LyNEF4xt2 Z1CmTMafVh9w1pmnVbO1W+cO9YWM6/ZR+8XiAjtC7lefQxt+8kkn2OXnTAq/8/0fVDM18WKxl3bm gYceNtvg2DATqufmLlDduVVy3WX5ZIGPBX/0QdtMO03bjw6/9Y//YgtrLF7crb6RNKmDsVCEvaJv 7OFu1Zm1Gs8ceOD+1jZMVf653+276vfZOcqiCX0Yi4XD1bYfcdih6jtXS457bBGM+1JekY09rX6V tp9F8txWqGbQljCm+Ofv/VCXJ78tmxlv4zrkHqoFMuyXBfBr1MffqbLhxeDb6gte1Djivgce0gLj KltYYELL+O1GjWdZPGHC/LDuy+LeqVNPPsnGytjmrbffafpgsYlFMPpc+q+/VFvLFQ8HaeH71Vdf E59b1Q6Pr45Wn8IOWuyCF3N7a1I/avfdbHH4va3bzHbpay67+EJrt2frpdE1utMH+2I8QlvLYhF1 mBcyZ2hyTp6pf9/6h3/RYu0L1RS159S5m269zRYkqa+Mfdm9kftF7FaLFew8xeb30ULWCLXLvGx8 QmkeLlulbqKX2++crqsqdM+Z8N/ROGm5eDPeJe5s7WjcXePN4Bt1C/tlDMyCGTZmO1DVXx96yCGq 0zerf1pvNrNCL+SeUnoPalw9bZr6Io1nGZ989/s/tgU8jtda+UsG+hZecD2ocmC+wkIgdvWKFrke fXyWLVjSx7z62gp7MUSbuHTZy2pDT0tzhXocW/cn4ZMbddpaWHIS7eEy1bO7bHH7MNkjL1X5Gilj RmSljZmg+cunP3mp5PFF8b/6n7Sfq739VHvHmIJFW8axLHbfp/r2rz/6SZ733CYelBEvAehDnpYt jVN9WrNGd6K9uNjKiHLG9uKxnkUwXm7cedfdehEw015u7SbbffPNdRq/HKkyuNnuKqVv46Ul9Y+X huecTbmpPVMbd/W1N1p7NkUvKlmUfXL2nOoRzSUYNxyqMqEeM++i3n9R80bqHX3R5Rrf8NKRnc9c 4M+8hBe49H3/8r0fyJZm28L7K7oH6f4HH7a5yFjtHtwqu0UHPJQfC4LY3d57j9XL9bU+plcdYOfQ WRpPjdC8ivEvu9M+pnacugm/2Sr/czUuZ0zCC8Ur1a9v1liFxd59VO95yfCvoqFdYp50o44I0kZy KoX2jDqopW3JfExSqcuUAjvkhBV5L1/OyZ1ncCa/CxYsmPPTn/70cSXgK2Q+KIBF+URcuGV8wMAH Hn+ESSriwx/JE9/vKXkT38Yvw21/Ge7HuwErF1YaEX0CAwn1/7P3HnCfFUW+9xnywIBkhmGACcyQ QXBREBAk5zDknFVWN9/de+/u/Vz3fXfv3egGMyoiGRQJiqKC5IFhyEEkzRAGGHIaFAnC+/v+quuc /p/neYYBcXXXt2ee/zmnu7q6urq7uro6ZYL5rKOmH8+MX78nbIbxXcfJcJ41TO1f40uY9OObd/5G zCtAlFAHrDdi2LUvxau2MibqgGzxtFFqPB3KCFajI0JLXuBwmPxpyMxKYy1m8H+xlChmq3DMYKMU bKrZOGbnMbxsveWHm2OOONQd8AwJX/DstuuOzQlagYSwuVwHInKLCnjZTsHMylQZFLiV54jDDpKS NFqCbro7IRrFberQvyEjBsafA/fbVyfr72rDBJ0URqPLr0JBebjZccePNocetF+z3TYxww19bfYl wNMhYPhE1ODcJHmV8GHLy4brrWe62C4AILMsdLyrSwE/+IBpzYH779Mw07eclKwNNNDBUMZszy47 7dAcd/QRzbR99vANIQzeUaajsM1goVuo2UTKFh00g1SU9CMPP6Q54dgjLMxOVz5JjwECSjWzmhjn pu21R/Px445yR4EiO13Wf3h68AH7NYcctL/hTzn9bK+G2vGj23h2EIVlTQluUl5ppRW0Auc1d8q7 7rSjZ/MQdBjScMxgYlhgBuCQA/cTn/fWbNM2iguX+H3LCvd1M2c24N9r912a/fbZywaU86WEMPNy mXjEKoXdRddhBx3gtDgLCdfymHfxAKUEoxyGvgNV7gfsu7dXuNwwU/WlKitoh0IrMurwzjz3PJ+X sP+0vZtDlPdxY1d1B8OMPoNVOrGLpUSj/DAwPkBwKM1nnvNNdVKv+Ba75VVWDCLW1WqZfdRpnXDs ke4UfqADpplZoWagBDI44sY38opRlBVzHBDIOQ0YOFiGizKz3jrrNCeecGyz8w7bm1YUeQZ+1OdD VB8xpFx73fVuQyjAOPJlnuiFqochgjCe/lO9Zxb4DR3eiAK1lWYcj1abOl7nMdBYT9Vhnihbq68+ zrf5UEdS0WLlB7NuzGCm3+TJkzyT9JRmgVk6PE1ld7zOd2CVB7PUzz7/ggdJeyqvpLG7FJYbZKC4 SIM72tmpZ57jW/Km7bOn6se05uAD97chhAEXh4q++cabzQ80wGC1yt7CcZiMsJurDFAAmSk+5bQz 3fb31tZV6g3GQwY/DChp4+miRZJFONRoldNkr5T62DHU/XHNpVJIURBpw3Mef8xb+Pbdc3fT9MHN fk+rlm5u5mgwAk6MtijyzIAfvP++zWEH72/lNeqXarTqPoMnBixHHnpQc8B++3h1QB5wnTRR/34p ObeGFExuiGJws9Xmm3t2az0pUlx5zSrLzbR6knbDTXbw7BopSjkLGbkZ5TKlThyv/HzoQx+QEeVS KczXuhJYBCGICxNmqC2cfc63PbPOzUf7CzdbgTDcMwBnSXcC8862uJO+doplzgGSkwcpPweq/rM0 /E21T/DSTueofqLwc2MM8jLq5wy33VGqgwyEmBHnRktm5HbcflufWYYselGD0G22+rDr9gGKT/2/ 4eab3aaD7FDfeOeNlQQrr7yyty5/dNuPGNc+e+7mlV9PyuCMkVmRPVvKChIMtSiSrA7CuLGp6ify 6IRjj/KKvXNl3Lv19ju8iuxrGggsL+PwnlpVQb1cb911fWjo/RroRJ0qvAzCkq1+KpvNL7QdilUO U6dk33Og+q8lmitL3wMvEEVEZwIPQxyG4ZM0QEbxpBxpCwcdsI/l4MmnsiXxRfch5JvtVqyOZavB UYcf3Oyzx24ekKN8Is9oh9+ScfVpGYCRFdS/D222qQ38q49f1eVCXeWw0XTxGjymbjGYZyUhs+is ssGQQBnb2KQ6eN3MG71aii06i8qwxSCK1bqrr76a/sb7oHWUZAbUyLSlZPRcVYOR7bfb1qsXWF2E Ug4j1l17LaeFvFxFZXrJj35sxR953jJXhEIzsh1DE4NA6iCy+kVt12SGGId9iDbBk7jIPGQBg1km Hehnqb/0X2K+DA7ftfGLGWVk1H4qb+ox/GOwsqloZ7vB3Ceednkij1kFRHul72O1AJMV8OYs9Z93 3vlT99fIdvjH5A+GbQY9P1C+ME7uvdduzWGHHiBj2CYa2AwasykBVnqcdsbZMWkmmWa5eNA0y8Wv nny6Btz32yjMKkfaJyt/WEnzIa26ofzJP9mHExg2yQNbRViRtJ36XmbXmf1n5h6DVRpNKJ+NtCom t7iCgUkSVgCRT2QEK6qPPuIwP2fIIPugDAMY45CJX5PMZmvIQZKJ+6mtvX+j9T1jT542ef+GPpuL Ad4O222rFQxb21jIStWX570cckTp/VByGH0Qozbt82C1Awz439aKBAwQlBkGrLGrjtWE3svWT/aU DKMds6oTHmOEgQ+sSrr11ju90gYe7rbzTp6YJF92qk84+jIMumNXGSvjzKKWQ+goTL5gJGLF54Gq M4ccuK/LAp5+VcYeJn1YgQkfX5gnWf2UZLXK9Pc/fpyN4+D2Fg8lQ91Fj/26BuAPS6c8QDKXvFEf R+tMr6+cfJp4+ZDyM8lGEK/SkeHmoP2nWY9AF4Av5Alj2lfFa7aZhw6xu3S/92vA/30b41mNR11/ SoZNBtDU60+ccJwH1kxOPiP5yMoN2g99F0YW9ynqtzCgs3IWY98kTa5Rr5DLGCBX1tmTXKAQ9UVb n9S/Yzxj0Ly+6Nt3rz2aj0mXpM5g4KHOUw6s/rpIhn8M7furPtOPgQe+siJ7eek0XukLw+TQV26R LEY3mKI06EvQRzF2IH/QoV6XTKIOT5m8lusmhtidpCcdd9ThzeZqB1dKd+dWQhubA61+JfPUVtGp N9IAnHpJ2yCPm9nIoZaj//CVNsJ5XkccclDDboPrZDijDH+oSSwMpwz4WeWNvkh7PeOc81yHOQfx LRnV0G6BIa/7qL1jiGSss8NHt22OOfJQ5/s66dqPPvq4eQSJtNt0UTNDHmdrDr/4SlierEq5Wyt8 LpLBh78LLtbFQNKvvi8DDZMyMfEjXGqnyErLzw8W+ak2xpgpLlWAhreaK6+8Vga/RzTu2da8Z0KX sVM4rRRS3tBP6E8/fuzRMnYsrXZ3uY3X8Cjppa0ybttUExicJzR50gTzetuPfNgGHVaQsuIeXZqx xoYbrudVNXM1+R9yTFsvNZZhApqbQbmB8MhDD5ax7WnrKshS4HDwgckpZMLJ3zjd+uKeu+6seLtJ Vm3tccg10pVfnDfPxsUxS43WeGtv5e8A6bRa4Si62Zhe8zjx0pesrb6c8eEJxx1pgxD9CbtRlEWN Mx/zJMi0vXZXm97PK+ZvuOFG9zurjx/X7CsaMJCTl3HSf3AYZjHw7q/xCfr/ud8+35Of6Bz4UW+Z zOUMrchjlrijv6OfwTwpj0Yl3wyosKkfS998VqFmM7H7YfV3vvPMvxpHhieefsb63wlf46hhFuR9 OBw1Pr8v6NazIRHlkUTUCdXvGU7c/nsNNxxu/IaDqf3AOdw3foRFKwkYvmt43gecK8gAtkQDWETN SDGIR1DhE2H5qPEYg7WyjBlJtl8CAN5b1PppyJ8GNGaM9oGrYTB7P0pCzw4ho8bMslSUITpyOjDc ZrM3tfEBwwsz4Lh1teKFJeneDyy8nH/wCSl17NvmoDdmRWnUKEEodQi0azSbheBEADBDyGD+uGOO tIGKAQGDBfwu0cwYChaD3GXlx7JqoXLBoFSnOMcvuggoKk68QQCRx0mTJ3hmJINGSxHBMk+nePmV V9tif6CULIwBLPMGF1Z8FDU6ZwZmdMDTdVMOy2yZzVeA0bEXGVhmbfljWThxUKruu++B5m/+4Z90 PsgDPhvKyr0GpXtIkNKZoSgxIMWoA/y2mk1kZh1rPJ0zt9BdffX05iNbbuHZJGbCmaFk+x8rF56R 4r6jOkAs6igpzI7xjwHL92Xth2f77r27DWAIvSUWp9MRhAQ7sx9XarZs8UUWVYc8t92exizpHA22 2PYDP8jvdzVzss1WW8r4s5cPBacc7Ur9I7/MMvz5H39Ks2HLePYul6uimLSuFB71knrA7DkD5A9t 9numETgEuQK9/JsVRKxUQNCzOoBZZuopW2cefvgRrV6b58E+ZwQh/JllZaYK3Cg6rNSBVrZQsRoO BZTByJw5j7pOslrpkTlzNOBa2OcjoCixNWavPXax8cD5VBmhlLDa5HHNBrLayPuhX9dZAxo4kpaz xY+cPl3+zCaylBoPDBFrqbNm5ogVHsuIR7Qp+MZs2F1SZv7pXz/nlUPbq76vuqqWEqucjFhvLMMf O3YsPvbmwTbMlRksavaTpe0YVTBikhYKCEYTVihNnbKW02EW9Xs/uEyzPjOVv91s6IJfucoPgy91 jlV+12n5M3Wf8p+lrZff/d6PvL3t4P1lyNPWpDO02gFl0G1ZM3k46jJn5GBYXFeGtCDeFEe4fqmD W2y2mQe1xGWryV1ayYfhDzm12047NpttsonLddYND2mQ/oIVWWaVcWwzJR8/vfdez+xuIDmEUsng HUMO9YQZOAw80IOStIjqxXMvxFaKKCix0GX1lldWMYBaSLSwjH3N1ddQPJ15pDh/ovM7WAXAknbK HFn4suogCq9EVKBS9uARxilmNlHYWdVx/Q03N4dKUaXsucKdf8RgxotrqVHkr7jyGsteBga0sWdl aGXA6DXsxJBcufWOO63o/sP/+WvPBFIfGXhST0P6oDwu7MEP7Wzu40+aVp9voPqJzIXPKPNsKYYf DLSZTUN+TpZc/G9/8il9L+uZV5azs0wbgzMuqrRoFy9dx0UT/GV2nHMipggXAxxyt/1223pGl61M zOg9ICVs7pNPNX9w4scs2xjYcO4Bqwo44wnD4s9+Ns1bPFkGTxv1bLTk4nVaJSY2i08xmGZ2mHyQ TqzQDsr0accXM+/0PSd+7BjxDgX+Xm9VVTbNB7butMDwVzkCjtV3rIY89sjD3NfB44023MCD/wsu vFgz2LMsn+DbKMlX5BzyF8fqErYXMGONo1yffOpJy7JVtTKUvoxVK2Kf8rum8b8m2Rz1L5py5EQ5 04v7MNHEkvzNP7iZB+is/mI1Etuw9txtF626+bG329KuH5g9WwMq1f8xS7mfwxgIn3D072zbwpiE TF5HfRR00AaZjKEOba5BC7KGOOBjpRgrZ4LTRqMfttZKTkne/Nkf/b7rOVtouRKe1QzUO9oa9Dtf LqSIyyyv69YttzVXqO6zIgFjBjfZXK6+ZxH6Hin79BVwY2mdm8hKT2ikT2XLOYayfWSQoJ2wOpIn KxqBpzzYzniV5Pyy6rdYVYG8Qg7Qj7HFQGRZx4BmJsQ+vMXmHvx6RYPKGtIxKpAXtrxePf0GGRs+ qEHHJubLGjKCcAA1BuDrb7hJEzbrqywnuH2ydQ2ZDn+oN9QpD3mElP6IiQ7aMSvkDCcY0mGCjLqX jgkqJpFw0dI4B+19GuApvsoGecpqZxwrhr/8la97kA4PfiqDGFvr//qv/rvoWtN07KOB03YaZCIr 6eOWEC3IMgZdimL+oi9AG7IPfYHt7ayA222XHWzUJV0Mc0xWXap+d9ree7rtj6PP0QqJD0nPmao+ VgR6YgUa8kwYaMfw+iNN8mCw3FKTZwxcsw2m7gbfkCfLadUAKxsmTZxkowhnFrFycT/pG6zEBG7S xAleTfuXn/4br27BgLSWztQkQ5vKGLbbzjuaV6xSoT4qmw5DXj4kwxJ9GgYGzogiHF7ttNP2zf/4 y0975QLyeiXpebRZJtfQqXCHHbyfdL/LTQ95YkJ14/XX8wQGdQuDEINLBq1cFkI50rZ23mk7T3BS L0iPdvInf/hJ63buU9RPojvOo0+RkEIvWEPt1fqv+pSsV7QFtiiRH/6EyjoDq2oWV1vYQn042+Mo rylrTWowglCe8Jut+hgkJ8goSFtEh8AfPZVVnEw2tCvDhRzc07XyGN0QnXvFFbTlULz/yNbaHi5+ sXLtmCMOET2ryPg53nUdPEzq4TiegVt1WSUMPZ1TrVYeMU4g2whjVTQr1cj7z2RU+eWbbzRjdWA3 OgmwGEeX1koT2jc8vEL1Ez5isKY+wvOlxoyxTobesbbkF8Z1xg7ggG84xjbQzso53BaP6HZU06jJ KdFBGSal5q+hYAYB/IRzmD5tgJQXQfRRGHLQIdC9cLRr6jz00Zb5xzay1ddYzfKTi4Poc5gEoqxf enme8yXEzXIrLOs+j9vEtv/oNs0ejHskG3CUDfoP26IwkkL75IkTvTrZk0aGQitQugJm+9uakl3w AR0l6xO8ZJL6xZde9IpnjKxs4aJtci5nOLZtvqW8LeUJKNrfR7fZSqttfqQVdtMtr63jWf+XPJHO 8OADD3n1NxO6t2t13pt3vmk9dPQSSzYPacXqYpL1jPXuu3+2V+1Qb7gIAF2YtHDJY3/Ib2FNWGyu lV+0KfJLn8AWQvRF3O4aR2FYpP+9X3KfSR3GfOjn6MFMzn9YughGzifF74kTJmgMd6P7d8Z5X/rq yYJ9RSuR1R9pDIY8hN7nn3/IOFk9x+oiHBRC3zt1zlNG0gf1JnI7iFH5C+/BpDI6z3yvIwZxEaeO n+8ZJymon/2w/M64CVunBwyOZ1Q2f/qnjle/dxAjvP0qhiJQQkwSz/dwBOPfdzUcYYmHdzKHBBkO pvYjDi79ahwZxpNw8KWfXgfe+UYGGJB32tYoCUIrvI6FBwGE8qjVtHgv7bHFY9A+nqQ00MTMXos4 8JAMf29IcK0kZQtDDSHeqiFrMTQwm4hwY78nHtmIQcssXAxSCrHyQ3GjMWUDQEFldmvmjXeKM9w0 8z4y7ISLPNAKm8etSKGs0SnQqBHumR4d+lNPP9NcNX26toT9VB3Vh2Ud3t20hmgHHTlJJ66JSdCN Sx5zQDVKMYLaBDi08bYVbtdgi89JJ5/qrWHMjqHYGVZoEI44hDCDQCzSbBWjE86UXS76ATbzBr8Q xgjotdRxv6GVGax2MS7RgiGIW5rMbP0yGGYbGVtaEO7gX0j8wmDCADSNNutpuxkz5Vdo6exhUmoQ fgxa1tAMVuCOOoWww6iBQQTBiiAmD9AT/BGvBEOazyltOlHKH5oRxszssmqEgfF+srAze/BDzRay 1YnOa3cZJXDJY+oxeWY/MooJCh75YFAYPKdMQnEzv/AVA+EZ59ow48kWoJyZZhZsMxlRlll6GQ0o fq5zE55yR8xqCOKxMoV929CLwQ/nshLPfP6IeDxKA4jFFtP2L6fFYEKrnZRXZudQ9hhwiMmerWSl g1AKhxQ6/YMmlHxm5eGHExUebmZhOwH8JO2oBKQQr92bFG/hv1iDrrkywIGDmz1+/8TjdQhx0JT1 FDycBcVgiHMm2DqDo84af1Y0+bV7wiOhAiejhgaCy2uJc9YnAtq6W+owAyc66bFShDkzgTOrMHJx Xhdtj8Er5c1WG5QtBm8oMawa8NL3Sy7xdhhWY43V9oBHNCPJuVMYW+EP5Y/S90mtEGIpdbY3yE9y nRV9QIsZrnjkHQBgaM/U0fu0JfOmW+bZsMHAm9CUQciLY486XFsVv+ftPdTvvXbbNdqA6QB1pGi5 ojxZXhU+RJmZ5Jau4JXasGQEcVCcqSO0IbaIIfMw3LLIIiSCSJKLoom2zzfpriSFkW2NbOcxHUEK wa6brBhjKfUYKYsolKTHyk2UOAaLWW5IMurN7NkPqnwW9YAfHOCkbpBFBctDXFtEL/qm3fzi1Vcs M2xQd3jhheVT1DrqHOmAC/5znsaNOqNstFbeILtVCgqL3DmTpOlPI7RibzqEmrJkIMGsNBMLm2y0 kYze1zRHH36Ijd+TJ01oJkqmBu1KUwg5DBkeQz+K3GKqvxiJOCuNbcasjGKlz1vCzUq6P/jE8c3E CRMiLcWh/et/FADP7M2FfREZkVk1euttdxo/xgIMkIpmHuUDThAVR1vgHAlWMuLgDXUfwymGILa8 4MgrddRt0z4xo8yWySw3BmNsA2BQyqCKrYoYMdbTSkcGxAyKTEuJ7wceFY/h7SKqGx9Wf3jety/0 VmHKjLywOuOyK660jKV+vPbaGzI4b+K6C83QAY2uG0KLzIBflA88B7f7gdIfkyfCmNVlRQdM0Wdw BwaZ2CLf1Q4oJ85f4izA0corRgY4mXkiXaLxB80T1lxTs9GHerXJSV/9hgeU+8qIAY0YRqPvWcyw 5IdVZKwAo/6hf0AvAz+2TVgeS2bjfsn5eEqFgQRnymDYXFsyFFmGoYA8HnogKySXcz+EEYCYbDNg a9XOOtMM2YcLmsNg8pRW53A+IoZVzkxEjwEXq60YXLMSA2cZpif0+Vt5xcGJ5AV8QXbCajNVD1b7 YiiK+hJxiYfzSmBF7jDIjxUS4kWmAxz9LO00V4LEuXmvuX4RTpkz2QE/oYg+i1oBqaZb/uQpZLRA 9M2EBqtlWPHBtifXI0Wnzq2sfoOtXcBgZGAlJpmiLkMX6VB3WO2ALMBvK61WeUArWG6UAXjWrIe0 Mun3XLbUF1XDlkdmvmkW3cpn8hXDMP1hDhChh/o9TkZNjFSsWMfBH3LJQJhwtpiivyJpCEDPHjVq EesQTDxyth95R8cCHmPuItJf58hAiEujCfoS+eB74sQJ3jaDvsS5J9SxFaSbgYeDs9mW/UndZjdV MhxHOWL0wsjib9EAb4iHLsUK2UWlX3ilCJ0KTuS6vgifP2GS/tOGSCf4ai+H8+P2rCc0ED5K+WEi TNGMC/rRD1nhxFk1K2rSjUkxVldxdiMVIupQ1BPqHYeUs00U4yJ1gf6JMmHihHN/Zj2kyRvJAAxF Kcuob+ngpQ0kogdHv+H67y/SkZ/CIq8BE/UQqkOWAEO7oXzgGRnCAEkdZMJstFa0R91u3I6Rx+hA jGlK5sU38UOyAp2GvhxeRKB0DvRC1UN7OVVSrJzZIQpNrj9cl8BBulHjhI26rLysrbbG6mCOSsDR Nlnlxxas6CuIE+2WCzNmalU7/GQrFmXrQH70nwlkxj3svviJxj1baScHq2XCRR7cfyt/GECZBKAM My8QWih22VnOgJr6JOf6RJ0TEJOTTMC9T22cSeGQ5c40mRMMPIoyIh66AhMPrHTHuEIfXYh33MfV T9JmMWoil1WKNt6fcPyRzdRJkyxL0N2+deF3mlNlfJ48eZJ0t1200lnjFzKgJJPH0OqMyI+V7dDB 5DZ6OXXH4CZxIW37nOXtbBghOYOLiFHesYWNMct3tSOBIwhi0uJWTSYda533celjHDg+Rvpd5LfR 6twttDLuA54Mo47jBuuxvRbsB967AYhYuYE6JTrxjZKRGkNd6Fx6959AZDTC8j0S6OLzHcSHX+JJ iH44/sAkzpG+8cf14cDHX6ZTvwM/X/erGopAngn3E6oJ7YclkTXnE56wBXE1fB0n6cknuHhPeOOu Cz2JcQA/gkTYuPKlZ4WtTYwKJqAacYK5iiEgajxtxECKgmhX4XFjsCcK4ygJrMUtPFhKz6zlQw8/ bOXTMzWZWGApsXj0EnJI+CFIOYDw37/wZZ/dwdJbZm44NJoVFhkVZZCbOZ7RahpmNBEEoZwov+p4 2Et64gnH6GDb25tLLr3MZ8sww8CMPTe2GQ/5i5YXNFUNEv4g0Jh5YC9yJ5DhPQrcm5oB38az65yd wZL7uRLuHIDJAG7AKU9Y2+epg0QYwTNLKlJNHpuOYFjNHWZD6Kg4SC6dy8yCW5DK9+KLhVGFvc2s ZsCB6fVX44aGMZqxID8YjT66zZbep33DzBs1WLhN28H2swAnTqbrTtS8aTSL9TMrztBgGCvaQMZq CxQYVlxhmY8ooZDRaYAHReqTJ54gIXuztvxc2nzxpJO9CoPl4WyLcKcpdPCXFUxsoWEbHCsK4BVL OEP5GqYeK0G2OLJk+qSTv+F98Qz8MebsrLMnuJXPMwPqeFH+dtjuo6JViqrKYhEpi+qd3EE5Y23u 4yt+TZ3Lig6V/MBDZuXjQFvxQJ0t/tBf+tK2U4Vi0qXT/8JJX7MiwOCDWXGY9ePLr1IyyfVIi7qF Y0kyMxasPAMCw9liUnpUy6NwDaWfEh1DFp3g+2QcwxlPoPI3PylTMo0IgEr9Uz1y+fEzjKP+oChz fhiz2ygHKFKsOMGZDP1w8DDlynlWdLYsgf/D3z/BM+nsR//Cl7/WTJ44wR0r5brZZpt6UEIc5Ak0 MhBidhCsNTVwyN/id7p8Ix6roL5yyqk+ZJVlxLRFjB/naStKwpEOW1/YvoKhlO0OLCFnqxWKC/ls ndIxr2qvEljT1cLrhfgYlq7RIcFf+NLXvI1ya63mY5B/8fcvFU/UPqvIdQ6pR8gcVvMww4try0qy iXDqANGZeWbGmnqo5IJvUmpz4OMk9IMSyExlGJrlIRzmseJQ1LyzgusLapesBGHLyJQpk53GpTqb Jp3x6SNYUX4Vl3MmzlQbZWspN0kxMGS1WCqImVfiR14V12TwA3Z+qH9ahao6gyHx//7jZ7wc/hYN yI/U7DP1Oh3QyTP4wQwgg37kPaseGJQw48+KMG/xFY2RXwa2YeQgSQYbdpG8X6l3d2iFKGfPYXjt +p5bvSooIgz9XUoGAM+maltn7ShH9F3OoMG5bgUjWjDKoHacRXGIZAQrxE7VFiZmV+HLpz5xQlzE oPIe4gqOQB0fyDhm6VdYcQXXRQYhbGFj1Q8reGdI/jMjvIHqPcbJVIyJHRhgTLxH1xS+8au8lJeA MmhGdJGarfrJcOTZZdpezhlvO263rbYnbeZVtmxFsexRWTpOQZXtEEV7p+23M91XXn2t2yuTCX+q lUmsFkL+777bzlR01/WUx37CXCHNvLk1t3QHZXy6filDy2s2nu1A7pcUsIhmualjtLG1ZLD8w09+ wpMR3//Bj5rPf/FrDXrJJhtvpPCuzx0tQwirctnSEk7pCAcXRmBcYOXi/FxQJQheRAO8998IkTJv BLNtn3JxebXwRWqS0eKQKfEZqWFcRfYyoYKD9+hStBuRbjqizRELfBEvH/igH8BHzprBWMAZPTh4 +XPJtNE67JnViOFKpspXPpJuBqWs4jji8IO89RHDJqtMGPR/SrrEm2+pb6BsFSFlQVTILpO0Sejj QNzaYazCMMIB0riMHzqGsypfcuRHvtnIR1/OOUC18/Y/lT+THrjCmcJf5CsrfuY1r7O6WkZfDMFM MnHm5NZbb2kZBY8xSMDvDocoKzKKMsXocY36qy985Wtemf0RGYFZVfbd7/3Q9d4Ru+zrUx+K2NGj N3+kT5d3x03IggP2UgfWmTKl+dixR+ssqgtMI4Ycb5mTQdYGBkVOHoKHfLDtk/qOwZ32g6OeIg8X l7EAIwfOE7N9mkgYWiJaFGsAC0nBZQjeg9g2DeDSKZg0DaUfDA8YRpjQ3FnHUUAjfSWrX6lFyAsb asSzSKbEFT5SMVlJFD7hkal1+XRYeEdOgka8q9pa4kUYujLlG31m9M/wsWWCIqNTXKYVUV/TNkfG HWyNZ1KObbZRT6gvZdxzfDfuYUvpippUZjVf4IMjIj8evLW5coB9ErIu2UKrZAznaHI2JdtE2XbG JBVtn7N5Wif81Nssm/DXai6t3MHAyYpgtvnZ8dAf9QJ5jzGJFfnoI81blFv04Uz6cfQChlX0Kybp 2fbNqkTaAnK45jFZjBT4LRnWKzQhKzG6nfT1b1juHbz/NB9avvwdd3qrLHhw4OQmUFbU0f/Ql2Og 23jD9RWK/r+odXVWXzJRBzx6BGVKe7ahTZDw4l05+Kh/Gb0dLxZk6d/D3WU9Mj4CmGMRln89NG04 L32cwygihWmD+DIeaeS7EVff+Ncu6e3D1zAD7yE5B7yG/agRJ0A/8fo7iQY242a82m+4sD6eGr7G ARx/4KjxpH+G1XHyvYYfiJwAPAMRv50bjNiFDRIxmHQH1cNjIa+YrVQJoYLSp9bmv1Q5uPmABszA 67IrrnBjNJyoLP2fkUdnGIIvU7NRQR+cSYDjRg9WX3BWD4MszkRgWwg5DpyNFTSUEA5Lfl7n1OCP IsbWHlZjnH3Otyy89tt3z+b4o46wwYOl963gMqPIg5MsjxDYFiQimuWvp515ts/c8MoFlQRhROFQ OGZ8mfn6+HFH+8wQbnFAEYk0BFfyg1C6XQLoJ/fca3i2N9DKgoQgwKyGFL0w0wCfntE+9Usvv1Kz phO8ssjBpUXQkRCf2acVV1pBh2TqlqX7H5ChLk7jhwa2nbCseVMJ1+iI3vINQYtLafv6aWc579zq 0gozpYlIgiIUWmbyOaDuhptu9kAIIYjhymWuxBH2U2WYuUs3FHCjHTd/MGvKLQjcEIdiwKGGGOg4 D+bwQw+y0WT2gw8pm4NNGxownHDeCdugOBsDR+eNspWOPJtv9gh/tlhwW9TcuU/aaEgn48NZxQPo 4dYKzquaqXNTmOVlVpMO6YEHZqlevRqYBMs/87UkR73EvaX0OcR8qlZ33XEHt9PpnAkpfHQaDOwf kAETpQRlA+4lvbzTwT/48JzmKil5bN3gdi1WzDCjomB3WKQBP6Le0CkqnnCxXYE9/gwc2VOOQc4D A8UrpNm4wblTl2lQP0UdJisscNRX8LC9kNU+tA223nmWjPZbHMVALqmjw7nMC/WRMxYe1hJgzp3g 8MhJEyf4AE8MDcSnfnBTDfi4/c/ndegQZWZxfVaBOmPOf2G2d2MN5uEdh7gz0w8vGQiwbYSthF39 oLTBqF/lhzd4mgzAKIufV7awBVOGXeTQnho8TlhDtw5qoEB9zW2xD8ya5YNCGYBz7hLtl0PiGZjn QCbTJjU6/VrhGax/UBUOozVtDWKgCSPUw4/O8YwlaTGQwtAmjAO8jvoSvCecAzUx+GIopT6QV3NA BUUZsG3leQ2Up8/gzEKMEHFjCocJz5unPfHBqiBK71Mncz7NGz5QlZU/BDMr/QsZ9cEHzzmv46pr Y1uPDzrXrDlbB4BFSUvHN+fHMfiiLFBQL/2xDpFVunvssrNksrZkyC/a7GA84kbpddjIJ7LCdV/e tEkUYLZvnCn5vaRm6Th/IuWTmSs4l4l4Q/1iG9VSMqRgGFp7ba2CUDjbRTm7g3ZOvWDFD4cZs7rj Zq1QQP709HwTBT9YzcjB3Wx1ib5njM+5gUbapMtET1zmh5WczCjSb1GG4OFwWA7iHD9uNU94AI+/ n9l49eG67GfgpA1htMSYzHYqtvLsuvN2omVzD3Lc/p3L5IZR2qfmMXBsd0ahZXvwg7O1KuODHOC5 qPqAzX3+zhVXT28+rHziF3iDRvBkuwc739QZDCZsdbEfgkMulGK/uhypq/Q1+ihUljB95aG+u+68 g7feIV9R/mkTYCVuuPiCX7fdfpcGBde5LD6hARCDktvUr2E8Y1KAA4TZIsiKIWQIK7jo51mlsJCM btF2AittLR3l6PTktYq24NDHcisk/dbo0eBawu2QrWhs9Tzj7G/50gLOheHcqIfnzNHhx3NLmQbl 1FMuVEAuor/EdtO4ApwDy6lDm7x/A5MAj6gG9aRSl3+B6AMakauWQ6XuRGmEvMOoOEfylDxjFKXO gYPVXengIepb1j38uzoXZciWSAyKXKZAf5E0sRKOyT/rZ8LJ9h50rsQVclI0Cj/GJra2sZ2QlQam XWn/VPoDByBjUKMvxpEV6DSeQmvWAfpfZMuFF1/SPKdLElh9jJEU+YmcNrgZBfPAxo9KVkjhEyvp cJMm6dIQrVqh/mBMJi3qGjccLalzhTbecF3DxYAcWozMfsnj8uF+bcLECTbUcjYm58SAj+0rrHhi gMs2GFzM/tMGRI+Ipe/l8Gqo2kz9wNpTpnrVzpXqH+bNm2eeMHHIuW5PiHe4yEsxaoePeYIO8eic x31rKNtlWHmSV7wHL4NycsItebhWB1X+8Oc4h9apPuKbOjX+wQbxkTYsx5k/nBPDhNC8n73cbLju Ojq3Z3evlmTQCrbAHGWKjGSFN/3ErbdT51Wy4hUr6bgEZT3FX0HtDWeaq2f6uQ4X3dkJENCOQfSu RJkQYIUWLtOAFiZ70oE/o7GCcUOdVzd79sOW8ehqtHFWfrE1GD0Qv6iH0Ez+9Sz8yjYB7rb9FB5h MOMcpCuvvkYXRmgFs/IcfAEDb+FcbV3z4zvxQD/OfRI8Jb5ox/EesmJUc6XGG0xG77rz9u7vMH7R p4lYwzEW4AIStpd14555WmE9u8UFP1w37RP4KcVMI7ytMbWUQl7WJ/jLavErrrxWcm6itpbuYCNN bu3PMh2ILKT4I5dv0sT9Jhtv7BWXXqnrvCoB/Z88cYInfDjwGp2SXQnIYs64zNsRz//Oxd6eeOxR Omttm4/E9nCFZ7o1j1NftL5Q8uviEBBbLjl3iosa2G7NpBAr50Ivj0UQRKFfZBKKYzNuu+1OrdC9 SMd46KYzrZjDOMbFQLTdGdpSDA3oHMqKdQx4QvmZJjzfpYs8RfsSQmFJHxB270VPypTymQAZke/8 A0E6wjPOcH6Jh7B878MPh7eGzffE3//Gfzg6En7EZ05BjAhQApLgkRLGn7+E45nf6VdQ+YFf3z+/ Mx5PWnPCpr8R6IfvGqb2z3eeGS/x4zeqU2C8fwYAAEAASURBVI4jAYCcUkLbg8jlhXC5AST69haA IebMggT/wejG0eIxmIQWYJIwNDw6Nw7PY3n102rMHCRrAeeYbzXfk+GG67OZweY6cgw8syScGagz 0GXrlZf2axsSygMH/82S4o6g9o1GWq3ADOcS6sxZ7ooQ5hyap3XSPwMhDhP+sPbYosQzmGKggkM5 8yBGs7qcOXKp9ovS63G6PecwgBMFPBVi+ISARNCy2gVBxKDlqquvtRCgPWJ44MwLlqbPflCGD+WF ToX8cDjx2d88X4PR1a1AYxTZeOMNJNhGKw2WdeogQCkVP1K6DKw4T2S8ttVwSLOXfUuou6zM4+Av gobZUg7bhU4U4DkaOB9x2MEWZtz0wO0TDLAx3nCrBTeoMfvGwYnMhH/j9LOb7bWtik6dA5y5VWub j2zZDrYQxig1l8ko81f//U+9aoeZCPL/E5XNq1J+btasOkYHBtsctPflr5zSPKB9wWyfQUlneTbL WhnUcfbOZ/71816RgFUdZZ2zZ1jqe/hB+2vFwWW2tDOYYp/xaqutZmXf5RCFoJJQvRXDWZ7PDVWs UmA7HLcDoQixTYnBG4OEQSfmqeNiEDN7ts6V0EDmdimG99zzgG+Y+4iMAAwmyAc3LnxDxrEnRRvn Lr0gZe8x4f+4DrjDcMHgkYErxiRuBmGJ+ENSmvG7XudKbaX6tr/K7t8+/0WvivnoR7ZuFhf/n1Ad QXlmSxOGFK67pq6jkHJ49KKL6AYs8Y2VQRjUuGWBwTS37KBocpMKcbkBiDJ4SbP8XBnPAb7wO+sr +c53OnVu0rlEBx4y+4oCzWwwhy9z4x31j1uOwMsNVCjISy/DvvY7PZtJZ82WDrYK3K9yZVBNmii8 xAknw5fS4Twr9stzVThGy3XX0zLpPXfzoZeHqnw5rJeb8TiEEoPVj1XPMTZwvejPtTWNm4LYosEK w4dVlzmnhFvioI9zs76rWznIF4foMvDH6MahgJzF9YbOyKGRoMTfd/8s0TrLsmPGzJs0S6btDMoz 5Uad5VZB0mBwzBkj3BzDlh5uOmJJOfWC2dGnNBt2jm7jmDJF55cof6zEYsaI7a9cK0tbfViGPc4E 44BVbl6kDiIHUHQ5w4Hyo9mmsGWmGDnHDSQPCQ5ZxLkyKJ0ceE9dYtsiq7GQ1xy8jCGNfHNY8823 6nwdDWaekqELI8fuu+wk2ba5jN5PuB5hfOC2uftUZ3aUoZHbq8791gXeAjBWbYYtbg+pzrE9Zjkp NWydwWF02ESHkHKWGbdSorRi/KW9IE9po9z4h0K2gs7/uUsHKkf9fMv1k0EOKzJXW1VngCz3Ph9c iiyEtwwu1xYPOSeCtsn5K6uvrpt41JaQ78z0cf3y2muvpXyaHOedJo+cY6sH5fjt8y/U2WjjZQBb V6uuqBdjXS+42e3Iww+2fPI2zxi3yAj1us4tucLbW6hPXEvLVlcMw6TL6hPOJEOJmzx5os9BYiXq zqqTbJn4nFZ5sRLrz//kD0wDPKqdVyap7+FiAMoHZQ+DPWcYYGTacIMN3GbhIeWDYRRjOYOnmeRH h/9zwDlXjTNAPviAfa1Is9oNmYA8QXFnqyxL7DFOUL5333uv6/jkSerHVJdYDk/6XNGMEZBb6pAJ G2+gmczSn3sQ1PYfHY95Iy4GIM7K4bKJ98vwzjY8/Lm1k5V9rP7YRIN7eMDABCPt3Xff6/rOjUHU Y8494YBb+u1vX3CReLaCykRn+WgLCQYKbsTB8MN2k4dV9xko0RY5Ky/6wih8fjHIvK60LtHhqZTJ M5I/TKwgf6mHDCLpd+mZ6ZupJ+DkAojxkhkYlF8RrzbecEPV12V9+P4/61y2L3755KbteyQT0CWQ g6xCfkW6A/ni5hwOFWbAiCzBIETaN97I5QTb6vDxfc0Tbg7dZustzTsMQRgoaI/cpsiqwAk6B/DR Rx9VO8JwsLr5mYIA3sKrwyQXuXnxtDPP9Yow5OLlV18tw//2ze/p/DQMOvQVDL6pB9xgyaGszjrZ l6M/pI5xkQO6FnDIb86Mw6BK/lZbbWzzfZ39hyGHM0fYLoneSB/KgbU4zup5XWVCf03b5PBlJpAw 5pLuRjqElrbMoa3ICFa+bqw6gWLL+WAcHk5bpc+8994HfBgx/TRb6+6++x61uVeV3l0+j26fvXb1 WUcYeZHllDkH8zLjz5l2GKWR7+gw1HmMsmwNQ+7NenC29a/rZ97o/oO2xMQXMgg9k1l8DBA4+MRE G0/6ujt/cp/LmPZ9neKx2pJ+jMOmz1f60MM5RdQD6ivHJXDIPQYfDt1HblAn4AeTOTlhGQlEW+I8 H8r1zHPPE75zRcv73V9Pv26mzi3apT1vExnLanO2z66iA6QfUx1iMLqr6tAHP7CpDX97aPUlN5NR FugI5JH2gD6rKuQJRfq0m9QvUK7UOxy3KjG45pbSh1UHufyDA4+f1JEP1A1uv+W8N/p66js3BXNz JgcKu76rXbCKHBnH9qQH1YaRb2yPZpUfxpyHH3nUfSB9DKv+mNRkxa233mtCdob0TmTB1KmT3U6o 77ktCeKpf+jmrNrlAG8Muugx6NU8ORdqjAbTbP277U7VQ+Wds79YBUr7pi9hJQmyEh0QWkMaUA7R QljNzIQffEAXIr/0yRiOmCjGSEudo35xcxe3IbKyeC+VO4Y+dBZkN+fsoW9zxg6HVN9x1yPm6auv Sx6rv2XV8W1qP5bZ999v/qBr075YQYpO6TP25AdO2uvkSZNtcMh+Bdo7F/Qj16iLbCFEN+O8RM7Y w9BKu4cmJppenDfPcnW65CllwXY9+sIf/PByTXI+6BtvkSFzJXuRn9wmfJl0NHAwmedxj7YvbiBZ gP6AbsIYCaMGxj8MN+ictFXO9OMsniVktIRimzdUnujznIk0U/Lqgu9c7CM0WBTAxCl9E7dmkkcm T5Ept0pfZEzEyi1W7jHZQTkhw5g4WX65ZTRhfKD658Uln2/2tmwmh9EFkDtMiH7n4u83X/rK130G J+WKPj1ZMgqZwy15a2scQL/09HPP+rgNzhftxsvRb3CL4P33P+i2TX655If++CHpdvCc9seKUNoo ZxNxdisTC+gsbG2nPU3SpCurtuAn5yudcc431Vc9WcZT6A2j1K63V9nd0pzGZSIqN7ZbMqalLR1z xGFxVhuNuq4GXYVYwDdLOoujKByVjvCxIi88h0WTKUbkAOGdP1zfv127EMHtb+JpPaqXOizxJX7A CE9/vod7r/2AIU4/Hv7zdUU9nC9MBiaB/WeG88yw9KM/xKV/Pmu/GibDeeZfDZvvhBGPvzoO4bVf vieu9nnwwQdvsc4662zcNQCiygEhNiZS+xW+hl8BSPKsVA5CR5wOOr6736Eh8hGeUbKuv/iCDEU6 rI4zd1C46dC4rpGBxzNPx4w1h9uyl5vl7Vhe2arCqgIs2T+REGefMNb8qVPWkqB4ysIKIcC+a1Zt MEBjQMDNYcyUsZ+bBsiy7iU1OJ+61mTjWGMNXYcuQcKAl06fOBzsy+CEQeSzGkxzACDWaa555WBF L4mmlYk/av9WKq+/YaYFCof7YgzDgs3sOx0xh14iaLlJIJZMvk9KyErqwFawEOT0fAbpbLngoGaE D50wt4WRb84noSNnGxSdJAMaVgz1eYwwYgDGih2EE8s7UaZQgDkUkA6KLXkcGj2OGz7EqxXFx3Eq A4atKFycZ8EsIINSjFwrrriClRu2MKFckm0UZRwzPxwKiiICIzDWMRBdWfldSgrM+NVXs0GJWUBo ekZCGaMdgxvKfszSS1lpJj/kk1s6UIi5mQOFeQMZhiZOnCBDyhOmh20OXKO+vfKzrYQuSmPWY8qB /HMgJVvFOKQcHKtpNh7lggPxONyS85pqR4fLmRBcS43xjNUhGAefV12go8UowLlVDGYZpLygwR71 Av6gnK0tZWLddelEZWiRsoDRjZVCKG/wAgWVffUMuKiXbEdBuWDgyHYylq5SkCjb8B6Fa4xo5fwo 4jDoY5UKB/cyM0y6HODLSgmUP+o7/OWw03vUsWFcZRY04q6pfMtQxD+qq5mlxPTOdg3qNWXFrAiD sx132FY39myn8l1cbUJb8pQGgy0OOseQAB9dtsLJAI4r2ZkVZ4DH4ZDQiTJM+jFo1HXL6rA5l4C6 ijLPmVccRo1CQnmhyKH0cW0s5Q5vURJYPYQhiJUsKAoYQThAkg6Usz0wXHBOE+2Npft0vsgQVuRA yyYbbiB6lxL9MRzAUHSHFMi5UgJXVXlwJg1XtD74yCPeZkb5Up8wgHKmCO0Xwy1tnTRY7s7MKO/U 90ekDL/88jzXD2QSt0thcEEOLLXkGJXfsj7kGwWE61o5H4qBKbgZPNMO0sEH0oZ2lF6UXcofpY/r buELM33wlbqD4sz2Rw6FpbxdNqozL8uwi0F8gw3W9m161EVWb92puskeeOQLB8ty4xd1h9u/ntDA DxmFIsutSGw1ovypMJQZDj4ii9kywQ1lyKtlZfRZTodPs7WTP9owih3yFkMnFxGMHz/OhkPOm+Ic GA7EpF44n5LJnCWAzGabJwoyg1/qJkvAmVXDOLqccPsAZ9FBG8ehgLISgo4Po9yr4hkyHrkNf1H8 kRP3STH/w09+XLKG1ZesQF1YK1KulTHrnma8DFecc0GaH5ABhHPQWPaNjGSJOOVAncSYisGces8N OW9oixrGcAZB3AaDnM3+FfIoVWQZ5y0g86CLfmcl9z2j3R6Jw0CBc+KYfKD9MnhfS7KBK3Q5iPpZ yR/+GDBxexa84CpmrvVldSx1cOzKqyhvy2hFws0ezPG+0kr0cyt6q+SDmpjYesstzcuX58lgcNPN NuIwAEOeIB/tCuE8kseRE/q3UVaoOUeOc7imqL9lYM2tMc8996Lay/oa7G2liLHCl9V2D8yWAUt5 pL0ww4pRgNVy9EX09aRBHWBQTv/P7PUG669rQ8bj6nOyLXJjKVueg0xoxZixrAemL4oe2gQr/zhs lm07Syv/U2TozZUd9JC8U18ZzDDTC2/h3YHqZzEcoVOwWpXVYvQD2fdwlfLKKhvkMQYG+moGlpMn YvhSP4osUduBflZzsD12fRkOOGuOvjtlO7KB23wwYj+mwTL9B7KM+r7LTtt7MEYfVDu+MSDR7hiY cH4gBpeJa6zpG/Fou3GmV5Q79S1XR8GjLDuMFc/rAP2ZMmRZh1oeOC4ICcMrfQMwbL1nNSTtHhlG 20NPoq+iX2Awy5lnSy+9ZDNpzQnWPpkZh2/0Cchp5CLygz6ANoMspm3CQ8qW/he5hmGQyQ3qHv0Z g3J0ELZ5jVdZrr/eepZzxH9WRgX0IrZsY7Dhljd0K1YbsSLBvJd8XnfdtT0ZNmfOo5L9yPZF3S/T n9OfIMcfVR+FvOeGwDFj4jzAqO+SJqpHGMOe1/XXHEHAGWMYw5EH5InyphxoA9QRVvRgFKSOQ9/N 4g/yFTmI/GBFLjIoiyJLhNUfHL7MFnCMDNxqST2ZOmWSt+uCj/bGABSc49UnsYKXMkQu08fQvzIZ g6yDbuozdZc+YEWVxyabbOzynKUzmeAPg2HKaZx4i0M/YoUXdZBJMWAwmlA+lCWTGOQXQzODYQxg mkezIZh6jd5KOJcAsMqZ/NOGSIeLJzBOo8OlzrP2VK1Sl0z4poz5yFWMj0ym0h4v1UQj8hrZF7Io 2jgNnr6dPL4kww26+VO6wRHjLas2tt06jLCztFKPm0+RrRgjqK/z1Cdz0yA3YqKHsQUJg0TgV0l4 LMNqkMVdLzAoYbChzZAORl3kJ5MaE5Q+ZYF8Wkl+HHKPPKYM4N8TKjv0MfqxddaZYp4wUU25U+/J 24rqb2+WwRwdZxkd/UA7wUTJQdLowdR76gQy6bY7f+J8fGQr7YBQ24cPfXlMGeIw7DLxhN5J34Q+ TdvmjMbQaZ/25DV9BWMl2iVGdHiB7KXfs/xUe1laejhlz5ED6MdMhHJBjcc90g0Z9+y64w6+0IJ2 yS2xjEk22GB9G8OQRUzOLCr5uM7UtbUyM8YH0EmJ0h5pi9QldGaxRwacjU0vfSSGKlborS55DCzn FDIGgidMkC2t9kp/zKpM5Oteu+/qy0/AxZmihK2iA8gpJ2QbPFhM53AiM58W/S9KtqF/YSReXuX6 yCOP6eBsJrp0wZHaEEeJIBuCWj3k4OEdd8Zh3+g+iy++qGC0mkx1DpkFD9BB3i+cyAnri+IreWci E1qWkJ6GDrSy+E+fiQx+TjKNA8231fEdVBT80Q+QW0ykIq+4eAm5O3HiBMtOVi6lgVOR3rWD7yGU AoW/w9MeyKx77rnn9nPPPfcGeVB0/OFQonHpl/71k/fElv6OVH5qv/o949SwvNcw/bD8fjsYcI+E P3G0zwUG7CElHoQMFz/96mfC4pf+evV77Zfv/WdqCzzrML7TL9/73wmPUYx3w51//vl/vO+++x5J QwqH6oTKDIicHihh/krqIyR+CQAg4e1bvh0WYAN4itfAw7ARgY4QoUFHQceJAE9FO+OwHBlBjfB4 VI2S5ZEcXsitKQzcEOg0ZAQ8HR0WbpR+lDKs8Aw0EMB0oAhzOmaUTwYwDCBY+oiCiaEEehBWDGJR YNgKxUw+jYZOHGMLxiMUaxQiBKoPzkOCW5CzoojB7FwvZQU3HXBUHT0EhwCl42NGhW9mixi0IcSJ x4CNJat0QCgL7FllMLLvwUc2n/z4cdoPvb3yO0pCblnxZTnzLDq+5JjRCvVCzUGHH+dtDp/5u78R nISThOxKsnhzng5x4Ae3C8ArVrEwIGWlCmHwlIE5yjpGM4wNrMpgNpA8C8QOnjFAZVk3gtCKuSzT dJpYxOEd5cAgCMWeWVfyyaCX2SP+4CtLfzFEcRgxddQGKpUF6UIXHSB5wBDIViJw0lGMH7+aFBPt RZYxIwiKakrnSV0iLRRxFDfopx7QOaLwMzANF/WYATpXJP/ff/rX5m8//Ze+WQPDA/n4zL9/wTMo Z5/6VXda8AtBzoCNtCgLOnsUS3iGgYo6jRGApagMOnzlOvVcdLEajEHzaxo8csA04XQoKBOsYmFW BtoZTJNvBrbUOZQXeM45BVzVSjmPHbuSlR3SxYCXygszMrRy6h/KGgpcW1eUZUV1OU476EgZmRZp /u7//d/mI3ylvOBHHAwZgyzOl2IrAThoFyhfKILwHgWRussKQcoc/rBKh/IFD8t/Dz/uE83//p9/ rtVCm3n1jWeWVS7Ed50TQRz+x8w7RiAUbWa6l5URgrJEmbGSrraT7Wb8aqup44696LQ3ygpDKnWI dsaZVosLD6vclOMobvEPpZbBacoJlDYGSBjr0g9lBbqYrSNtjLwoUhhXmYmjU0cpZbsG5cFghxlL tgLSuaPY4Aet8JQ2y8wQ5YdcQH4gsyhfxDTymCczZ6x+s3FKcgmcxKdNoDgwaGTg8DzGDQ02aSPU MeoMB2wKofLAlsjRbs+Ek8bzOtAaY3e0yaApBiQy3EmO8getKGXwHUWNsnENChHnug4TqfsYDYFh hRfGJcqfsmDwyiHojz0aB6d39fMJ109m58nDGzIYPKY6+5r6AOQydY4BKrPDlAWGsGHbbFRpyKBq m5+s0mLARbljuKRuMYgir/+itsug9H/+xZ8KXrJLd8Gz4uvTf/N3OkxYh5B/5fOuawyKfTip2qVn cJUObZhBHNs4MG6ghEMTsBh+uJXr5FPOaD73r3/fTJwwwX5BWKltKmvkVdv3SAnkMF/8WMJOG4Hv UfocwL+I2hL90aKqUy81j4vPbNujj6DfQvmkusBv2gLyge0OyDdoQ2aIIeGn+s92pY996k+bYw4/ pDlMN7pQnrSts875lgZsFzXfPPMUGzzIb83WgY8Qj+Yz7ZMZZ2Q19Yu6hgyC95ZfahPUNUkMHw5N fxrtSZdVKA50Ymx78omnDUefxNZuVpJEn/OmDMaruR0iS8LvlzFw0IDOBV7KHFmXExnkHaMwfRUD ZcoeY4PVHwaEJQ58o37R9mkXXPNN3+J8iJf070yKQHfd91D23ECGcSJkVdy2x+pIDAbIRvKJnEI2 YsxjMARfGEhSrzGMwwNWJCLjSIM8cE4dsh2a+Y6ao6fKEbrgQeoV4KJ+06aWXUZyUfDkiXTc3yh9 dBnkAcVmR8HKoRtxeH3CYXRh1Z55ozQ4IwT5Tl1ALnBzHfIdWQdvAaT/JZ/oWyutpJs9pZ9QBtBY y3zqBMZzJtVYZUJ7j3YzWjSzqluGaXALD/oU/Rr9dJa3dQHpC/AaHOh51EkGWvSPOCY9WL3x0ryX 2zrGFdSUv3VA0QR+dARWIEAn5Ui/S1vCKEJ7MAP0i1wmPfpRDBHoMuQJWOo64cRPnQIZMHbVlTWo DjzoQchty1eVA4O6cTJCwy/w2kWRunnRX2EoefyJuRqsv+Q0qDvQRf9A/fvHf/lsc4pWl3z9pM+5 7VD21CHLH+WNoiU92jQrr+kD6CvQRZjceUryHuMiMJQZhkT6LRw0sbWPibClNHhmgB8G85cs163P iXbqHHoTugS4ad/oUC4r5ZNJC4wy9lOeGFWsrn4ZHRCdBzj4jHHo//nbv29uuu2O5kv//s/u+2iH jzz6aPMHf/Y/ZIDYvvlf//O/6czPol+WekszQMfCYEG/TZmgV6C/sfUN1qI/IVMzn9BE2TMJRx9M HNo6bY1640hwjzT0iZxkBdEii+rmZfECuml/6Gr0TdRd9ABKET/aM/WK9k5f+CzpKJ/Qtapg0Rfo /+EVcdBlMCJQB3HEY+Uw+j15YqKV8oFGDm8nLfoXVpPSXoNmRzW9ptufKhXJN8roGenglrXCja5n +afEudERmQZ9ROaJbsMTuUE5WX6q7mHkwChEP069p9xpe+iSMe5ZVXVlSY/ZMCCCg7xgyMNIhF6P H/lfY3WMPeqvsu6XtCmrqE+N6pMOp9dYB305DoQf5Um1JaVbIqvo2+A98oNxIgZL2iH8p090eYrH yMfkN2wBBj0MvnPkB30lcgE8rPrhEGkmWWnLvnZe9RZjHnLO/EYutPVvlPt/8BBG2yRvxKtlFhO0 5Jv6DE+YFMEAzwpXVmUj/5mgxsGTJ6Sn0md6lZvyQILQjWtlnt6tj4kH6NEdLxVQ6i7wC+pGjkIt LRnWG7LnoosuOm2fffb5N31CXP4ByHs+cwl1WFjDv35PWEWJ+3OruODo/0FE4tRrG57v9bN+B09m r35PP2BxfEPTfB1AC+ISrp8ILY1E6nDwJdxw/hleh+U7+OrwaMmS/cWfb2D567/ndxqEgMn3DOPJ 38IXXnjhH+29996VoUi+cqNUYTkzxcURXvGeqcJyHE8wAS9ybIwHpnZ8J/z8/A0XeOgAECzzdUoT 5aKGC8EZSmpbK9Q4UeS8kbjQRoOlcdGBpMOPBpmNMmEIJ430J6+kOxC/JIYf8exa3oif5EdCxyUW oeaZAvLL+JT6AAy4In+RAL8ISRrsbXfc0Uw76Kjm03/5F94+QdoD6YMZ9EQqDgXywMOOdbLnnXVq y7s6rzVPHE14EXTpnJeqbOA5A8m+S545rnDg0i9hk17Km8FNureEL897SRh4Q+feOaWr5Zs6h06C upRjsMllQLzh67H2SmvLXjrzuC0bHcpL2gUPMPD65G+cbkPR//nr/9Vsv+1HPPvyuAZGn/3iSVae /+ov/sydOtHoNGqXBrQ+X7uy7aCzHPo8BgIFZzj/jANMzV/yzz/XO4WxdNvtAECcwrMehwd++lOd QRmZdvCRVhTOkhGMdHFOq+os8avLLorZksB4qG+ZfuJGSeKWP4wJV159bXPkcSdqQP2PPrzSNENX Vd9Io5/vqBNSHEUsYUN5Hu2buLjheA+OdF5dq8/h4GzkdEMKaGgjzeSJuaz8uJ0Kh7+F29+ZgJ6Z p74coH4spJsyqiQ8CKu/KSvaR42TQ5P5hxKYjnaY5x3AG2RFXT4tnPKQ+a/rTIZT10g/+BplT5jL v+Jbwuez5h/4k0eEY+jCoJ9+Tr/ki3AUbeoj4QP5hFbyWbVx16tsZ4pTyydwCdz017jAyaqA2+64 08a58y78bvOnf3CitiNoFZDqO7lkRchfffpvm4u1VfHHl1xoZQ10pNdtfQjc1AsGvplW1Os3m1tu ud3nyqHIHXPUYTbyJK+dSKl2zo9ZC/3UFyRc8LrPO2jAaE5a/fLqysSB5jHw6Qiv+cn7ddrmetTx JzYnHHeUrv490INRjCnc8vLo4481//x3f2uFO+ss9U8VUCh5xiPzTTrJZ3gEr9JFHpU/1Us74WHw E0iKV4kzkC8lE6yg5MUVfb8pY17kI3hE7C7v+sg4tTyo4hmPwFy3iVw52uSAbFRY8huwzF8V5W3l cd0WiJe0triS3lJ/yeNC5k2XCu0ZDgw4PrMoaCuUS2EJ9YY2L4IHaS5pDeS9+AlUede5KeWbtAIu PAbKRcXoEkGfknP9EFj0y1FW1BXoiLIymL+zLg3gA0fVtqJNaSBOmRNVeMhLOudP9RnX52+dt5CJ ilfyRNqW4/7uaKcsnFJJosUPXOGxE+unRx7ll3lymfbLAToFxAp5ZLDeOnpURsQPgOLv7+Il/g7w r21XcbDt32nS6tQzzmkuvfh8GfVi4iLlZ6Lhafk9DP/MC+p8C9y1UfwwVqcL3sGMcMnnthzJSIdI WSLTMSHX5qHADOAqfpB3/Il/5C3Xn/uXf/BqWuQx27L+UVs+P3bsUdp2t3PUyUyL9HiX6+exbjNB I1BBoCc49Dr/Mo96DF1tnwOKYdxAfko4/CFu5D3SJaibXOt4Gf6D8pk6iKNOpUu5mnXeRrMM5kmU 5E1G0nOIXBOM5ZrCos4qcpWOy1YwIaMDkfPY1m3qCX1xJ3OAou+Dt0mfYwqP41b6CTQix8lju+NB fjhkSGn1/qbPSHmAh+MoXtapSFMwmvxKViQc6eKcx9QT7BM0gSvqRhczeTy/OMnjZLnlTLU1K3g1 yFPkMbpblqfzIV7lWIZv0wsfxNbUuTDE1xmLOtW1S7LT1vUkCE/wdNnCZ4FcjWIwQikr4WUsdMEF F5w2bdq02lBEijA8//I7n7V/7cd7/Qdchut1ICy/6yfw/e/hspFp1FzBD1fDp1+EDPM7yP1hAIpX JpTPGrLvl988IYBn/mW8Gma4MCRKHZd4+AGbz9ov8RGWrsab/hl3oQMPPHDzddddt916RhcN+qzU icTPxJ4UAVn82o69fCeegfjA1x4VnvROPMAheBAGKSDaJzS649ST/widgb/OTwH8F1iB4am4rVOg 0yl+NZ4WhpeEK3gyrIb3O3iSBwOZrWmKAZFxmr5CW/0uPOCzI+3yRxwEHJZlzuW5V8tqmeFjaT17 xHEDyYKieCBUODPohpk3W5lk9RWzpsw0tmkJ3PlQPpPH5tcA0i4vjgedpJO1q8Aaj8L8SbicchX4 5Z/h4U9gKQtD9dIASM5xCm94b+tfhc/+JmjkelzjKYhbHpvekgfXYyXCOTPMHLN1jpk4zpe5S0t6 mTXk/CRmPyijpLE1wJgu+UoLd5oVnWaM8mLYuryNJfJa4ylZcv01H6s4yeMhaVA0mSYI9O76Do/1 PsQJEVtifnTZlVqWfIuCNbOtpegra2sYVws7Ts2bUrmSzjatkiZdR/o5bdJXsnSGrKLhBovZsx+U QWqMV5YxK+o0lHJJJkis81Fwz09W1PkCT8vjimcJAxeAMRzh/CvPYFnhFbRDvP+HX5s3xW/fTR9g BU+ht00v6a9pAXf665mZTzmKPIbOTCN4hI/8Ch78Mq/ggt8OD6BB/A6JZFqcFZ4S3MYBVxgAwEkq gy59TEuFx7j1DT2GAQ/h/NM7OlZLv1ACI+/Oj4/iWjrlB1yNJ2HapxPTF7hIR38osZzZcvqZ53gW kjPouP3MQPqlTs6QbMR4yVlBbANgS4Zny6UcZ7ZT5igbLW7wA0B/xTkKzIjustMOXq0ZYQrGBVh5 D74M8Ma00ucN4gZHmyX4x59hQSinQCA82Jd/yxuIJGwAntujtBpWM5dsfWXVAWeXMTBjhn2arguf PGmC4tB4hdtyPVN3avGTXoWEyGf5KGBJY12P63rucCfSo5E8lD+YEbiFlAFJ+W795G1SKnoyXcdV OHF4959pg86MIG/+lXDjh2+DIIYxXxNPCTdvCS08Bj2YDTvAd0LC1fQBl31n+ucz4Wtasv5lWAtr XUlpVwAZls/h8JAN80n5Ag4eRw6CP11clYm5MExeFS95bBxGOai7kYxdgTW/yHvl+DI/TMdgPVaq QV/Cgwf+Fh6nN8+kOfJDPIoz4mdYHy7LEf+KhXzaBa5Od/N3BuqZePt4SLuus8Blewg+d0jM8VIt M1+RTvCJbYCc53fFlVd7mxvneLHam1Xu5n9BVVAEbwp/kj4qp9lupnQ8dtRMW2FO10+qRMe7pDbx JZzLouIxcDVMwHV+FAo0Y2zHMMT5RmwhZzU2Z0whR7m4gO2XrBRx/DZjQt6+B57kcdIHj4V+gAZ9 4dGVB/nCD3SZdyHuUAM/KHMyT+AhpnnT548QmB9BQNRpkDp56Or+8K7rcR3WvitiC1foVbRBBwAO ovJdH8mXxDUAU/MCWnGKa9iSJ/sVOJeXPFpcLW8MVflHuvgO1B3yjZ8SaUnU9/BlBWChv6Il0048 wBiulCXhtfM3eAjXX7oOT/hDGTQZnd4H6M5ISTRoCp9aGku6Ld5CT+AUPoXnH+j8XmD4zvqX5ZUM 6mRFiVPwkG6bm0JPjYf3d+QSWeaRyORRP+mFDnXffffdfs4553DLCTHoLHhm7HyO5J/hitLG6/sR hiNZ8OASpv8EJv0MWP0k2XjlO7D5Xvvz/rZuQQ+zrhElgTzznfA+ISN9459D64zHs85EP26mQzzC cAmfsPmdz4Sp4+IHfOLg2y6aSn7xTLSdXwxaSqPqvAfeRsKTCfJklqWt6kldwWI456DLRkuJXhwO bAtTlJsWT7y0eDJCiZtY23Cn20auSnQEPIInbuJxdH7sQcNqc1aCOtwj8abFARqBJ37TWAfqncNp OZvhuKMP9+oWlmiSgssmBZa+k8f4q7vzEmRu+ACYOFz57LRKIpkmibfpgtjY//PxuM1Dy03yEu7t eAwUZYW1nz3Nf/j7H/PZJVj6Waa+/th1vW+Z5fjtigZ41SUary3/Il2C7aWXFrSF6fO4i+NIGaHE dbRMMj9qQPwcJ16q10BcgjOq6486r1e1DYZDQ+ERWw/o1DyqdyxjEdqIFV8E8JaYDDjfesy2Es5M OP7YI7VVYTFvqSI2xgNQJV6eWY+NtYT7PUBLsl3aNSWJJ0gD5jfL46Q76VkQWdHm4R3yONPKssrv LKvEy/NtedwrW+IkxxNP5mmAx12iUaZ1+SniEDyJ1MgK5jZOvNi39YsEajxtksYV8pjZUs6Vmbb3 HjKuj2l20PW/bOnKtkv8n2trHNe7c/4dlHHGAblkGX/id9ptAt0LbYRBDzcFsbSdFXOJGyji1Tzu 4+m+TbQR45dfbXjJ0wCP28BIp2YdCdd4kGdMEJz4sWN8WxNbY9huNEFnPqwzZS1va7ASCwWk1cOd 9BBsV+j5bazHFekmtfvuclHzpg0veXq3PDaeNgleCub2NV5auDbhwbIKBuvXuBZMr+hQ8eaIHRp9 pm8H1wb75Z3KipHw1GlnmiTQwpc8/dfk8YKVVcf54FDyhudwsgKsbD3mttaNNlzfxwWwfRb4wBAY E0/Wm99mHjMw3mG7bbXt533e4sgRCGx54jwh5DVni3nFRWTNv6G7/Xp4XCXj17o9vCc8FtYheNpm ykspvfY1Xuzb+gWVNZ7w0S8w+pmfPDaMIpeUBD8U03vBY1MiRDka6tIjpHMLzuOCYRg+ZJ4Sa50j xzJfCK0it6/x0sKVZICu8fBtZ1zD8DiXpgNUcHeohmL6j+RxED6f35KntlYU+ucTg6AayhgKfPr3 n4ku2ZJx+E6/ZFRR1NsiSP8+bMbLtOo0Miz9hoOpaUi4YZ8JOGxg5QlcP6GR4qZ/PkHDe/87/Wuj UQ2Hf37zHOk7/XnmO/CslqqfGcZzYS0j+2PtNzyCMxw6Fw2bSDieNbd93aBHcw5e4J9+sxrAQwKZ 4NtgHKBn4EMR3wGeAeA+nrehoQ12vCrRHp4qpI0SL2/HY7GDyMM4BvOUF+c4MQuOpZwlkOyZni+P hQslo2W0OmgMHl4C2UtrAE8vT78LPO6zHZ6zkou90ChmDAI9yyVmsJTXNwMQaeQC76McLCt4jMty eAd4BhJ9t2XleJEonbqv3IRCVUIWFnB2Uy75DULz993VY/gZB2Fqb7n4yhQn237gKfkZqH/4iI73 hsfKY8qu3yCPzb1eWY1MzrvjcZbQSM/fRR5nvWOFIPWtG4CoMPSfG7ow7mDwYYk8Zzr4DAAxcSR5 3Ocvy/1pQzYcCWkqycAN1ON+xPl8D5QV9UZYf5V6jILK6gT6Ec5XYaaQs8Wc7+G2Ow2hraqt0MNn cVVIepXnb6Ae9yiY3+d7zWOn1eON+eTymx8lGVZxsoenCkng8nzveFynMcAbpfTbUo+d6R5v/ivz GPnF7aHezqJ3ZNUSWhGOoTflzEBZua6pJH9TfZ4LqKpJvbLKkNQtON8Ggz63VXFOCzLUMhrhm3lw /VtweZxpQMoAb4yn0isAWEA3gOc/CY+HZm1QVriD+/95XNjUq6h95r1NcAfeA+x9onPUfWcXr/82 CDhQ/wAdDO5HXoBvtRKUAojJOlA3nIKh2nr27/Li2lugMOjwx3t+a99c+12/E843LuPkM+MP9wQ+ /fOdeNgxeOIIT07wnq7/njCE1+81XMYdeP4qK4qSuBphJl4/CU9C8MfxTUZxw+HJsIAYzFSG1TgS L/C81+ln2pkOT60uTx5nFHs7YlIU1t6MLqRZkYjCu1PtwvEecAQJJjuyDKvxBJokd3hmZLyBlPwR Cfg1ySnAERIf9bt9aBiOpC8/A2IIXAmGOpzDE0hP77XlG+dnCVSm3PbaRAIkfoOrgYxoXd4JHxiU 9HhM50mDZctYOlaLq0vVXxISIQM8ltcYzaSnC1IVQ/j6bgBPAAqEjsWPKPISCb/kTfHqHv9Jedxl IN7gESuJGDTCeyswUmgi713u31k9NjdLAjwCm32FssOaIQE65Hd+PK6RtCkEBqcWSTqBrMfsFOcw 2TZVwVCzlOkhSQPjJAqeBa3H8I/6G4ahQo/8vDRYCAfqn4IH6rHC6SiDvvg1DcNSV9Hs14DM1zpe ycIwWCBAkInKz4D2b42kUJVeDg9Qx08eOxH8jRTcvx5Z4XT6P4We/9I8Ttb2eMwngxD4Ptj3KUT/ Ry+xpAyXHcOop/xleTqkJ4876HjzFj0Solhdvh1EXY/7fWeJ0gFXbwN4ACwU5WtN3/zwZD1Wljwg Y4KBgzy93F19iE4Pa1Ot8fidSNGhRZ8HJAH8+edd1GMPAIkv1MYT733eFN/BB/C/xTw2sRVv/Cp6 RyorZ+e3iMfu7UtdH6h/sB3/dL32UIolQweeA3iSIYLI1wpr1qiB+O3HfOQxDB4Jz38cjwsXerxp 6S8v75THyCJWK9IOM48poxL3SDwmvCWnABcqM+rg8z+QxymLMcyTN/KU5+U4o0m4Kwr1D1J/PTwu tTGxD/KkfP1n5PHQjAzqbm3l+B3mccejwoTOY/DtbYI74B5g7zMEXwc98ttgxIH6R6TB4JHRjBgi aWIcKVX0qdfuq4soYzXeQOezC+woyahJGd8YGzJe3/AAjoTN9+Hw1371O3FwNY5Mkycu065hhvML 6GF+K9VwmNDhverEhoNI4njmex+u79/HOdI38TIs3/lOv/qdNDMdnvW7ZHKtnhFNwenVQidaUMkl Br/3ksq4NVDB08MygCdQ9iD8WSemKPrsQbUElWTqlKGwrR41JuMBUe1ZPtIrn3j7vcD7vQSCp82y E+MnA4lQDTKKt8MzEn72H8wVB2tGeyQ88OgtnL7pSFlJRAfLH0Yi8AxiEXibZrwmfD5jz24FRJTh 8BREQOZfEFN+SXgQTeAZ4h9AxqGEWF5tp4ffCrzfM4iwkTJWeFNAKxqqSAQaoIekjUQ4YVV4m2AF pFcENLN4Vs5MeOKOj4Cu8ODtzwoPUYwr4nS/AcNv/nVhegNPgLTexjPEv8MDYBtFL34v8H4vgeDJ LBMc9aPUL1sh31097hKHEDDzF446W6cDTw0vWhKqawMZq+ShhWiR6aVkpngNy2PyqQAg86+Ax4OE B9G8bT0mYhtFL34vePxeAmseR2JVzMKbAtpDWLhBoAGSOwVLG4lwwqrwLNSOwsChOBVUIKrwxOsQ CBII2PxNPHoyK+zyKiA88i/B/QRtgUl/l9UQ/wBK0HwS1+8F3u8lsOXxAOmxGpCFa8616nNb10wA CCMC23N9uK7la4ETzNvJY6OpMwU9+hsgA6BCp+H7ZWXPPlDEGQkPA03XZzJeOyJUXgEjenr+fNMG CeBfG0Uvfi/wfi9pjMRjJ1/yVOMJskAIMjkCDaBv/XedSX+euD5vMm5HYYunYI14jtu9DsHTBrUU ho8+R8LTktvGLS9E6KMBzxD/AEo8bRS9wEu3Gx9kDr4Ifa953JLeJk5aEFrlegiPIRC4Aagor/nh GTaxoXgMVvCgB3SmjxZBJFynBRroeSc8Lgm5DesdYz3u18ljVuaFLByZx9EmJZQghzyZquonyAyP qqxC9+v6TsuyjPY2eGqUGcUJ9wLeFY9LmRjVu+QxBmufJeMxpSgEWf7VDIpEIgsVb+zhMN7yRU9e 9VejGIQlnNAhEBHRwOVnPnjIdqvT1nFACw2V+03x2CSYnpJX6NKfi6zOvuktRPd5U7y7TIEg8NQo nFYLSzihQyAiooHLj+IMgarwVK9dLCL0At4pjztkv6NvFf+q1wFmSG4Nw+ksfT8Jr4svUfHM9xpn DZv+wPXTSTiew4VlODgyPu8Jzzuuhsvv4egycP3zTgxF/URqPPlew9REQsz8CBouLHFlXJ741bAZ lulnWMIlDp75Z1h1Mglb4iq49sqYSq59bV8KEQUD3t1ME2pn5fRhsDq1BEi/Gg9R/T2IBwXB3hmn SiICuloA+oR11a5gA49Ck4YqLF67dNu4Am/fC7wVFqUyHBrStnJSBlBdXEGPwGOkNYrja6+yJeA1 p5J54MN5auN2NBpQgTVs+vnpAL2VJ0oK29agD6w1/b8Kj4fiEf7aExIyj9rC9Qv94VreCLx9d4ii O/7IPCZPmUQXV4Oelk9ClAB1WbV+hS2wooB2cQd5Ax6DFdg2Ai/pV+Np/Qfx/Lp5bLr8E+lSp7hx yk70dXwKr98OHneMc91UPXlFVzdbEc6y6vH4ndTjNGR46T43SMklWp5GXXiT/obRhwcxtScBrevK tuVrwdOC6OVX5bHbTQ5ARFFLTvvS5YF08R5ajwsDFZj5BdYu8RSQACh4EkZYEyzjUFYYnLlOlyu5 2wFfl5SUZ2SN/oikH/hU44n2oIDas02Tly5d4poXWg3T1ukC2+cxZY4hJGj7heNlEm1ZCXfyibyg 6Ecdidvt3rk87jKe+W2z0iZefDrQZPdAXg1FfnkpsOnHk9uJ3tTh89CLA33Ckj9o549rvblFxmFJ g2PUP4M8dogidHwK2D6PawyZdibRxe14bHgB0Pew/Y3tJhxmm2UPvZRD5hdcWT5dPXBKjlPeMnqL J+Pn03haYru8tvTwksh4bzPBR+daPIIlfwkGxHD1OPs7nkAnPG3il6//snleV0+/qvKJ8EhnOB63 eCBS/xPP/Hgc2N6trIjYJATllAs0UNfe4nB3HAG48sQ3veq8GqbgqQD0Sv2MOvBL1eN0LR4hWxAe Z7x4djwmLnRz49Qv1Jfgkr7heBzxC4wAoQO3oDx2Galc2c752muvR1qZoPGEdOQ2Jx8foHK3S97o I9NsXzJ+eRKeXgvC4yF4IkV7G49+flUeG2XBU9D78W54DG8W5hbQdGTYTHn7ekyUuqxaXhKgj+Rb 658vGVCeeKfXgvE49PbX1Z45EiJdi0fIfnM8HmwPps30dDmEN0PKKnmTvKjA/6N5nO3KMshjluRw VA2T5jzFd4aSp3esu2Xk38VnlnlV1rAhvXn3xBIvg96A5B+xE0NGzbD8Jn7tFsQfnAlXv4Mn08xw nvV70lPD8p4uYfN72GcllYYNT886sfTjOZx/7ZeGqPQb7olf7Z/f+azTqfGNFAeYDMv3/nPUQQcd tEXeepbAJISDc07IAdHB4dcOBACSCz/8h4YGzhKDD0DKw77FDx0qG3XECTh+u2/FID5EFTyE21V4 0qOLV2Dah0KC1Nane4lYCKZwPPO9H0n+9upzhJgK0/9Xfv4L3SzzgLcrcc5LYgrcET15TJrz5s3T 1cU3NFdPv85nuKy5xuriSwh64r4XPGYg9MKLLzWzdMvEmKWWHNjCRgq/Co+7/Omtzy7oV9oM2q6b cWNzzfTrrUxNWHMNjqgprh8p8YzA44zmZ6Te0RCBLUYHBJ7wG4RMuPeCx6QyiN3VoVCrMBJ7l/W4 w6u3JLpg7h4JpdxoBcVs3db2sg6lXmaZpTuQ9i3xDKW5pjrAA29iTxQtGQ4IPOE3CJlw8+Wx6shP dAMT9eOmW29rpuqA3cXZLgTT9F/BlhWux7qdittSlnqbeoyCcf/s2c306Tc002fc0Ky5+urixRi3 LfI4SGWdaxJTLvsAznh4vieyIhlZ4638SIPbqaLNLqU2u6hDhyMt/ebLY2JDPsDlYS4Uv+Qxfpn1 /tN8K3T96MdX6Law6b7ieIJk1lJLLukyAg+8f/Lpp5uHHnqkWVG32iW/Ep8JSaKDnOo3oDJOpvn8 C883t9/5E21dXMxpRQTBGk/QTJxnn32u+SG0XTW9uX/WrGby5Ik+dygyn78RGzq5Beyaa69vZt50 c7P6+NVM63RdJX/NtddpgPxKM2GNNZTEgsjjghvyR+AxqWa2kxf9p/MLYIXHn8obZ3zNvOkW0Taj eWzu3GatyZNtkCM83QOzHmquvnZ6c+PNtzTjxq3qWxoHViAYMFKtedxxJilMjIKteJy+8Uzq07fg zc/yJPrCUvafmPtkM1193TXXzWiW1MUMq6y8siGeePKpZs5jj+smp/f57L3kUo2dd/Bk30nE9Kvr Mf6Zg4zff47EY2MsSKnH4br20PlUb5lYQivivHkvu16NXmJ0u9UWI9Gjcx9vfnTp5c2V11zrW/jW mjTJeoLTNZ4uLcqG26BoQ8hwztcKF4S15BXflgwHBJ7WzzARI/36siLxEQ6PodfyU+U1/bobdCX7 +JCfpePu8AQBGT+fw/GYPD3xxJOW89dI31l++WUtH0IPDDz5W+NpCzQD22dAdfVYh2houzht5Nrr rm8eFO/WXWftAi1YE93xuEXTSrz0KXjzszwzzwGOoWBU8/TTzyqtGepjZtp7vGQIK2QSA7T9TMb0 6264Ue3yeulCzzeTJk1IFMYMbODWW360fuEFYODsnrzZr4oDnCGKn5Ivbmi+2yCwtJlL+HwGVMdj vjNmP1LiGZpWF6eHV59z5jyqW32f8S2obTpGHXgGU4m0O7/4TorySfivS1ZA4y/UN8yYeVNzreox fc7kyZPMl0x/MJd8KaQjOoPLM2K1eTd/E1M/UuKZH48zbsHrVDo87Ztffrt4DMUYkl999RXprz+3 AZZVZ4su2sm/zF0ysfvWW5u5DM1nQA3P44T5XXyKL7BGfBtOVvRuPYNBcDj/+t+1P2Hp6m1n6Qfs 2zlgCnUt6EjfwNLkM04boXohLn8L7CxDFgC6n5n5EVGjAy7jJmGZwfyu4Yfzq8N5T5ikIfH34Yb7 zrhW4hOgj4CKYj//RNk6IltRKteJqECbeNr4GuB1eIhYOk7wFGCU105EVciBTjoAJolMoH1pAcrA j/gtEB/FpV/B08Kkf4e8U6YJq8MTF8/EM8iPJHJhCbi777mn+ad/+ayvM2UgkpgSS8sjBRCOYem2 O+5qTjvjbA9WfNCvgN9LHpPOdTNmNH//mX/TgPxep/tOeAw1KEUeCWZGyrPLX/ImfeJJ2hgs7rjz ruaU089qbrrltsDVcoYyqF3iGZ7HNWSWU6aYYa3Ac0DgcSq/xfW45XHLl8xN5pLv5E3mOJ50rAmF YH/xpZebL3/1G80pp50RM/cdqvKWeH47eAxRj855rPneJZc2p+kq81d0ADvVLVmRsoK6NEMGx3/4 Z9Xjn/x0vvWYOvCkBiWXX3Vtc/I3zmie1qBrVDtrmfwr7OiSireoLCUwYTuCGNiE4yU/HCkDwt9e 747HlOk102c0/6A2+9N7os2CPEjLNCO5lBXEQRHK0FbWvEt5nHhqWcE5Eud+64LmepXDizJkMeh9 9rnnvXooqeFg9PMv+k7z4MMP+9DkbI/gowwtS5QR3sNlSuQu3msec67Ozbfc3vzb577UXHDRxSUO D8EWHpNvDClnnntec+NNtzbPPf9cc9U11+na+5dLOgVvFZu4c1VHLr3iyubUM85pnnnmWQ0AXpOs +klz6plnNzNuuEn5UhLCnTwuCQ7D40J5ZkUQJq3q80i6wxOEJHjNY/tlQEkJXK/qIOr7H5jdnPXN 85ofyuCAQbjdSS4A+PzEk080P778KrX9s5qnn3mmKpdECKZ4r3mcfpm/oI5fwRIlt4bwatfhSZ/E kSmlP3SxNec5TRjMuPGm5uunnt7ce+/9US4i4jvf+37zL//2eRkRnpAfsswJFiqJG5jziREjnSHf Ix5rmVxmYb56RZe/5E36vOU83XLb7c0/fuazMg7M9Df156WX5zWnnHpWc7f63yeefFp18/rm5xps 5grfPo8xiv/o0iuaf/rXz6odPRIrrpzpSCtTbPkQLCv0h8wJ3iRkPLv6FxEyNNLXyg61Nfyg60nR efmV1zQnn3qG2sYzA0bJDk9QkHjmV49p78/JUIJh5Ssnn9o8pHyFDMjYmZu2GOShsMhICUxYPOM9 6zF8ZpUSbeQcyaiLvndJ9CMZ38/5y2PooZ7hMqX4inrYBbxpfryoiYubbrm1OfmU05rbpOM4fqm/ YOD7Va3Iukv91elnnmvjevBOiVQJBIld/SOdd8PjoK/DM6jXOrT96ZLXWxBQwjIEz3hPHsd3HU6U /NbTeEbmcfBXQCAUo99Qf3LWN7/dfPaLJ2li5AWvmDQRFR6/mgDeIq2ON/Edvwo2sEL1tF8bkFns eEM6HR6+ErueGV9YBvHoS2Gsivzpffc3p5/9zeYK6Ri01y62UfmnSz7idTAZ0sV7L3gMfzsXacQv 6YTL+l2XlUPfhse0L+fT+sR7z2NoeF2GXiY5zv7mBe7nzjjnW82ZZ31TEwwyxAaRmY32mZw0bwdg MgTPwov08nf70eL63XkpeV+APk8yxFzt8abvx3f+AZrM5dmHJXw4P/xrB0w/fv+7hs80a9z1O+EJ k886/pD3ujUNCaw8SKROiPd+Av3vhO/DAleHVckMwVmHZZyMn3h5ZhjwScdwfm2YCj3f6zQicl++ J0QrWTKZgiIpSTh5O/EheApJFZ7wqfAkDj1ZSFBitJmKYPk6SokHbBVv8IOAgdDqezg8fdgOcS/J LqB9C3oQpG9qiTbCzjdjVfntgfqT5dHLvm+ZZqsPb64B/ZtaKq0lrCqeoKTkkY8uu353eO1nbIX+ Ks3oBIVPfmxDeP31N7wkm+8F5TGwL0vJjcGgEirJOMmhn5VPALJscYUVlm+22nJz54+tRUOQyGdI duqEHDgUQtGGuPmCVryJiAVnL08QY69fqR6L74lHiZWUCr3Cbo/wbXn8rAbcJNyjp/dZAcgoIEHP 4JCZVJybt9CiML+u7R0u65LvQRqArjBX9BAyP2fQIbwpMd4pj4UMVWyjjTZoxq+2qowPL3lGtk4/ qIx6TH0iX3FT1Qj1WBF+qVndqVOmNOuvt3bzwgsvlltjKqxV1vHtfVY+GdJxrzPFVPjK61A2ZvyE TTz5TP9rtobfAABAAElEQVTBJ2x8S/Ih2mxsiWohRuDxE089pa17GnxmkkrCr0OSKgAtYOa/AGZ8 J9jVY4yQs2Y/2Jx73gXNFh/arDn6iEObww46oFlxheWi3gmeLUQ3anXOTTff3my0wQbyoY4G5SiZ c7US5uFH5ng5MwYZtmM4dcN0hLY8hhbpKUsuuVSziA6Vv1JKuZdCV7SDHQX5zrt/2px/4Xeb7bbZ qjnmqMObgw6YpmuXcxUZUIOOmf91pk5p1l5riusd26GWXnqpZmvJKsJ+/kq5MdIZGI43wifvBeVx pD48nlpWDFIZhUGs0YsvYdo4EH6ejO+RcCksAUDm2srPVP09K0NZ3pQU+ATnpP1jrxJzMLny1QMd Bibx5HMYEHk5VLKCMhs/blzzwQ9s2vzsZ6/I6KXbDylD/f1Sfd9r7puijUe+KnxCYlr1RL5hUPLB twkyUBdI0amWSAmkz8TTeZW3wokKzwBvBj6GoBWOBGDwhA5Afl53n8s37ebGG29pLv3x5c1uu+zU HH/0Ec2+e+/eLKlDiuPMwCQo8YCSG67e8ArcwXJM2O7p3L4H8vh1lckTc58y9yivqVMmNxust47l 5xvKEzR17p3zGL6MH7da83sfeH/zolZdvf4aW88Kzhp159sll3A8nXRJv4Kl/nP5BO2XG/2YoOqB Vvj02gukrFjFNe/ll3t5HQLqVOHRKqus1Gy5xYeal7QynK1n4Tra6KfGjFnaNGHUffnnPyts7GBK pF6ahBeYPm/k3fMqKIpvVU6hAw4GZ3pDcaRPPjsaW3mckaunWm1Lanhn/ATq8Dyl1YP0UVjwEopL Q14X70J36WAHcuk8ZRjPfM80ylPeNu0sUHuo8CQxBc18ZYVwj1lyTLPNllsIGv1Ysth9hD8Lhnj0 0FYACnEWunwMhe1QmcfdZ4VHrwWPZeOTT0afWtWBgWh8dEkOBg3weBCQtvGCjKLPS5ca9RZbyoXk PeaxJ8e0kvfzX/qq9YzRi4/2isurtGoLnYM+2a7HqN6nQNInn12G51ePA/nvyq94A1uqepLcMgeq D9WrjoEde9IPSP74zj+gEkM+8cNlPJ51XAeWn5HiJEziyO/Ek991zcx0Mixx5zP9h33mOrZhA3ue SVQm2E+g/k6YREFY34+w9MsnfiPhqWHq9xrP/OKDN3ETf4hLpNSZDiCjdOABV/ljaESiFpd42tQy wE/i1bA1ng4QhZ8OmANGmTnM7xaiJ8xCgJaUC3rP0ok2Bss+F0F4nJriRpVXLKXDQIwopKHr4Ap9 aTXXbIfCiekzORSR9hJ4RJdwMRsCgoUXWdhh0L3++us0f/7Hn2pYgoxxBmf8iks4BCzEMvKCb0lt oZk0YU1ttaluNKtZpXwwgWoFlLgl/2+BW3Tb37TzqdlY8U1HsoruuO5Zvs7XVltsroH4uGbK5MlW sqGJzKCoggN6GFzjj0LDck/8+b70x1c1i2rry1677wqYwsIoQViW1cILLULfL57FuRigZAUHhozR o0c3E9ZcU9tnFnFezJTeD/kiveCxEtG7z9gIRHw6PHiqq9WlfAPLH3TwxIGHsqRqUn/Mc/wFo0xG vpRxw+gJXoBZ5QAOBiDgHuSr4ioMZRl/tlHAH8re57AoHZ+3IDyekVUYwU5T+FseK8IvZUjEfwiP L7/aSu7ee3Q8Jq2kI9qDrvhW2iifOM4rmSvF/qxzzmuOPfrwZrnllnP9XHbZZZqPHX90s+giizov rg/ClbyB9kXgmfyCD5kPslnqg/BHHoNe+BgcFqzCFLX9Dh8oKk5hotwfWS7wmDg41614df6AYdvP ijIokt9YGSP6dCMTZQiuwPNWs8XmH2xWHbtKs9Zak1xWwefgE3WD+sZV6NAK3Dj9JU6SxB8y4AV0 1HkiHGcyFZ6853yOhReBnihL+JZ1Dr4E/lIHIUgIXMZ6p6TatNy+lBfwlISJy18MfOF1V6+3kiLK lo9sswITrNJRmtSHUYIFG34/1yqsM1UP9lH9WWvyJNd7eJZ0whvqOGkFL8llIcJvEUa4y1px49yY wTZ09933asXaS82mm2zUTJwwod2ale2M9nC9luSzguJFrSB5c/w4YQ8HLRde/INm5ZXZjtY0p2gV 5V//5V80i2k7mbIjF+URlMUv9Qaj+2YaXE6/fj2vALKcs5SLshIHnM+btJKIs0Lev/GGKvuxlqsl aecbGl0uJY8UwrhVxzarjF1ZvCTfumFIsmrSRMljro7Xv+AVfA/+AEMdG8CjRKBWBW2WZl2Vx//H 3puAa1Vc+d5bcQZEEBwC4jkMIiogoOKsCIoTiog4m8QkJna60/2l7+10d7rvTW7f/vJ8N/d50rnp qHHWOGCcFecJ5ymOKCLzrAJqnMWJ7//711571/ueF9TEpLuvXXDevXftqlVVq1atWrVq1doRZR6Q EuV9kPBf9ZHaiVVq9EHUPd6vp3lmWx2F66JjfqainJDKxND81luK5lU29EGA1tz3wj+bEwTKSEEv UzWIVTzpwagfnYR7YqAHxgybIcSsK+sT8gSOnDj7IRV5A2aPHt2LbbftIz6nNpZl0rYjRLN7abNk a/UD4yDVPX2lDdjB67kuXrLUi4ZvSNnSfbNu7jP6ow6uufuHhjOH01bKIXCf2qd0+h+LD/ATNAw+ 1mEO0I3nIPqxfF9WO40NwUOJA05oky7u55Gi1R+obu1tfd0elBeMiQ2l6Bs2dEd/dQ4FpUgbZFMt 44k7+B2jYB3FHzR2TDFkpx2L9vY2w0ltgP7qdtQ0XfJrwQBa0Az1Z84IS2Xeup2pcB4dwC2WzSh5 v3nqKcLTuuafW2+9tfkX8wXBuCvxmeBQ67w80TD9q38VPp0Tilmt42bdxev7GH+JfogXBNUnxzGo iTagYBK4NJdpDJugwJHqwV8oDckPrvu3t/trr29p0yHB0Lf9BIM2iGsa55QZcLjH99lHkhevvOb6 Yo/ddi2G7zzUbaUNph+VQ1+T1v0AGPGC7t02k2zT13Wj7xyUKMkFCdcorfq1txUbibcwm7kxXAQt ySgaU6JT5i3qlPDmBCRyfRPPS33seVx5wQt1oX6pnmRXHUQgnvNVlsc7fUed+Acda7xQ94a8KoY6 J3IEt8wzom3Fh/yrCFKZHqgnfBm4MT49VsExQPQHPPedciGroHi/RBafRxx2cDFwQH+XxRdljz/2 aPu64+gpMAjUzfVEXhKfiTbyFh5JMvMKoYm05ONdiV2ql551k/LqverrNgMbOgIf5XvgkQcAvHNb VOeUTvFliLLWkyzLketNNuGLdHrJH4FKlCFuGX8k6MArnC71A/0BH1uHtpLW9XO2xBNUQRehSqb5 XzxH9bMsqDjkTjZzL7n8yuKk44/x/BftoM4E1iu01+MAfOkv6Ip73nElX+SJePpg6s23F1tJMXrg mNFORz3MV5QnZGPGIHnqEIhRTB5dJ/AdZb/9zjuWYV566eXib/76exrHbarLalmYv1fcK7cEKSGY 1L+SjnlveU9luq4kEizgpblE9Kq6mybBseJLyjC4L/VPhYuEhURhdJJw1LGvso50+kAkKctMCc5a fskT+bgyCPO8UWpc1wQqYKzt/ZrefRrshnyfR1EUGakcIQqKZ+LiPhoQz7xrFdb2vtW7VnHAJZ76 RJ2IixB54n08x/t01VvTi54SkADJa2LKbE6ngabnFJNSV0n8njxRqRwOsY3pERQtq1QAEuOfOWu2 /XKEc9FBAwdIuGJnOgWxITEE3cP7KFN/n6gBZS3NuF577TUdVXi6eF2CwsfaJf6KhJ1dRgyTqfNi mzt304SE/6BZs+d4Ehy03YBiJwlkFqg0QWKB8NQz0727BNMc0L/du+MWcFUWO07PPD29WK5yPtFu CAvz3XYZ4XrNfHFWwc7+Vltq8eFK6Vy+dlGenzHTprU4rEZYYkd+067yHwOT1QQGZlODUpt44hmG R3kzZaq/RH4cEDho3zLtzHfp3EUCzRAv1nASPWfuLPs0oGx8g9x7/4NeCO0weJA09Au8a84iEphL l70sE+052gl7uxg8aKDN2195eXnRTW3Za/dRriM77M/InPpymQbjOwmfEkwEO+0w2H6Opj83w75w 2CHabLPNhOOdS58DErDVppk6MjNn3jzvFrHjxrGOqqfUQPofFFEfnOK+OGuOFwLbSQkA8h7Ruf4d Bm9fjNp1pBeATz87vVi69KVildpKG3fbZaTPLs+YOctWCr3UZoSaOfPmW0myk5R22w/azjieK589 c+bOs0IOfNx730MWaMeNOaDo3GUTtwM/Oex2b7zxhsXInYdJ2adFrurJLiNHX1gggxMsX3aXMMnn 3vEx9ZTqtVxm+kxMKMR2Vp9sIAFo6bKXhOO53m0crHpAf/ho6CYrsj33GFVsLjpIOH6+mCIcoyyh XeB4x8GDjRfqtFjHslatet/C1jDR6cCB/SEO76xffd3U4sZbbjOeoKse6gcEAiw/ks8VBA/RmOr9 nCwu8HnBfecunYthQ3YsesuPCW18VzudL86eWyyStce2225jwXrOnHkW1oaqzB21s5wGnosmiwK9 l+54QoB97fXXi0cff8L5ecNkD77fkRCAbxIWSAjWy5evKJ7QEY2PtJPYQwqifaQUQTAkLJMvj+nP zzCNM0bAFX37kuiTMYvVUX+NSQICErTzjPqAcYZlVVfl2W3k8KJXr56iwySIcQwHnzoLFy2yz5pd NV4R9ELpZmD+SUSJRcAMjVmsX8DXhqKJXYbvrP7Z0u1cJmEGnznQNYuTvvKBNHSnwd4Bg2cs0LEK jkBAE/36tRWzxddefe13xVZaDO8xajctZDq7NPjB088+WyxSH5MWXz/sUHMPL8TfyUCNWXDNQua5 56aLvhf4Pef2gdVVsG65/S4dy7qx2EJ4WimfCd3k1wTrEupAv3Msi/6jL7fffjvdlv3GhSar76Ax FouMMQQr6HT4sKHGPemhZ8YgC8Hnn3/R/TGgX7t5RU4Km3XvpvGwvLhj2r1e6CKokR9fZdPuvb84 /bRvyF/HI8W72omFD0NC0KgXOZBUqpIpC1xSt1dELytWrCxQpNLnWGCmXIlHLl6yRMdqZ3iMYKkE nePrqnv3zcwP4L8cF2DMQoNYSwisw2rh2qGMsHVeiR4n0ZzAmJqhsQgfwQoKH1k77TjYvq8QcB/W MSP4G3joI+XTzkOHiK9/VEyTX5KtpLzZQb5S3nzzLR8vhl7h3XtqDqD980Qrz6uPGCP45iLvtm3y VacmIuPja+UFHWl+WwIzi43lwoPHrZFODcvKplaY99LXz06fbr4Gj4J3Mwduuumm9qdCXRiv+ImB hpZqbpmu4zEfyKpki569it1H7VLSiGdclbROsWTZMtGS6iGahAdv0UvpdtvFuLDikvqU9MS1wm9C rn9ZsBOspFYd5y9YaJ9j9PE6mocI72lB+eTTzxbLNEcxPjftKiuvvfcUj9KRxutu1ILlVvHH7a0o ArfbSplqhY87Ky0cX9Ec/ORTz5o/s4hBQQXvZOwsFL632KKX68e8yCbIEPHbQWX50OurOob4pGSA 34lmaRLzyI7iY9STRRQ7608/85yur2ksfiIl9+bFbruOMI29+OIczxl9+/Zxemjmxdk6aie4zCOg KVlOspxfXfTts41lnBdfZL6c77Yw9pBt8JPFOKYSCxcv9njG8od5fJbGNv5RthCf23P3Xc33GGfU D/ngGY1lcEYZbBJ16dKFoov29jZ/ct3s1l222rzmiiuvll+v+aLrHbz4gm9DRyKUYrn55wPC3WIr UZF37E9R/QMimVuZh1FYd+68cTFi552L3lt/RXykHFsqt+weyWRsACQfbA898pjnKvA6QsoZxixl wn/maD6apT/kC3hfPyneRo4YbsUE0N5RWU8+9YyPGH8oeWOzTbvZcgcap9psWjH/zpAc8sbrbxZb f2VL0zr+sUgQsiTz7dvvvG3fSVdedV1p4faBrJI2sqzzpuZ9eD18FSfx8NtdNL+glEUlw/xA/Zcs W1LcePNt5lP4w4M/DGzvp6LS/MuVwJX0KFynz3yhkqG6qd5YW/Xq2dOLdSdWCfDFlRrzs4TjV8RX Bw4YoLKWupzum3UvRo4cZuUwuGcOhxfCl1HOcER48PYDPU6Za5597nnLE8wv+L6C12ypOe2jjz7U cVDJUQsWWx5i3p0pmoUGUeoMlazAPEe9mfOe0viEHwOnTRudw6WcZ16gfOgdHKFw5/gvsJhv8UF4 zfVTi549ekiGfV08sLNoaSP30Saa90I5QRn02wuqD22CbkcOT22EiNLYfsayK3Lmtho/u2rsra/2 JgwLx0IecFZ9sErz+IvGCX2HYmTIEI31gVLUqh+YE5gjOSbN5gI+8DgWC4+HZw9TuxxULjyQes2c NcvW8RwFhg8kP3YMpCi9yuI2MdZZT3AcGl6xudqPfIIMRhboE7j0D0pFeBtyPoE4xta8BQuKLcVv 2VimfjjQZm00QniBfvGVdePNtxTXT73Jfb/11lu6HPgE8+7TXs9ovaIxgTxBf6LgWyRamT17nuC9 X2ynfoYf4l+wV88eWgfsbhpBdoAfT7nq6mKE5AHG13riZcgSr2tM4FeS+YS5aZtteosPSi7vtF7V F25I6hG6L8W7g9IbflH+/U5O/pFbkWP7t7d7bqQPDxi9r2mFe/4hmzHHs2nAxhC8HHyavykN9Pk0 6zO1g3kbOoTOUUqKsdTrxaY61LX5ctylmV1tLfGQ1uTRQ1wbAqlaYYyEkSl/nyb6BIJ4QsCIZ+Ly vDwTIi491c95Pt7x3CotZRMfoTlfxH/qtdOnpkgJ8sLyLMTn7z7tvtX7gBFX4Ee6iItrvIvnPJ1E SefjSuDafB/51pUz693DmTV4ZvBVQbcQT7WCB2y81pWpNR554Xv/1HDcI4prgBPdSUF6lxREzugI 7mBaOBT91zPP9aKGSemRxx73RLezFEU9uvfwIF8taq7qbBCqRwmKeBj8JZwFl5KkuxRCCKIPPPyI d4iIu/SKK82UPxTzmzd/oXz3PCpG96wsD7bwYg+nzxddNsWMfSOZ+COk360FD4I2ghFmplhw4JuD iW6ZzOB/c/X1rt9GEvp/c811EmanmjGxIEa58IszzzYzZRG/RIuwG6feYqGOiQiNPIL8NdfeWLRr ct93rz3hZWVgp6CT/bdcde0N2u26tnhT9cPJLRPytPsesJAxWBMLuwQ333ZncfkVVzlumRQS98mM E+EGYeJqCdh33D2tGL3vXmLEPbxz+Jurr5O10D02mV66ZFnxrBbnd8q/BbhHaGNBc+NNt+kM9v1m 2kzkLMYHDxokZcBviyuVH0HhfU1mpOEdO6bkv+POacUVqu+q996XALGeBQOYOxMUR+28ACxbCVwE oeuFl99cfa0XhfPmLXT96VuE0utuvNmOQDl+wuR8+13ThKdP1G9bS1Fyq9vNAuB9CQbzNNk9ICec CHfbyNSdxf20e+9TmmuKJ9TX9Ml98v8ySxPu/sIHgs1Fl07xZIfwgJPCGRJShuy0gyeXi359udI/ bGerpMXHwv777KPar/YZ9Ucfe8ICz1ItpG6/+x7RwmYSatt01vop0cP1xR3yNYFQgaIP5Ro4xkJl hJRR4Pimm24t7hL+NhH9BI4RFu4VjZ130aVWbLBgov9enDXbQh+WD/g9mHLlNcYXZeKHh4UeCoYL L7lM/dBJi9HdJIx8UtyqOlx+xdUWnhFOnpCAjbDXLiEPweXlV14prheOwT/34BgBhX7F4S+C8aYS 2ELYZRw3jHFhw7QspSa+dS6XHxWUYsOGDPEi5clnni1+8r9+poXw+u5PxtnVomnMipnIcTqKYhDB v7PKQRCePl24umeaFhXrWhBlsY8J8u133i3872WlJPiDDm+VzxaULK8KB7+RsL++dvxQcsycOVv4 nibBtasEoOXFCy/MEh7v1ULtDQuv0CohWBT0xqLzJinfGDPQLsLkVRrjb7/zrhYau1ipc855F2nx PstOefFzc9c995qvIbwxS+EMGV8+D8g3GMqwhYuWiKc8a59JCGEoawiMUehrA/EaFoU3ahHMYukN CV74ornrnvuK0TpKhfD0pBaZvzrvQlWQ/6uLm2/VDp+EJITsS7WTSH9tLj75hvgJO7kI6D//5VkW rDeWQH6fhHbMx/eUVVZSTKsC9KMajfCF0vH6G2/REa9O5qOPPPLbYpaUtyjSOcL1tMYTvnFYnPbY fDMLYixAUUqzIwosEImlB3hjcY3Ai3XRRx9+ZAXiwxpbRx95mHYOr5SV0AgJ7QisUmaqj+GDjJFX dQST44UoyVis0UdLli61ED9m9H4eIy5LxRHYUcT3GT5dyINl3XL1dXtbmxXg557/ay+wNhTvmDt/ fnGvcN5N7cE6h/HG4okPCkwYf5gV6+9IaXqNaLOvFBD7C/fQxj3T7isuvuwKz03MfE9Nf67AgqlN CggE1Ed1tAhl70zRxE7iG7R70eIlxY//35/asmq/ffc2Hd0qhd4N4qlYumF9Cj+5QGOcL2ER4Bko nodqsc5C7imNhwvlL+klOYJGiYRS6pnnn7OCZ/yh46x8cMbyh/niuedeKO6+734rIFDoMH6hz9ek qIQ+XxDfo32Par7t397mhQnK8CsV99jjT1gJgSItaMT8We//5RdniR7mFl1Vr/lauEzVongL7TDj VLtaJEEDylnN0TwqDl7BIg2ecN2NNxX77DFK7R8shf2DpnMU4geN2d/9fZPomnHOeIZX8zxi2LBi 5WuvFpeJh7EoCvqDD7b74wiqrcpBAcF4PfeCS4rH5OuCRQ0bEPAV5p7b7rzLMFC6sNiaqzHzgPgV iulteve2A3CUIvh4YvHG4gL8wYv7ahHEphN9hQ+rxzQHbtp1UylX5hXX3TDVfA4lCDwZ5f0eUqJt LaXhA5o77r7nfs+zm3bragXrq9rsuVZ4mDt3gZXwbVLOwyMuVLkshJlXcRiPn6wDDxitBeLGVrRP ueoa8RZ9FEILe5T6T8NTRJts1LCBQ2ABf8avzrOM0F3xzBO3iWdCj8gv8Nuukl3oX/qJuRh+db3m IRaFvEMpjEXUCinMkBE4konDYRbvzF9vaH5g/GINyNjDVwuLeuaphx56zLhj/qR/CGkRkqzDWOBN FX420TtkGT7+cZfaQP1QttHvbLj97BdnmCdw1BK/T3drLtpRbdxSPI86I5tcdd0Nni9eF23ffNvt 3qxCgXmD5jKUZfDV+RpjLGbZKECxaGsWtT3olHmLzb0rrrzOC1CUyyinwNX2AwcWF4o/33bHXeIr 3dT3bxhPbKyM1MZBJy2IUQBcqfkBixhkwkWirWnitfij6t+vzRsW7wse8wmy1yHjxjIkJFNwpOYa K85Y8FI/NiCGSobaQHSXgixAGNOChZLlWtHZB0q7XGOAjbh77r/fvqRYtLPJdf3Umz12aM/8Uoai n9lUu1H9ixxJe+knNnTwWTlQG3N8LGGqfARefuXV3lj4+KNPjDf4Nc7Be0kRCk+D/1winzGPik/B m+HLd0oWw70A1pnMtcjH0194wfPE/Q89LDpd4jHK3MJGDxtkb0pOABayxsWS15cKDryd8QYPulQw UHIyDoDBOAEvcJJzzr/Yfug209h+QWMbH1H777O364N8Qs8yj6N8uO32e+QT7RLTATQDnb2gNu++ 60grXbDCgRYv11xNv+HTbo54G/My8iMyBMp0eP7Dkk9oOzRAPXHJ8Oyzzxe9NQcectBYy0b0awT4 5u/efMN+F3Fm3k3zxNz5C9WH2tDRhiDz/MNSlJ7/68skj7wlmOsVMyWfoDyFTlFcvaH8N992h+aW a4q5qhdK+pBBUd7A09gQA6+XKw2bivQFcj/Kmp49e1q+YIOH/lqg9RAyBRuS2/TprXnvMdMgfpY+ hKcIByiY75KFOx++AT6KUmjvQY1rNriQJ1eufM185NeXX2EetakU27O1JmFO2V9zHWUho9T4SOtF +ibGXbqjRxX0g8KVtRabZl27dvFfZx05Z5MQZfkGG67vry/eKMumW4QTxgXzA/SH3D9U/Obd9963 T6NHn3iipM9l5l+MafgZNarqVN1QgS9Z8CDxj3Hfak0ORpAnZs2a9cyUKVMe0SMZUhdaCiVF9Rzx XENRk8eRNjCex8c97wmkyePy+3jPNeJJH3AjPn9uhpe/I/1aQyhS1ppoLS+j8Cg0Kk0W7lvF8645 H3Gkz/MT91kCsKKcHG4OqwNsmFcEhkyemAcP7YBKwixBHp1eJUaQw/EwbIbTlBGhwYDLeB6pF7tH aLhZGE2aeISvOL9kpxOtebJAyeoccHxNMGD8V19/o5juBsUxE48sjp4w3jsYTLyDxWxeeXmFFkEf FbtJiDv+uKOLww87pJgjQRBHg/jPuVsC9Q2a0HbfdZdi4pGHF5MFY/GSl+xwzwKVJi0WOTsMGiQ/ A4cXYw/YzxP3Sy+/pAXSZt4NQhj+QIwLIQzFDtYOLAwmHjm+OH7yRE+ACF/s4hBAQ2obDfET0Q4w Zax8sG5hEsBaYszo/YuTT5gsS5sRWjTfYwGAnZnttaB7TULsi2pPDy2WTj7hWCmedteEwG7iJhLS sbhgh77wJIEAxk59b1nIjDvwAMNEgXHDTbdYYOQ4HMqsDYTLr8i/BFZQ4AWrkV+de6EXeEcecVhx 3DFHadLrJ7z8xso3lHNnnnO+fWpMEI4mTTjC5sYbbbSBdwqjbfmV3ZX+/dt9tATBvL+E2a+ddLyF MXZczr/wkqK3JjZ8Oxw7aYIXrhdedGnxlnYCsdZhIYXiCMXICccdUxx80BjvKiDAsqvELtwHH33g LyF9uOoj9+v4w8Z5x4GFJAq8ww89uDjm6Amy6NjNiqlHJaSj0GAXe2Pt9Bxz9JHqw8O8e7xup3Ws PGIHkt20o9XOYyYe5V0RFpTvaYeGhQXKRhQUfWS5c/BY4fjEY2Xt1Km4Yeqt3g0Bx9sPFo4lcCNo geNRwjE7Syxg33rrzeKwQw5y2SwemeTZMWS8sEjv3XsrW0+hyNlLbcdagoXT7yTMYC22jsYNu2Vn nnOehvJq1XO8x8W4saOtQEUg8+JAihQUmyj7mBxG7TqyOG7y0e7vu1Xm3LlzLWBWfSZSbeYVCGnQ 3SHC/SopRxhPAwe0W4C6X85bUaTdL6XtWxIQ2QWiDSipOBZJgPpRBGOxddCYhCsWxzi7RSHEDi4L FoRgrD4YXxyVuFCCFrt6E0SL41Q27Vy29GXDTMNpddGz1+ZWCmKW3da3jxcZLI5pKyGxIqwFOtl5 NM5W6bujxh8qHjFOC55NhPelVmCwWLv7vgeKA/bfx/1ytOibsXTW2RdYSYfSli8aIeSygOkvBfD4 ww62P5/XpQS55fa7VXeE9Y+l7LnDFiXjRXvHTpqocZR2OlFuIiThUJbFJ229S0IUVgxjx+znMcDu no8/SAjqpwUJCrWdZNWEdQGWeCjnUC4O3XFH9fmEYrTqi4BLPyUenFBEPzwhwf+c8y+SdcLmxaSj jiyO0d9ee+5W3KBdyuvED9n97i36RIAFxi4jRtjyEEuKSnmoDoRH9mtvLzgaNFaCP9aZV119g5UB KCF5f50UwlhOsFi/XQswFHOLtVA4X4tklNcoMc48+7zijLPPL1aIP9E3faWkx78LeHZ5Kiv1mcpU exB6WYSxIwxf3GPUKCtRaBNKX447TNLYnjD+cPGKl4uzzrtQ43KlEcAxUGgvUWC62OJFBdBPS9Tv Z/zqfCkgVpmHTxIfOGzcWC0+n5JCYYrpeNyY0V5ssVPO4hKcssBaqLHHIgGLNhQ/WJ+iLB2jeYPF GrSL8uqwgw90H6G4Rplxv5TRCOhnnneBeRu8atJExu4RsviRpZz6Az7eOkgpo5fsNjMHMlewyXHZ FVeKJp7RZsHe2pRok2JisY9IwyPoV5zIYzm4p/hfjmNwgHLwGfEjrBmPnnC46O8oW5ng7LjCm+6o Ui4PuH5CbpIUeKoxTTp4PjSM8kfdaIXlDaIPFpCM5+NUDspsxkpvKWn4A3+7yrIEhWe7FCw+VkC5 yo/SkcX2NVqM9dDCfTJ9fsQhVhihtBjYf4DfU8+9ZTl74nGTNfeN0WLzGdHolS4fBRjKkP322bOY KPlhourBov+qa25Q7Vd7TF2lOWGEFAVH6R2bO29JiYy1Ry+NHxQKWOfid4lxy/in71n8YIm67957 iKePs4+il1esKNq0gKEz4W8oS9lIoY+gIZQztJ3AnLiOkITCrJ8sV+EZ9C2LbhZO9Bl5cAbLwo7+ n6D56sjxh8gKYY4tBYcO2cnKG9oR5AOtbDdogC1yUC4zB2HViDwDjTI+WXDut89ePtaCchSF9uuS A9i9R2m+Qu2Ax03W2MC642qV/+hvf1vx15Dd3BD9hMUifXj85Em29kIJjUULbUC5gOIbq7ujjzpC x/BGe1H+pBQ+vEe+uk7WE9DNxAmik8lHef6ChqCrT9Q4LGq217x/pHj4cZMnem67Qxs55IcMczrt JoUfMgxKFJSpyBFYISA7PKEFOV+wm3jEeMs6HDe6VTz8rbfwNwQWVZ7+oVg+/NBxnuNHC1co39g0 ZB4gnYokqe/ZyDvrnAvMs+kf/Kkhv1025UptYM1NdSS9AnINyjEscZiDUM4eKv5z0gnHSqbdTmXc 4A0ILKNR+jCHo+CHrr4qGWoXjRUUfHzggoU+MvEk4ZRNQzZYrrr2epe3o2S95NB/lS2b6Bfoe7H4 NMpq5AmUqqQfgcwjvCMvrRQdID+z0GdzAIXhHCkusN48/piji7Fj97fCFAUltIaCmH5FkchcgQUh ilP6BSXs2eLZ+Fg78nDmxKNkyTvcZT6lTb6Vr67U2J7qMQY/P0q4wxIr0bMxDIqDzdjKFCfZh41D hppgKxh41sJShsK6bIB4IXChc45UH6t0o/fb15aXWHpSr5e0IXym5iM2YbBqhSaPkizF6QTmtKYZ hBo43C2FCxvJw4fupLE43jzlbSn0XpWihfFz1rkXaI5baTwz745Xm1Fsn3fBr30igg0erIJWCj9s tnCserLm8nGSJdlYR5kFbW0pxQ88HppHucWpgIGiJxScN2is7i58TxTfPlplQEOcEsDaBhpZd51O 2mR8TXJRX9HVQV43YGGEgh4LKPjmDtrYYuOxTWXssdtu3mR7VfW/5tqpxj/j/sgjD9X8puODwofp PHVHoML0n0ZLvYZjDBLgXeRFTqEtF+pY+s9/+StvXGLxxfoFxd+LUiqfe8FF9g0Gbz5OMhNKoAsu vty8gE3cK0Wf4MDrN9WLDZJLJJMzf2sq+88ABuBDJe796L6qO6y+a0BX6qw0uuK+IUH5wDtAxF+k ycHGfQ4n8kV6nuMv0se1OT7ycOVdBNLHM/f5c6RZ4/WzHj1rBZRCiSfE+3gmLt4Tl5NlpCGu+V3k 45oH0kUj83juedfqfZTfKh/pq+CHSF3FppuG6IBktWMJwgnqAV/Vkpl6TaGCUyZQUvE4C4hMpuxQ sduO0MoxHXZ0YIIof5xQ2dZUZ0AjRAFvfU1Qy7QoZaGEEuGrJx0nIWwLO45Gaw9DRRCCweP/4zlZ edwhrfQCHUtBgcMuLAICliWEzppMOHaAQHazdl3Y4UYBwuTNQv/P/+xb3h1A0GP33YtPKqKApv07 3zrVkzyLBRQzmLpjsVGZ4YM8NSyJbiBFGWmorkxeWDNhYaJb75hxxIu6J0uZB72APO3UU2yeyw4a DB+lBkIfu0+cjedojJlkKsoTOooGfHGM0aTIzie4xqrkoccet/KASZCJHwuDrcW8MR8mYBHFkbTB mjzAS6pwYWsFLLCY9DnK8ON//FsrmsiDpRc+i2haY5ApqNqCtdXwIUMsOO2kYwATtfhml4t3TKYs JHl+UialwGDBiFKR4xrgA7P+/lqc48OGPAjVmF1j0fH6G2/Yomwz+RN4o9tbXnBtK6UINMdO8oMP P6ydzF0KdlvYKY+drOlq2+5adKNkXCKLK8yHUcQgfKFEwDrgbQlFmLhDKyy4MA3GquBNlckuyDbg eIONvEhnkQOOb9CuH7szWHGwC8kkvH6n9T1BgmPqz9/YA0ZbUUZZmASDQ4QxBDYCdPyVLbfyBI4y AHNjArvLKDZYOFEeu9IcU4AOtx800LAP2H9fHVW6yfR+ipRX/drbLLihKBm2005azOxpWAh9F156 mXfRgNUqEAu5Mtmzw8qOLYv1h4R/jpCqEhLYXrDyB0s0LL8GKA27V+OlqMUhqGlIQNZTfuqG0ozy sOzBAggLQOrYpkWj1DlBcuqDe1SGFvBHjTcNsxg7/dunCu99BJOQRLh99hol4WGYY9hFZff2nXdL x8/RAKVFKLxXO/aLdezlH/7+v7o8dnu/8fUTLRAhyN6mRUL/9jYtXg6wYoIdbPx3/cVdP/DigKMb Q4bs4J09+mrsAfv7OAbj/Wx9HQc+gJk2YT3xo3ffftdCHzzpFC382CEEJgotKzGEB6cVjXDshB1U rDoQVjtrBxtlTbsWjgwM6BOlIYFdRpRH0DgWIvtoQRvKafqL9A56uHPafVYGTDjicCsaWcix840V 3q233WHFKgteeBz8bZjax5EFxhC0mgfogJ11+o/jCDjsZ6xi6XbC5Ek+jgDfhadtIEUg8G7SLiFK UBR5jG12lbFUOEELPBZvKM3ARXNZlAuP3E6Lu56aOyhnmBbDKI2wmuOT1AjICMoEjumg4PvlWedV CvzEdwMZSsStcMKFNnCMmeN7//zjf7AihTowPoZrIXn3vfcWp371RPP9vffco7jo1xor+rLTFlv0 9M4wyjm+2MKCg8UHxwboZxaVfM3uHi1asJJYJP7CTqod6apsFBMcL3v00SeKf/y7/6LFe+Jr0A04 YwNBaM4CD6kNvhPO2CCAx6N4xcqG3fSHHn68OPSgA7VwOrCYKgsDLBxRDHDckC9bnX7aqVb2wmci UFavnj2Lvzj9NMNiIcpClw2E1zU3u09UNPymqlKJw4Dha0JoilJCxhrHc+gTxglkThIUkb/TDjsW Dxxt+7r4Lb5ysKqDVzD/4iide8qO8lPhKHvXcd34WhjKdo7hnHTcJO+iY/FKOSy+oAnytmuuwLL4 QfErLBvuuPMe1xGrvkcefcxpsH6Bb7wjmYTjRT00lxwh5R28dqjGwve+e5oVsn1kldS/PSkcUkML W0ti2fSu5iosdVlA0/aDpKD6may05s6ZL17e11Y0bJiM3ncfW+nBA7EgJSRc7ZA2ooT/A8fsr8VT F71ZbQUrSk/GIrhjDGCRN0R0heIe5d9GUm4w16CYoW8ZMw4iIsYXyk1klU/0bqTmU+QkFIT0PYSG Mh/FE2GGrB7uufdBbYasKlbMW+kv2e2zjyxzZfXB0ZEPxI+RO57XkZ/DDznYefipaEP3KL+xyGEs EDgmgnUNFhgE5qnv/+V3rdBknuBoC3zCsqDeQ/vIAygBHnv8KVupfv2UE61IRLGCD0cUXSiY6PAh 4slYWXF8OYLrI1qABqAtXAwQ4HMxD7+vzY6TxZN8zFzyH9ajHG9H7nj/A81tCtSFxqFMQ2ENPKy4 UdIjf5z+1qnGpYryGKEv+QosFtbICC/I6pVZCp4Lzc1bMN+KGvoTWqWvUJYOlCKLEbKX+hCFH+Vw xPgu8ZBp991vJTLW9yyod1DfMz8gn5LuV9rYY6Pmv//D35j2iRs3dqyOE10rJeOd5sso+OAtbGr5 KLjSIM9iuXSlLN7nz19gy0RkHuayR8SbkHmQj59/8UXPw/h2Yg5GDkXhwlzG/ImygSPtoAqY4BeF ArJ2N40lAUqKgNmzPRfCK2dpXGCt98GHq3zU6/mZM3U8dECBZShyJmN7oGQ+NkRRqJikQTKFGG+f eFN12NChxcabbChL8/m2mvlQxxhDhmJM8CEN5K/tBXv0fliKi7bE284653wpaLT2ELDHpfRH5v1f //wjjwPq/t77cra8niy/1G/42KJzTQvk0CPyHbwCOfyIww6VPNDd/O4v//w0y1hsgD/+xNPFX3/v zyy70ydYzzBGOZkgSw7zfZRMKMdRZCIbEcDxL886V3P2q35mrugrfg9toYiD57FRh4xKPcAzX4yl LfQFFpxsDGCFiGKmy/x5wtW+Urp0Nzx8HcXGGDIG6wCUfHyQwH2nhrIhjOU26yZoGSXlKeoLLJwr /mJoCR/ghq5xEH4cwJ1u4DPInmzWUgeOKU5//nnhfLqPCU7WJuyYA/a15e+CRTr+KjrFyhBlx4Yb ru9xycYHlrNY1uEz1DK56rwx6zfNu/T5FqITxprLLKvwZb24L6p+qLEA7QYdEwtdKkTKuI+uDFTy HH+kyUOkibj8OeDwLgTJeB/vuEZcXOMdzxEiLq4Rz7VVuvx9y/t1W8Z2jMyBd3ybYqIR8T4q2ZyX 5zwu0jXnIz5gkn5N6Zrh5bCBGfny+HXKTud9ClFSPGfRVRRpDC1A6jm6NBJVafLi4mV5LdPkKZBD CCwuMIeEJtFkP6ijAJyVRVDnXQTnLR8DThT9sdKxaDrx2Ekm7jO0GODT2GiSsTDCmqaGlHwi4WuC BQtmsPhEWCrLFHbV+YIFljPsiLPLe9T4w4rVys9OOMwcx7tM5JzFPly7g+xCEcBvWpqmkrpogUOd MP285ba7vAAgHyMx6oK6jbYgaBPimuMYuKSLPDgptEWJJgh2gbAKYfcPBCLUMwFSDke1CGnXNWEs 8MlOLowWqBYIlY5JhPIrOZLdTD+TJpU+VxPEepogUYrgw+E17UZwNPDUk0+08D5dEzjmryingEvd E90Bw9Upf3hQnfQfrLFzSl2+ojbhuyPK44ggllSYmtInKKIG9G+zgIBfAnZaHErgtBvBnInrTS04 3tVuL40AB+AFRST1QajGWgDrFwRqzOBRBDDZnqSd5qGacFEuHS8LJcxyz9DEfMHFl1YKm8WLlyQ6 kHDNZ3+xJuC4waSJRxo2dUJoBaFgPscx7fTOC2kkdFE/qk+bqb/kLytLoD+OaqAcQIgEUOBFmXwP Fo075QVG4NqF6h0Lpo1kabHtNr3JYvgIvv20k4YSDSGdEPWIfMSRbz0JUbGrnb/jPYHyI9BGxiw7 siw8Of+OELH++htqB/QYw0HhtlA0hPCP5VKqryAYSf6pcLORdnJpb6JflQWNk8RhtRYm8ySUq0+3 0KJReENgPOTAsVoYpGMYdcoqk488UOcKj1UDUhoWOwij7Vq8UZ6VVxJcsQbA5BoagbahUY9lUS8L BHZr50mYJg9ji2s5uqo2Mr5oL2Wz8DlSfGV7+ZDgWOD/+eXZErrkI0KCFgFhK41QP8pK7oBilOiL I5r/R7tt8BTKJHwMnXEVbHqEeiG0Yw1FOnbnOLLHgrcKajdKN44rLl60xGMGqyFwTX+jnNlWyqqX tDDl0+aEwJmV3EqniApcYJgYaIk6gCt4I7u+lM2iFYUnQi8KHYRidiqhQawENpFQimIJnxS0d/Me mxvOavk6sfAZhVAXStZzEmygfeoDDvzGgi58EZNzxnTqq8LHQqk3iw2DUPKctwLDMP02jZ/YYCAK OCgr+kkYf1tWBew2E0btMlK4/EgLmBk+rkSbTjp+snnOo489aQUhC5+99kyLY47aoKxkAfGmFshY g+I4Heeuu0rZx1FLFvGDtGgmQFP4s6PusRsIhSRMgAgn8495uGkh0RF+cFDGc6yJ/kU5hfUax5uw CuGIKZsF20mBG3gCkKErPRYxPTTOUL6jSEEJaRp3ipSQtFXgIatPFe+b+gV0kmiKMZ6UROyst0sJ fvGlU4pfnHGO52SEfdpNWkAz/8XcYpCKBCp131rHkY+ffLTb9Usd++Z4BLTDAto8DgBlID1zApsM b4kfYT3MZg6WQRwFpU/guweLp6A4fe89HW2eP99K+W7CB2MZq8gjtMCBzgia7fRLH6WCzN9cb8ZV mgtpx7577WH5gWNhHE1iswprUuhByK14nuEIlNte1t28wWNemxOMabUvymnbtk2K2i5WcLJ4wh8f cyRyDoF+awhCXMqrvtALcOJnElGu3oPbCPBY0kFj8CvSQxvMn8gC60tJcMoJx3lRXMEhfQAor8wT EeCLKAvM3xWJ/MAY4zgpR+2wEgOA0ObA0RYWj8hAHN38xRln26ILCxHTk9ICnxaBc5Q7LC6pawBx 6SU8gIaTds/ZeiYtlr4cAcK6CUs3FKvwr1Iv4LpUvELlEGgzcxLKHfgfx9hQqBiXJRbmaf5Dic4i HB8yr8nSlPH5tZNP8NwSeCvZegXXfKqsM2lQam0uiwqOG/Kc6AIn/VumeU4IAw8LJAN07trZC33a T9tQnlBHrLKwUkt4SeOLAkkDnuEVOKKGz7Fh10s8GZ9RyDxYzKK4OmaCZB7NZ8zB4Juj8D1Exzwj ZxGoG3zLY17IoL7uD17SsZ3W8fFL+qFH9246jpXwspGcwJ9y8nGaR7bTuOxlCzR41i/1dayLL58i 0v/Em3nu9+hPXWk3ylYsM6+74RYf6+XIuQ46qzIpIXkoj385PfLhFdYMQY8zpMzDyhvLdI9NcB1y G9Uvm0BT/CRaRkGGLMEmNe2hvZtLzhwv5Sn9hqIF+G0l3wAX1KG/ZNsPVn0gi9slhsZGZPpCuXvf 8MEpG84x15Ew7lO95AdNc8pSjZstNu8p5e0H5mXQGpsXWNmhmCGEzEYXUEdhp5K/jVO1jj6ljfQh gbqyXmPjh6PauAy5+BJZlQkn7m8BA06EnI4dZ4SBKXM3RcltiOTo9dfvZCX4d7/zDW1MfFu+QocX uHY472IdHxdfRpblaOwG66/nsYWla1vfbYuvn3y8lbkLNKezNsPi3DK5xp/pcyIyebIPKYuOqn1p r+6fEhnRV35MbGxteGlGIc+AiL/Im4ONuLjGu3jmGnHAi9AMM4+P+7jmaQNWvGuuc8Sv9ZooZq1J /DIQwAMF5w1wgjX85GmbKxxZIp5r3PMunvOy8/t4T9qI55rfowgLmBHv9Br4Ec9zCpFCV17ymEJ6 keL4hYK46g8poSm1IhRS7pQnxcRvigtmR2yCA3Nk4rni6uu8M4JWn50RFDz4JAiY5KjrVsMBLm9g dPyMHbO/lQ333/+QTWUXLFpY/H//9CPv/icINRRy4hQRq40kZODbYzMfBWAhBxOFoWKxwu4Mixqs JFapbl2k1Q/mblQIVhLgqVuqFbsevzjjV6rPVvps874FRygwj8Q/AilSqmCW8Uyt9KbCMc8ExbmR 6Z6dQXYKukoohDmzKDIKSkGVVJE8lZNan3Y/dG/4jbggDyHSp6fGZ3YagbTbiBFy9reTcCAcKQNm r+tLuLtA+GHHEEfinnxVBLu8aSLOyytLyaJIA87zQBxC/n777F0peYCHtQQL5Zd0TMFB6fKAgMaR MfoWRCSKSQJKJGUhhuCMxQVWIZjj8o6FJbtK1OWgA0dbIL3vgQdlDfGghaW//5vvOw2Les6nx5EY 8gGzXpALmNoX/UD9qGWqafp1nbkt8QAMrNfOu+gS+XqYV4wbs38xWEI+i+2pt9ye9U0t1BmGAMQC EmAGqYKxiOKoSnIAHGXLykv0gtCEwBr5y5vqkuQCKlbWVbeMBbepFB7qvKl0cIZFDQswnPyyozVy xFDvXrEQ5Qw+1oJYFSHIIXyoycKRgEOTFFeF9FC1K9iXOonkWOTg8JHdM4TuEDzL2gqKsSCwNdBY CKQi6pRRMGMcOG9IGEVpKYop4ag8vYM+wjIHGLBUPmWNcMI4TCWSRXf8uegUy296TgIqx2G/991v 21fAtPsfsAKoa5culUWX07sMKaNkhfLnp39LO7mPe0f/TB2H4kgEX42KukdxKANY3J96yonFk1LI TBMv/DVHIjUm/uLPTqMWZY8mK6pOwiNjNr5e4jqqcBQfHOdBWRaBMiLQNB5jdBHv1/phjOIHi0UK R6lQYLN7jU8PFtwczeBIFYuKA8Tz8dNw5533OB9loCR88603rXyO2ka9uLqcsgLmoGWc41UPhElq 9uEHtXUM9aPvEHtZDBAAQYh83JgUU3Q5fpLT2jLKF6y7CCxoCez4o4zFGgolKceDsC4bNmxHH1ND cU2fDOzfz+k9v2gM9W/X0cRDE++Bs3qu0eIIS0oWEtC3K6SawvOoZ4x8xkXUv74BfBXr9Ci6mR9Q iBOox4E6wsiRuvvE0/AtwZEU+JitiVIhzgs/4j30htKKYw0oRrGsS2OpTOwyuS8DVcjgONbV0k+V TDfpv14n3oySkGMI+Ba8994H5Wtntqxqe8r/HY5l63YZnn5SEYm78x56ha7a2/vaeu1OfbWTTaCf /NN/81eFyNAMhXGB5S3zBfwL5Q9Hu8A/tECfMAbYqeb6rnatP1j1oXez0zHAikNlwKlZekzlpZoS B38Bh6N2GW4LCnyioNT5qhY8tCjNgORSHgZD+l/Wm4fyHZUjlO9Z0OHYlePgt911jz/Hjk8V2nLI wWMSf1RaZwhoJU8tIfEyC7QrcFtGh9wgOJ1kJQwNYLnN8cmkyMSvjuZPyUssPCMEfBfvyIjRQ6QT rTEPYEl67fU36xjeKFsesYC87IqrlDDlIQ3KVI6dcBzqXs3NuC5g8cqxW4JRUxbhJhpHrUovYfqV fso8yH04Ef6FFBLIN1iQohxm8Y/1X5nMZXnaKkEjr9BujktjWYn8keY218rp+XAKcgcO5rHUgh6w 2KBMFBL0Y+rUuhS3xx2d4igH+Q9/VWyk8exKcUmJXRZw4FH4HcLBfg1RvumQAYRzLIFTSHJD+eAL 7dhQshCWIiCVDcJDZA0Hr6Dvkc3g9Wn+lcynXOZProPaWdalRI9hJhk0YlQj3YJD4DD+Bm+/vd0h oGjiJWMaeqJ8Nj/aZBHOmGFsL9XY/ucf/VBHJzdNeAOWcMHm7/na2MNJN0e1kKHwj3T91FtTYa4J 0PmLuhBZ4pdrurUlL3IKPN8YEnzju8xm1JdpDVH1pD+RT9gMoJ/cr5LDnE+lICszT6MgyUNSRGp+ 0mYswbhKpTbUMtW8KlQpy/pGnZxackC3rsVhhx7kcukL5h36nPq4n4T41OtlfpeaYhKoxAOMI499 ugG5oVNxqOBinc/4w5oH35L//KN/9LgkDfmtXCrzGXT2A2choMjFggnZEDkcX3CcmOC4IhvDOOPm yDg444uUWEfDP9nQMv2qLmwe8Gz6HCeZXIph06fSg/NNZGUfirDUsSWisvp8mW7BPBigl2p5ooxc OyLIlrLWiKwZfXoHhCgi0uZQU8fXMflznj6Pr1PXd1FGxET6uBIf98Al5PBTzBp+kcc+SwjApI0K RaF5/jwuKhHX/F3Aab42p8nL5T5/Jm2r9JEmrpTRnJcB05SX4a+ospuZUKsEDQIEsXpp6EETkbK8 +h3FCkYOJ0WVcPO06Z5B/I6OX1x7/VQvttgN3FPCKLtiTKYwJEINnrsomzfcM5no87k68nSXduYO lA+I07/9jWK/ffe0CeJyWd3AUEjHQp5Aenwh4KQOk1bMNdlhmTdvvpUB7GptLmsgzDyx7KCeOExb rGMCD4qhwXSAiWDNlw0I62pXhICfEsI0CeGYl47df3/tSo6R9ruvaqv6KhnlE1CwAJtJUjd+V3VI UztxEus8wgnnk9GwYwrKArWCY0WOUrkqCU8sMAhY5aR4hLy06Ih68J56kICJOYomDmWawektZ+lR Dj09fbqZMRp8jnowwbGoYYGE74XH5PeEdIBkIY/wY7gUlIVUYuo/apv6ieLTZ4f5KhuWLzNenGlT a8rDrBwBBqWdW8ak5LonvOLPicmFhRp185Sl9yi5UnuTQII/H872Y+XCpAJsFgngi2Mg7OrgyBZH q9/99jcLPlmOA0COp2GOi3CPMInpOjvBHAnCLxW4ILCTyF8zjmmz41L3GLfgmED78bl0nY6GYSnD WXyEYhSVCFH0cwpASQtfrEKswFOU4dJWwQEnPraoCZQjSATisebheAvHfJvGfQAAQABJREFUUjAn JiAswh2CdlMcZZX0oDtofs6c+d7hLdkDydRZqS40B8Ggt2Dy1TmOjVEOi0t2jbGmwEn1bXfd7eMM CH8xSXmcqx9N42Vfuk8FNPBnJZXKQDjlHUfu2E3FMSjjENxRPr6lCNCbQCaYKslxJT9JMJMwUxG3 Euy0ww5yPv6Bj0KxgAQm1eFrgxyT2UbWRCxew68C9ZgxY5Z3EHEqSmLXO6HEdaBc94cKYpzTVhbv OGPFGfCpXz2p+OqJx9kiiWNOBNpKjVM919Gu6E2m+5OV7vTTvm6zeMyvCRTFWIMuVboFr2n3PeAj rli4cTQGxTZO2flSI/VL2EiKDr7oxC4tX3QBFnhbsXKF/bdxTKwnVg4KMTatXAQpApLgBDRSlTG6 DJByBAURO+b4MeDY0s7DhhbsamIi3xkerxxvaKyN2m2ETM8P8juUAveo/g8/mo50ApVglHaYq6Cg hFfugsf0b2+Tfzc58xU+OXpF3VmQYfGDEImfOQK0RB2CxhJtqa0lz8RPG33xrOg2Ccjp6Mlzz88s tpR1Yt8+fHWLXXS+QDSieOzJp4XnR4p9NfdgfbGPjqQtXrzMvvNwYI+SBjhsGmymhS58FFowHxX/ gf7Z+WUxBB3i8NT8V/WHv34gOkewDvp1I/Rj3FQPNc9hMfJb+a2BB2PBZ9pUOhxso2jHcTNtxgqw EqQzHIO3O++cZgunw+UniuM8+LUzLxL3hZ5T2VEDsEmcrhkc6CLqnD4ZDT2RThxctISVKvwcH4N8 QfBb8nOFLMARvbk6eksgLbyVBS7toG6pCMpMfTlr7lxZJD9uK6A//843dSxpuDdncMDMnJfSlVfx UhSZHAXacYdBPt7KscCZs/TlMskMzAXwdTYE8CkCv+Ko2ex5c23lSanUAQtkFMsEaIWhEXToeRbU KNI8lpfqE2DhHwkHumwKcPQJGQQaJTm+QwhBj+Rn8Wk8qr8Inl8cp/RSYkNXWDyPl5UzX5a01eYu I3Vc+ljR07buM2c0xXPHiKEVjCA5Al/1fqKBwJPlmbLfEorVXvFe5QD//fu3SRGysf0BUr+esjaB joEWPJhSSO9idKl4eDWPEUd7NN/TnxpL11431UpifPfss/ceGjP4PkEWTP3GMRIcOzOevvWNU+xX bbrGOVYa1MtUpSvpEy6Vj3jRW2PIn4UJ4Y/j1gTGGM7k79QRMo7z4oMJhZhxznv1MyHhr+4vyn9x 9hwfteUrZoz31G+kSXm2GyBfdMqL42DmdazOkVOYw+DDqVYlwl2Kq+/SQqlD2x6TE338EULjHg9l nQJP1I16Ysn53vvv+gtgpKNtWGPgD6e937b+ohZ4NxXoPYF+ZgywsTlAvgY5Ut7e3l4sklsIjhsh 81DvTZGPNd96/hUNgudQeulGkGocIwMyp5reqId4HXIL6bliacOxNWQ36phkcNGTUIHiBwfz8EOs +xjbuKt48KFHbdnuvqUopWXM4JMTOsIKiTkQGWp9WYgBLHCo1Bo30EbQFjhX/U2PXFN/YS2II2nW Cih9wCEOlNkMpZ48NwcUafiV5OMq+KuDD9Mv8C/WCxzBY3Mai+uQXbBCYn7qLkt2NhYIKF1VgOUH 6kYNKZOG0s468El4bR5rE5vAlxP7tbfJGk7rGSlhGJf0FxtRrGfMZwQMmqT2xgk3+muQJV0ipa62 0ks3StvJ1twPSp7Avymy8ahRI0Urj3nuYnMQpQ/jwB1CpioAS6FEmYtUe7Dux5cQVl+MQ3CKfI47 EhRuzFUc1XxLuMPlBesyjxvNoYxZ6ozFF/SJtXBFnxp/WIXWm3uUXxbuinz5fqL1qSfK/jAa8vuE l5KX5C/y+wAVSOQdfxGfpyUN8fE+0kQ8V0K8b86b3jb+5jAa39RwiM/TBfzm9B2eQ33e4cUaIqJx UXGekU+i8LiSPSoRV+Iif56OeEKrOOKjrGY4pG+GR5pIF/mAQYh47rVWSYyPhxSYSsSE9ODPzDNA 45WuzhylER8RUUo8+53yasH4CcJfExxeR62dxT+KK+HAkNFww0AxNUbA5kwwg3vBwoVamL6kRZo+ aSu4MTEHiEAhbcO0/iI51ttODIWdHATrbbWw6y6miWkmDBbNNEwMYRPGz4Lvm18/2X4B+JIM5sVn nnOBduHG+fgFX0FZpq+AnHbqV+38mk/c8nUSmwv37G4TSHz98CWm2VpEc4Riphgkix2+ZAXDe+a5 5zQppqNTyXEnn6SdZcXRDJ29xvfBEpWBiTPHPcyojbT6h4kbf0pMzOBpqvx69O0jB89HHOq2cFTh nXfe9WKMxfm2Egw528yXhPyVFy0UcAyNbyV2GVGqvaudfXwv4Gth+fKXbF6MyT1KBT5xi3NYjtig SLldCjgmNhRF++y9u7+SgVkwExqTJ1+T2FvOs8eM3tdfarhIX97COSeWJQhwHAFDyYb/IvwuRT+q sbIwedvnpj9Uf+GTAEsadgyYvPAHgtNfvuzELi5nqt9Rej7Hi3O+LqrTukrHZMjRCBxJQ0Mcxzle vimgK5w50l8IG/bZogmFiQefNyjwsBQ6T1/K2VkWUigaZs+Z4zP13XWkDpPa7QbqqwsS6DAJ5tgR jiUPOXisyzvnvIt1dEbOauUQE2UCyruvaWeYe3wbsUCjPzBHX7EiHW98Vwui6TOel2ntzhaM8CnE ESGck1Mv/lCsLJPCiLoxleNUE6sVHFXiiwYhismShcatt92ZlGJarLKgQfGKTwJ2P0dKQMKB6q23 36G69/bkypn7l15ZrmMuk/QsHyEyz+ZrSO+rH/mqBgIi/c4REyyP5qg/UMjgu4uz8Tjl/e53vmVY 7OQQPB7FK5jkoTuUvbepPf37tdliCwGN41tnn/frYt3X1rWVUVqYYnK+WLha4gXXc6I9fCQwTvAJ gUDGefVt+vRRuiVe9DNm2D3GafmD8i9yiZyW4zdii15beHGE0m/0fnu73ghhjA0WYXy5DMXeRxJk Zmihj0VTOrqBQjPtBBtXd9xlX1xYELHAWrVKx1BkZn+ijiGi8OBI6+VTrir2Fl4RunDuirC+lxzR 0iaEs5XLX7XQD17xkbFQwvWrr78qgV2f7BU99JaV4dVykIsPAxTQOPlG2YCCwGNWbV0lOmHMsvjD mow24r8B6xscPPZrazPuvZurduKEF/zDKx997LdWHNE+vg7CImzQwAHJqoJcZV9xe9ABB8gvgByV 6it9nZWeI2B3S0HKcV6cRrJQ5lgdfcQOKf4V2GEGNuURmvkx8TiVBPccr9t91131dZlrdFT3GPNK 8MQf4fbb5RxWjulxDI5iiaMyWARtpDHn2amcg1JJlJXmGPJSPPh++ZUV5n/mXcN3tgXWBC3u+ETz tVKyYWmAfyx8F2AlyDM8A2fS5l/qJzYGEDJZFMDzoX8UA2P330+Kw2leMEF3Pj6p/sRh5lY6WsAC iN1OHOFfPuXKYmvxNxx+g4Od8ZGxsXiQ+NX3v/dnqrEEeo1j/JfhGJWPB/AlH5zO0jKO2iLk4p9n mBSPvOeYAZsMKJBwmtxNu8QsmvC14wWScBC4gfaxWOVrV/CG5ZoTOfZ8gPgyjqqNd9WrTYoqxiM+ 0/7ub77vXWB28AMOeI++ZX5jnD8hZ8IsZJlnX//dm+a71AM6jHrAz6lNLlcgdXBs84UXXxRNfyic LxSfX2LFEF+og//M1Dv8uF3xm2tsOTqgnfH6thd6HP8h4Myeue8W+d7ARx6+OdjciXoiAyzSuLlY znfhO8z3KHGoH8fM8a/CnAK/Ye5n0Trt/gdU905yvDvRPBV/InwtEJ82+BdjwYfVKp9vPu0bX/XX 8fC/c46cqvJ1MBZkK8Wr6LNdxQPma2HIl0Bnip7gHcgP+NZBWfm8+oR641+HfqDP+/dvsy+i07/5 dZfFImux6BSZh/HO+O+idrN58MryV2yNCU/ZeciOxXzNpXyZjK/94Qdr0HY4nV1PfOZ14YljxSv1 BaoZ3ulnYwPrlWThImQycNxXaZHYVZ90Ryl3s2hlqy17qV3dPBfw8Q/qgAUo8gX06SOWUpziY+hg LRThwVhvsDDGKpdxgwKVIy4sSKEp6IOjWDPlWBv+y0c38L2F7AcNMSaQm1Agw3+Wic4flFVZNymJ 8O2FvIYlD2MWxQIWRsgIzMf4f6LOW2jc0QbwzeKR++3E81iwvil65fgJbemvcQOMmkrxRYnDXH2k QrIDfUn7ObrPIhWFCsczUcQvWrRUctP7/oImG1ZSJ7jNi5YssssElHPQ1FdEs/Az5mzGIhtPK1as MF3wxcN999mjuOm2Oz3PY9FsHqS68YUy5CjwZsQJdw50l/49KfmT/sZqET+Dw+WA+aAxow0fukTZ QB35KAi4WbfTJ5pPd5dT6J19jJ22obzCDwwyGQ7RoWGsfFEq4e8K1w/MmzhGZy466fhjPd8eOu5A ++v51bkXmd8ydyHnLBC9soGB/z2OICIz0Gb8f4V1NV/RwuLjTlmeIN9Cb1g7I68g28544QUpNtq1 ybu/5PPHTU/40AF/bMzguJvZ4uJLphT9lY6xjoVPP43/Lp27ajwJQaLpZIHDBkgnyzDI+8wBpH9S m7bQJ76/dhg8yLjnS6jvvvu++QYyOLId9Iasg9wKvY3S3IWS4krNj8gJuC9YrvkGH0abbrrSa5Q+ vXtXPBB+xObtkYcfJjnvheLcCy/2Fx+hKT6igSyIVQxOycE18gNtwo8f648jDz/U1mvQG/6foG/6 AZ6J/P6C0iFHLBAfg5fhrxLe+K7ibtcmHF89Y56aoPEHvZ919vn2/4P8zqY5OMHamCOdyJiM6xkq B79hwEPWQx5BFmOzlS86cwzx8cefsIyB3BlrLcYSPBXLXRRq0NYC4e2nP/uF5Z4f/u331c9scsIF CMwPCuovcGneoCvdh+uPW26/Q2unoU4CnFma29mo7dOH9UAn1Wdw5Yyb49LQMG3kq6XMp/g2PPs8 faxi+QrLVlgwM6cjk/dUG0LmcAFf0h/jXG2PHonnqm8yvHwKvgIEnRpguMY9kCJN3JOWoRxpkhCY Co+08S6eAz4wIuRp4n1c4x1pIy6/D7gBq+U1V8O2TFBGUgAhrumpfm6uTHPaPF+kjTiuzfdri4u0 lIHcxXPzlXc5DN4TqnSTJ0/effDgwcPyzicDBgFc6xvdOy6qzcs6VLHOlOIRDMv/GZxIUOVI5ZSg IhYhG6EOJoo/DCYphHaYC8crtpIAgFCAVj5CQOaZe2nBKoaH74iXX3nZCyQcpI0cOdx+AKZcea3l IxQ4izQBoKDApHjc2DFWBCCQskg3A9WkgZ8kBC4sL1hY4MOjuz6XCbNdKkEOhoowh+Z7XdXiSSlU WLRR5220KEdAZSJEmEMQ2ER+P1BcsAjq0qWLJozudtqJULBpl64WZtvb280QAzcwR5g3nzfF1Bqf OjisRNjkqy44n0Qhg7UAuxVJwOnkCRRTej57z2eNEQZQwG0rZo4CAYEPE/+NpexBeGUhM2++NPEq g/PZLEJi9wFBHgGEv+HaxcOJIAIBZ9ZZoPHlBhYzOBllpwSfEi+/tNyCNAsLyuV9FwljOMSlLxOf EHGq38AzO0McgeFT5iwQ/ZUMvcNxKF/JWrHiNZfHQondMNrDQpRF2hVagDIxszu3WJMpyi78RozR Ag+SefChR3Tk5XXv4LODwiKNCQ1BBUUiwvCCxYvVluVaWK1Unk9kiSNnoMIPjv8Q8phc35IwdYS+ TDFMRyOZiBGUXpbwjjPYtHh6w+3D2SQLVnwRoChDOOcT8CgHWXCjEDCO+7XbTwXKBnDMji4CMQtE aIQvfNG3CEEIeLBWJmx29FlQM45ZiCA0sJOE0A1doyAFj902QwmxowTGPsYZ8GgjSsK9RulLGEce bnpHIfPIY497Vx8FABM+why7d/QbcX36bK2yNy7ue+ghCzdYCbFQMy/RACynfIaj+5R8WHZx7AGf QYxdhEUUhYMHbS/z9QOUSWK2+hiHwcaVBG8cJKJYQWjCJxi4QkmH8gALL8zswcG2+voONNpLCjMW BizsWRgxplGIcYyKPoCG8bXEbjALPo6D4sOK+iGcMQYqviL8QlcIICgVlwqX+JphcYrPhSGyYGqT U04WDwhtLHwQZjbpvLH9WuGElTEI3pbLIgcfV7SZhQC7itSvh8Y8igO+jDZb7UMphwIAusVHycEH jZVvpzl25MlO+saqO2MWXoNQ97bogU/lYimGj6OuXTq734GNRQZHdruqTPoKJQj+JVCOYR3Bl1+g W+ibHnNQv9A2xiW7sCvEg1kAUx5fxzt43IHmRwhgCxYtkdJdCyj1GSbn4CoEwBJaAllCh6/xBRO+ 5EQfPiJBEz8c8IM0B6X+R0nKwgdaB68LtCu4vSx+OFYHP6Z/gO8y9OOr+orFJ5ZUHPdifGKhw6ID vguvRIBmLlm8dInpf54WNP2EyxOPPcZjiB19rEe6de3iRQXKURYR8APoDMEaWmQ8MC+BHyw1UGZj ZcBXMeHjCQeYt29kXo3FFIoeAjBZfKG843gX45r08CvolCMhC4XXV0SbfOXqI/F3+DECMQpC6INF Av7gUAKw486ilsUG9M/xHwI4YQ6k35hvwDGOtcnPV874Wo7nUPEMAv3BIo/F9F/9xenVODBu/aNE 4FhjFDzgrwdlD3NAF+GG+Yc/LH85dufd7cinrDkc5rD5mm/4uhh5UAR0l7KZr03Cj9hBZ0GJw1to FSfZbOAskbKbBRUOyFHY0NcsRlG+o+Th09W0KWgQXpKUTrOtKCD/qvc/0McnDvWCB6uiK666zhsg 8H4UD/BKeDqf2Aa//gCB5sRFohnkAPobxWFb2zbmIfAG5o7lrzAe5QRcSqJ3Nd9gEYTz4+kztNst mkDRzwcGZmpeXalNCuYB6ofChb7hWJs/fqBFKTT67W9+3TShgSGF3LOmI8YavA56RllOfVBOgKtB 4jV8BQy6h9bBD4pgNkX4civjHMfELGbhpQ9IPmA88OfxX/YV/Uu96FdwDm6Zg1g8wlNRsGGBB01C o1hA4EQZ/rnD4ESn4BAajvmT3se3DXKTSN0BGlgsuYWvNXHMbxPxJywOPxS988EFcAFe8A23jRbd r6x4peArkRytst8mQQEXWIgA93kp+vkoCLIA/nPoPxQifGUQfopTXDaRtpM8gsKJ8UscuGOzi7ky I1f3PWMF6z02J9bT/IdFEPhAPkHRt/56onf1LZt+jGs2yVA4pS8zdXFeFqjwfL6SNlKKQOYOLAzZ BOMLtuATS1i+2IcCf5GsDZFpGLfwhGFDdvQGDBZUoI46grvnJIfwBdLNxROY45hbkdXwE4MSkI2V Bx562O1gIY8s1F9KFMYl8x3HqKkb8xl87GXNJSiP8bHJhiDzFg7FP9AVPzBYeLAhgQPlw/XlVegL ZRy0j9IS2qhkHil4B4kH0I9Ye0GjIinJVn2MLwiAI0MoV1CysZmK0gtZCx61meZEnGLjhLufeNUq yUHwWOgJ5Ro0isKiqzZHnrNih43VZZ7r+BIuvDLJk8KW/oM3ZC4UU/BUFGvMN2yugVXmRuRzLOzv lzxDHNatzIHgjuOMKlL92Fk8poeU/TuqjvIFJd5jXqw+3WBD5M3Ei7HWQWFNm6LPqDNjEJ97tHOp xil8GUt4+Bybfcyh3pQQPlfoy2v42GGdwdeRsZb5nXCDRRfKMuqFkgjcMpZR6qNAhgasLFfZ4Ar8 Iv9uKjpFkcuRK/tf1RE9+h6Ld3x77SArM/gHcz28CX7FuGBOpI3IKfjowpKMzSN4GDIRciZ47S3e NmfuAsfBB2kXvlyRN0nL0WHohTpAv4TAje9BcBnAFTyHL0YzxzAekIeQBaBtvghL26E91oKsE6FP 6JlxA27oI6yzN+0ipbrgLEMm1ybEa+IR9OuQHeW0XHMvoS65rMCX/JLjI+8j+k1O1Z+ZMmXKI0IR r0Kpw32EiI84rvk94OOZPNwTF7CIi9Aqjnd5/kjbfM2bkd83p/vMz58VSKSLazSQ5+aKR5q4RmV4 jjixzipEXFx5F2njuqa4gMM1/wM4z4zKHEaV5pprrvmro4466hQmBQdSNbQkmphe178RTwZCQ6ZU WkNUpE+p6988vi4cgR8riDnz5lnY4msJW0kgWyDhEgULRz7YgQ+hI5VPs+pCYTYslJi0WXAg/MBU mXgQQBACDp94vJQLQ4pvnnqKsq624ABcJmgmkhCYWKgwKTBQmARQJrC7hKk8uGOXAQZF6SzYWYgz 4S3VZ7k5foZDOZhxT03q7ErwmWsWk3ydCMUJeZl4cXSHsEpgJ5gFQL927YSq3BB+qRtWJV/71neL v/0vf6VdwaGa4Nbzl3WwzKHd7J6xq04e/thNYRGxoQRehDOEKdrGhIhSC+bJwsOm0OoGvnqCEgGH zKQj4HB2o402sTCAUABFYTXTVxZPCNkwYyYUBCgUJky84Bv+z2IVhQiLCxRnCPMI3Ox0s/gBN9E+ 6g9OUFwhdIEHFG2YIa+HWbAKRlFipZQmWxRDLFDpEyYOFA+HHX2cvt62X3Hi8ZOUeh0rVbAWQfCn v1CMUSdXTvhhp4u2yKbBxxGoJ9YGKISoLwoQJiaERHY7iQcvnpSVd0O1n6UrsBGQmYCpO0IFFmEb brSB+n2xlYzGsVqBYNCMYwRNrIkQuMAx9IQvIpQR7PDh/JYFBT6u2FllEZXTFrte8+YttIAKjaP0 QOnErhn5WOyy44ZQjNC1RIq9VbLKwiIB4QJ6gyYQZhFS6AuEAAR1hHKsi9SdpWCwtQWtafc9oN2i fy1++pMfa3Ie4kWOkmRBmJGQzeJh9ty56uveFpbob+BDpwimlOHxqwIYb9TbNKp0XpRIuHpVTjZT XOHFKrtHwAAWOEJ4Q4iCDrGcCGGQxRBCGTRH21lgoqyJxU+K+9hjzZ/XFTwCv95p1jP0zR8CDHRN vyJMUT6LVMY1ylIUftDLVySMkJ+ycLIN7YA83g/UIhJlLxZNyu4FBwtL+AgKHuoN3dFX0DYKMRzD uu2CiaIC/LBQxJ8bi6w2jWMLvqorChkUbQiB8AsWqNSTOrJQRqjlOCBjIgmzqb2pxYqhUgoeY2oz 8FBi95OfF76EQ/2AxW45dWIM9m9v8/hL49iYE4SAy1CT7zkpXG64+RYrwMAZShg+c8+7GP/Aw4KP r5XgrwHFO0oM2ryVFPfQcavgEgWHusFrEGIZazwzrsAnsMHbgkWyEtJ4ov+gG5SPLMRQuKNkZCcd EkCohxfxDuUUi8r+mj84FsUYh5fCR+B31K9Lly4uj/qBQvyAQfO9JORv3mtzmLrqUKjvl4qOZNnS 3uYZOg6Ap/pJ2Sj6p1zGI7vVLDCYa6Al6Ib5A+UkCy/ayQKT9tEHPiZB5RXAK8pL8lAhNmBYmAIP ZS/w6CPGJ7z1X35xptr1qr9QmfeJgTllGg9BX8yhKEHgHexao3wHR9AyCrqq/4WLjBSMmxVaAMCr aTN9hHLDCgntmoM7eDVwWQAAmw4Bv8zf+OEDIIr0ueJ3LErYcEkbN/Ql7YKO07FA+gA66rTuelaC 0lfMKdDw+KOPt1+5Y485ynmY3xkXzLlYTdGONL4XuX3gsKfkD/gVCw3wxFe9FmreZsEC7aAEZE5j LLPIgb9AQ/AFcAQvMH5V4vbiQxuKt8JnWJT//X/7Jyl9BxWn6qgdVjXw4wWai+hj6BnZCLpBIZT4 B/3ayQs4ZAfmJmBTf+j+hz/6n8WyJS8V//PHP/RiE6UJ4+7v/vF/6MuXX9ex1W943lJVUhDu4QnQ H3MAY5CFF2V7TJkOP5aj8wGeZ5inwBF+2agXi0zki+BvWDpynBnZJw+0A+fHC0Sb4Iy2IougQOBr o5QHnXEkk/KxnKV8FNzID4xh8IifGfCKnAduoQs2RRinjG+srbBoIbDQ3W5Af885yCkE+CNfuIJW mgNtSPygk+UUyoHnwqe9qSTeQb1ZXNPHLKKhZyyomJe5x/oCmRBFLgHFE5biHqL6gW6RbagH8wtj ArmVNvTd5iuWST2a6x+n/c3V1xV/+w8/Lv73T/6HNm34mqoUN5IfUSiAA6wHma+TDMUG60Yl75Ji WikYkvQdCgsUk8gKuAnYUPWlctD84RNP8DyH3zz4M234ytYqS/MHYxacMWaxUEeGpc/YwIKnQoP0 CcdoCdAU7YT/EIKHoMil7fBgxqjlMr2nr7D6RZGMogELXOaErlr499bY6iV6Yv5mbDMO1hMNssEB z2CMxnziwvQDHjgSx2YTZTPGaTMKa56RV+EJyFjghjmNdQYyXsjSxEFvyBOMVcYH8wBKKOiU+Z95 BcVpm3gMqsfEiVMtoAfkIOiHjRBoBtqAV8DvqONKKWcZx8jw8HQUiGz2oszF0ok1kbrC+GcsUEfo ibrB95CBwD+yKDI0/AAlIQptcIYCGH6CPIRijA14NijoA+RicKmh6XmEMY4lOke1zFP0YuBAfWlO 8BgHKHLWUZvAEXiB3tiUp1080xfM3Sj6pkuRSx9Tt6C/6BsjvEQUF/NClM2Ll3jdBX+HDrpJRgcm ClY76Ra+QAbynmUhjcW0FpBCUjxDb01/zKfQJ20AZ/QfMmczjVT1+VLfuAeEgbJDMlxAI9dff/3F EyZM+BdFM8nmf2SI57hvvvI+j+M+/vJ3dF08854Q6bjnXQTuSU/I0+TP8d6JynRxzzXKy+M63DcD 6ZCgjCAdf1HxSNcqf8TFlbTcr+k5f5ffM3vFc37fHBfvuMY9aTqV+eMa75zu2muv/X/U6SfDVOoA c2PZmwLXvME4PQ5zzjrPp98xUQA3QgMcoqPAMgFMlYEdgYmJuFQbhGaZ4rpyWebslnzkJw8MIWAZ juJflcB08BGTdMxifzm2/O9mvOThfc5AAgbvCBQBQ440VDEJxX7tFCgyYHar9RctID2wEeAi5PUi Lp7zZoQwH3kYrCiKTjr1O8W5Z/w8OfkTXGqWf7HB7VZc1ADGCv7z8lOZacIP+FxrXEcsdVdutaF5 pxhhWtE13LLyqb3J+WAHHGb9QQnuyyhKVwQQFkZ1SLijHBDKm0acJ9zRZiaNg8dPKk7QMbMf/uCv 3RbgRL9Gf+U4TnWteQ9wEr3UqahjtCP6CbgoUoRWB3DNJJmHKLcZ758Xx+Ak1SlBZ+EKjVE4eAFe qh9x/CnU1U/P+g1cs6BMuVPqT/QlKckiDqn93CY4yYKDMZS3bbWsD2bbdBwrO/zeINxSjwi2TAzc qK6mSVU2TxN4iXqRN+ICDjiuzt+3aBPpog/X1AeUnSPEgnynDFcZDOA1BPE8Fpl1qMcDOGbRk+DX KWhPqiqLtsBbiqn7vm4Mgl7yNZDaQl9Gm6KvAnpOf/U9CqIS98obsMhTp2m8z3HekR/n9U4lU29g EZr7CEEWHqHJQYWsmf6Ya+Bh1BUlMAuuBLPGRaK/BCOve17fVCMVpZuytBS1lr4iLXjxOKIdFY7h jFKoZ7w54HPNywgcVO2v4JTtzzKm8ZjojvYGjp1XQM07svTcVm0v4RIXvFvV7cD38sq1wk8FD0Bl YrdB9yzsOBLF4gil2PkXXVp8R/6u9tht1waFb95+oDTXIxQqUQLPLoqIKjTKFc3zSHMZZPM8Ws4D QQdcqT+hxq8fTUfgNOY86gA/jrHkfldS8tMHLPQOnTC5+NopJxQ/+Ou/rOCmPqaMRFkVT8kqmdIQ 0bEexNU4qTOhLIJXNAeOP7KZxTHO62+82Yo6NmBQQhASrdVwcl4RsKK8OlXhReGkE77mRejP//dP rHTEYgfLgR//5KfFD77/PVtQoyhoDiwA0/zS/Iau1T9kHNpSmZ/rtuwb8x6IpKwMFywewCN5I5C/ mlMUHe+in0gHTP5y/hptDTifSFnOcfNIn/o7jcdqnAJLf4ylZn5cjUOVE33OXTM/YHw1wFP6vK6m CeVLPrfqfjZemFwFlPTRligtjZdG2cG4UAJguuI1uKQouura4r/+8EfFTddO8Ychgh7pF/7VuI1S Uh/wFCFvC3EBg/pheXrIkZN1pHGn4l//5aeNY8N8PkHJ20MM8C0f65rmoKx84aBW4qrv4cVkahEq OMJxJ8/T9fxN+6AnZMDU13U/RBsCZF069ZHsnRWIzBO+v2q8xVydIAAv+itgwssTD8zTliWVlzQX 89AYmvHFW/rfpOd+S21yhAqJMUW6yJu3KdWPRtUNwzdRkqHr+gWcgAG8CMaZ1t65jEMZq1WvZjk7 8JvTjltZjgXKoQwCaZnjmWcCh63mKCdu+snrCX5C/nU7hP9oLiUlH1I1APqScgmpn+o1FxQaaxkT a422GsCX7k496D7TdS2yG3KbjEt+ffTRR/9MKGJyoutBNH9xH9eIi3TE85cmtY554n2rq7I5L+8I XIEfTCHy0Jtxr1uHyMNDfs9zpG/1jriGkK8AGl60eIiC8gKak8W7/EqaPG88kyZCpI/nepRHTIJB usgHzEBWnj7S8D6H2/DMQK5DJNNAJ7JMmZ54SBENSqJKSODdGkIFpzFNDieBifJTSVG3OrZe5FYl ZSB9K2JHFInAAne1JhQCscCCAeGbYJrOmMPA2A3CnHOEPh+N1jrNgXWpMCZ//QogCoYTwPTs0QBj rkpOL+FlXjRl9SF/A6Os4ER5VQRJUzBy0nuYLYoQfMqw2/y4HERz7AgT8zxQ54Zy9DJBLhVs1XPk irEbz031LHMDg89z5jiOGlOea8lPkBXMRwnq+qTU6Te1KUoMODzD5Fcju5JEwShQmxyhC4KC25fR H/3KjtF99z9UrKfjSuw48kWoYbIYY8c1PvBX18Wg00+GYyKC9lIFysbk5SpNY+0TGNVa9GaKcETe pub+IEFjXErNb0scx8Sn96QhuNeyiqS2mfCcBpqsU6e7EqUumzV9A47LXKn95csSx+C8LFF5EmSO HrDbyxdusKpIwpGSRelRUWJUrfTZ9iwSiOX4JFeZrTHOL+p0qVZ1u9JzmcggEm3UKdK7vJxUA1Gx +yq9b4ZTQ+SuHjd5aucRLnKa6gAnG4s5Haf6lKlLHBPnIUN0FhCKAzc15cGZGYm0NGhU9254x/Ef 4Mgj8S0eq2tHflzjPMGskvomx2fDG9qi4CaU1Yn3xLHDCL6SdWBtKZkanlI20B8IgSkniE7AUyol pa9xQyr1lawbKoEnXqpeBtUw55X5S3hemBswP1FmQ0kJrgCtsf2ALCuY0wXRgWPndZ9HOVWWmvfw qqmbYIF5uRRDyGtYFp1e6LfmZWXCyKRHlCgcfz3/4svswBbrWhaG3p0uk+uSAoWDQAWqtVo4pj0J XDM/drKmn0SpgRvKSErF5hoDXOW4KOAmMB3oVtmqecBJEhzS1SFZn1JjYgOdKECwrLlXTu85MoVV waOP/1bHfHbKFAEJDlApJ+QIYDfXOPqZHFTdCXRJfZVS80uj1mniOVg/oCjiq00cqfJXNWUhYl5a Kl1zOIGbnA4MWj9VnApDIYWVAn6VbrntjuKiS6bYcgZ/QotkKYOvMfzfNNBHANKVReLHVT/Ei8aW 84W3qE80mhTuW10zVBhAmkMCFrTp1IGuhp5rLClrG9kFuGprCY5n8hjHVU9rLoWnlmkM0/w4pUzN 0707rUzERc+QenMZvKriDIwYJXQ/VRFKA6UpvsJfKo/UQSvc66khTcCmvnUO0hFDSAoz3ALg5Jgj oHylEIsWLEqBHSFwG89ceRuQeM5xwzMBOQpLrXvufcBKNY6yszE5Ul9kwwclMjXIqUa+nnM4LqNM 4z5RgU7bhGPkgXTkua5zqkH2W1bYdLZOyQiy5KbdCscxurP8tCfDcaUQzJKIytNTCSf6oCza7yIu y6a6Z7SQvcjzEd3hWRmB5z72T5ZZt7SJPNScmTqC48q8hlnimPcfaRxV7SwzmM4+Un53eILIq0b6 I0J/TsO8iZxRRfil217huIbTiBPFV2mUzSHBMaUIJjKMZXAGVtnCvKQyU3WJeqaqqXXCS2AjLwoY Of1VAMob3lf4dlwqld+cjv3qS/sjLCeEVBjIcVxF6kYKQqfUbd2ReYL6Pn/PPd2XkF9PxaTmHSHg xn2e3wn0k8fFfXO+SJvDye+b0wecPF/L+8+jKALAZwFMGgLX5vTxHGly5EUceSOe+wjxnncohnJY kZ5rHiJPXHnne00KWdoyuye9MoWhR5Iyu+NK8Hn2MooLbMuMiwfSKx1MIuMRdc3L1I10QsYEJ48n f8XHIDtXyT9VeTxFjYHhoMioKkIipsgcr+EMLYIi5qNJYKqZcw4nlSBIAaeMqNtTtTYlotCywBwO 0RWQEt1ugxtVvotLNCIqTk4VyHl0jo5wrKpr1872eUStKc9KrrzA6j71SAvMNPaVy/j9cexmlPX+ vH1FVR1SU4wmnnMcpwSOTbcZjhGMMXHF4Sn+NzAtRcipCaZCaJlXlyoqbtKr+CU2r1dOxw1d5uyf D8dVX31OOq7KpW6qnJ+p5GeAk7fFqCsjPiuOKyypUO7xITBiePqSS6PgEICVKDJldKzYKnyRvCIf hXQcuHHbAjdUi7iyUuVjVRffNEX+yXEc+IrKgDfiqJfrFgnKVsR70n8GHLvnlO7z8GPjUeAb+qos r4LTEsfmTCW2yUCfqP5qB5fUMD3GM+0LOG4sSVKEm04WBe4ddOMmlxGfm45zIGvAcSSpGvEZcOwK fgqO60akpsRvheOqm7O+CtyUyEgUUGEjQKRrmSYiW+GYOY+jOPvutYePS+C/jyOmKMyMSzILTsJx KifHcVSx6pESN01F10CacWwACa7xEQBb4Bi6rXBT1qvixzwHQqvCBawEzVtA8+coNeI9fbjhffnu mDxpgo/lcEwM2mSODRolw+fBsYFHIdFXZSXK0VoloU6uqiaCXYYP81EfjlXgIJhRkxbRWQOcmkwU UOb1XfwoLe/K8sEWG0vHTDzSx1twEv6GjiPhb2YP+cvCtyBHjmvlfoJT4xh4FFTSn1+X9eHiauin jEq561/glIlSZMAhOnBTJvk8OIb+zDtyOGUl1oRjV0DpjToTsO7LshsbQKSCE6Y3bmaK5UV6V+I4 NVEPThR5lYxVFqGEkx7q37XjOAMXhWdwoE+OOKFUPPHYSVa2cSyReBD7ScjZTTgGauLGdT2qO7JG WbrFIoXjnnzABcfE+H6xEn1DMJAS5lnK1lboCebxheGYimb1S3gvS81wQ7IIn4Zjp2toRF5AQAms Ze9U3prmvEhd587u8rKIjmeu0VeObIFjpamaGfdGruIDTpk3lUikQpmpSpJi029EctWfH91M7lLc H0bHOZyy+6pGpCLit+6rMibDcdofVcVcQd5/djoGN8ErSjFC+VO9OtBxBb+sw5fpQr/T/goHa8Fx wktCYiOOAgLUnA2YCmrk4X0e8rTER23y69rSR548TX7fDD9/F3mrlje/zJ+jAXlcq/tARHPBrfLn cXEf+XPYYQUU7/K0pOM5FEJxJT5s6bjmeUkT6SIvz5E+3vvacPSM1FXLGh7KIqqX1XNzKr2oiM2k BmPomM3J0k9LCNl7smt6E5wGUB2ydYhogFGVBRz9wzkpO4qYT6KpxgTWziU5ImLOQqUFsyXYFFm/ qu/yQhti4yGuTtjwkMprgayGVOJ8OMjk3DF1R0vPF2g48gPjM6obMlBQhwiXnv98UThuCScvqOH+ i8UxghLn5bEqwmScRRA44swyysFEhs24SM/Nsa5mGRltatE1WWtaQsjef3F0HPVpGA8NJeUPXyyO K1Iqm4tpOSUkJWuU24yL9Nwc69RlZLTpP3EsrASi4pojKlBcJYqIlLghS+MroTbx0d8bxyXwgNNA fx0K7hARtamuLeFUb5tv/rh0nEprrnPr5+ZY5y0jo03/0XCMc1c2H/BjkiwRmvGfGli3vb7LUzbE xkNcc0RVmRpeKjY9N8fmWROOFeN5ugSkDDySL4WWEKpXyAAxV4QM0Ek+mvD7lhbcnwFOmST6vGE8 RPYO1450TF3Yycf/Dn6jOIoZm1bMGs2hoWXxEFcnbniwsoijZWwwYemDk2Cc95IqLH+qMsqsbpMj s/L17vPgmKq3xE1j9VRKh4iqOnHTEk687HDtiOM6SSqrLrG+q9M01SiSxNUJGx4U0/ycoLWMLSN/ bxxLlmG8sinGsSA2aLAswtGyFZwU3aHgDhGpgtlvhWNlBib+nlA0us+VHfnYY8Xj7v9yHAde8r5i 7WCaLl92QGmHiIBSXSsc53Cqt803XxSOm+A0VLPhQRVofk51ahlbRv7edBzNzeH8u8JxVPDLdm3Z 20YCR8+kM7h44sSJP1cEZz4gLhQ/oRxqvmKu15wmf9brKi/xrf4iDdd4H/fNV95HA+KeOhEXIeJ5 5j5Cfh9xDdfPalGUFwCA5ucGoJ/yEI1pTpbDzBvXnC6eI31cI55r5I+y4jlPU98DIQ+Ry3HNL9Nz +m1IWKM+uGr+uhlMQz/lCbOKlHAasjY8rCFfBiLdKpP/J+fOOCfOgwVkT4JZbEM5Wbxu61f1XUqR 6tMQGw9xDVANVW9+mZ7TbwlT9ePrGggGDoqOs9VV1ZvBZDWtx1BUoLx+4Thugl89NjQ4xXaob5U4 q3lzohIfdVILSTCyxn6V8S6+d6rs1U2ZMz2n36a6RdJ/t3ScNb7htqkdvIu2NKRLD/Wr+i696Yjj Ck6ZNC00lK6hyGY46Tn9NiSs6/UnwzEta65fam3jr9Kk/43R1VNTO4hfC9j6VX2XQCU4DbHxENco s6HI5pfpOf02JKzr9YfiOIr8VF7xKciI9pQIDrBVdHXT1I5PAVvDqe8SqP/EcTNGKhSXA5evICGv 1QqKOkV+V8Op79L7/1g4ZksFS+LGuSL5rsjbWw+extjGJ+Ei/W+Mrp7WTsfUhQU5X0TEF0etdP9i cAw8w5fjXhh18iWG7ExoqlsU6TGud/nreJcy6jePyBNmr760vCLhI2FobbjRu/x1jlLjOY8oYUqY 2RRHvXKY7KBoy4C1kNPYNR3gpGwdf1WW/yd6xCF7HpCPK0VUvMirF3ElXdSv6ruUpGxHlV43kSSu 8S7HTZWo8WXK0pCwhvd/LR2nVtfoqu8Sdv4Tx80YCappHHBl7JoT19k63DXRXIf3EaF0JR+MmMZr Die/b0z1p3taOzKYS9YS1taA5nfNz81g4/3aK9Scq36O/FwjRFw8x/UzlbHWlgckXZsL4TmvRJa0 4TbSUJmoENeAF+/zTBHHNe7jPc+Rn7j8vvk50hLfDCcTSnidByaF/Dndt4hS4WUsgyEL1WNjtFM0 R6VKtoYT4FtmbIpsaGBVgaxScauiEKDyv7prQFQDpDJX1Dquis5uA/QaIuvX1d3nxzGWVUzWVb11 Ft6Td4t6NEf9W+C4amp1U9fqj4XjCjfu31xJVFWiZbd9Gh1T38bd5o49/WXBcY1J7j4/HYdJdMCp hqrIAxzneK4pJqX+w3AcJTYxw6oC9fvqrrkCflFH/iF0rKY2tLUqs8PNF4vjZvB1awL/7tWUrBk3 eeJmQE3P9FUVmuFUL3TTEmYd+YfgeA3A89LL+z8djqPwZp5T0X7d9Ei6xusXgWMfc3KZaezV4y8q EldVI7utK9Uysn5d3X1xOG6WTxJfqAqqbppxHC/I3zhXrLkNDeP0j0THdmhcVS5u8uua65en8sht kfRjLfRpb463NeEmNbFjX31eHLemlcbaxtMXQcfA+vfBK2RnwTzGoqqhYdFaRbuP1oxjslX8QPfR V80yIEcHOyhw6mIa7hqq8il03Dg2wlAggVs7jrMiW9DhGhhIliluM9zkcMCrk9SRgZvIGddPw3Gk i2sFpxk3dVGRdI3Xz4PjjkDqgqKVjWnS+5wuWo+xGk5rAoz3rXEcb/O+qnDTWKFPpeOm5BUdN8uA rdvRnDs9/ylw3FByjZAsuo5sqE+VIt7/fjhuDbMC/ke/aSg/Gw/wBQUa15CkrFDd6MY0kZYraSId 2YiLP54JeZr8HfcRchgRx/uIz9PG+3iXw+ddq7SRp7p+VkVRDjAvsALUdJOn4Z7KNFeI50gX2fM4 3sX2D+8jbZ4mj+e++R1xhDxvilnDL0yhESkpK4AbJA09Os7xjTkcxU+HUBorZhIL5dVwqjvn5CmV rt+GV8Q2RChdSumMcU7cD8CId0ziRNbPa4VT5o80reDUtcjuLF1WmTvcAKcRY6k+qWpRt5Stgrq6 MQdvG1NGMV8kjgNmutbtp/CqZn5ZP/0RcCx8YvrMX0yURrF+eI5Qv1Oc/jd+V+Pz4xh46ZPTOM2L r8NQ3n9sHIObhEs1hea4PVwJjki3n/L7RdIx9aHoj/0VHurwxeAY8nBbs7Z8VjruJEfo9Rf4oJ9G 3AQcvqRT77akNPHO7XBUPVqDjht9O2UVLG+BidPhxpHfmo6hVY5duh5NYxNwdel5OeA4nVemTl4g aPFRffGoCQ5p1wTHUJv4elVSCzjp3R+BV1SFpn6oHtdy80XSccdiOtIxaaJ2fHnHuBfegx5a4fgP oWPy1j0H9CideD3pMfqfOqT0KU0rOq5z13cJ0pp/fx8ci/u6XhU9Cjy1bxwPqUwvrjL6I7aqXQv6 a4XjCkeCw3gCJ0DBYapDCzjlixJnAbUjjms8phzp998ex8Ua5Io/BY4DEw24yXAcPC19Le4/Bq9I /LeQm4D37BCaNrQKa6JjjnQjc6AEKhdma6Rj0q6Dy4QOoaTDbDysCcdkrWv4b4Njxlk9fzIKM/lY lUPnRhqcrCeH2nWD67rXcXG3Jhw7T4Yb0ldwMvqL+BKbAba8/mlxzFFDcPBRZXlY91VV97oVTXXN H1PqZhwH71srbnIwGRZaUeBa4fw7xXFQAbhhPqnlOp4j1HfENIyrSFKm/n1x3JreKuBf8A2lqU3Z eGhoU9ZXUko3Nj7VJI8rgWXoaqwtafP0vCVP5OM5f098hDWlifdcI2+eL3+fp2mOX+vzZz16lgOJ yuRxUbF4xzX+SMd93lDimp8jLsZdnj9Pm9+Th3SfFiINeQmavzJVoaMSWAaIaSZKjxwpl1Omn7wa uq8e040LjDgeUHl50lTkGibPBJfEZCzhGJBqJRrlE8MVHCrpdylXx9+Aw5tImPmrMXjFN8BJZTbC aoJT5uNCiGsFRxEfrfqw6KSvb1XFpqRlajD8J8CxP19bFZxuqqbEjRtTVpM4BS7RV+m1o9f0E5/8 xQQ6hU/DManKssoc6bnOn7o+wUGA+OjDj4s5C+cZxf37tet1YtzshiOIhTCGYOUdNuLUr6v9TsMJ ugnwlPn/U/ceQHod151vI+eccxhEgsgEAeYAkiDBHESKCpZsybJk2Za8rlq77PK+8lbtrsvvrZNs iRRzziRIEASITJAAkXMOMwBmkHPOwPv//n37++43HJCUn6ytd4H57r19u093nz59+vTp06dLcMOH VJ4snl4h0bNnzobV69bptLld9nd08w3X6QScCNcAiXTZi2/AjvBjzCw+t6+N4wQnn9F/HMfg6tTp M2Hv3r2hY4d2cvzd0DijlL6+sj8QK9YJvBHd6KtezK+B4wintgTiC2Hl2vVhe2WVB+c7bhubARXw /w84hmdwigsO6zt2aK+6Noj0QRVKruqF52Mtn4pYv17d0KZ1m0g+JbiJ1ab6O3fuDnW19bFtm9aK pxACQQp3ld+v8VF1vRTWrt8Qtm3b7snA2JtvtK+x6ivDKKiOHj0mZ6J7Q+9ePX1Ko/lfAiZ4iY5p 09OnT4etgtmhfYfQqlULb0lwu8RC5B9jwTP6o/8eld+LNWvWq747w4AB/cLgQQNVtpRRwo0rE+GQ NxefSuiYgMtdCU7+e8KNvhk8dz18GRh/zJUtS5dC0r0UjiPlM86eU/hvg47h6rqKIIu4IbCEjmMk eBv+QDjJaPeeveGKgf3DwP79ChNEF1JATcdq371yLJvvs1klcjdKAOz89eU45ujhw0ePhDXqfzt1 CujgKweFgQP6mjYjFMF0cROcXA4lbRXrlM85Pqfw3wzH0PS5c+fCrt17RM8t5YsPPyyRNLgb2VTX 9EdOfCQgXSlSek+4ieH5mIaVo2OsQc4q7w0bNoknVYbG8gFz0/XXxj5ocMDIXwk3gmrw3PVQkkk+ Ps98THCK6VJIupfCIbQmoCn8N8MxpSiWIT1HOv7PxnFpW7kguR/GdI2/8ju4a/de89UmTRoLFVk9 fQNneqgJHQVIfCQyF/G5pbYqfimF40hOUfqTwi+PYxQ8HJTy+cJFopsdoaNcHNx+2y0+mazI3yMc l6wIMtSC/sSLoff1GzeFAwcOhDFXXx266mTbpDCK5Yl1Aj/EZZxgq1iUexQjR8dfheMcBrKqJtwU cVWKmyxayS2WJwYV01E1rnQvhZNwQH6XfJovp7e1bt3S0Wir1NTU79Ah8ad14k+7dssR+5DQt09v K+GyBo0Zlfwm+IoRHyOdFHiFIv+WeEUpnJJCkIn+ChjIPv7mOIZH41R83YaN4cB+6GKkTjzuUqCL Qg4l/SFVvHqZ0nsRxymkcBfOi8W+HJwY7hqmKLz8/xTH+bYC3x57qvaE1q1ahaZN4T0Zdn6nOC60 yH/iA22typX0h5qzk6KygIVcjBRGkMlBd8JSeLrzPX/l4yTKyX/nOcFL4ZeDdbnvKT5wuPLw8s/x 65f8JqXMl0QpfEqZpoB85jynv/Sde0pT0z2fnu/pPcXNw6kJdv57ek5wEow8zASDe/qe0ilzBadQ 5tZ88XsW3QGF6HooBvgpe70snGL0IhCHFZsgRomFQFhjEuM92Exa9NFKCe5ASPfsWaNs9iHdUmXS ezFbP6X06Z4Cc/WKKTI4ioeGuVYdPRSurOwE6a+2vu1duTcs+sfFYf+6/bYGKER1lFzaVFyDJzzW MR8/X3KnzJJ/LRwXq++cDbeQRfoogOkxZcy7glN+WZZZQCp0+q4J6uHT4fSBUyl16b0mOI5RgJrF LxbCXzK0MpE6KkecH0yaHF578x1NqDaE5StWho+mTNWxv9N1nxY2btpS0Pyv10D60cfTwhT9TdLf ilWrLUh9gY6L2Sn/Yln8VHhFoXIqfD5/Yfj1s88L5nTlo1Wt6vpValCaMIOYMtHH9JjV1u8KTsl8 L8CphuMsMbhICrEExvea4KQPupMmrsjHQtTRytTS5cvD//7Xfw+Llqww7tx3SENBEjzes5r4Mfdj +ktfU3ENPqsJt5I6Z+EpDXm4XNRJitVz58KipUvDcy++Et5+7wPlmq3gFJNlRSkGxKeUid7SYyqn 3umvi5YsDf+oui5bvjKuWjphKnSqYWli052UJ888/3J46bW3bE1m3CttbIeYSS3h8tjxY+GZF14J L736uh3lV8dNKk7EMUd2XxQNrwovvvpGeP2t98KZs2eEg4zgs8jkhRXDR1NFwyvXxPYrKDvVnqIF 6oZVHzTJauPGzVvCP/3iifDG2+9qki+rEIQ9Xak8fknVprrxsye/hw4dDjNmfxL+7clnMjxhSZGi RNyU8Jz0LYNjUBm8YsKUWSkcf6/pR+kTnAIoP5TihkjUn+uLn7O4fNCfvxdiFt8c5CgxzL+puK5u FpdbrH6WJAt32vRDPsXwwjCU4cYJc59j1BhAur179oWpM2aFXwn3q1atcXtmmcWogkNbL1m6XHT8 y7BkWTU6ziJHiCWFTWCK91QO3RMdMxE7sP9gmDpzVvjFE0+HVatFb6KndDlJSRP8tnCcg1NS7FhI yldesTX88789GabPmG0ri0Jb5NvK0QUgJkvFdp9KdBIDYyZfh44BdUaKOXjHM8+/EiZ+OFmytGZA Ka9CLjU8KI6jpTtRHFCCRAUWK/3Fzznc5OEYkGOXZJzoL8Hx3eBzcIrZpQIZRh5aguMPX4VjJ8yn JlX0cWN+lsuvUB49fCFZFuDxgDHOmUc4GzZtVvv/Uke0f1bSL4iU4MT4SuSH/3M4pvwsLL393vth to6XX7l6dXj3/Q/DUZ1SlqfDy+E4LqEUmgIAAEAASURBVGrVkrJ/m+ntV79+NlTuqCypd6yrxkb1 2RMnToVnX3g5vPDSazrJ95zHU5OUIjlejGxsVsdNghM/Fn+pA3++dPNTuhPogN8ejqnH4cNHwlPP vhheeeOtaIFFNsoHS1ruVpJooWfKtBnh3375a8uAyDDxcoH8WHyimLm3r6Ljaqljyki8hvMb0XER N3k4WWG/eFMkx0t3YjigCMdBCtu+vTJ8+NHU8Kunng1bt+/I0UUWl3R5OAZkYID4wuUvCTf+moOj OhdT1vTE92L4F8e8EgBZ3sX48em3j2PoqUC/qcbKzPmlO+EOKOKYNIyD6cJSj7HnX/79yTBNYw+n //kiSh6OARXTpfTp7i+/IY5T2t/pPV+FVOisAPlPlwkiSj4aDZt/zz9nIHxL4dwvl4bwSCgxZUoT 3+Lvl30nfkqT7qTiOZ+OsC+9itTypdFq/EhGKcNUiHzm6TuJU3iKlweYvqU73/Lx8s/5dNWf8/mR hvc8zPTusNLBSxEJTTnp2ZEKQfqQAnz3unkhPkHMY5ypXxTAm555rfHig//0k+Wb4tLhzx45E8on l4cVT6wIS/9ladj0/sZwcvcJK2OIV8gL4Bkc1yF7Jbj0ylhbMTsnK8LJcheQ7KlQeAasS+cvhaPb j4azx5jYEUAZUppYHpRbexbvDkufXBoOrjtYnKw5rpIUAKtkek6vlMEQUoDv/zEcg7v9q/eHbVO3 usyMtpT3wpkLYcvELeFwxWFmCc7RBXDmRdzED7FsfCqUmTKBm6yM3FCMlU8qD+vfWJ8lK8KJdaoO JyX+Io4zAPGmaJQZrf47734Q3p80JXTr2tXWDsePn9DE4ZPwy19rYqVJDSeAgDviYz2yZOmK8O/6 NuuTTyVMnXQ4QH9THJOmgU4CumrkiHBSQhmTaa5UL7/wQ5WyaqWPvBbiFV6KuCEZV/qUcBphJRwX caSq2boEfFBPw1bilEcpHN4AToR4ws9x4YFnX7odOXw0bJKC7dChgwoCXkoTYcbyZPkrfva1tI9H aP5Y+J4L86M/FOEQRhA5npJp/km1FxfKjmFDhvgknn1aMdPnmGcCzD09Z9UwnFQnvwCpiBveqDMn HG7YuCUclEAK7gxHFSytYwbUiUjHFrhzFtq3SUDzleV/VMcRn9e2gNgOUujoOPEKCfdbt1UJNMtp uUtpDNl38pSQrzIMumJgaFi/oSyd9mam9BmOlBQ+Cm/GwmfWrE9Dv35lniTH8lKlWlq1PhL2SMEA PMp37txZ4+60LMUmfjQlnDwZFbfkndK5JIKt/yUXiitOBxw+ZHDYv3+/TmASrfiKZQJGAY4r458S OMCMoTFlwnGMVKxb9jW7FdsqpU1wYpmzkuollZkUnPbIkdCFSx+d3veUJldmpXaoEJt9/Rp0nJUo JfC9mJ68CUpjXgEwJdGHlCxfRj/zIX1U1ItSPrRp2zoMFj3s2rMnnMjaLWEzRVWji46PiI43h0MH D5kGDKfQuKmOWbkLGX8Rx+mT6Vi0S/u30kr+0EFX2vIulQFIBWgqiJ99z0qVhaW2cuhvhOMiHJfJ r6keyk91hhY3b9kS9mii6Jq4EPpR3Cx1Vp0YVoCjV5Sl1DFdJOXP5eUhq10eDs+Oo3uD+g1svXBe fGC/cC40Xeb6Io4LcAw8yyFHxy686ldyKZpDfE9pcmVWIof+FnFM/sBMdFwgp+xDVgredKl0KSDd s2B/9rPaTAs7Z8+cERMrfsxH57mk5goAg4xt9Ov0nfY/obF+8+bysJcxgctxC4+Gk+jPCavjOEY1 fD+m9L6Tk64sLMFxaDUcO1oWPaVJr2nsZAxbI+vj199+L1x/7ejwe9/6Zrh97C2WIehjX41jta/4 QVdZivSW1XTVjp3C4zln54rGovoR/HFa3lbx/q3bKs37M+pIxUtJYnoKW2jcREclreD+dkbtdvJk UWYiGbESbr4MxzEjImft6zsQimEJjkOFENr4nLaaV2zdGiplgRVjK0c9HDl21FaN4K5tmzbhyiuu CLtkVXPyZJQZiJRBT1l8DRwTNcIvJPJDDOYRmNS5UG8e/Ba/8caV4sW3LKA6jrOPGYfQ29fgFQAW nJK66b1z546hb1kvWy+f1eKSL0VK9EeCQpn14vQ10HFM6Eq5Eo5XDQ5xStsqpiJuKR1XgxOjESsi iHdnkH0oRndZeXU+Do8f89GdX5bUcAiIBeOhFDT8QuPFaSlroSs+Roh+LMFNhBXTE5eTIUvGCoV5 7JGMvFsW3YUrg1mCm1w5wM0XLoU52GmzCOmWffAtFRYA2fcvwPpPCihkTb7+SwUoxTF9MYtBkkKy LIxvXIQDIH1PUPmWAKfnFCelIZwrHy/FiV+yEqYX3fPf8+mIwrcEO//tsqM5iWq6vu7WMzLJFyjB Spmnez5OKiBxU3iCk94TnPx7SpfCUpp0T2nSO3eG5ZSOd668EoxvCZ6fs0Z3RJND0qim1LQVWxJT KmI6pYK1r90MiriEZVH9kMHxpIg06WMWL8HgToejTxPFfdt3ddyT58LyJ1eEbR9vDQ1a6dje8xel KDoVdl23O4z+y9GhQYsGSqBVJ63EK0kEpFvyZUDeaSsUcFGe6Df+5U9wUGIsRPxdqxSxKApUHDo9 1edCAXReg+jSf1kSyu7vE3rc1D1cqE2EGNeRMmy3G9ouDPvDoaHNgNYWwg1TP+Crlo7hjQXWe1Zx HcylIMFJF3FttZThGJJmAYVyO45+vwTHTDK3T98ets/aHrrc0FUnvChPwTx74mxY/A+LwrA/HRZa 92sj4ULA+GQEMYApEnnoj0cys/WM8gI//k5JKYS3X1GM2mHnvJ3hxM7jYehPhhfj5fCfhxP9IUT4 ZOFs+ElXli+vrKKvXrspvPbGO+HB++8J3/7mI6F+/fqhc6dO4bPP59sC4s/++EdhQP/+0YJCaZiA b9u+Pbz57oRw2y03hRHDhnpiSdlZoap+ecLvAqosqiP1yV8cGT1qxHCdNKJTRrJy2mdRFok+RKuA En/mIXv2qny+bvGTfy8K+U6l+NAYvnBKr3gKD3SMAHpMwvdbWqm8+647QqcOHZTokoVD6DLRfErv Muk7VYEW5ixYaEuXO267NUZRnleNGBb+4mc/1RajK4w7ik3cSJMJksiB+gGr5HtWyYQQfUPAvZhZ /RVTk4hvOV6hIPKgTh9PmynlX5cw6qoR3hJ21YihMj1vHQ7KuoGyFBCuJ8qBbwLKUVNbpnKCU6Oc H3ArGh991UgfPT108CDXtaZ6KrYv6urT3JSuhY4E/sH3v+ttA6SBftgOMGHiR+HhB+/zkcEkaqFT o36oeBxtXa9OvYgv1THWIcLNgBs24cOGXBk6dmofduzaGSOorLFuKrMeiAONsy0JuEwK6KbUB1qZ 6lWuOuFGbYd57oVXw5/9yR+Ggf36hltvvj5MkrVdPW2X4zKN5XgFtOKVMzM22hGudMnm1cOHD1Vd 68fv+lJYRdOzfedQQF019ZNIz1F5lrdGMe1QcF343OCRusWcHZx9Sz5gsvqLTyZ+k3gdedAGWyq2 hgULF4dvPvpQqFu3boFG4wp0VkhBJW9vTRURskLIlWjZBZFSz9vrSEKBdLl88hlEYxAXuuJK/TMf Bh1X5ymmHdqSemZwDEA/KIVsHavn2A6U6ZK2knUI4L5e3XpKF8tPm8SvjqJyXAqjRg4Pf/Hzn4Yh 2hpGe4DHFF+xSi7KSVli6+oT9cli0PcOHjgY3p04KTz8wL2hVcuWoV3btmHYsMGmtbSymudz0J9A Gk4pz4mBblty0P9YA8WFn5r2CiFZCXRTPPAB0Hw96ON1Eg703Lesd/j5n/w49OzR3W3hcUiMLWHJ nSUDX2gbIQ6LAxThS2V99dg3HjS/iTxCNKT+E2krK47yofwGSvk19mLF0Eini14l3t+6dSuGRbdp EYtKq3yVVDf3sviuYNrWFjUSIPw91UfvlIExptQqGf4m+le86uNPLGGEE9OC00jLAFf2ShYRYCtC YPi7vzh5rDfvKhvyh2ufvse6R55TzD9+zfCiF1svZvkYUO4njWXki9L8ffHHa8aMCmW9tT1I8S4l WgVhWVuBR3BD2QiiH61aviaUb90eHn34AUOnPdkG+/M//UnoU1ZmmndklSP151SMeCpXbMM6ojnj n4+pmlnEAo24HNEHSYxGf1NLKk/KRDqi8GdWqQB8AZW2j+IiBzkTxVW55n6+yItK1193rbYrt7Ly vU498RPaynkCOGsj3R1Een00f1A8aH3gwH7OK7V1sqBJ5YOPNGvaNPzge99xezfQKX6AAWJ1nkR9 PHYqM8qY58+uO3XWH+EsrjXRNktvsddH2tZyBD+5C3pVEjIsXPCV/OUxQwEp/AI+HtU2dWoXp1yX VLbW2lb6ox9836f5UnbqzBbbD7Tg8ehDD4TmOuGNEwqHDRkkHllX32OmJeMT42NEo3LUA3FcvkQr 2cdceSlr4msEfxF3GY3Ct8FPhJzBTfFjSpABrSdZrLQv6kN2xb6oFyUr5aMxQp6ODTnRij5379ZN 24IHOl3q83n8G4Liu6/qhTKneIluzJsS/4hZFnlPtXA+g0LXjX6aK4soQ8H0M0oZ5QMev2zMsz8t x3fDGPiFi5Em3K/0LUIjz9g2bkrRhDJyPvS1XCz3VbeN2hvcfvDhFCn3B4dBA/p7qlFoB+gXAsly SPgAKvS2Zt2GwG6Ebz7ygPCrXQPCHdsbfybe07NHN4+lFCDigFSFkiqu+hcDBKHmEX7STzE/QlKe PBcuFesL8rE+Rl5RiPWf+6Biep4HjvVfVU/odn15r+EilD8QkWLU9Jz/RhfJXyl+gpX/xjPfuVK6 PKz4Jf6m9MTPw0zPxEqwLgcjQvqS3yLX+pJIWUZkUuAX1aLzLRUmfaopfj5OTWlImw9Pz+meYHMH VvpL4Ql+uqdw0udh8Jy71P0UUkqgAqH/JRGzF4QjX4WPPJBlBic+6TcLT6VJ9yxdHpmRIOPEuGJO VVj2i2Wh3yN9Q997+1qw2jhhU1j565Wh05hOof9D/cOpg6fDuePSHotJ1G9eX0oYaYG3HwvnT58P Tbo0DY1aNVLuykgd4NT+0+GUtkfVaVgnNOnUJDB4J4UIDBsmc3rvCcE7F+o1qRcat9MR9HQcCqW/ U/tOheN7joeNb20Mzbo2C20HtpXy6kKo11STwyb1FeVSOHPoTDh38nxo1rl5GPStK0MzlcF5CAtc yiKc3n/SZcXPzck9J8xYmnRReTTIAsOMV9mePqDtXKpfvcZ1Q8O2jcIZWVfVb1Y/1G1AvK/G8cm9 J8PRLaymZoimGlK2HdpwOJxWOX0pH/ID9plDp63EatKxcagNbrJJPwIX5aL+p/afCnUb1Q2NFadu A3WbjDky2HuAk0B4crfaRAqpxu2bxHpawjZVCA65wugLpUqlc3Gq/wBz8sczpJO6GB64d7yVCVgT tJT1A8I7E6sOmmThu4AVAa6mTZuE9u3by6lv3dBWfmUQMs6fO698LnnlbUt5hX25UO++fctCWa+e LhdCItZIq9asC/ulDGCS1V6Tp+FDB7v+FJryVFbtsOnzSVnDdO3cOQwefIUnJfaHRAFUR+iRAapK /j7wGdOkcWP5EGgbMKPH0qNH9272RWIBKmuDyqqqsGlzhbe6NWrUKAzQpL9TRymEBBA/NTNmzbbC DD87vSRIcqQ1SpZoLSMrA1nNUM+2bduEoYOvDA0bNrCQt3HTJm2JesvhXbt0VnvX1upcK1kO7Pck m7zABX9YauEHAOUEgyf1G9C/T2HwR0lSodVLVhz79ilT3baFfVLqtNLRyyPkN4B2SAMmqPAFPkAK V4abc/I7sVw+WV545XULpAimdTV5w/cUYwIil/00bNgs3znHLCTSDvWkMOGCBtZqYMefzjnVuWvX zuEKCQYoDWhM55bh9fDRw64rtNKoYezT1G+b6sHqdX/hGb9I+AFq3qx5GDF8iI8fZnV7h/wOcUfg p60OyqJs0sfTvV2sT1lvr3JCX/QPfGm0FB5oey6sEDZvqbBvK741kALmSinlaL8oLKqWojFh3vHT T4YpwyRP8DBp8lTjmzZhgnlC+CfsgfvGh0WLl4aNWzZrgt9AW9jOyjy9Ktxz57jQWO1qpQU5CChw 4wRWJuxaud28pVyWeGeleK1nnzhdRBs4a4e3sI2B79DrBfE4+gkTdi6RSThw8KB8JWwKx7U1j37X qVNH+zSifaD7Svnzwky+pRRtnUXD8xctEW6ah6ulsOPaJNiUky13tBlCXVfRMvgAHQiU0Cd+e+hn 1Jv86Tessr894QNZDS4Lg+RHiYlDF/nwQNlBv4UuoBn8XaA07iR806+3qY3xb4HwR5uu0BavAf37 qp/1Ub6UKvJeFAbl28u1wq1+K3q+ZvQo1zGWWXVSG4+ShSFtDpz1wgN0CK5RGA4fOtT+DKjLhs2b nC/bUej/g6+8wjyMFuc7OMYa4JxoZdeuPYXJHKWBLjJKNk0dkQ8h/GyZjhs1dENg4YhFAdZl/fv2 Fd53yMpsb2im47NRkEObxmkEGPufGhBeMXnqDNHxu+J/vUK7dm1My/Rd8oUuNqrt2crI+NVfOOrd q6fLwyQEa8TV4hNsGaHfDpSinj4olERCUwXhJ9BGpdqrUrjHxxBl31JR4X7cv68WW9SeXPje2Lp1 m+pZW7D6hoWLlxnQMPX5/bIkAVZj8VAuVozpu/RX+uBh1Z3+C+3B99y/VBDyRLGO36UrrxwgGqoT uonGUf5G2tpg5TsLAdAJE1HalIkqk1R8xMAPwd9+8bi2whFXyeil+tKW8Te+gD/8fcH34RdDNbkt r9gWdggPV40cHrp07pTx2XXqR4ectp94aVnvnuGY0m2rVN1kKcg7fX+fLPzoR0M0QWzVqrXa5ozH IPoB/LyxlFngq6dwOUSKcOpA2bepf8Fn26te+BujP1BY+sC6dRu16n7a/GCA/GExEQI/B2Vdulbf 8LEDPgdd0d+LMrFP7xTMStMvOPZYpraAbwwRXcOrTokv0ddf0JZa3lnZhw+h+IBn0VdoT/oN7TBE Y2cL8VwUJBVq/1e1tfygcIKfLiaO8N0DHovquJ5pnMIXG75awBNXB/nZGzRwgBeRqP9h0Sdlhc/D 33doHN4tXDLOwN+RHxTNF+2ElR59kIMA8M/VWfwMBQn4yqIZP+CefPElxof27ds63+T3Djpeu369 eWp5eblw3Sj00OS+cb267jsxx6gkwpp2rfjbPvE58oFPDhAfrF83Tkcuyicj4ZTv4+kzbVnVRlY1 tElr8Tr4DflxuY+rj4AfnterDSurGBvPhY4d29sSB0USdeE7W2qAe1ZjZ2PxEtqhWdNmoosNkhXe DP1FEyiOUcjQ78+cPKttdGvc32krFuqgKXg3+CZfaGT5ylWm4dRfoQsW9latWes4jNGMi8tWr3If AD5tTT9jHG/SuInbnfHlwykfh7feeT8M6NsntBTvwAcTZVdW7gPQEjyZhgAuNGbFs0JAXNQJyC0C /UXjHf2lR/euxgm0Bi6gGXgQE30AI8euFVxkPOoDr79y0ADjxko8wzZ414dxvbJip/l/925d3e6L lyw3zq4UfuCnGzZtNH86qzGVfkN4A+GEeiDX0Y8Oqr60BQoz5BxkMvMi8UPaEPrcuWuXynTRsifj YaJL02j2At6xwKvQQukBLQSAf+iAMWak6L6byojsxhiJ1TZ59CnrZT7KGAlNwHN69+phHgl9tdAY QpnbagHvjMqCDzvGUmRTxrsF6u88jxw+1IjZJOtP4ND320kWZSEShTvzPPjumrXrPKbDJ9O4Qn0O HzmsbxvMz+mHA9Wm3TSm0A+Rw7aqTtAb/JOxCZpB7oB2GVfwucnW7JckU56VdbUqZ17Vq2cPy/vr hUPGT2SbZqoTuEFmgKbgFW9oLEQGv/IKjRXKH1+TjK+0E/K7bh6HGRuhPax/aYR2Gtehv0bqR+AT mRJ4jBnUj/F4h9oOPjhUi4NYxpFn4RKMvHzs9ix8/B09qHK0h4rvq6Y5OTGqXQSQIktV+JrC0j0l TPFSupQghaf3/L06jFS0lCbdUx6krSksDzPlTzye03s+To3PdWoMrTkwXyBi5N/Tc7onCLznC5UP T3FBABfvKSw9f9m9pjTVw4CdYOSfaz366KPXDBw4cGgJ4ZLaVypGei+GlnxRT/I7ParGq+ZwQvlL rcqbY0pAgOEt/qfF4VjFsXDbk7eH9sM7hhY9W4Q2V7QOOz+tshKn2/Xdw7bp5WHdq+tsPQOV75q/ K6x5aW3YPrMyNGxZP7S7gsFFjvI+qQyrn1sdts+uDDs/qwondp8Mrfq2stKDXL0la8JmwVofqmYp zoJdLlzzHs29AndO1k1L/3GJ4G7XtrK94fwpbX3YfDhUqiwonlr1lQNb5b/hzQ1h4zsbws65Ekzm 7w4tB7QKTdrhgFODqQbFs8fOhqX/vMSKmW3Tt4Ut75eHKpUJ+K1lfeSVICFh57wdYcWTK1W/bWHP 0r1S7JwOm9/bHJp0bhKadooT01JUG3OFIOBsm7E9HFYZh/x4iCyK6hqn50+d9za+7rd0DR2v7iSp IYTdi3aG1c+vCVunSZidsyOclDKohepdr3GclAO06pPtYdXzq0OV6rtz7s5wbNuR0KqPFDVSqMHk t3y4xUq4ug3rhvXCwbap28IB+WdqUdYiNGoZB71C4UoeUrdIgcV3aICB+J/+9d8DzP6xRx4sMFiE 0AULl4TFy1aEe8aP8wDMpCTRcXl5RZiiidCY0VdJMNQAJqlhxcrV4annXgyHJTwiPHw673OFrdLk YpAmVs2sjPrwo4/lC+ljEeUlC65zPp0Xrh41UhO/pvabgyk0CiEEnzmfzg2LNTAx0WLAYkXOl8rN hPykfBtNmTpd/mLe86SUAWS1lFBzPpsrHzCrrBTpqAGWa43Cn3vxVQkUlarzOb8vFex2Eo6Is2GT lD2vvWnBiIGbARya4tvT2ts/X7hA0N+kiR31bisBu6ystwfkiR9N1qRQvpXUTuoKUl7tdP0nTf7Y k8WrRg7TJKm9hcBX33w7fDp3ngdnnDN/MneuFQXAok6fL1gU3nr3/TBj5hxN2I6H9VqxX7hocfhk ztzQRDhi0kG50gVVllAmuFE/OHDwsITACWqDBZoANHQ5qRNC8BQpBhHs62rwR6iYO3+BfEQtMI5R kLEq+fG0WbaaOX1agpomx/iDQBFTJqGnkKMyZmV5xaq14c133vM+81GjhluJuGjRUlmcvS8BfJYE jmPCW3lYvGSpV1MRbFHoHDl2TMqYj8OrsmbDwmG06GCl2v1lCdIIktAMQhWTIxxTE841etQI1blW mDJjlhR78hWklU4m5h9PnWXhYuTwYXJ6TX8MwuMnhvGNh+6XYq9aP1EEBBQmJwizCFyY6HOtlJKD sn/n8W+obu9L4B0YrtNWh33CIVt07rv3LgsmxZZQIuXH5At/R/hG2qdJ1hkJVFgfQXcoP06dPG0l DPwDCzb6zMzZn1owYzKN4IyA+cRTz7nOKDJWayI+Q9ZN3bt18dbQk6dO2kcYghdKgZ279tqfGMLl LTddL3qRH6qXXlO9Tsn32IkwUzjYook0gmxDTdrNTzSReeHl1zyhQVExe85nLsuQwVd6MvKm+tTR o8el+GtgAbJLx47mFS++9HrYrDxPSRm7QAo0/JlRbvoeyqV335voSTC+Q/BvRltjWVdQyAjnmPRP kaXbq2+8acFy3O23eoskeHrl9bc0EToWxspSETqfqdV3lC1McuxnaPrMMESKAfrtJyoz/kmOnzhh YXGmaBTapY9wzdL7O/LFdViT8jPQcVVlWK+J4zXXjLbStXhcelw4QYH9lur9seiKtuqgScfipcvC 22p/youfLBRP+NQhr7r16kjoHah2z8ZV5xqVcLTZy+InKOuat2hqQbxBg3qeFIAnlAQoC5ar/WfM mmMLLiYwKOGZgLz8+pvmZfDRlaKnJcuWWwGH4J1ojnZkIvT+xEnmgfSxI+oHq1aLd342z06iUXQg aM+YPcfK12Xym0a7wq/gsV3EV6fNnK22mxj6SHGCYmijlMeUEauV/SoLCiF8j83UFk0Ee/g9yixw 8M57H5pPoSRh8kJ+bKvDp8tWKQJR2s8X/9q4cZMmrAOsSNigZ3gtk5Fzai/qu0L0gkPTe+++0zwl opKaqlNll5+yPrZWSjT4/sfTZojOz4Y54qMzP5nrSRn1fU18dqEmlPD6dZoczV+4yJNLtn2+rW3W Ez74UDR7zO2zbPmK8InwdeAACpQBKvMJ1x3+hbIMvOKvD+XJtWOuNm7fE92dUDy+03+RgaA78PXr p19QGimAL1x0XJSqo0eNkvJjjxcUWFU/JVhYYq1ctdoWPfXFi6dMnSbe/0FYKt9qR+34XGPZ3M9N g7179vQEbrv4InwQ/sRkjPaAj/Tp3Vv96e0wffpsy1PbNSGbPGW6+dEgTcQ55RI/IBM++MgKG5S/ 8HUmfDPUru++P9HK7J49u3uiCz0wTpy7cE6+tfa7HvRLxqn6GgeWqYxvyaL4I8U5pjGbxaFF6iuz RGe02RDxUmQIaOLJp583X2YCiY+uenXqWuFYGM9JYb5wNrw74UPzS+Ki0Jrz2eee2DLZZpvivM8X uC+iFGuivrJDk3QUGGzrTeMi/YK2eVPj3zThg/EB3oGsgczAYgn9b7MUTR+JR9HP4curNRbOmiMa 19hJW6KcmjpzZnhdyjUUg+PH3W5KnKH+8sGkKeZZO3fvVp0/tTUkCztMSCnzm29NML+gf37w4WT3 AxTo730wKUyf9YmtChlrdu7Y7TEV/1zTtNUfGRYetXDxUtHa6MLkmIxRpCxZIn4knjbv84WWyVDE s3jxT//6S/NvrF/B5WeiG/gmMkVn8W746KtvvGUFCrxthdrvZfkFZILNOIuSFYVoY42R74i2qTtK TeJNF39i/Bo2VAtVGi8TnikTuN4txei76k+UCyUpOIFnIcMgC7HdGkUG6eA1WKIf07gEP0Wugk/0 EW4aS4kVYcd+D2yUARM+nKQ++77GigPiI5tFH9M0Hpz1AgPWWRPE/+Azu/bEtqD+KBDYIv7cS6+G z9S3UUyw9Q6+h+V6v75qK8WjT7Mg9KH6NzBQ5qDkK5ei665xt5lnWKFJZXXB93C+D22RDtx/Nk+W 98JRt25dzP/eeHuCZCpZmIuG4XVzRbMo0E5p3IZnwTvY4lylvowvUHyD7d273wo9+iO+QpGndmox iO325ANfuenGa8P8BUus3GPM279vv9uV8RRFyhHBfPr5lzxuMKZDI8gSWB6ywPOyFjNXr11r2RS/ ovCffn376BCBxlaUIncuFn3RLlj/fCoaQkmFghwF2C7JjK9oXFqiOQGHHhw5ciwc0hjWr08fy6z4 LcUqj0Ud/JqyAIYCTM3uctK3T589Ldqvr7FYSlbh7hPJ+Cgr+5TFsYf2oI9QZ3g3Ck3k5f269y0r M10ybsHDJ0nRyRjKIgGuMGgDlPO4V0gWX7HVcr9q8+KIkgv/HT2SN39pDOfJJVK5uOCZGzduXPH6 668vyKKlqNzTH1Hz4ek9haV37unKf0th6Z5QkuDn46ZvKS73fFg+7uXi5MO/9Bnlyde58gX4svjV C8c7ablX/5bgpPCa4qR8uafnlK76O+H5ePnv+WenFzNK+SZ4WQZZMaqliKFJrM5yUpUMpDqkQlp9 SM9ZHG6kKiTx9/jOYIbgcGTj4dC6f+vQortWnKSBRcPfVJY8o//2mtDlxm62KqjXtH5oKMufrVMr tE1tedgsiyMshRq21slGZCoCP7L1SJj/PxaEo5VHBE/KISlAVvxyeaiYtMXMuJZW6A9tOhiW/WqZ lR1NuzQLR7cdDfP+bl44tFGWFWK+dJa6suap30xbAzRYkke9Zg1sTVSnQVwBYhCp37xBaNJRVkR6 XvvKGm3Hkj8lxefSHC2cOy3BUMoofC6dkDVRs+7NfF/4vxaGg+sPOO4JWTXN/58Lwg4pi4CFRdGG N5VGiqPjO44W4EWg/tVPDscOYpVHppunz7tuBzYcDAf1d6j8sKygiEud4la05b9aGXYt2hWadmhq MEvkhBs/RgyEDFbnjp0LC/5+kdIfkqKujXGwVnXYLT9M0QxbecmS6/CmQ97q1rBlQ1sSoZjb+OZG lSyWJbZ1xEUqdSlhECMxSqVR/qyw4puAlWBWE7giHMWkfjJbnSuFz0QNXghH8W+yJ4mycSqAB9Zi TWbYrsKqLsolVqunSlBbpUkTDBDriNffekeKg+OeEIy/4zaXncHRpWZEEchOWk27Y+wt2vJznRVF CG/gyleM6HQoZlhpQemxSwIPVg9MOkk3T1vBPpFgSDoE3KeyAfTmm24I96psN91wnSYScqL6wkue bHlrSJs2UljUliDZW4LuIJsh75dwMlmTkXpaLbz7rttldXW3rZgma+JIf6knOu3WpYutq+wHRQMj g3ZHKYZAIJMMHLbSztNmzAqvvva2J2N3qwzj77zNghy+nphwgyMmwAgsKACaNGkabrh2TLjn7rvC voMHLMyTZ7EFL9PHhceGjRp4JRqsxdXJK2QR0SfU1UBOAzOxYULFhPzO226VomyLhWbaEYunJ597 3qvNd6mM9yt/BBucSR/VwIzwmaiMhRtW6eiPTKKx7EAyABdYX20W3PoS8K+95upw393jvScdoQ/l DKt+bVWGrdsrTYPQMatqtoyQII8lChYimIOzSrS1ssqr/xAdQjPKK4S/28feLNh3CVZrC+VM3hBY ROEWUogfaTpRNpQkayPhEkHpj//oB+H+e8ZLQDpuIQX/F/zhl2vmLBQoq8LufXuliJphheZD2kpE efITHSDSV7Fg+PWzTBTLw9hbbw53a3IBvhYuXm548DYKQxgryePvvMMrdiilEMCg1ypN4FjhZvvj 3XeNC3fdMVbWJRuk+Jjr/kYcVscRwrF2whk8Qi2raXz7VNvp1mrSc+ON16vt7gw9NPnDpxKrvnxH GEaJ8ZmUiDdo+wZbLVlJXyQh8YhWHaHnxo0aS3BvLCXQAK0MDrKSEiH3c036b1L/ulf4Hn31SOMb YY9JBqvwrN4uWLzEdHyP4Hbv2sUWM3EUjPiHzst697AykxVQLtqrX58yK2gRirngC+9oworgfq9g 3XfPXRYUESB3CEco0xAI7xR+7rM1ZL3wzHMvWzjGUupXTz1jHnaneMK9d4+TZd31ti7NiMI0YTpW WzD+YbWHs1uUwdCn6Vj0yIRus8JQel0z+mrTCsdyI+CiyAGGrYQNjAmd6F+rpVhksp2OfgcOO2nC Rj/Rf7VDLfMBcNRfp58x+Vm3caPx8IEUzyg9rxk90nzyVvVRJkSTJksQF+5MQP695Akv2+qwTGJi PUj95X7hYtTIkVL+zZXz2rddF1aJDx06JIF6pYT0qsApgFhysQ2VdmYL2dFjJwQ1SAHR1MqAjVZ2 nDcfB/dtZCWJE2FWjaEjlEKNGms8lhUJCpbBg2Vl2aiRrTIZC27RFk3o5Copbt+dMMkTF6zXnn7h ZU9Ab7j+WrXrONexnSxTvdXGJeAHWsn4TOwyBUtscNiiRUuPV1hhMNkaOniweP8t7pczNWGAboYP vTKAX3gYCw5M7ppLoYDCmxV/lCXXXzcmPHD/PeJ1raWce1uKmXn2dwMfxlqRiRJKMMazfpqUb6us Mt0xVt51+23maay2P6PxhUnNGk3EJmii069vX/MkLJCOHT1uXvOOlKiz1Veuu2aMxqC7NAZda2Uq yh0U2x1FH7s1yd6pSTs8m23MN98Yx8DZcz71GNJMuO7QsZ35QK/uPTwR69Ort3nXR5oEY0F4t3jK A/fcLSWxlBSiJSZftUQ3Xbt2UrvWs/UGEziUnJ06dBQfrmf6QfnCNU+T3Gefe8ntjeXkeP1BJ089 owUTLWTQKm2k1IOOoRH67pirr3KejE/gOVkpMkmeOmOmFwFQAqLwYoEgcoL4S57QNcoRFpqwohiv doMvscDytMry2dwFrj/vTTWxZfsu4yxKsEZNpIRgIPIlizXx4Tmffu6FIax9oAHG7qbNmoQnf/2c FW9ZZJejjxRHd9x2i7feQwdY4VJuxuyunbuI3uWLcrsWLEXzbMl94pkXrNS4UzyXcYf+Dt9hjMTS 81fiSwcPHwrjbhvr09iOaVIPbyd9t66dfUc5hcXQFVq4YbL7shTkjA3QxdhbbzLvOy8lXWQpEU/U C1+OWE5gcdFLfB2FTnl5hReYmNgXLNI6dZBMtNvjLpZ69F0UMnuleKH/YBXNogR9II2z0VJQeNR3 ytpfNHyP2gz8TNTiHjyQtk78xzhUAVECtZL1GmMeCowrxQvuGa+27tUzvC/FJGM0fHqLFHP//uSz 4kdnLfvcqziDBva3UoQFI+CCc/0YNOWgr7Zr204WvVvcF+FVyG99+/SxEuUJKSEb6UTZu+5AThmv pLXdFw9K6YvchyIZnu4+Ib6IPMcBLFgRwcOQV58SfWGNOl7tST9nwSpup47FyBrBL8hN8JBoxbVO ypYVtpoapzEI/KHYRca9QrzinvGR7lBscEgMpzpSfuQrqniNlM64e+ioPvj62+9Y0YFMxLhfXrHd 4yiLk/Qb+isWsU889az55DjxBvg8CwvQHlY16zZt8uIgi76kYZszSh/qgv/RaVLSMn5BY7fedKNk mzlW6GBdhByNlef2yh1e6Lv91pvDbaJDFNIomGkXys/uAp6x4mNhra9o4zQLttOmW65HDrlfMjJt PEFzBqyrWEzsqvEHC/ymjZu6LlgVsfgL/SI3prEHGeQp9a9m6qt333m7+u44l+3ZF17xwjN5I6vT F5BZaZtRVw0P99833jwE2ZJ2Z3wtcpd8O8Y5cBbyO7tRGsrDb2m5snKWBlYvV0waQ+kcKTbP/HFV v8fQy4en79yBVx1u/vvlnlOe+e8pLJUx/+0rn+MM9CujXTZCvhJESoWpnoDw9Fe9oClNuufTJkSl sPROXJ5rUnQl+OlOWp75K+Qhwi48E4ErRhCB8EnMsHgxtVGYw7OYSKBAyEdLCRTmT3k4BOjyrQBH ATHT7C4LH03isL5p0aOFGSaTJl+K1+O2Hhp4URJcDF2u6xI6juoUKj6sCEc2HQ1j/nZM6DG2O5J9 qNeIQSOEylkyw1yzP9z9mpjeyI4+oevAOm1ReHl96P/YAG+3wm9Q2T1lht2sS/NQNbcyfPStyWHf yn2hw5AOoY62W434s2Hh+K7jYcPrG0OPcT3CsB8P82Szdj0J8lqdA5W97+0d+sh/0Z4Ve8LGtzco 96KAwA5nJiQXz10M9aWsGvGTEaFp96ahShZOEx/6QIqXPaHT8M5h37J9YcenO8Ktv7gl9H+4v+Jf shJs65RtQhOYy5BI5WrCMeGKg4Lr+P4T3r7HVjIu/D6d1Z/GIF1q4/PaXjWyvQZjMUbh5vjuYy7P 1snbwuDvD3FT49doz6I9YeD3JDg8LnNaZdqqX6tQv0V9PV+U6yRgayX+6NnQ574+oetN3cL54+fD QSnZKqZsDSN+NtLbZcgysaOSOlCJXJ14453J6iFNDBk0MVNPV6q94+kHJn7w4GErRgDjejOpgDY9 QxLO1T6sIv70j35gk1Zgsvrk1by9cTLICVM4ScRnEablrPqw/x+hEz8m0BsWPExKuFjVQ2hjFbVw ZVVB2MF8eIwGPiYqTISYdHB8OqviWEtU7YzpmLwy0frutx/TAHmDutwlW5B89vnnWjmerJXtTRps RjodK1748WHiw+SRFZnf/87joVfPnp6UIcwhqLE6jFCMlQpHybLKyjYyFFD0pToSwLAWmFRnqhVy mMG/r1XDhrLuwboFk2EGu0ekdPjxn8726hsDL1YF3bX6hOKIgbKjBD5WhyZ/PC1s2rjFlhUIT/CN y/EK6sdgiqKO8rISc7OUBvZfoDzBc0t9R8hlZfXMmeFejd5eKUfRSjt9xpxQoVUalCdYE9Dvmksg mTN3vifyrbU945xgQFbQG1sPECpZ0YE+uKhLL5lXo7BDEcWKIbBnz/lMA/58r/YxkR5zlfqoBH/y gOfQdj16dPWJZWNGXWVlF/A6SOBnFcvsVHDInsnudRK2ENCwBsC0H2UPgjfxagmg4QKAKyubC+6X KJii9FF0r1xzMhwWQ4uk7Lh97K22RECJ0qNrN1sBcIRrfQk3cZURgO4lBo/guWzFCguLf/4nP7a1 HbTw6CMPqFwnLCRyuiDbzxCmURKp1t6+9IomqSg8uZis/OgPvmerF4QshHkmRtAcF3R/7TWjTfdN 9PxNWQLSb3BazoTzGk3aWIHvoVVAVrSbSeGIBcNB9XXwweowK+koUMbecqPb5R5NpPr26eWJGVvY 2krRhyXODddd43KThpVOJrBsbSivqNAWjnpaITzjSco3Hn5A295k6SWUsM3t8W88JNqqb+uFpFCD XsEWNMcWOSYqsT1xaN/AAjqCL/2CCxyf0MQDU/8dEpKZ+P/w97/renGCGRZACNtseeFiG9iGzVu0 bWq7V3kRrP/7f/trT4jJB1jOL2uzyC+VMKNjlIZsA50qpR3kQesymYYmWaEfp8kkcbiw2GGVHiVw I9GDSLJwQedMrrBSY4WWiQeHBJA31iTgjy1c49W/ueqpzd7UyXxsGcJajEkZKGCSsEXKiotS1oPX zxcuklLzD/xMfkyO2QJ3nZQdKCuw9kPAp38ziV65apWtHX76Rz90GdppGw+LAg/ed7cVV8dldUGf YesVNCZS03UpMNGg/8I7rpeiGmfBXLt373W92YZXR3GGDh4U2rRsZasgLBmwVkOpB51gtXFGToJN J5r8YMmxVJY7rLpjHffTH/9Q+LzVtAefZbIPnbgICfluFxfJAljCMTwH6wy21DAxvFEKl0cevN+8 Edz+0y9+Zf7SUBNIykPjsP2Tyf9f/9f/IsWsto8pDxRVKMvInz6HomLq9JmaSN1py6H6desIFz3D N0XL4Bl+/54sJ6C769T/mIhTVKxZmLjDP8+cPScrwjPqq2ypPWtFMX1+n1b0J8qatqnGKnDMQgAk c17WLlg7fe+7j3sS11zjcLOmTT3Rgy7grVgCoIDgop/TvyACtmTTP1GwsRXv0Ycf9ISXLRrwQeDs k9IVpSf5YhECL2C7GeMU7cvEH4Uzk0UmV9QRa4BTSoOFcbS8CIJ9v06D+tjWPtcLbwPl16hf396a RNYzfTCRpe3mL1qkMTU6+kemQGGENR+WM/QlfCPRjuDcCfRMv8BamTGOejwmfsm2cK7HHrnfi1Qo ulGaMaah5ECpBW1SL2SMyGPEYQQLK48PpXggHN7YU7RK+COqAwpZFK7XX3uN4cOR6DfQEv2WfvCZ 6IRxikUnLMgYH1ACgXOsR7ASQbGEFQ5wqSe8YK8WKFBcYu32D//z70xn8MfvSe5AZmAr+3C1AVtJ sTBhTCZPrK6QD1D0skWKvgePp26pXtAKedF/bpYMw+IZ21IZc7CGg07gLWxLRHbZIXrpJ/lqhJS0 1OlqFEyN5fKARlKd4WNYqJJmjPoAymbgL1+5ynICVoNM+rkYw96VtRA07DaLP9m3ix4z8O2GMgil 8Ljbx/obFiNY+zA2kxD5gW1TP//pj2T1Mdi09tB999gf4fsfTrECgzEBeYeLuqPgYjzDzQFjGj7z 3OYaG7BMYhvirTdd77FTxdeWx2aiyY1hm5Th0C4WwbgPQGYCKlZoKFWQRWufO+eFIQjyu9961H0L BVlnyZIKUnwji4fsEufRc+9ePb19Enxh9UWZ6DfAfPr5l60sayp+gVKRsYz+OFeLMv/tr//S8h1t jrLYsqL6AVtXsVL9ePqM8MhD91mmQXmLFQ/0y8IZ8jTKGHjoUPWB3aI1SgdNbSqvsDKO/KH9PZIT WMCAfqEpLCc/lOzJIqDHFPEe+h98lDHlxz/8ffOetN3yPvE/eCd0iNVZpfgDSECZRj/nwjL9ZuGd eqMMeuj+e73dlPEbFxrwGbayIXfQpixiMT5Dg/AseBtlYczDMpe5CGXCCvnwsWPmPVjLccHXPlSf hf/cItr3OK3FlXqT6gZkQHzc0TeXL1/pbZ1YE7JQ49bjx+1Hg+ql8G7Qv7MfaCnKGy7VF/PNlcu8 8fIxqE0eiGunsBQuxlpy5b+XfNBLLtdC+hS/etz0nvLhPT1XT1P9PZ9PglPj/esqihLAdE+FqRGo AvPxUpzqhcxXJsXnnr8u907agjyZPad0KU26E85zSf5iCiXvMZKCPMHmE0NVxpK+QMgZaIPIZwOU eBl49j3CyRWhes4lcBRP/yNVlcJm8KHWngxpZMGahedWsha64tsyKa6P4kKTNRfhUjiwVgNInVpW wOxfodVGDYS169eWtZCUC2cuisnXDlgRtZL1UqW2nYGhM0e1Eqt8zh05G+uvItRphC8iLIr0rK1c 9fQe9J/4/lMclBR1YDJiLqALzPGZSUishX6lLep8Q+fQWlvfEJrbD2kfGrRtKP8/ccXscIX8PjSo G3qN7x3qyv8R9e01vmdY+A+LYj6uV/HHaPwCjuN3LJ/sj0k4qaUCnZE/J9AXiyzBQxZZHa/qGPYu 2xsOrM4GWhURJZ33e4vBNZDlVM87e3jL3YK/XxBa9JLj06FtQ7vB7T15pi0uCf/NtTUQJR51b9is YegwvF2o+LjCAytWWy6nixUxEUsIhvLf3Owe8PjOlg4mHChYarpY6WPVFfNhBiIgY8aL0P3+pI+U ZzHXARK2EOBwoMwAsv/AfgsfaYsHJr8P3D/eq72/+OWT4WoJAGNvvsmmz17BF2xohfbA4o1BndVc LFNKrjwd+1nppIi0Y1gJGQzMTFowfeVisnBak2j8fACbQZfJKu+vv/mehJcKK4pcF8FLXZY7QvXg wYO8nYNtAjgqReHCylKqOUNuHsMpvalAkRA+EOqYSPSXgIaSiG0JKE979uxpvxhrJPAwybHFgNLQ N+zcV/kQ1kK4g14SLr846GVtnnDjwsUSFnqqYNXCObzKy6QAuJfk5R0cN9IAjrBOu63fuMmWM1gH bVOZgYyip4UGfFa8TLcgVlfMIXsyTyM2obE80B7KC4Q/+i7CAitc5MMFD8lK7nf/ZEARFPlDICvk pG98hk4QPhYvXiZ6+sACGabyxC3in7i0TXYZLu+pteKXS5pQXBLTYfsB29bYBlNP9WTyy777wVr9 uunG6DiV7XpRSQTMrKAZePJm2w4r+Gyt4/sF1ftW0Tg5sXqGMowmor85dz03l1BJW4B/Lvx34Nth qQQfJlrgjjpZuCMxtfK7+Jzidu3aJfYXrexSBhS2bAv7QEpQmgRrKASxJIDj0wZhmYlb6g/Um0kM K6Vp+x35xIlK8Ir6fgn8bDPDFwUOdaEDLA5Q+LpSRocsZTSBRIDFJwkWdxTZGDd98KLxBEQIvtsr Q0Sh3fwufKksWLO99Nob4ZdPPu0tbOASfKFIbdgwKkxZRSdtG1mlPHz/PeYDy2RlgsDPyUZeHZbT a9OcywKWyT1dlC5786AWn/mlKKQXojzhIh9wFun4knki9XElE7jYsqR0uYzDiIRCDOgoXVhQwCOI wjYstqTiaJdtl6YJwR97y82y0oJviAeTn2B7xKOQWZmBwcXEjsk02yXnzV8kxekRT5aEdFtNsUWG MqPIpy6AwNEmEGONCQAoSspiOakziplC36XAXLqltmPSC69jcoPlkulE/YvJx8D+/bQlZbUUSxes XCcpNA08aBPYvjKwPMeaOov4LfdLnmz5ZmIM3WL1uXPnEU+8qT+WT8CHl14npUL0IePCCvAl8RDk mFgGTsTrICuiKk2w3b8VTUUKvXp1Ny4Zg5hw4zeMsYU23VYZ6Q6lKso3lAH0qVtuvEHWjnO1VWOP lFHXaGX+Zvk02aby7JWCYIQtUhmbwPidt99mpUGcHEAvWhhiDFTZVHRv/cRiI/EGl1flYkHMdCkY pGXyPFILFkwkJ4hnYUHEZJF2dDNBolTI7RzpshZNLJQDizaEFlBYbCnfar9jTLCNP9FKl06dbQGA 5dkpKVwbCt8mESVlLCW9mIy39VAu5C7a51ot5Hw+f6G2M03UNupNmhxf6z8ncMGUv/rmyZPHbcHV Ub6QuslaIdETVngsAmF1gO+s5FtGqVwfx8sqSC9m8nnsmBbQtm6zxRtpGWsZ77p3kTsALSqw5fGs ZADqaziiPy5goTTqqIk7i1Pg3HXTN2JCp2wLY2Hq/LkLHs9J11kwWVTB4oKt7ziAtqNfwcOCF6sI xj7zOtogwzdpgYll7/333mNFwb9ILhozaqT6+02ms9h4lDJetOEIWYpgbYxrgNFXjwpLte0GBRxW ouD6kQfus/KeRZT6jL0qB1kWgPBMWBbuu54pH/8oYr7fsxVfyDIeSVrTpeS+mPSnC2UJlndsLyWP DRobsYgrK4uLRtAWMgW+8eZ89rkVUSiGomwV+ZvhQruC31sKPxS6LLSwEEdbYPl6XnBYyODCd+YD 990l3tbISvChklvZBocfNdoFVwtYODMewqfWKvwKKT9sTSU6QXFKm+izrqxSPHIxfhUaIvIPFIwe 10XzbJMrL6+wYhHfaSjIoLvRV12l8tMf1OEMsugMG3kOpX4XLcAkn1dkw/iI1Q6WZyxe2YpsPX4S dRCGCod/QnCKL7CHxXtwS0BfQfnOtjes4K6XQub2sTdbGbNTYwnWwbt27zJd0858A18oVCkbcixj CPyH/Fm8wYcgsnih4hn94meRizZE+YP/THjPexM+9PyPhQHajD/q7Gen4D3KFRm312t0l4AFMVac 8GH8UVE/EtM2KFb5xq4EcMEXrtQ/eW6mcZRi0d8LV4qYGs4wqb2LVYj2u3goFKUkM0JVmtzHyJcK IbkvTli96Ok9H4+w/JVlUoBZ/Vv+/aueU34pXj5fwqq/V4+f0tV4/7qKouqZJGBkRusnBFyu4ik8 FS7FT3DSPcVL79xryjul556HmX+uni6lAWb+mfdIE1kniwFRPIvPsRCliXjjL8smldxBegEWz/ru W4pHUHalJHG4iwNEnXoSfJs2CGcPn46MUQwNDCMwVs2p0tameqH9UFkzZMwN2K2vaG3lTWHiDmAp KC6chXHXlpJEyh+KpOAOwzuETqM7O0sIv3LWNvkOWhpaSnnTXNvBiIRcSNx0mZnQyu7n+S8KUwEI KdRRkeNzTO1v+mFIRGmCNQ5hHiJVKAYwnxhFmAZ5yoSSx5EUxva2OrJccvwIMmbmQiknZ5byBLKS akBp0kYrdX88XBZMmrQoDtvd1j6z1o6qJRqEw9qKtugfFiq/OsKfrIS0vY7yRVYlGMIvzrpH/+WY sGmiHAvLN9HhaVvDZm1Nu+rPR4Se43rFvPTbQHViFVCJHGaFHbiKr2LwmpTxKubtCbZjUacsjutQ iG44WHMwgJ6U8FctmiNSTrZkIHgzgAIMBQaTG9chyxuhilWLqTNne8LJliHMWUOtdwU2ZozQgBVL h3btbUb6kVYJ2O/9f/3NX1ohY1S7FGST1VO3OGg76wwSQ4wyThVT+6b4OvzL4SmNwREVOFnqrMge cClZhk5HJbMEFhrh+PQnfv2slVaY17MNaqr893gQS4B8VzpXIAXGckSgFIlw/QI/i0J8yumyagBO 4cSrlb3koCVQvluoEx0hOMYBlWBq4xr5FkHwHi9gQZMRV3qhs+ri1yldEK1ySxDDAS0r7giJwAcX CD1sQTAdOGVMlz3qBgPhLeWpF7dNMUaWUyEKbUI5XdYsmUFkSRzkCJQ7XtQdvx8vyw8QWx+uHTPG FgZs2WOCli7ip5IU8iU/IqSPioCggo8kzJ4rNNHFlxKWFvgOYIsTljmsMI+/4/ZQp60ESfWvAqPL wQEs/Y42wdIk5hkFSnAXr9jm2YuKQf1dIj3FOPjFefaFlzVB6mIHljiSxWcMghxXjG7MOQvSA4cs 2FYBW9tkAABAAElEQVTGtjm2OmDJwolGTIgnXpycskwAbGlgeKRV+9I/XRYyiFkV7igf4CtYmzDx RbikU9W5o5a2G8nJJOVyDrm0kANV0l8SLFMUIsf4fM5owPRX7AekvVUTJlYk8S/Cyjm+f/7ub//K OKhbp14Yo8kQZu0IrJFGqYe2uWpSSX3oR8YXmQk+WaR8XZasQBTTV3qoHknvJUF6iVFrApiLSZ4C TAgLCTFVCnGOxjmfCMXaku2+KAAx/bdCWeEoDuoXlPnEjDCBS+vnclRI/I6wz8otll0xlr6oPGki ltoEHMEKYipF5dJLZKWlkAlPIcRPz06jH3gD+Zb17unyW+miPGkbJtgvvPyqeRAZUBaudKcQhZoA OOVFA2ZxnSD7cbkVqaC4Fb2RP4p8lDdYQrlvKD1jI/2AiaDBCUYhLz1TZt5RmnuMjUJIoYKxZFhi x+3G18rvhx0yq69TN+rAijw095M//AP7fftMFhRPPPO8Lf2uUD+kD8FLotWXJqOqVu07anui6dIY mREnlDvKR5F+Ymi+9jwTCh7lL1ETx18//byd4WIFQz/Fmg3rSq7U1twNUXldVHKm9aY9PUdcuSSC CZ6Az3u8eLugchXe4+eYTpVJJU3tCb9A8fKnP/mRFAHzZF26KPzbr5724tTDskBQc+kCmmD6BoxY K/Mhf1EIbR8jpJD4SrBCTKnQTgaDcht/gkYQyV02EK7LYc6z+O4P2Uf6B4oG2jVdoAKYyDlM1q+X RRnbqwlL7Y+zdi+8KSx/fDhKl1iGmF+Cme4oxLHeYjLM1kR4Pcq6v/mrv5AiQBY2THyVPxd02qlj JysXWNBYIJwyHtHmGzQWvjdhkq1TsNTASpq60B5Onss+yiGEZoCNPGfhn2IrR9S7/FnUDIExaSFd BjyXR4pO7pRB6gH9ZW1SSBfzJD9wGYMjHaTW5RuwEmihQNdFtcU5twUKMRxxE4O+QF4onPATxlat enW1ZXjMVcJvd/vEwdpOkbxN84yUMJFeMxwJSpSRyKPapUKkOrks1CmrB2XEOvCc2qqjlOS3a9xK hUZRDe+JCiVSEjtdEQaYadSogZU0fCyWJtab+CjdWYRHkdhDfrmSEhf6a6WtuCjNf/TD79v69VPx nqeffcmKFZTk8EXGSU4pJh051GaeJFqO9c+KqwrGfh9rmi8HJXa5/SnWgLyxrGPLKG4ssLTEkhzl 3C5to3UaxSdJhBhhZF1R8HJtK5DxHRqJdKIHl89tIlrOSiDeGfNP+HdGGaz4TIaST1Q+6hvjZaVI vKIQ8Xf/QP1iDTOsUJ2EoNLiEBorG8OLSCiNB7OKLLU0PrGAkb7xnq6Uax5+/lv+uXrpaipXilP9 W4Lzlfcix/3KqI5QveBfVqE8xFRQ4qe//Pf0nI9HWIKfnlO8BIN7/krvwKkJKen7pfxgYwDpi0ug n/y7XrPukcuLCDnG4nQOUqgT6CXBSR9JngDHAhJSgKNPtSVA4rga3zr4D0I4QoFxfMfx8Pl/nxcq P5Ulgd6ZfVihoseGKCr0j9URX1m2jeVMmk7Z7+G+YeiPhoZhPxoWetzeQ5Y07cXYVCN1zI3vbQon 950MI/90ZBj2R8NDjzt7mgEUGYZBWDhC+cRpZChRPAgzA9IFbrwyQykEVzcpLShRLFOsMXH1l1U/ CufZK590NWqjE850ysTB9aq36yKrqNX7wxlZ+aCtL2BODzXi2HAyliYVKMqfwp8siJCwo4xVS86/ dZLJtO1h4LcHhOF/PCIM/I5OqWjCahz9NrILn3Z26FS48vuDwpi/kvXOT0fIyfiRsP71DWZwriGF gjnyPxPgqEu6YPZYznCqBoMC9Si5qr2CIqwdWmqAwb/IXm0/4MrVPhOUYhn5BsNFUOGCNHzPaIFB 4pXX3/ZJCZjqIwzjw0KJBCdG5vQRTHDxu/JnEh5vken17E8+88ocK8KUmX/xigIYz2pdB6UvIAF0 xHaXJVf6p8HYsZWfv2c46NWrp1ZAG2glcaOKc8GDNjjChJxVkz6a1PhSIiYdCHsI6dDetFmzPUHF TBz/ROlkMMrCykuxTPGkENrBlk36zkDMRflaaYtG1y5dvfKFOTATF+Bv317lk2Mw5a8rgcbxyVxp GOQKg7jrojClIwyT3qpKrXoWBB1SUuscr9AzmGC/OJfTCjeAStsOSOL2oaiiL+L07tHDJvCHZAbP 9pmeEkpY4WHlCPykMhmocuBCGAIwdU/fUY6memTRnDdljL4OIo4pT76uwKN9LmrCByyEv/hd8fUM 3vC3wL7/ju07hG9oSwHWP/hKYl0s8SfixrJE/kA+hSs9gzJd3Ngzz8p8eTnb7u5SW+1Q3bvJVHqM fe1YIWIBRTjO0qV6AQBhhIkRk81PZXGHdR345I+JA0oknolrfClPylQob9aXcPa+fPlq+0vA1wBW PLa0Uz+IfQR8xQqY9rM2Bd9sT3tF/i5QALPljT6GaTt5gzcuFLgofjE759QiYFMuVvTi9kTB1v/z WgBI1NS1a1dvv4HHsAWwp4RucMOKJxd4jrw5tmkM9G9EriNlP4BXfIRnFFvQMvnbsku4yaomy4VT 2s44W/i/Nvz0J39ofw4LtSUQXxj41WArGWb2+P1INMp2GwRyfISxQovvHmBD75ygCe4TvrPSZeWL +Ew4KqFj6EgJocF0pfajDlYsCG5NF3R8XtuPTYfKIvGEtL2ONM6LB33H2pCtLhXyUYGCh3oxKaDN UtmKCAWPMWNKn77Dl9jCwqlzbJujrQFOGaA38CFKUliW1vVS+1WrH1+Jmy6+kw91jpfe9B/rjHSx xY4+xESXxQTKDg+JE7nglXMcjuLbI1l1pHEl9nPBFsz8EOct+mRQDcdYzUCfid+ivESpyER6+7a4 jTbxLyxLCopQZUD/TUd/U0f8huCjY5i2N7qeWR3dblnlCC8r4+S0E+pn+7ydsEB3sp6gbVGGUKbv ffvx8DNtPwVXk6dOUx9sq7K10naUbbZ4pf+Am7TlJ5aH/q12TPxO+bpPgeZc2xgVSpCscCn/58qX bVVsAXpIVnWjrxphP3WgjMkl7W4E6o7z28j/Iz2n8Zm6Igv07tXTjoF37topHEXeC1/Bwo0tf1ii cXlSLlzSL1LPSPiqqzDKzJZvtjn/QFtGf/bTP7J1G2ExQWxQJsmMLb2FW7ak46ONOjFG7JMVFg6S sQzEagLiIF/Q4THBJcn4seoGn8PikHZhSx3bUt2eQuwOWXjtETwsWJggc4EWW+7qTjysadmKiQP+ vLUCuIN+ynrLx5Is9PYe2Ce67lrgO2y5weIa60q2XLGtHctMW9cLh5H/k6PGZOGZLWlc5Inl3fKV K91uP//pj2UZNszbXzl8wv3PbefoXoRAocAhIoxPOFyHZrHgu270KG97fO3Nd71NiJO1klIgyrmJ B+gucPA0XFCggEj0ZVzpI/d0mV+qqcC7r1QeN198qa3FRoFTOvXf7Ep8NtFX/7597MeGbe2K6Lqx 4FNeUWEfmZyA6wl9Di7QscoCeIJTbIve2laltti73/IJiiDkFMYA+hC+83CozSEUD8hia6Ta1Nv2 oSH9YzGotbYoceIZtJLKi8IHBhHzTbWJdxdNj2ksYIGJi0VoThfs1kW8R+MOvI3y0MeRg6ElKyyI rCSJh0Lj+NND2YKfNSxNi21FZF2KT3sgp3Kwxw71B2BC4/A3LD3hPZzMiHP77zz+mHkPTqonfTzV i33tNKbg9Jlt8+bJGruxQAIuOI90FuUl+jx5uo6qX6HdXRhhQP+xzOIiHQtsuHDAwvthuVK4RlZu 8BGB1XfGDCgNzMl9BmOFYMc6FukMuYY5QJ9ePX1AQJVwaL4i+HvUvtsqq8QDetjSnXzh/Vymu6wN 0pwHnNLH2DmAFT8yRuRLlKHIKwzg/9APGEmXn4STdMU+67diJGM9xQCD/quu/MnHz0HMkF9I/rUe UvqUV/VE5MVfPl71OLzny1TT95Kwr2tRlBKlzPMF4VsKT/cUli9M+pbuCWZN9+pxqueX4BOPb4l7 Vn9OcFL6FL9WrtGVPAVn0BDynFI/9CpfDkgRdI/vecKK8bIvzjHBSTAcmEXLP8cuywey7nN/77D5 /c1h0f+zOPS7v5+VOlsmb5HfoP1hxM84WSjoKPaTVqhw3PuRiqNh+5xKnWQmp7tDo0NFjVyhy/Vd w+pn5Fj5nU2h+43d5Zz5bFgn59Ct+rfUVqlegqPtVXJCjS8gLGxOagtY5Sfbpaw5U6AiBF6UJyhR OH2tfEq50zdo0VBWSC0Cp6Nd0hLYvlX7wun9p8PhrfKtc+J82LNkr/wACX6rBqH9sPbKSesWmHVb +yy0UgnV9ZL8FkmKoOoue+OOjcKSf17s+jH53fj2Rn2JWM7j2tg3CvWTXgxGsTQ42HG17maECidf fCSlvNhKh7XSsR06IUDOqg9VHApH5TC7QXNWQIQZCTBnjpwKi/7vRcJj59DtBq0UnGVbklZAddob FSA7BiL8+FCfNDlwXkxCRJVndMLD8y+9avPXv/7LP9dAou0oqpcrr994AcmVcLBKamd47G/fvFlm nZp4YUkCzbIagHDIkaJYWTAo4bsEMmW1aqsY8Nnz8j2gQQvhjgGD/dFszWL7AcIeSiHMjmH0rGzi 6BdHpv2195hJBFvLmkuwx5SUgYC9xTjgRLhjtY7Bm3odljCAkMpgZzyrDgjU57TyvlNxTmhCyWlp e1UOjtwkLtt/MC22L6S+Zdo6dJ329c+VsDBcJsw97SNi3gIc815jX0jghxOemLRyAhhWCazmoTSC PhBGOBWFAR2zXkzgOVKUff6sGDLIcRTvoqXLjUP2SO/de8CKHE6X6du3T7j3nnFaUX1KK4bvy0R4 rMuIST6TbRxYIpuxXYLJO4IkE1228LDH/NChI5oYnFbYjtBLAsNcOSzm9DWcL96ifdvFFRNaWFhS QyEMI/ywDQffA1gksKrPihpm/GwhYgK6U75ceKefUr+xWnWaOefT8OyLr1rY5RhfjsjmhC7yY5Jz QVvWuBijEU5QAqJowAIHXwKcigWdIFCQD6vvh3UiE0oyhAWEYyb0O+WEHH8YnGqBYMyqLDR4RAIk 22aOHT9pGiX/06fO6CjnGA8hnD/oBcUBwsAy1ZFJOVt3+paVyeroqH1L4OwZpVrjPg1tWVhgta5B /KGNscBhkoCPJBxIY8Vy17jb7VSVlWRwykQEDOd5RAJzUTgZMXSI4IyQn6dZPm2GPf1sMynfujXc qv30HH0LTvZl7YxQiz8J4JM3bc9EA6sucLNiVV1PujlhBKEYemZSgD+jk9C4+hVOqlEwMOFhsnJW Ch6UVEzW2WbBCXTUj36BQrenrA3wTfSJ+sOLL79u30L0383lFSr7VQEnqWzf3CEegPNaHFi217Yn fB5MmTrTJ1bhFFNN7zTwbRxrQjvnZHGBrw7aEkvENHE0joy6iD/yw2n2/IWL5fB0koVX6o9PpSNH jzu9mKkc0r4my6rOgdP4OJ0H+kUwZkLWo2c3+1BgRb6z4pwQXUMDOOqkP9lZvRx94jCUI6rxQYOz 333wo6NHQxNtWzA/UUVMx6JPeBWn1VAXfFywFQfn2qZZ6FgC+nHxFRQx8Du2HyGQM4k0cwQpphH4 iXzFCN/wE3wP8b5Tk1V81+AHC/6EQM3pNmxloR+yXQ+a43SZ5158xTTDJIOtBtD+t7/5aKgrhh/5 IFgVLVJ+MQ+2rTHRRTHMyY8oPr4v3zdMnKEXcIulFds0UOiwhYojkHGgTP2gDyZuXHvkjwjLYdKB A+iK8QA63Q4/69PHkwBOSdq0qdyKCvhEsuRBGfDKG2+btkAHDsJpJ/y5lfXqZd8gLeRPBF4CP4Xn t5KvOvLwBAZ5INMWgVJVmKr6KrQV5XEZpdDVhInJOltb7pbz6l888bScIL9oJ7dsq6UvYXXzh9// PUtxjLvl6h+kgU+98dY73sJ55x23278R/AJ+hoNqxji2INP/sdzo2f0D0d0b5qcooOCny3U61F3j xsqSaL4c+p+zLy2UtbQ5ij/qdKd8t0yY+KH7HH466K8opaENFlcYT+B3TH7o52w15KQh+jLKCdqH bRj4K0MBuXDREvuHoU9Ai7QRtMrx8tBClcZUlEk4xwYv9DmU2BVanMCJL76VsBDdI6UX4zxtTV74 zsIikZOXHnvkIaOeE63wxTV+3B2e9MLH6a/QDb4Ae4pnkJZ86T/bhD8m4fg7ws/Www/e5wk8PJ+t VnDQ2KBqWMlMlO0u4f7zBUvsDPtb3/yGJ4qcasiEkXGH8YsyMtaTF+MjvKrQ9wSKfsHiD46wOemU E6jIGwX4O3LE3rypHGWrf9FfkI8YQzg5Db9C0OF77090v7/t1ptNa8UfcXy1P1a2733wUXhBpz8y gUYhTZ+h/XGqT7vix+pdnQaIIqKMyb3GJk644hAEtjQjW6xeLUfIy1dYjuDbsy+8Kp7W132E9sR/ H/7nivOHYgfASoixCguytevWhZ/86A9ctgHaSt+9axf5ApoX/ua//hf3b/orikF4DPIDMti+fQfc BjiePyw+yHa1I9qWhBzGiWXwIPohMhsOiKFLxjD4BL6aWCgAF1zwdyx5kcPOZunoD7QJ/QarH+7w 24ibST71i3GevvfpZ/g9PKD+8m3TI3Qd+zkKteDtk2wD5AADyk0fiI7UL8nP1GhvaXzxlddNP8gy yAO0Bf4dz6nM5yUjcjoYvozoU8i1KMaQT5Fp8W+E9e4zcmiN3AMdztVpYdAGuGAxwpZA7gUUTYf3 CC/gB9qpUt36Sv5hHAdX0PD//pd/C088/Zy2o95jpTmHa2zeXB5+/3vfloyHQr5W2Cp5AJ8/bFF7 S/2srXgnTrrh3fAe+i3foHcO+LhY+6JcNYz0gQ84y0ZZiw8jdgJ4zLvxRp+Oi+zdVcoqLOIYw3FZ wIEh40SbnAT5vMYU5EW2vm/bvl3teTh869FHXB9Op1XpCnyGdqP+x44ybu2KzqfFz1gsRinVXbyb 8eu0eA/b0w6JtvDVBkxOa4uy3y7JAS2F17rql/U9N5gvuRs5HX4feY9oRO0K3dypdpu3cJEUoO9J phYPUHu8N/EjyS8X7DuOOgGfUwzhPcib/fuWmWfjT5TxoLKqUmXt4D79yusag1Ceq+8BC7K17BbJ t9i9f6dPxb7sPlQt75ySFib5ZSXlO5O8/JXS5NOlsBQvfUvhqUC8c6Xv1Z9T/BSv+vcEh/D/0BXV f1+dlAKkwuRj5wuWwlMYd02xClf+ned8vOrP+XdgpPjpnsIAnvLgW/45vac06e60jz/++JgBAwYM LTL8mEsBo8TOLpiutdpKCbEgzPzH/mJaSlmAI9h5WNSUY+Dryok0Tp4Pyvn0XvkXOlZ1LPR7tH8Y 8KhWsRvWC/tW7wsbdALX2SPSBEtwQ+HBqWFdbuwSYQtu43YSuDVZ2L1kdzgsv0R7lu+1iTaOl/ET BMfnpK6DGw7oSPcD4ej2ozppTFvBzl8K3W7uHtpfWVyVrivzydoN5dNFVk6HNx2Wn6ODoXGnJqFN 37bCkk5WmrBZx9Jvcz5BW2cvnNbR2OWHwgUpjbpc09kDWtUnVaGrytd+kLbO8U8KFo6dbz9S2+FG dtIWrgahbpO68qm0V8fbH5HiSoNBa5VPFkb9Huob8xJ+8viq/syKxf61mlTIJ9GAx+T7ph5abJk5 aqJaOaMydL+lW2h3ZTvlJd9IB05KoSUhfPsxObs+az9MzeSzqezeMg+0rIge2nwo7JdV0+FNR8Ke pXtC4w4NwxBZZ7WUvyJ08nuWszIWQtn9fY13578eK6hzyn+gtefvvj/Jk4Oxt95s5oxFVoG8/JC9 6ZbojwGdwZljQzmJgAkZF8eqM+B6tVbxYewon6BRBByO3kQIQehhQshq0UlNQhAQD8jpIQ5oUZ4w qOKnpHPnjjaPZZWHyRPH927VYIKDSlbHpk2frcF7lwUlJsKc1BSPcd9pYaq5BuK+mhymgltA0SA2 VY5RGcTqSXhGOYOzXU4XI4yJUHNNRnDKxwoMgzsTLoQNTnPA0uK7Wn3BeTSCD8IyzhYPa0JFGVEc MVlkgsGgeUwDKXhjEEfwRLBiwlS/QT0rcDywqt44Lj51+qRX9BGwcKTKKs4QbcdjpNooPw8oRlhJ QrDGuTVCD30V5doqlY1VESYZWBot0zGmHGeatpFQJqwFOEIUZ+RMQGq6EEi2aCKCgIUwx6RwuwbR bdsqhed6XsUd0K9fmD17jh0ikh/Otm+U8qy5Vsc2lZfL10Ol22qbBBDKhx8bBDzwJVJQH6ltJdQC KSNADk69e6vtNmryiNUAGj0miGy9WLN2gyYgy6PQkLUXxx0z6EMrOKIs08ox27Z8EsbR424HTn/Z uHGLV7nxL4CScaCcGaKg4jQaJsBMtqDlYxLaEewQmDnCGZ8irN7RBkxmmjaJJyYWO4YwRz1UGXg0 ylZ8nuBEnD7xw+99xwJsCf/OI1tp0yWU2OoGxR9OZNkWh8IB5R7pmVR+ogk8juGpL5NH/HbZgaMm gghBTDww3UY5y+QZ5651tFrIBB8E49OBE884FQ0fKNA4vClafDWychChfKuEwCNSLnJUOXQDjlA4 0A/pCyjuUAxjVYcij/6IUIgfAyYpTATx8wEto+Bjy+VQ0S+wEQYRYPmOghDFE32F451PqB0ayBEm k1m2vyCc+RKeEs/hnXB4GKu5KIkPi46heU4LwhcMCgfyBF8HhC+cd7JNFeesd95xqyfMKHIRjFGI IfhTHiYBw7Syid8HJhfUD0UtQiR8jn4ADYEvhElPeFQ2JqPLZS6/cNFiW6VBx71kWYcCnROzoGMm qpzSg38kFMJM9CkrJ79gEUF/oH/zAM8+pYkZEwQmkvQ9BOENmzYJn0fdTzilkYk7pyrCW1jtZlUd B8s4JsfRLEcNb1W9cJyM9Qk+cLjIiov+h5L3jbffFY0pb+UPTis1eR8rhRkHA1DuWZ/M0daUctMH iTkyu1WrFna4OlsKURTrKJa7d+3s8n06b54FcWiGCSzKFPyIMIm0pZMUMyhAUKRs3b7N9TskGqbN UY7SN9cLT1UZnXDaUA+tYuMLi4lmuSzTNuuPiQJ5n5QSGDqmTbGCghZiBeMtVdg4VrzVq9Z5QsFi CYp6lB7QNBdKQyxH160XbQt/8K4dVbtM1yiqUGzhsJxTsFCs4OsEukEpgpKXOk1Rm3D0M8oRxjj8 ozDZad26pfkPFo1YB9G3K/TMRAln0fRZ+De+xfCLQvs89vAD6tM63l79jj62VuXCWod00HWPbl00 BmlL88xZVu7Ul2VpK+XTXfE5Sh1FApNQeIX9S6knwZuZSB47cVyokWPrKweaRqB1xi4WOKgTSgJ4 RJ+yMo1XjTUG7nbfPa508BaUlvje4yhx+DRlxNEwNLNRtA8uwFel+ignWXGyHLxrybJlcvivfqGy oPygX6Cw55Q46owcxwSOsE1byl0mtkrRvo/JOS2KAiacCMnpwjoUPkLdDsjfCz5J6N8odsaPY4yr LQtk0bHGAvg5/KOsV+x7SXFhOlEfQA7ANx75H5DynT5BH8IqGCUy/XbP3j1e/Gkg/KD0Ii8WgHCe yymF8GxPVCdMNO/AYX9rTW5xbI51BvwGJQa0wAIC1sbdNO4gv6CU4JSvStEdNEhZwCt+tKBHvqPs YkEFZR3OjJGfOJYd2eXOO27TSXKjNOaqs7qz+6fQ8VH8MZ7SXmxbAx+0C+1F3/vedx7Xwlprxa+l sENh+szZ7sPwGPz8oCTBOmWT2jjxJ5Qs8FjoAliModA8J4cxvjYQ38R/DONHwjf4wecdJ2jhPwYe 0rt3T+NrhvI8bn4rulKfvKJ/f+OGvs9CwlbJVfBS+B3KPPzhJH4MTTAXQtnNiaAotJBPaDfGR8Z6 8NxSsgDtQHtU7pBMSVtcuOi+2K5tG1tdYYFzXDyYOQoyHopMxtr+fftaYU5/Wb8RXrvb4x7jBMo9 8oNnIfuSFuRjtbJ2g46Onzffiln6STMtXIATcN1ZYwp3fHmZNlRHL/hJtoH3UdaPpkz3ggf9F95z Sn3vMVlFc0AF4yBjO8fZkz8WOT01DrGtjL4DrSCPbimvENwq8xAUMjh5h86Ra+nLa4VX5PNHJFti QUf54LMsZqYxBV7FOFBW1kv08YlhUR8WJ+F3HE5Cn7CvIvFs4CADkjfyATI+Vpz0FdqJBQTGMcZd ws+cPqvxTbwns0JEYQYfRu4w71H5Vq5cbV4J3cC/kS/hdZu3SEaWjyfy4tQ8ToBE+Ytsx4LlfMZp 9TnKO1C8B6UXVpVCvcZlHWjTp8z9aOKHk306GifakTZKIVCXrqxLxZf/7N9M+sFCI2Wce0y505/W rl278s0335yvsKQEImaKnZ5JwjMX8dJz/rs/Zt/S9xTGvXpYPm3+W8JUPiz/nGASr3p4SpvifOn9 60bOx0uZ5sPymaTwdOdbeuZOgbmnsYjn9KfHwnMKS3Hz7ykMGCk8PWeSjOETVv2dsNrvvvvuzx98 8MHfwwzOEApoFDgRusMALgo/p9OvTu07rTcKz/BP5JiAdy7WErniEBufY+zqv4BORYaOKA5qk3QB sXY4f0arB4ul4NlyWJY5moj0ahE6jOoQGsh/EZGPVh21koPtZ7ZgERNG0dLtlu4CBHyUEfgnOu2T u4hfTxPn1oNahbZSALlfKBY5owBBkcRx9O2Gtw9HthwJzctahBZdcUJGyTBhviRGrtX1VfvDiSqO lb1oC6BWZVrR07/di8T0tT0OpQw+hS5IMUO5GndoErqO6WzmvePTHaFlH1khdWvpnNFG75irVbWu cqgtODjS5tS0C2e0p1inhzWVIoptFrP/bFa47cnbQueru6jA3sTi9PrxndrGdoitw6ljJ+WTqMv1 UYECvjHlrZxTpVPLWit/+WJS2NHtmugs3ONBsM2VOgb4rPxQKO9OV3cCsK9TB0/5BLjjqjO+h1oP ahPaDUI5FnPdv2af6ONc6Hh1Z4VE2jgo5dKJ3SdC1xu6hiZdmliBwwkEo+VLB+EwDeYZCJU9Qos5 Cq7oD8a0X0ev/4+//0ebLXPaUt/esjSrqLAwg8DOwFmmwR8BgNIgfDGRZXLF/ngYPBMYhC0GKqxy mASzNWW1fPwwkHEcNsIbgiQWMqRF4OL0H5x1ssLJqihlYjAcrGNvWbVgcKMemK/jMC9d9BfyQRnB wAhtMMnC0sBOgCWgEIZQxOk8CB1YXlB2LEwaaSWcUxUokxVqGTyUY0yqEaiwPOqqiRMKB1ai2FKB 4obJBVYrKEySiToCHiun4BjBgokywqAxLqRxyhUKBE7AWb16ra0JGHTBXdx2Fv3DcJQqK5vUj0Fw 1MgRtn5CuYWQwsSNMKwL/vkXT1jIe+IX/2i80YWyRXijqZbwtobJphRw1B/8MKnE0SAFRTCj/Ms1 8KLQ42KFaPTVI70yw0QHhQA9obW2TYDbNm1YDU69QLVTmZgIILxQPt4HS3BgYmlzbr2jbORELCZV tAHCL4IeVj+c/kO708btVD6UaQjQtANlpTwo9FCoIbzRpgiAQwYNsmDCVkvytMWbBDaOkQc+yh4U IFhtcIG3oUMGeZIHDP6nfuEI1Ep9/pU33tK2DZ0iWKuOrF0WhMcf1aqWrOQiYlXvajh2WjoF8DKA lCcKr1utqMHPE4pUJiTUi3yY1NM/2O6GLxGsAeBjnGrDZBu6RrmBs8qBUnogFOIsE9qiHZYtX1XY vsAEj0kI9MiFwpKTmZgsd+/a1SuXWMORJ0pGJjMUFRpma9ZRCeFMIrEEQ4FC3+SEm1WiU4Q+nJKi 6GMlF9hrRVNHsIYR/SCA9pNQxkoz8ak79aMPo1hi0li8lKnambyJhzJkqRSHKJuY6FNP6Oi4+ght jkNvrIBQPAMHZQzKbFZilYVXi9dr0o2Si4kxCkRwg9UFfeuA8Pf/svcm8H4V151nvacVrUhCu4T2 jU3s+y42G2Oz2MZ2vCRxnMSTpZPpTnfP9OQzvWTm05mZ/kwySdqJjTfA7BgwZgexIxAghATa0C6Q 0C4hCbQ8vTe/76k699a97/+EwOAknX9J79Z26pxTp+oudf6nTi2QHFB0sahgjvDc4gMaZQTWLCCy qSB+sKjiw7icx8eI9nZTNLEoZV4xj1F+sGWUPHROPnGmWTkVz1t1mP6hFODeQknEPKaPKAkZFxah PFOP0v2E8pQ848PCBHky9lg5sPDjWcVpV5RjGWVTDaFKjq2apzhJvvKar0qJdkL4shYG1GN9OUVj jTKbb494j+80vpAlR3NzH7E4QvFHYOE+dbKU8cLAc1JdsI9xFiFYdqJ0I9BPnvfwxAJh4aJFJn9+ VWfMUECh9EfRxXMFCwkcrtNf5iqKdrPOlBzxH8K8Y7GKlRYnKrKFwbY/GDUuTJh075ETYyw2WRwy BkwplMCTJow33ihDGQcN5Miid7jmzDQ971lscRLTn/7Zfwj//t/8icmb5yz3BPOD8dyhBdy8BbpP NR70tX9/+SE84QR7hiAT5g8KaH65xhKMcZ06dZKUH8NNqcMijfnYU884+s17BrzwxQL5TT2joIGl 02jd/9yTPFG5F+wZJ5ooSjlsAWtQ5hGBOWynRYkvlDs8Y1ECc8+iYIcuyicWmJwaxnOe+cy3AO/O vn362iKR8eadzjhh9cK7DRnSV5Q7ZqkgRdciKSI2bdHhJOrzUUcNtXsvLrZaTOHJ85z7gvFgyxsL QejxbUbZKTo9FEUgP77wndBLi0GebSw4mWP5PCaDotAWuZLP5s04ItezfugQm2socPiO4AcSrEu5 R5Ep769+mnf5vWfTRV+SKIXfXLzY5CRQPVN0YpwWlcwHAnODRSd4UAYyT5ElFk/gJ1B3/Te+bdY9 P/jeXxsdLBn4kcd+AJAc2e44VfLG6lJcie+D9k5cu04WXbpvBknxPkP1PBMlGvuhyJ8z0MKy8vU3 3jRlGooQ8J1w/DH2vWEWrIyNeIkcwZVSulfnSxbMKb6h6D8y553Hu4dvBJRufA9wD9JPLGCAw/IG J8y7d+k9q3nONyPfAigisWjlWcR48X7Givy1+QusHeOBkobtQfbUZMxEk+8+3jcCsnYo6VHEvC7F u7/r2LLI/cUPbNw7PB9IDxww0JScxFjk2vuVLiqAG34inngvYk1qCjeNlwDs2YYFHd8VvEPhd/qU qfaO4Ltl4cJF9rzGwoYfl3bIMpdx433H6bYoJXieM5723pH/TH5A4PkCfd57KOjVdUk9ypgfOJev WG1zg/6h5J0yaQLdt/Hg+xFfeliHo8Rm6y+O/Ll/UUB/94//TfjTP/qu3Wso4vjGjIrobjZW3PPc n+DjvcG9y/cog4kCJv64ss6sj+zZo3uW720UjGyh5T6BLoc5wD/f+Dzzec8u0r2FSwGsyegnJ+N1 1zsEC0K+u7grsQDix9X5CxZoTsZnD3LHWprDUF6Xkp7nPspPTvrlPcO7gR9s+O7lhwXeOZz6xvMe /rlH+YZ1BdYgPYcH6LlJGUo45uUkrTuwEIwKraX2rOQZjPx43/TRj5jIhB8RV+s7gWcPgXHkx6SV q1ZpzGIZNMH5k5tvlXL52XDjj//BlIrMbQvcTML1jxMicciTygPfqffcc8+N11577V+rHC/igME0 f54mjib9sZx0Xke6DqOiAofXExPyfL0MFpPQDM4aZG0aSdJxOKzD1Mu9vojr8igqagngHLaO1Mtp Qtrr8zZ1GK8DNs6g2NbL67HDEDsuPZEs7WV57OmuYLrde++9f/KFL3whKoqEqKvA3t6N894NC36y QBonOeHUE5ObouDCewsCPcBiZa2ecsTC2yGtaCIe8rGqKjaVqQfsb8XqhpsSJ9d6Fgm95obw6Bli 24lic64q1s1m26ssF8u4P/FpBB74I491TRwlwYgftiWBlg8C459INK1NyaAI6qOK9wC0gIEfKYwI reLP2lvOICwFHuNJtO1ENB60divBT2xnfVR2vxRFbAMbME57ewdEWe9euSdsnq9955fp13H5MDLZ 20XoIUNQW5N9knGLdhvwAMY5tpvJl7T08DP6gsGfkgU+B8W/2uN3IfrMiH1AdizmUYzxkQIp0pag FYtVyTD2UZUSDDISsPF61p+fGfmmiYTMQ9JCRJ94V4nnY61dWRjy8r7l9ruknNDx2jKvd9PrHI/z A5/1wAOYjyojYDQi/ZycwxBTbrITn9CIbUusDuslwPPxUg9dtavShZdIQ6LVSzjxqrT1yWqZdpq3 xllJxfmgXRzjJFcDwQpFg6y6+NJSggFLUYmFtvSTPlOtMdN8RY6xnPESdIGnbOn0vYSPF7aCoLzC LJ8j5L947VXWJ4fJ47p88jrSOf7IduwTdPgzthJvDu84gGdEmD+VTntHM1nwkYl8G8nG8RGzxdJk hMANmFIEFyNyBPs1WoDGowkvlhug7hPkS10eTNbgoj9ZnxyGepRTKC75UOOXx8J6KjVx2CJOeOro kDvkxYkukQ/wx3u77EwhlwKhwOGduYj81abEHdvRBh9FPE2sI4po47C2yDaatOwczKk/z2Mbt6xe eMp7XJnYAQMw3PCfxjrKH/rQ1iwQbCFvikWauXWoYAtKTR1omrxis6KJz80q7RIvZHiGGJvizcYe HKJLzvtH+4I3lXso+UPG0ddKxJHkBk4mI9iKPnWex86f47VY8j+cedyIt9hvXoDiK5vHFTqJH6zl WPBe+rlrw7Wfvyr87//bv43PSfEe4cUNY239KLqhLsVtlC6jCu+1TMFjohn7p3HQe6be3nn08tg2 yjAuehmLOGbgiWOXEBcyjuNHnQ2kEaxeIv4qQDGeKjYaNGfsee5oCEmjoOY0wD/61/823HfHz8KJ WlBwrxO8PXPF5kuG3uuAU63hBIY+kbd3s89jZbHmMd83opu3rcoFAvAVn/9Wl9FkHrfYS15IUnBc jicvj+2FQDzBpXU6pXBCTbm9u0t0OZijMn4LGVCa0PnYUlTHE8c59od6QizT2KsYiysWrATvg2Wc zUQjp5uKDE/sUjmPra0uLjvPF7yqgGct+MCT7mLDxezSLWF19eexCvU8OmhKRqwcsHz65u98VyeX XaYtXt82JSEwhlsd48lBoBv4fDRhKVPeb4KBmP57v+tjR9+EMpM73wXMCfBFlEbAZRVLi3uP9wE0 IOO4KTOiutq7xBCkhorgpZS1I1aceHXIRuNq7wiBJu4KOXsbYuRi94XSETvfFfH0rMij5GLzW7H6 WfTVkJStK88Kwxu/TxJSExxjUeStfVXWVB/Otxsy92dFQkNDu8chUJdxAaMEz0ITiITCtzyyVaHw +TdefPY8+sST4Tu//8fh1ptu0DbWM4pnj7+zyjEpsfu8oQRZ+juP+WZ9V1n5rOD7lnuNGY+synew zw1kHec93UP2zBswR/yMHN+19Xvc++h4rIEu0KCM8WbkygDOOLZG074dVBSLS7AiJUWYFk2GCfll wfgEt/FK3xQSHupM3rHU0iiq+KHgvl8+bD+2/cHvfdtkQl+LQLpKpqj6xBN8j3FvKSS2I4lKJv6g ed9999149dVXoyjixcQA+h9t8jLyXgdy0sTAEDf6cxhigsN4mpg6OAMPws5hlS3a1LinygI4PTgM sePxuk6xltQfKeSEaAiRPFBfL/N6Lyd2uLzM4YhzGPLAp1lYwe9w9TrH723Je6BNiyax07ZyRxSB 8pweJNoONXCi9nMaC6rTxGJix5sgobZ8bG2jSXF6KBVDCpeUe50//OMTU/CpThEwnBQV57BuUV5Q 3h44gnehwKMyiDscMHkQnRZ7eWWFRjMRdvrEDfGowhgSHgkgyiB2J/Ie6617dhEeYv3Z80XV8YEA HDSoSPXwrMzgaYPDFm3d2r1+l70Ijhw3MEy8cqJQCFY8GR6aAg1uCsBD+5xnrytkIzhjWHDUEYgL WaU+eR6+CIcpYyNnDRIepe3FJGWUffA6TYMBb2pR0CkxeAoFDL96fue3vqlfqRbaL6c8/OPDWfgN V4mHOsooiSFC5C8lr4lQvEAiHochby83Yv15uZIp6AUtOmVwDGUJKf9oIe0QXbUry/0F6i3Em5Lx Ze2CAmMMZTsvqcWSsb1Ei+ISb5mKlfF7glI9hdMCpYCp4XFOIv0ocV7IbCfC9wx7ry+ZdYHkFPEV eCIpu9I2tswKi2RsUfavxGBjb3MnytUHu4TI5c37xLkFuaBS2xKKsVJ5uq9zPAU7JISGptCvhnqL usyr0ORYZDtbZeuUSuzmsuGjlF/OkAcLcH7FMxzgSrOrxJPoJTz+WEjZBnM3wh9kAjhTCYWNX4bY kjamJXdOPzVJSlOnVjZGvCx06jS8ncWpWTnuXpvwqD5faFDrFIo2DuMVGq+4aM6hI17IARZDmbPF EKwqRLwRmaMsyw3E7s9SevGjlHu2DE4lYuC5BjWCzacMcZmMEFxN6Vu0sFY0JKFQtji8eRzfW4cz j/0ToaTgvCTKBQ8ZFyrD6g0z/jkvzTU+2Vb66rz54RhZXWGZUNAW4vL5FKk4rWI8IynrvcuYBUN8 coPelteZdCKGXMaGIiHO8dI2cg4EcuHdYtC1i3Ol2Wv1MV+WluA5/rI0pYQ88hvz8YcovYL17MRS gAVEd/3i/qKsW/lVGyuS/Flh89gYrFL2mcu9yLTTW8QIGKuJtPPFs8TeTancI+oLPPCpXJyBcczz vMlKC7YqF8KkAqdT1vk7zSnlcQlVeTZYcawrIWI75k4xfygCIAsVPFYOfOxJjqsj/VrGN6zzDHgB Y3JWOxeC8qZQNJy1hacalfPYAEo8MVvgsc+rog/6Nio6UFC2/vnz2Evhk37f/8DD2uq8UZbAM2Tx Ndm2vhTyMB79LnHCjkH5or5a5xC5HAoIKhWi3NND0XuXycY7CHiOJ94vKuPHxQTv9OrfNSU6xgyq cR6TahQ6PdfTO9w/YeE5vmpTJ8R3/uzw0fa5nfNdvl+d7chdvMJf/qzwHolLY1xQ0G74no89yWk1 6pu1t+dTrPVnBbmMmuUOJeMCGpbs3Y0MFPQupt/8sIO1F5ZdKKtffnW+LNeGmqsH4JxW7C+9jyVR DiAidH7nlfeK6PGjJVB2ryWsjljl5bMahYyPeQTwb0inC57KPW5gEbbEA1QMh5az03Ca3iqnFsti zxl32sQQW5Ou4onSiBKK4LENz15+5MMqdoIsdDk9FJmXPCaMaR4nMp9u5JPHelH2yLrUNeXYobLe G+bTwmHyOIqx2o56h6HGcfigeB2xt/cYeA9eT5562hePgpRWVASHdzpFRaPER1EUOcOOxzvk+Uax d8jbej6P63ga1eVl4EIABE8TOwx1pBvlVWxB8z2b8SpKjw+lKtPcJvEg+fM5dYq2PRicgWRDq1Im GxwQCqCYLfJZeZYsqju1dSCPE7q8QV5laZQmdCuvaNDO6ilPPMe2MZ/jcXSOgriCupJJdXmZI/Ay jx2h57MYK6Dd67VHfGvchtNnRJ/Qd1S/qCD65ypjm2p0Mg98+EhmlWI6WH6gAs1DlG0vo2UGy69/ /nFQNqvi6Woex9Fx+pEOuRJPyiQZgyfWcT84XJmibZxAFQyxuFaUY4gAdTyxtJiQzlWBh0RXbfK2 RYNUWJVNLIx46pCOJadTwlTxNJIxHxKYS5939lnyTyB/WzLt9Y+FEo+okIEFi1JChWXvypRDufRj Pl0zPJTkGCLEh+FJXBXMRYTV2ZdoFVEdJxVV2UTQRnAFEjUp6wvyNTx1GbuCxG4lmhchYijxqCJ2 xSA+nXnsDJT9iOzU84mrgjlnrCgoelEm6jioqcvY6TcYraKqxFNSq+KpyzjCle1KnmJNicdYqsxj hyjlXcdT5jvhKQnR0yryIu9AXu/5hK1ASsKXPg5Tj+s4qFe7TsWxoEBdR5M1KGE0JsqwvYYtLliA shUQp+ko/aXtFx2+zcoWEW3MV0rJwIJF5fO4KEz0yzZlB8oyNa5kEkIr9HTZzojV+uWUSzyRsQaz Lza3axWnt8hQCyrSZwHBVigWSVddebn529qo7cGcHNTRUsqq7EbX89hxxrhsUTLmfU4lkbHEsddl hR9TxpFyZzxVPnKomP7kZQzFOBaJQslCkYr1ZEuYrmXc9T1eIMzwiLrQ+3fOoZ45Je3O/Pjn+sQJ Ot1OW4iwCvvmb3wlbZuqKXAKNqp4KvOYKuPyoz0r4NHwlKgTtVhQ9iEVe/Qx3nkRVydCjjGTsY+V t7DOCS5yGxvU+SvxVnjOm8SeNsRTMJHmFvnYNGGrIP0kZFz2qYK6ZEQMNOqTyyYC5vPPRlLPHvz6 4CCfk0zxD4VzcPzgpZFOFBxPpJ7j6fp+KPnJ2cwGLqMBXu9jvV2Zj1BJAikqJV8UVMjFTImDfIGn UkyGcKgne9kAHI6neo+DI8LlsuEbmfv2lJNm2hZEtr2VSiLaRBm7VRUlv75Q9qtCM3bQivQDMjlC VhoLdHXhUeDI6jEvsxzO8XmbPK7XkXeljuPI+cjT4MnznvZ21BNy/mJJF9ePoijKiXmaOA+ezxkg 7cqbOmwdj7d3OATjSiHKqK+3cfxe77Q9T5yXWblePDVaMcvExsSOBnVSsUzFRQIYZQxVKqzUZbBF ObiLTJbKYBNaoggAfGK3aNoAj62ivA2NPahR4pFHgIPF2oQn4bUoAVThInQEiw9+6n0wSFm/Eh6D dgRe5rEqrZ3ns7hFD5IBOl2NE9YI4LRfAv5RZJzEb5z4UCRmnedUZ5GVlbKJVRQyhfMGpOOCIsJw LedffEwnPNb/+Hxg33QVT2ztH2EpZxFy62oe21xI0ym2SddcxgU/zhkweSOlfQJY89inImkJvzA3 aO0wOR6H8dhhlCdZhLxNKZvIE4C/moztvjBadTyRgQ+TMaLAT8nEieMlFvyaaMyqjSKifywZZ2KN gk3y/Gck43KsM97zaRElrO5R6B2LAJXu/8rz2AnViFeIZBlnxZrlbf7pzeNfj4xdftkwFUXlUyIW 5fJK8EXRJyvjyrRIGZ6j9efxhz0rWNRycuSll1xsFnA8C7pp6zDWcNHSig7UeC/6VAiinMJWFAGy ViqtNapWlogoL8Kh8CQEGR76X9BpgCeidZh6XBAVllRXYTlmsBibMOHo8KVBnzerWbYn4A8mLiIq DQqE1Uer98nHCjDKnB+SSlcbAfQvRsb5PO4km/o8ipKpievjy7gqdsdTzCpRi2WJbGXYijIlsDzj lLVzzz5TPnT6y0dVfw0rY+zB8aRxz4e/MhccntjbkPYG9Zi6GA41j/9HkLGJwDubZOPSiMUur1Sa VRayAZDyIngbCrxBPS6ABZHq8mYFL36PN2pfaVAgbDz/Ih6eMRwkcd0XdPKdlPjRpx7zytfkBZou 7od8BtXoO4slipiivAixTRXU8aTSrLKQDe0b4IlovUE9Loh+YjJ2fg4l40iVPsVtfih7uW/j873k iRR4Kt2qVn8KOajpm9/eD47e5aZ8Z2bqJbFjcRowaXzwPJ1PJOocHjz5n5d7rOoKdWC9jpjQFS/1 8ghd8tZVvcN1ij+KosiRO7OsqDx4HXkvB8475G08n8N7GW0pz/N52uuJ83LS3s5jYAiez+Ep04Q0 9TPJFCKoLa7zVgbtMHnsQJQpXWSLRFkGdZ82BtgVHsq9Oxke726OpzKxaZfD53ioiZ+64AbKgoNX 8HihAxE7P4mCgZR4SnxKAWqhER4qYrlhdJBKJrXWw5tqh0+lWdYbZyDg6VLGEUN5NaJZY2ooS5Hj ycjEynqB44m18VrKJnZXMBUZA5VoFc1yPMAD4ng8VlkFT50XRxbLDzmPK7qQHI/SRTYmjFMvI+Oy AbDydjBIZ0IxeRpmeLzfOR7HnbWsJh1PXuoyUZ21J1YC0CJUMiolDzABeKISj9dU8RiQtahevFzt y6TSem36B0byvxHbORA5pYtsTBinXkbmU5GxUYnsdLpSBwN5KGXjsqrKJof1dI5HaetTiaegUBkr 77jj8NjLqzKusPmPNo8Tj3TXxyr11bnvHOey8dpSNi6rfxky9rEt5RAnSyxHUkX4ZyhjngNYFEbn wEVPyg9jmwpZLyvzuIRvlMpada6uPI87V+cljfGk0gqexpA5rvLB67Ae51CNymI98sLJN07zPcRn KfPh8IN/5ZQtMpqVPpUQjVJZq87VvzKehL2C55AUEw8OU49zFr0uL4vpUjYO43Fn2EOVlHgcKsNT 6ZPXN46zVp0BusDDnODgCpyzH3p+JOwVPIekmHhwmHqcs+h1eVlMl7JxGI87wx6qpMTjUBmeSp+8 vnGcteoM8CvjSdgreA5JMfHgMPU4Z9Hr8rKYLmXjMB53hj1UieNhHuFIH0fRZUjb5sqCLlOHpF6R TZcorKIxnlRawdMYsordYepxDuV1eVlMu2w6P9c7w5YwnetKPF4XaTZSEDnErz8WT5oD1bVMYy7k y80/XPIXk6e9ji/CvKwRMgTBn8MdTho8Dk+akLcj7/VenuepJ+Rlno41h7i6UucQIEUVxD04I+RJ 539OnDhPA+v5HN5xERMcJubKq9eXJWXK64j5cxxeTt7r8voSA9WCsoYOmTL+OR9ReBOAslBki0RJ 0akX4BmM6OY5Z11u+QroIpHjqTYSSL3AmLem9ZpKoSrL+jJV0CxEmeBqIEVWiSKtVJ52XF6axBob pMynK+OcN7hx2ZRcOo9W5cUeF5X1AscjgHoVbbxMcZG0h77nHHGJx2pq1UVWiSKtVJ52TA6RxBqz KVPI2CwuvEWJxUqgwV+G3ZKAgacCXsnUnrXepyqM0cjxdKquFzieOm3DVPKjZvWWCSJFJR6DqwEX WSVIW15myUV5lnJKJicUQgAZ+kxqHyLjyJQaOlvgcDzERahkKlxUGxcNYgK83tRiz1Cdp8k7Ew2q qHZwxZ6kuJ7L8RhcFbhsW8GTyayEKHAXeEj8U5Kx82MMOrueUb7SF/JNGSOFGPIxp8Rlk8tPxf/M ZcwHcf4X+152t+ht5VlRQP2LSrBNN5cVC7hmaEqgLgHmBfOkOT/qkmnmP64EfE6Vz5/ms+fjyvKf ZTt7ERdvY3UhT39ojwDOGzTKOxKfWB5TDnyeJ+34SOd1Xq5iC17nsdfneS8jzss9nVAdOmqgjeiy QY64Tpx8zkhXSLyd4yLO097O4Tz28q5ix+H1zouX53nK5KC+Qddzaqkln7RY5MTg6JyM4gZFFBbF RSJrU9ZaoYEkOPiyUygSSYqdeo7hw9OxVd7W0x47joLFeoUBRPVCXuVp4qJtl2lJTytqPwrSaVqc GucythOu6mOTEykQfHwZ5xIFC+i9TwX6QyUKfmIru6YP2y7xuAzQLlSkBqFfXcZdspvJmJNaGIvO 9GNRMfcSP4czj31saWsiqMkGvj6WjGmYAqd3xZNZupSuQTYg7SgUH56MEQ/HxvNHhwqcWQou4Keb 5GkfrJmMG8EXTJSVRRH76oviIlFW18fKQAq4KA+uFJWWg3l7TxeNvCCLHY/iD5nHh8JyuDKGcAVP JF8vzfgrq+KzwqsqWGJhg6JPQsYg93lshBrRqfYq8lNc/3FlXLJbpgrWPJGqmjI+vGcFYsulyak3 nGpTTGeXa4MYmLJtmWoA2ixqSqApgaYEmhJoSqApgU9NAh/+Dk4+igDk9e2vefJe5tzlea/3OmJv m5cB58HTOZ16neeJ6/jqeefByx1/juOQ6Y+y9SxH5ITqsTMCbJ7O2zaqq8OClzKPaZOn8zzlrvUh 7XA5Ti+jneFFe1wGVdsCWiVAphCTWYFjLHxgqA7KxS+CyhseAWbNSHpTQ+2ZAkZLPOtBa9i6dVtY Jy/8W7duDaedenLch522YnmzxF7qSZFTQnjES2QnIi9YtdoKW2VDEAOYFol1PF7tfQJzwXqJJfFj 0EUpi459e/eFtW+/EzZseDcMHXZUOHb6tHQ6kOOJ2FA67Nz5nn1s2xG5BAAAQABJREFU95WJcfzV SHWfoIyja6rEvVg1eaX+UAr3lVDtjqricjxiSFfBgNdB63iYEnvkJG/dunfCps2b5aRzjJwwjgsd OgnDx8raOgKj4rKpcNNYxiLoeA41j3ds3xmOkB+dXr16qRfeKPZBB/WE7dt3hLfXrw+b5Fh05szj w1FDBhfjBBed+6Wx3b/f+rVh44Yw+MhB4fhjj0ltIl6E8rFkLKExHZkTGzdvCe+IL/g78/RT1Ycj CqfeFem4ED/mPIYWe9TfWb8ubHh3Y+gtOZ2kY5rZTlbcVyh2JGzktP6dDWF/24Fw2sknhe7a397p V07nxyQnTlvVoThQUZpMDASUREVfSFJaBM8UMPFZ4fOYhanJyZ5nAhJOFGudfnUFT4ED7MIj2Ciq WMExs4eax8aT4cmRVZ859WowV8gaEl0SIDuAOQxMLEvGgqWcFiabmKSEEPHUsNUJfoIyjvJBJiIu Oj6PjaRxVLt0qvinIWOXHNz+U5Oxz2OT5CcsY4z9/DXP/CoeCyYIXWyy+Xz6Vecxz8/teh4eCMO0 hYojjO20ti7nsfW4vHSaO2VVM9WUQFMCTQk0JdCUQFMCn5IEeP8S/HNAifL7OFYp77XE/NGq/ub2 coelMTA1hQPFncqtMLs4HS9qhJs6L3e43CECZZ1654CHG38URRHM2JK9AfI6o4B8GDww3gHSjYLj 9TiHoa3/eX0dXz2ft8/SWuQLA0jy0KlxAZAS+aIvseJ4SrVBg06m5uCPybhg69atJSxctCg88OBj 4a0VK8L/+5d/EQZq/6wde1gCG4uWbYSnznSC8X7Zd2tWVuLRjZHz8yvggVar/rVLGK3SgG3fsT08 8PCj4dnnXpCDz4syZUIpGyxSdu/eE352+52hp/w7fPNrX5FzOR0lXNxeMA1T5Vh9HBlX7imh5GEQ ZcCDQegbyiZSjlWuiBOsB/BYOiKo42mV5cn69e+GXzzwUHjp5Xnh61/9Upg0cWI44KuYDI8niet4 Ip/UJCaJVFhMw0w2QHnAiSqKlht/dns4Zsa08IXPfdaOgI/PPfVHx4a2SlO0dPny8OBDj4XXXl8Q /suf/69huJR6ftoUuGIfHavyWom999574eFHnwhPP/e8nEyeEWaecHxFuVS/H7ruU8RfyNj6xpxs DfMXLAgPPfJEeFvKxmPFvykROXI0icF5c6VHHIVUKh6j3BJw1sYgSmCDe//9PeHJp58Ls59+RmM0 wRRFcFbKuFWyawsvvvhyeGz2UzZ/jjtmRhjYs4cdRVtKRymjldN1YsQfcx6LkYhRY6Z5tXnL1rBk 6VsWc2wqJ0kcLUUk/lGwekJ5FfsfOXMOrE8Ff5QqKB9TEao+VoDwAmhBGVOE2IKTZ4uFeF4NfERX aQFsq/Cs29wRnl/cHmaMbQ0zJzAXAStlUzSy0jyX0sLDPHalQKl4gGiJJ80CaxQ5znAlfp1NYNs0 vXbr4MW+veJBVcgGMOpMyZo19yTtsYhMA684UsLjWuQrVsXSCNeVbMBRYsrnn3AQEs8xgwyqZZY1 mAQYmc/mcSkbx0FMu06hjqfgDOgSD7JxxjrhSWzAp42VDhCJRYkxMCkZc41lbNhjI8MBufZ2wVpZ bGm8K6lXadizL4QnFx7UkfQhXHx8NzmTFn7VlXg+ORlzL67RKWfPv/BiGDliRLjwgnPDkMFStKMF rQXodwrWh06lzYKmBJoSaEqgKYGmBJoS+JQkUH4PpG8Do9Pgu6Kkb02U5a2dv7k9nZc7LK3zNHmH J90oAE8ALk97GTGhXlenE6FK+o6vKziHL2K++w8nOOK8Y84c7T2d11NO3sschnLSns9jTwND8LzH sTRec9xe7rTI52mv97hFC6gKzipwpcrbVJi2Qn31GqR9pUcww2OFpA6Np6SZPrG12ho+dFjori/a xUuX2a+TtjADdQlshPJsmU6pgmxZQ6OCLcMQLzlEmS5TnaFSn2sgeRbly979+wIL13at/I7o08eO MV2+clXYuGlzol4wWXCzT0dUvjR3Xpj78qvx11hqPmEZxxUViLVIEO42HTm/X1YkpLuSMZyW/Uup gv08HxceGTCE1Jf2MKB/vzBq5IiwdNmysGPHDiuvXkoKlBv6alEdrcmmiiPns8BifdupI2WfkaLu zUVLLM8o4hdi3z6tpui65t5Rg4fYaSJvLl4a9nzwfuICJorOVsmpDVY3nFizYtVqHSu6KdYX4GlJ nTqTogoO7yJ1niYVUcQF48jhI6wN9wRjZaEE7pQtqoSkTXNwv6yeIsKixtrU+aG2e/ceYfLE8VJK rTdLKQAjL9ZErAlKK92xY8eEPXveDytWrLZ5XoOyNpV2n9Q8Zp4qoAR6W5aH3//hjeHn9/wirNC9 tWrN2nDPL34ZbvjxTWEv45oC/aIVf6UEkowTvqLG0Deex1hlrN7UEZ5+sz08/Ub8m7O0PaxSmYzj NK8gWFIg16CogOimBkvf7gg3zj4QXlp6MLa3Bg2xgK4SAOXvgNbiW98LYb9ia170KeGxQpdCBYVl HI9zjgJ0264Qbn22LazZ0m7KH6tLeCwqehHxIZt3tyGbg4V8nl/SHpaof/sOSN1Z8CD4HI8TTWzl 2TJdpiJYNZ+jTmhq3EEzcu31xA2w5NWWplWlpfBYPsNneKyQVAW6wEcpTbgVGSvUJwaZ8JDO8Vhd jUPHThOUQDt2U9J4HmOhu131dz3XFn4596Ap/hyd0VFLQpkuU/Ua8sZPDSTPopBFMTRYfyiQb7n1 TinRdyXFYcR4SNk4SDNuSqApgaYEmhJoSqApgV+LBHiP837nr3yn178r+BGQ1XgFzJtR7mgchphA uaP12Cp0sc8KzzSIc/gcD6CN2jYqq6Ot81yvb5i3njesqRaCPGea2jrj1RZlztvW2zuElzfCl3c8 T9OWvON2XF7m9Y3KKeuQYsDpOozFkUjnKqYNy95qDXm1qBZm+KiIGB2mEx6rjnhYuB937AxZfUy3 SWnb0fRVjL8UFoZY5zgeiOAjxXylpHryFowfURJ8Xg8eU4gAlHi2SDzwS3iElS1QBS9TJPYhXoVX N0wFr/IJnfHNwvyBhx8J27Zttzwf0Oedc5aOD+8ji4SIhS0zjsPYUd8H9O0XvvG1L4WvXv9FO6oS qcCX9V88uQ8da+d9NcoRJ/JxnJj+wydtWPjR4XKsWOzEumefmyOLjGUGRxvrqzoDnkLuhdzoZaRl ZDPakUISa1r8UG0+K8TD6NGjTAY9tUWpGAOwqWGURffEu/hVocnT8QjOgvLevxiXt2/EEfO09zxw KKpGjxwZfu/bvxUuv3SW5enrhg0bw8OPPaE8Y9oSpk2dHE4+aaYd4xwtI6IcwJUektm8QdHUbhZv 5597dujft0+Ss9oU8ycZLKozJrlO/DNfozytv8q1yhSgW7fuxZhTfaK2wU2dPMnwMqdbMzxp2Zrk FcUUrx0GP3/+gvDyq/MKnpANFPPxtTRzWHOwn461Plf9GTToSPVZs4R5Jxnm8u4mHs48/RRZ7oy1 8bM+CC8B/MAXf8Ibg3oI34VsIk7nP0moACXBfGXWumyiqFQqPIzZPb94INz/4MPhJI3ZtV/4XPjS tV8IM7Stc+4rr4b9+/YbHHjsPmAMUz8iq2mOqb4y/7ivBGA0Y5eKMe8mebz81sHwo8cOhEdfO6i/ tnD3CwfDDx9tCy9JKYISzfqvdtxy/MEzZbTl9iINbnigZyMHh3DRCd3CtDFWYDhUbYH2wJnFkNoi SvIEkw2WRGJ32y4pm548YIoarDKRuMMZcMpjwQQfVpeEmsuYcnjsJrid73eEB14+GDZs5xlUjIDx HnFCRSFVgXfxOx3hh4+0hYdeaQuPv94W7n9Jsnr8QHjo1YNhn/Sb9L0IStKfok8FP5F3QPlrpY/O sxEDMPYB+fDXlYytXNUGpz4QA14wbelYFmWT8KXyimxUFvmNYxz7XcrFcIM/8VvSimOFuRCyXbGx I9z81IHwgRQ9dn9BSx0tMZHXf5MNz0LlM9mABz5eWX4w3P08ykVk4XdRKRua9esdwpnTu9mfpn4R DB0ACuCn74eSMTDwU8yd2DKylfDwjB07ZnT44jVfCJ+57JLwiwcfkWL+eclcDaFj10ovUwl9z+5x K21emhJoSqApgaYEmhJoSuDTlUB891bfwfE7gu8f//bIeIiVsYB0/lLP0+nLIL364yeAl2Xoivq8 LE/Txmk2ap/DeroRnJfVefY2h4w/ytYzJwRCTxPnwumKWA7P5gJv5+X1di4Yj73eafH1RZq/+CXm ECU/Xu+0yBf0ioVvaudAJZpqKi1vikLgY0dA64GpJUgVlfhiPR+bkYF49RZxLwBlEY5yzNX1iRwO 7G8LS5a9pW1LG6RkOSJMnz7VtpZ06KOUj+MNGzeGNbIi+GDvXlOsTJk8MQwbOtQUAXxN7993ICxf sTJskb8jFsEjhg+37TRYLLEdAh5NkCK9LfmnYdvXsKFHmYXCnj0fhNGjRlgb419wLJi3yyJm+YpV sqjYY9uAJk2YoF9SjzS6+2VJNGfuy+HHN95ii+29Uhr1k0UR1kV85GPHhZ+eZW+tkD+YA2HC+HH6 wB6lPreH93btCkPkF4ftdowPH98bt202646jdHwu/nVWiO4B+YWZOGF8GDN6ZNzuo74BD96VsmzZ u3d/GDCgn3gfZQuAHlLODOjfX71NMhYf0FuxalX40Y0/C+doy9QQ8c9H/bDhsuhSH7HWWKutBPDI 0ZnItnfv3lG2wkSIo60EYyvULI6IudjiRQXrpYxZs3adeNqr8dqk9okHgaHwOCC5rFaf3pVfIGSM 1dH4cUdbe8bMA/j2y//FG5oPzA/qBgzoLzmME3ktUpcssz6OGjUy7P3gg7Bs+UqzpqEvbKHCR9Io jeVo4YdzxvuXDz0cnnt+rrZzTTe/RcOGDY3bHAVxUHtvsFJBBsiPuTdI48KYEPx+gI+DssqKsylo C9QWG1sslfDDdPTY0arTIlH8f6DV4fKVK+XLY6fwHLS5ily7d9cWQ+FhDLFKWqlx2ae5y3ijvGLs nS54sXjaKFmi1IGvvja/Il+RN3ooP0LaqnbTbXeGwVL6jDv6aOObPqKse2fDhrB27dt27/TmKOsp k4yO9SdZLUFrwRtv6P7ZZm0mjD/axoftUWJXVlhuwgJqFsLaPql74i3dc/jawpcSCq4jj5Tc1Ajr puUav02btqh9ezjqqCFWj3yhCw4C84CUy9gKuZgRJHMr+rx6fs5LNlevuGyW3dvI6IrLLpYMN8Zt m2rC/bpJVnyr1qwJ77//gd1fU9VX7nOIMK/WSA7Md+Y68497i7GIPEWyIingjrBVljbrt7WH68/r HnpIKYPVBkqjm59uC5NG9QwjBsUtW20HGfUW27rFs2bre9HqaOiAEHqL9AeyLNl/QM+kQa3hurNb wtCBep5a96EUe/+etn710htKrIQde4RP/T+yn7aCseiXvNh2hMLhnS0d4cFX2sNJk9rDkIEtuj8i jZ7dYxvuS03RsFP49h2QcvMI8SUlAvRMxpIBz0GsVN77QMrC3pR26Dmj+0A0gDKeBG/PS+Uij7qq ilpks1M8vi2roqvO6B6G9G8J7+/rCM8tag+3PNMWpo5qCceP6xa4U+AHvlFG0bdBfVuKbVHgRzZM rSO07W3XB/IDJjkN7NMi673YN9rs2Yu13KFlDFvw9Z5w7N7bEY6Q3MHDmNvYinn0GFiDaboanX6S TX/JJnY5jgP8ipSezyG8L14GHBGVMAakcTgoPLv2hNBH/CLTHbvb1R+NVd84dkjzQFtL2KM+LXun 3cbqytNEVMSZ9n16cu/EvkBLrwzxrOqW9tBf/Oj2sC2JyGavrLMY39dWdJgV2rXnSKmclGB9eqLY VXuN2/uSL8/Fz5zSzfrdU3Mmzi+Viyb3EH1EjrtEi7mCbOCbvsLH+6ojMF+ZO/s1d45kHJTnRx1Q qGt2gRZbxNkuzf147/0Phrvv+2W4+KILzOrSOgpoLdj8i5hqNc1sUwJNCTQl0JRAUwJNCXx6EtCb m3e4fRA4FX1EUMjHSRbSGsRe+yr2SvJ52ltQ5n/A6IOnU/D6ekWOExjPk+4qOBz10PI2OXwO4+WN 4LyuiA9XUVRH5gxTngfP1+EdphGjXpfHOZ56uePmu5EAzkZp6nI8zjPlxcLTMroUjBUJJ5NXOrTg Bedzq2gicqQJHvt4xc/KsjRCVSGLWvuSDeGJJ5+2xduKVWvCLilRrvzMZeHL111tC+s331wc7rjn Plvg99LH6fIVq8MEKRi++7u/HfppmxOT+vHZT5nvmGHazrZt+zYr+3f/8x9LgTMo3hxwqU6gaHrk idnhuedeFL6e4Zjp08PqtWvlc2GdOSj+w+9+WwvaydYVlB4/v+9+c7o9UAqUnTt3miLlui9cFcZr Ib185epw5133hXVapD/z7Ath8eJltgg/WU6Bu8tSZNWqtdb+LSkyWJyiZPrD737HFGFYIT359Avh nLNOC9/57W+Grdt2hl/88qHwwpy55gB6xIhh1p5tQZOlYPjD7/5OGCrHoVhMsPXp1tvvUndapbzq E1avXmOKqsHq6+RJE8Ilsy7UYkQKMg0cFiHbdmwTHw+ENxYtDv3kOJvQVxZP13/p2vDGm4vCvb94 0LYA9u59hPjYGqZPnRKukdUGW8hQ9jBWxeRShnzxXGFi6P+8114PDzzyqCmE8B2zfv1G0WeBFFuy jeoRWfS88OJc4xUFIFvEZl10frjgvHNskR8XdJFYmxRkL897Lbz8yjyzDrnqs5dJCTQ+7NAq7/s/ +qnSksnvf1sLmgPh2RfmhNcXvhlOlaPlbpofTz71THjxpVfDN3/j+nD5iIvDHPnYeUD+iHa9t1v+ fx4XvtZw5eWXaoyiNcyz8rVB31euXBm2yknrxRecH77x9eu1oHKlhnhKgb7Tbu3ad8I9WhzFsX0n jBkzRvz8Thgra6o9UlLcfvc9pnwaKgXJpk1bbU5++1tfD6eecpJk1Grz7caf3WbbAftKXm9JqfKl 666xhRcCRXbIi3uBbVYov6656nMalys1B9LiF56U3it6D8l30ty5rwSUkSjFsA66XvfPMjkVv/Pe X5iCCb5R7DC+v/vtb4U+UjrZ2GpOoSB6+pnntV1yk22ZHD5sWPj6V74Upk+bWg42wAosFLdJTnfr 3sAfFUouHGKjXPqW/G31H9jftv498uhsKYgGyx/XbvPJ9Wf/+l+F0VJOttnkYV7EBXOcUYY6uyRi TC79ofAFzwtzXpZPlHNMkTf+6HHh27/59dBbSiqUcyia773/AVOMgghl6gXnnRuu+uzlNr9eknwe feJJU4K+r+fALs2/666+UhZTpxd06ZvzQ6p3j9Zw4XHdCsVArx4d4a/uawsrNshybUhreOqNg2HV u3HL1imTpSzdGsLide22RezL53YLx41rDS8taw8LVx3UvImYzz+mWzhhYlQCQI/tZPfPbQtDB2gs D4Tw1nodNa7uTx/dLVxyYqvR3rQthF8IZvNOKY1U9+TrB7XVC4VcCBcd3z0ce3R8Hu/SLsqn32gL yzdEZchgKXHOFb0ZsmLijcrLY4msgZ7VdrptUnIM6tdiyht8MUUMLneXghokmdRl00dKhLNntIYx Q5iPUvwObgl/9uP2sFT4T5ggxZB4W/VuR3hGW9Q27wRNR5g0IspzkHTZyHeuZLNOW95GSYm26O2D prAYe1RruHhmtzDiSMEI6GnJeGWS8cmS8YZMxl+SjI+XjPdLqTJvRXt4dXmbKV5QcJw4sVs4e3qr 5C4k+i99rPX7TY0PCpZ+vTvCqVO6hZMnyTozvVXfl+JmzuKD4c217YE0ChX6CA2U3SiJ7p7TFqaP aQ1vS2kH76A/TXjOEhyKvZWyJJotK6s1aZvivS8eDEf01vjrXr3qtO6yLIuSfFs+q55ZdDBslCUX Ukc25x3bLQyWghB+50tBNG+FfkARv3ukiLv16QMGB09Xn9k99O8TjMZj89UZBcZg0sjWcMXJYsLH THj0qA2vr24Pr7zVISWkFDyqnqK5dcFxrWaJJLZsG+He/VKM9dE4rNM4SPk0dmhLuOJEKQJRbDJ5 LMSxZlxQgKMgPvvM08IPfnSjKaun6dnSpme9kU88WDM6qDYxkKCgGZoSaEqgKYGmBJoSaErg1yKB 4h3s1PQeTq/i/BXNj6cKh/uSBuvhvNRzmA/DncM6s85TXpenHc5xe1wv93zD2BUsDSuzQkcOA3mg 3Oso97THDuv5enuv9/hw4RwPMX95O0+DM097G8qlW6h1XbUAF78Q503zlrQm8FWYvvIq1ZYRJv2P 5c6Cx9baLmVJhEQ/FIM+PLXywaJh0qSJ4bxzz7LF+i233SXFDH4PWsOTzz4XHn/iqXDCsceEWRdf GIaPGBrulK8SFtDUc0LUT2++xSwbZl14Xjjj1FPs1LG9OoEs9rwgZvm+R/QNS956KyxasjT00k/Z p592cjhOliazn3k2PCHnvmxbYSF54823aWH5lDktBu9JM0+QQuuZ8OObbjGfLUfI6qZX7162cB+m hfVYWZQMkbImalH067j6dOSAgeGcM88IR0uRcN8vH7StMt26t4ae8nfzppQ0a7WQR3oodnrKSfDC N96UgmFNOHLgIH2Any4FxGhTSCx8Y5HxhTLlrrvvDY8+/qT6eZIpWvrK2uT2u+41Z8v9sSZSd4FD xsRsb0Lpw0Ji0KCBxstoWeNsklLgb793g1m1nHP2mVKQnCvLpdHh5lvvCA8+/FjshnizsUoitAhE KaCIwvLp7/7+hrB581bxfGaYdeEFtl2JhVVCEua++mr43g0/MkXXheefG84/7xwt7vaHvxP9BQvV N1YrBGvSoV+re4aTT5xpCojFsqoZLysZ+oHfodkag8cen21KoyOk8GKxsmbNunDSCceZRRfzad78 +WGLLH6wKBg4cIDJt5dWj6NGj7BtE7QxGYkkFlDjjx5jc69dJgc3yzJnk6x4sFBpFOjWPlmT9evX P5ylRdKE8ePlGPvRMOeluTZGGzdtNEUe+C88/zxTbCzQ+D3wyGM2NiiqnpQD6QcffjycctKJ4dKL L9A86i1Lq+j3iAU7IsaqapoUNeecdYZtnbvtzrtkKSNNADJyxsxSolX+ljS++oc12djRY8IYWZgh w8eflAL16edNlrMuvtAsju78uZSbUlxy7xgtrQJ79ept8/wSweCweraUbT/92a3hffw3qcMFPdFF MXuPrAgeeWx2OFEyn3Xh+doGNjXcdsfPw3MvvmTWfcyhd2UFeLHum3PPPsuUNh/Iz5GIwr6CY/TY Cis1dBRaWBheetGFoY+Uojf8+EZblM7WfYriduqUyXLg212WfzvNX9HqNW9rTE4Plwi+p/r//Rt+ IiXtBjk43xC+94Mfm4UaW0NnXXCe5usW4brZlHHIIoYqP/BqU1OJ7t1bzCoIuA+0cIc/3cpS9rWE R2RpdMdzB8NTC9tNIYHlCsoInrEElBVYiLDFC0VQPt+Bnb2gXe3bwhtrO0IvWYtslGsvti2hsNCj wcYWhRIWIGx5apOD5IOiixXQQTRHogNHTyw4GH4+R4oQKUUGynpnwar2cJO2qmEdhUJj2+4QbpKf pGcXt0lusr6RVdGzUoxIL5vGRUDwnN3jETO9gEI1gJP5oceALKJk5eIPdpVtl1LlZ7K+elHKIKya qEJp8tC8NlM80K+F4u/OZw+aI+aD6hPKnHtfahNcmynBoIaCDRljzXWnZPwkMpZskRs6CfhdKpn+ ZHZbWCslEsovfAPhD2rBGpTl6rv4w0fUTVK2YHE0RNZeK6RMu/2Zg2GbYLmn6coLcjaOVRSWN4OF 5y1ZBf30ibbw9laeo7IU0rg/qDG8+3nR2iSfdBqrZes7wk8l4w2ysKJPmrLGu4+VjRtjpfFDrtDB 6usX8if0xHxZTIq4dk+Gu7S97JFXVZF4OShYFIGyqZVyEB9z+tN4W5mNT1Q4oSTtoUkK789L8QR+ Hyum9Qop6378WJvmkhzAy4Jsl6yH7nj2QHgc2oIE5uW34jjMWUL7OA53S9bPCp+HYvSNAJdIafLE CWZduEEnffK8pTjWFC28IKHKyh15M25KoCmBpgSaEmhKoCmBX4sE4pdISco/3ShJFkVeGV/nnovx oV7ijerA4eXEjtPLqtg703A4b+fw9Xyj8q5gHLYSH65FUd4IAs4g5Z4n7oq4l9OOv0awDqPq4ode h6WsnqasUXDcjo/Y2xITPI65WolNFj467QNPsUFzcZRlg3opsLSnaQVPRKKGZYsSW/z1lDYWwKEZ Oktm66ecfKJN0LeWLQ93yQpi1+73zCKBU42+9RtfCWedcaqZvI8bO1a/7O7RUeJsYcJK6APb6sTC nVOiLjz/HIuxNoqfwomU+smWqosuPDfcdOvtZl3zxauvkmXFEVqwz5SvhYel9FhpwKtktXOfLHw4 0eXqqz6rI8G7hxOOO1aWM/NlnfJIuObzn9UpUTNVdowsMZ4L52lL1/HHHae2HbZViNOicHx8jayP 2P6DtQUWQ2xju/qqK8OF8g3zgx/+1PhHoTB4yKBw0XnnyWHvT7XoniL/D2qnLTNjtFWNE8SwWkJk KJ/myDJi8OBB4u08g8Gq42Y5FD1R/KBUKG5yGgg3235QaGCJc8yMGeFzsrAg3C0ZPz/nxfAf/8O/ 08L6AltET5w4zhQxd0oZddmlF8vKim12jGMZWNiA2q5KoPB4Y/Hi8Df/7S/DmWecZoBRgaYViGDZ PnafFAvbtm4P39ApaPilYtx6yGLnO3/wr8wC5qQTjy9kgQyxIDlV84H+3C2lIIo12uCkGiuX1VIS LtUJWCgFsAw5WUo8p33O2aeHH/30Z0abNqefenIYMWK4LMO2hs9ceokpltgChYVVm34VN8XBRRfC atgtk4H/+t/+WpZVO2w7Wex1OY/pdZtWauPGjpE1yuekjNFWtalTw71SAjK2hF7i9fNXfiaccdop YaIsfPpozvXXvGTrZFt7W5DHnrBe28727NltfWL73W9942tm4UZ7rTNNOcHWKn6hZ+sgiqYnn3rW FEVYbGkTDKAa3qhIOfusM0Pvv/9RGDdurI0vMscfz5TJU8I3vz4wnCalIv60sHzaIQXLFilJWuTj h/uW23+I5t/5UtKSPkkWcYsl2yeefDb8pvjCFxDjTUDJtVX+uO76+b1SZg7UaXFDzaqLbX473ntP p/3NMXniE+rIIweYLLA46C6NCr6QbCsh2CCEwMVBDMSRitPyOsaQOYs13TPPPRcefuRxbSN80XxM YWl2iizJ3tAJio8+PltWWVebvLHIGq3tmrfd+XP55VqqZ8me8KruXZ4NkLVtpzrp7v4HHpYS6V1Z Cg4yK66CncQVU3+TtpL10pYgtp6h0BmgLUJjh2q7qPpwsXwOTR/TYZZF66VM+I0LZeEyXjLVgn6w dLZsqzpzaks4bXK3sEVWNbOlyEGB4H0jBT8oE3hRf+7UbmHC8CCLoI7w5zdjIdMezpBVzBBZG339 Ip3WJ2XHs7LQueiE1nDqVE6lYxuUEGjSoABAiTFcljhfFR9sm3puUUv4m/sPyEqkPVyoNiipsHD6 1qwe4bOntprSAeUL1jhR/GKC/2KqGAf4hclMOOQOqCOvrewIazYftC1kz2vr2aB+rXaqG7BY7jwn RcN3Lu8RZon2B1ICbRMvD75yMHxOljWDJFPm+m5Zspw2pVWWT61mxfODR+T3SEohrGZGSu9+oU7x mj5aMla/2XpnMp5An6OMmUpPS3mEZc7vXtY9TJRlztvaMvifb20PT8i31GlT8JWGpY+sl2TF803J 8fQpLWHlRPn/WcF4sEVOijzpaB6UjyX883zl/O7hKMl8vhRZ//UuHJC3hwkjuFc61A/mQ0u49pwe YdiRHeGFRa3h//75fimeOsJ4wUzS3+hZ3eW7CUuy9nC1tuexTRExoqgxRZI6jiKPrXtnaBzZgvf/ 3HPAnINfew5Kt45w8sRWWaS1mJKHrX5fuaCbWQPRl77Cc1DyHze8JXxN5d2kpFsspdYBFGcpMEYo gXDGvlZy+/df7CHLKFkDSln4N/fLr5Qs1C49sVsYKAsm5vlOzR8smk6UbNl+9p9uOWCKpy+cKe2X AvjKQG9iGKjtplgRbdM2Ww+V7wEmtoFzqWJx+GbclEBTAk0JNCXQlEBTAr8eCeQ//9qbufGr2d7c iaM8DTR/cSESAcjzSUecw1JrJGox5YcKOR7SjcKh6Dl8nRcvbxh/FEWRM+UEPA/iPO2EvKwOT3le lsN52mPHBXy9jHyOB1jPe9phvG0Ra3Hm6TSCCdQo6eK1BcaygOWCF3spBCOGvNbxODRxbBExNMYD Ln3Ohv5S6rAIxYpjsHz3sBjnl3IWiSgA2F7yyBNPySfNXi2419hWE3zLENhedtmsi2Wl8Wz46//+ 97JqOUOKmzNNEcSHfTlHI0dYplDWS4oYrBVYReAriAX4gfSlzaKf49BPOP4YW+ziK4jF5Yk6Ev3u e39pC+mTZQ1SOPDUT8nRSiD2GboopdjeRhrfM/inwTcKoVVpto7BBy34a8U8Qexi7YKygcU028nA 4Xxh+UAZR8DjjwWFET5Z+vfrI99Dg8RD9HckdBbiaMQtaIwAPDoM1jlYnRwvBRg8omDCGfeMGVPD Q7IoeleL/aEai6h4ysczIRfTH+zbaw6UR0oRg3NyYKFhY6MmyOcDjRlOtEfLWmnihPGihd+hVm2T Gy9/M8NkRbVIMB+EI/pqLGxIowzpP8rBm265IyzU1jL6jX+i3/jql8Nf/e33wosvvxqOP/7Y8Mq8 18JXv/xFkxdj2drqt3rsPTyo2II5bGb1lALFKBdRTBGOks8q/G+g0Igh77fmu3iihPHhD2UBSha2 qWEBRKBPl866yPr85pIlJos2KQ7BS2Msns4+43Q7dv5HP73ZLNtQVh17zHRrb6yK5/5SfHI/MG/w PXRAOKBnDAgSOONOCWROHxlbH18gzpUCc/7CN2w898psAV9GyAMfQjGAQcH4YstTh22vPEXKIhSg +ABCUWRQwo9vouVr18kf1bvmC4nxoG+MO46+cWSOYuyySy6SQvXR8P/97T+Ec9U3+GBBGe9H0YN5 70jsBQUqth4VNZTBE8rO6794tSyjTjCFz5OyKMJC7+133gl/8R9HS9bLtUiO1hBvLF4iGasvUrDN wlpL9w+KJe71Xdq+9oa2skJpsJRD551ztixW2KbJ+4YQ6ZOCxb1SCtwmCxOsNnbIIGr1xoPhytO7 h/HDtOCXCNnixLHyPKumj+kWrjgFf0YmLaav/fWWUgFLkw+kENEwCa91HhJR7gJkTkwd3RpOmhwV CWwlGyqFz1Y77UpWNZqyg6WEGdhHfKp5P20/wuKFYVRTDbwURVImrJdVy7AjW6XAkbckge6QVQ+W N29rixRA72yV9ZiUChcc22qKEPg5X1vr7pkjRJFtY6rCo7FLpQOoQPSY7mwrk1FmWKPtVijSvnZB 9zBJii6YXKPtYljO7JJ/IpQV3HYoYbbslI82WTIN0rY4+j1E/cDJ90BtpQLmfPE2Z0m7rKC0JW0w fnc6tFVW/Uwy/sypVRkzDss36Gh4yX2NFEGrNkWrmp6yAOLkOuq5P8Ye1SIlWqttzdu4o5ttlWP7 FdZFyJDtVu9sbpfcW0yxRjvGrJsUHavUvxjEs6x7TpuKU3JJRMqqmRNaJIOW8J76SdBvCroH2Nal vESFIib2NY2VYHqK11MmtZi1zwvqK3MF+WJZdCApopBrf70Te/fkmabxl7zSK0LwNIj5/poLPL7w o2XBx0t80q/l6w+a8ur0yXq/ireB2n18tpRy//CQtv9qzgzUvGKODNcWs3PYPicYFJMTpYRaJeUa jy2eLQQiY9Vy8YLlHvfPvv3SNBGMNV1Sm1jINRZwj8e3XlnTTDUl0JRAUwJNCTQl0JTApyUBezEb 8vo7uP6qZg2hQHG9ytpnF+r5uMwDZfXPhHpZvf7D2nu94yH2kOPyTjocMJ722Ns1jPX585FCI+KO wOtyZqkj72XOVF7mnXA89dhhvS2jRdpDPf1h+GjXkQbdcETGE/s5Nvt4S8QKrEynFJwjZctkUetQ Fuv7NLToA9o558PaAl+bxa+LeROUFMKV6AJtf4LHB81jjz+pbWHPhSkyccfhr/loATihxcEvFkc4 o8bHz00/uz0sX74y/Mkf/r5tOzqoj1jIAk8Uv8r1Ea0ci9BW8ceHN4ujhFJ09cWuTI/uWgl6E8Uo VujGAbyQWnlUHKQvfUVghU7EmYAMf/zajhRYIMWWUcZ2WxpzhtQw0Ba+bAsXGQUWvdfJ2uhmKU9u kJJh4vjx2rr1hk6BuiZMmzLZFsfWCcdFI/pH5ONg6Q5TbKCI4A+FXAwttmUHpQbKsRJNrOfqZbQ5 oJUNTo179eylRWC32E9nQMDA48sCxV/fvjhjFYzmBgvnFtHtoe12UdEgiRmfwg4BNWRsZkybFkZJ CfXyvHmmeMOp8wXnnR2emP1UmCtF0eny+YOVFRZJNpbiKY1I7I7xm3AKaac6qkSnDLUlDDKjEwo2 YimtRqmQRZ7aiK6LkK2DbNsC9Fht4xo9bpQpoxhzQrsUZaefdlL4o//pd8NT2laJo+Z5818Pf/Td 3zVlCzBwyuKrxJ3mZsEP3ERmjBVDrTIy+kMZhAXRg48+ZvcETp2nTZmirT37TU7eDbDG/qf+QFyh e0/GSv5dNN9jAI6ULC+0VQ/F0ERZyZ0payHS4Dn/3HPM6Xa37t3DV758rZSjg8MLL70cbrn9LlPw /es/+QP52RpSzLVoXSSMRZ9gPXGGMHXT0o9du3abcggLMxS3U/QMmCmFLUph7ncsw1DAsgVtphSH kyZNSH2Uj5XLLjGa9/ziwXCEnhOna1sqjtHpM/cV4zYKR/GshkWbLtqzInZVvUJJo62hmq+jdWrZ 6VO7h7OmaeuorGGSqK0Ngz9Z/mF6S6mBvxzVRjxK2pzjeegiTgSAopu6ctFJiDGGFYqwWvE5Qz08 82dQCRdTijx/bUrT9IASHF+PHh2wi2U1crQsoMjs1/YleGfLlAGr+Ajlu8uCBdh4MQrkKsGsjNIn AX1HMXHSRCmupcDYubstbJL/pBMndJNDY5pJ6SElEf3bKWUVVjjgPkpKmUtO0jZbydOgVA/93vqj L3KVJD85ej5IRqZ3pc8CNJmol5NG1WSsOmgc0G8hvBc27oj9pmzmxBZTeKAEAcux8jP0rVndzEpr kbZhvbQkhDHyw/PNi7uHUUMEIwbaBAsttpGhhIM2VjbHjPH5j7ILJ9cioIAc+KbC7w+WSWVgrMgJ jlh/dvsr1pTWtryWcJ+22OFzCl9XbM3juZhAra2118XREls9FxvxeI1w8OfvisgbUIwx44CjbJ65 eqSoA5KxLJLAxvZIYnI492aeR3r8kELzEhdb79TbUomeqvbpecCzoo+2dFsomygb+bci+FbC7vEK TGzWvDYl0JRAUwJNCTQl0JTApyuByne2fVVU6SXjEvvcUI19cVQhijLe5PzxZZHe8EU6b+K4vIw2 jfBS77CN6vOyPJ3jdRxe5nEjeK8r4o+iKKojrH/W1PMFkSwBDsdzKHhgvD5PU3ao9tTpk9NgvL3H Ki6CjCDip5+VFFgjqTrBAqZonn2MpjI+uu3rnMawzsLH0okZ0jknRbqES6j0gRkr2SbjygoWcKDo oZ8/d8r3yA+1jQgrjWu1TQxnvc89P8c+itmKQsC3Cw6pvy5Lk9OkOOB0L47T/tJ1XzCLG1sEJh5Y 0DpNWjtNqUqsS/EiR57y88KCd43wIj6UKYQ1a9eovRZeR4+1PH2n/qC2FJmyQEPCRzM9cAUPa1+s pWDBafPLelyoUiZO1GdgEBwLHhMg7VSHLBwX25DwAYSj7PsffEi+aEbqGPhLrN+cxoZCJg+0hTAY GZ3Cokl4x6sP+KDBOumYGdOsj/ukXFgrixEsi4bKCsoXquCxYTZEIDTM2hLW07YUvfXWcvN7g0LC 5MBKTSAsLtnah8URPONonBPpgNkuB8qbN20x3ntrdRkxQghetfDSSm2IeOBI9Fdema9tYbttoc/J bGefdUb4a1mr3Ckn55MnTdIWqGG22EdeyJbQ2hLHzDIqMishETF5q9DnD8oIDz4fHMZ5oZ46xt7K Eg0yBit5eFu2QD38yBPh//zPfx4u0tZFZPT33/9RHEfGWm3mykn3TFlyYYWFb6P/9Bf/l/m/wioH dli6FTwYc6lPNkeMGyv1FLKjTZv2MBmfWtRtWr85/OgnPzMH59dd/XmdyjbGHGTb/UA/UsDnDdZt yINSlLOL5Jh9iJQ6nNJHoLsMKX8j5Wgda7nN2srH/WhWeYIBL0okHF2zLfCrUhahmLlZ2zzxaXSt HEdzH+PYHcukIbLeine6kYgX4Y+ByRPHCnxs0xwja6UBAwbIeqOXbRU97aSTzLk1cxon4viNwlm9 b20EDwpdFIjcJ89q2yLWQ/hg8gC8bmDL8lwz8okHirEGYsuPKVMkHLZ5IYti0a8048UaGssiAkNs C/KEx+5zAXBiFZTivRzzhsdaJWDjQFD6Twn3jwdLKc+txzYzBgOlBf1DydVL/KGAGSOl0OdOj87s D0hphX+do6UQASEKCSxnNu5oD8MHi1GVvSvlCpYsEX9GjXkRWTG+SUcgYDpM4cR2MZQtPfWs/j+0 RWvuW21h8mhZSwrClBMicboUayiq6P12bXt6T5ZHbMEi8DzmRLQt2t43WhY/CHed+CXEE9kEo2Km PXLtX5ex4VC5+rVHJ55dISVUqyym4I+tgMjD7ieh3Ca6U6RoOmG8tk/KL9FcbSe7/fkD5vQa2mzf QjnCKW5RfvoxQdu71mnbFgouoeS/Qm3WmvzhM/bJQASDsot3Az6RuLfEvo0Vr5JV8m/0qHwEfePC 7uECOSPv00unyInfNSqnw7EHkRZo8U/EGPWUMhFyZm0LM0KKtRsaNiPPmCkrEva1xiMQOaJA49Qz HGDT/m1ZlqHo6ydLLQKoItWU8UKAFejbRj2ref+w3dRCrDKfgvyAwvvHQ8QXc/TFQkrAX2rqNc24 KYGmBJoSaEqgKYGmBD41CRRvYl72KTR+E+t9n7/CHTiPwYByyAN52jhCp9AIxtt47LDelvK8zHE7 fB47n3nbvJ60w3i6Xl/J8512OMEJOqO0oczLHYcz36jO2wDjeLy9xzkeT3ucw+Rpryd2+o7f8zkM bSsWRWUvYjNvHBvpIzQr8GQnBgBSYSwvEpAqOpszEfE4tlSjr8U9cm7LKVZ8fG7Zsk0fw212rPXO Xbv0gX5QH6Db9PH/vikX6C7bkxbKAfRLL8+zNjvkE4GF6Ts6GYxTVzi5ie1NOGrGLxAWBoWOzDqG KX67HXmPFcr72hLF9jIWuNt27Aj79u43+juknJo6dVI487RTtBB9yawZcJg9b/6C8PSzc8w3CpYi BCyO9slp9vzX3zC/OTjOBfaA+rJbflE4qQlly1b556F/WEfgIwYaHIvOVpid4oHF7rZt29Ruv/nc oR2WNtu1SGZLzc5d7xksNFG8sCjmCHBogHfturfVfrsWU1U5kzNFl/YmoIBarC1gfhT8GWecYr52 8NOyXL6Ztor+bJ0+t2z5inCJtuz4EfLQNKzFHRTHHLn1liXRufKPs0u+fW665bbwyquv2dYeLD3o 007JlW1zHKPMopyjlDdqyxxbl+4TXXi6/JJZslzRCWPCl88/6KJAPEdWK2/LGfFb2g7IlkL6g3VJ d/2Mz5Yi/BixPYuwT6up7fIvhEyQM6eFoXDBUTinYHHKG6fZsW2PMbB5plPhUI4wl5iPViZZMEd8 8UfMdjobIykfdu9+X0doa56KZxtbKWiwrGI8t6gt1jxYUm2QL6Knn30hbNZpcvu0TY85S7jtjnvC czqtDSXLlMmTzFKMcQXHzp27RavN5jOWdntUxh9KwC1SzqDwcr5sZDQ4KDJ7aIyXr1yh07+WWx/f k+8m5g/9Rw4LtH3vlVdfN/nt2LHd+svAotTAzxcOn5kb90rJukhb5j5/5RWm2GE+4+OHrXWb5Nto +LDh4QJt2ZqjE+zuvuf+sExKQuYMCjJOL4TH79/wU43xRmuPgorxwWE2uL7/w5+En9x8a9gjWeVK OuRi8yxdyZM0xZUUT6/Mm2/zBsXw6wsWypJoiZxZTzQ/TiecgCXRRJ02d69OQHxaDtpXm+Pzu+Tf Cqf1F8iB+hGS749vujW8OPdlq3/t9QXh9jvuNofppswxgrqkSYgSByXMIC2u2TrUN1mRaMgtoIDA 6fTyd7DUkW8yLcYXrdWCX9uXvAssit+RdcqC1emUMsG9I/85C5V/S06QHRcLf1MulQ9WjTNjw1M2 SoUkC/s+Wvg/o5PAXpAT6tdX6Xm2Kyou2OLEaVyL1rTbVqndUpzgDPthOY9m+xe/Io0fzilgIdw3 t90cGOMAGafGHD/vIaZ0jf9VXNa5bMCFBY3+i0dZFmnL3HFHt5j/oQ1J0TNNVjgo1nCUzAlrKIOe XngwvPiWOha7ZBGOo++XY+f5KzvCc9rKhn8iTj4blvQOyHjZepQlspRqJGONwwnj8b3TodO9pJjR tra12oL20DxOS5O/M9XrFgivr2wPN8j/EdvI2DIo40QL+PqhP5zidtzYbubLiLHZIwXPUsX4VMK/ FOONKBirikhUjCziWMaOCaM51Wb8H3m1Xae76SQ1jcsHUtIRUJuBDmsno6OT4tZom1cmaYOD0FED 2dbWHh6Q/6R5Kw7KTxVbY4VD44i11hsa44WrOwQjJZz+oEMZiiG4YWvcBs05fBK9uUYnrcmfE1sB 2d54pKy3CDxTo8Kx7Brd5I9nDe/eH994i/nQ227vGXEfm4ZFeqccqW2lo6VU5nlISFWWJpduKct3 7mMCa0ZNCTQl0JRAUwJNCTQl8MlLIHsJx/dzektXX9ZGN/uRul7reV7jnnZeyfsf9TmMw3pMG/8U cFjKPHhbh/Fyj70N+LqCcVjiw4ExeH5kO5yQdzSHzzvo5Q5L3uvrsdc5bF5POn1+FgIGnrIc3uEa 1VFWr3c48LRef/31Z02fPn0mH3GOFAACqh3KPORpL0PClXJlyPNX1uUQZanjqMcsbOe9/roW0c9r waitS7Iowapl1ao1drw5fm16yoPstMlTzIHvsrdWmBNdlCEswt/VQh9lEM6emdQoO1jIrli1MizT Qhm/KLMuOL+wBILZ+MG7V0eJP24WEyyvjjrqKLM2eOTx2VpQLjNLh0FywoulB1Ywa+XTZdXqtear 5SUtMFnw/ubXvxpmTJ2ij98W423+gjdsAbzzvd2Kt9k2m5XqBw6wR48cZT5fcJS9WgqK3lqhsE1r CYtr/bFda7Csd/r17Rcefmy20eqmldxIbaMbIJ9Jv3z4MbNqQunFVp6xUoTh2PiXDzwUBqkdyrbF WtTPfXVe2KxTvrCWAD8LFQuKWKyQQ1GwQY57UeqgRDlLvp+wznlTp4rxa/HqNetk3fKyLFDkPPzr XzG+2ErneHy089FFpsNlJYIjY+Sw7u23zbIIhctWKe4Yo6PHHm3Ktf1Sbr355tKwfecO0Vyi9BJz mH2VFBLAEYpZlIiAH+uV5154MRw7fbptu8Mapa9OwHpDckAh953f/qb5uKI9CrNHnpgtZ9EbtU1Q W0o0hqOkONwgpcUi9fM9KSewUNm8dYvJY7N4RF4zpk2Rc/Qt4VGNwXbxjgJsvLZWIR8WUSg0UOjd /+AjYeXK1ZoHGiPhHjZ8qMrkBF2KiV7qA750xsuh9BIpNta/+67JgJPKUCahKBugE9imSjGEQo42 KJZQgHBU/Ve/dJ0peFB+vS/FDZYzxx473fjm6Hrkx30yZeJEg4cvC4pQEKIgWi2H2SgZkT1bzTgN DAft26SgQRGIgpET3XqofyhUh8mq5/Gnnjal4wHdP0t1n+Gf68TjjwtflmPo/pqDj89+KrwmJekB bVvDqTj8T5o0IayXYmmBFG9vr1sfli57S0qm1cI3NIwaOdKce3/wvvyJySIPuWPp95nLL9F83R3+ QU7Vd+x4L1w+66LQV8qboh+xN5Ur479Xq2sUkBs0pvhMWrJsmbYdvmaKvOu/eK1ZFw2UpdFAbSlD BktNUbbWfETRZrq2qh0vp/Oc0IeimXtz1eo1YYnud5R9J848znyUFXxoEmL1sWRdh22nulKOl1Gu yDTTbiaJ2u6pbvIz8+KSDjuxi0X5Ad0qHJnOYn3mRD16GRfBPvOmFuZanKO0QCmC0R9OlbHqOWE8 Wz+lIJHCZvyw1nDyZG3NlAQg9aKUCzhUPmuGiEfSmpecVBadXWPpAk6OWx+pI+rxycP2oaVyarx8 g+hJyYHCYKDKztH2qf5SMvHHVqSFq9ul0OqQDx+21kWezpF1EE66jQHxHfup90ORjtYquv3kq0l+ e94N4fKTu5vyqrcUQliovCgrHZRRE0fK75tocUrXAtHiqPjFkifWQsdIGTNzPP7oQnhBp2y9s01W PPKTs1gKkNdXybpJvo++eE43KTJkhSMYLH+elBPw3V3JWPLCpw7OrBeqv2tFi/69v1eykyNwjnmH Z2T/8rLob2iFlDLL5dh7irYLflYOxAdIGQg/HD2PnyOOpKd/KPR6yqrsnGO6mcKGcZ4jfs7QFsTx cppN0O8L4fnFHbYNb8poCYux0j98DG2R5RKOyRnvNfITNW1UdB6NpdpmnUTHHMOSCOsnTsbrJX33 JdoqqJ2f9iy0558ejchohXw+4XOJLX5YRbHNEYXW/ZykJ9ltliIOxQ7b2TiJbZL4GyS5YCHFqXdv SomJAm2hFEnQv14Ou8fK15Y4Dq9ImYcl5sUn4DtPYy9ZLNRYvK+xuOKUHuEDPcNu+MnNdqjCpbMu 1nNxoOCknNOz9L///Q3hGPkxu04HN3g49HeFmDSqDt2MmxJoSqApgaYEmhJoSuBTkwAv+sMIrM2X Ll36+m233faiwNMCMH6WKs/L2wN15L2sqxh4h3MYyghwBR7ivK6eV3UleG+8ffwYizg8TYM6XAVJ o4w+fQ4rOOIcmDI60VUdsM6cwzSK8zLSeRtPE1OX/ylrsHn7vKxR2wKPFEVnzpgxwxRFNCrHI6Lj w7DevfgbdaqnOrFTFYJbECXoD8FjaJII+cjE2oHjvHFWPVQKG04Gw+qCI94pO0qKEJQWKAhYgOPQ d8rkyao7JUzQSVEjddLSqBEjFA83R87du/cwR9DHaXHNdix+5SwWf/RANLE02S4rl2N0nDdKFRRF bIdBcXLsjOm2bQUH0aN1vDh/kyaO10e7/LXIsoU8i92ZOhKchRyXI7XwHyMfJygjhg0dYkoTFvMc 7T5tyiRTJNAPLIJO1RYqFtnw1U8OlKE/bepU9X2wme3zq+1JM48PkydPDCO0lQrnv+9LEQQutviM 1JYtLKL+UqdywctvfeOrdjz50WNHh3VSkDz2+FNy6n2RtgxFB9Q2VhoTZHCElC3Ia4xgcazNNp6x Y0abfPHthKIB5974gPrcZ68I41QHLWY9iug4R5RIt0HMR9z4fKFfyJGtQRO0pY1T1vCZNO7oMVIc jBC/I3XU+xTrJ1j69ukbzjj9lHDFpbNMyVOMk08wtlDoH9neWnGxtQzFFnLml28eZswJxuIYOd/W UtDGF8sbLNRO00lY48aNEU/Dw1ApQ/hDqThcJ12NGjHSTuxCCXTGaafaVipO0sOiCcsmHGizvWKs ZDVATtZtrMU0li0oi/CHNGOaxk04GfPtUnqcrHGbKtkxj3G4PEoyHTTwyDBCfefUNU5qmzhhvOb0 IJM7vPeTcqiHZE76cskB5SSK0CHawnHG6afaODHPUTRxKh68DpFD73FHH23KszgW8QrfKMXYKjZ0 yFF2T7ANcIrmkt8706XcRObjx8CSeqIAAEAASURBVI3TmKBAG2Gn2tHHKZOYl0ea4ghH1jiBRjGJ 9dLmLVttHHHezpZE5jtzjnuR/rBtEGXhyZrf8M3cZo6h/OulececuvKKS60t48ZpaSefdILNj1ZW 5ynkz5xYFOcbfqyYPzicR0GHs2ysF3CYfabGCpxM0PGSFfcJ9yTWWcx1FMYozHBEP0XyGCNFK0pG njETJowLF8nSiHuhHtiehfHtSG3PGiMfMljc7NP2n/1SspR/OLhGiRjC8UdH58j9Ze0zVBYgQwe2 mkJmv5RCO2X10SolAJYh+MkZLWsZFBJDtYgfIfwccd9LigFOzGK71n4tzmlH2dFSuhyp7UYoT1Dw oAgYJcUQCiT8zKAIwMcNCiRgcHA9TM6YUdpoWMJUbbXi1DDg96qeuTxaNAcKDifR46ScOlNbw+CJ 7WE9tP0KOs4DllL4NYp9jjF0YGSoHEPjIJq3/D5tcaPv8HqUFBP4GeJI99FSYHG6FzLCl9HpOuHr DNHjeSMjvDBHCjK2o33tQm2VEyJkcvZ0nbw1SXnDiz+fmowlI+CgD6/84c9ptPg/QjHTYYz4wkk3 FlYHgBHP8DZK/ACDImaSlETnCWaE5IVs9PuDyQXFG/LTtBNMiznaRj7g0OvD+skJaOCANvjZ3jVB zp/jOET/TCheGJtBoos84Bn6vIewYBsh/nGCjZUYfJ44sdXGljmHMnGf/Dohd2BGDZJsNWZYAA3T PPJ5g9IQvrB4mzKqJUwdiSJK84K+sp1OPDCm8A+PzCmTjRSHzA2TjWigpEKhxtxlzBlPnHjD/3DR 7q3ODtRzguftscdM0/i1mhL69rvuNcu+3/vOb9r9VzzHNXbqogJPcCVSxD0eVVPUNUNTAk0JNCXQ lEBTAk0J/Lok0Ok7O76o/RVt39OLFi1acMcdd6AoIvD29r9GeS/LYz7faFMPeVme/jA4+5rIgHJ+ smI+Niw0wu11OXyn9GEBqRVw/NUJeZnj8dgJeZ7Y09R53svyOK/ztCt9fAVFuSt9iPO0twHW2zlM Ef/85z//k2uuueab7p9GsBboIEBR3eNyB2UKJFVMTVbqtTFOlRE0NYjNUhsBaCKyQKlPUKDx3UDg A9M/Ms0psqjaPy1I+Cj1+swkztphJcVHN2xgacRHOItCuI56DuZrrI99hZ34sQ4Cx1svQxkBvPGn NL57UKRYX0QTehaEy+gLBhwEcHoaZQsLTnWikKH302DUhO0l3qZox6pJgbyXsSB+ce4r4Wu/+Z3w v/zZn4Zvf+vros2ioi187wc/sm1AP/3h35l/JfPHYxjKi8sRNlGsHNTWKMfPCVHgwZ8OnfMtBN6a nhV99kLFfPQzTo4bRRxHxuchbmmIMJTjJJt2tl1MsqI+4odCdawcj497zldeFtvHK4tQ8BB8O5v5 4IFTkaDP8AwPHhwv1krGjfEVxzlhoqG18fHwucP4U0cAj8uUrWpRiRGpAEFfTV6Mm2SFRRTzyuTH vBIQY0owSOY/fFqfVEYHDIeBCMZ7yhSL9wk18AAvVqaxNbyq90A7VubELkevI3bapL0/kX/Ix7np 9Hiu9NBCkjnlMqFNPAVOTnFlhURgjrHV0LZT0R/6olD2QSm1ozjOAijGwLgckNLKtgOqFuWhyUmw ptAUmPMJf2x3jM8ByKg3+oM2/+zEN+Vt/qkd2/ugpJkIFskj6BQwHA3LykRpsa1SJBL5ibACVaAb aehjga70Jz57YlEJQw2tIwaHowVzln7bn0MxXCoTe5GymlGP7xv6Gh0SwlcsB5j+wT9bk9hN1iPq 0KwPAlOtYKQUgD+2UHUXcOSfE+8iD0Y0UowMGNZYCg6C8SCeORmMGqMs/igv8ZTyQeGBHLrLegq+ 6ROWTFhNvStLoM/JagvesHmlnH4CQyjlF/NcqcpljETpN/dXmxxboyxSNw0HuGiBzMBFYxRxPaQ0 IavbwPCR5qGv/7aVjMNCpZe0NgWM+sf9Dm8Rb8QRaccy+mG+pQSDDykgkImucGHtgGHMmXHcD+ZX DZzKe78dD3wh14hHV2Qs5SKBsbM+Wc4vJSw8Wvsk0zZoSTD0Me+D4RCgy5Q2Ni+UYDy+en4PKc6g i9y6meXeQ488ZlaRZ55+WviiDljguW/PJ9rqj77GHkV+lInBiz3fjJsSaEqgKYGmBJoSaErgU5MA b2He+/bFqJd7/DaovZtVz3v8nnvuufHaa6/9K2X5RPE/gO2TJcX29ZeVkQfG4XJYFRdtSXtbhycm eL5R2suICXmbWFJeva7+teHlJWQtpc/Cww45MtLIlwBRD16ew1LnjDks9V7meByHw3g+j71dXkba yz12HOTB7/kclnQRACQ4U4bSMnlTAQjQiViD2sXwqElnPDkTqhVg/M6t4rePZr48awEFRoZUH6cl DIvNSg/VNn5Yd5h1BrM/h4cGVEsegVcpjTJ24mISVuPnLSzRPxQNBJx10s7uLiuJ9WxHsXKV+Ucy 1V5W0BUeFuuGFAAFh4eOVQmXlxmALk6TehY6WMFMnDDetuyxbQjrpy2bt4Y12nLESVMj5D+mqiQq iXKSWaQD9ijj2O8oCxbOJl9nCLAUbKwS8+DwgLwAd5l3l1Nb0oaihifC8Cu3Vl8Kzg9pQH1ASo5j OXnHb2DpYsfNp1axva4CthP0EsbYYeQY+05Tl3Hk3GlH6o7T2iXctLFaoTd52WSOpVxt/rHCSsFl iiJFy28BeE0Z0x+UH92kmGNauWxoa6f0laBqLk5FJJc71fQ5rR8NupQRC9PYX5NxaljWG3hxyceh KEwJaJi8xFdBn0TBs+4NmV7AH311GNpgUYSMoQseq6Sz1t7jmKXaUhQDbKtUK7QLSg0W6O44G/yu IIr40tiAX4Ftn/X+wiO1rtjL+x1bRe6hj4VFdy3yUTigLHAugctlTo2VkUjB8nGKe1GKC+nENgDW cWctCrwpUeRLKZd4DDWqhRgizzFNmeUNQYSJukgbCANidMsXZIknPj079xF5GF57o3m/QJWny3bO D3QcgiFm69conSaHQisqeFMb49VYS/xVMVt1FzLG0odg/BV4IlXP6lFXwoAnVRT1cJnDFG/W2G+a eD9ARDsDNwRJxlQUUMy9su+UF23QaCmQJ5R4G+FJEFnfjaS1jJcqnaxCSZ3ZaXSMdq2hZWt4AUah FrkXb2KOxxmWv1gLfvm6a8xSFqWsvXcq960a0xl78SU+LJ/SzagpgaYEmhJoSqApgaYEPnUJlK9e pXg12wuf0s4h/XhcNokgtCB47GnyeRnleQBPvgoC1gl7u65o5XjydFftHMbxOS2H9/ou4/TZ12V9 XuFEKPM0cR68PC8jXWcob+d1XuadqOPw+np5PZ/z4G3A6Z+1Vl+3GDDAnHKGhc9IPjS92wZbp5ry Vpe1LSRVgU8ACVEOXhFVtaJS1QldpYBMEmtaJObViWxRVOSLRFFleLzY47I2SiVRKmY59cDG8mqq bFsBEvzHkzEL37FjR4Xvfue37Wj4hQsXaftTPG78vPPOkVNpOXWWogaLCufTOYMX+4YvK/KqCquV zhU1sf+WLbtZZB3Me9apwgEyzjrLOJdlTHuzkmQ15fUFvdS/QsZJO9eIlre1uhJtlQkH8lFOiHLw iiCzCmSRdbfA5Lwaq/l4CDih78RDUZ6wFPkikaMv8TSqpszJ5vVleTWVY3YxUOZQriPLcVFv/Seh YHUQdSBvbLV+SYUJpgoSOTalVar3VkVnigIBNHgWxGrvuVipEihaY4lzuU7PcmVvrKgDOxP5cyHC oA6o972k6mRKfJ4qY7XXW7xFczfiUY1X1jpLH7yrBUgiYXzwNVBoqIHwUOUots2vDgfpyA94nKNy IMFTUi4x0D6nQU0ZwAPv27TtbO/+DtveBPbGbT6qjB2PxyWHXuJ9+h9dxtXRQf4uAR8L8oS6jB2S cSqtvIDE2f8k+UmbOHGCFLdy7qS2vJuA6xTSFCioFnOxE2SzoCmBpgSaEmhKoCmBpgQ+VQmkt3GD 17WTTT+y1j8f6i08nxBaa//o89hREjucxzl+0nkbh8nbk/Y2Xp+3yWG93OHyukOmD1dR5AQcGYQI TtDzzjCx/a5qUJ0vDuc13p486TzvMIcTezuPnQ550vwRvD7mUoF9r3lJgozLgFqhZ4mdQiozQior ihOevEnBRuLKQIoGsZCrfuy3gCAboonV5Sh43uISD1lHH+NyaeN1WRNLlpcIm/OQ2JYQu8CjxiW/ ZcrbFbhT1a8iY1aEPWXZhL8XnAPjSLSH/DJxLDE+YcyCRR/sFmLnlSxl87Fk3AUesJZ9LFPQLqRQ LaZK4Z+2jGG57AAZD8UAWr3lupANLfI55BgqcReyATlVjBVxCVamwJO4yQEoTuHXJWPnwmOnr5gi WE7BuNelKG7QpOhV6qqBFA1iIdcPn8cJecLjPMTY8WB1FWVdgpUpLFyKDqRioEnG4DKO24coj2DA UNc5eFc8dvwJfSkbK2iMJ3LsLas0nD7KJdKRochLzjlVbI2yX5TIFMFaWbN2Fv1JPofCY9oe62xs G1G5bGRRp2KsLqmNMvFUhB/ByWaiJRAD+ORk7D2OdJxqIXsr+Jch4zgmyPmjyBjwch6n4SlQHXFE b0v7NlQyLuMCKCUinjj6PgvqMM18UwJNCTQl0JRAUwJNCXzaEkjv4q5e2CKvH2Sp5S8P/hlAuVsI +Ys9h8vTTsVj6vI2nnZanif2NG2cpsNRRsjxkqcNZV7u+RwXcF2Gw1UU1RnJCThxiDicl3m+zsCh 6v9/9t473Msi2/csogKiKKAooJsMKgYUUVEEzDnn0OG07ek+3WfOPffOvWfOzJz5Y56Z55n5Y+48 03267Vbb0Oaccw6IOYuCZCWIAoKoJJnvZ1Wt963fu397s+nW1tP9Fuy30qpVq1alVavCz3F7Wre9 cI7L/diulMLt4Q6HnYcZvvwKRhThFUyMQ8rG6V9zVj6WrmHHsFiORMiEz1FWkgu1YmxxonQJT6Ql I0M4AGuNw4kV1oQnAirc/sd9d9KZyfBEbFlEKmmRiWVY4gGy2PRsE4/ji7bAhA7CSzy2NIoRBa8j fQWVjUjk6wiPOVHRRaeGeNyXPzfUMT/H/o3zODXzvK4sz4w3xJXGC60Qgs0rR8YbYL87Hqe8IcLM t9COhZeie/FjPnxz3iiWfkD7S2qlmseJU4lxKBjaHCsEClgCTQmxOspjUkZwGwLMmcLkzlUbRSbQ U2nH9lSMkhHcDA9ZtDaNeOzCXiLb+0UsV0lPaxyx7GW4t2NsGcdXOktQXIlm47EBkyTiMAyU1VMU Ds9z8zwmqV2ZJG2bvFGOzjQSGFrl+9fEYytW5GssYnQbd/9CPPZaswr9pnhstHsjKttOrEOvS885 a0AwoTY1B2oO1ByoOVBzoObAX5gD7ctuToxOBzNp+x/BJMwSF+48zOFciYQ/n/zdXU3jcB6PHwMc xunA77jzOMfnYZ4GG0N6h7GA9j6uYGkPxuMcsfvddoLd7zZE5ER6ODZpOmIcdzN4x58Xtq38HNbz bMAXF0CKIjTD1gxZAWvgDlG1QaOwlIvHeub4Ix5gEI+9GkxUdjCzuQaAaf44ZyMeIz5l1lBAEAgP Uc3xZNAsUoCs4knBlKk5HsuEj5mifAWewhERpCxTqCcz3I08dt44pNugkTvhwREVQyiHtBzjz7AB 8+3z2Kj6D8tj52nVbuSxx3pl4e8wj60u2mp/jXjKBtLYHyz/v1kew+zNtON2eFytq5rH3oqdE6l1 N+VxMciIwwmuTJ5csSfk/cEx07pLDDH0P+547OWv2pRLYVs8rjtvSg79rfO4VdOqA2oO1ByoOVBz oOZAzYFvgQNR9mhLdmuSIcIPfyR0wcXduZ0n9TR5mLs9DX7H5/DYGPfjzuHzOE/rMLntcNUw/Js1 vgrfHCAEQGhOiBeAtO7O43HnfuAwXmBPE0Obf5vBOs628Dsm4knvcJ6O+LbzzqGArBh+/6k0EmnN 62EJrVk0u+bZAB1/sQVMwAiWQDtV5LhiFGK0QWTBiilMVHLizc6wpPwLIDkKcbwpHiUo0mR4DEGW QE4vk+mT8gzM7XjweI4OZBlET4bHY90mN+NxAe68cTpShFl/GR7ndeVUlPxKlIseL3H7vAHD5ngc cbaPBxjPMcKnSkyJy7ryWLf/I/C4vf5AOdrnzV8Zj1XP0dDovT9Ed4qwqqc1WKiDF5GkahxzjEP2 aY6HpDWPE7+dj/I6jz0otzvGY0ElPKT92+SxlbxhzoPTZv6Weew8qO2aAzUHag7UHKg5UHPgL8aB cm0f12dxbV9IJvaMiYghAFHPpOfkl2WGOP9LQWY5PHYzU2YS0wPjaRy+6s/TOEyzMI/LbYdri54c 1twdVRSBuIq0SjgInYCqO0+bu4FrzzTL1/PA3lw8uB3O0xG2qfqYNYEYV4REX/lNS7AKE7RsSFfG ImRiSSphwzK+CANSMRUu2MEhC3My5dH/VgVM6ZKV1Uqk0OiwSMcT8+sYnghVpgRR6TO6od0yafwU YYUjT0lgFmE4cn/EFUMS/iy65A1wROgvxTdQU4RFuG+KxyWednisvL85HhfFoyCFScVriCxrh9gC wtwNvElYIsT3n8dlnZclpHh/kzwuWkB0tOaNGLNZ3qjOY+Vb2zA+FsyseVywxvtJxpsYp6/+F8Fe Jymhw2yex8KwWTxWRfrE3PhGQy6lD0SExLwTSLKKsMKRp6ymAk8G2IAjxWTRZftzPLJTfAOeIgyE DTGWQ4nHFecRTyx1IiImjfDp+1fL46zItbPmQM2BmgM1B2oO1Bz4Njngconb5JVW+w1re93vim/d ItW4EIY7STmka3A7DOG4/Q9/bnK4ZuHEe55twebp2nLnaXOa24JvCO+ooohEeUa4+aumb4sAYL2w DuO2oloZj3MbAMdBWNVdRQCM/xGX46nCmh+EmLy5xJD4TTrGIigSkGfhUY7J/clOwdFqA6YhSRsw DXjyBG3AG0iTuA7hqaar+sv8244Bphpb9Uc8MbR5XJlTM3wpNiX9ZvHkOXeEtgy+gZ4svIEfVZxV f5mu7RhgqrFVf8QTQ5vHlTk1w5diU9JvFk+ec0doy+Ab6MnCG/hRxVn1l+najgGmGlv1RzwxtHlc mVMzfCk2Jf328HSEtozSBnqy8AZ+VHFW/WW6tmOAqcZW/RFPDG0eV+bUDF+KTUm/PTwdoS2jtIGe LLyBH1WcVX+Zru0YYKqxVX/EE0Obx+UQrfHFWM9m83gSvCdwr9uJhNZ42qPNE2d2A54svCHfKs6q v0zXdgww1diqP+KJoc3jypxqV82BmgM1B2oO1ByoOfDNcsBvBeVzsNQa5m2qNnBAj3Q/ZOH28Kpy wMNz+GZhjsffHQLG8Tq8w2C7yeM8jce57eE5Dbnb4VrZVUVPK4AU4MjcJkMnzG1APR47D/c4wnIY wnO4alyOBzjo9TCHzdPnbnA7jKchzGCSdhC/GU/IQ6atTAqKp43iF7DkigibJGuFpw6oOVBzoOZA zYGaAzUHag7UHKg5UHOg5kDNgZoDNQe+Ow6YloCPqwu0mLf1fOOxkXQLyVf6eYJmtFfjM+QFeDXM cQPgcQVwCvPwHBY34R7mbrfB4XFuN8MDXFPTUUWRI68iIdwzJM7hmtk5XA6bh3s6wqpuD3N44nFX /Z4uzwO3G0ujF8w9nYfL1rmhLLgKYL9GI7IsgyIyqosKKjJstbPmQM2BmgM1B2oO1ByoOVBzoOZA zYGaAzUHag7UHPgecYAFvR0QyVUH0JfW9onU6uESUqU/IAqNQCWcOIwjdzj353Y1ztN5uPuxCfO0 uHMY9xPv4blbwVtmOqooyrF6xnkY7maEOCy2F8rTeZz7c5tjV3ma3F3F4+kcH7a7Pa6aRjqfdo4O paztpmKOrYpV2KuIPcParjlQc6DmQM2BmgM1B2oO1ByoOVBzoOZAzYGaAzUHvmccyNf4GWlbuLZ3 cLDhdm2B+x1zM7g2KLAk1fQ5Hs+DMMeL26+t4XZTxZPT6DBt2luiKPKMnKCcSDJoz+9pckI8jHTt pSVNs0KRhnDH43DYmzO6YWZPaRpczDyRYNiy7HLsCWtObO7eXKZ1fM2BmgM1B2oO1ByoOVBzoOZA zYGaAzUHag7UHKg58F1xoFzgV9fyVX+6elYNdsIJB1mmPPAosz0+D3RcToTbDuPx+HN3DpfnB4z/ 5TBt4WsG47AN9pYoijyhE1zNBH8elrs9jePA9rBqOg93WPweBqy7ic/j3I+NyeFiSPlt+NWzSGgi tyEV18xSQIoGRUFEBps5y1xqV82BmgM1B2oO1ByoOVBzoOZAzYGaAzUHag7UHKg58L3jQHnHqPlq fuPGjUSw/M+0AUUxXC0AjCNwWE/n4Z6oiqe9+Bw2h3PcOc62YPNw3DkeT9/U3hJFkWfidjWTZv5q GESQ3nE4Ubk/d+fwhIMvj8/dDouNcXinwW3iOFFUpC0jYpAnJLcizhyFLxJRYGgkigxqU3Og5kDN gZoDNQdqDtQcqDlQc6DmQM2BmgM1B2oOfJ844Gt62Ukb0qmTL+yJ8/gQunTpUqgGshKUADEQmOYI YnwV3lER7ukIw98WrMdjY5ql87R5XIQuv8Q5XBnaxNVRRVEVoWfudo7aw7DdTbwT1NE8c5yeNg9r 5gYuzxMY97ttYflj1mUEyfWAlSwLS58yvnSBxItUDY1x9bfmQM2BmgM1B2oO1ByoOVBzoOZAzYGa AzUHag7UHPj+cUCr+LSQL4+QcKOo6eo+10fkALijEqHAViAgnPgcvoqn6s9hYZn728Pj7xO1BZPn AU6Hx92m6ajSpoocP4RUw8moWRjheSGrMFV/Do8b0wyG8GZ05GHu9vxJE/IXzEFcIlfTKJ8vMlji ysQNkCm+jLWA+lNzoOZAzYGaAzUHag7UHKg5UHOg5kDNgZoDNQdqDnyPOVCu7Z3I1iGmCmi24AeU P+KaxTvK3G4L1vFUs3e/2zku3OAjjj/czfQ7DqPojptmiNpKTQa5cWLyMNw5XLMCebocLnd7Gmx3 V/G632E8PXYe5n7gPRy3Tg0V58uM4IggfjsTYjlHv8GTJoOMYRFl8Y4RgbWpOVBzoOZAzYGaAzUH ag7UHKg5UHOg5kDNgZoDNQe+txyoru3tWpGoLTUAIWRvFJl2IBXG3YDyF5UCSYOQ/IB6XI7SYYl3 k+PJYT3ebcfnfrfbSp/jyt1Ov6dvam+JoqiK0An1TN3vcNgeR+YensN5mNtVIvP0OQ53e7ynxyYs zwNYh3Pb4YnLTGwuFmCnihxdBDGFUEoZEfGt1UQZA2tnzYGaAzUHag7UHKg5UHOg5kDNgZoDNQdq DtQc+F5ygBV8scqXI/r1TffP0nLfaE+HSwrwVCCSYAjPwRtQpzgPA97Tue14cxzAtWUcPo8nzNO7 XY3Hn8Pl8W26t0RR5AUCWV5gx0HmeXieqcd5mONyeLeJ9ziHdbuKw8OxPY3bwGKq/jzMAPIPwJaJ PqXKKKHKMDqcp/Uo99d2zYGaAzUHag7UHKg5UHOg5kDNgZoDNQdqDtQcqDnw/eIAa/eoJJBLjuhH pVGEFgSnd43bWu7HBDFh7s7hq26H8zyIz2E83G3gq2k8DtvjwOHuPN7d7cU5TIPtSp6GwA54nBAy rGbqfrdBl7vx58zwOLeJz00Om4c3cwOb0+Zpc9wW37lzWXQDEoQDQ22ewHweYHDpiauU0KI8vhlV dVjNgZoDNQdqDtQcqDlQc6DmQM2BmgM1B2oO1ByoOfCdcyBf9xsxdpqI0ManrNOJIlb6RHoyty1p k3DgXTvgtsNiV9M7fofJ03i+eRhw7ndc7sf2sByOcIchfLOm1Ja0D1pF6pnn6T0MTFUCq9jbwtcM rgrbDKYaBi38edqcNmAb/AbUEAKIQvVfv4HWCC4vl80MPE/YKj04alNzoOZAzYGaAzUHag7UHKg5 UHOg5kDNgZoDNQdqDnwvOGDLfFvIm1ageHHGiGtc1Oc/gKXolKiwAfawzRXNEbsNfJ7W3cRXYYir hrk/TwdOwglrFu5pgNusyRU97QFXkXrG2B6Xu53AtnA2i3c8eZo8zPP0ePcDU4XzuCqs+yu/epbA HYvZunwmu1GnGJOXYNVsCvS1o+ZAzYGaAzUHag7UHKg5UHOg5kDNgZoDNQdqDtQc+D5xwBbzpRqk E6eJfIFfOtqjuIAWkLvd9nT4c2VBM3c1DWlzOOLzP4/zdPibucHj4bgxwObwFtjep+RQe1BlXJ6h uz3TEiq6iOeP+KrpaJinawbv+IHJ4/Nw3Jg8DP+m/OpZ8Rw1WICUXU1AohjFN5pNxa/PlWEeF6H9 W4biitB5Gg/JwzyNx7m/ardOk847VQBbnY2qxHfAm7LCap1rNX07EBme5qnytNHdVplIn0M7Pk/l fofaUjwxfesc2sIDZGvokorNulLijuFpJ6cMTzXPGJWn9ZA8zFN5nPtLu3WMh2wZnoixdZqax96W ct78aTz2VGXtOddz3B4bOd8sxiE2a6fEWJvH0w5EhqeaZ4zK03pIHuapPM79pd06xkP+XDwxj7od exvI+Vnz2Fugc8L9Jbdyfnlsa+i2Yxz2z8UTc/ibaceJXR3jWs3jxvbnPuxmHEzxf408zorWTskz qOSsWhlvOlUQVbxK2TqkQJfhKcKSI0blaT0kD/NUHuf+0m4r5lsbKzL6m1FaUoarHYgUhVXzuJFr 7jPeuOdPsbeIx39KBt9UmqgBiF8RnR6yjmqFXLVg+aVSFY3LAbCrfw5LQty5nzCMh+V4PNzjDFCf KoyHO7zH48/dVbjc3yF3RxVFnqnbVeReoDweN3/kkYcD639ytmmqaaqAjr9ZeB7mcA34KsfIBJ+G tgRlR9ByLHITVTxybSVWiMGnRA7vcaQxt0dEO0JX0sgbTy9l4UpLGCiyUPNHTI0xDpPjcXoJiyek SlpK0kooYh1PhIw+g0gRVTw5RgMxxJGKMg4XPBZEhqcx3qNS2oQnJkmJPIHHyf+94LHoqXkc6zbW XlZfiTdUWRbafjs2VEDHFNZuah5HflR4o0AbUeF7WzyOXIxfwM1VwVPzGM5gjDH6wiXjlIXC3ILH MDoZd0bIEt5c+uR4ch5HfI7FqrDAmOMqMRIdfdVxtBHGcRpUQhyp8Jhof0fjsTFMFNt/KM+or3kc +VHwJqsx5xsQ3uiy6MjFxEuHLfCkcOBrHsPBrP1lTIRviVVbzuNGPH+bY0ViX9b+Mq5E518rj1NB v0n5uFizOu7crnmcuJFbm5vzGP5i3yeV1VU2NFpYQmfBf5U8jgVsLHb0Je4ZQMfacTFcJq5Fq2M8 NuY2pPtLe5wCSl+WPbnKBmBk5YdLFODscxTYVXdEG2FxexrwOWwe5uHE5fC5GxiMp4+++K2GVf1A gcvDq3lHLE2+HVUUOWJQ5O6qvxpHfJWYqt/TuE0aDP5qWJ7W4/MwT4ftxuHcj70pvWCehUVBusiw ASueIobkZanyYMem6CK4AQ8ARYxDy84TNFZJoWWzZDFtibJ0lZg9zGFZDHSKZ5+IytTnDhk6xQWm 0+YpI4HuA0syDXjMk0ATnoTYU3oyyglEA54iMsOjsHygKRMUwI0sS/mVsUUOZdC3zuOoESWbv10e U3Zn+Z/ZjtUmzaT26i3UsNY8Tkxuj8cRpOgaRb0ktmI5j1OlteZxhOVb4nGoiDB+PdZ9lT5ejDlW cRGpjzkpqafMc/zuxgpREQmSow0ee5EFUTiLNLEU5m2Hx8WbiRE8w/NXzmNnWMGvP5fHiYFN2vE3 wWMjE5q/t+3YiHMmRLvmceJHI2/+dLmiEY8hb8XjxiqgVRuIw7kfsKLt40neIiw6fBQwPJXsC5Q+ jiaEnjLDKhrieGxxhsczypA6noS4EQ/YtkR2M/CchOj2r/JwCspBj8iMngzWnEUCj4j2Xz2Pm445 iX+prkpmZrypeZw1G2dU5I/3B/NZk/PGZZ4IpCAL9aQOEmMdUcl6hyuR5pClkNAMjyDbbceNmGKe BZ7o2LKxIiL0lI2+b2KsoLgdkwErRfuLexuqLcvdeFPwOEa0Plxi4Y4Cmz9PlYcT5n+WKMHidngP x/a0HpfbHpfDt+XOYR1HDtssLI8v3LTPLTVknmeQE5O7cxjcHrc5O6fHYQkDh+Nxm3jcVUO4/xHX Cm6TTJ6oGZIi3raWcvDYCaJqqYCybBxPDg2Eh5dsyNOV7lKrqTAhKfDg8Mkc8BQhhVfo0qWL/eH2 nIr85IBOK4KliwmL+AJXkRMhMhEiX+c0QDj7ct4YQByySt54Tj6UReytvjkei/z+8LgVrVltdurU 2XjfuXMXsSyVNfHGS251lXjTiOvb43HrdqGcm/FYNKsIFVPWVUOdC6ookzfAlBJte5cu8S/yIUsp Z+HD0aQdVwgQisjXLsm2tp3wWNksvy6h0PKDt8gkx/an8bhzZ+9XYo6h8JKLN03zSXk247GRVk1U 8pgMvA8X5TF0jWmcxw7T7lih9E5x2f4SjcmCj7Rb8nacwFoRgEnZbw6P51TwRQkaKO/AWBHba1ej xbpRA4JGupu2YyO3mqjkcTWmKFMjpSmjEjryOPlllTERtMBDRNPICFHA4QCPB6Q07jUcVTyWVYJQ XOSV6kz1htuMeIw7bgkkBGZtCl2sjmN/ol9hSBbbXOdY9wUBFp0IzAn55sbjmFWJ+8/ncaS5KAIO of9TeZzjgcqC0g6040ZK2h4rYl+mvSf+W8IO8lgExvTqu/x6a6sxx3ukKBdsJ8H8NfA4sSi1266h s7Xltnls8K1400Eex4r0LNvncYKN7SS1FlnJVWAq2hURbUZ63QmGBODxhFkaGwPo1/orxoBKTp4M PA1Z/gnt2OfhYp4o8oLGRGgRFsfdUgb0iFgA6GXs4g/6rZyAtMLjUWXBoyv5ZZUxMY+izES0Gel4 BZNIr/K4XTyWVYQo4ORoyLIdHnvyOP6W7RgENob7mA5gBY8VKX3IuxmPnSYDs8zix8IrPLa6sPxK 6OiKdQhNZUyGBycRbUY24XFMXqRxOpviMdgIUcDJ0ZBlhTeWxOhJRAm+GY+L9lbQk+ATb0oUbbdj pymldEwRdYXHREb4CO1jd+cujEWxUE3xkLAaUSIr5wCXAwRbgCeH09nIOJC4iRB8aQvwi6QlnuTK y2RBqX04mlRCS0l8kXECqNRVQlGk/k4dqYgNNFTpV2Rl7PNUOSRuDwddM3cO7/F5GOkcj8cT5sZh 3fbw3CZdNZ6wanjVn+NocHdt8G3eUy0AUufX+qsS5XB5uLurdk6sxzkl+InHYEcpt7W7ms4S6OPh jie3HcZsz8QG5nygzqDo1JFYDc9y0LEghS5jiyT5CzxZOpx5uOOxUKco4cmT2SCOIFgxaDYtV+X3 5ZdfhU8+/TQsX74itAzZNfTpvV3YuIkqSYaM88yzYAcp2aSQgh45VEgbHwA0PPq0wZuIy4a9jDeE RjykK8iIzItJKt+YfeTQX4LHleytnAWdEFMyJHNSFr1QZfz/QvxfbvwfOnS30Hub3ip/xNAaT8ot FjLi/hZ4TLtZ88WXRteKlSvC0CEtomubgq6Cx3J8vXFjWLdhQ9hqq60s/k9tx6tWrw6fig+rVn8e RgwfGnpsvXWRXyp1aYkxrXlThFi/2qg2PuuD2WHR4iWhb98dwphRI+OiSGXbsH5DWL5iRVj68bLQ Z7vtwq67DkqP0xeMbagrEbJl7Vh5rFq12vhHuXYfPSp069YtbPpaNCrO+4TVs/zNTMFjWooliyHV sYLkG8T/z5avsvJs3WOrMLSlpeCdjxW0txUrV4Zlyz4JGzZuCCOHD7dJ3ZA3I0BhBUfJutKOO6kQ G1X3Kz9bGT4WH7t37xaGDR0S8y0SRsSFtwmemIkitpTHogd08IYJeN26teJ3rNNdBw8K/fpurzqF dwL4M3kcS9H4LcqkYOexccyIso+Kho1xO/ryb4HHQGI6i8+cBQwR7nE7ISu8beJRhHjRSQrMr75i zF8ePl2+PLTsqjF/u20N7dq1a0NXFl9du0a+iW54++GiRWHuvPnWXvbac4/Qq2fPsHb9ujBz5nuG Y+AuO1vdp1E3URStWIwUIyK/iTmPKo11Squ2AhPQkG/u2TxvcjxK6QncTsgKr2UVS2ZRhVMOEef9 2/C00/4i2rIdR94QGvG0NVYgjK/Q+DVz1pzw1dqvbGzr36+fsta8LiI3x2PGoeWrVqjffmIkjBw2 zLLM23HkMUqkTZIRvghbazwu4yPl+XfzvPnueUwhGSs/Xbk8LF22zNrxkN12lQAaqf/mxgrw0Sii KXgjb8lD8cPAYuOxcd3Ay3QpeWEVeAwkpiuSWGTHeEz7yMeAIRoDttMYYHwwPMIt4r6Rdmy87RSW M/d88onmjA2a3+Pc43KOFzCWqNofICi2Q/oDGzDr16/X3D43fKw6HDBgJ81ltN9IM7i+DzzefF39 6TymhNaOP6MPfxx6aDymHbOI2Kj2vUHzsstjzlu3WQ14W6P9+ViR87igPdWdpy3DYwhpqQvwMP/b +GPcJz6T1x1Bsgs8VLjgoMhM4WyjHUeo4rt5PN8gj3v0CENadhOlypX/kXkFLbnjm+Jx63YcMa/8 TLLlJ8ts7TZq5PAoW0JPZgofPDUeYyvUeSx7tWTTZZ8sD6s/Xx1GjRgetuouGR6YzBS+Ak8KcTwg VN6du3YJyA+ff74mbLttb/VTKXAruEq0ZR8vSEt4rB8n3B3hcdt5lLl9666CN+SU8di4Gcua0eAs tVQxQckF+VPpzXY3yd3t6ZuFeRy2wwOHqfqBcXgDyPwOi53rZzwceHdXcRDXytAaOmJAinE7+uK3 GuZ+bC8wkPQSNzkMbvcT734Pc9vTuw0s7hzeYfOwKhxpOp9zzjkHjR49eu/yOBmkKsoxJMQkzsPM n4X5oF3C5EWO0K2aWoGkdBR4CBKKzl2ZTDaGOXPnh7ffeTe88+6MsGTpMlvc0ZERNjGvvflmuP3O e8JDjz4e9hg92ibeTVpkm3FSsjLFiPT1+IbAzOPpHI7J3I073fZw7GpY4QfR94fHSbuXUy7SC2Ib wqseoNjNffnV18Ltd9wdHn7siTB2jz3CTjvt2PCLeg09oIoEv2f3DfHY0Gmn9RXRdeudd4fHn3g6 jN1z97Djjv3D17kCUVmziJz+4svhscefDIMG7hK27S1lkhEMYU4Q7mia8QZhgwnh2eemh9vuuidM m/5COGDcOBNco2KlA3icB8omCj4hPPXMc+GBhx4LL73yanj99TfDhAPGhV69eln80qUfq2z3WLvv rB35cXvv3chzJ9htx++ktNOOYxk3hcefesbwPzvthTDlsENMcHN0kTfttGPl53gsTcq/6ONOj3jM hMyC/+77HhD/7g2rpaA6aML+piTx/ODJunXrw30PPBLuuOs+LTBnh0MOnhC6SiEQq8kL5ik8/9Jf dVH3Kz/7LNxz74PhdtUbNBw84QBkhuamdRaNcF4mwaHMaDDudTtFel1Dywez54Zb77gr3Hn3vWHI kN1MAYKiqOgfSlMkLxxZLimsGY+zlJagWTvOMJmzwJN8Mb4x483iEfks1opUm+Ph5uKFiIXWG2+9 LV7dHR555IkwevTIsPPOA8Kqz1aFO8S7xZojhg1rMXKZI957f1a4+bY7wptvv62x4JkwfPgQjVH9 rd6ffe758Iza99x5C8KBanPdu2X7RgXRseT2TWEFbwqY1oS3y5sqnpRFJ7TU6cST59oMD93X2g7Z yhT0RE/GcItu/LQmtTHey+Rw+VjhkA7jfuxqWOEHUTlW0NZRcN906x3h9TfeCg9r3kapvuceYzQ+ CzalK8rUgEcLbdGzZs2acN9DGgs0Bs5fsDAcMvFAG8vLsTvSw9gyc9YHmp/uDX36bBf69eur/p3L jRBOlkUmMaDJt6CngG8njfOuCR4L8qQO10Eew7uPpSi/674HNQ7eE9ZqTBy/374aKzcKbclj8vAs SoflHD8psihTAVwQVAAXvClgiqgikwJPEeV4ioAt5nGT6deQQQ9d5M233w23IXc88ngYNWpE2GXn nRvnQKfXSekgj6v88rnn/gcfLuaeiWnu8SyqaRKhZhW8ETC42Jx4QG2X+XXa9JfCLLXPCeP3D1uz UWWFLnnWFE8R7QUrAr4xHhcYW2dRRJnDGeBwHeQx7XjZJ59qDH5Ac++9UvqtDQfsNy7KUdOmS/aZ FnbbdbDknZ4lTzyvnIIUlvM4RhcEFdDVdoyfDSfGkbfefkfzwjDJE90qVel4CjQNPI44gWk0BT0E t0ZRBS76UWNE8nm5Hc+W8FibKfdIrrr9zntNKTN+/8hjy9Dxko273c4JSWFFmQqYgqACusrjIgKH 0tH+Ucw9/sRT4TbR9Nrrr4eJBx9oSvxc6VrgaUDQ6AEX7QTZbdrzL9r8nW8GN0A7qQ2BySO6aI/z 5i+wNeR7s2aF0SNHSHmVyQKAFuXOkFTD3G/5yeP+PH0elqH6PjqLOhdxyFIzZsx446abbpouLyWs /lEEwphgPc7DcrvqbuYnzA244Bp2bjzMOep+YDzM0xKWu3MY3Js1mnK22DgRbjsCJ8QL5P483t3Y eXpPk8fnbmAdxu1qvPuBzXHnaYEhvfplviTyJDlqpq0cDUkxOUwMafxW04CnTNPM1ZheHVeL38+k db77ngfC7/5wVXhUi/2XX31dyojHw6WXXWkT7ZovvrBFQ+9e22hXcm14XoPFKmmWGUAKkzkJK/L2 cLeLBG04KnCGh08lvEzdVgThBRXm/svxuEKTecswpyqvq7I8HluG4CKUE0RfaIf/hZde0WmajP+O 2u3GpK19FTjLkU8lvEzYPCJSuilsI6XPlzpV9MLLr4TP13zR2C4SEtrKiy+/Gq678VYtXj7WYJgP B1X8zdsx3YiexI7mihUrw0svv2btkQVNpL3EE2mDb+5KhJg3hkETi5/Lr7zGTpUcqom0f/9+SpSm T4F10+4XQtRLon3Bwg/b4VHJLXOVpJi3yDYLd9q279MnLF7ycXj5lddtcm/oV1awSG/MgVQJCZai olJOjgx3hM2/UcnGJMRC7vU33gyz58wr6spzgMfkv8P224U58+eFt6U0RuA2mgx/mUmRpspjy9Zj RaJwku/22/eR4uEdnS6ZLVoT8bEIkVBH7XZOfhM3SqK4cIuRliOfSnqyKpX0nbSr2sMUTM+/8HJY LgEv8rukN7aaChLLIodpQlA1Y/HF6xjoMnXpao2FfMu8HTLHU6bx2IYkMbpEYf4C0sPdLpG1ctHX ttGYv0EC57QXNeav+tx4xdhzqxYdjz7xpPTfcef+C80RV/3xOjvteNghhwQUcN20GHj77Rnhjzfc HEaMGCYBc7xOJPU2RkBP0Y4bci4obQgtPVXCN8fjKjzcpS8o/7TJ4Tk24zFwZdspqTBXBbXjKaqv El9JXXorcA14KnExUdNARREeU9Om6Xd333O/CfcHHXiAKfG7b9XdwsvMm7kifjChAOq3/fZhhpSA 77z7XiVtQamN5yiVr73xZp3g+CCN7yWdDtmMx05zlRLrt6Zs8tQZpKN2u5q46q/AFRgJr8RZUrXr blKOb6eNsldeezPMk4IzjhMAF6nNbe24FY4cxjBWPtUEm2vHleSFt8TjOW4Jjw1NicK8BR4pU2n/ zH/rdfpk2guMAZncUdCQHG3gMf5W4mIKAssIm3skFjBPzJk7L7xVzD1wXHAlaDXnVn5TXM/8QGPS jToFPDgcfKDGHs2zYCIfjJczd1lEq0+Zsaf5pnhclKnMolXuDQEVOKfH8FTiLJ23Y8lMr2kTDL76 5spzz78Qbrj1dm3crDD53hjSDEcDAVVPNQGcKaiKKDVPr1u3Ljz08GOmAFz71TpTQjdiKvF4asfT OA54bGNq85UozFtAerjbTZI2BFXgGvBU4mJGjBVdNFZsa3IVPDaZtJEK+YQJZM1wGGxbn2qCRh6X qQpK1caVRozbYYftTcZ9WWMY8zi8xDik8ziG+tdjo5/+gszNbZKXX3strFu7Lo2FJZ6iTFVSHaVs ru8yN1x62VXhnXdmaLN4W5MLnS0GSvqmOJoGJticXrnxtgFueXwvPjnNrQlCodaO8cReytz2OJLn 7io6j/O0xOMmPA8jvBrmaT0u9xPmeHBjquljaBvfdkteSeMZVQlwMC9IbrsbmNyN3/EQXo3L491d hcEPDv8DDuN4oy9+87S4O6mjFWES3wgyyDIx/tJHZOzAjfreAoniozuFFBGFAxQGAx6wWEzKwqEQ fDjee5eEycuvuiZ0l2A/VScaTjr+2HDYoRNtF+C3v78yPPjQo4HrOZwWOfCA/Q1zvLPv93K5u25Z Fh8GSiZrTsJgVxs+eXt84RYcBljiLNzTpwwoiaUDt/11Ljjn6TzeCu35dIlvNOT47d66wsnHTemK ITltBV4Hlk05UbZ16RzxOE2Op5oemojz+AyVOeGr4ZCAju18Y7Gy91572m4Q4ZHmuNSC/Jivpymx V/OP6RpzLehJAlRTHpcoLXH0xsXIPnuN1U7dOJUptTNBOD3xbRPVkXAfsP9+4ZwzTw076cTRxo1f x/pN9dhIJzsMZYa4Nklo5Y0Bdh8O0oKTPE2KhZoSFJ/5CYIvjW3Ch6CYABqnTX8xfDBnfjj5hOPC maefEi7+0UUmUNLe+bdj//7hmCMPDz0lLHtGRdl8MPd+pQw9zm3IwRg9sot+UZQ76MTOgWGMTmsY war/nObW9QWmmCH8mPHe+zrJMVP5+vsD5Cb+p37jdICHOthBi75jjzwibKdro2yMQxkwXCNyAbK7 rr4dMXVy2E3XsqKJ/MKd15OlgcmtTBxzLFikku+2vXuHo4+cGlCKiQkNeKDVsND+5PDyc6LFjb9b 4fwgDcehOYW1TtcDKQO8LfCkhOBarSPOz+hECztskDtUx8KnTDo07WTFPHI+GRGJx17efKzwMLt6 Rb5J6el0Gy3KN+LxEiSfsqOuLD/6uJc9gTlucOH2PBxLMT4w5giPGW9/DpTZjs/xwKOqKUISHuLJ n789dh9t7ZN8wYXZVkLjqScdH6ZMPtT8KBPmL/hQO/fPhsMOmRhOOO7o8ItLfhJ2HzMqPPjIY7bD evKJx4cLzjkjnH/u2Tox193qIb4zFscsEMXsGUvjGJiX39uml6eoL8G6cXjqo3h3zPiktl0CqVyd bDPkw48+SvUgHAVABKSo0PeKNk0WfpjgUj8p8k78cL/xGNr1Bw0N7cH5nvHY02ED6wZSjBz6QwZP fCQzSQfCmePw+jE4AaK8u+eBh3TVryUcf8yR4e9/8qMwedIhpiCLeICMOFvxVbjptz2lVD3q8Klh gMZs0tAPrG1Y+cpD4lwrHill4HnnnhmGDxtm47vhTjR6+8tpjPEokcv+AG7LRzanH+i3X2gTgnKS ljijHd5kJud1s7d0fNw12oWngZ5GVHEcUXX019gP31gkKUmqC8s9yzlGQJnXReRRyRuAu6jNeT07 LbQTz5o+5Ol9TGiQ3VKO5FaUNWszhFEm7NxEnHGswO0ZNuDJ0ymCOItXocG3x5jR4dB0kqwYkp3w PDO5C9qEE3qsvrN27PGMJ/RDk50cTumRQZl7WnYbjOAc6TDe0K/ieEmWvIXl/IJ3Fmbf+CHfJ556 OqzQdefTTjohnHf2GeGHF5yr9sw8Tt+O9PlYEVPFcufjT0Fv4it8yY2Px1aWTrEOCcMYDxvoTHWj COIsXnR6ObCtnVlq4qtxjXVLGa0dKw9wRf6U7c76i5L069cvHHfMUbZBVNSH4A+W8vis006WMqGP lOHitZAYjlQfcc4rx2fIIh8MeBrohgaFxXfpHCrCM45wnZ75/6QTjg1bbR2V1TmO3A3/3RCOrPis lFpsDjJWEObt2OsKWqgrN8AUfVyBTivxeV45jylv1eR4crocjniqu1/ffsVYoQwSeSUfIjx+npHI 2m6i2+kzO5Ujnx8pm7f5cm7L6kaofRyNfPjaFN2s44bpmQooop8UacmjQl7kSzlWwBs3tBVOosb6 Ldiv9pLKkmxwuClcGisI56T61dfeHObMmxvOOP3kcPyxR9lJdca5BjzQmeUd+2DJsyr+GJ/6XhoL UgUYaBtDlaP5C9pOSaN8DAEFrxqpaSPYwEHmCEnlbtLw537i3ORhjtvDqn7SeBzuKk6HJ65qSJfH V9NW4Rv8lfNlDXFteTyDasbA52HNClQltJoGPzBVuKrf0zEK5XGE4yfvcoQq6XKa3AY+cT4GVZHF 5qM4/fcOB6Rl4jm5H2QJm1sWRKhgO6VT33Q4k6mcwgwPHezlV14LV193Q9h14KBwyU9+aItDy1Md m4Xiv/zb/x6u1E7xnlIS8X6K5SUcLNI+mD0nfKkTLrzdwuKfgW2jJhw6PTsIS3Rth3uo5MN1JE4p xN3ZzpaOty9664oP96bnzZun+6rbGp7PdE1lxcpVYecBO5qwy2mLgYN2DtvpRA0L+KVLloWVKz8z XOw+kTf84v0T7tMzoGIG6GoWkwz33V3o4o2MlboDv1RvLnB3u7dOwyAEd+3WXUyLvLfE+kD3ei1C lyxdpMVm3E3fUZMuWnru6Hf6Wu826YTVcl2l4V2G7YRrjt7n4NrSLrqiwaBPuqW6osGd3JxWJk+M 1VV0Kj+9B/Dl2rDk46Uq91caRLtYGeCL72rHJUJsE6SnrF/o7aglS5aYzbHqAbru0atnLxUgHj/l +hT1sPXWW1k9bCP6OCVi9QwSGdy0P0QOaFu8ZGkTHgtGgGUTIkU0qQjmAfdHixaL5o3G//79+ko4 2DoM0ymDnXbsF/rusIPlsWHDevFupe1W7qiTPLwF8fnqNRJoaAc7KiNhR4BRGZnoiOe9oK9TnXay iU8555lDATQqLX/sln2qnRDKRL52JYJrRgJCcfCWrlr2FF+oT3hEPPVg1WN4RYN5YGcna48LP1qk +/0bw85qX721iOBkAmm4vsk7R+y6YnjviLJ7XVMOTmPQL9Zr0mQRRhvnGDYwJl9qB33R4sUSij4L 22wT2xHt0HEYYj6iBV5wWmO3wYPDrvrjqgdtr4vazWe6HsTVCXZ/evTY2tojdSAgKyttnfeXWARz LWyr7t2N5xwp3rhJ1ytU9lK/jQchspOuYNAflhqv2GkeuIvauXbeTdAsiSObxlHR48TOjcr3Q/EQ GhEguZ6EIom+Sjtf8dlyvY/0qXizUwxXO1qu968YL+i/2/TuFdarjT037UVdC7zL3sViN697965S QvBelY16ajPx+sHz018MN912ZxgypMXGqp56Q4ACQSKCD2MJ7Z06pN+ymIAO6ot3HGjL1BvXdgbq 2gWNnjqkfQHXS/XYt29fE2Tp71zr6a3+t4PePqLefDzupPGR95EWLllkV3oYL1mMxnEx0vMV78Bp POmtuu+pepujkwyUjbEMQXb1Kr0vleq1r/CjyAR/ZLjszNBuvvjyS6P1S9koAOFpL9XxJvGackQ+ mMP8lIl2vlxCOXQwjn+kNk24NQJ9EcAPOWiCvS8ADso4e84cvVW2Rrh7Gj9ZXGPe0s7h9hr3KRf0 0L9Q+q1e03pcJF/GDsb+NeqL1MUS1flnKvOugwYW9UIfo85QGnMNhn4Ez6EVuqGnn/r6Ep1c5DTs Dpoj4BOGuEWqu8uvvNYE+x2234FQ6zcWr/Iwd9I2Fi9eGq64+tpwlBTF/VS/4GJ+YXFJW+2neYA+ QNtBCKb/0WfXrPlSJ7F6qv3EOYmTVbyPYnTSroyXakNKx1tgCPixXno1nHKSaC/2ihJrqEadnLRq FgW0pfWW9xqd4qSP00awoY3BhGtn9LPDpxxm/OI0EW3VrlkKh9co8xTthDdMUMrQ/qGHdyjiG4Qi gLrRuAnN9AXaADzlzSrGY+ZlriUeffgUpR1gfKa+eQOF+qKvs0Ck/zAOxTGzs/WfONesVBbICf1n NGZaAABAAElEQVRMmUw7eFUnIOA/7WDA1ztpju6iPtjDcDO40GOYsqkPZIaPNWbQBjgxSBrGNOt/ KisnXT9d/qnmlu0pis3JpN9FtPZSnXl/gK+8xQjvmA++/OrLcicehlkNxCrBh6GctIvFGhfhHyeR Buw0QGMXb/XFV41QVvO2I329s+qbk6y8FdVPcwQLx5W8ISP64RdzBu3N0iLHIc64rfLGsn6itibZ RXXOtWsUIss+/tSUWsyl3mTgLQtsyrqDlPT9FEf/g2boQTaiPTAGo8R3hQFj4XLNQZwisDHgo8XW Boo5wdowuTS2I/oq71khW3EaC1lEBbb6hn3MjcxblA8Y5qg47qZ+rHaEod6szW342uYoa9MqQ3fm KbU78MAHwLZWu7JxEI8M/Wut2sFbOs3I2ImcoeYdxx61W65TUr8oIumvA3bayeqMNimRLqxWn1yp 9rqzwr/Qm1smf2re2XZb6tOyKD70BfrwDhpviGQ+pU6Q9drlscrCeM7cy1uA9OVtddpygOQelDXI bvBnqWSB1as/N+U6ZURejbKbZE+NR8g3zJ30qXnzPjDZlPZj7fiLtZorouzH+2TkEWfG+FYhb9bw Rh/yO/xmw2X58mXm7quxDR4xttj4KRnZZiiqhX4tni7+cKltwqD476/67G4ydHyDiLqjb9ogIwv8 4/bZ29YG9EsMtxM+0bU45FLkDsaJdZLJqF/4x5hOuvdnfhAuu+Lq8I//8FOd8O5uOFgzMF/QPnmv EkN9Me9sVJq1mmc/1TuEyNDIfR/MmWv08ewBbYM0vJXUW+1jyYIlks/XxbFHG2l+0pT6Yd5Efkbp zgmYATvvZP0HXsSxQjzWuMlYAY+pM+saRhGjdXWs4M04rT+Wxac9aJ/M9bwlhHzFOEp99Fbf8TZK n6RcyNPUB311ucr2mdoe4y/td63yXqB1Ejwt+Zf6kqgAxzLxytZC4g/KQ+qY0Qked1Wbo62TJ+Mf 89pOwruVeFSsPahPwXoXoN/SNpEHaVvMbwN23Cnw9mUc92zAtDbAHIOs/cRTT4VLLv5x2H/cvsYr 6pj1ImMC4wZtm+dOkP+Z38mDvg6/yIN53U79GxVSVmos4ykDykY56Hvwj7nK585YH1ljtLr5Lj6J H1AGOb4mb0KK+OBNx9mdQ3lhHKHDYPufp/d0nsZhPdxtD8/T5e620ns68Di82znuapjHtbL/FEVR TkQrhFkARHSUEC8wyR0/aTHux+34ctwOl8M6nFe7wzus5i0bMklTII1ZWVO29pIrDAyoAplTRlf1 Ad+QJsxgY6LLB2jLsbOKpf90GGugpMatzvTgo49rclsU/tMvf65dnF3VeXXNJOEZPWpkOPWE48L/ 9n/8X3ZHFUURwi8dcvpLr+g0w0xbhDCpTdVOJbuVLBqZ/O574GGLYxJg8GEiuOj8s20AYKDkvYTX 3nhHu84jdFqjV3j0sSelsR4djpw6OTz25NNh/vyF4XC533//fd2RnxHO1270pEMODo889oTeUZph AxmLAiaEs04/Ney5+xi7S/+8jkcjAAwfNiScfcZpcn9pu9pz9f7SmDEjw4T99gv3P6wTUhrQ4SK0 XHjeWVKCjTQhzfmJsMHgf/9DD4eFCxfZInHpJ8t0v717uOC8c8LgQbuYwPzIY4/b0XSUIP00mXK8 dkhLi/j59ybE3//gIyaYbNAgz/WsqVMmhYkTDrBsirqSD6FiqQbc+x561AQgFheL5B8ogff8c86y CYFE1HtpNIiuXqV70ffZJMvgvkgKo6k6LXHMUYebMu9B0cMkySD+pZRQ20sJc/yxR9s7QVHgcJzi hsqMoPrY40/pytG79oCn8Vj8PPOMU/Qu0u7iWZxYoILOUk4bkS7aFULdg3rzZ6aOmQ4aPDAcf/SR tsh/TPelUbD8UhM+As9zusL43HTq66swdvfdw/yFC21hgwB8/tmn22kGprr1Ekqm6eQIbwh11+Kl mxYMvIfSTUJ9IbhCjLNGNu2cN52eevpZa5OUjUX6pEMmBu6PMzlNV1tBCIEPD+hNnq3UVo86YopN vEx0GLouqJnoFnz4oe5p3xfenzVTAs7yQP+4UO1yOwnYTK7wevbcuVqs9TABiEmOnUwebsYsVt3w TgCTPZMgE+NZ4iuTJgbePKw3nFAsLhAvyPPM006JbwokTlNE2goKibvuvT88+fRzavujTeAF/pQT jwsL5yyy9yTAiXCxSAIEeZx60nFa4GlHTuEIoyyEeQ/iI9k8Ujh86FCDQfCAJz5sUX7NyFpsrlK/ fcKEYfjJ4m/fvceGY44+wpQQjAvRKIdWYw4xmtiVL4oO8l0sAWyVxgoefjzlpBNMCbRw/ofhnvsf Cm++9Xb4yY8u1AnG8WHOB/PCvfc/HN6eMSP88mcX22myl3Xt8MbbblcbmxPu1akJFKT77LVX2Hef sRr/RAcNUea1194IN95ye3hv5izlKTgJ1OP1rhV86Ka/t/SezrJPPwmzpfSmPBMmjA9nnnqyCeYI iZQXhThvNK2QcmLMmFHhEO2u8R4X7Zu6nnTIQRr7DjUl8QPq77SYKYcdql34gySwiI+QozpjYePj IotmFN4ogeO42N/GoocffUxvwb2tcXGMKYoefewJ9YMx4Rc/vzgwhnFCZx1C/3o9DC/7KPXz8fvu Y+tI+Ishf9o3J2Ye0HiCggO+L9KikdNU56pv8ch0rC/S8Bf7PzbH1J/WmwSc4tta/e3d9963Nke7 Y1F0n+rnFV1dnKIyn3jc0Xad4elnn9c00CU8/8JLtghmPGYeQOnZU4v7O++5z4ROThYtFx/hE4ol 5hvGxSOmHha4HvW6ys57CMtXLDcFB0q+D7VI/dlPfxT2HDNac8Mz4a233rE+zVtJu2gD4bRTTtKG Q08Joc/qiugr6JbthN7c+fPDoo+WhD5adFyoky4jhg8zof8mtYcXNZYgZLOw5UrvCccdFccJtR0U Dzx+e+Otd9g1X8ajL7S4pD3Qd1FAsfjgpMLQoS1SaLxh17tYSPTu3Uvj2Ie2cN1eC78PtHFA2r00 dp6kuRTlMWV+dtrz4dXXXpfyo5u1Oxb3p596kikc7b016oPKxFQctCXG5YfUFuZqnkT5w/jDm3Wc fkTJgxKAumee+2D27HD73ffYQuqoI6YKIf2UWZ5d5ljW++5/xDYoUKKiNBo8aJBOIRyh+QJlZ1Ru 8WMF9z/0iBQSn9iDw8xNp558QqD/ojx/UHHvzHhfY97p9hYMi6vH1E/emznT+hu85kriqWoD8BQF BCeGXn31Dbu+TNtisUn7ZKF+/U236a2GmRpXH7UF3egRI8JEXSHaoDriH2xhMTfjvffUT58MnTRG MW4tVTvn9OpJGgtRaLGQe+jhx22hwljMGMD1ENrYOPWds884VX2th/HiI7VXYFnA9uy5tRRMa9RO tfmUSfXkHfnHONrZFkr3i9f0bxTfizSeDpIC/fxzztQCbztrc5ThnRnvhQPG7xfWqq6eenaajRkX nHuW+td7kn+eUrv92hSq9MsTTzjGTvJs6qx5KGan/hX73933P2jtcqL6y4XnnR0+1uL+rrvvV799 XX1mkslD8IH5kv7SU+WlHGwgXPLjH2gRvr29PfbEk8/aMMn4AN857cGpMNK++tpb4clnnrO2slX3 rXX18H1blHlbtHkRulI7Yu7hjSrGJzbFunfbyhbX++y9p42FzK3zpfR+RDLAe5Ibee8MNehs1cMq tYuDD5oQTj/5xIAyE8UjtUt5v1ofT5Uh8zGGTZgwTgreo21cYSxlEclph2M1B0E3BYJ/T4t2+iGC wF33PmD1ctLxx9mYw3yxQhtULGhR6g5XHz7mqCNsgfqBrk8+Itl0nubfI6YcpjF+dnjjzXfCOWed ZrKpy8dqLDa+PqzyvjfzA6N/hfocbyEde/ThNm/zvtsTkmXh0Rotwrt37W71OnLEcKOL08DML3Gu 2mRKM/ov8waKct6inKHTwttorP5KfQWl1vE6GcSbQmyaPKA29fbb78YrpWp3j4q3+++3r52KRkH4 kN6UYkMU2e8LjVsoMfn1Kxb+nNCZNm26jT+/0JyKXAvPpr/wis1ZnAadO39BWKRNEq6qXyQZdJh+ OIS2j7xGe2bu3U5KKpR9KNE4rYycP1V8Q0lIPshAbHoyDkx/6SXRPkj0/cBkYt46fVVzDUqQwYMG arNhrvWVIS0tOnl6pi36mXuvu/FmyaPqI5JLGQ+QKQ+fPCm8+NLLkiFfMjkJ+QX+IC+hfH1E/Ynn Avr372tyzYOPPColQ1/bDOetTJ5JYAziYW+u4C9eusQ23C5Qn0XhTadbpnIhp9jmgyYVZC6uME5V 3sgDyHPGY8HZuCkef/65nl6wlk3fAEvjWEEZucGhZmn9nflk8qETw4yZs8KCBQuNbyccf0wY22d3 W+cg3yErwx+U9Eu0ltp77B62tuBHI/qrrJMPO9T89oMsi5ZK3mwJP7zoXJujoEFVYAok1k5rRN8y KcxRGp+gtrTn2N2tX9Fe6E+0qx70C40JPFx/LCcqJaMUBrlKf8h/vGOLPEsfRFm4RHLm6aecaGPc xo2x3HAAA/zTzzyvProp8MQDbYN+yvjJOpK3xOAVfR8+/0Qn+2nn8It2woYnG7so+Y45amrYb999 Lf1rb2qcevpZlTG+p8fYftKJx2pTeojyUN5MEmYKhwd8h7ZoaSUfO32RXxpPnYFExMBYGndju5uy OAK3iWsrLeFxgUPKRjhPt7n4mLJ1Wg+v2o43p7kKY35XpDSNzAJBlCPL3RlYg7OaxpmVM8oTeJz7 sfM8PJ4wdwOTu92fpyMMU6VlkzpJkbZMQFBS2HgqJS3jSxfRnn0MRciLxnaTLToNSR6R4o2cFMbg FPHEAHbL3pXwwo7EXnocORoHlk8J9t13L1uE8QgdE7ErKpgQhmviQPieqYnyV7+93K7B0PF5y4D3 jYBHucBOyM233RleePEVG9Q3afHEYPDYE0/YQ2vva6Doq+OvnHDg0bsFC1gsPhjuvOsewa0x4Xu9 hGuEN67CzdIExUKK1/efeOq5cO99D9rAg4DMzuFd9z2gYnayHYOtJQCu1M4Y2mx+tedeDfwoqUbp EbWxe46RwuF9LZQX20Iu57EJPloI/uZ3f9BEt0YnqsZoIbuLKQqelZCH0II2fI2Eaq5c8GbHWxIo +mqyZHG+WoLZVX+8XhPhGxK+htvj04u1Y/Lb311hCjSEfVPopRphd4LHXq/Qezk9e/S0yb+HFr/X 6sQIwgACPaZsIbGeXnnlDR3nvMFO4TCBfL76c1PyMAjzIDGnxVjM7ilFzKCBO2vQfcLgERzBGRtm xEXdLVu2THX3BylDZkcei08MxPckHnvLS60kUQ9hChEyysUC4KVXXzVhblhLi03g6/TLR6+/IcHp 6Wds94ZjEOwecbUDJSG7ErQTFkx2l/3u+0xQhMZpEmp+d8VVlm733UdJociD2X1t16DgSCyI9Qvq 5oM5c8KvfvP78IEEUa51oeREMfLr314W3lX7pKycFrM2LXdXnUZBOUdXpbcW5ROdoEbgoR0hJO06 aJAJw9dcd2N45fW31Kb1QN+CBeHff3+F7W6M3WNMYPHExItwQxkQeh/Sg8A8EE3cXnvuGeZL8cTi H0O+KIqWiMbtt+ujRd0ACUEvhBtvvs0UZU4XsNQt/F6nu/5MoJxIgnb+MDw8e4f419Kyaxg7dk97 h+dqtUUUNCyCKRvtCLoRQPYSveyCX6e2duvtd9tOD/nFpVj6agJnMXKnhBwEqb323N2UXZeqXt7U 4p7+Uhroiz5IjQZ88R+T+iDlO1bKBE4A3XDz7Xpw93YTBGg/nFZ89PGnTZEGHRyZZpHKYooFMGEs qlDkdhU8i7NuWuh06Up7prZEszKGT/RRxhDaRDcJ6gjrlBuywIPgRSreseCU0B+uvrZQhD2sdslD wOxg0eY4JfIHXdHlnaXddhushdkbUoy8bAsvcPWRcPyKlAYbJAQVO9yp/OTJez2Mi+xYMt6ya8rj zwi88A+l0qrVa6ycPB7LAmR7KSQYE2l7V1z1RwnK74eRjF2qMxZZv7/8ShNk4/iQ+KvyUM88KM0b HTtosb+XxgZYc43Gg5kzZ2X1FflFHUEjC/1/v/RyE4LHjBxp6Wjv8BEECHIs6HncGiGezkIfon/D AxSg7PpSj+zSovSgXghDyYtgfNU1jItv2q/p0Y5QJv1GfYcNha9VVt4xuFuLu3ulkAI/O9AbN3xt mxNXqh336NXDxu6dBw4IN9x0qxTbT1gfQ5BkA+PxJ58Kn6itszsPj3nIlc0BeASHUIR8rb7WFVqt 7fh1Bm+saqty0tdRtNA36FsonDhNiiKBOYoreJQZ4ZQxqs/28eQnSjAUVl1F9zD19S+laL/imuts TqNtvqY2crnqkrxRAiIQ33rHPTZe0zeKzmPUUjNuGJsYJzZoc+Bu9ddb1ea2tbbJ6cY7NAcxX6A0 or4QqikR4wOKAGwrmKFTHxEuYG7QGMPj5Iy9tHN2mm+85TZ7YJ+TA7Qb/uhb7NrvobaHkg3lH2Mg C1CunjG+MBczzoKbRc61N95iJ1U4kcwC7uo/3iAl2XSrC8Y35lc2Uexag7K5XvWJrEGWn+vUGe2I vs1puM5qRxKmjHojydybwi0as+65/wHxuiXsvecetji+SnMi8gL9ijb4qZRCLLx5Bw7FFwtW3mb8 g+phjhaKwDHuXHn1dbZRNVAnD8ZqjN599BjlrV/2s2zL9mHcUBjjCg+1X37lH035irzTQ0qRP15/ s72xA17kAU5+0G547HuBTp2grOHaP6e4fnfZVTq1+JH9Ih28RcHAOGQLe80bbix35blBSmIUuSgx 4DP/eEOIR5tZPBLG2Hil+tn7UjSAkzbGXIu8wimzSyVHccJqjOZF2uAz06bZ2MCJiPdnzQq/vvQy 65ejGQNUd5w84Sq2G5uDzBOVjfD60suvCs9Pf1mbdENtk4fTEchrUYkcT5ehVGBD5Q3NGSj5qAcU r7wTiBxm45jKaLOF2jD9jtOy70pOe1T9uvc2sc/R7hknUPLvIqVcQQ8dV8bavtok4yD9DAUUv8h3 zXU3hfslF+2sNMhEKBeuvv5Gaz+MY4zBKD0Ze5hDWQRz4mN96kv0TXKg6TGOcwoMhezt6r9s8HAq i3rlxNhvf/8HneBYbjzeU/IqStGrr73RTqgx1/xGsiAKEE72DNmtRfLwU9r0eNjK8rDGtCuuutba /R5qU8zTbE4wbqBYI+/V2iRkjrpNYwFKAq6QIUN8Ltn6qmtusPaOzLeXlAHITYzNsAdemYymvkDd 0HbYcOPB9ukvv6zx8xlTknDSnvIg+/EQNW2ZPx7G//WlVwQuCI3VvLKdFOLXqZ8zBjJXiTgyMT6B l7EI3j+l8QB5VZEWx1yAPAhfkEcHDRyo+u8Srr3pZrWjF+N4rbSrpdwgDWNYN04Nqz7Z+Pmt+g1r mD1UNmRsNr1vuf0uU8Svk7ISvDwujcKoj2Qq1I9shDL+03+eefY58fDzMFA82kq4GQef0dhEGdfp 5DSyF3BDdpO8Jh6iPKHOFiz80MZY5PtHpKAeNCDxWBvdvGnJGjy2QjnFI/4Y1xkjGWfhL/XBlU42 ZHnvlZONj0up+K42QFG40b5om89Pf0FyRy/7e1dzM3PLPLUt5jXWYPeqXhiDOZnPaZr1G9drg+M2 6+uUAyMWmunft59tdO2iMRy59LdXXGkKUxS71B9rLk4AMgdwKuc6jcV3qg/QL6KJiEwyFIG0x1tu u9vGFn7hlJPXKHaQlWO5E7xgwcG4guLOTjyKKMYp6uMWyUBPPP2s+DFGa45R4smM8KnGE9o54yqK 5ZHqI9DFyeVLL7vaNnjmqx5Yq6CgJ90Y8ZO12HXX32JtGvylyd1l6HfjEl9SnXjdxD6RAtsmqgrg hfLwtmzHmMd7WuI8HDfhuZ+w3J/H5+G523G7DQ5MOYFEf9NvOeM1jS4CQZ5nkLsLoHYcEOxEY3t6 t5slrcbh5y9P7zirsODLw3I3cabEMEerjwZMx5riPNMqaBxalZFrFxzA07vt4bKrQRF3DJX8ZYIw JyPQGG+t3TM/ReE0AcniiAGLY6E8hoYBz/j999Vu8jG2G37OmadrR36u7RYxCSHYc/qHtyrY7UEL j8DJjhOmjwZC7qEzgXNU/kTtZP0Pv/h7250cNWKEdgPH2WA/SAsUdsz++Zc/lwZ5LxtU9tGJATTG 3JnnbRcWZ+9oZ4aBiDeUTjvpeLvnzmTNMWVoWanJnt0haEKpxUTBz8sfJRouuuAc7f7tYnVU8li8 UzkQUiYedEA44fhjrRy4EcqYpDAM1ODligj5HKc7t//4i0vCuWedHlB+IWjsqgUlp5uGyGaBh3D8 roQ3H8TBA5/RfjMhHD5lsuGBb+yKIqhwSsUHPfKPaaLNYhFBi+OmPBb7A5Vn/H7jbKL/4w032XFZ TkxN1XsiZ51+ik5T7GuT5zvvvBeFMsOmjzULDd76t/fee9nJFHjMHydm2MkxISDl78kKG3L0x5Uq drq5pvP3F/9Yu9JH2hF78h2q3eTYeqKSYpJ2zrhKxHWpE7WLcs5Zp2rH50cm+L2pxbgt8jWRI9wh dP7wovP0XsYU26EcNXyECWTQGzkRKXE+sWsIDu7gH3f0kbYLca52BXnPh8ka4Yj3tlAu0sZPOPYY tT/t+GvXiRNRjpNTFbCGnUSUA6edfIJOlJ1t7ZIJCkGcMrFzPUHtllMDEw86UL8wcYAtjFFEotTg H3mzq47QPnnSIeHHF5yrX40aEgnXl6sVR+keP3y4+O8u0i9CjLTrFwi95FH0Szk4njvp0IMkAHeT wnSEaD/eTkVsLcXLjprsOelxxNQp4aADxptwwGmoZcuWxXakwrHg5zoM9XOqdoF+prrieujdEgoR 5hFsGGrgLm2VExbX33yrtXOUFCykeDNr9gdzbOcZvjvPigIZ1e6jbcV8OTpNnZyivspJkUGDdjFh lJ14rhhNPGiC8pHSjkFKZogUXgcfyC+vSaWTJv999etzQxXOTh4n1k4/9UT7BQ0EfYw1Z9nj1JY5 7Qccu86nCW7UqJE2XtCeORF1+mknqd+ca22ek4yMdVxPuPbGm41PlJMrdvvuu7cWWUvs1AzjFzv6 XAWjrWO4Ctm9a9dwtvoZwr8f2SbOxkUpfn1c5PQM4yL9hZ1ZDAIiJ2sQhjnNcLL6xH/65c90wukU nb58Uwuch005P3RIS+BkxlCdjkBRjnDm40k8Aac2q/EEYe+oI6foxNfhNjbsv88+2jFcYb864nx0 TuGnjd9y210Wf6FOf9I2Djt0YthHPGJhwvyAgEoYJwSoT4TGIS0tdpoLPw9Zn64+wik3fi3PjpH3 31GnSI6z+YDTjfzaXMtug2xc3G23XU3If1bXCNlh31fXEzg5xIKVX0T5yQ8uCP+k05m7Dt7FhFkE SK4woKzcd6+xpnji1CYLzMmHHSJBtL/msz7hZLWtczUvXfKTH2i+2c5OIVEHHGlnTONk7P777mP9 mVOeJT8YizcKrr/RTxvcT/V+yknHhZM039Fmhw1tMeGecZ98UYihlD3nzNPsJCctnX7NCQnmr19e crHtCvNLjZxgve3Oe8KHOsVLWbkitbfKwfx1rwR1lF1GS2rA8LQ0jJvxZBinbVCWn6cTjTa2n3Ga TjiOkKL3LhPIOblEW8Ow0GfcOkjtLSr8IkZw8UgzJ6w44XGO5i1wnXvWGWHw4EGmtGFRAhz130cL UU6qcmrxp3/3Q+U3SieMHjXhHcXvYeQnxQaLc5Rs1990ixZUX2o+GWsnYznxx471I48+YQstysAC 8gLNT5MOPVhvmBxuJzq5koVyf4z6KadHjzp8su1U7zN2T+OTd25GZviGooDxmz550IQD7HQwJzI5 EYDhpBW8QKmz5x6jwhmaEy7UqeAzdYJriU71LdTYCM/Z1GG3f4rG5rN10vMw0TR50sG20RJlo7w2 VEH6z9i+zTa9w5GSA9h9J39+He2zVZ+bAor8GWc5YcjVOk5PcHLsn//xZ+HoI6bayY4nn3nWNmVQ mnCihw0pNhUWLUmKE5DIWB2oTx8xdZLNWaZUUfgOqmtOYnP6j1N9GE7r0Z844Q0fT5aMxclrru+j qHn+xZdMCTx48EBrN5wce0DhKD5uk9KDK/QXiUc2BkyaaBuGm+yUgKFXCy950UWnVPiBDeb9Iw4/ TKdST5AcM8lkQ67jXK8FN1e0WqQ0ZcwUkTYun2Hj7nk2Z6J4ZSMt9kMaP/MdsmQ366+HTz7M2hKP BpM1st1XX66zsZH3CpEP3IDj0IMPMqUuyklOMZ4sGW7hokWmmB+n/swYTVu/QCdXOF1x3Y23Wv4j hg3ViYgofw6W4oITX//8j/8Q9hunU5tqa26YP1FsIMOITOW1g50Opl6nTJpkm5HPvwCPpeQRj/m1 OJTMvPfJydSnpaR4Rr/eeuLxR4fjjjoiHKZ2hgw0VuMmTyNcK0XjVprbGYeh80y1WX61il8OfU2b U1zhnSqecLWKZwY4PfdPv/i54XhNihxOekw+9BCT+Xg3DnnDrlSrvZIG/gzWmCpWMTmZ0nyy2vtO Uhaj+DlJ410cP39o89IbUt5SH5gXpQTn1B7yLuU/TeMcykvkRN5CYr3AOBNR62q2xknyR+lEftZn kHV1ModNUa4PM1Zya+BHPzhPuDZoA/t9y4sTgPtxSlj/6MOcHp0guQ0+sMnN3ER/QdHMyVU2GJjX D9c8Sl9j7KJN/lIncn8gXnItj1+W5TQR10M5EXn+2WeEH//wQuvPbHJj5uk06s233mmyFCfHOWE5 VoogTryiyH1HCh5Olx8qGeysMzVWiMdTNC8iS2rqrRgFqNxsdr/77vs2Xwwb0mJvNl2gk1ool48/ 9khTXKIcYU1EAjYE+mu+QrbhxBvKEq7LHXPEFKubn138I/3QwA52cvdkrYku0Pt/vLG5bu16O3Ff ErEpsOl8+JRD1deOCX+nk9oTJ06Qoux5KbPftZNjN2tDDLmOWxhTNVadf/aZNlfSL5irolEhVBQ/ xf+e1nNcmUWJiUzwo4vOs4MDUe4pmUA7QBnF3McmBGOStSVFsKZ8R2sLZFzqmjmAOXMnjZmvvPqG lLCP2a/kIfOwfhjS0mJKJeYtNvz5QRvkM+Yf5gza7v0PP2J9iPGxpKJ0pcJ8Lyx44yZf2yfZsS2i ScYf8TmMo/M4R90R29M6bNXv4diOH9vhOmcAThN2DuOwGWhr55ZcPfOMHEuHMhAw6SA4h3diHafH ub25PKrpHB/pHAdheXgeh7sNo90YobDdKs9FkCC1HXEbxWPSYmLO4IgBtsjYPZYkLvpzPAhW0m1b Cjp7Zz3AzJFTFClMfEVxUqnInkUzuxRo+tnNs7xkI3Rh2G09+MD9dfd9BxsEGaRR2GytwY6jkhwZ /uSTZYZ7rQY+DIIkkxvzDle+WKwh8GEY2LlGgo1A36KFBBN0FAq/lvBytmmumRA+W/WZNP/r9eaJ luFCxuCzh/LmegiCFgoshMWZs2bpIdV/MV6NG7e3aax//ZvLbTIhb4Ri8i95rJMIWiyw2DtfggJ3 lFH68BYRhjwx7MD36rmNuVEGISCCh9MqCE3sCLITxc4qtYTwxg4e/PRJ1xJTOgk6LKx4swblA7sz HEVlsGO33k1Z/dE1etRwW8SyG/Kp7vkeuP/+djWHhSW7iz++6HxT1LAAYeebn0O/Rjtor7/1li0c vMl4XaMs+IEEd3YH+CW8lRLw2H1ar3qNVyKckootBFoi2LURdgdQBKDIg480Gk41de/GbouXgIdS e1r7YbdvJ5UbJUcP/fF+AdcCqLCFH31oE/OFqgcULFxDgyfx7QwBoMihEMngZHHCrn2//n21GNur WLCzs4pQ8YoWBJxoY2FuV7EkwLMw7yGhxdshVMITyDVLbQvBA2GPuuN0Gjv0vFGFadGu00Xnn2Mn MdhpZ1Kk7OslQEXyOgWUnCgKL738SlN4cU2K3SqMUFof4zoH9QRvOJXCtQraBoRYz3WaRDOncaBu K1Ms9LCFPrhOOu5YCfrzwpNPPa2JfLXtILNI4QQVBgUQhnaKoX9xyon2ez0Cs45Uc5efPgco/J6j k0+8VcOEPf2Fl01py2kmeIqSDJ7Ybr/s6pgTGUlOMqKf01XAMxmyW3yAroNefvU1UtAsEh272jFm AONoE8cEFLHwyA1HneE/C37eJOH6TbwWULYwYDnFYicpVJkoixBM2fGy/IWPRakfreZUEW0cJTPX cWfPnqe+tIftSLLzxRiJMMLpGNKjtLxTp6y4KssJxce04z1Qi4eRw+P1DcpqDJSFAosTjAiB7Jzz k9OMKyxq6F8Y+IygSTk5AYcQbIsTwXDyiHeZUGA9pf5Fo0eQZGGJUgV6zKTOQJtBccIxfXbvOdHA CaBOGrPWaixw4yRCB+8EvPDiy9rtHG3CK30BmkxoEXrywE/bxLYc9WGn2h4oFVKuGhPv/YgxkhNF XHUjDeXmXTsEwyef1vU2/UNxP2Y0it+N1va7qW4ZCyYfOjGeFhBerp8xl7BA4uoZvKAeR+hUa+/e vS0tinauBHClBEUPGxH0ob4SplHmYJhXttL8gukuG1ob+GcxUSFTwKm+DU7tgnEMxRI7nVzJGyfl G1dVuC7CQmiNxhUEvu3sGpreE1HdjNVicZwUm1ypZAHOu01cJ+DKEUfx6YcomqAdBTY0qjq86RhF fKgr6olNmUWLlmjRdKKNYYztXDs+cPz+Wig9qBM575oyzRSYqh/GXS+nKjP204SLqy2cejhw/H62 8QEuxrkD9x+nazPP2G7uqBFclYm74tBBe0DBPvGg8dpxf07taq4pu6hj6EZWYN59f+Zs/drdUF3/ fDPyWCVC+ccbWYzv/PIiCww7saa+haLrlz//qZ08ghecIGAU4FRwT/Vv+pDWuSVvVDZOpaAE4WQm JzJWaqHF3AW3qFcMuCg/7ZW3xFCgYjgl07V7l6JtcBoNxeCUyYdY22H83oBcRN8icYOJ8hV94hAt uuK8Pcvm7fnz9fi52qbLCcwxvXQKDiT0afo2POSP69HIUp/odM+T4iUKehQEw4a0hA3rIv1ltshs UT6CCfk4bopbmE8jkeE6JVesOcX977+7XIqIQ0w5wFjJCQtkLE5+8VYL/XL7PtvZZtYyyWqcktxD NLL4LsYAnehz3OA3dpAd45DaMNcvGddpR5SB8RL+goNrTsiCjJHUA3RzSrMYdwcNtHHc+UVbs7xk wV/+Dpey5FptfD302JN2RZUTJ2zi7L//PqYkKmS3VFGMs7QNxh8UuiiW3n13hp0aQwaiH9PWkTW4 rvW7y6+2UznMAVtL4cCcNlHyGPMiPIAGzomIpMIw7tEu4cZ4KZI41UKd0u5YwDJ+LF78sZ2Chce8 vYgMgzzH9SdoYFMU2ZW56UcXnm99kNPQnBY7XUoR3vuCTug/8ADNkzp5Ba/5IYFtTIaWzKsTYXuP jUpUxocbb77daJysdkw62jHjkLVji4lzJidslXUK4Z22niYPwbudpaCI46feDNPmgI+f4DeZiXlE Yyp84VQO8hhv5nE7AXpzQ9nBzdVHy071i5u3wcDHW16M6xg2oIDlSQkMfZf5FjjGdcYYTuu/8vrr mit7hXnzFtoVQ97Y4X0c5ASUD1z5pD0OHrSL/fgJ8g91jWHtIa8ptJj/hdquikIPb/xgeNoAeRqC n3nuOasjTuvDa5g2Xf0Ke+phkyKP1Ua8neRtxJCBRN2Hsuyntvb+B9zAuMyUqfskJQdt5cgjJof/ 8//+f+wq7hGHT5bi9nHbpGBzAx5SNnDwdhB86LLzTqFvP94466Sy885qN9t8AcbLYfkre8pPQakv 5qlJBx8cbr/9Hq2NZtv7dZwS5po/vKf+qHPa5rQXXtA4PlObUi2xKHxVQOqRGwzMEZf94Ro9FbJA 13j3DrG/xH4CjBnly+0B5nnodLkTWYs2Rv9j8+hXv/298YTNPZSHnC7d+PUGO23GaTQM/WvMiBGS 31ebImkrtQkUWchSKMl5w4jTZDaWqKzUBfKold0wfJcfOMK4nWRl+ZB/rAESxbiXjOqp9HggiSPr DVpuh/Fwh4wZRVgPw24G5/Gkac9U0wLr+bi7WfrN4W2VZksURVWicoKcqLjKidkAj3E7+uLXw9z2 OHDmOPI8qnF52tztaTzMbfIo4jTI4W5limnH2gQgnkQuRi+wKSiG8m1uADPQAg9p4tTpeOgrFNYa Jmg0sPfqpcdZBw0Mc6VZ5h4/u+ZM+iz5I1wnCV16nHf1atu9t4W+0UNspIcvC1YWtwxCDM5zpe29 S0oGduEQAjmlYZMLRGAMh0ZOGQY1DAMABiGZCZlFAG4Mu0X4ebSMY748bIYWm8UAky2nNTAsjrgz zQ7kf//Vb01AnTt/niZndq+H2mR20vHHWP68jcPR0dffHGtaeB7ubtyV6mxHxFFIsZDbVTjYpeW6 gptYGnba2ZGREoRyIcxqULfHO7XgYTeCXWNgNMXYaZNiIZkQwXFwvfveTHsDgkljN5WPhycZRBDG 3Hhdu2DEXd1fXHKxvc8BrWjhf/rji0xJJfabUO5psXkPCp5/rjrFxDJEGx6zo3i/tPg8gmg81mkA 2+EAsCTD0uYfBj/4R1tBOcYxU06mcMzUJlDlZG1GZbE8sUUgfNHHFuG+C8WkSGa0pU9ET5y4onDv BFuPEj2Mp3nvQqBAUONefK8evQrlFNnwaCzCAA8lr09CuNGi3OAV+buxospLN3RjtMpDCfiHksIN yhV+YYiF4iDVHQ8Zo8wgDViZFI+cOsWuiz2tq4tc8+Ih+Uv+7gfazR8FhKGCh54P9YF6yKky29qC YTQ4KKC/uEEJye4uv+aGEDRo0M5aKPcRLO+MOJRykzvSlupDUQhsvJsFOqeBFPB0tZTJYlAY0tJi CzqP31uKFBbjxSkswRo1hj+NOQSAFwNu+xe9fDl1krfxSJf4mxFs/AbYkGNHwd2CRJfdRy+iywxj XjFRVCYzVjCuCD84xO/cUKcIVbz9hcIIhSB9ODYNCeXaVUTBCI1cpxk5cpgJSyhGX9ACi11yhHNb pEYmWyNCmGNcvFN9lMaGchpFJru7Xk5YpKKYQYDC8Cgj3WGF3myhH6JYZ7ELPby5xgJw2LAh1scs AR/lRVnf1C4w7xLQ5neVAgthnKvx3l/IL2VnbRmBHwUqi0YWrw28EXBRhWRuBmTJJTqpLm+LxneF 0e4B54FR4jmFxyPJnGDhuH1sRyNtt3yUFGxmKLMWIlw1MqP09CveGEPRS1pvf5yWQGiGEOu/ZKb/ 0A4MYfSjApHgoCmaWPfxtEicHQkXpRadUEVQwimLmMeO6zW6QoJCnHkPxcQ//sMlBmd6BbnYNceQ plPXTrYAhBFf6E0U3s0bOqRFdTm6KAdtjEd5WfDEskEDOGJ/KqnTY7u6ksW83rtX3KQQkBkeeUcI px4x1AFFMRs/BaISQJ1YwOLHFnJqI7lhxx1QrrFgKLfZ4EhmG821AHmIlVnxXRTGVRKU+sz/o6UE dJ7vPma0tS/eEeRHGHiEl/YPWhb0KBK83cV6iXRTZYmlyi8WgDmQRSH9btqLL9mJyEE6oYoy34gC LBnKjtdxEwzdzDFuODWJwrmXlMllHVDnDlHaYDMqhJfTD5ys2lr9HsX3jurXQhz5bEni+AQPOXGI gQ7GiFVS5PO+C6fo2KiAKtoCO+sDtHnC3FmayGnni48bpIn0WnID51H5H0rxwHUTFtUztPDl1BMn pVA2c22SXzT0cYY8aQfIBpxq2M7GgHhdDIRVFlDrtpZRmag72gmKV5MDExnwllPXnJpEOWxGwLTd vB4IR0EXS6fSwDqQpgDkOuQ3TgBzzW+OTlE/rr7HWyd9pJBFKdVglN74kXDYuCAArvV20eYCMmNu tt2mt8HTZjHGX+GwDQb5ndbIA4jy3siYI1pVHpcLyQt5kXGUd3p4dzPnMfi5Cky9c0KWuYL84P0u Ur6i3OLaIP0FZXJuaJfgQsbCGJ3Kn83a6I91gSxPGZF/FKIoGBqtojHTmVR3HgwAeTLiwDbm865d wRcV2bGXx3bMyUTeg7v9rnu06bFIm3JvhtEjhtuJGucV9LiBglyuUQ4KAVcaI5UHIWRMfiz4zU+Y DLEGoTgMb3zx5lJfzWdsvrhB0Rw3b+NGBWmoQ0sGbv1jfIzjFGOO8IkPtLc4T9i2vaHjxxJ4z4mN GJ7XMFjFoNRAGfLiS3+wzfCeUgAbbTAyGfO7R3bkslqN8uadSJTIyGdXXHWd3o7c297jQal68EEH 2NzOO15DhrTYDYx//W//bOMw6KCRf7b5qvyoL/oY5YG/Xaw8yC8ZMUpH/jaGZUylbUEPhjmA+T4q PS3IPsiDShxWpX5hmKzNwLeoJGMzHHmWU4MvSZ79qeRZxngftzxL1n8outZKSeqyGplAw1mnn2zj LifwLr/qWnuTk9NSq9XOacfIPP5YPBt1UzT/ctqPk3fbSyGIMtrXisw1lB8ltPd7WwOXxfoOXWnO oH6oPzHHRhJnUkaZyuChbhPrbiqYP/dj448dqtGtYIMDxuE9LMeRu4mvmjytx3katz0cOw/L3TlM U3e5wm4a3RBYJYqMMJ6h+2No6y/pHcbd2D7Cxx4SGedwOZa28gFHM3yk9TS4we94gW9lHAlQTIoR KCVxTAos4BIGj3KEHu+Ta8RTZm5wCozpvPgMOuwEdw8HTxhvRxC5H8s9UxbTTMzsXCHMPf7kkxps dWrooAlpYIltMTZ54VWj50oLd2QnT5poMBwpf+a5aeF/+Zf/Yj+bzu7x//vvlxbNFFp8MHPby4Nt uKE5G/CgBxr5laeLpQg56fhj7RjpnTr++YWEEOQyys7kc+ghB+uO/3XhljvuMqHobB25RoDhODwn BRCWOErMQ3UcL+Xop2nC08Rl9IkK3gnhnZ//6b/+kyl4WOxxR9kLYpNnotG6tdEQr8f069fPdlwQ Wtk1tVFBsEw4nOzwiYfyIljzjsWVV18bFiz8KPzbv/5XOxb+kY5Ko/ASIwCLxvKQM4UhNB0gAYpT XEw+vMvDFQce0uSYKkeEycsnBeoK7f4ALdLMgBrGycDjJyUAsHP3Ex3F5YofygYeTUbw8TqP0PGb kqa60iO+2sXiSsxvLr3MrkFQVwgyZBPrk8lNPgL42CJOmFN5sA2WaNHNtTTC+PUnJh+fEBAsMeDy iZh09CQUbRw5R4BHqGJSFCo7acQvoPXTLgwniDBFvqKDOvSR1uL0MUVUsZgwoi0/Syeknp5rI7er vfyXf/qFneRg8XqV2mDEg0C50XZdjj/uaDvl9Ih2Rq+89joTQqKiyEATvshVWGKlwxERtRorgIwC F7vNUm4u/lDvvVxuO5c8kjxs6NBwbxe94aVdRttViphUMJBHXnfVohzewmN2ZLiqEbNL+SoTrjcA z6Kb0xPkRbui/PFEjO7/a2GIkhmhGZpIrdpWusRVwVrJwKO/TiiFBTdXbZjrQRwFt3zFb9IWO8xy I8iQ1pVz5tbH+pGAnZ7Yr+I4pywgwNIhVOP1fhDrTTQYkCJkohvM8RfyOCKNEMZVOFNo04gET3nh F8IIyr/fXXGl+szNFnfA+P0tDZnZuI6tP+BvuPkW7a6/GP7X//aftdu/nylz/79f/S6WwXKN9QGX oMKMGiX9csd+fe09hp20a8pOt/Me/vErcrHlpvTKkF9EYfd51arPw//8L//ZhKn3dAKG8cHLTB7w xGpHHvoNfwsXfmiPr/qVOoRvM6kfkAvp/EuctS3hiDUnv9wGbvylviN8f5WD6ygcmY/joiFSeb62 o/ngMoZZcMxlk/oOO9Xs9KMsYqcTARIuQUO5g02JSEjmSuv0yA0mKMAARdqv01Ua+Mucl1Lb5G2A +lAXJpjLTduH3xyR53rvUzoRxdtRKOwQ9K1OBG9Ux6yk7IrzKG+Y7aidYTYNOD3AeM8OLAtpr0vK 4TREKst2bE0PuuVAMcuCh8fgMd6meUyUUzc7a6fZwr0kxfhlwYba89lpAL9mpF8SreDihxSoU8YC 8nTCWJh4fvN0iocd6CEtgw0xXEYo53TBthLg2VhCGcL1VxbEQmT1wqmpZR8vk/DfR8pTPWasthr5 QDTtvawnE/aVzMZ54TZajJi4kWRvw2lOpk74+XPmHsa2mzfeJVypEkSdzTmkK4NSvAJSftDAtaCP pPS3zR1FcbKEcuVjp7BENMKPTMGCj3d//u1f/0ebt3lE/r//+rdFVpBh453oKhYt4gWLfk4E8FbL blJI886GtwXGC/5ieVO9Wb6Rh5QNRZwZ1Yn1UcrGn8xnapdc92Dh9ubb+9u1Td7H4foOp3nmq49z Go+TsJ4nbZvrX2xwMAZwAsCVKihuqT4xwvDbuK52w/zI/MHYzVuObOaxsKaNcLqct3iYf1nQmVFy +pTT6WEWlGi3uqZO+K+ykS3t5+gjj9AJtuftpAG/3sQPGxCXG1DE7h+RRZKjm/e1NqqPcdoN4+2Y HwChrdKvMDHPmMYC9DE85rFWXuSb2EEqi4VH0MovhfFO0XC1xyFDWgoeU6fUHSe3X9abUXPmzLdn HDSykLHh4B2X+DjwUhtvnM5lOv21VuMGpy0wNheSxklV5ig34PcqnbbnhO5gvb+zScMI86cBJlhK EY0I9kKI195nYn8hyhMwFtH/Nto64aILzrb3HnmrjNPHLN55GJ5xtMFYcuQGZgZ58CsfGMhYkqKN hMhjC4mwjogIJWDTBINCgx+B4Jf+6DPUm7dhxhYwlHMCZSC/mJavURKzIdJooZy0m0igfiFPdcC7 eNtIGW/zFFEYwTDG9tyml71xxmPf/GI0PEbJhzFciW+gJCvCmLvYeD/37DPsx0V4++lWyYx7jd3T 5g+ewJgk5SdXEjktxYYjJzA5yRzfXxQiIUTGMkMe/FcfdN6KzQZU1JsB+pyksRteyMzTCSDmwOFD dHJRbZJ3FVGUY7y98eMXKHg4BYQhjzjjRtmPGwvHqE9ySpLHynlDcUhLi2SN3e0kNC1B5FmbYJOr j04y8RYpfUCrT+MJa0Py5Qooz5lwwODm2++0K41cL+e9Pd5e4ukBr2NkMk6zo+zm0AAnFf0EPDSy WQqMjZ1GQKJDuX7XxpoYRFg9YlEfkVOJVCNR9YeXv9w4iKNxGxjcHo/f3di529MQhnG/2zE0hudh wOed23HmODxtHtcs3uGa2ql1N43bXKATjF0tIGnbCifO4XPiHR/xuXHYPCx3E5/jIa7qJwz8RR7e 8YiwDBRjNgFyF4D48wCDozvLpIS4bSIkzOJxKFJug8NbNR7BYOkECIaOxK88cUUIhQh31/mlGvvJ dx27ZPH7mB5EnXzYxHi3XGkQp9UHBfOVvbfCmxO8ucBPwx8x+TCb2HiXhXaO8Mxi77XX35ZApetL EmwYwBH+UEIhgLPoigtNIVcaBi2OndLREXQY+K2cips9Z57tlqJN5ug0R+z5CWeuZzDgUB4mKk4H cUwXZRXCzwFyY3NUlsFssYRU7rXyC1ho4qElZiKL8ulL/hzL36Cjj+wSksfrb75lizvuGqNsUXaa uL+SzSJHL/KLXtKTdj/tFPDzyTffcoddnVohvvJoK78KwmkbBK/CqGyU+b1Zs+3RRd5s4SFP8mPQ Iy8Ebv4oQ+SNHloV7Xfee58dd+dI85GHT7bTGatXrbFfcBg/fpzuk79qVzbWS5P/kYTZhx99MgzW hMQ1I3hivIUQmobo+EA85h2dQYN3sesfPALOQ5XwlvJhN7a/eIKH+oUhTKzsmvBe0o233WGTHo8k 8jigLbCpB/itSZ+2wI4wEy+4aZqE8SAfO1oIqi16F4grgM9q8uQBPhY0PNyIggzDEVvbWZOb+mCX hcUu70yw28EVRHbouI72xFPP2BUc7vzzIK79nKnyox1aPYoJ1Ap0WDfhq7oEDl7BQ7u+pYwsX+VF maiXmbPmWBhH1+nvPHj82SqdrlKctXmlv+qPN9j1H65Gcl+cnTPanpVZi31ro9YW4+KXn6tl96Vo n5RPtLkhHyZ+3nfgZ2JZcPEGyNy5C3R0eAcToDjpRDuWLGE8ps3EwrGjHR+V550yfn3lbdU1P2/N g4bwa4Pq4WsJS/xs6tCWFrs2ycPjvK9APrQLHox8broesVQ573vw0XDHPffZUeZizBOvbOfZeAn1 EvhULuqEaw/U6atvvGVvfXGikfbFQpqTBhyxp575yWF+YYwKhu92ekltlUU4J/fmq/w2bolmE5gS lwRuZWWxh8Jk3sKFBk/e1o80mtHuEFzi+EBbigpFFKn7ayH/lHbLHhGNy1RWyvyiTmtxkoS+Aq0o x/m1K6788OYQihBTQAgP2bsB/4z3ZhnraSOMV6++8YZ+zWat8Y42QDumrhGI6Rc2LoJH+UwYv5+d dLjhltvsxwLY8WRxyq+FzJHQF98miWMXtH2pE3X8ol8PKUR5B4yrkK+/9bbR9lVqswKz8iL+0QdQ rnIU/m29X8YbEOBnsWPvRYgOeGVjkNLTjhiXoJswhGDnofFTOL9irNJikXZk/Faa/bSY4Cfpb9LY wFsPCPs2LuqY/cyZsxIudh0jL8CNoMwpKt514v0NrnCxAOWXixgjmbeYN5hrWJzSPhAkYTZjD9cu bF5hrFCFoGRhnJgzf749zE0byusqutl9FmfUXeAvR/N5/Bg+selw9JFTdUVzqU7vvWrCclRgR/5T 55SddsauJ9eQ+WUX3osaPHigCb30SY7bcxoJGK7VsXHBaUzqLxKUqPr/2XsPaLuO60yzEB4SkTNA AkRgBqMSSUmUrGRJpmRKsmXLkhUsOS/3avdyr5nlNfZy29Pj9nSYbs/YY4+D2nLbkmVbVLCSrWBF BpFiEhNIgiCYQAQSOb4HYP5v1/nPrXvefQ8PtGWC7Crg3aratfeuqv/UqVO1T1UdeaLEtWLFKhN8 DifnC59skUCGPoC3/LzwiDNbhMGhI4einrQjrhNqw4U+rvnxOECUyQgDfe41eNmi+E21e14+cOAq 7ZKSgCvbp2lLvEX+1g03xzP0nHV5JVjcb+LjevE1Hs56uUFlzGff7IitHGy1+spXvxbbH179ypfH 9jTOVcJwwXa072qbGitrcWBKH75ZRjauEQYVYxNTFl2f6O90HVntiwGEidv9akdU9YieSdQx2pKu PX0p53fQFoKmujJeoO+nnb1Y5+jRJ1IethVyuPod6sf5epvHLgBhGCkL7Zqt7Zylw2SFt/N8tCHf E/neEBxhGGTlM/cJ7RQ86SM5s4ftbZznxHYj+jHuOQ5TxvDX9qMAoowZO7ElD6MWW/44+BXjDofQ 87zg+UTeGLv4MAbGBM47ZAs2X94ijqGftsk2Y645eXLOGRNX2gi83POf+dwXog9gC/y9OkcER/l5 XtMY8/QzN1VWmTB550wRngv0b2xx40tvr7z6qjjvhH6BPoTxC+2MePQjwpA+jns27mPxjAgj6sGz lzSuF9u7Vuv+YWs3Z6DxxSp0gGW+KPn+gz/3VRjb1DdJL/J8gW2NZDgoGkMYW8C4zmwD40iCc889 p+knDgvo/GzIz3upj4uer3zkpyzJm/6avgRcuMfoMDAAXvNKfblM7eYv9dIUbMGYQ9PBmC2+bAtm NSnn/sXWYN1TXAuep2etPDP3dXfdFQdHM+5g697ff/krYWC6shnPskqL/oDV0eBJuTCKcPYa9ypG CPCnHTMe4d5lPEk5c9+tvrKpJ/e463A8cGcsq+sd94vHnvkeYnzFGJxxIjhzLhzXnvvT2IQwMQhc j3iuySChrfhRVtHpIznInjOJWHUmtrifeKkWZRQNRz/A+HEzOOq5R90wePJFy48JX+4X6BsffEj4 fiFWotD+uOaMv9zmYmxAWXStaGdsXyaftr2Qr/gpHx/aWKPnhsedogAAQABJREFUNF+LpH1wzRh7 fvXr34h5x8v0ogDM+PjHPffdFxhzJuYB9VfUMfpxlT23mBzAqPwnH/6Ixj27dAzBpdqyenXOTxjS cqdOnZper/nYfl2nL6uPfOPrfiCv0FOZfc1iPKjyR1+msjOW4pkXx1OoHTIvo4+g/sjguARc54OH 9DxSO6QP5pnJM+TiizfECiCeKXxA5BE96yg758nSvzNPuvD884v8afP5nvwfH/24vta2MVZAxtmK Kj/PnMhTmdJHR1g/XMP169aEUWiXsAzDuTjoW//4Tz8ifHfrCJLL4iXYiPI/qvkUW6n5MMDHPn59 b8yjsSDPSc6RfM2rrkl7du8NIzhGK17a8OziUG4M/tF35iJE24rCPMc/bXtoypULBrU3dqCIerbA wR+JrZjCpcuCvXTLwNPmUIQta33Wb3rpO1/rNG+pt+QnXOodj68r1xfP5tY+0pgRZ1gylDSHuz78 J6M53XNCy5iOP9afeS1b+t0065j8rne966oLLrjgMjquuH56WPc7YYpVOMhNWiPN1LXlzgxNDSXT 6OGKZJ6sJyImtnrE0yiKwRYlUYdCB79SEwksvUzMntIAgwHIDXrz/bVvfju2NfzMB96X96hKAZ+R /to3vxUW7yf05oyzcHgQ8WlVDomjQ+AsEw6a4+bHKr1Tb38e3LQpqo6VmMPuGAgxceFNB50Bgyze xGzUwJevUjBwnKW3lUwa+SoBZWYiTGe8XfqYGHOIM5/wZKk920H49DOrAOhw4f/8F7+cfvyd74gV AfEw0IOHL+6w/YFDUVkqOVcDLj5RziSJBz4gAROGnO07dsYAnrOJeFCzZQnD2DE9CDiQl72+fC6Y 7V7kh9UcLBnIsX1jknSwLPfhzZtjtcbtGkCyJ5i3TEzeKFM4ebwR3KSBwkMPPayBuN5qCkMm8A8J NwYUnDXCF1L4atnj6ixnalkxb4s4T+BO6eUMIb5qwkPoHW9/S7z1YbDOfmgO5oPOagY61B9/54/E eUg5c9pOrjedNyuHwHib6g7GfMmDhweHai/QG+B1a9fEipHo1tT+6Iz5ihhfFaJcGIpYCsr2OowK PMThpexMLujAeQuFEZEtUky62VbC9kTeCnOGD18uYPDOPnOWx/OG7K677lGbui89qskr5UEv14MV W+AJ9u32CFWMvf18Ppsv6FAnJh9f+/q3dQDuxbHainbFCrWva9slAxzeUjEw8EoFrgwTSs524Ys6 DLRYbcchvJyJwqGnbO2hzXItaavgxool2iVvzDc9slmDIQ2kFi8OgxefecVwQzvm89w8Cn7ix98R bfirWm5MXtyPLLW97Y7vxbYhBmNsp2RlEFtTos3QV6jnob3efMutwuOxMAxwD3MPcP9y2N+efXs1 0N8aD2fwYgsSg2tWO31S5QdjBqF3aZJ6uwal52mwwEo0tp188UtfjT6AQQvnXWCsYyUWkzAMSrw1 v/N79+oBfl9aMHeetrCujLOXvqJrzoCbdhL9nW6m6ILUtoh/RliCN5MNzmrhLCkOpX6PDnVkaxT1 4+wHjM133n1v3HdMhFjhsEltd47OF+A8MM4Z2aIJ5C1q87QfPtXK+Tj0L1Kiq5cdb7sxJPGp6Pg0 LG16x47I9/6NfN5+Rnw9EUPnp7RyDuxoGwyczl2/Powtd6mfYnXf9+65J645A+XLLtFbM7Vr+gD6 Ou5XDp5mbz/1zF2tyoGFTo77ZKsMxUy4uM60Aya5nEdBcaNf1FvEz37hizJ+5K/IYZDgqzVMPGjn GCn4BDZb2DiD6g71LfRHbL/iDXV0sOSl3FmV8aD6as6zYZLNuUjczw8rzkrDVWedGStc8j3DY4wV pkNxPg0D7jvUHh7XpHuz+iS+8kKYzyTTNjg/DSMPfT3GPfoWPpdMHmBHH0gb4wstnOXAhIotRRh9 eftLX8m5NUyM6I/oFzH+shLhceH8D2pDbJ/grSp5YgAgL7b00I55TnFGz93C/S5hxYSS1bCcFfXt G27SgPhw8HJQ9tf1DPu6DJtMADhIE0MKE4RviY/7Zb+2ozyjL+qxtcVv0XN3KCOABtrwsSqTL+dh yAg+XUvOG/mHL38lznVhiw/lQ55+8q8/8elox9z79P+c6cW2CA7GpY2zYgADESsKMJIxKccAhmGc rQ1D0k+zyS0nLo1+1Eh0TWkrM4UlzxcOQY9DmxuDLRMZ7l/OmqC98ozl0/SsTuBtLgeyRr8txYwr mOjMUZ8wR4ZOvr7D4JtnOZhxBsQH3vvumEwwKfminnMYS6kjk8/b1A5pcxxETVvimrINha8MvfkH XxeTD/DetEntVNeXemIM43qx6uGlOpcMLLgPOET6Ma2kvV+GVL7qxzYD+jH60Zu+c0s833nrzD1E Xn5u8qSmPpSHezzaufo7+l6MwnPmnKF+aG3g+nef+/u4T6dN5RyPdYEnX8PjwxKsnDtLE1/uI1bE cL4MK3s3bd6icj0Wz2UQY7so45TWCUeeEawKYYLCsw0Mn9aXuOhHWFl5FthI4DPqW+7XM4i+gz6H elAfng0YFG7R5O0x1QE5xlTcc5ddelH0L0z82ragwLSpU+PLXHEfCFcMuhhnONuQvpM2Tr/HFw9x 9Be0Q75iyEcOqEd+Bn03Vlg/qJccGFyfEHa8VGNlw/0PPhhGCnSDwxbhQJvCQMW5etyXNEbKpSaZ x08KYfTA+Mt9zUsAnusfev+74+wZDCYYDRkD8aLvfG3bZez22c//Q+531a45TuC7qj+TVFYo8exb vZoXgzNi3MjLLvpH+lrOs6Ft9rBhDM1Lt6Nx0O0N2sqCkYhnOs89+h62N/K5e54BXCu+3ITx5EPv /8k4f44PTnA4PvcVfRjXij7YbS33lLk/p238nT4wEPXRakf6OMrEPcLqQYyGPHdYxQ7GPGO57zmD hYN5eSFLH864j3E1X0Bjuw1b7BhfPqR7h+cD48Ebv/OdyOdH335dbH1lsk2b/p6+pEk742zHeFao bbD6l7E341vaEf3sY/I3yVDF1eJZw3ODFZG8kOQZxjX/tjDn63cHDx2J/hPMvqa+k3EbxpwYY6/V Qf7q4z4tgxdtgmfUxgcejLEnY3baXl7BTavIzyGMJ3//la82z4IRrY5dEiuI2RZNGbmfz9L4gTE4 RgC+TMgqz+VLF8fK6D26ryjbM2pX1Ovo8JE4d2i77nPG3vQt9z+gZ5bazS49Wy+SkYczbdjKxAte Pve+XKvJGKPxVeQvfunLYcQkjWcVH4L5gp5ft8joz7VbojZ4sXRwzipt7QHVj/7gDsag99+vZ97K eBHMF1gDY923YMzXDHneUh/ub9qC1IXjhR4Glg9r/kG7YGU/Rw+w8uydP/p2jRu0XVYjCsYPnPvG Ns5f/LmfjjEN9z91Yby6feeOeBnFy+ubZIT/uq4N4zjqxxlNvLDiXufQd4594AUyWDz88OboezBG g9k0nWvJgdVs5eKe5ryru+6+O551W9Xv/uPXvhXl5YBqxuBs+eRFK+fZwc+Ky89xn2zR6mNtTbtV 2GF84zDsmNtEr+C7hfuFtjAlvjrNOZSsOsIdUt/3Jx/5yzAYcT3BhD7jR3T+3hrxYaDn+fCIxvyM eXhOMobhnDc+0vCMXrLcqv6ae4wvNd+p9K3bngpjKfejnxXxBjhyfA5/4pbQD41C/yPatA/6LTvG Evfdd9+dH//4x28SDTb+cBgQ7Eo6YaeZ135PcZYs5aAM4jMtS/SGIqaj03pNM2/XL3m7aQPjEzUU oZjMXRAr62Y4KB1e0wf51uE08zvu9JJuGj4tnz+HB/F1aZN/7Md+7KoLL7ywMRQhKtd42VfE8Zza /pqcfX4NjVMQVTii9gv9jaYy2Y9WaHRCLFU/75xzwsDC51OZWDMIuOKKS9OP6gsdsfwxjFwomxSd GwMcBj0cEIeBiFVJTEAoHp0+A9ChqSznXRRvkek4eUuP8YK3w9zYF2rwzBueWeqkeMBM00SFASFW 8Sv0MGXAyPkqGIooD0sQ6ViZ0DChvvziDTGZO1NLcefqtHsMDUzcuel4S8uk6hd//qfzYEvl5yHA gw3rOm89OSH/rde+OTpCOpTAKH4JT4582WeO4Wmx6svXb+igObiShzGDGh4g52mCw8Q4BiRrdRiv DEUYrM5ZtyYmObGiQvopO9smMKRQh9KxxPOsM7MRjU6cw0JfpqWY8SBTPiv0EGBJPw83viLDxJGB AX9cQ+hTdDg5X8949Sv0hRc9KBgQsLrqaLxVOxKDJK4VX03xgby50qq5/ktNDFAYEATGmkBcdsnF 8aUlOn+WeoIxhqumwYXH230ma3y9Z7HO5sEItE51x2i0QFuK2FvPJB7Dz6XaU44eJo3IcdAs+/g5 QBWDz2MaCC5R++DQQAyK0MCWa0+Zp2tQtF5xPi+/WkYb2ghtB2Mj5Q8nny0RGDdYmcIDmgElkzW+ WkRdeAvDw4fJCl97YFBImZk0oIe2MEkD+YN6CDJ53XDBBVFmDhYE+8dkKOFcCerKA5m355y1AzZ8 QeZFV+igapVrpT6dyqSSgSHtg9UmvMXGMMWEiu0nrAbgbAwOVuchTLkxTHKeFIcpc/jruTKOMHjw 7U97ZQLIIG+BysNeedrXJRs2RJngZfDIQ5lVHAwkKDftgW1eWoukwcxZcQ+DM3W5Vl/tYVk7k2oO r6adb7jw/DRbhjqMOUzkkadt8eZ9riZiPPBf9rIXqfz60okMGTfKMHDOer6CpYOY6TMAMhwBrdJQ O6cvYKIA5iwd5+spHDrJNaJePODBmbNswGzV6rM0Yb0o8uZcAgY/fB6ZyS8TZgx3nPNxtu5NzoZq BwfKkb4x+ITNHPEgx4HRrMDB2MPkAX08nJ+R4YZl1PRpTAhZUcHqH/o13ixjaKMv5A09287oZ5Bj ws8gl68pxfWh0lFv+4pqoIhOsObeWqLBMn0BbZF7nXbIYaAczMggiH6RNky7oU2xTfgcGa64N5jg kwGrKK7WpIJ2TR+VV25RBBnbpg+FbupKv8rgllWEy9XXs52I9sAn1UuskOQLTVwf7gNWYjHYfZHe fvLFP9o524WOqH9muTdv95eqX8SojjGIaw7WvBGnP2ZbEcaa889dH+2dCTrPjPVqy+gib+oS/eJL Xxz9MIZpBrnoYrsZ5YlVWmpLXCv6AiaNvHFkErd27VqtkNCXGXXvMTkFywvUpmgXTHSYKNGmz28G xGslP6cxQHGfcsgwEwWucztY02UDQ4xeTIjh434l//XqIxj0wssqPJ4f3Le0XQwgrCLkwwLge57q TfvgcHC+ugSu3BO0FfpRdNKupqnv4nrzBSGuaTSeaD8Ktq5HIIQur9jlDThtk9XBr37VK2KrL88/ BvWXXbJBmCyPfhJ+X29rox7kzXk4rHRhks1B3G9+I1/wemnUExnaL6uhKDP35HnnnhMfLKB/Rgd/ T6jtfkoGaDChfuDFNeCgc95uc5A8mLCNncnkEk0E1+v6cV9SHlZ5YiTnmUMfwD1G/0Y74Dwm+gh0 cm1wlItnzEq1aT6IMEttlvbBRwJoBwt4NnBdxY7hkc+h84U09NB2tu/YmS5V/8X9wMQHHJDnmjOx o9/mjTqGae6DZWrr3K9R2ChAflPOMxgD6jQ9mxhLYQRbLn3L1YcxeZstzJ4iL/Un8RxVW+V+YnUP 45HzzlunrVnZwEwb4t5gPEVZMCbZgRH3eDzbVT+2ZTPeoa6sllml/o8zmtgGRvvAaERfzlgHQxhf 7qN82RC+Pp653Le0UXSwwgE52stq+ZQNg1O3D+C+ByO3JcrHGY2Mg+bOnxPbRXg+UNe3XXdtrEiA N1a96v4Ah6XCnH4Xx8sQnnOMsXjmYIjgmvBs4Nmznue72gNtjJV5tNMPvO89o7DhwvAinrEILxBX 6Zpx9hJf3VpP3yOs1q5ZE/hyz6CHsc5brn1THEUg9bEtjdW0l192adyL9Hf0nThpDz9HJoVhkJUm l11yidrP0uiDok5i49nGPUIbBmNvz6OvAuO4h4QXzxr6d56LjGN5ltLH039w7yDLipjp02bEKpo3 6h7HgLFv30G9hH0qns+cn5lfAp0dfTHPYp4bCzSmoh0ztuIsQe5VG2SY1NPX8EnyeHEnHRht2drM Vlpoa4Q741vaw/nCEaMd9WNVK0ZKPjDyEq3yYkXR3n37Y6UXz0cwj2d/BipW6NAPc94fL5EWqu3Q r/Ni4VyVad26dbG1mnub5x/jjHUaRy+YvzCMhNz/vBiiT+f5yefdz9dZNMjO0b3ECh7a+pl67vD1 ROYYj+gl0hrdY4ylZsqIx3OIvotVTBi41q1Zm5+nevlFm3vs8cejz1qn/p1tktx7YMh9wXMQvObr mca8hD6B+3WtvpwML/coGNOuGaeBMS83uOfaJqN2yZwCoxXXlBdlPCs5iJ8P0uT7HGPK5PRlGYQw Fr7m1dcELzCyqpoxNP05RiXOXd22XWeAam7As22RaPRtrP67KLZCayyk/o+2RrteqT4qtm/r2cmz jq+oMe6lJ+W+oq5sMTuie4I/sGY8yJeXSed+Aj/yZ+5FH8Bzk+c3K7zoK970htfGi45J9Fm5i6bo gQFRXhw89NDmML4xruTe47nCfUl7YV4G7bq3/JBwXBdjGl7Y8YIyXuKjQ9eW3Qo8R8CcPoc2cFyr lrmPOOfrmpdfHdeAcp9WLorT35+37aMXiP74/vvv7xqKjGjpl2GqWsbLsGEwjZI4PCitC5x5TSfu ML7D1oVvWle25BkYtuDAxA7RmY+XSanP/IyguRJOQ76Mm8/pZbwbRs5X1WHzOI5v2pQB4eD71Kc+ 9cvXXXfd+7wUUHzZIakSNp6p4UPjvbSX7/W4BnFn0UEp/XoMh2HtZUkHxZYq3s5jKGIgRefMBKTs 9FnqisGCGxcZJglxfkgM+rNebv7hYT2I9cegHh08vK0nJhbKi4ES9WcQAQ83NkuF1V9Id16BAG1I aWjO6cdiIMIkmcEh+4iRQREdFm89GcTwVRremv26zkmKTpjyiYvOCCs2dWUixidlWQqdnRHMPvkx kGepKhMnDF9YuKMeUsaeZPKmvuTfq0eOIw+dN9yc38JhlUz4BJ7+PNxtspYHP0vZwYoHCoMH2gz5 gQcObMAN/NkawaoltpkwmOBBwldNotVIPxLwMiDirSXXglUpokZZg0H1yJopqcIqAzgyWGoxVpzt GxikuBa5XmJuXFyz0INelVW48KaVcsef5DDS4SgbeujUeWDaiRRtIF/LTDWecf3AUfUMI4uuG2Xg 2pBfnCOh/LqOMnC9OaQSXaxQYFDMpI5rwMoCl4pyMkGNh1yhiPwYJEBHB/WgPFwjfGjMRPiCCINj jFJgzHWmLmApjngLHG1Py//ZIsBECGMJ8gzm41oFNhwiOTUGEghST8rGW0Owgw99drQilp4DL8bJ jLO2Hun6IUuboH3S/tDDlw75nDHYR9mliHqAC7JsewJT6pevc76mYMx1JX8mkyx7Z3DAlgveFLGX /Fa9Pf2DP/7v+pz5L4QRpLy+lJeyYtAEMurA9aGN07QpW1kvasqbKqgYO6JPUR3c71BeHNcmjKSq +1RA0F+pJ5gKPrAlHRnqTVvgPkKO8sZ1VllY4Zfz0P2jezDfD/kMH8q9Y+fO4GfrwW/99n9O73/v u+IrXeBmB1ZlWcATXSyzpz/JBre8/B9eykMZ3K58v3Fd0BN0lY2VJxg6mXhjdOI6cs1UCf31HPlR Pgx4TEwoN/mjF525fmi2HAYBwrQf9VkafMVX4nRf8AUmrh/p5MWg13Fy5D7JeOKrrQjTUW1I2NMf RX1UhtwvUo+Z0beCFuWTp8oqH3Sq7dKujSR50CeyJYnJAe2b/Bh489Y7lz9z02Z7bTCXm/5LhVAd 2HYgfumjL2IVVnmtqBNIgBX5kS9/rLhhgn6nVgd85C8+nn77N38tJt/c5xj7mfy86Yd/VJ+Y/5H0 b//Nv4p+k2tkbHLJch/CfX9Iqya4B5j8cT2Y1PeuBqUoXe9acT9wqXhesPKC6xv9idjzfcZz0e2Z 65b716iTcujVVmERo63oGXJIuDIh4NkKILQtZOi74h4VLd8b4KEvhqkf2Kk36xgFWEHyq7/+W+kj f/L7MQGNZ6MwY1IeB1err8BQ2MMi9wHgQL/JvUm+XHPyopS0c+7x6H/Ud03G6hN1DK/94f5ELxhQ Ia4ZZXc/UWIRz03xoNdlwYcXP9qX9KELQwyylIcWQVsJBygqCh75+bnNdRySnrjP1LdkoyL3dW5r 0edKjmdNBp6mTn019hL2anDxDAcLVUBjLfLIdc655XBcL2FGvrRH2hhjrjBY6t6hLuDKob88nzCo wZPr0etrGAuhkfbDMybko04p35+673kJEfqMqTDyeSyw2lFX6se9Sd4YLDCe0XZw3KPRviXv/oI6 UXf3u5PUphhj+j5Gjuc3/RiY/Pv/8J/iAH8+F88zLWMCV3NBFKIMPItp17iyHzWR1X60OQw6nqiC A/hwL+cxlnxdm/aah7ZeTm4XuQ1JWvlF/9LwQYcHjEGAfs4YT1IZI135URbyjWcCfYDCFB1MGEOz Ape26LZN/XI5M260E2jgY9xyO9b113hjdDtuCth4Iat8OaemgSzaBO2Ye8TObe6d7/6pMDb84f/z X9o2dcut300/90u/kn7jf/tf4mVc+RykfLQHlw19PIvi/hO+9FfcTDHe1XXj+RA3l35dJ3BEB3MN jG5cR+qIkejg4YMhE884lTnzokcK5Lj+0ceTl8L5uZTH6M63n9bLF3m2zTHm4d7mpQvFy/cZfcVY GA/uK6gz9wdljPkHcxjd8xiy6Ru3aPXff/39/0/zll8JQyN8OMoHSmAYY39hQBvoOfDjTLjhaDdg zrLUqUO5PcELCcwYd8QzGFqjwNeGeQTPfsanfH0RvJCL6wev6p7z132qshxW26avo23zLIYBmXz9 mguAnBx5sFX2w3/+lzIWzo/t9D/wqleKrhey0kP/EPejMAFfHH0K+BxWf0wfmudQLldzD4kOpuhh 3sq15h62oxS5jfWXx+n/0j6l4E7r9ev9JaCf/uQnP/nn73jHO35XKTQAwKBCZRhaGVc04vD5ApTh QTSnZ4h6cuZFJ2Fc1x+LFszFj+VM6sZNb/1TOcwaoZMpJN1X3ry++5EnzenES1fKQi/jpZzp+A6X ehx2PoN4JvXf0IjkRhL3k2KxOwHJwmVFDRHtMAexoZk30nLk5HrEjHjoQaYNqDPV5Eg3JW8SWHFA ftysPNCzyxnFwBr7WTNeIs31c1GYSDCIH9LAkE6FdB4MdFL5kugGHyLcdflhwRiKukw9wWAqihKM dEDo4K0CcORBh/gmDUXnwLLhP/rTj8QbEJbc/+LPfigeNNHZNoWjHKxAaBRGvSMc6VIakPBDvvkB MzRN+akedGQYuXI9gkVhPTgiyG0vuSYfgrlzygMEDcUiHoMgdJtPYQepE8YZ/sg7cNODj4dl7nxV 1wabUNAMmnng8IceHoq59Dl/5o/I508CKy0S8+A/h/vLkjGe1I+xFOcvgFhzVDhKTq15wMfNLb4T XLPGxUOpueY9bDSIbUpIuVrXgJAHBuhpU9q6M4HBoYtyMthW7j1GQlEGPWAUxKCJY5UO6sEmP4Ck XA8tD+pIo0E7yyhKowdD3DT9uTyRJu4w+LUSWTcTqNw287VjAjCJdi7FXO/cdpu2J2K+pk05mkxd Ciad2elhPyXQi2jZbiDQk2CsIRRcoSevhqDS5MH9yECfAYKLzMPUdUIPfMcaAg907l0KnbVmjEOX eFmtEiv3xB9PGvn36X5j+8RbfuiN8WbNk4PQrR+aKnppK7imulG2GAoFIZJymgrKSioKnOugexHZ 9nJztVRO1YubgqJ3scna+M2DtkkaNDVNIvojUhAnnXpyb4PPJOsjCxFoJ9P1Fi3y0A/1YI8/XxLS JZahYGl66RWX5cFJUY9ueagH20YYbBKmz/U9ElkpN/qnCDd6jBNE+gPiDOJwlMd9L3d0dAcwhAYF xMAnhYlSP+6HaAfiCL2wxp1CjvxhxM28GKpTYnWdNIvIgDP0hKBbqVjs4rrqbizaGAOensPQybXM 9woFYHCJMxaEo08gD9wJ2orLFpTcJyoPVu/haPMZF7WFJr9e3aRPz6H+dpz1Majkk+K0hyhXIeQg nFxr+mP4mVj+2V98TB8fmBzbHTi7j1WbPBfEEJM63kwzqN6tLRL8sdoPHfk6hcaoEfH8LJob9QAY nme4aDcRiGjxQ68mHSog9zRY8pzlzXTGNdcFgWhX7rfaeyako76hNCoqBJVtfJFL+E2fnw+d5ppE QclRfOjjz45kcuPtPGevcYg7W4Nf95pX6U3+2YEJLJSTZ8f8uWrzaqDkla9XVk8/gV6MHVCiHqJF HRWnvdLPBzIkUneyjp+IRpBVybSFXG6e27mfgRVHHlFdNylF3K+Thx3PB+LRvsBFefbXvekTm/zz Pc7qToxg+blNnejnpuirUeHkTdE4gdJSxtZFgbgfqK+euYFBzjO3l1y/4A9eySKuMOXCUM8fOjG2 YEzjQQxMuOhr9NIMB806SY5roDxzH5sZoMFHnfAxXKgLiAj5dccA6KFY2VGGHM/P6Shw+wyGh0k+ f8FVYkO/i/N1kO97kj7/S9qKynmTXBP6F86Fy+PSJvfIioJLh8Lcb9wX4RoW0nytoM/QtQrDi+rV PqvEy7XmvsSdcHmIKA1M4g5Ep8K0EzAnWxUrfFhx0MbDWEVssWHlL/He+AR5/ROg1L9v7KZCkL3b JHI4yla63I4nn7wdI4+s/KHm+Vfqae8jpYPrlOGpsVqGLYmcvcY2RrYPsqr25Ve/NFafxj1YKpFc O15yfkpniy2uJSmAYZE4P22dFKC+XLO8ajZXFnxZgcf4Dke+YIaRDz0YiuC0nqy3KEtI5R8/O0yC 1/XgE+w8R2M+RB4N1ifHuKlbw0/7Y9zVPrukiOctCv/qb66PF2O7du9NV2mlMasYbSSiTPEckx/P +OYeB5Oui3pE4eMnkt2moxi5YlG3fD80GqiXghhNMVhR96ivaOTpsTLcWozd3EsaW2vFX1yrpq/k vs0u7pQmLH5C0smOgp/74PvjwztbtfUbw9lMvVhldweOPPmza/sUzW9QksulzBoXbUDPY1Z04qhF aSTKNH77ywPlX9r5ilC7Hk5RrWLslkvVubaIZLF+H2bU8gco+Hbw2zmdOGGnmb/Ub3BLPuuZqG9Z 5zNRueBreu6TyrjwMDrDbthx/NJRMGRKHWW66V0e083rCprPvvXDR9jxkt9p1inDq7tzknD5poQh voKhG6jnGpWRCFVx7mhr6zHmkJIH62kYWz1ZVW6RCoc+/TjrRg8PKz3BGuGcnFX0aG0iwq6aguYI fiJFvYj29DhmTY7D0egRaSxs3IEHZ2BD550ncCwF3qsVUXwhg8PaspFIesuyMDCjNLlAOcdxMMZI FKzUtdBDWXG5w6UORPQXvTk+BESaNIXLLCOR9JZOPUy1n9uKBSNZPzGQangbjj49Pa1ZDwP2tkAK 9bLp1okUaW8LoniDcRbK6Y3WXp6jsGn0RIUJd/VkDe2vkoNVenp5t6mR2Ed3sRHCkQVOfvtIaGjI EQz9LWNwx0+kdtux9chv1DS8g/XkYkhTwRzB+HFhpSsYIJYFV/yfFeMmn8i7V08qEhiMg3Fb2Shi U5+yqKiLR4ke6IQjDxmmtLybs1GuuOTiMCKV1yrEuScGYBzlCR0oyy6yVjC3WVPtOzUXKkTjR/ES /ChY5olC0gZ8j7dCvfTQqh/6nLLsISvUeu/eYMqDmYd1rsRaLdnmfCUmqmEwUDHROrrvyuUf3VeE urY55LypS6MHMQrXOIK8jS5IkRI1aTHO8sHT9F1xraxEfugJ35pCQ9MqG6yaXIIjfgZjk9XCoL+T YQwX7SDqEEqzHDlThFDDD3H0KdgmEJYLmsoYejKp/M0YN5RQRX0URz8/TaTt1yGHTgI56KJEXGkY OXiMH9UbV84UufzSS9Nb3viDUkUiE7dJOqx5d7pZWy83XHB+vIHmHDIMJ5xZl10UIBcjMuziSem6 NAqW5XLJojCZRJL0RHVyBo1WyjuGnrZihZ6QzQlt21dyUJpr1aiP/CIlipTvg61bt+m8jFtim8M7 3nZdrIhhxV640CM+yspf4wi2RVG4zZd0EkI/CUygITb8hQ5orZ54vkEpnVMzLUT1Y4wjHkklH2Fh 6sdlMPWnO+Z2jIp8DRqhqJi4mnZGXcprFFmGUFOnBmPl2iQ1OYSeflLEGmzKZ3rLahViDC3KuCCV 4pF5pJpBfjw7m3gpmfWbMZcpFwMaoV6MDDN/5su/5iOmcIFNLmB/esRga1RsefTxWLn3Lp2Bwnat 3iQaJuWWsxd3J2clB6XTjtv2VrKTmeIuWmTtAsjvjitIb0TacoaMflAbDn2kdvU4LibSyTMXxQmt BqW5MWaVPY4x7vFgg0t6LRpC/FhvlCp3sR1scmHFlwsUesAYzFg18v6ffLfObfy8zi66KbYoYqzB wPCzH/xAbFPsuzYoCT1NqV0E+2hvksCozFJJ4cya+czs1IyfY5Ha6HG/UaZl/aN1tHVumM0RfYUU Od7PB3U8jHvc7iuynixHbUOz8Oflwn33Pahtf+dru+Zb9Kzh5SQXr3ESibKf9FqJH/V+diIkN2GM +5hznpFxowfdqOcHUmnUaci5nJkLUrgsjhEnxdZEtjCy44NdGtSzLV9wRwUKPQ3Gja6mgv0xKRg9 Hsh6sqIodSvzXASa0nSQ6WDcFBMDWMcBoSthv6TB7iwIl2mmo9Sy8OAG8XV5Mmfv1/pMKXWY1tUx iMe8fT6ME3FdPmfQ9tOFEvPaJ8nhQT60ku44Pvpx+CXdYej+M38p4zT8Mn3y9ddf/8tvf/vb+7ae RRfRPuByh4FQ36Um3rrutenGM2Omoql7nayoK9eNT1xPdKJWKz9yHaiuW56SCSMM9e+5MfWUYsFu AoP4yTE4v//+B2IQwdda8htj8aAw8sgGn+c9xj2oitD3H+OMoq9Vxj5iDCK+LxgX1RsV9LV3Qjee 6YOplsE/OUfJ3R8uZctwwTWIPIpmAj4uwJRf0Nu+okdtk0Om/LGcad14pg+mWga/y9GN9/SwlJmJ NIPJdhDeqhos1yaPGyhly3AhNIg8imYCPu7ZY0w92XrGAbb5LImzhZT1Zu3+da6Oj/a7HN14lhhM LbWdnKPk7g+XsmW44BpEHkUzAR/37DHO8taXY6Pb42Auc/f8fyY9Gnw/8shjOixzm87H0LkaOtOB lRzUE0PR7j17dXbHXbHKgLeavG3lTIe8yqosQxnulXLU7UbSKFYT8HH/whg7e3JW1mx9uvfejfF1 UAb/nC2WB7kFY5Qz/wymFgyjK1wmniRcai/Dhdgg8iiaCfi45w7jnL9/Xa6x4pne5TJ3z+9ydOM9 ztGhkrcMF5yDyKNoJuDjBmPM6hAOKWeFOGccciYJK3V7/W2pxzrQZzrhnmupbaCXlkPdhG58MFdX y+j8B+sZLQel5C3DBfcg8iiaCfg441PQi3FF5tGvk0cR8jibbVCPPva4zjTaFhpZ0chZmpxrw73f ireBVlET6CZ045ltMLXU1eXoxkvebrjkLcMF3yDyKJoJ+LhnhzErtB4Xpmv04okz9XqGAuvP2v3b UtuAU+x3E7rxzDeYah34XY5uvOTthkveMiyUmvFir56FbD9rpwxlosPyJ9SOizxOq6DrkQvFqrBP f/rTf/62t73tv4mCcYdBBkz82dhjukhteplW0i0HzTzWZz58XEnvhp0ejA1vN4wMN0Hpmwc6+Y/r fAeNy6RE8zkz82OAIROnQydsvkF0eGzMIYxz3LL2oVO5Zm1sq5t00vgrebtxy5luf6oMRf+6ayiS rshtVPtWCaDlMxOyYYNC9TlfgiBmgVF6GoFshMmPVQZ2UcM+ZU0Ek24wDEqEloUj61ZPG+gJ9ZWt R3aIGmFcGKUn8jeXfDEMqpPVo6ccLiAJRWOIcO2EdZCehgZrT1+Wa3+dkLVFYQaVh2TXKEQGQNLT KY5/FozH1/P9xDjawUSulYqY2/FEMW5RqoGKwOmNgNo2hgHfywMHO6d3DWrpniUC5ZLwQdc92kXo Hsto+iwzPk3FeJzxksZuECZOq35F4Nkg4EklsrV9PRsE/zllNLrU/c416Xd5dWE/rcYmisDJnisT 1VP5ng8I5EmihpF5CEmgcBiKmjOKbCjC7mEDTzeM9Mlo8JjPuTVLfoPudErhdNMcJ4/SQc8V6U3x 4Ck7BsuaD3nTCA90E916NlBYRBesm96ldwtappdp1kN6aTMwHd/88JSuGzcQ5jdvxNWpduhNlixn bzjxQ6kCEW6WDpYZEQ7++EGwoTQyUGy0IIyLzx+LLUQaZdYTvn86RezTgzDGAblST1PiXAorDYZg 7f8hXSizbQI3So8IoaLQ06oikMWynOKDtl/oUZWX2kYOCESGWabJM9Qgj8pGb6O6lYLcCp2WGEcJ o7x9P22Vc42Cq62cAiIQpWlF/RRvNRFoeINGmq5VQyqyEaUVIvWfjnE2HLZKi7xqsCJwGiKgphpb dJu+7DQsYS3S9wmBk01Ue0vxR/ec36ciPadquQX6tkg8p6Wpmb8QEWhf+r0QK/e8q9P/HAbwf+nL crLnyr90eWp+3ycEYprDQ7OZRjXDBLwxZkANR5SnDLuAJc1h+6gk7D/iNvg4zXrwLWffafDyhyPN sg6X9G6Y+Ck5jDGn6lw4+5Z3AbsVIr2kTSRPV9q6Sx3W5fydr2XwHba8ZaxHz7lyRjFYpGcyatSE FqvKMvz2uy6Fib1lGiD69CCNCSi78Hs/QbR0qaen0qnW0NXTKJZnzr7MWqL5JqgHuZK1Tw8JZWKp u2SkRh2+SDZP1tPhGKC7Yozdk61GPfuqMX92GI+6LlZX/YpARaAiUBGoCFQEKgIVgYpARaAi8HxG gOlm37wzV6Y77yxWmHWTxqs9vGi3TP/ktj+rMs06LWffdPMOipPmdMvZL/mhdelO7/MnYrSxAArL ArggZTrhMuNBYcvZL3msC9/p3fAgHvO6jOaxbvy+sOxEjisJcUX134oGrT+LlUCtGjhb7p72Nl3J OK8KanLD69MTKgo9IRSCfaGsRnyNnpyIXEOQ3asvydIiWjvpoQcbWR+zORAq9JQ8Y+lxPuFLVts/ +NJUrAdzWqtHgULPYIwRsgDlKspmcpveZPDPinGRfagn/ybjMTAuF6fB+WwxRo9bZZ+eKId/jEc2 jkXJ9MNhhYd1NgXY06GZ658NY2df/YpARaAiUBGoCFQEKgIVgYpARaAi8LxFoJkptVs6VJF28tRf qX6bQV9aTNcayVLa4ZimDdBMunlQOBYfaXZd/m7cfPadbt908oLWpTu9zz8VQ5EVujJ9ipqIeYiW hXChSrr1WMbxRlULGnHSnG4fuZIOHw6adZoH3zR4ThTWwUazkvU/1vb0cffUTYpZfM4+2hWa7JCJ pDaQcyTacaUeGwbM0mOX0YVJvz71ySc/J/HZRRtEzBw+m4SUlfLuyRbhIDZlhs/xkrnRZ5JZUGha DuRM0IYefSCTUCOt4slIdGjnofTo17akI88cjnh7NaIIWeH4GKOuKW9Pdc6DuPU0PJF9lw82AcKn tcNwos9fTtJXIOx67K3CXMxeglkbf3yM8+K0psySeLYYx9qfogyDMHbBaH/kCDsHSe7V51A/87kv pH/8xrfioMn4LC+JrT5zgw1amvK26dDkiEdSNyFS609FoCJQEagIVAQqAhWBikBFoCJQEXgeI5Dn QfkNfQ535+SunOZ5nhTZb5MU8MwJJY3SSIbuP9NLedOCufNTplmmSyvjFoe3SyduHfAN4oE+0J3q GUXdzAYqbYjwDuI3HTYX1hUgbSxX8lqHaZbp6nH+pUEseLR6w7z98FEkSYWgpVvMW0K78sMZhy9R lGazQgQifFwGniK3JgFmmVpYRYJQzpFAzl/0g9sOpINPHUzHh4+nWStmpjNWzBYX2kOgYZRBSQpi NUpXTyjrlcdSDbnwqBeaj/f0NHdLWxc4mkooN8XybxS20TR58pT06Fe2pFv+8JZ09b99eTr3reem YyNsv1TOfZkrIhWhJatCe6OlJTx7jKWC2uzfuk/4HQr72szls9IZS8/IxWjud4rk+uWwitnLvlce 1XsQxhgbt9/2VDq861Ba9ZqzowqN6ka29FA8GGPO4N323afSrod2iYXDv0+kFS9bkeaePa/ZvYqs XdaTV6WZptPeZQg7ePBg+uznvqgv3tyf3vMT70xz587V+VDCHxEqGAH7QTgJxvBWVxGoCFQEKgIV gYpARaAiUBGoCFQEXiAIeOLH3Ij5rSZwA+fkqm6zuCRPwDoz2gYNtOWJVSbAi7Pvg6WJO+eSvwzD 47OLzFvG+1dpkEt25i11Oa3rT5h3ooYiFJYFcwbdjMt4t6AGqwSppJWyhLt5WK40+phW6unKdXUF 79jLyJSsBhMT/qhBWY0yjFpnTzi7oGQVkcwOt8a+Yhb50hOqRhuJkMec8MS3n0gP/O1GGSGOpGNH j6cZ86al9W9dn9a8aW1jzEGBuKOgWY+3QEVK6O9lGYYkogMtGVFq6dWWpRNuyz0FrBQaOTScNn9h c1p8yZK08NyF+tIF6T2eUK14GF2najUPK6DC9XhyLhAVoujIR3KPxzpzeUnvSWV9IRrkwBU9JcYN +xatanrokw+l4QNHY2XW0KyhdN6PnJvOfMVZYThqStHTY+VlUYLG1cilAjoWddmwPFnGmU2f35Se vvfpdOarV8XqrzLdKrOftQTGcf9bq1IltPuR3emJG59Ix3Wtt978VHr5b1yd5q9bkI7Fp55LTZJT xSmVy8Ghe3Nmz0nXvfVafa52bvqLj/1NmjtnTvrJn/ix0J35yoqVYXQXZWmyglJdRaAiUBGoCFQE KgIVgYpARaAiUBF4QSHQTnQ0J4ppkefk1LI7T2prPigBTf4j3TylT7qNPSgr+YiTDq3kc9x6Sj7C duZDdpArdZe6yvIMkguaZ/NjMjQJzsR8YxXG6fbNR8FcOFfIvnntWwbf4TKtlHPYfI7DD404zuk5 pt+xT7RvjEQtZw5YUUkOQweEjiWojQ4Q6pJyIRuqBNkutfvhXenG37wh7bhrZ5q3dm5aeP6C9PT9 z6Qb/vcbwyiB4YY/DBXw5/DkqNPI0ZHcFJsal2m6BbIBp4OG9WBQYKsbW95aJ16MPiNHjqVb/6/v ph13bg+eyFf527G1C+POmtetSa/9d69JK1++Mh0/1muDGFDQ63JzaZBGjx0otOWVwQp96HUdzYc/ FsZsw9r/5P5087+/Oe3etDstunBxWnT+wrTn4d3pxt+6Me17Ym+rL/SWF0T5RXmisLlsYMN1djnC WBT4qwz6d/CpA2nP5j1p8lTVbYpqpXKHXnQUzhjT7jAWRT5NOrivePHydNG7NqR1165L+x7dlw7v 1ta9QKinBJXoQTPYRj4Ffgvmz0s/fO2b04suvzR97G8+kbbt0LVSWUtXVtf0sdqx06tfEagIVAQq AhWBikBFoCJQEagIVAReqAj0zZjaiWZrM4hp6oC6e2qFX/JYHb7TLA7Nf6aVPGUaYTt4uo5000te 8znNvnnsm2+gP9EVRQi7IGREeLwMzIPPH9aALr/1KalNM80+lgZbEqzTaciR5jyg8zfIlbKD0lsa k2ZN+VvEs/pmyu4lJQ13m9kJF6NVE/JtekvGOCJeVu00hoQwQrjYrIzRxP6hT25K22/fkd70Zz+Y Vv3A2VGr5S9dnr74U19IW77ySFp22bK09btb047v7QwDxbIrlmh72on0xA1PaAXNsLZBrUrLr1iu 1TIn0qGnD6UnvvlEOrB1f5o6c2paLoPEwg2Lcv4YY2QE2qPVLNu+s03GiSNp5sLpacUrz0xnLDsj qj5yZCRt+uymdGDn/rTrvl1py99vSSeO6KaR7JLLl6QlG5S3wo9//fFsMNH2s6nTp6QF5x3LV0PI Y/AZOTycHv3qY6IvSAeePJCe3vi0+KamFVetCEMYkGDUOPzMofTkt7fKoLMvzZg/PS1R3XY/uFv+ 0jTnzGYrVYOnL2oLrwIYo3Z8b0d6Sqtyrv3YD6W1b1wv6vG0TPX+zv95czq4/VCav3ZBeuIbT6Qj e4+k1a9fLQxlHNPFOrTzYHrsK4+lldecmaYrb+o0fe609Mz9u9L8c+en2SvOSI994/E0Y9GMtOYN a9KUuUOR35Shyenp+55O22/dnoa18mrxBYvT8quWpSlDU9UOsmFoz+bdsVKIPNC97CW6DuctzKuC VJG5a+en+esXpr0yZE2dxW3p1tOsHqKAan8779qua79dK7yOpjOWzE4rX7EitiSe0AovjFBDQ0Pp tT/wqvSJT302ffe2O9Nbr32TDrrmNspohdZTaMcSrK4iUBGoCFQEKgIVgYpARaAiUBGoCLxAEGBe NHpO3s6/YkdLrqpe6HtSVtYdGkpweZLVC+dQLw5vye90y5U+adbrsGXxcY7nWC9eyjnNvmXG4zFv 65+KochCLqQrBd2ZOg2/DJvHtDLepWF1wdnPsd6v80WOcJfP6T2JXlnacsp44XDDl8UwCTGPjtI7 B2tqjDs5aiZiCrfRHIhKmUaEuXrIi9inB/nsMKgc15k+GHwWnLMgnf2GtWF0oTxnv25NuvwXLk+z luicHRkF9j66Jz150xNh4DnrNWelwzsOx0oaCnLGilnpzJecmQ7uPpBu+93btApoW5q1fHY6om1s D39uc7rq165MSy9fpnpOCYPMzb99c9q/7WCaOW9GOrjjQHr8xifTy/7Xl8pYNDvOR3r8hsfTAZ2V xBY4jCYYl46NHEvTFwylJZcuSSeGU9p1/9Np623b0sjekbTznh3pDWvekM5QnrF1Slfo6P5hrUi6 VSt8FuiKyXC071is+HnsHx9N1/zHV6fZOj9oWMaku/7oLm1xezjNllEIQ9Jj33wsbbtlW7rmd65J 81bPkz6wGhvjwF3p/DsoIxlb5qbNG0pnveqsNHXGVBmbZgfYW2/dmjZ+bKO20i1Oc1fPVSOanB6T Yejm3/lOuvayH4oVRDf/zs1pwfr5MrYdTsdkMFt82eK058E9ae8WGbEWzkhrX7M2Wt+BHYfS3X/6 vXR093A6KEPQA3+1MV3xyy9K5/zwOarqlKjnzb9zUzogjGctmpUOyRi2+YuPpJf96svSkotkaNP1 5JqemHw8r8LqNBFqixHtmQe00uz/uDmqj7Fq06Ob05M3P5mu/o2Xp2mzh0IHxqK1Z5+dZsyYlu65 974wFEVbRomddAWEESchoxbENtoGLFX9ikBFoCJQEagIVAQqAhWBikBFoCLwPEeAuZDmOmPMycvK 6aNSTIpw9rthJlKk+a9Mdxo0nHnwSYuZLQmFGyRTJPeVAzq6Suc4enClvjKcU8f57RpZxmEdVYgy c8L+m4gOgwOvC2x9rpx963O644N867WsZUwnzp/TWx2xZshUoRKCEW9UNF4rkDkiGkktmwKD9IyS l2jQ+i/ByLA+c77jYBg0ps4cao0Ik4cmpct/6Yq09k1rYuXI8pesSJe8/5Iw3mz69ENpilbxXPqz l6bLf/GKtETnCGEo2Xrz1nTvR+5NZ//g2nTFz1+RLv2pS2W02JXu/sg9YVTQDiit7tGBzzJcnPeO c9NlP3tZWvW61emeD98TK5owXKH3wh+/MF3w7vPTkFa6LL96Zdrwvg1pw/s3KB8Zm45pxYv0cJgz +te+dU3a9/i+WNnUVFD3oIxvMmDskqFj22070upXrU6X/9xlad1b16aHPvVQeuo7W2Mb1TMbn0m3 /793aMXTYqVfni76yYvS8P6RtO2OvFKnWdcl2MbG+LjO9FmsVU5nvmJluvMP7pRh5cb0vf9+d6ww Wnzx4jR7pQxFuiWXXL40PXPfM6I/KWNONnxt+symNEnnK805a25iC98ubfebsWRm2vCBi7RaaEcc LH7xhy6JlUdbJYdjG9mBrQe0EmtWuuSnLkmX/cxl2qY3km6XgS7OR5JRZuPf3K+VYI+m8995flyH C999Qdp261PC+e6yoandNDXss2Hm9sFB4Zxb9eiXHk3n/di5gc85b1mnFVL70/C+IxkTlYetb3Pm zZGhaEZ66qntUcbcHpsGiOf2GakNXeEItdE2kHXU34pARaAiUBGoCFQEKgIVgYpARaAi8EJAoJzq RLg3Jy+Tmqp2ScRLGrOrMl6GS7RMxy9lTIcXejlbK9NIx42XDr9l7IdQR860Mf1ns6LIyly50ncY HsIgjm+6C2tfSW1FzQOtTC/DpI3lnB/pyJT5QnOcsFZo9DeGdhURieKEGWdFLYEETeRjQ1CT2JCC uadHiYpYTygrf5yAgFFCn5bMsHJn8tAUkbXCKIwHWY+/2nVCq47mnDlHK3bOSENzpkYZX/orL4lt XbLHyBCSjZNPyrBw7NgxrU6an0a0JW26DsSeu2aejA1bwhAypBU7rKbBaDNt9rR0/MjxNFs6+cra vi17pVcb5XT2zoqrV6QDO/bLaDQ5LZSuVa9aFXpBKZ/1NCkt0NasSTrfaKrKg3EJ45BRDExUTRZx LX/Z8nT+j14QdZ511qx02/99e3zti7x26kym4T3D6YpfvDwtlREqVh6p/A9e/wDCgV5oBbuI6qeD 8XEZruaumpuu+vWrJfdgekZb3LbL0MT2sDNfdaaMYZfH1rEV2vq1VNvaHpJxiPIc0EqqJ294Mm34 qQ06OFwrq7QyiC1ga15/tranrUlf/+VvpBUyzp3zw+vSLf95nrbIHY7yYACbJSMRcnNWamWSDEO7 N+9KN/zaDfpqnbaZzZmhFVKPpJX6itlF774wVmMtu3JZeuxrj6ctX3w0HfsPI4FxYBQa/ZMbCJsg IyQGtg5iyNqtM5FmLT4jVkktv3J5Gpo7Pbb/BSRinq7tZ0Pa9rZ77x4rC7iynoZEZNx2LIYG81ZJ DVQEKgIVgYpARaAiUBGoCFQEKgIVgec5AjGnpA4xQcJn7pMJzPPt8lw3uHrEnGhJYqQxAceH7j8F 2xwcNo9lTMe3M4/j1gcdV6aX5XAafjYIEMoOPsubNq4/UUPRyRR3C0imZQVcqLH0OL2UM20sGdPt Oz/iuJ4lKJfF+vAnNRc9GGMqznYcnKUJsCXRUqSFpMg6k4gJfPBCa1gj0OjhgOIsWuhR0Drwoz02 8nlOLhkZZqbIgMOqlNDR8JE9W5YwwEyfI8MAZ9LIqHRCf0tfujQt0rk4IyMjccjziWaCf3Cn+FWe R7/6aDQVDmSeOmNymnP2XBmkKMukdHTP0Tg76NC2Q2nagmnaRqYEIcdWqKgPvyooW+JwmY4tSmfv BCX/EucT7VEm+AKcprqZRd9wnxzGLA5hHtHKn6EzhtK0OUPpmLac4Y7I+DLtDBmzZLzi3COMRxzm PSSaCMFTXquxMOZsplX6CtmiCxbFCqrdD+9JW766Jd3xe3fK0LUgna8VUtNlXFl33fp05+/fGUai p7T66tjBkbReq3Rw6MZINlVlnCzjzGQZmqbJ0EaNMLBx7XDgccaZZ8SZTqxmmqSVPwvPXyS8tN1u 33DgcEjb9lb9gL6KJuPNseGRNFX+Ih1Qvvkzm1X3Y2nybJ2CDV7gHkoBzKBBwH54LK265qx04Xsu TI/9o7bj6Qym6bpenGHFgd1gpaukS5oPNcdgNm0a5ZVDqdoBTZNyU7fIq9OOBVs0+RAI5pCuPxWB ikBFoCJQEagIVAQqAhWBikBF4IWBQMx59MOcuZkfNdPnmGt7nteprARiVsUkjTBuUNhppJfhkt+6 oJUOfTgbeSxvek7NekmD7jI43pXpxq3jpP5EDUUugKayoypMJi5YWQnTykKcLL3UVYYHVRBd5R/8 1m8fGg75sjzWF4mI9SbJDfJkQQ4AAEAASURBVAlV+t/H2ETCSARbm0iALBs9OdQwZD2KZBb8Rq4E Mxqk6FO0kmjWsllp7yN7da7PkWwkkV7OyLn9925PCy9YkC5454VhOME4QK6sAnK4LZLoU6ZNidU9 Z8rAwPYq8j2eVobxaJK2smEsuOej98aKnRf/m5ekeVqJM3x0ON33P+6XAaQtZpSbfEK+Wa2EASrq 0dxJGCii/k1J8ooi8eiuwzABGyIYq3IZG1NSpIf2NGXGlDCQHdXqpxnzZ0jT5DS892jQfPNGHlKA jlz7HFIkHPrZyrZf28HW//D6dNbys3Tg88r4Ctvmv9OZPkrDUISBZ+2b1qbb/ut342yiLVplxUqf Recv7q3OQSPqm7+mqoqaqDRVe3j/0VgFNqQVP5gQD+/Jq40wyuEmy7B0RF8xQxG4UdQjMtDFyisZ oNBH/UgJCdcFThLAT+WdvmBGuuJfXa4tc7viAHK2v934WzfFQdsrr1yZToxkwYOHDqWjR46mJUsW k33kiSHv6NGjMh5ND5VUwVeCMC7XCx0qiWgNOdLqT0WgIlARqAhUBCoCFYGKQEWgIlAReN4jwBSL mVAz2WH+5XlPphHL86qirhBIMKuTTLNvQfPbL/kJwz8ozXR4XDRoOPvOw3HSTHPYac6DOGHH4RvX 5ZnsuCyRaMXOEGK3MIO0lAUp+Ut50+2XegbRnE5ZXJ6uDw+0Ur4MY7zoj1sCv08sCC21T0iT+Ij3 rBhtgUZnP1qPC01+1jtFhoTVOidot76S9cAnHojtS4d1KPPD+vLYHb93h87HORTb5li5w+HPYdCR IsJ8wr4tqErCmTwjB0a0PW0orX7N6rRC27746tchnYHE1jty3b1xV6xgWv/WdQmDEvqGteqlqJKs S1otJGMHK4C23bot7Xp4lwwdhxsDTi45XzUb3nc0DR9UmXSHjRwayfFYLSQe/e/deLnmGCPKqzRP 29qo18a/3pj2P74/VgM9+MkH04hW+oSVqYGwhxshI5cTWa208+6d6cbfvFHnAm1Jh/YcSUf3Dqd9 j+2TIUWrf/iamxz58NWxFVet1BlGd6Wt2nZ27nXnxvaurMm/TVmpQgT78+Ngbw63fvhzm+KLbbt0 BtSmT2/SYdyz0kwdPI7BbOmLluhQ7idiC9yI8Nlxz860WWVbIvqQDthGL9eOr7Adpa4yCo0cHklH dPYQeOIwMD2mVVEb//aBuK6clbT2zevS7od2p32P7ot84NOBa3E20cFDB9O6tWdDiu1w993/QPrw n3803bdxo3i49oUbtx0XfDVYEagIVAQqAhWBikBFoCJQEagIVASe5wgwrWM+xF9M8aI+zY6gYiLc HFdTTp3KsNWEdPEDvae2SFDQ8v1Z93icbh2lHqeZm3hJg5d4KQNvyddNI32gO5UVRQMVdIgunMnE bQmDVlak5HGFuumO4ztsuW4ceslXppfhkNcEfhRIMOVVFY2mgiMH+W1UBXPDXfBl5aEo/2Sl+XIp PK4eSRyTNWWdjDZb/mFLuv0P7pBhZntsfdp6y9a0+NLF8fUzct1594700PWbdMDyofTUjVv16feb 0vTFM9OlP31pHAx9TMadVT+wWgdOb0y3/qdb0+MvekwGk6NaUfOkVtScL8ODyqK8Vr12VRxcfbO+ pjVTX+Q6sG1fPjNHZaXolJhzkqbNnp7OfuPZ2sL1aLpJB0RP56tfOlh7tQ6xxgDz4PUPpV06jPqA ysMWrvs/ujE9oXIt0GffL/7ghjA8tauMfJnII2cSuCy7YplWAa1L9/7FvWn3A7vTlJlT9HW3vbEd DQOW0SMUKgJM/aCDsP5YObPsxcvTzKUz0q3/5da0/IrHI4+n7tiWFl6kL8n94JrYtocKVlyd+45z 0j/8/JfS3BVz0lmvXS1MlJELJZ6meKE+R5rVPw0PxrZpc6elzZ/fFF9nOygj3FatWrr4AxdrBdD0 WAm04b0XpZ2/+o1002/fpLOcFmg10B5hNKxzjS5qDWCbv7g5rnUY2/aNpEc+90g68IS+krZ0VhxS jgFoWNvUNv7VfWnvw3vjUO6ndf7S8hcvi1VmsSUw8JyUbr/zLm1vG0ovueLyuMas9rr1ttvTH/3p n6XZs89Il11ysc6YCkAb7MZox4BUXUWgIlARqAhUBCoCFYGKQEWgIlAReIEgwK4KTEJ5BuTZHpVr 9lvEHHPMyjazzkhHuJlUxUyROOlW6ngwN3Snj5WL00u9Y/FaL77zKnkH0UqZccMcjjIR58qWvNC6 9LHi5nW64+jzqqZu2nhxy+Bbl3104og73XHzTHrXu9519QUXXHAZhoXSxdoejAAFxERZqcLqkdg6 JK1MvnNYEmwnKv8k0MbLsHg47LinR+FOuig6THm6Vrssikk+25iOHT6eFulLZpd/6DIdwLw0tpHt f3K/PkO/U+fTLIqDrTmziMOXV2qFTOSNHm1Vmr9ufqw2Ovz0kVhFtErGkAt+5AIdbM3WLn3hS5+h n6wtUmyFmqzDqle9erU+Cb8gtmrN1efoo3wqI2f0zDt7XhyefYJFLsJk0YUL03wZgoAKw9UBncUz pC+1LZXBB/0sT8L4tOxFy4P/mFbNnPnyFTpsep4kJCUdIzJ+sNJp4bqFKclsOTRbK5e0hQt7zWx9 yn7JJYvi4OcLfuJ88SwKmahfiVsZltIztHVv4TkLY1UTn7ZnFc+8tfPSJR+8JK288sywA6Ejvnam M5nu/tO7ZZxbnza8W4abRhflwwC28pVnpZkLZsbqHrawcYg4W+MW63qwIunooaM6eHuJjFPL0r4n D6jBTUpr3rw2Xfyei9J0bZ/DgfEc1QWMOVR8poxsF+pg67VvWBdbDcGBL7Dxtbgp06amJcIPAxGG vOlzpqXlV64I493sZbN1TtJ0nX10VH9HtGJJh2jrC3RsO3N9HnxoU/rjD/952nDhBelHf+RtqqOU 6/+BAwfiOl195UvTqrPODN25kef0KGj9qQhUBCoCFYGKQEWgIlARqAhUBCoCL2gEmAXj8u+oqjZk XtTfd999d3784x+/WTxMef2HSDcMzYYF0nAn8zNX/iVX85f08cLwl5Uow8gN0tnlGVP/RBkxuLgg Xb+rHJ0ulPWP55sfPQ7bJ1+cDT6m45uG3w0jgxGspJe0yddff/0vv/3tb3/f8HDe2kNi2BC1eiZv SstWxikyDrGd6FF93txNKvOWV5Li5OvqUPb5zS5rI2yOJqGMY6SAHHu0JoWB55C2nXFgNQYXvkzm 5nNMB1cPa1tZrNKRECtKOHQ5Dn7GOCAdoU3BozpDB4MTK2hmyOjB1qNmDUnwjMhYcmTXIZ0RNDUO bB7RJ+mnTNOh2jp0mQxzzSi5yiReVsNgxCCvqTpTCQ62mh07mg/Chs9S3GBDs4YiPrx/OM4hmjI1 2yfhGZbhZPI0HbKtg5eP7D2cdj6wU6uQFmqrmw6P1la3Xdpaddvv355e8q9fJKPUgsgXjHqNkFh2 zrVBUQado+mQ6sXB3azu4WtmCMb1Vfkpx9MPPJ1u/d1b04U69+msa1YpMdf2uBacjai8GN8wKKGL M4Wm6IDrYdU1jFpateNDx6fOGEqHdx+KQ785XwndxiDwkL4ju/NWMvCYPl9nBdHW9I8asPVsRPhN 0nUMS5ZoYMyB2mz5w6GHQ76Paova8IFjag9cr6xnygJtOVu6M33t699K27ZtT7/0Cz+bLr1kQ7Ny SHVRe9mze0+av2B+bE8Lhe2P0TQhY5DbqmnVrwhUBCoCFYGKQEWgIlARqAhUBCoCL1QE+udEQ5rr ffrTn/7zt73tbf9NNcYIxDkvMBHGdxg6Drr/nAbdciWt1AEdZz2EoZneDTu99AnjSpn+aXOe3JEO nfzHdRPdeuYMrcxxZ4JfOqeb5gKVhXVa6ZuvSyvjZdj5lnIO45fOvNDKcOYRpf/YojyBZ9J+dNfR 9NSdT8nylOGycDYEEOtlmY0kZGATgNX3xzO1J+frluUzPRaDaOUL7sgefeocI0KjlzQbFHr5iyae nBMlaCrKKqammAe06gUDRI5m3ZGPfpCLJkOe4sl8hR7pC0HxhnzDAzH0i5hTcimDOXgQVAyzXVQh lzDTcl6EWXHE+Um779sd2+S4VYbmDaV1165NrIjavnd7p0w9PaErakDJImeZCZtyKc75P3uO71Uo G9BYSfa0VmSNHDmuFUBr4myi7dqeljFrkKO8uoUiVoZzFk2CeHBiivoJgUEYw8JqMoxUh3bqYGsd Vo7LNRCR/wFiVhuJmUF15j7OmcJi4+Chp5Wpkkg5pgVZG1c9nBYvWpTe9sNvSZdcfJGMRL2+ZupU rVRauiQMTVGhNgOk+aOWjcf1FUmXrrqKQEWgIlARqAhUBCoCFYGKQEWgIvCCRSDPDpn4MCeSK4KZ 0P560mQfTnPj2zmdeEknTtogI80gPfDjSh3myyn51/mZr+RxWslvvpI2KjxRQ9EowYbgQtgv+SiU ncPw+c808+CbZn32SSvDjuMPcujhbyyZE83BVD1ZOHFRAv0wS5bHJ8/nnTsvvegXrlBU1oI+viYD 0xr5RrRR5qbXMMXRSOiHWY78FMaAQDAcabDIb2lBaow5MJFgHY7jN7J9adDHcuPpGSjTCJRy3Toh RzquW8a8nEcJWQGGJYwl4QTv8aPH0877tI3tcRm0ZPSad+58feZeX+8CDOuSaA+bAXq65cksGWPp wAjCVr2nbn9KK5kmp8UXLdHKHa0AEq2vPI1cLlxTZCKUo5NmEsmjXIc3ZGFyfcYSKOW6dUKG9MaN TB5Jq4fOTkv1pbMF83UoeGypFIOBUjDTuiXNhWipjU7EqqsIVAQqAhWBikBFoCJQEagIVAQqAi9k BPKyiFzDmBMVc6zimJpydlSG4SZeGn+ID+IhE+iWIT4RZ358/rrO+ZV8XR7iZZkGpffRno2haFAB XGD7zqQsjNPsm2eQ3+UxoCWveUhjvQeuGy55CPMXuoqLXpCdKpaQ1I9mzBxWvOTipUosXTCIgLp/ qnOx/il6TkHHuKzjJvYXcExWEnATwWa0ksWXL9b5QMclLdOctl7FOTtZ4T/hd3Q+iy5eFEYjzpua mButY0y5cVnHTexXOSYrCbgexjoJKuLRtiFjXAo2/bSWn1KOcI6XHSRaqqsIVAQqAhWBikBFoCJQ EagIVAQqAi9sBGLS1FbRMyUTisUlJPUmXmbo+aTbWGQ1linlTLOk00wvC2Ral9dxfHjsrIt4qcfp 9rt6Te/zT8VQ1FU4XubOhBl4WeCuDvMN8q0fGf+ZjzgOHudhHsuRbj7CdtA6K4oaEU2sW+HgIga3 rrq2/5xQOufKDHTBT0obyGyO2he1T0+bYWbv/RYCIuatQGKOgLkK4W6SWaTGi0oghbhWzoypBx79 obkXyOGBevog7pWHkC9MT480gzHZd/UTl4uVVaT7E+5iPo4AbmDBCnqbPnGM2V6Xt3ZJveQjq0JP RgKCHOWCJ8d6v338Dc9zinFR6ihbf4kzxk2durVp69IGevWsoYpARaAiUBGoCFQEKgIVgYpARaAi 8LxGgLmR5jq8VPfcviF1q6WjPMaYNOXprPjLiRa8GIusDb9MVzTiJc2TLtOcn3lLn7D5CdtZ1nH8 QXymDeIvZSM80aUUMFuhC2+/VGoe0xw3L3H/mce+ebpx6zAd37SuDHRoTnccmT7Xt6IotIhV/9l6 1F/CnrpsJArmaFd9CtucmoDFiHZcqcdt0yw99p6eUBUJOW/zZj+vBUFPT7YIW07pfXpK5kahSRZB oWk5kDOxHh21LMmWoy0W91zwQHEAv1E4PsYWkmhXNXHrIWDdXT7YAthgbu9/NON67I1Cq+olZMb2 939WjFsAaqAiUBGoCFQEKgIVgYpARaAiUBGoCLwAEMhzxDxJHDxfdCV1NmwzYTSl9T1zbJTlWWqb mqecloXH/LBYpmCPIPRBaSWt1FPKO6+SVspBH8RT8veFT8VQ5IK7cPgOWyk8g+hOJ816oFl+PJlS thu2vOn4zoOwy4NvFzLFMrJeKYJDySW3aCdYRtI4b9HpGnhc61wg/RIIseYEnpxgNUrKhJ7mNikC OVW/+X8vkYQ283yiDjpCT1dZE4+8unrQWOgh2ooTiHz69YYepZGEI15iYw19ahs9rVBIithmBqFf j7Fp9YRMsEXmOX/9Egg9zz3GLlgumwtMmV3R7DsW5YZZf0FrEk4vjIt61GBFoCJQEagIVAQqAhWB ikBFoCJQEXi+I9DOz5iH5dlbOR8rq1fYDNppXJPueDOja6Wgl39ON3/XRzAXIqsow/ASL/3M1fst 9ZeyPY5eaDw9Pa4mdCqGIkS6mbuiVuyKuBCm40Pzn/VY3r75iZsHmvUStg6Hu2nQS1nHTQt5bTnq y7MvElkghmO7WQ7lWI4UpJzYKOjXQ1Ksn5HfL9GYNrJs8eu8Rusxk/SYKbQWer1FS/RgKeKW7vML PX10y7kQjoupyC2LmGC/5LGc9RSZFOz9ekI+p47iafSMVlcx7muyDc6j8CsIbn8FKUuNiXGjtHoV gYpARaAiUBGoCFQEKgIVgYpAReD5ikAxB/acKKoyamLUV8FuKnFmTuXU1DylX6ajkDT/EcdZj884 KuVJJw6P6dBwplve8UFplsd3PvCN6U7FUNQtGJlM1CFreVfA8a6OshLOwzR4LV+Grctp8JcyjiOD k53IVoyGEGqzml6DsdrMU2aNwtYp0hdvE8pAl6Mbb3jHIPc0dRnKeBGOYBHvKZhAqCvXi/dCWU0b bwMlFgWxk2s3pT+eY/20joKB0a5EN94IjUHuqewylPEiHMEi3lMwgVBXrhfvhbKaNt4GnkuMJ1C1 ylIRqAhUBCoCFYGKQEWgIlARqAhUBE5rBGw66BSymHM1ZxSNwdjaN1BQ8lgDPnT+7KD5zzTzmI6P s0+45CGOI72r23GnWc50/FIvega6UzEUWWGZSVdpl4d0F8ZpliE+iFbq71q7LGMe6y91lmnWX9Lg ndRdUZSLEpup2k+oZVoh2r8IyXmqhl601iPVUEWgIlARqAhUBCoCFYGKQEWgIlARqAhUBCoCpxMC zO9lJiim+X2RPvrActvGgN8oa402plmQuPmhwe8/0+07HR9n3YStB1rpLNulm8dyjk/YPxVDkTMn s7LQZEbcf8RdoNK3POnmLWmmI4OzbI7lX8uVNPNDG6QP+iie5mAq0hqXRePUH2sppeDqi5uJhDJM vLqKQEWgIlARqAhUBCoCFYGKQEWgIlARqAhUBE4vBDSpZ3NRcQ7xWOWbMmWKJ/r2YXUYHwsBfklT tI0THuQs103rszgo0Xq7fI5308uydHm6up0+0D8VQ1GpuBsm7j9nVBbSFbBvXvvQCePMk2O9X6f3 KL2Q00p9pJpu/d30ngZYnXMfVz4wOjNaXam6UFGDFYGKQEWgIlARqAhUBCoCFYGKQEWgIlARqAic vgjEtH7Cc/uSkToRL2kni3dxgN/2CadZH3RbJUgz3Xz2zdNNJ26afWQIW4b4Sd2pGIpKxc6o9B0e L1N4cNaFX4YjUT/ms2/6WH5Xh8tiehkPWnGCeU9nmVsjmc1ETrC6nkhb+oJUgxWBikBFoCJQEagI VAQqAhWBikBFoCJQEagInK4IDJjbd4raOaOoNAog7DhSZZywldsveeHHOa0Mw9flLfngHeQGySBn WfuDZAfSTsVQVCpwRqVPuCxgGS5lCXfTuvFSr2VN68a7+Zqv1Glam/fx4+XxR0qGu5RQFKHewdZN evCYURyTS9Xiqa4iUBGoCFQEKgIVgYpARaAiUBGoCFQEKgIVgdMXgVHzf33t3NP8ptTFcTXZNDDQ ahBmg45kWBZKQ4HD8Dk8CBvn4zTiXd1OK32MGyVfGS75Jhw+FUPReIUcVNmT8Q+S6RbcPPbLdCrv P6d3AenGS/kirHVD1tBHLSIE4Qm+hpnDreOA6wHCHdEarQhUBCoCFYGKQEWgIlARqAhUBCoCFYGK QEXguUUgjATN3L5nMNAHqsq5fn8RzdZItYk2BJR088JUhombn/AgB79lyjC8pax5TCPuMLx2g/ic Nq4/UUMRmXYzd6Zk4PCgwplmHvM7XvoOw4Nz3H6m5l/0WrfpZbwMO93+qK+eBXMrMSi7XJi+FJkc I941PTqX6lcEKgIVgYpARaAiUBGoCFQEKgIVgYpARaAicNogwLSfeTx/rQlAoe7cvjmupmSzGHWx GsIhSkAOutXajwT9lHymjeWXeuAZJDuI1tUHj/m65enytvGJGopQ3FXaLXirtAjAY9muvNlMH6TP FYK3DJdxy5tmPvtdOvETxTIy4h1XqsxJNBu2ofWnEFc2/cSOrhqtCFQEKgIVgYpARaAiUBGoCFQE KgIVgYpAReC5RyDP6fvn9kzome8PnNvnxFxwwuXsvwzb/lD6DpfVHkRzuvOyPx6vZfAH8ZmGrrKc pdyY4YkailDgjBwmPlF5y9pHx3iFdZp9+HHE+UOP00qdIrc85i1phMN1D7O2Evvms0+zKSHoFcDF MGf1KwIVgYpARaAiUBGoCFQEKgIVgYpARaAiUBE4/RDwsTPlzF9mjYj2z+2bc43N6ETHqVoZJt1/ 0M0Pn53THbff1WP5QTosU6Z1zygqedBV6i/D5hvln6qhxwpOVsGxMi8rY12DfMvbNw9x/tDjtLHC yJjHMtDC9R9mXShsS2hRsbe0RhiSaNl41CQP4Olx11BFoCJQEagIVAQqAhWBikBFoCJQEagIVAQq As85AsVUP5dFk/lmPl9O65vFJSVpvKKjdZTmAQIlT6m7DFus5DUNH17SLFOGScc5zX6m9uiOD/Qn aiiy8m5BoTuNDBy270wd78o73f4gPtPMg289+PyZh/o4rGBf2DLQJ3VXFKEFwTibGo5StJSMNP3E uUQZvjgIexCPeatfEagIVAQqAhWBikBFoCJQEagIVAQqAhWBisBphUBzMlFbpvIjV53FJYNm/KXt odXRBAaloaOkWyc0h8fTY9kubxk3D3pKehnu5jEqPlFDUSnYzYC4C9NNs5zp8I3FC4/5/O16eE2z HDpLPcTtzF/qImzZrm+5HkdQJBKc8pEOZ9Ey3pxZ1PI4rfoVgYpARaAiUBGoCFQEKgIVgYpARaAi UBGoCJzOCHiXEGW0CWBAeUtjQBnGEsCf7ReIEodnkJVgLDpyY7lSTxku+cutZyVPWdYyXMoODD8b Q5EzKAvgsNPIrKR16d04/INo0HFlWqb06zet5HPYPjwu06TSOpiJTVJw68ecrXSP4FCp0AWofkWg IlARqAhUBCoCFYGKQEWgIlARqAhUBCoCpyMC7QRfU/5emJKW83zixVfPSOomw2JHWr+ywfxdHV0Z 68Pv8g5Kg8d/pS6HB+kYRCt1R/hUDEUodIYIl+FBcWg4F9zh0ifc1QOtdJYv8yeMQ9Zh4iUP8a4z L189c7gpQFOMlopos2IoBxtdRXMqeItgw1e9ikBFoCJQEagIVAQqAhWBikBFoCJQEagIVARORwRO cO5MmAEGz+aPHTtGAhz+61ajMSK0Ng/zlXKljNNNG5xxTjUvfpcPml0ZNs38ZdogmvlH+adiKHIm zsC+lXbjppc+OvxX0rth5wW9DDsP0xy3PHRoTode8pg+6YQcieFajkzqJRTCLU8OxG/BWASttfoV gYpARaAiUBGoCFQEKgIVgYpARaAiUBGoCJw2CLQTe032Fe5O7Ityam0J0/xCoEjMQdJKU4B5TSM+ Fk9XmXlLumknK8fJ0tFpHnSe1E3UUFRW1GF8h52RQRiUBg90V9bx0ieMG1T4Mi+H7Wep3kWwvMvj dHxkTvQdZt1qyWIWzkJaQVQQvJ6oFclMo5EwfQx/UE5jsAa5KILivVifnh45q+rGR2XQZWjiY5BH iVOOLu9opkqpCFQEKgIVgYpARaAiUBGoCFQEKgIVgYrAc49AMbn33D4KNWBeW9gMuqmOYxZw2HUj 7r+wPRQ85rWPjE0L5oVmZ/3mMd2+ZdA3Fo958SfCE/wTNRSVFS0zKivojM1b8jlsfhfQcfsln3lK vWU6YeTg68oPkjUNXlYUtTJBENGu/+RzxSwJg5jZtVaSQg56Tm554Mt/cPRLEAsDZsuTeUu2UqIX JtQfa+PFIqlgKeMUYZTr6clJTbwrV8T7JRTrJ4zKoRIqAhWBikBFoCJQEagIVAQqAhWBikBFoCJw WiBQTO77prJ9kb6SktJNJe7pv9PNU/rwlK7LS1qph7DlnUa8SycNZ1mn4+Ms43jplwdvZ+4Bv1MH 0MYilQWGp1sYy7lQJY/T7HdlB8nAU1bIsqWPHMYuyztuWceRMY0wO89IC5cDjsKmcHjQCOBkyBF9 ZORYGH8mT5mSc1UKJxk1UhE7fqzRhSVI2WAswhrpLLOZaXI6dvw4Fitya11htQxdYU1qGcryNEVs JRWYJCiOS5+yJes+jihLyewwZe8YvqTnhPRkHT0+9BlsU6PwkVdLqYGKQEWgIlARqAhUBCoCFYGK QEWgIlARqAictggwA86z+KaIMV/Oc3NPb5szimCA1M7KGwniJc08pY9RpsuDeElz2NlafhBfmeb0 Ur4bdrz0uzrQM8qdiqHICsnE4dJHOfHSuUDQumnETbNfyhIGWK96QpfDpJXO8vguH+mOm2a/lG3C WYUzyWakLD4JA4xUDQ8Pp09+5rNpzZo16aqXvjjx5TSMPxhayDZWGknBzbfcmrZt356mTJ0qg8vx NHPGzPTKl1+Zzph1huw4YhD70aPD6ds33pT27NkrI9IU6TqW5sydk1559VVp+vRpWW+76MnFJh9X MDftXlw8DVvmClb9NDHSKKP+uflndhmFQrAVV4C6WB6/Fwk1hZ6oc8lawxWBikBFoCJQEagIVAQq AhWBikBFoCJQETgNEchzYM+JPQcWNU90i5mvZsH5jKJuLZgcZzU5xZNl08oVO6SZn3T/IQkdXqdD I710ZVoZNg+074s7FUORC+0C2mjjuH3o8BI3rfSpiHURJm0s102z3i6/6fadTjxbeUzpla1HiVAW jcJbi3LHsHL4yOF04023pOnTpqW/+ptPpZe95Ip0+NChtGjhgnTJhotiZRAqvGJo59NPp7/+xKfT rl27w3g0ffpQWr5sWbri8kvS8ZGRNGXK1LR9x9b0h3/ykbR3zx5lMinNnj07XXftG8NAk/WoEK21 poEBT00pyI3BiXy7IEHLVCpSVpgbAicJqz9VPShQAbIeX+pQWn8qAhWBikBFoCJQEagIVAQqAhWB ikBFoCJw2iIQc+eYA+dZ9OC5dC5+s9sHljz9zWSHY2YsEsYewv7LXKN/Sz0OO3vrNN3Spjve9Z3e lTNfSS/DTh/TPxVDUanYYXz+7Ewn7kJ3w8S7cvBidcARLnUGcQya00q/LIP1WL/z7T/MOqSVJK5Y xNNyqVDaMnbo4KH06c9+Xgajo2n37t3pru/dne69/4H0hte8Ol166cVqGj2jIaIvv/Jl6bOf//t0 2x13pWlDU9PI8Ei64aabwlBEVqzCueMudNwXGQ4PH01XXHZpeq30DQ0N5dJoFRN8/NnFCibtqQz6 ZExYStN/6Kx6Mi+GJmg4aJMLPWwpO37ieJo8Bb3oD65Y0ZTvl5wnOlqDFSxyDWuOxC+wVlcRqAhU BCoCFYGKQEWgIlARqAhUBCoCFYHnCQLtxNbz2SCMVXiYYBiL2cIlj3ntl7rh6xkQsl7Lwl/KmF7K E4aHNKeXMqTbmW4+00/qT9RQ5AyskIxwztBxFxjfhp9g7PyYz+SuHutz+kR9y9l3PtZPHOf0HGsI 7U4vqA0nxpPp02ekFcuXpy9/9etp77796aBWE60+a2VavnxZu4qop2hSWrZsaVq8ZHFaunhROnL0 SDpw7GD61o03p/e9513pjDPO0DlHMhxp29mKZcsTq4+IL1gwP60668w4A2myjEAYep5+5pm0Y+fT 6ZjORVq8eGFasnBRmiLD0+HDh7V17Wg6IsPVvv37tVppaTp06HB6StvdqBirlxYtWhg62OIG71EZ o/bt25fmzpkbeR2U8WtYBqxDqsvhI0eiftOmDYUM9WO73JQp+VwloCjXDhlMDFXettbWvwYqAhWB ikBFoCJQEagIVAQqAhWBikBFoCJwWiPQTPg9uR1Q1uaMItsO7CPIH3EbfBplA5RkknOxD7WUcbjM wzxOI25580HDmZ5jvfKZjg6HzTOuP1FDkQti5WVhyQCASOvyOQ5P6axnrHRXBBnzOmw98Nh+YaMU tFLWvKUf+rzihoQ2AwfsN4mHDh/S6p+Nacb06Wnh/LlpxsxZ6RltK9u48cH05je+Ph3TPztE0X3w wIF01ZUvSQ9v3pIeeODBdO+996dbv3t7rBp6aNPD6f4HHko/9KY3pL/42Mcj/5Fj0qK/KVrBtHvP 7vRXf/vJ9NWvfTPNmzs3jDG7du1Jr3rFlelnPvT+9HdarfT5L34pHcDYI0PUS1/84rTpkc3picef 1OqhyTL6LEsf+qn3pmtecXW66ZYb0l9+9G/S3v370t69+9MH3/+e9Pa3/pC2vf1ZuuPOu9L+/QfT bBmv/uNv/7swfH3s459I3/j2DdJ5RRi2pmm7HWcWhRGtQRbjGa4aiTIO9bciUBGoCFQEKgIVgYpA RaAiUBGoCFQEni8I5Al/TG/9024tsmlDdoJ8RhEc/kOwdKXlYDw68nZl2LTxfOdpoxS81uE04i6L aV2dJU83bVTcBpZRCWMQXCCSywKUYYtCG0QnvdRj/kE+fK5QNx3dTrO+bn6Om886TI94m2gt9hvu WTIMvV7bwj7wvnen4WPH07nnrksf/MB70yWXbgjjjpXiI3pCW7tYxbN86dJ0pQ69HpHMIa3++eYN N8cKJAw0c+fNSZdejLyut0pzTKuKCLMt7KMy1nz4z/5SZxztSu9/70+kD773PekZrS76i4/9bfrc F74U29QOHz6a7rnn3vTQps1p247t6fWvflW66MIL0hNPPpG+c9tt6aN/9beJVUPnnXtOmjlzhrbL 3Zs2bX447dm7R6uShuKcpS2PPSGD1YPp0SceT8NatXRIK5U+/olPpm/d8J30t9d/Ruco7Yitd1Er Y2K/D8ESgRquCFQEKgIVgYpARaAiUBGoCFQEKgIVgYrA6YpAntQypY1pbbsqAvqoiW7LpsQuA3HT 8EtnekkbL9zNeLx8nVbmSdh/ZT7wms9+mT4wPFFD0SCFgwpR8g1KpxCuFH7XdWnmLfmcB36XHz7T zGdaGS/DpLfI9a5zkGN10Ax9hezt170ljEVvev1r0+tklHmbVuXw5bM4x8c5ZpEw+LCti6+evfqa V6SZkmel0I03fyft3LlThpib0zVXXZXmz5+X5SU3IkMN5wVt27Y9Xa8vq+3SIdfr169NF5x3blq3 dnU6c8WKMNx85R+/ls5dvy6tW7NKZVM19P+1r74mXffWa9PParXR/PkLYqvaI49u0Ta5vWmltsxd dNEFyqGxjOomoCwvuvyytHiBtqdpeVCcYSRF02RAOmfdujRjxrS0cuWyNEcHbOdzilxBYIuTkVrA nNJUvXoVgYpARaAiUBGoCFQEKgIVgYpARaAiUBE4TRHI+2I4RIW5bDYMFPPcYoLbHGZNYmbLtgaH s1DP/lDW12nmLdOKHEpy5FHyEy7jfcxNpKtrkH0HHV2+Qbr6aKey9azMYKyMSnoZRtaFxmLhcF9h FCnzIA0dg2hlmsP4OPOPlX8waRlZmR40fnT0sxSgonBiZXsW9A994Cdjhc6smTMj7m1YmTtnjXGF c4eOa4XQpRdflFafvTo9+NCm9NTWbf8/e+8Bb9dRnYuvq6t71XuvLpItWZYsy93GNjYG0zGYYrCx IQQIPCCQhF9I+Sf/l/dSeY8khEDovdjGuOCCca+4F1myLVu9996v2vu+NfPtPXvfc65lcIhEZuyz Z2a1WfPtOUd71p2ZbdfdeIutXL3aPvyhK7BtrMODQwy9cDUR9RYsWoxg0VprR5BpKbaSffUb38Jh 2Pv8XCKeibR3L+XM2tt7ePs0MAQBn/79+9nY0aNsALbGrUEwivZ4thEHN89YYs9aqBh73YYtZa1t OAAbNJIZMGrr3maf+PiH7cLXnY8zmMZYv379/I1uAkrYsJfuOHVDx/M1I5ARyAhkBDICGYGMQEYg I5ARyAhkBDIChzgCnBcjaFAJB4QZr4eOODmOKR5XQyY/ZPCjMoqV6TDpcXWGy6hcGqRGVSdQwlV2 UztdyTfSTdtK7cgX6qidVL9T+eUEilKjcoABH5XJZ5kN15OcbE0YzWQpIp5y0tIOqV3S6u1JjrrS r8swgEKwilQoYeuXB0EKDgqwopDIUBxQ7YmredwqAjcohAbCdR/OKGKgaB9sMdhyJt6C9sLc+di2 ttd+ctU1NnnSsTbhqCNBmwfD6ArUuPWMwRoeOM2AETah+ZlI5579Kq+fc85ZWEG0zwbAng6Z5gAP nnkBbmO1UCsgTgZ38DWeoYR2uHoo0IIOr2XM7ICvVho3ZjSCSwhEwQ4/nqB2AP0qsBHdDQSRfM0I ZAQyAhmBjEBGICOQEcgIZAQyAhmBjMAhjUCcEpc+guDRo3RuX3DjhNhjCwUxFmhJcQXNjFUnT7TU hlonTXTSdPBxqiM+2B5ySOuSI49tqr2UTp7qKZ/0LtPBBopSh1KDdbo6LSdUp46CO6k+y3KcZclL Vjl5TKzLdloWjbYa2aOu6J4jkEP9IpHIxKCJyoFSXluwbSsYQQBFnsKdouj6uCCI4lvJoup555xp V+NwagaPVq5aY5df9j6sSuplbXiDmcdtYHTfgX3OH40tZm1trba/Yz/eiLbOVzJNxaoktcHtZiGw E7xk6wr0BN8giULwKmrhgGvSGNBaj0O4mbp3Z8wuyDJjgKkFq4/uvvd+e+SRx2z6CdPsda89j6wy 7qQgEw3klBHICGQEMgIZgYxARiAjkBHICGQEMgIZgcMNAZ9KY6bLya7P8H2yjHJ1bh+3nql3Lo2K AkGiM6dFnzonRG8l8kSmDPXFS3VUTm2RxkSadFSXPOsqS560NHjE+stKlWDJQWqmjUtFTneVk6cO SI95ak+gq1N1Pm3U7UifuT7UY6r7QxplDiAwIh5phRcyXmgWPAaHyNXaIjLKBkKN1xZ/5fzmLVv9 lfVcrnbcccfZxIlHYUXRPgR+euMg6RNdfOeO3bC23wM027fttK3QmXD0kXbqSTNsP4JKG9ZvtC9/ /Zt2z70P2IvYunb/gw/b7Xfd7at8du3e48Eqrvjh6+2Z2Naejr0eONqzZ4917N3j9KFDB1sLAkHd ETB6GEGgBx96xO66735bt3YdzlFqsV07d9ripUvxBrRt9nW8De3Ka663b3z7+7YaQS0Gj9I75GCn yDnBm8mXjEBGICOQEcgIZAQyAhmBjEBGICOQEcgIHNoIeNQgzO3TyW46zWUH4taztC91kXo9la2X JasZtOqUS8vkp3XFSFI52SCNyXuEPNWr20l5rtTVJd0K1pVcs4alI0eVd0VXcEqyaV3tUF985aKp LtlmOe3WebRBerd3v/vdZyKAM73TzSd8XDlDTV48j2Vmjn1BLNngMOK4GYdQf/ErX7PHHn/KVuFg ar5x7JSTTsTbyFbaQwjQTJs21T74/vfZwkVL7Atf+ndbuniZt7dj5w4P3Jx44jSbOu14W4e3nK3C WUVLlyyzmc/MsseefNpexFY1nnn07PNz8Fay623H9h3Yrma2FQGeU2bMsJtuudVuYyAJxJ0IHu1E AOik6SfYsOFDbcmSpbZ0+XJbj+DTzFmz8Ua0XVixtAH+bvUtbnxD2vQTptov77jb5i9YYAMG9bd3 vO3N1o9nM1W2mSWYlDA4MvmSEcgIZAQyAhmBjEBGICOQEcgIZAQyAhmBQxcBn/BH96qxk3R6yx03 c+bMmXnVVVc9AmEJMk/L6qaCOeJp4UsqT1nxpad6mtMNfkSjLMupe6SlqRk/1UnLqW7D8sFuPUuV 5XTdmXo9dSTlsawkWwzepDKpLmXTusrM+Un1UtspnTaYFJRK5aKRaMqtl2zGSAqSF8JytFIiGNa1 tbW7nX7KKXYcziGiZ0cdcYQHWi568xtsxPDhNn7cGD//pw9WFr3l9RfaG193AVS5pW0/gkq9EbTp aVMmHWN/+kd/aLOefR7BHQSSYGcUdEfisOppU47DwdgL7OMf/X2PZ3FZUTsOpm7Hm9XY5p9/9o88 YLUf5yMN6Nfft5QNHzrUPvtHn7SzzjwNb11bb4MHDbITp0+zs1HfjmATz1EaOKC/DcJb2D7ziT+w x586wyYdM9GGDB6MLXFlT7ndThvzCIVGv/qe84xARiAjkBHICGQEMgIZgYxARiAjkBHICBwOCOho mTDh7+wxjnjhtFcTYuUS1JSYdMYZOD1OZVhO66h6Syld9pUrLqKptvTJVyJN8nW6ZJRLn/VUT/ym eWq4qRAYjeQa0Wgjpauc5nSQAKQ06ZGmYA7LaV106TbKSWtElx3mXEXVev3113/6oosuuoJbtMoU sBOCgU4VUhqkhMUACs8AomRHxx53nJRu3VpwHlA7TGBbGNriqqM2vIZ+H7ah7dkTtomVlvHmMfC6 YYtYC/R2Y1XQ7t0dbrMHAkHdEdVkZJNvS2MAp9xBuR967bYXh2VzNVEJLV55396GgBIhMd8K1wFd 0nhYdQf8oQ3uLuvW0mrdWrv58jquLurZs91t+moimORXhJar1qlNSk4ZgYxARiAjkBHICGQEMgIZ gYxARiAjkBE4zBDwOX0ysY/uc15+3XXXff/iiy/+Ikh78eHEV8Eg5vo0otdprIuGYmFH9DQnv1Fd 9DRPy9RhSjsjWuCEK/n0vcv0clYUpQ3KKBsmvVGq01WXHdXrunWbrDPSobwun9YpI33Js530Q/kD CNQU7bNAYXVFwn5gNRgyWMW8UCp0ZbAngjohhUCKn52OYA2DM0xcpNOKw6T9AGkohUU7MeSCgBID TAz4+EohrBYq2qUs6Hy1fZtbKlmstncLssFfXmkbtkIDfoA2t8Ip9Yz+hDraR9s85Lpfv74ghbrz 2G5UCn3klYGqQA+0KJCzjEBGICOQEcgIZAQyAhmBjEBGICOQEcgIHNIIYBbrbzpDhjydk2sxRO0w a/VGU2PWORVm0EVTY9HClLycLqc6lGFKdVRnnspKhjTFRCRDHpNkmDcKAInvwrik9kXrlB9soIjG 5IiMNKKRlzac6qTyKZ06jeqpfFqmvFIjPfGUS1e509ObTkaairoXEBBhKyrHIqtqXLn0+Jr7QGPI JyRuLSs1UESVUgriFLAlhlM77oIb4yD2mhsOYzvWvRJbpmy3xBiqDARVU2kntN+CFUXQSey4fFIP FnllUj9DLV8zAhmBjEBGICOQEcgIZAQyAhmBjEBGICNw6CKgOTDmspjWFnNyJzec34YpcJgw17sl HifamiRLhnV9RGMrmpSnuuTXZUVjLqdZZmJdifZkN6VLR+0wZ1Ieak2uYU9SE2ZCViMJqZOz4lE2 dVD0Znkj2+qMdLqy2Ug2pQmIlMYAjejubIgaBlK5pSuKFJIM/ISupR0UOzjpQ839lqzfCw/uqDuy I81A91piWJFMwhkkcU2CRNQKbUQ75FGEDNopZCM/+u4CTuJFPCrFMvSITsEp7OjGRicpUAhRP6eM QEYgI5ARyAhkBDICGYGMQEYgI5ARyAgcqghoAlubk0eyuPQeIQNOfH1mnfQmToadLp5orlaTrZiM 9iRCHnUb2aFM3W5aJ59J+soDtXpNfahymtQONlBE9bpT6pQared1Hekzp6zkFQGjPJPkyFeZdMmz zCQbsteIJhtpTrnUbjREUgjI+NUlUtPklvXgTNBxUWgHhwItNBKkvDkJkZHY8Wq8VEScJkozOxQS rzQirUBhTZQom5IKXtSXGchIq7QjmUZ2xMt5RiAjkBHICGQEMgIZgYxARiAjkBHICGQEDj0ENHsO c10Gi5hw9W1E1TlwXFxSj1eoU1TlR9Pml8qpR5nQJGuhnNpJeUGivNZ16/qqS6PuW90/yTXMX06g qO50vSHW9WFjLEsnLcthyTbzgXTp0x4TdZQalUVL26C86NLtlFNBSs704CFLpao7g2opJy3XyJeM QEYgI5ARyAhkBDICGYGMQEYgI5ARyAhkBA5RBDi758d35qDA7We+IKTTMS2QCSuK6vEKDwtEMzTF pMBAMB1oojOv00UjvW6fvGZJ7YnPumjKxUtz+ZzSuiy/HKdSQwKCeepQvS6dumOqM9dHdlKe9JWL p7py0ZnTTle2KCN56VeVoK3NXkEA4olF8koD5QazwlguZAQyAhmBjEBGICOQEcgIZAQyAhmBjEBG ICNwyCFQzOVZwDw/3WGmaT+dxsunKKGPWMplRjlVWBafdZW1KqnOp0yqX6+Tpw95tJMm6bKdVE4y 4rOelsVvmv+6gSLq0Rk5pAbSeleOUC5NqR7pKV9l5alevSwZta26ctluSQ+zrhshhDIQFKDuBJkp TzHiOUCpbCdbmZARyAhkBDICGYGMQEYgI5ARyAhkBDICGYGMwCGEgOb2cInLijxV5/b793tchoL8 SIh5olyURSM/lUW16aoh6SinbL3MumiK38i+6GmdNNVpT0myqneZq6EuhcCsN8Q6P2qMeepQygOr U6rbSwXqdrqSpV7KZ5kf+SWecso3SI1XBQVD6WCpm0G9GFQNzGZSRiAjkBHICGQEMgIZgYxARiAj kBHICGQEMgKHGAJxbl/M5+tz/cLdOkPxCuXkK/5QKKGQ6qksHcqRJrryup26TFqXDeapnlYv1enU TeXIb5oONlAkg8ppkGU1RmdUTnksN0rSTXmk1emsM9UBEU06klNO+TSJLtqBGB30OtcHuYKkYs4s 3WRG4dRwWFd0sBB6U/mSEcgIZAQyAhmBjEBGICOQEcgIZAQyAhmBjMB/GQJhwu9ze55N7MEi0kIE oOaWiI0EGtGoLnrNVKVKmXqqhhtKO6msbFNW9LRcD1BQJrVbb7NhvW6koVBCbNRA6lQiWoDTTCeV ZZlyqWxaFgCpTtrhVJYydXnyU1pl61mhLCnkqbAaJS3ZdAZnQeF75BtKSyvnGYGMQEYgI5ARyAhk BDICGYGMQEYgI5ARyAgcGgiEHUXF3F7HyTSf2zMUwIl/OvlXXTTl6mK9Lrpy8pmUh3BDoNWvjWzJ J8nKjvI6nfU6TzKd8oMNFKUG6VCzlMqxzA/bSOkCoCs7tP9SfNpsJJPSWJZc6sOBffv2pXJuyglR qnjpGThyP7B4xUfCyl0uXzICGYGMQEYgI5ARyAhkBDICGYGMQEYgI5AROBQRUBCgnNsHL50uZnS8 ybnGQTVRi+LUJq+eR3aR1VpxeemktllO64WBpNDIVsIuipJTXjCaFQ42UJQaVOcb2UzlxK93rn5S t+Qa5Y3sSY68gwWv7oN1vulhk1kZVVQzzNlU6grKsFjflpZq5HJGICOQEcgIZAQyAhmBjEBGICOQ EcgIZAQyAocOAh4Y6BQdaOxfelxNIpEGBmhJdZb1IS3lJeoNi5Rlki2V07oLvMRFdqRf96Feb2ru YANFMiBH2YAaYa6UliVLHsviia66dNNcPOXkpXqN7NX1qSt9ykufcixXAlZiHjhQIVM2WpGpQOI2 xhBUiuGiKjsI5WtGICOQEcgIZAQyAhmBjEBGICOQEcgIZAQyAocOApr8Fx6B4LTqUpC4uEQzfeWF FgrUSumpZZWVU0+yoqV1llVPZVlmkk6oVa/UE182RFO9zq9aqNVebqCopu5VNciKyszlkAvhUm9L sqmcaJRNO8ay6imvUTuN7NEH0T1HdLDij4ZES4tcoEo1tfh+tBgeimLc3ejF5mpVI7mWEcgIZAQy AhmBjEBGICOQEcgIZAQyAhmBjMB/DQKMCMS5vTvAVSD+f7G/qJFfnPHz4/GEREC0ekRAcsqpIlnR Uh2VyWNZdeoxka6PE2KdZcrW9Vj/tVMlWHKQVlKH08ZTp+Wk+HUemxKvkT0u65Fv5OvTyE6qT7tp XfJqS/wDra2tKa1ooiSGA66oIIsHupG7v3DcefmSEcgIZAQyAhmBjEBGICOQEcgIZAQyAhmBjMDh gQAjDXFu7w6XQYCK/w22nqWSijuIprxiAxXJiZ7WqcN6qqt6SqOu9Oq5eKSn26Nkh3wmtRVqL3FV MOYlxJythuSwHJQu65Ihre6I5NlmyhOdOkqyo7aYqywZ5qKlNkhL6yyndedXD7MWW+uKaLoFxkVn HY01OAW9KhHk8jUjkBHICGQEMgIZgYxARiAjkBHICGQEMgIZgUMNAYQDGBFI5/asI9Xn9nHrWZ0c hDvHIijnsYYkp2y0zqKntE4dBncatZHSqCPbbiTW0zL5aXynLi//pNNlnhrqUjBhymE23CiJz1xl ykleDqf1RnZSWmpLNkWjHdmijvipvvipTsFnSEhqVeUkcAQRLUSryhRmciEjkBHICGQEMgIZgYxA RiAjkBHICGQEMgIZgUMWAc3mMbtPowQN/MVCEQpLqi4hXhlMqEqQ3khXDkhadlgXr66Xxm1SnuRl q85L6yzX5aXXKU8b7MSsEdSI8hrbqymPZdUbOZTSJEcjKV118VOb5LFel29El4yWYrWkW8+C8dJ0 qNMMjUdVWQCtaDShJUXXy5eMQEYgI5ARyAhkBDICGYGMQEYgI5ARyAhkBA5NBMpjihrP5hEo0tS/ GiII3RGPyuLXy3XDkhMgzeqpHcqmcnWbB8NP22ukL36Rv5xAUaGUFFKHE7IX6UDqRFquy6Z12Uxz 6rL+UjYpIznltK2yfDiQbj0TUe4WjUQGlUMqJZ0WGcxKGcnmPCOQEcgIZAQyAhmBjEBGICOQEcgI ZAQyAhmBQw8BzO05vcdEviVZWpQePxO3ntH1MhBQnforFJDyWY6WqVrRbSTnQlFOfNpNbVBGPJbr 4Qfx5A9llMRTva4reiU/2ECRHJWyjNcbFZ953clUR2XJN7LTiNbMZld2yKOtSpvJTa8yIMrIogvH S6lcMQGZ4GLYuiYXoBvI1VsZ2VULgSg7NRcr+sXYLZtBSQ1ViKg0aiXIvDw7dbtle7JTUiirWvP2 oxelaGyCmp21uPWvsc2McWe0IpQlooKupGSMHYsSmP8+47g6Ospa83EkbEpZlkrsqvR6rZSTnZKS 2mnefrAIraqiVztr/XZ/K+q97bre2VvJCxvVQ17rcJWZ1Eo52SkpFFOtefvBGOQkGq2z2lkrxTgK 5iwjkBHICGQEMgIZgYzAYYsAnnbiA4+vG/J+cPapTUhFxzo/FhUsL+jRSXLK9YSlurRUV57SRZNN 8ZiLx3LKr9PJZ0rbZzmtu0BXl4MNFKWO0F7aUFf2xaPzqWMqK5dcV3napvTqOfUb0WRXPGtwgnmU weBIoY5UVyxHkFOLAFFLYTbQoe8mOtmJYY/EDjWb2aGYTBSBEW+hoHqNl4oHNX9KKyhVBBvZEa0w nRRKnuyUFIqpVmkk0VcRchKNJFZdK8GGlGbY8B65iZodUut2WG9m55XCOHVD2ISuiaM88SX2vZqV crJTUiipWsa4xE2YKM8Yd8Im+V5VRk7tt6JEECOtIiiOcmLcVSrlZKekUE+1rq24nERjc6y6VtIn Upp9x/8zfiuiK4lHKCb+VHr1u4hxFYBcywhkBDICGYGMQEYgI3AYIRAfLivPbskDZ/Lslu5CSjqo Rz3m/BSPp1FGfNITw5Hb9WO0dCXcVT1tW3LKqZ+2nfqSyqidTvnBBoqoWDeYNkx+vS4d0pvppg5L njlTI73ACbxUl2UllVN+ndeCJDnxPCfRnS08LsWgU8gGKuv4lCIFv5AsChQLFdmhWjguOwrV7JAa mqwyCjuxtcKO2qqKh3adJ82gqFqq5jQRon1lNBtY0gwNqTmpqR6dl3qRF3akkAAobCgc7FBcZWZD AABAAElEQVQIn8JoYSb6EtjiyzPZodpvA2Pvil/kQfBTNWe5L/QHNRGCWHEtsAlSUaPsvtQKOJIx WRiJWi4rBQEEnrChfLBDIXwKo+SEVKizEPlFn2LbJGeMiVcJ4CGHcf1e6caWLrMDYVg6T3fZyehZ UEjV/J6LEMSKK80GljRDQ2pOaqofer8V8LBwLnSLPnf5e3ywGNOuAyBsgn3VUmwOTYyDv/maEcgI ZAQyAhmBjEBG4PBEIDxt6Xmdj2b+2Jc+hMWOQab2ROgM0aQqTeWChfU6jTzpq1yvk94spbKSSWlp mfy0/bQs3ab5ywkUddWonEgbZ5k6oqX6ojGnD+Kl8ikdIhVbrMtGs7L4zGWfskz1uhPSxss/p8tM VEK1lGOpaiqluKb+nA5JWXINVDjswmHZpQ3JFE5G4eJQ7WiHcp3sVKKigU8Zt+nChLT4u7vTZcfl cAmyLgzZkFSTbPnWPZfubKdQlGZph5SghUKBTUEp+lTKsdTYDq26Ju1EE7LkGiSj8NvA2NvzS8a4 uC8sIJXY8E7oDoVbxprz03vVZByXdv5rMOY/JvzQD36KnvwOj2N00xP7qnvlfcfF72VyryhIHpNk /1N/K3Av8FIC6969u3VHHlqXB+5Gca/kk//mxBsXs+AzKtXfimCnG9pw+2jDHyacTE1phxJrYhV2 EmzEp4wPFxcO45i+MVGmtVs3a0Vb7BfrjTBu6RZ8aoNciFzRDhM1wjVtL1DBSPyhnPsS5Vk/+N9j l86XjEBGICOQEcgIZAQyAoctAnpW4uNTo2c3dSy+9awQj3Q9XjFXmSw+XtVl/akvoUuG8kyU18Oc 6sybpbQ9yajNRjzJMJcvKa1pGU+av3ZSQ+yYygdrTACleupYyhONdpsBQHnZqeepTmqrk5/doKn5 nscd8FAtY24eEwYnYMsiA4v8628wGEr+DA5C13aSZrn1Ecgd2A8ljs5okWTadVJoADVw2UCsM6MG ZZjLzgHYI4182SG7TPCbfPbF2yvtBEVMgtF57z8kunXvBlvdbN++vbEhEF012AmTlNCg26UzcEDY FCWnvxQ27lho5xXHOPodPRM2dYyFL0H9bWHMtoQ3vAzpcMSY99hTuPvNME7HsU/ufSxGVc71k3Tg wH7bu29/cVtK1ssbx68Ext1autmuXbutexuCEt1aYTJ0uPNvBbzU4PlNx3Fix7/jvwbGMuHYUT/+ 5oTfiuq9KvFlKWCs77jshO8MDCFYwd+uYuyCVJRlyJWqdojNb/5bgQZgZ/++fbZm9RpbvGSpB3NO PulEbCneBxZ/x4LMS/4eq2McsMSGep6ADe75tu3bbcXK1bZk6VI75aQZNmBAf8gQN42A8nZHtQJj 2qNB+qPvQ7CtaxWbA/v325oNG2zJkmW2Z88eO+XkGdbNx1pow7Xwfdm8eYstW77C1q9fb6eefJL1 6tUL9wLc+LuO5rwfulfBA3rM7xKZlIWb8Z7R7ssbx9TIKSOQEcgIZAQyAhmBjMDhi0DxyKdnQJ+T sz/hyUn8+KZ0VfnkmCbRmadlyonWqCwbKU802UnrspXSVJYN1iVHGhNz9vDXSr9uoEgO+aMwWlad zskxlsVP6XRUMmlel6Eck2RCrbxKnnx9xGWdfCXVmTO1pIdZ+0N/OmGFpk8DipkP1GTNizFI5Fap DYNuGVrRjg8xTBL4Hycc3VoZdHEh24f7dWAvPlD01WypHXcPzQVRauM/CoLhDSGLemor0CFJfikW KsU1GkAW7OHqkxj5HBuEEc03Ft4y37Yu22aTLz3O2nq1uby35f7IodAgbQZ/SmxaYifq2LhL8JXY hBkKKbAX/Q/FYIfBKvp5YF/wy3WAZTdMVPeDRjAqdmgjdsXtoO7tu7ve84ItjN0fXPZ1YJLZinY5 CXY9WI73030jNrSPTzE0ojLJwWMq8n/3qmYnOkY7US/IqpIYYyO6ESS7WfnzymLszqBD3gd3TO2w WbR1MBjTR+pGO8UXP3bU7YROeF+6AeennpmFye4Ga29vs7179yEguY9W0O2wUuSI8ePsyCPGF+eJ uX+hEW/rPxVj+OD3Gv63trTaOvj51W9820aPHmW/d/ml3gd3Fk75nU4HBB1lgm7odygLmzCkDgJj NxLtwKZDyYu3hRCu35dQpWgdY2+feugIeZ7oG8ef+xjveeCUbJcNDTbFWHakC/OxBVHoUEjOiBU3 q76jDwDDvWOfkOrYOBE6lEm/dPw13bRlq33129+zxx5/wqafMM1OO/VkHytsqW7HsWk0jr0BKsC8 +xbKbIsBwbvvfcCuv+kWD0b9+7983oYMGexBHLbh/ZNeA4ydD8PuD+VjCnX2NzToEnB46/Yd9sOf XG333v+QjR090mbMmO4ri4Id4XvAbrjxFvvl7XfZHnxn/u3/HmN9eve2fX5D3atotsTYkfV77qVO 2LhbUK1jrHYdG1yCneB27ErOMgIZgYxARiAjkBHICBx+CPARTM9ueMDxZ0B/lmJXwrNbg07xUUhB l/jQVUiFh6zwuEYZ8vlJddJyoZgUyK/bJVu2JZrabaTDaRiTfAi1UNcUTbQucxnqUgjMutOqp3m9 E6njdV6ql7ZNuWayqRzLkqMt2SNdZfJVVk5+p+STKFkruCCE/wuKt+i0KEyrXvRHbDRWKmiItSCo 0bGtwxbetsCe/MqT9sz3nrGNL2ywlu548I5m6GVRVmuRRzsSKwogpG1JhXkhKyIIgVbaObD/gAdF 2G5pp9TkRH3Pjj32xL89ZQ/93cO2c80OsySkGKcMlbY62YmI0yqLJV+OMQ/OlS1HHsnwgX4uf3CZ bZ6/MdSpwb/yr9pmS+5eYnt37nG67Li2jDGnnWiSTjTFmP3dtcce+fzDtvKhFb6SioqNfW5sJ7Tj Gt5i7L47UNopvKm4KhfT/LeCsdChs3CNY61+rzSOo0BwUd1g7nrR8wTjtP/k1scx7+PqNWvtxltu s3/4P/9qN//il/bs8y/Y7NnP25NPP2Nf+srX7a577gsT5WCATSH952Mcxp435oOXgcMdO3bYgw8/ ak/PnO0+RG7MAgjBv4Tj5EhthrHLCC2vBANRzTudkA3fCfcPS0ikFYHphLEbgm45/hLfUGz0fQjN vpIYV7vDmqyHfqAX8Z9cts0+NfY3gBD8C3J9+vS2i978RuvY1WHr166nae9Tp3HsqkIr2AnCfvUx TAxlm04Qm71YncRVPTNOmGpLl62wPbv3eMOFnArIG/lc9M97VbYV1IRC6Au5vXr1tDe9/kKsjupm K1etxkOLfA6+OTa4nP/qc2zs2DG2fPlyDAcEt+ONlDu0VfoTqdEUa26n0mFqMIEb/g9VXZ1GTaRo J1TyNSOQEcgIZAQyAhmBjMBhiAAea4pnpdqzT/35uMELsPhQFB+MijwFQTzS0icnlqUruvJUVvrM yW8kk9IkLxpzBbRoV3zZU528LtPBBopkUDmNqqycTqlMvpxlOU2Sq/OpS1qdTt1mdOroQ7m0zHqz hFX+KX4QYwvUZlKOYsUZVELEESIYRS7mfwlvpAA+J5ird9i9n7vX7vvz+23OlXPsqX970m77yG22 6NZFvsqILVBbg9Ut4eL2oc8ZS8UH8ahFf+gvE6pMXo8yIojGnCt01jyzxu79s3usY+tu9zEoRUtu 9oC19exuE958tB1/+RTrMbintYTFHjLp7UWN4Cvb94lNoEZ34uIHYuWGCz/lLw3KjhuPZqi/v2O/ PfK/HrYFtywKgTXQuiHAtvaJNfbAn91vuzftCmvWpAglTZpotJhn8a/pbpcCVRlXxbdg/+79Nu+a ebZh7gascsB6Bd5f/lLQTmKfRdVp01NBqN0r8b3vFIqCUbFQk5wMhmYrpiXSEOOCiQKNJnbEUltF 3QmB6uIYxwGlKFEogCt7UlYOmYYYg1+oJHaKIvj8/p1+ysk2Y/rxtmjxUps4caK96+1vtXe98yJ7 1zveaj169rI1a9Z5S1w91r01nNtCAu1whR7PjuFZLkocY92748wanu+Ce+d8l0l+5qJj5PMsGMlo hSHtbdiw0X52/Q22eze2msEeA5Yjhg21v/qzP7GPfuhyNFf0Divbgh+y42NGDsFR9x3tcOUMx1Vr 9zZvU2OrGBLRX9rhR/6QX2CMCv3bgpU0P732BgSvdjou/t2iV0mfKjboL+3Ir+i+bzMFlXreLjBm zjplAz2cAZTKgO1JNOHIetKK90E85oEfdInLzp077eqfXW9btm7xdiEQ7PI+op/uk2MBf6Lz6gOD KO3t7TZ50jHWqze2XsXetXKcAONiXFABn2JswJ7sFv6AT/vpeUS0wzR2zGgbN3ZccI3DCC6qT4W+ S4JBO15GXB3tPDfnBfvFL+/AuUOt/hE81CNfdogF+9PW1maTjplo/fv1dyvEgP2grMYDEeIqu+HD h6JEvXCvXCHaLfpHZ6NHLNGW2qSMxk3Q9atf1AdRAvaBSjs5ZQQyAhmBjEBGICOQETj8EcBTDZ/d 9OATH3L4bNUgicicGtJKRes06aQyKounXHTmssM8Pn0WbMkz50eyFBCN5WTyw2pFNtVxZrNLsk6k mYjTabDujBSaNSZnGZFhWUll5aLXc7VJejNZyShPbZCWgpTaqGw9K5RkBTmFWVXiwz1pULSHH3nM Fi5abO+75F0+4eXqiE6BJy5fA33m12bagpsW2Gl/dpoNnzbcdqzfYY99/jF7+H8+ZCNmDLdew3p7 Q8E5XDHvpWrH5l0eZGnr08MnKZxkcHXSfmxZ69jRYe392n1isx/HB7kBOguhVmzp2QeZfdiW0B3B Hm3bYmfYB26j2b58m7141Tw78y/P9An3/m5YneDbuIIpnwC1tdiUy473LXLtfdrRPxoQP7QFYyAd sI7tHQgstfu2LbdDMbTF7UX7ccbMHvzFv603+DQAM2GLQ2EO0mViE86hKFZNbJq/xXau2+G6IbTX Yrs377aNczbZ/j1haHHpILFhX/ft3mutPTgphT6CW6QRSPmzD8GnvVg91Ab82E/650BDbg9WKHFL IP3kNjSOnu6wxT4FOxAN3rmXYXIaPCaBTWnAUa5MVS33B0xpFnYkhrzklVZCSRz6QvQr4Z0gUrPD apqCBV4Dxy3QeYIWaak8SY04FTsKNLkdWqHtIEFbqskO8Rw8eJANHzrM2x0yaKCNGzfWt59xUnzJ O99mPXr0QJBmPwI3m3zrz8CBA3ySTKDXrdsA2hIbNmQo9Ma4u7t27fSVH3369LHBgwbYvPmLbBeC PUdiC9twBHr2MTgMRxhk4vdjEb7Da7AShecOHYXJt7YV3XrHXXbt9Tf6+S8D+ve3nj17YuXGAZxP M8AGDRzobbFrDF5xSxrPr+no2GPDhg5x/ziu2D/mGzdttpUrV7mPHbs7bBHO02lF+8dOmGC9+/Ty 7xV/P/bu22MvvDjXNm7c5AGQ8cCC/qQYB7l9vtLqJ1dfiyDbCdaxpwM4tWP7UR9vc+GiRViptc63 840fO9aGwqe9e/dW7BADvx/wkcEJrpbi79km+Nq3X1+bePRRfu4Nz8lZumy1B8wmHH0kVnzN9fLk Y48Fvwe2Pu21ufMXeGCtf/9+NvGoI60dvvC3kAGJTRs3+33bjnN+emP1z4SjjjKuAmLi78n9Dz7k W62mHn+cf3fasAWxr/NbPHi4CucP8cDmCfBnIM4G2hu3JrqBePHfKpR5lk9HRwcwnGfb0Z/Ro0bZ GGzfoi+S4dk/K1ev9m2OIxBoOWL8eP89Z+PcZrZtx3abP3+hbdu23f1kQIZj1MHjuMG4XIF7uXTp MuuJ/h+De8hglf82AFHdK36NGMz78ZU/ta3bdtiZZ5zqPI5LrhraCvsLFi62bVu3wk5PO/qoI43j zO1Al3b2YTUTz17agPHA8TJ+XBjDe/dqFSWEYgCc8gw2EVP6v2btOm9n4gTi3Sd8pxAkWsmzlpYv 8/qwwUNs/PixuP/4fYM+L7TjZdZjIi3lhF7WpaJwzjICGYGMQEYgI5ARyAgcNgiUz27+BITHGz7h 8MiN+FDXqCcuQjF8WOaHSfQwOS1pLEk2UKvXVF+yzFO6ylXNUAuPaiVHssrFYb0uK17T/GADRamB l+qsnJCDnDuzrDl0aovlVF7llC75lEdaVzZT/UbAHMB5KDV7IejBscHkwcRY5oM/Jx/8Cy8fvOct WOjBosve9x7bu2cvDjzdZv369QuKvLplbGfa2mEvXvmCHfnaI2za5dOstTdWOuCgrI4tu+1+rIjZ vGSL9RzWyx7++4dt6xJMGgb3simXTrJ5P19gq7Fqpr1fdzv7786x/uP6+8R28S/m27zr5yNQssv6 H9HfplxxvA09YSiCG2gSTu7Z2WHPXfWiLX9ghe2DX8NPGmHHv/846zm0t/NXPbrSnv7mM7Zt4Vbb vX6X3fPH9/rZQ60IKJ38xzNs4JGDbOuKLR7I2gXfuZpiwNEDbMYfzggBE4DDSfaqJ1ZiRdRCG/fq 8Tbvhnm2ZfFW63dkP5v+kRNs0DGDfMJCCBb+cqHNvQaTy027bcQpI2zgxAG27tn1dvJnTjYGnzyY EDEOt5OBDyYRwy3inWGJffQSbwgJEGORoZ2ldy4BNvM8qNR3TD9gM8WGHs+/ugcZrgqZd+M8m3/D AgSKOjxAd9z7jrORp42CADyBHa622rtrL7YIPmHL7l9urW2tNvGdE31lVdGeW6R/dICfcKW+n+VD ktwXj0IuW/52BM0GdqJuOv6EjZuRHXYc96NqJ7Tj4aMu7AQWr/hEO8FQVAoNxY5F6Vq/KBI5Qdr5 tJcqxzJoxKaBCQ/A+F2nH0hc1XELtqHxLKDjJk/yifnXv/t9e/jhx+xNb3idffoTH7PFi5fY1771 XXv8iaft3e96u33k966w1WvX2Pd/eJU9/vhTNnjIQBszajSCMktsOSb2E446wj77mU/ZeGzX4WR8 29Zt9gOcBTP72TkIFoxBwGiZBz4++0eftGdmP2dXXv0zn2x/67s/8GDVMROOdju/euhRe+fb32KX X3oJ+n4AZ+M8aT+88mp8T9oQqOllDGycjnNyGEDuheDSzJnP2tXXXWfPz3nRpk6Z7G0vWrTU1m/c aK857xz7xB982HoisLKrY7d9+7s/tGeefdZGjRwJf5bYtKlT7A//x0d9FQjvMxMRuuee++17P77K DzP+zg9+Av/a7OwzzrDzYe9HV11jv/rVIzZy5AjbsXMHgjoddhl8OeO0UxEcYEQ52JGtVny/lyLI 9a3v/dg2bd5sI0cMxyqYF+344ybbxz/yQbv51tvt9jvvwu9eO/w9G6usbnI7//xPf4sg1hD7Ju7L YmDXt19vW75ipU2h3kc/5GfmzJw5y74PP3u090TwqM1eeGGuTZs2xT7zyY9bbxy+fN8DD6LdH/r9 /cGPrrLevXvaySedZG/GPf7ptdfbgw89bIMGDLLV69bYAPy2fvLjH8HKnhBIDP2IvwnoEoNSy7E1 7F++9FX8Ni+wFctX+oqbz/3Jp+3YYyb6mUJX/vRae/SxJ2zE8BG2HgdGr8LWro/8/hW+jYvfgbXr 1tmXv/ZNnJm10YYiQDdn7jzf1nbpe98F3LGSC0Gin173c+vYudsWYlxxDL39bW+y37viMv9d4rgi uhzGXIn2w59cZffc9yACZH1g91tO/+D7L3VfvvWd72Pct3ifX5g3345CwOqzn/kkApHh3xAGvdes Ww8bP7WNWN22Ar4yCPnRD3/ATsRZTEzd/AcifqPQ6C78pv34ymts5qzZxoDqylWr/DvwqY9/GP0Z YvdjXPz46p8CS/xbgoDb6nVr7a8+91k7ZuLRHjijzUa/OWHE8IoPOxfHIuVzyghkBDICGYGMQEYg I3A4IhCfoOKTcXjaYT9IDxcWQtKqbtWRxwcjp8iU2KyXE75gjXUl8VlPdVWW7WZysnOweWpHOmpL 9aZ5s+BNXYEGldgBNZDSya/XSUvlWa8n8pmo20jfmbgIONYlm9JIl620nMqS7gnL8FNZ0PigHyfe /kBcGuM2hGsxSfq7f/qCzcODvXMgsxZvnfnK179pX/rqNzEBwF/tqccEyy0IwW1bvc22Ld9uY84d a+0D20OoDCt1jnr90fbqL5xnfUdjFQAWrvQf399a21sRVHnRzwRafOti6wH5bj1afQURty4suHmB b19jUGPEqSNt3Zz1ds9n7rZtCDD5AcxYvTP727Pt0X961Lr37m69R/SxZ7832x78m4fQBhpB6t6z 1fqC3t4/rO7pNaSX9Rrey3ojWNWtPazIYd4PganBEwbbpsWbbO51L8IH6ge46MsWtDnz67PssX9+ jDN7639kf5v/8/n2yD8+avt2YTUBZJY9sBSBqHs8ADbkeNiat9Ee/tuHbN61c31LmYcNYbK4CT5L QTMaAc7ABXWuAuI5T1y51LFtN9rAWSFM4LViNcbqJ1bZ3Z+9y7YD74FHD7TVM1fbnZ+6wzYv3Ryx afXg1oN/9aD3c8Spo2zzos1275/e6+cdcZWYN4v7N+fqF231U2ts0LGDbNuKbR7QWzNrbdii543S MUhTwZViH4KrSYdc2PsXxLxDgejXaKdGCVVopOLCptBDwdV5Se2EerNxHGaCUIl+e6Gw48bjhUQk ZC5a+z4EJq6FnSDLsemJdOdV7cRapWs0TVGeycIVNTzg+sprrrfVq9dhC04/X+FyyonTPVDD1RVM AzARPmnGibZo6TJfBUNarx69EVg61pasWAFba2zaCVPssvddYmefeQZW4Nxv993/AIKcXK7XYj9B 0OCnP7vBLsBZL5e862Ks9hllt991jy1auNQmTZzggYJePXu47vmvPtemTj3OVxwtWLzY1iHIQBtL li63z//zv9nWLdvs8ssusSsue6+dhjdQfef7P7Ybfn6L/xYMGz4EwY0x9gKCDrux4ui8c19lH7ji Uj9f5uprrrPFS5d4kGM2glM/RpBnxvTpdgWCUKefdrKfP1MBCn3kMDgKq0S4Da5Hew971Zmn2gXn vdqOPXai3XTLL+1b3/mBTcdWvivoz6Xv9UDRP33h32wBVhl53wlUTPyt4kqiL375G/bkzJn2nne+ 3d777ovx3W2xW2+73TZjtQsDdTvxprdfPfKIPYqg2Fvf/Ho751VnWRtW0fwAgZD7H3zY3nnxW+2D l18KLM+1axBIuRtY8x/U635+M4I9j9hb3vg679MU2Lrxpltt4UL4Av6RCI6MwaofBqPPOPUUBKJe bcfj/t1597323R/+xM4752y74v2X2PsveY899uTTwOdnHmhz9+P3QeOJAxVHodukSRM8MHbB+eci iPgUDny+29viWVi8L/yNvux974K/78NB2Jvt+htv9lVI3JJ17wO/sltvv8ve8qbX+/08GquJlmEs hYQVhgiQ9EWA68LXne/49kZg8GqMIQaYGETy4R6c861ix085zldXMcBzPvpy3jnn2BCsTuJ9uvWO u+2C88+29/NeY8zcetsdNnP2swgKcjsYElZB9evT197+1jfZx/7gQ/aOi95ks59/Hud2fQMr1MJ3 4AC+ay6L+8h7eQPwJuYMpn4AY/GdF73V7rjrbrsBmHNF2Y8Q0FyH1XMf+sBlHsjcjYDXVmz5o67s cLwVmOo3p+gYCmTqO+59zZeMQEYgI5ARyAhkBDIChx8C/kjT0O34JFQ8//CxzOM8xSMS1MiVhOiq y6qaUF6nsy5d8VIbdT3J1POXsiH5X8d2ekSx7HSZsxE6lDqVdiQtpw41MprKki+bqV69rLpkGegi TXTm4qksHlhFaum0VQwsPjLzD6Zhou01V6AsJ6HPPT/H/u8Xv4IH7z2+4uAfP/8v+Mv9TnvDay/w CU/YgkAVrLzBHjKuKOIWpj5Y0eOJtrGdqhcCM8e8YyJWsIQtUpMumuRBo2e/+ywOju5nZ/39WTZw /AAfmH1H9sVfsTsQBJpl/cf2szP/4izfdjbm7DF203tusgVY2TPjD05CO3usz6jedtrnTsMKpqMw McTWL6yQef4Hz9tZf3UWAkfdbcDEQXbSJ06y+ViZtPgXi23qh6Za32F9bT8e/nsO6uGrO3oO6GVT P3A8HMVfqbfstIW3LPAyZhT4poRgGrdiMYhyyh+fYpPfOdmDKN3autmcHz1v29dth+8Dbc6PX0BA Z5+d9bdn2aDxg2zHph12+8dus62LthCEgDVA8dUkAR2/cZqHhHkKtsohcDX/5nm2dfkWvzec2Gxa sMn7RjVO4BgoO+6yKTbhLdjOM6C3jXx8hN3yvltt/dPrbNBRg3Avutn62RtsC9o+/8uvsZHHj7Tx rxlvS+5Z4ufPhH5hMgh/23u32SlY8dR7cB8be/5Yu/HiG7FCa7mNmjHatweFUeJdgO/I8fEcfhRv SKNjnoIEZYJc6C2pFTsglHZQ1iTQ5Vy05BeaKMTJXGifjMQyDNbHMSSCHTaWJk0KSXNHgh23AF6w E/oZexu0ox1Xcd2oB4L75FfarGIjL12FF/j9JIIBXJm3Y/tObBlbGFfAmPXt29emHj/FeiI4wdVG TNymM33q8daGlRccD0x9sI1rBlZb9MB3avzY0R644Na1kdhixBVCixHYYWLQ4GfYVjZ50kR7wxsu wOqW3vbGC1+HLUaD7aijj7ARWFUzfPhwrJBZ5cGowYMHerCBq4baYVvp3vt/5auP/s/f/437wt+I gdiW9vNbbrWfIWDyhgtfg9VBWNF33CTH9JQZ0+3ss87ybUSbMdm/CwGRDVi9wsTJv69ywbYobm27 +KK3YKUP/OWvG7Bj8iu+f9wiN2rUSJuDoBoDSyOGD7PdCOZcicBTn769cc7TRTYMgSQGYy6+6M32 J5/7KwQM7sXZSlfASnkvGaCZ/dwcu/Oe++yDDHKdcjJ0WjxwxuDHoAEDgd1wG4otSsTokne/w6ZM nuxb3bZiNc01CJIcAV+4ypLb7/oN7O/9ePDhR+xtb3mjnXvOWTbp2GPtxOnT3JeR8HkTXuu+biMC bUhjsbVuLO5T927dbfqJ03y11z5sA2VgqwMrcgbC3lqsqmnFbxj7cs99D9inP/kxa8dWuXT1Docu t+OOHDYC9/zVvkJr4oSjEQy8DtvXFntbffv2QYDkUvh7pG8NXIP+9cO48gOqEUTpBam1CKJw299a bNs79+yz7PcQUOGKrJCI/gE7+1VnYtXTiX5PFixYbF/+6jcQbNmObW7ANcTi/XYRW973PsBtCIKa Z5x2in8Turd3x3bGGb6d7RSsnmKwifdyB952thr3nokt8ZhyrlCbdOwx2PbYA9iMteexIuvnN/4C q+Ces1cj8ERB4oBbBh+2+WqnNrTLrX3ErQdWtO3G4dv3IQB26SXvhP21HlTdjramHX+cfeYPP+5n LxFzt4UL/8ULv1DuCsmd40Lpb0UQy9eMQEYgI5ARyAhkBDIChx0CfM5R8mcer4R5hT8ERSafQ5NE 0VSVCikt5VEtGvRcvFSeMqLXy6zXk9oTXfZVV06bklVOnsppm9LplJczn06sgyY0clBOpLxmZXWk WYP1jsiOcurVZWQrlRHNZfGQXePF6TCogVGa5LalE/HmG06cvvrN7/gBpXuxlWMQzs349Kc+juX7 E8KKk2AZ7QQLfq4PaXyaTxInt+19cO4JVurwYb99ULu1D8B5LJjwHHPxRDvibLwSXGMOstxqtmne Jus7tq8tun2RT4y4tYx/KV6D1S9uHcGSsa8eb6seX43g0Xy8EWwvVvNssb079vqWtAOYDrViRVF7 33brORCTLQQjGLDqNQoHwfpcgRc4i0UXPLzaDz3tw0AWrUcs1A3I9YS/4y4YZ33G9UH3utmo00ba rG88429L49aGjXM22vCpw2zkydjaBfk+I/vY6LNG2xxsU6M1ol3YJTawTfNqjVMWl4Jb7QN7WD9s teN5NVz904Ezijbt3xzUYXvIcYP93KGVD6+yPeBtX7vdz2nahTKt8LyPQZMHuZ3H/vExO+KCI2zY CcNs0rsnWe/hOiMq9HHU6aNs2JRhfp7NiJ44Q2p4T9uOt6zRjpwLf8sPPWA3fCTFgAXFykQmalBW fzrZwX3wlgs7oZnSRii5npsKkznXiULujyJssBbqspNIuh+BTiptiqu6E91upESd2FSiQf0y8CBj suN2vYJLM2xgjW7T3xknTbc3XfhabPHcadyOs5cTWPLRPs+pYWuFs6i14mwVZ3pDLOI7hWASv2vt CBBxiyi/W/0RVOJkm+ftMK1es9pXtfBtWf369vPvEIPAPAeHE3diwoAU223HxJ7nF3F8t+P8HB5O z0S7z+OgYspzMs+2SRuCoNKkYybiler3YxvaOg8+8QwgokRZnk/DNMiDT9gqioAz09TjJ2N10GlY AXMnDvBea29+I1funOkr8/jbQ6e8ZVz8cGOs2GObtM1g2Aps+1qydEkIHCHQxd8F/qN2zEQcjIzt TLOwYonn+/h3mXhFYzzPiFvOTpw+FbYQ2MZvyjmvOsMDxvSVNohDv3593BaDEP1b+yFg/qKvrDri yPHG7Xi0vQ+Hpb3q9NM8OMYReCZWCc1Euz9BkI7BOW5N48qb/XvDDQsHNfMe4vcPAQ7vx8qVvvqp Jw4yf+LJmYzf+r2YfMwxCHz08C1TcLTEI0Djw6K9vRV+9nWZQQjO9MKZaTw3imkAzk96DYJIM2fN sn/90n94cH/z5q24Jz39vvHenYVzhG659Tb71vd/YLPnPI+VUK/3oA713WNc+mFM9QTeTAwg7sMP J3/rykRgKY0AN8cswYv3yX8jwDoZ45zY/vzmX9gybIvkKp8WBNt4ZlaRKAw9qsM179dJ00/AKrjr fSWby7kIZLAKafWaNdhutwIr48bZo48+WQS0ZyAAN3b0aEDW7kHR73z3R/Y//+6f7MLXnGevv/AC 74P/wYS23Ch9jynSSA89ijiIn/OMQEYgI5ARyAhkBDIChz0C4UnHn4PiQ4+ee9S12uISPRrpoUk5 6Zy8iK+cfH1kkjwm0llOZdMyZVRnmaluSzTJyaYLR3nyfq2Ep9mXneSIchlIHUvLL8WXnbQT1Pe/ pyNP6bQl28zTJLk0T2Ur9M5bz8jmR2Y5fQ1/X+UEccH8xf4X3aXLluNck3E4kHSrr2b5yVU/s4uw ReC0U07ySY1P0mkFT/g9cIAzV9rwTKIioQkemrx5/lrrN76f9egfJo/8q3j3vt1t6DScq4M3ex3w g5rhEVDg5Irbr3jw8qaFGz1QxAnWxLdO8LN/wAFvnz3zHzNt4W2LfNsUVx8VCV1iX3ggLxMDQ+wm fQQZeZiUByZZsRcJ2XnxQn5rL0zuEHRi8jqCUACAFV+ls69jr7VhgsaDWHmOExNXLbE/TCFAUGIc qND1W0A/WUAdfR9zxhg75RMnu/+ctL94Pc5hug/bQiDCQ2yX3r3UHvmHR30L3aBJgx0nrqhyX2gD AaaRJ4208790Pt6gttCDbXOummPDpg+zc/72bOuNIJbHDRkkG4TJI1WBDVcq8TBr3htPdKtakJti sMnoeSSxG/xE7J16sHZcL9phFu0U6gUrpRQNRm5zjONdLqxUC7STJkpje6L30KGFP2jX+wXZ1AWp uYnSDkVYC9+roKD7PQpBWAZdeCDxx37/gzi8d4xPwj0IQ+NoS4Eab0ztRvN+zyBHlzzCENtBhgl3 6cM+fK+4ikIU3mcGmIpDicGgLfeRbdAeafE74xzUeYg0t1jyMOCQoIGx2dajHUGTA3GyDj33ky7R UEwo0r4bxnXUyFH2F3/6WWx9usPuvOs++8K/fslWIrDyQaxqCW/EYuN0Iuh7EJnlaHMPvvt7scqP q23SvtI3HrhNX11VPkQ7HfiOKhAlX3hwt5Jgo83wSxg4u3bt8ntzKlbXvOkNF0rcV0D26d3b9iBA c811N9ov77gbwZYTEaQ51+bOm+fb0gphL4RfGo3DDgTzuIqHK5He8653FKLEkAGyHrhPwpNMIhgs EF/WAt7eTTofSH6I87/++1dt85atdsFrzsVB4hPhz3w/KJo6fACYghVA/+v//3MEi263B3Gez9NP z7ZP/Y+PYLvdG2AmGKrcQ7TsYy22EUQAbIGx3yD4AOQijfo3/eI2ux5bE3mA96sRDFyH1U23IUBY OCt77Aud80YQLMW95AY3rqwLiYIBOX5nOvAbO2XKJHvXxW+LfPYL/wZhPHIMvRsrzXhu1y9+ebtd hYDTUzOfsb/+y8/hrW5jgs8wRxyC1cJE8Xuse1RycikjkBHICGQEMgIZgYzAYYyAP3Pp2Q0Vf/Dq sj+NJOqPTjJQl5Uc6SlPdfGlr3oqSx7pTOIrp5x4ceJQyHkhXlK5uu1Uzsua5XRiNCDIkQYsJ5Ev GTkqWTqidVt1XqonedLYSeqwrI6kuildtimntphLXjlIzm/BX4ITmkyFaXBgcGoU6PzLOg/TXbx0 qX349y63Z7Fl4+lnZtvHPvxB+9kNmBDhbIuTsbWkG//aHScFnFj2GtHbemDlzYpfrfA3iPHV7t3w 1rHlTy7D+Tj32Wu/8loEMHDQNLrJh/lWrGDwt5mBsl8TDPSC5xcxYDFwwiA78Q9mFGhsW4cDsLHa hh3dsXKHzcbWtUmXHGvTPnCCtfXBAbLXzrGFNy8CCmGal3TYJy8HEHzySSCDKphUuOuQLYI5DPzg fx5gzaBJ7BoxdD226xCFi/tFBCnfhiDS1qXb8JdyvIUMKwaYNs3FtjO+QQzlsE2rxNgFSAeznJYy uIW4Wd9W643znBiw6cbVBwMwWQKddjDt936Td/bfnOPnL/GsollfnRWM0SbuxS4E60bOGGGjZ4zy w7WXPLDUfvWXv/KDxo977/HoT5j4qe/qkvzy3CMIbLV5KjDmBC9OXt1Rv4jL/CDsUKSpHd3TRnYa j2N5LYxDPfgUrEmiUU6Jsi3vAQxpEh26V965xhYCtWIH482xiMAzEMjVHTxThxNXBgg8ga4VIh6Q iWMqMANM3jrNQZbjmu3we+UjKtofiJUgQ7HN7PGnnjZuw+FKn/3YN8TvJYOtTIScWxrZO7UfzKAF mgN9PILFm7Eah2crcTUS2+GqpcU4iJrbjYYO1UHqDK75N5yKIcGGD6VgzJ6eNdtXlLz/ve/BuUhn 2t9g1ce1P7/J3oPtXn2xioXtefLxFBBn8EEBCJ6DMxirGxnE5ivnGfRi//n2q/Ub1tuRRx7hW8SK 1S+0A/1Ro0Z4AOLRx57E+UnnxL7CW2DlsrCh76mvLoITvCejR49we0uWLfO3cTEYTDplqMe3wH3n Bz/GlrwpHvDhVrideCMdAyWOY+iN3x8GcRWAGTJokB/EzLeK8UBmbsOTXWKr/kZ1x5DjRfAEOrEK 4zIgZXYHtvndfuc99td//lkEis7zFTpcccaDq7l6TL/vY7AV7qO//wE756wz7M//+n/jMO/bQqDI 4ceggGyR0C6/DQzeuAP+1eAFdZcLdB9TKHI72hpsa+NZSewb7/XwEcPs2WefdxwK29EOTdAvvqWS 6VkcMt4TZyTxPCqm4AruDzAdijf/MUC3ZPFSHEg+wlcspbhxa9pDeFPneeechW1nUxCousn+4xvf tllom3/04NlflOeb5TphDH+Eo/fNW3cnvZQvGYGMQEYgI5ARyAhkBA4/BPAs48/VfKbhMxtSLMZa oOGKZ2qS9Kk/BNXr1JNRBWxYl5zMk6dEWiorOnPypKuccQ+VlVOWZX7qcRG1SZnUHutdJhnqUqjG VGOpY6mI+KSlZckLGNWZqyw71JMueSqT36gs/VQvlU1tUEbylEGKbHDceCEdxDj5efW5Z9mnPvFR bBE5HQ/ivXxCNOPEE+zjCBa9++KLfJIVHrLdgq9i6YnVKce8a6LNufYFm/WdZ2zjixttKQIUD//v R7BFao/15bYnREJ2bdxp29fs4CwMZxTttC0r8VayrViFhHHJ6SrfEDbyzFG2BCtn1r+wDodct9jq Wavtgf/vQbxFbAPDTJiJQB3Bkt2bO/z8nm0rttqiXy6OvUM/glve197D+2LF0gH4NMvWzFxjm3Hm z16cz8PvwX6cqbR1yTa8kW2z7dqAlQO79+Hg5y22eeFm24MDpYMZTlAibsrdMiq4u1xpMeacMbbq qZX21JefsrU4DHrWD56xxXcuxiHfnFpBjgbcmBtwP3kJE6DAcjwZ5cGb4piCJBDxoBYng5RD7xGA 68B5UFy5tBerJOb+fJ514NwWblNjYpsLb55vv/zobbZhwUbriQBee/82243+7Me2NFoO/Ql4lxMj uklfQ9v1s4MKz4N73pa3x7pHAgpSUVAfChUUUjtejgRi0WmHpCzBL3qb2gksUML/wbALFC24iDD2 inc84Xc2mNhR47GlxJD/1pY9SUqFwWrb0OUKkp04k4j3cxfe0rUL94yrZbi9J2w3Y/+xRRJbkQbh 1fRPPzPLHnoUAdslS+0BrPpg8IDnhe2NWzh34WwbrhaiXa6y4Eo52uT3l6tqKD8WZ8JccMF5fkDy V7/5bZuPw5U5gechw7NxBhkDD92xbWgDzt3h4dob8Iayrdu22S7ockUfV7xwaxdXyfA8oyuvuda3 VjGIxWDEc9iS9qY3XWjDEbxhu3wDFoMhuzrCKhz3BWfH8Jyvnbt3+QSdbyr72bU3WC9shZqAc5L4 inpuxfJDkisY434jisXg1abNm/ycIvrH79vb3vpmvPFrkQc32M91OKfmavg2oP9AnKH2GmAf7jGv HMf74BPPeeK2sxtu+oVdhTOOVvLV7wg2XY0VJzyniCuDiC993rkTvuJe8H4cecQRCCydbXfceZ9d +dNrvP8MSt108614Y9kNwHkfgjAbbAdWHrHdJYuX4LDoh3xc8g1vtMfUivOJ+Kr4OdjKxvOBaPvN WKE0f+FC++o3vmMLoUf6Qw8/ii2/33Usw7/Vrs7Bgfu7y+8/twLznvM7wXvB7aYd8J1YbMAZUH7+ FWT5fech27RNHDg+aPP6m2/BmHrIg1MTJkzAGGjDG8t6u6+7cM/p224Gu4Ab/d+DfpDGe8i2POle gc7AIYNDDKYR0w0bNvmWN55F5WMSOsT7rnvv8xVoHXtKXHiPuBWNb1Zbh0DfdQjs3HHHXVi5+kbf 5sw+hT7i3wscSM5tcBdeeL498fTT9u3v/dC3+RF/noP1/R9daVu2brVv4KDzVdgCOBrBwXEIDrGN vgiS8kDzf/7iv9s/fP4LOKcJB3Mj6Jcmdclp6JfGUSqTyxmBjEBGICOQEcgIZAQOLwTi/CR50Alz mc69wHNiswcgGuFH/Gi0sJHyCmKUbyZbp0uPbeghTe2JV9dJ+fJBsuTV5cXrlMc/13ei1wkyWG9M 9FS+Kxp54quzzeqSredsSzrMaaeZTMqXnsteeumlZ0yePHk6H/wLa5RghRJFYuUAXl2MVQJYicCt HNwuwMnk6aed6pM6vn7YJzAQDegHA5x0DjxmgG3Dypq5eNsX32a24MYFmCTut9P/HOd54NXsBzA1 fvyfH7dZ35xtO1fttPXPbcDhzfO9V2NOGe0TE/5luT/O6Nn4AnjXz7cFNy20JXcsxuvmB9nk90zG 9rU2vNGszfZjgjYf9hfdsQhv/lrj5wJtXbTVpn5kGlYeYRWOh+hwtgmDJFt2wcYSW3zbYlt29zIb ffZoP3R787IteJvaPTbnpy/a2sfX2K51u23146sQfJlr/fDa+SGThtr659fZsnuW2vEfnAq7Pb3v GxFsWoRtXVNwEHavob2s/9H9PdA0F6+sX4YA165Nu6wnzkTauXoHDtGe5iuegj8EugJ4qJOEwNez 33sO5wkNtXHnjeNhQ1jZ1M3WPbcOvi+1Ez6Kfg3oidVL3W3pvUtt4a2L8Fr7pdgS12ZbFm+3I1+H s4imD/ebwoUHS+HzQmC34Kb5OKAaZ3rgsOppHzrBVyHxTKfnfvCsjcQb5UZjqxsngQy8zfnxHNzD QXYUzjXysUJ3k1R6Hkq8cgx0TuIn388oHDhBw4NUIEQW8pRLmVBPftdS4aTZaKSgHIQdyUI0Hceh SYYs4U3djDOdI+0ip2hqR3XS+D268557/A1kmzZt9lfGb0PQ4ASsQuF4J/5KPJ+Gk92HH33CnsZr 1/m6eToyb/4Cpw/H6p3BgwbaN771PT8/Z/uO7TibqJ+/7v2bmCC/8OI8nH20w88ZOmHa8VhFMR7b kDbbw3hd+iNYKfgAAgdr16+z6dOmefBnHd5m+Mhjj9ncuQvsxbnz/RXlfNU5tyttweSdZ/WcfurJ kB1hTz31jH8ef/Jpu+/BX+Eg5DPtcrxtjatGnnhqpr8mnW9hYx+PPWaiHzTMyfvqtWtt88YtdhTO +eHhwzf/4nasTkLg4J77fYUH38zFt44Rdd1gjgVis2nLFqxwfNxehD88K6kXJvwXnHeOBw94yPbz L7wIbO9FAGed/f4HL/PgNlcJ0U4ILuJOAN/eWIUybsxYW4xgxoMIxjz0yKP2yCNPeHBoxgkn+Buz 7r3vAQQ4duDA6o02Citghg8b5r99Rx4xDoGHNQgAPYhzcR73Q5OX4pycKZMm+baqVTic+Qms2po9 +3lbim10fIvci9h+xgOtRyLANnbMaKzo2o4g0GP2Iu7js3irF8fEay84FwGhPXij2kN4nf1jns9+ 7gWctTPSpp+Ag7ERfCEk/L3lePk67vkzeGMYD0HnKrTjsH3xawgqcbXMDgS3KHsG7hXPaXpm1rNo 5wUPHm3FNjQeGM5AE185/xDwvBf3mH24/c67/I8BH/ng5f7Guquvux6Bno24h1vwVrmpOFD6ebsK h2WzLxsRqONZUEOHDPaAp2MMePkGM46Xp5951rfdvTB3Lra3TcZP2H57EuNi1nPP+WHbPCh87lzg snGzv8b+6KOPxPawu7B6dTECPit8zC9EAPBV2KbGt9INwji/Em/tu+POe/HGva3uA1cFnYK3AG5C /T4E5B59DPcDY3HuvAUIPB5tE446AoHAa70droZ98FcP21k4E+sdb3uLB86IIfvNN6YNxL9zyVcv fgX5zSXmsZqzjEBGICOQEcgIZAQyAoczAnq89j7wAafxXIZ/nH3++ednXnXVVY9AyGfSLuxPmP6Q TktpUp152orqlE1l0rrK6ROXZMlj++IpJ10pbU+0ZnnodDNupDdqpJEK5RoZbKQvWqqjsmyrzg4p 0EOe6MyZxGPOxLxelk4qqzIDYSm/oF933XV/9Pa3v/1y/nW2UaKSRxbDJYpgogYGXx29C5OQ4Xjj UDqhlR3dJZ6pwtUSWxB8Wff0Wtu2cru14a1ag3H48tDjh1hbL565sd8PpCaPrrJdnjk0CNvMBk8e Aie4ioAxkv22ZcFmWzd7na8a6jW0pw2dOtRfZU+nuE5n+/rttvqx1b61igdf9x3VxzbO3Wxjzx3r 7YYZALyDwa1YcbQBB07vwZas1l7dbfSZY6xn/x7++vkVD60Mr7BXhzCeudJj+LTh1n98f9uKFU8b ENAadSYOSkV/6PP2tdts7cx1Nur00b41bMOLGzywhe7512HghIE282tP2TKcLfTe+y/xs5n8fJTY hjAL1eAjV3Asv3+5vxFu0LHCAr4v3+o4jD0n9Gvvbhzq/eRq27x4s/VA4GrwsYPwZrQtNnjSIOs/ rj9MYhUAzjraOA+TvbmbrGPTbusxpKcNwT0YgLfLEQ8eDr7iwRUekBt4FCZL1EL7pPXGCqQhk4b4 vQqTKPaYEmWq+l/Sq6Wgx8B0WCnEOlPVVqDp2rmtMKRTnUYy0kfu7FQmLSdytWLap04mXBZUBtnx P8fowWAjOxzpXBnEj9rhVqPjcc4KA6z8uRYu/B5xhQyDRFswGR43dqxvf1q4cIkH7/j2rREIYjyD LVw78dpvplGjhvvbojxggC1m/I7wDWGTEUjgd3YFVnMswlYdrszh9q5RI0file1j/SDsjQjqzMLb pfjbwO04PByZgRKuqmE/KXvMxKPxdq4Om4vVL6ux/WwvZAfgTWETJhzlQQOCvmrVSqyOWewrkBjg mTzpWO8TAwNcBcWg56SJx+C7vdffQLZ7V4evJBo+fAjoE3yrkWOaYEy7WxAoegaBD65u4tu7GLQZ juALV5EweMa3qrXiAGO+8W3i0RNwEDR/Z9B0Yod1BlvoxxLcA24X245ta1y5NXbsGKw8CW9W4/Ys 3ok2HObNQ/sZFOd94cqcZXgz3AK2t2Ub+t4P+ALzcWPxpro+vormOQRliNc42GOgnYET4nA0tsKN Hj3KAz18LfwutMt7wMOYxyAgxMDZi8CIAbveODNpCLauHQEeg4HeDx8dXJHW4cGfHTgAnd1jsGYS tmbNRHCGQSg6Phjb2Rige3bOHBz4vNIDeEdivGzBq+FXr1qLQH8fOwEBwiVLltjc+Qvxe70Ph5/3 hB+jcC+PtmXLVuCzzA+uZiDqxKlTPTi5ECvR+JvM4BbPN+IB5f5bV2DcAkyX2XzYZJ8HYBzRN24D ewaBpv1YlTYaB00PHzbEg5H8hT1i/BHY0jjG+8QVSDyTqQ1bjvv2xosA4E//fv187HLVGlcmQQX8 NpuM/vGNe6tXr/H7vx5BLb4tcDhxw9johf4wkLkBOuwDxwzfDMeAHVdHPfLo41h9tdfOxNvZGJT1 fjiiADWnjEBGICOQEcgIZAQyAr+zCOBhsXh26zyX4Ytjbrjhhu8jZvBFQMAl5JzZ6sPHT5WZM6ne jEe6eCqnuWyIxsdw2SYtrZPOOpPKqV7ghPYoR16a6vWU52UZ78RoQEhl5WhKk0pKUznNWaa+Aj6s 1/miKVeAh22orJwyLKcf6SlQJNlCpnmgCMEdDBiOmTSpw6TROGdA3IrhZe9OKJFF3t4de+zuT9+D t4/tgQy3dCFYgW1dLdgmxbOI+Ad+DzJB7QDPekYDjEm1hJkQeoMKvJcfnNRxdcF+HMbLA5678bXR OCibiq5CXdT2I+7FAAd53ga2uPB8IWeqT16FPfAoS9v0SzKkeyCDOATXPHef0GQLhiKDPIVdyHB4 isbVC5sXczsb3gw3YbBPFlvbWmzpfcsR5NptR77+SCwpgX90PGlAVZpjorv0Be4BC/hIAsvYirYf sxlu7yBmDJKxH/uxnc4PsUZbBozoLzEICTSQiB3fNuf4oM9ukhcm9hti3i/SKI8Pz0EaMX2EnfEX Z2JiFQ7mdmZAxVUrF+rCTjWRQEazJKVETqSKSsKv0OsVYgPsak02Msm7HJCocsN4hN0GTVYlQ9vN 7KT69Id2mXjYbuUgddB0JpALhLsTirjuwWSWq7q4LY1vzeLbtsK5N/Afg8QPqY62fUyTBvlI8n5w m1ZYXYPtV9DnFh9uUdSh1CHwS1t8I2E4d8dtJ3ZY5+SfdijDt4UxcMJ/TOgXzzdyyJDLJ36fwPIe 7Y9jmmOL45WBsT3wYx+2StGuzhgqf18KCApE2C9uaaM8P8SU34OwLQp2YJdvu6KvjYLZsgg2Et/A hj7gO8TzxIgv70051uE3nPWtcGjLNaBIXR6izGBTdwS9uMqSNPaL7XoQHmWnQ4/bw/gbwe1N5DPx fvLDe0AcSCaP/eAWP2JMff+u03BMLNFCkAm2yOL48Te8sRIT35DHVZx70H5rtMf++D2GDO8ZRmLY uop2aYNBGt4t3j/dB8pw/LBtYs/kuCBYFLvjNF0YEN6zlz+M3IrW6n0gTzhwvPCMpHQc814SD9pl O+SH7WDlfaTfSoSEfGJHJ4gH7xv1usO+7j9t8i17OI4LQT98f4Ap2wj3CUT42uY4yDJ7HzAuKaTp tyKl5nJGICOQEcgIZAQyAhmB3yUEwlNQEij6V/SOD2Bk8CGQH5bTekqv8/XwJnmoVmyQziQ9lmU/ 5fGhV3Xx67S0zjJtKoknG6I3zA/2MGsaTRPrdVrKVzl1RlN2Oia6aJJnLruUq/PJ00eyaT3ttOxQ Tqmg8cG5UeJfdls0k3WB4K4r8qkcD+DeCB+yZQC04pZFN/GqvAAAQABJREFUHQYbRp4+0vbj7B9P 6ok8VF4YgRTLolMpLbPORDuiKyddusxVJp0plWOd/EZJcs341KFMypcOeQl95Gkj/JyjNU+tsR2r d2KrWXc7+m1HY7vcQJ/YUrzwk3qpHWdGvsrMU5lUR+2KlvqosnLJ1O2xLjspDzSuphqAlUmVoEbt nsu8O0leAZQ4zEPiCEpGT0ENBY7LqF+xE8XcrsrN84MZx9KOIxrNot3STQ8yufcJLeiE6SInwK4D YmGDAjU7FHMyLulXizGHlpbaTxACLwU2NTv8sSYydJKTd06QEfaJ94WBkcRWtKOzjoIWHOH/nC1D z/UxOSaRk+YyHcBEmnR+KI9JNCbWRUKd0m4HPrZjtQ2m3yQUQQWWOQlPfQoTc1hlEDgm0mirnb5H /50G/zklp50qxkG3OwKtdqD0j0aIHIMcfCMhk+ywr3U7wphtk+f9gwscfeG3ERggABIijWyTGFE4 JNqWnrAJ7YmPgB7ul/SIFQMyhNR1o53qPZBuvLetfBU98eE9VuPMHZnQvrcR9ZixL21sJODk+ghO EcMeCJwFkWCL99hxwL8FvFcM0PHVAEV7MMHATSt4rocL/eBPcEsyHsLvAmToY5Tl94HBQceG6gyK 0ggSzz8iiXp0rTqO2SaDmS7KnrsM+6HEYF5AgLQw/t067LFPYewGd4Sbjwsf68GK6Mzb/A8OzTEu nAmtyY2cZwQyAhmBjEBGICOQEThMEQjPUJ2e3fwJDV3ig1h89MIf6OJTmTP1QOaPcknno8FCRnzS xavrSoZmxGM5pdfLL8VXe5Rjkl3ZqdeDVJNrMvtpIlGS0wZUZq7EhlVXmTk/Cm+ITx3ZUDnNVea8 hbpMqc1AKTsvnmyqHdFTefIwL2i21gKP4NAq5hnSZK6nd6clpinskwQygnIrJivHXYIzRigWU9Dg Iz6ndNxeU15LmTARoazkw/RNEIpeAkg5WZOdIMVrgCRMLDj5xF+s8R/rwX6wE8JmbJv0AF/QpBQT 6eIH/TClZ8uBS/lgB/4Aqz1YTbVj3Q7r2NJh3bG9rc+IPggYhW0woQXapVW2GG5zaCVcyQ1+s8Sk 3oTelTz5WNJfaYxbMJnitpSAlrtCh4pU9id4JQxdnuMjGW4lr1AvCuS5KPCjTd0j72HFjjiFaiyI Huz8RuNY6Mtk0RQ9Y58KgvtZ1NxZ1bxHqtRy3GefxNfIqlbsgIgvk0iOjVd4QQ0dLbk0EJzThJgU JWEcNDX+qI8UMQ560TbJ6RfZJSmPUYsBz5VbIZXy+q2o23E/098K2PC+dMKBVHxCN9y8WmEFMQFe eUEqMa76SR4MuFulIWmRKxPSK6VYAjYuHDUq4y+qVnBxi36hRx7hQBYs0Vy8Q4kdtVtqhpLobLkb 9WiknvAdkVzwJggd4OH39MurtNAY48L1+LtOW9HD0JK67YKlHTLLdllje8xC+6RE1SCnChlM3g4L 0S/nuwHwYAPjSb4Ff0q71KJxeRpWZUY7zos9SDB26boPMgQfOPSIMbvRKSV98oYbCnXSyoSMQEYg I5ARyAhkBDIChzACeOjxZ6XSxcqjUlLpHDNwHUkw54dPUZoGu0C8kM6P5MVL9aQvGeWUrfNEk500 l55ytsuUtp+WA7eL68sJFDVqNDUtZ0hjWXXlpKuzaVkREMql/FSP8vUkvnLx63XSZZc8lvmpJbBA 5XNxMSlxaV4apZRORcmgQOvI2vqFv2A7r0GL0qjmNBSFo52Cn7AKWtPCyxJuaiV07KCdr9hp64c3 B+HNbj6pgjthOlMR+fXNv1LYvAw71ckh+9EY405oFYGEWt+LammHJTeLLNiJAQynp5ZdktRaCnS3 KJFKBeJel5qEWIf9oooCm2NdNOaFC0UBRCYJhVqoRwOyU2c1UmtqR8ohr7eeBuKqkqqVzrun0d1g 578Q49Q9lks3Uan3MjotnUIY9P8SjJv5E0dDZGeMO93Y4g7W73DncXyoYlx0IRcyAhmBjEBGICOQ EcgIHH4IdJqf1Z+5Qpe4uhyJzPSxLa2rzFzBolSW+kqk80NZprQundSOZFz4IC+y3UhcbTTidaK9 nEBRXVkNKdBDfleOpXzqhiUkJejSFY+5aKkuy40S5flhUl7XJ13tuqAuHCtpgMjrskIhWmKdHzDL v+FHltOdVdhxKdD112Folony9IR//Y4DlU0UG2+ivaInqkNGrhQ+uyImu93gFeQqdiBfSU3tRAZA 8LNtqOQkXpKkxp0XK8pAo66wcRGqygT/kk5ZJuTuv3iR5rKuWNopWNFg0e+0ntqhAhNpjjHy2C6z XxtjYnMoYyxMY19fEYyBV0M7pDMJ4wT/hhgH6XIsoE45qhX30xWFcRhFxb2SvnJXDJWqncj4zxrH aKzwl82rnvS/6FjsnL4PUTz8HkiPzkdGl98HjuOkDaoV2MQuux1eanJJNYCO35wwjn8DjBlRpx04 7V1wHyothbZIch6lUFCGYtPfCsgcahhX/EFPvBvsl8qhGK5k8ncdvxW82QyQF/cqlWOZNigfM69S jQ2+ohjjXuE/byq2WekTGF4nT4nCrLt89fdYIjnPCGQEMgIZgYxARiAjcFgjwOecypw8PLulj0SQ UDU+tXmP0zL5kiFTT1EumFxSuuRTGkVJT2kqiy4Z5kzih1qp34gnmYPKCctvkjR9oYNM6rDKdbr4 orsSLo06mPJU7iqnDdlRnranMnOcnVp23R+hqaEECT4W8/+CTC0mEMLwCWWSyOIzfWrHH8ndhF8o FgRDKdhxRVxiI15N+EElrsOhDAWYuQo8jHrBAbQoPmTEcgW/lHbEq9qJVBgRvyyUVtgW+0me52RV /OncTh0btwad3x7GaDF2Cs2qWBQq95MCSFVsSMCH2DDHx6soKrFOg96MYxM4VTvRid9FjEP3vdPE ovh2FbiX2Dh4kKliQwI+whhI/rfHOAwqH6fEylOB58vDOGq/chjrXslw9EtVzyHjZFwO2d+KBNdm GNN3/dbq19HVoq7GcdF30vlD4fzfYBxHOwW0RaFoyds4OIzlOVyL90N90r16Ob/HiQe5mBHICGQE MgIZgYxARuDwQgDPWMWzKZ6L/BnQJ3nsRsHxPiXnGvORy5/unFEtk6cPZeqfqOL01E5qTzLM63TW qaeUluuynIaJT574ymXjJfNiPvcSks0Mi648NZOCIGeVp3L1cl2GthvZF0057ajMPLWT1p2e3HQo gURqqiEarSpFmTjl5Z/0o44/YlfslEMs2qYN2S/sRMPwjg/vpfulbGmnpNFO4TPVkqQmChIIgSZo Co4zSjtVzWoNOhVCpeIGO9mJC+8oyZYLfkUVlUrdTTmtjjFxqNspsUnsyB7zhEzlVwxjtRHdLdsp MS5KkC36Xuts3UyV3Ynb2c6hhjH8EcZp/wlTea/CfXHoKtg4pbjITknw24lqYbksVexUcavWoF4h VCreVKd7lTEOtwBQdcImcKqQktYZ1igZsk52DnGMS3/DOC66p0IFm0pXi+9DQYVsUHslx3FhvSiU PkcnX0mMi1ZyISOQEcgIZAQyAhmBjMBhiED67FY8m4V+dJqDlN3Tw1t8uHJGWpZkI9rB8ChD3fTD NvmRTfkgOlgVHuVSXsqXDeXkdZkONlCkRlNjjRpJaeqIdMQTXbnokhOddZbFF131NE/L1FOdZSXp s47jZip/Tw0rRSSZ5KlSCXukshUvls15MLJGS8yFIvn4lFp0iCxR8Jjv9UCrsEhCcskoIy0aLdRc CrXwv2qumMqUdnxq4XIN7UQOM9eHYjM7Lhqdqsiklbq9pB4MR2HaQTH17lDEOLgfwyGx7+qSV707 aS8a3CsphC53ea9c9FDDGP68YuPY8RKQPgAiOhnjjHH9i+KDJfwo+lDRuAGJLGeXtEQ7FKNMIYFC FeNox6UV8nSjhSnXjaTCDhqu2oFAoXYYj+Oi16FQ9rcs1USKalcSJU+lAizXF5WVslyVSQAupUrh l2enppc02smOExpc3ETdTgO5lyKVJsrSS+lkfkYgI5ARyAhkBDICzRHwf1H5GIFP+a9r/dmt0KeI xJo9fKT0VF56hbFYoHydR5rsME9XB1FN8rKfyouXyrHMRF5q14kvdTnYQBENp42/lF3y0w6wLufU puyJrjpllUirtx3/NlrYo6xssCw7qR5polMGf+ktQzGsu4HiUhElOzqRTvRJTbbTsIpUOpI2XzIC NdgpZet2NBmhvSgl4Vq12mb02zMKqh/BSkFOlGQ2IVX01PPgRrBZsUNFpNROoKjtkusyxSXlB41g /dDDmJ6W/Yt+exY8Dt6He1WQy24nug3sODfa8UZCSxU7sYHAUWvMoy9OCtzSBEsp34W8NY6uKqc+ /lI/a3ZCMxU7keTtud3C+MGPY6o0tlNtnyPZzUs45qqyl2VZjpDCD+rODBIVO1RECpxQDlfZKLml CZZSftAI1EMLY93zsn/pPa/2I2OcYhPusHArfo913yMjIBjuuWSp6aOjGGjlWPndwDj0tOxvQCF8 C3CNjEDtCpuMcTkyiF593BRQRlCr0tTIKSOQEcgIZAQyAhmBl4NAeKLr+vk42EuPq4kt8B9iPf7o 4adRLlojx2gjtSMZ0VWnDX6apUbyjex25Usz2+VRIk0lAoMNHkxKO6KOMTCUOpfK0KZs1+kpLy1L nrnK5CvJTsoTTTL4S291RREZQYFXiKfaqAeqJr7ix2lD3XqhK7nCeM2O6M3t0JSbk03kKqYliMWE Nt2fIKUrc++xlJGrGEr1TrBOiSBVXuFrqUir+CiRgbrzRZedIJPaSRxwvaB96GGsnqiX3kcnlr1h X9x/XgLZcxUjtzThJWETpNLrf3eMHd5fC+MaxD4+iWyKbigLYwSNGThOFFlG405yJ0K9uLGpNclJ /dD7rfC+tXSrfFPprffML6HvfsWFede/FeqrchqhlluoXIVxkPTGopK3ElVEl50gUloDPVSi7iuJ Me49z6vT/fd2qr/HseY+kO0i8ge5ivRKPdGYcl0nBim/Rp3fCGP4262l1fH4bWCs/nDUeHeSPsWb 4t8hh1GAxJxZik0ALLVTWH1ZGKvduj/eLC7eLi9OCLmKJVFWmNNSqRBkw7VyrwICUfH/sfcd8H4V Vf4nr+S9vPTee0ghPYGQQAKEYqEXRXHFsurqqruuupZV166s3dW1NwRFmhQBQXoJISGVJCSQQnrv L+Xl1fy/33Pm3Du/+34vJBA/q/u/k7w7M2dOm3Pnljm/M3PZDjpFU00iPoaS8nG8QKpWiW3j7bFt jFopkqLLcT55nlsgt0BugdwCuQVyC5yIBcJPMvokzj5VtZ4FFjJnqz+VmcfYXvd2tmXbyS2Gse7J 8Z0P4Sw7P8crljtOzDvm4zSO5/UWc4/uaREhNGQZutBi8CwvKtsSPnG9M1lecRvLTDEuy17XxnBw WXGbwxK80tLSuF3hfD3TOCO+7aI1QfA38URDa4/WhwW+gQKZomb5uPSEDwAk8eAmwrWtkI/WcAhQ I1FeDtEKDqyDQcIn0ACcsI1IAnagcx7M0xaHKpmCwUkrocVto9XQoHg8aMERA0ZuYzNIbJsUYrb9 /8PGnJyX4I+XiU9ELQ9DhoOWf0i0Fg9aZUUBBMajLNOgSIGBoSZ8WOVDoqysTOrr6+Xw4cMBQ6S0 lPBybTfu5Ot8TPDfw72itLREStG/Q4cOSV1dHbrgfWBXgwEJCmCF4KBVVgKKYxtapqGIjel4oV15 LmMehR7mo8JfaMpKA14BHxP86m0cOuTCwU4hQR/vFp4B0LNUDhyEfTAGEn2b3Y8Dv8BH6XFwPsxd ovf9cE2N1NYeAU86oVIEp1V8VpxJKBqfTEOBbURt29TYCL0PgioQWgn8XJOogey0T1oImCb4lWzc qsSukSNHjgj/0iHkcnA/B5Dnu66+Tg7xOgJr4+5KUX5UVjUCBuGZNla1FYeApXmMlnJrzsdpFZ8V ZxKKxifTUERCygcUMfpJtnHa/yDHx1/SEDqATHVPT0JqhryUWyC3QG6B3AK5BXILHLcF+GS194Es SXjmRo1hX+PQkOB7PcuqGDzilryVxDBnGsNa4uu4nrs81o9FcyzezqtZXtYMUhzgSlAIy173sgtn nWXHQ7EgOR2BjusI2TrhztdxvE5cOrm87jnxnE8MczhzplbxZtYGIjMjQbSRltPfhwNTco5T/MKo Ul0kXr/RxpdwToSVWnGNgcoBmHI0OR9fVOcvgmg/6mUgGnfjF6vioksw8TnaCJqm0ApUwzb9TZgf Uz5KD0zL2R4sEWSbPYyHl50LBTid89G20CeVog0sJZy175RyMmyc8rE+mXw9JrolE6jXYmNlabY5 mvAJNs6cK5Nu+rD7bhvL2Rr4pACaUvE4bsxaxENCxdGcj8L/jm3M3jc0NGIyXasOA/aZ45bOjYqK Cp14NmIyrGMZ/VfbnEQbc3K7f/9+ue+Bh2T5iy/JyOGnyHVve4uade26DbJh4yY5fdIEqWzTJoxV nAM1vp0ZO3uEnbx7BXmmVyGFIUWZSj7Oe0UpnDAvLH9JHnr0Mdm2bYdcfeVlMuX0ybB5g9rSLAr+ J3kc065btm6TlStXyeRJE6Vdu7ZqI+0LOmDjF9LhQNm6bZu8+NJq4I2T9u3aq4FPjo0hRQXZuWLF 78duYzqJFi9ZJo898ZRs2LRR3veud8qY0aPUPs3vFaq96ZfcjwvPFcXR8bVuw0a5789/kZfXrpOr rrhEzj7rzMATCFCHGnHMxPd1464tqrbZKB0JpPKeNDY1yd1/+rMsXrpEykpK5d8/9q9SDicNeWoC otF7Hihfxb2C/dmCc8T+rF27XqacNknHEceQcocgOsYOHTosf7r/AVm+4kXp36+fvOddb8d1jGeR qhT0ijLV6LjGcXMbWye9b6yF/p3kceycqTbvTQXpJNqYnBO/kAtx21CuIoQ+UhO0UR+HOEme5xbI LZBbILdAboHcAidmgfjpro9bJY/eK0Ixs/TMydjqZA4jB4crt1D3sufEj2kczrwleIwTl7PyvI18 vM1ztnn5uOQcr6PIhWZzCmNyZazWvJNxO8stRTLFeC3xcnicHw+d60o64hcmtNokxZTTF2+nQB6/ thuhNSYvbREuX+Y4n+ALYEN9g5QgQkGXNwSJTQ1N+mJfgkmxni7ljpc/0CQd0XI6QUiVba46nVH1 NfWy8/md0nl4Z2nTpY00oTNUSbFZYEqYe0WhpgKKJs34k7qprlH1KykLy1bAhyfO7WTURDHGLibl Gl6xvQG50xof0EVtzsf5euOxbFzIx3SPO+rsTctXb+NC20BD9sUyzTnxU1kO1E64Pt4T5sQyuB4z fNjcnA9hxljblDcPrP192phjf+P69XLzLbdLLaJdNLqjHFE8GCDl5a3l1FEj5NyzZ0jbtlUYM7he 2NOTaWPw4jVCxs/Mniv1dfWY6MPKqN96+53ywF8eke99+3qZPHECJvr1Kt9OjJn972EcN8Ju+/ZW w1n0uEw/c6pFb4Uxg15on2AGy0P9tdqYTgs6Fm78/R/ka1/8nMw892x1lPhDtqkJ9xTowEie+x98 RG648XfylS98Vs4/7xy9V75mG+OmqxNvv1DYv3A/5n2SejAaR501cLrs2bNXHn74Cbny0ks0MoZ2 savtFe4VHAAqA3mU6NhkdNrDjz4hU+GY0ygltHPuT3Riv2obgxYq6zh9fslyqUHU0scJKFQBcggI 9yOULJn0VnAusV1/KAHoWOOYCjfBmduIv4cff1I6d+6k/dG+mAir02sORnOeWyC7du9xgchdsYAM CLXwo97XqYNDtBzp3YKNjQM5GX+lj/iwfjw25j2HdnAnm3LL8AkKR0pSOnugUpNmhxKRLby/UcNG jHc+S/m/8FmlTAA2PkbPI6mo/zHGMdsVKz/kFsgtkFsgt0BugdwCJ8MC2fkZ349bSGzhY9gfxV4m 3H+2IqnjxTDCmZy78zCo8XQ6h3ke47LsPLzd6Rwv2+543u71Y+Z8dznR5IJdIdI7LOYVw7LlrJJe dzyvMyfM6zH/YjC2E9//HMfzhN4nLglAMUy8FfX1LmlWltoclkxgokO1jCJCA7EKxwirP1wvz35x tmyds01awVnExHzTU5tk7lfnqHPHJhIpn4Rf4EMa1Ye0rHhKKmjFWTyy54g88/mnZffyXdKqLHrZ dnzkfMFvlgpgJok61R+pl3nfnivzvztPmurpMDJEYiifAjpUCuqU4lpHEhWU8uGMrpDM+TitSsvg GGunM5bk4xDKy/IhLJWVYILYyy6xgI83al8cg7wsJc2oevl4bew8mDttDPu/bmM6f7p27SKjRo2U Bx96VDZu3oyJ9SQZPHiQrNu4Ub77g5+os6GpEREwYewldmIhqQSrFdSPfa5Iwclhxw4d5cILzpXK ygoszTJnEEWdMmyIjB8/VrpgYmyOjSDDM2VvAq2Yji1DQZs2ux7MszgKSrrhLAvGH1sL+JB7ykeb DFTIh1hgOHzoUJk29TSN2kojKF2n1IQJH9Al5aRAASEVwFI+cTPlDB40QMaPGyvde3SHHk16/nbv 2SPbd+xEGTcr8CHeoAH9FK9Hd+B5FKQzc4Ogrj1u8V4REwAzqxbqVJtjiMvv1sE5yagcnv+RI4bL tDNOl1osmUrtQ37HtrFKBNOCc4U6efbr20fOOXu6Osca1Cmm2AW/jFAfTV7wnMC4DD08ObgMz4+z p58pvXr20KVt2s5GR3BAQZ1A9Ak22LFjhzpz9JoqsLHxiPtEm/Tq1VMuPP8csD+qDiNyahXd5Hh+ q6raygXnz5QO7dvbEsdUbaIjQRnVxxuYvzobp3ycV9r1uMtJmYWkQl2QQn09or8OHqpRu1iDHbPo hEZdDqjAaoZoOtG2dEBu3b7DxntA1FYdxzGtl70/zGEbrwZpACXisk2Okue5BXIL5BbILZBbILfA CViAz3F9ltuz1ykV5BXk0TtiS4/gLAmpHdd9LTGOt2XzSGqzotMz9zKRvExe2Ta2t5ScrqV2hbvy x0QKjWRIJY7VqZaEuvJkVQwnq4fLIj5Tth7DYt4t6RfLVP2jkx7Yk2WIzmARItNXWQXoRIATnR07 d8rK1WuavWAaVnqks+WlP6yUvSv36C/ZbOGSkN0v7JKVt62Uplo4GYNm3AuCkTul+GPucNIkymOS wDb94y+WahW82oO2EdE/e1fuk4ZD9VLKfwGPbdrhmE/8FqqNjhGkwdFU/fI+WfyjJbL4h0tk/7pq yEhPPMWSBR1SJXCYUR9zhDmfIBMKur7Ux3Eciz3jL7+GYzpT37TH1nO+eKd88Iu44lBXT8CDfikO f80FzN/uVaDxcops7q3xCDDDkTi0Or8scVR3PgVv+io/7XXCL6LzomMpHxXtEGBo0evNx6fzeOVx TEzXlLmXUw7NS5Tnsq3VfokPtNp0bD7eSj5NcAxwYjltChwZ2B+GTpsZZ50ll1z0evngP/2jtGlT KXfec69s37kruXZIz71QuDyNjgX+al+qDls0QD7Hie+Nw+u7BIOWkStxchx3FLdv1w5Ld8oTExB+ 4fnnyac+9hHp3bsXoo5MJvmwzeSbk5gRCeRHYrcM9wSifk2NdJAYPmlcr1gXL2s0FXgxNR1t1Ogq W7KKbsH5UIp9fEjv8qkLxbJeigiROPH+QlwapHXrcmnfvh0NY3+OGI1j6q97GYHO+kJUg5G/GhZH 6kNZbOMfZXid+lNPbztr2lT5zCc/JkOHDAbc7HfDTTfLk08/o+eL+xKR35lTz5DPfOKjMmzoYH0I s1/G1+1M+dwzCvc8yHYbE1YGmZTP8+z6kJZ/rMeJNer4/JIX5Ke/uEEacG5YZ7Ra23ZVOHvoD+pM 1gfYNdQVxnbo5uOOOesF1wOUo9OETscO7dtCN/AIm02rPsFmKiTIcRv6s0jPK2S5zbVfYQ8nOrco l5GpjOypqGgNXUt02Rl15f3Y29VQaqzUYrwWiP+zX/5GFixYpP2lfMoiT7cb5eh1xf6DnPD2uDZJ m953/ccS0ttY6dihvZSVQw9AqIzZ0cYJxxH7qONY7Vp4fkjiKR2/9mLGe7rKhS5+nnzM+/Wg9gUD tRf0pT3sHNk1Q9uobTkuWIZN9+7bL9/+wY9k+/ZtAd/Ov/FMx4LbhRrrGMB5p30I1/EPOGWRDqwT HW5CpOTjTz6tvEnHRHzufabnG8h63tArXiPsnSXmXg6gPMstkFsgt0BugdwCuQVOsgXw8OXzVx/C 4bmrz+PmYvB+4Q9mz5sjFULIibgxx7jsbc4vW4+5OQ5h5OG8s3XnEbfHOCwzOb9YH2spcjyRpWfO 0BVxQUXYJiDHJYD0fPNnCJbNAFAIyXl7Pebt5TiPy6QhPWH+RxiT43l7AotOOmChmS+4LPJP50gs MB3Vl0u8BfK/zJ79nCxaskS+gqUVmLGiHY4aRD6kL3ygCz1tONxgETnKxw6NdU1w6HAJBvmDJ85C 7d5a2b1st9RW10r7fu2l65iu+tJpk3Gwg1Pm0LZDsmPxTmk4WC/tB3WQbuO660tqoj7Zw5m0Z80e 2QVnVHlVufQ8vYe0bleR/GKv78qcKNIy3j3SIZk2mJji37qH10tZFfa+wDK5DY+tlx6n9pC6xnpD Yt/grKFjau9Le4BzVLpP6C4dB3fEUgXYA4bgMh4ac/eyPbJ3zV61W8/Tekm7Pu0CDpqBw/7tXLJL 9q3eJ2VtyqTH5J5S1QPLjQIfOpd0Wd2inXJoy0Fp062NdJ/YUyo6tdb9mKg0HVZ1B+pkx4IdUrPz sLTt1Va6TeourauAg5m+dTftrPWTPS40gtmmGZiIZir0R4eFQtxeqBSy0b5yuUsW7nzoVkhIUOC4 YT0BBgWpTxP4ED9gEMsSiNhOOrYWFI4xjolIOiNi7sLJBClpSwqG6x2PwHrfVOFAAdz0NDapxhEB 2aNKkZRDejozOFQ4iayqaqMT4FEjRsiQwQPl0cef0o2YfaLJ8bLo+SVwOMyWffv3SZvKKrkQS5Ym jB+jPA/XHJYnnpotK1a8pMtySDfz3BlwSExJHAoU/ezcefLMs89JzZEaLDmrk527dsvw4cO0n0uX rZBnn5unEUbXve0anYgvXPy8zFuwGA6GBpk0bpzMmTdftmIfnsHQ8c1XXq4Td45j7hG2Avu0PPLY k4hUOASdLGqlU8eOuB5EJk0Yjz172sH00IKK8FwAvhZRLk88OUu2IQKh5nCN9EAkztVXXoqokZ6K y/1hKHPjpi0y/awzsP/PankJfx07dpA3Ye+hoUPhaAnOj/3VB+ShRx6T1Wte1rHPSK0yHSgqMIiF roAdxGbIt/3xHs2pDSOp3vC6C3Rz75tv/aP2byaiY3bt3i133XM/Nk8+AJkd5ZI3vE5eQD8XL1mq SwQZEXQLluudOnKEnAHH33PzFiCiYp+84x/eojb48wN/kXuxHG3c6FP1fLfG0sIBiCZ6HnsE7YLt 3w47d6uslGXgOW/eQtm3rxqRPqfhHrtU1q5bL7179pJr3nS59O4Fxx0cDnTqcB+pBx5+RPeZqkfE 4/BThkqP7t20fQKimTp36Yz+272ZY23egoXyq9/+TtasXSv33HufOgfPwNKwUnWAlMhmnM9b77hL Fj+/VFrDCXMR7HD6aRM1+oi2Wgj4U089I/uq99u4uwDjbuxYXJ+839F6SLQzEu85HNu7EEV1P/o9 Z/583Kua5NxzZmA55XTDAd38hUtl9rNz5cCBgxiLR9SWl1/8RuyLVak4XFr25788LC++uBLPlybp 2KmDjrcBA/pTCvraKPMXLYa9F8qmzVvUptdcfYV07dIVdmffLVGXapw7Lgl84OHH5DBkUV4b7L91 3syz5cD+ankUY/Zl2PpIDeBVlXIxzjH3bOJYPQo5dNStwb5L//2jn8mmTZulU6eOupyR1xZ77c4u u+8RYkZ5atZseW7+IvTxgHTCeL34ja/DOBuK/vD5Z4mYpOA9YPfuXfIgdNyEsc5lWzynl11ykXRD 9CETl7fNmj1Hl/dVtamSM6dN0b2T2Ef2ad78hXoOSdenTy+ZPWeeyj4N+2VRdkXr1rJx42a56Q+3 yhw8x08ZPEiWLlsuvXr3lLPguGTU24MPPYJrbTOugwaZOGGcvP6CmbpvGsf8c/MWYXzu00i0ZHxi XL75qsulDxzLR7Dn2t33/lnu+dP9MnLkcHV40yF0wcxzZc/evXod7ILzuw7LWYfDDlddfqni+HNe b2Q2jLS/ahg1ZWpTNW2MY5j5MbdAboHcArkFcgvkFjhuC4QHKd/dwnucT92yLPCM9leVgJlg+NPY 4ax72Wn4QuYwJ/S2GB7TOh5zx2HuszGHufwYL1vO8iVtFkaaoulEHEWujCvngmLGWZjjOm14c9dO O4z0xGPnPRHP68V4Esaf6bJ0rDM5jbfHsgwheTNDla0cA0qNCr1FWiYqolkwy5uNySU38WTY/8HD h2QnXvZIxsnN+vUb5YLzztWJItli+kdCnSwwLynHL5vsDqwNbqijDBS+hPNH5+q11TLrP5+R/XCW tMKvsnwxH3HNCBn3/vH6Czwnk3tX7pVZn31GDm0/LK07lEvN7hoZcdVwmfhvk5Koilb45XLtg2tl 2S9fkMM7a+QIcPqf11+mf326lFciagK66VCnUuwf/1TVoC/1gbD6w3Wy9v61MvTiwVJ3qEFevm+t jHvveI3Y0b0TMGFffecqWfDDhdiECfswwKlT0bFcJn54ogy5aCh4mvGW37RcFv/8eZ3YNSJ6qk3P KpkMffufOyDo0iSLf7xYXrp9pTqlGg40SNveVTLj6zOk04jOYAz22Hvpua/NlQ1PbpDKzm2kdnet dBreSWZcj/1rerfVPtTtq1X7bV+0AzgVcBbVSK/TeshZX5kBh1IFvS3scbOk9qcBgmMlsQ0xC2zD M2pDtygnBRbhQ3gBH5rbAE5CtrxHaQJQxw71IWmoG0XA0RajIZx/CvIrhkQOzIxjglWUtwMxuj+S U+LGTcZxOJc6dkDtqipuwgdRHYUt2sxDMRsneiRYvMaswoiCrdu2yjpMWgdiQswJKSeVdg0+J//z k1/KGZjAT54wAb/YPyVf/9Z35etf+ryMGD5Ufv+H2+W2O++Wd77tWunWrauWn1+2TIYMGoQlND0g oJXcgfZb/3g3JoWnK49Dhw7KI3BIMVHX1S+/rBNFfgntLVdfDqdApaxctVoexISdy6e2bNkinTt2 UufKDTf+AQ6XEvnA+96tE+XVL6+VL371GzJo0EAsaZspc+Y8Jz/ExHoYHDDjxo7RZXbtEUXFDed5 O+Dkdh8iG77wlW9A+FF521vehI2nt8uNN9+ijud/+eD7Nepg4+ZNGp1Ax8omOH4G9OsL4qOY+D+k Tq6vfemzUllRqRPYb3/vf3QZ3+suOE8n2bTbU/JsGBO0gFmf56usrLX07N1Dbv/xPbpp99nTp+m1 ymjJG278vYwdPRpRXtPUBnSI/OWhx+Wf0dfa2no47JbKXffej4n7fI284uSXjhk6jR7Bfjabt2yF s+sSjb5Y/fI6df7wK12EMxqmAef04ceekI0bNsvll14sPbp1k7Uvr9e9feg42wo79OjeReog65Y7 7lTH36c/8W9qjy1o+/L139IJ9pWXXyIrsBn5z391gy774pK3YUOH6LLGxnARMXqNjqD1GzdKfW2d bN68VaNDxo45FecBdsBEno6SU+BsYqQII59WrVoj3/3mV6Vnjx7Yw2qO/M9PfylTp0zGmBmPDbCf luu/8X35+pc/ByfdEN3HR4e/Xg9m6nI4QJ+BE+ggxhedE7NQXoTzxzFN/RYuXiaf+fyXwfN0LA+c IovgjPzJz38NJ09nOOvO13vqXffcK7ffea9c8+Yr1LH125tukbFjR8Mh1B/iuBl7NRxRD0kHOGDo 9Lvp97fqOPrQ+98nHGI820x02h/El91ewjg+BDyOuU04D+3btoWcBvnBj34qCxY9L+9513Xq+Prd 729TW33zq1+yiDTywXirPVKnzhD257EnnpSnZj0rH/+3D8nrzp+JdowsHVo44D8dS3fBWXLr7XfB WTtdnZD3w2G45IUX5Gtf+Jz0xJI2c+Spinp974KT6PpvfV/2wqFy5RWXynac51/ecJM+dz/4/vfC AXM/nH2/l2lw8E3EeVi2fIX813e+L+96+1vhcLkMX2WrxSbfL8jd2Fi7XVWVnHH6aVJR2RqO2A3q MOrcpVPisKEjtRbOmh0Yt7RTJTbQp9Py+m9+F7fko3LhzHOxyfkm+dkvfoN+H4Gj8kp5Wcfn4+pQ 4/jsjnsM9zbjnmZ08HJ8EpcbmdOZdPAAxjvGGp3h1XDg/uDHP5U9u/fKFejb6lUvq0PpgvPPRWRb G1zvtMPx3I8Nj8c85RbILZBbILdAboHcAq/SAvrOAlrm+r7U8lzmGBKUOjDwsjNknX98GeOf11Fs lrK0RIhhrJOHTUZZK55cXpY2xnZdPI/bmpVPxFF0LKHOmEJbSnGbl71DrqzDOW30NufndcchPC7H eGHamZyYGFf7gUlaSquQmNzLljPUnBPXO/G1Gf76yF8NGzAp4i/Q/PXw1BHD5fyZ50CYMdLJ8VHr AqMgtszdEiJgcH7Ba/vC7RpFxJd9Oo62PrdVqjftlwn/MkE6DuokL/xumcz71gIZ9LpB0nlUV43w WXnHKtk6b6tc8LMLpH339rL6/lWyae5mGbXrVI3SYWca8CK/Y/4OmfgvE6VD/46y6u5VsvSXS2Xk tSOkz7S+iGwq6CisR6oYhjB/ROfsWbFXdq/YLVM+iWVBiNR5/F+fkAMbqqUjNspuhS4c2npInv3a HOk4tJNMgnOoqbZRlvxmqcz/1nzpM7WvtOleBfqdMvf656TvmX1kzD+Olbr9tTL/vxfIAux51GtK L6lAlNOW57bJgu8tlFPfMUqGXzpCDu0+JE9/+mlZ/JPFcu63Z6pDbc9Le9GHZTLls1Nk4IyBsuul XZC1RPYgkqk9opNo363ztslLt74kM74xXXpP7CNbF22RF295CUvm9iFCqVczR5H6PtB16z1ezmEC WiGxBmc89M4F29BJlMYSOSZQWCzBAS5oO+dOAbinIjY2LKNTocRNhSslWXtKWBBIPKT0ThHxiYmC 7oZtx4QPqtYnd39FWEEPy8w2gdpE22wwISi0TQI224BJzCdSHyZADQpBgjlD8Av+7Yhuqa6uhhNi mXTq3Fmuu/Ya7BOEMQe2+wHnpK09lgq9+eorNZqmCybVH/jwx+BceByOomGYlB+Gs6Af9ks5Rzp3 6owIne3y/R/8GM6JzdK3b298lQkOhV/egCiEM+CUebPyqAENJ6Pc4JhX43Qsm3r08Sdk+XIsDYWD gdEAM885Wx0YjNZ5y9VXSffuXXWS/sGPfAIT0Ofkn97zTnNkYVPsJS8sl/e/710anTCgXx/9QhU3 574KDo1OHTqg2+w3OoQMPhxMbrFHCioTsCfSOTPOwsbetRpFMgdRIv+E+0wlHFXjEbmyaPFSeRbR Ea+/8DyZOH6cOqaqqw+qE6N6/wGp6lUld959nzqU/vM/Pgnnw+kaBcFlRTfeDAeCCuX5sXHNJW4V FeUyc/p0uf++BzVCqXev3hj2JTIHTvFDiCxZumK5RlYMgmOCy3V69uwmM2fOkDaYVNMRdQfO1yFE Tl0JRw8dcbVwwvTr00fmIoKGEU8N8FZweSH7dced98joU0fK1VdcptFMdMgswaSeTh5Gv3Bjcer8 zLNzZNXql+XKyy+CU2WA7nmz8dNb4GiZo3sJVVW2gZPleY3E+fIXPiMzsEn3mFNH6X34cE2tXIPI Du595ct7tMfo0/Qzpsh96OcWjIkrLrtYo2k4fviFNjpL6CTjxtuMHqpCRM0NcMowwqstnCk/+cUN 0rE9oreuukLHDMfWB/714xo5NvyUYdLUKo2O8TsAo1EmTxwvjPApxybtjIb62je/I2teXqsRNXTc tEVEzPQzz1Bn3OCB/eWOu+7VL7FpVBecGE/CEcN9lc7D+Gvfri2+QLZVusBJycRrqQq6XfPmK+Fc 6qIOoA997FPyNMbgB973j4rjh0aMY0bY8Dzcc+8DiGwbJ5de/AYd2+RTg3PNflx43rnqvFyK8/KX Rx5Xx2gHLCljYkTUkEH9sSzzXHXc8nr79H9+SZ0kZ55xOujw7FBMu57pEPzlr3+LqKxJOvar4Ljh PfI/PvdljQh6y5uvknqN+AojE8R/uu8BefqZ2fKFz35SZmIj+3WIGvvzXx7VMcRz8fNf/RZLVDvI dYhU431h0sRxdk3/6iY5bdIkdWIx+ueee+6Dg687vmJ4jV4/p8Gp/OGPfkoWLVqijiIudWSk0MKF z+tzewS+eMilrnfcdY+Orf/6yhfUIcdNyZ/GOeBznkti6dCj828VHKlXXn5xGJ/1uEa2wO5z5GPY 66o9xsm5Z5+Fe9ndMgrvBfzaIF81DiKia9Yzc+VsnIPzz5khY0aNUAdY67JyuxXqM+ZE7sdq7PyQ WyC3QG6B3AK5BXILvBoLRJOiluYyzpY/uoYU3uC9mrxc83WKf3EiLv84ZfM2p3e41ymAeJ5ifjEu y07juMwdP9tGOGFMnjuM+Sum43UUOVNnyHpiNQcij/HiMlG87p1g7kqzPU6OG8McN25jmcnbWuLp 7TGuEhY7aOiZc4ba/PLLeXAE8Zfbh/EC/QJ+yTyEl0guMbgIv/5y4slICM4BmXTsaXdhJOyxsHnW ZnW06JIELKXav2Y/ooDM9PxVtc+ZfdXpUgUHC+LtpfeUPvLCr1bIwc2HpOuobsqJURXcsPrIriO6 DGzc+8bL4R2MLsLyqjD5bMLKsIEXDpJTLjlFWrXFPgrty2Tpr5fKvpf3S79pAzACMQZj6wUdzXxs 4LS9RDY9uUnKKrAMDEvFGhBRxGUtG2dtki7DsaQBjpE9L+2WavTh7P86W/qf3U8n1JVdK2XL7C3w mWByDQNsgzOM+o3/4ATpeRp+PcbytLK2WFqwfDctpJEYW2ZvlkY4mQa/cQiijSqlTa820ntqT0RF rZMzv1InbcorVcO6A7VyePtBKWlTAufZQF2WV4XopCZMRLkkj3rTEUV55R3KZNhlp0BmL+nQF5Mc yGVKu42SnSCF68gxFDt/OlKMpyOkHAjxoRT4cLBkEwkScGCeCIrrEaEOnoTIGpQPDgUkxOF58pSW HOJ5dhyTj7IEgnMwbq6utxqH5B7qSAo2eY5pfFhLeWvpOGysjlX0m1E5XH7DaJ51+PV//sLFutxj KhwHuo8HHbWIMlnywgpsQHwK9i66T6MR+FluJm5Ky5P3trdcLZdgecnhw0dwjdLhsEaDyWrgQGCa BwcGl5m98fUX6KSS15Qu2UJYn/YHXaOToV07jBuUtVfoByMHqrBMh0uCuCSOk15GztA5wigZvf7A n0tL6Gyiw4XLehglwy8etkFUQ/9+fXVJly0JMhvSmcEJ7+c/8wlQl+BT8Su1/wcOHNIoHu6lw35x Txree7gXyqABA6VvHzh0oBf3AHr6mTlYxtKgETeMdOnbr5/MmD5V5dMZw0iJ+FSEXkGe6UBHwFmI GmLECyMoesAZxOU6b4Jji3tELV26TAYPHKARJzPwqXcuo6PdevXsjmjIEiw3G6lL+3ieuL8No004 mTfuuOahgy4bghK0K3VnZCbhHbGXD+3lqTvsRcdMGSIwhgweBLt30/Pfv39fWbhokTTC+SJYlVWN pWn14NEXS31oZ8rmPlPlZaXSD3amfn5OyJsOCi5Fq4QDiNFDjBLi/kSk4zmmk6ofZAzo34/omOCP 0I2i6fhaj/G4bPly9HN4Mu4YJcTzouNOKeIDe4SRjajQPlg6OAi2YxoNZxbMo88N1seNGS3Xf/Xz iDZpLQvgsHhx9Wp1VvqYpm69Qc+ILe7vdNklb5S3XfNmdZSSnv1jpMowjIEKnOMS2KJXj56IkNmh /aHDy84xeghc4nSDDQjm+ekLhx7PA8fjh//5fRqNswnn/2Usc9y8xZxndFLFqRK25vkn3dQpp8mE cePkeYyPnViaSF2ZeE1T9xdfWoXImw2IfhqAZYl3qZydu3bh3DRk7IY7CK5/flmN47cbzvmZU238 DsK19pXPfxoRa71l2bIX1IH4ofe/F9dSP9WBTsnpePZ+/39+IkvxTGa0Vk9clyWIyu0Ih9pgRPbR ToyGawcHczWuVSYu/+SeaLw/MoKLG5AfrqmB83GeRsvxWpi/cJFGRfE5v2vXHjh6Duv1TtoyOH6H DML4hPONfR3Qv4/es/iF0zZwZNJxx5fKdhjfHKP8+iDPB+FcavjHu++Fw+hMeScioXj98RycyP24 8L6uXcoPuQVyC+QWyC2QWyC3wAlZQN/ylSKey6Qs2I4XhTQRkBIZ3JGIyD+86SU4jhu3GZXhOD5h MS55MLGdcG+Ly2z3RDhx4+S0zL3sfIjXEq+Yh5aP11EUCyKhC2V+rOR4VMgdS94hz7P0zjOmIY7j s91xCI/LxInxvOy547byPRXIIE4WGeJobMGLJkR07dpZf5Xdf+AA9p7Yh19YG/WlnHt29MH+Bvwl PpmcqDSdButEdMhFcN5cOUInMHyxXPH75bLuz+tNLKzScKRBVty8XPat2i8VHSqkvvoIZy/68kxW R/FyPfzq4bJ76W5ZiKgcRgl1PqWzjHrbKCkbjVMY1OWSts4jO8EhYxtmVnapxP5ErXWPHzMLuOkE ws0R5xAEPvzC2foH8WUg5Et/tQROMlgES8vWP7hOxr5jDBwzpeqQKYXTp+Mw/Lqt/ES6je0unYd0 UWcQL7hDGw/qMrCOg7ARqr7ZivQ+s4/0mtBLSiq48edRObj9kH5dbdEPF2kXGB20H5FL5NmEfZzo COoCGZOwXI17Jm16eou0xf5FQy4dIsPfNELtx4l+j0k9Zez7x8rKP67UJXNt4SAafuUwOLa6hMHg /WQf0UlWQ0qjiQAMffE2y1NknlF/oW/GJyFyPqTjiYlzQyrgk9DZSTQJgU71cXpHZP2Vk/Kh3ZNk fBSCyVPc1wQrYxuqrlQ8ZFKWj432wCnD55g2Bi73/hkIB8g/vPVNiFA5LL/G8pInnnoGkTwzdEkn J95bt+7QZR7jx4zBkqhRmCiaM2AEJvB9e3GSin1YDhzUqIz9+/fDiTJI2rW1jZzpvGTiEihuXsxJ re5dhd7pRBJqm8MCBdiGbSmEltTLMTmbpGEXdZNaTkThAeDEcNKk8dL2liq57/4HAWvUvZTo6znr zGnpvaHANoi+wPX04srV8uRTs6BvW3WQ0IlRj/3AzKbUHAlK2GmzvhBUjiWtTLyx7kPEFSNOJo4f q84TRQY82aeHiCHF44+T1MmIrqCDh5P+tnCC1WCvpzchEmYu9vWZhb2cuMxnM5a/ffCf3h34gRHV gEJ0mtEJwaV65pwg2HW03O1lcLM5VeF9tVji6YpbWsOppP0HMnmcivPPjcbv/8tD6kRbCgcivzJ1 1RVY6obzwL1tVL+Iue0lFPSJGxNVU4nllAcN6PxnBBKjg8aPs3FXj3HHfo8cMRLOFjgB8BxIUtJv QsDPn3io0YnFaoKCZkajLUUEWm+MX0b82Pk0hegIfMfbr0WEWR0i3J6Uudib542vP1/e9tZryFzt 4xqzb9w4uww/SpA/z686q+J+okyHGBH8/DDnErFt23fKvff/WR19XBbXoT320SKeSiKJle26sDo3 7eZzbw728+JyK14QxPJbzmYskaRjc+KEMfj63jBE4PIHh+GInBsvw+AASuzG6wGJ44fRXfyaG+VD io7JUbi+uQH0Ziz5ZKd79equ+N6H3tCBz8ptGPtMCocSJRhEpjWCeGEbXmeuv+FZiDm6polL9/hF uMGImpoIHT2glMtIQajLw4yOtjXObn86jjSq1JmFdpfHvFu3Llim90H57e9u1b2yGLF1LaLBXn/h BVTalAhH55t9xoAt/1u0ZgFFXsktkFsgt0BugdwCuQVOzAL6RLVncHgXsed7eAoTFh7PeGfxRzPz AOVbiZa9HhgmcG+nWt7muGyjQyiLQ1ymGJ4tG0Z6zLZThsshlsv2MnOmmM4gRY420yjSUATkQl0g BXjyNn81dhzm/CsNeUzDclxHNVHa22hEfb8ObYS7LKd1WWgqyi+GJ7h4EXc+bEfyJrxio+gvvGzh C++tt98j99z3Z2zIOlr6YZLyMn5p5jKVW27/o27s+tF/+Wf9lTyJGAAT5YN5ROehXaTfWf3U+VKK Xzu3MvKmcZ1qy0ib+d+ZJ9vmbZeJH5wo7Qa0k4ObDsi6hxglQel8D8Zm0SO6yznXnyPbl26X/YgQ Wv/oennio0/IRX+4SLqP4meowQ6W0v2PjEzfM+2Fl9MGM6kZEEftLnP8UVGkVoh+2Ltqr2xftB0O p87YO2m/4nUe3UW2zt0q+zbsl65DsMk2JlC6aTXODic0NCXn1vVY+saoH03l2OC7nr+U4h/5UzBs UVdTJxWIzGCVE8vKTpUyAkvjuLyPnfAvl3Fjay6PKUfE1Gn/droMOG+A7MNeTtsXbJVnvzpHSjFJ HvV2/EoPGW26Vcm0T58p25dsR/TUPtkGXWd9bpZGWw2+CHuIINIqSdbVUGXFLGMKFoCDjRJKPx0G KOCT4jg/TieK2ZiY2haTFJRTOtrINLQ8PldpSwFxRIF+gTgexwlmuCFa3SWQlLJRp+AgOSpm0NGi jSnYSoG0oFLcxm4HiuRynwH9+6t8RgY99OhjOkE+D8uB6FxlpEkTJpv8ohSjGeic4aSQbfxjtMK3 v/dDREbUyT/DocFoAm5s+7s/3GZdgT7EO4y9RA7WHMIYhvIIUOH+LXYroLGARNuwX+CdTgepqbWz iWPeJqoKBQTXKPSZPHGC/PtHPyy/v+U2bLa9X7+A9cmPfUjOx4bBycQ4sjH1eRqb/X7/hz+V89FP Ojq6IOrgqWeexcR3ByUpbz2Ea4gqJgkVqkuWvJYYmbF3737Vmzoy0RGg51Q7Z5Qxj0Y4YwcPGqRL j7ishstthp9yikZOnYFlQ09gv56/PPQoJrrdZQiiV9TZADZmG+PX7BgExJ9Rp3jTiGPBS2Zj1gxi nHg+OCYKEzAAo51HYqnQZz75UfnVr2+S39z4B43K+ND73yMXvfFCs3NkYyVyj43zbMactkulORr7 2q4Km+/Dkcm9pXzckSftyvNHR7UqT6LAJLnfUY+QVGQk5OZb7tCIrfe++zrdp4jn7ufoj742gIb9 5JfEPvKh96szicvSfn3jzRr9cunFb6Qp9I/s3Z5W9iNle09UOTYkEJapPyOIvvGd74FvX3nPO/8B ywt76hjgF7tce6rN4Zc8JwCg84N7dnE5ZccO+MHAOqgZzyojb+qwf08vLLmbio3JubST9qEjj5tW s3+agoq0JyNweN0w8qcLfoBp4gMjaNEBEULc0JuRPXE6iOg7uIxxX+iYgHlV8opVnRUKIfjv1wRB ic1CJytaV0g59s5ipNrpk8er85M6MmqOG57TVmkitRpEQZTjzmgFsAlJZQT+3NdrJCLV/vPTH1cH 4S1YzvY/P/uVjB41SgYNGmAEODJaK0nNxrFpbfISrLyQWyC3QG6B3AK5BXILnLAF8IDmczY8p0ke Ht/GKarg/SGqJYIcRg58qfGccC87MuuO7zDmjhvnDne8bJvD49z5uwzPCfcUw7zsbS3mYVbfYnux BlcmbiMshnvdc1fIc9KyzL+YzutsZ2Ibk+sZ01tLisN6lt7xPXdZXnceyNEEKAUl7/cq3V6KufyE +xS887prZQh+dW2PaIW3vOlK/WLPIOwvEU8eVYuEM5iCj05M+a5JAXzzJhIyhtxvw149nYZ0lFFv HimDzhmkThifWGrHMfxW3LZc1j+5XpdejX/3eBn77rGyi18LwybXfH1UVSmzaM9SYFJygmjscwnQ 5qc2q/Nl+pfOlCkfn6M0pJ0AAEAASURBVCpn/PtUmfa5afgqW51sfdZ+te0woL00Hm4E7sZE7sv3 IiriE0/Kkb011EIjgWqxTG7LM1v0F11OLJZiH6Nn/nOWNB7hqz2WQGCPoyN7j6izaPD5g2XQBYOx eXWD7FqBjcJhIzqktsOBtvSmpdLl1C4y+tpT5fRPnCZHjzTJlmc3mwkx0d/0xEZZfsdyLDfrIWOv GyuTPjZZjuyogVNpR7CMd1ZVw8HryBODhDY2Rc1OYbk3ODRbN3jC0psjGztlYe6IQXSoGh+bkih+ AZ+UphivYuM46WwBaVyBxKSKgnfEYcy9nDS69KQhALyO3PnEqADTSdMa+7cQQS8JlLh8ifulMPJg 7rwFurkzyU4ZNliXoDyOSKMdO3eq44iTUS4ZWbdho2wHjMt0Bg7sh01sJ+sSp5pajEUw5me7mUaO GI6lP4ewMfWjulSLy58OI4KJESN0VOofxhwns5y48+tcHIecJLbCRJYw0nAaShivF6AGB/FRLAtq J4yA4Fe7eE/gPjDnncP9kmxfGVWCxgimIW9+tYpfJpt6xmTVj19+O4IlT1yyxggTv7LLSiyqhvvd kI7JJ69l0I0y6BzjHkn8Cpa3VR+s1vsZozLSFBQAgI5tRgVNxR4+y/DFN35p7kLs8cR+zsC+Pbux nO527N1yBjZyJp5OniGferAjtBWT68my2guQshDxRBiU1i+UscjoDiZ+JQ6GhdMXfQp87NPnoMWy qrSfPB9mDzro2iCahVFl+xDdya9VXfSGC+R1F56nS8p4bnTAJV2EZm5ywLjpMKPR/BPr9uny8FVL 1Qr6QW/yYd+GDcVG6JDx+BOz8AGD3Tru2uLez3HHzcv1vk66RB6ih0phG8jkjwKeaAvytGglwf5D s3WsnztjuugSKURBcVkWHeVM3Afvez/8iTos6CylE4cbJG/CsjAmHaMQaudBQQHGSDPIP8a9gptg O4+X167F1+dewD5P+HjC2DG6zPIIIoR4PuLzR0eIOh1ByPP7PPYxWoAlomdNmyLdsGcX8blLkV4T OKe8Dnh9PvTwo/oFwLYo09nLz9JzGamfW+rBM8YvzU09/TT9yt0DDz6sm51zDHKz6J24tkdhySmX MPKewK/BsY1LA/mFwk5YRsbxwEQ4xyKjwaiTX7O8ZAjzRJn1cF4dqE6Xo/FHoJXYZHo2oug41ql/ OZxa3DOL+zgx8Ucj8uJG8BCjifcN9Dw5F+TNJn4hjyXai8tgf33D77Cx/VDsb3SpXPT6C7F5+zo5 gD2+anGub8cm+9xEPfjblG92HKuh0JK8nwSsPMstkFsgt0BugdwCuQVehQUK3pVIHx7sGVbhXZeN fMR7cmR/7BMew1iP8Vn35DTOM4vn8Bjfy8XyYvSuS4yf5Ru3FS2fSERRzIBvXNlOsj2rVDHFnQ9x Y4WdljTpG51huyynzeZO67nL9Tpz/hXjnfIChhMm2CTC29uU0yfh3btE2nfAHgWcVOKlk19W4ueO 6zixi15CucExX1bJi8vKdPkWa4H5UUxUCKf/kS/jfc/qK6vvXiOzPj9Ll2XtXr7LfqlGO0kYJXQY n31f8P2FsmMhNljt2Va2zt8iHU/pKJ2wBI17D2G+BwcMw/uDEPYKxWYwwjNJjYRDY12DrMKm2V1H dsU+SX01woioVX3bSPuB7dC2Uka9dZR0PbWbDL54kDz3zXmye9ke3Ttk/eMbQNNbKjtW6q/6fab1 kz4z+srsLz4jW+EsOoI9hNZj+djQK4dKOaOF8OvwoPMHyFIsD+MG1gNnDpT6Q/Wy7tG1MgzLxthn vuRzIrb8ty/AYbRNeozpIdWbD6gji7L4xk5nAzdaff4ni7GR93bpOqKb7FuzR0qryqT7REZamT30 5LOonY1sFDajTkwSNSWwFgsRMm82x3iDV/nHw6cITkxbvBxDjUGiWdTkY9L0TDBSAuLGKbZNxCdF KQRqjWyVT8Q/5kNiNHGiyCggfrmLn+ReieVXjz85S7gxLidpF2Pyzy+Ifee/fyznn3c2Nq4dL+99 53Xyg5/+XL8SNg14jPhYhS850QHEvYm49ww/I/+LX9+okzl+mYv7rMx+Fg6k/gP0i4XTTj9dJ2WM huA+LTt27JTtWHpDmfzyFIfLKkwW9+zboxO3886doRszr1u3Dnux7NLNgs8+a6osXPa8Onhq8aWl x5+aJdPw9SpOUvlZ7z379soDDz0mz2Cvn+6Y3HJDX35unBvm+nh0GzKSg+fltjvuwdeZNqozYPPm LToZ5qfFuQHxhnVr8cWs5xXGJWp9EKWxA7Zbin1b6LDg18Mug1OKjuvl2Bz6+m99Tz9dzuVB/FJa HXRkdBU3V+7Zg5+Qj86NKnIU+8KcJj/+2S/0K1GMcuCSNUZAdMen1vnFMO4FQxgjl/ip88eeeEo3 HucX4RiJNB5OBsp7YfmLiIBZgaiQarUfP0neDkvpuKSNTqgeOEfc4Jp7PRGXX4Z6ChPk9sDjF6JW rMQm9FhGx35yMr16zVpZiYk6I00efeJJoWOFE3gul9oFGzwNx+HSpXAkd+6iG4LTDtx/RpeaBSO7 04efjV+/6UlsTv1rXeLHfaYWLV6i9++nsVn2qJEjsN9TnTz33Hx1HlKHt2E55Hvf9Q754U9+Lp// 2vX44paPuzX6JS9GNzFahhalk2Tnzl34Gths/QT9/PmL8YW+0xAl1kmewUbGjLCZi/E5ZswoGTpk kCyDnX75m5t0Gd0mbLjOZZcvrlyFDa2XYi+q/hg/c3VfnElY+scos16I9pmIr7o9N3+BrF1rX9Z6 HOfhHDyDFj+/TD/7zrHHpWpn4Xxx3yZznOGSw7nj0kbuWXX/Q4/gPFdi2V5nLB/roV8W/MsjT+Be WoZPzNfoflSHsdn2008/K11hV/arHkuRue8QNyXnnkR0yo4ZM1re+Y5/UGfO07MRBbdju1SGc8fr 9R+ufZPcfsfd8vmv/Jcub6RjZ/mLL+o1Tmcwl5tZgvVw4V0NBwo/Of8L2IRf3uuNZWgc5927dhNG Xr3nXW+Xm2+9Q37445/LaZMnqp3o3HzXO/DjDaLduF8YN8PetXePrIEDbDHGxYhhw3QjdG5ET9vy nsDlmXSs1tUe0YhDfhVtQP++cu01V+nyy//+8c+g50o9b1zyunP3Tvnspz4ua5eulxXYR6wajrYn n8b4fAPG58trZdWaNRizGJ/4ch43RK/ieG/XFstnZyFK7Le6Dxmdm39+8CEZDYdWWziDuSH7hPFj dPkieXwPUYXcc4xLHHl9aMSV3keDiZjxGUMvVfbyjVDyYm6B3AK5BXIL5BbILXAiFtDZy/EQ+NPX n86se5n0rDsO62zLMs/WnQf9HpjJJ/gOd35ZOqBqcrxjtTtvEjg/oz6OY/qT57GRqUCxFDuMvD3G 9bLnxPFynLdUdocR24/1l+VbjC7GKb322munjhw5cryFwLudieIJMEz8/b2M0QX8hZ8TvSp8rWYI XvS5CSZ/meaGpKac84HzAoSl+HX44JZDMgAOkc6DsZEonBp86a49VCelrUtlyGVDhJ9R7nxqZ2mo bZRD2LCZm1MPu+IUad22tQzG3kbt8IUz0nTs316XYR3GF8e4aXMbOItO//hpuueP7r+Az5Edxmfh B10wSNr3NpqjpYBtr9ENpzsN7KROFf7KSp1VFy2b04u/FnPivQ3LzoZdMRR86YjB5Ic4rfErrboU W2lfKtq0lm5wwrQCfjWWozUgwqff9L742tpkadeDXyITqaiqkO6Tu2u/qjfAuYN9juhcmvDe8dKm Kz5rD5zKDm2k+4RuUgd7HAAOnWcDzh8oY64bI227VKHfWJoGx1NVv7ZSg+ikg9sO6RAf/c5TZfgV I+BwYsQHHFngx42wa9B/fpGtBLYd94HxMuTCIVJWGS1z4Elqlsyh5wNGLyHi4VRapGERIj/NES9z DTYf3M6H7SeSTCu6ENKrmrCW+Bj3IopRgWgcxzoUYAf1mLnsuKRa0BFGhALCTDXik8pqbmP+yr4d TprZmAxzg2NO2ltjnHGyzjbuI8Sxx09m7927T0ZgYsnJJ79mxM97M6qITiB+0nwmJsp9wIMb0x7A hJAREdzUmA4aXjvliOzog+Wi3H+FXzxiRMle7jMG7+r4caMxEe2qnwpn1AP3ujmMPXq4YS6dkEMG D8Hk8nnQNOHLaX3gDCqR0SNHYsK/UB0EfdXRI4hoOFW/5vSH2/6IpWbnYrPaqVLZuhKfGd+EpVuP yICB/dAHOBUwYXcb04zd0R/2s/pAtUY8cPlaP3yhrRz3FF6TjJRYsWKlbjA8kJGL0GkMvh62fsMG deBws2Q6AU5B30YiiqM3HDF0tPDrcdy0mPuttMHElBsRD8RkmEuLss4qnic6yvbj62lnn3Um9lqa gJNqGyAfwWSaTgvupWJ76OCriPv34Wtrc9VRzi+HMSqSm4xzs+/5CxbpkiRuLExH79DB2PSX5xK9 5j41XD7UAc72w3BIMPJq4IB+wKOdB+nn2xntov0EjA4rRkjxnFIH3kO4KfQywOhgmXLaZHx9baa0 xZ42W7FU74GHHsZmy510sm12Tgcq73ucoNfjq3Jcbsc9mbiXEZ2V/bGJNb/qNmL4UDikqvVLbNzA mzRDEKV1+uRJOu44Zvg59XqOO+Ced84MOFnwJTs82nmvYITUlq1bZR72duKzgcspuZdSGzhl5sK5 ww3N+RW77l2746t4U6QGtq2G060dnAp0xPG5UllRqZE3dEDthkNmx45dGlXX2FCvX1BjZNcs2L4B 9f6wCe8HE+BcmDNvHmC4f2Lc0nE1buxojdajBZh46bL/9BGynXtocZP0qadP1nFCRxyjWOl0HQsb s++MlOE1w2V32/HVsfYd2soROLsYwcavhr0Jn3kfCvvwC250ljJiiHsMYeDKqFEjZSz+OAb3wG50 spI/v9g3HXt2sc96H4FudsvAfnTQh9cIG0hDvr179pJzpp8JB2N3GYpnLp3B3K9oA76SWItlphdf fCGcxK9XJxj3JuPm7p07dcSegt2kM2Tzuufm1PxaXFfsE8RN6fnFtvbt20pdPTbz5j+Mde43NXnC BO0v94Xi/YUb7HfCJvKvO/88YdQXo5k4FgdybEBLjkXuMVVNGMcnbMrIp86QxY8scJ8/jkPuuXQK HFa8j3H8cKwyOuq6t71F+XKPtjVwhvLeZw5nbrJuZ45yit+P0ZCn3AK5BXIL5BbILZBb4NVZAI/Z eEUZn7p85mYT5yQrVqx4/tZbb50T2ohqD2nLvRyTOk6csz3G9bLjtNTufB3f645fTG3HOVab4xwz P14Gjsc8VtThhLHsdQotVnZYjFus7LBszvl8DCulICTmDieO/xHmNA7T/M477/y3K6+88h3Jr5rE ZIp7Z5D0SBy084WXv1jzF1uVihfNpLvKB5sx4yVx05Ob4Sg6IK3bY/8DOCw81dXUa/RMVfc2tkIA k6KaPTX65a6yNuVS0blCavfVIsdXeuD0cJ3qDtdhCRgmOnColLdvjb15KnUySb6MKqKjpKJjBWhM Fl82a3bXYEPrcjhMoGtLfQv9Ir5+SQ28y6FHnOjMqT9cL/zaWKsmEOB/LaKEanZheQ8sWgldud9Q LIP8arG07MieWp10VELf1uCdJOhDOxKnBn/8ElwbbsANZ1nMhxPRI7BP/YEGKa0skcqubUw/7w90 acByNi57q4eetCFtU1pRpl9v63s2ojYwwaZTySbJKDAxcx4KKHIogtMM1AzQEp9CxMIaaJoBXoEP dQdNARkrTMfVr0BJXF4VzcbxK/DJygIf+AaOy8Z0DnBCtgtfIaOjhBMqOly7YdN4nij+4+SVkQAU 06N7V0yysSwL0TH8uhiXa/Cz89zHhZNO8qNTg18o4jnugEkif8XfDccPeXPySGcIHRV7EXXBz7pz rxR+dYyOIUY7MOKHduOyHybq1RWT1/2YMPoXoPjVLEYS7sUyINIw8SHCKID3fvBfdbL8ja9+QSf9 5LthwybAPyIfxB4673v3OxBFQRo3HIvoJ3hxUkpHDKM8uNyGDgTy5SbHB6Er2+k45aniMljqyAmq RtQByK+10flBu7DPdfW4VjEp5tee6Hzhqe1EGwDmjiKwszJOGp1Nu3bv0Y2w+Sl24tCmpOW+LZzE s06aurpGyNid8KGenPjSAc3lNoyMMdxWSsfNrhntQX2ZqAOTLuehKfDXlecBy8IYIUVa9pVflWK/ uW8SBRNOh+JHP/lZ2QpnwY9/+F3dn4gRaXREvPefPyJvgEPrs5/6qDoDVQj5I3E8MaKHkWS8f+uX wnB+aS+wxRg5ql+l4r5oXB5FByPHTZdOneFoqwTeEdDynNfqOOX5VmeHsTcZYEQnJe1PXWnDjnA0 cCnYbtiWqtAZzy9dMcKKY5/nkeOOUVA85+TPOh1eHOeHsVSSn7fnueW10Rp76ZCO55eJY5TO0z1w QpDWYRw31EGNy1HDgYMqzwHPBemoQ4eO7bH8skZlEZ/nmeeRSw6ZKLMUz7ldcHBwWShxOE7bgZbO RyY6qDh2aC+mZDxgXPCrYXTs1mHcV+B67YRIHr/OsvcK8qYMjjlen0x0PvEap75sp73ozOVzm3al vuRHW3MJKe1MG7PO651j2XUjjF/J64LrgM8dOqPIz65fWxrHscHzT/mURx50FjFakDY+gvGJBm2j jW18EkZwK703cHkhnVx02DJxvHODeo4Ljg/Ko/OQTlaWKZNOc0Z70Xmn5+rV3I9VWn7ILZBbILdA boHcArkFjtsCfFVi4ntSSHich3dcW+J/11133XjVVVd9H83cPJGY/IvLfAHK1gkjHnMvO63D43pc BkmiEfl6chzWvRz3gDDWmWdTDHOcGJbF13rqvSjaXADMMnPFiBSXnYj4+roTAI4T8yHM4U4X58TN 4jg+c5fhNN7WUj2B46WxAPcVVg4ZXdCcL41MfPG0U5GyIh9q3Fh/VJdM2RIzTho4RizxhRIzEf1y GpH1HyfYaCYnsuUvupy88aXXuAOL1mTSdtBjAmHtxAEWfgEGIIHR/NzrJMUz8paP9qu4Lk2hEppM K3O0wAGmS9scVsiJctJkWqMb2p/QCdUlxQm9z+BQvlETEz1jBfZi35KglgJZwIJxdOJBOO0Ec3My 0BYbXfc5uw+5mB4JZ8gAM9OYAlAKGSqatBq6lDbR/cWaJyAkQylgpciKpFXlY5TGsgifAr4gPQaf hDEKQUUDxeoopIVD0MeIcNQ6BVrS60GLGSUcgXkQnGCgYMPG+bRsY147nPz2QyRQYKPd5XgmE8L4 Ke7O+PN20jAig1ECvIb0+qMagYbRGP0RycFkNEf1i1IKIAzjoRS/9HdDBBGdLSSjUO4L5CnpiwOQ 6+fdozoJ6ZhxxagLJ4D86lp1Nb+etEsGY4NaTm5Xrlqln3mfjOVDNpF224TTC16d4YxIJoiQwwlj e0QhMLFvdEp0xJ/bgXBOkrknEpXQsa24iOQDLaMjiOz4bRGp4mXrNDnAxjpuoQ9k8BrjxFdbAjLP Ah0dBgtjF22M/OrTC5FJ1oKjnQvic1JNh1RoDBi2f5Ppmw5r+IYKEnVXOyhHXL8YhOSl/AhT02Hp Gxwd2xAJxMiSDu2H45yWypo163TyfebU0wO1sfZxTF35OXl+YaylRPbEY2RPnHTcYWxx3KkSsJfZ L8VSWsA5PtMxTTxV2miVu9VpTUbJsE/KDpgcZ8qH3AHkssWjiILRRFZIhPMLWkaYwvhVztjmZGok gdDE6vn0c0oQPzdAJwa/BhjTa1+NvcrsyUihTKIuTPyim0YSJdqbnmynM4p/NkZtDOk1nvQ7KEZG wKeDkM5bOoA8uRy289qw61/RSaROPuLyh5tevain86SQJoMFMxCPfPi8oMOXmG4nynEnl17z0clh G5cQytFUL/KJx6fyBjfi0omoDmzyD0I49lJ5AZsycZ/o0xsRvIE2RSK2JR/H1re4M46R57kFcgvk FsgtkFsgt8CJWECfyeGRmj6f+RxnLX0GB54OJAX/UhKrE40wn/DH7XGZeMf7ICceZ7Uuk7TOi7kn 5+dtrMftxGOdujkOYa+YjtdRVExgrNSxBDmt5+wwk3fA4aw7TBGK1AlnJ91oju88mDt/lj1leWNl GF+90qSV5ODsC9v5UXeqmLy4okxXg78IEtuYYnPUilKZ8ukp+LQ8IJRuDZolfEigbRk+Ua/IO9ni xcSTiu+oSqoVxQdAFVEIGguRuRSugE9Ai7AK9LTmIIR8KUOFwiGDPOmzyi6iT4IAOtclEcYCbOyd CHCFEgZhPBbYxuvMA36CVHgqzcaBD5ehMTqAzArPVSqD51PPuApN+fvVpF2n3EQwim4PLVj9lfg4 hwI+1onAwDGoq5mHEE+uj9eDEqEa2U37wcMrjOOEUdY2pmGqRGoBN4Fxj2QqryyfY9sYoyi5Y1EC ++e2MYm8WZsMbQKQzj/2SiebKbrxAS6xLTkdc4dCHxXCL6a9ehsrf3VUki+v5iZ10Fz31jfLTTff Jt/54Y/klCFDNOqhAdEC/Cw2l+KooyhjStpYncjx9RJUd+5U32xDyVkbs3dAIB+2EpcFJgUYbcE9 JzSoKnowRLV14OPXg/KO+Bi62zk0KD+W2RcyYNnaiM/kFCyfyDi2EWLjmGy5mfBbr75SfvqrX8sP fvQzLCPiUiVEJ2Ep24fe/17sCTRJIzQUiINqZUqbbgZx9bTmtmnJxiRPnBswbsFVZd3UPikf1I2P NaT3nIBIiWoid5oETUNzbBt3miqBohEJqhexcaGTPume4ttBjQBa8jBhxo01SMX+ewZPSdjOPumI Uzq2ReMv8NHxxoGnOCZHuRCk/8jHema2yfABXkKFgl/jlK+JBcKRlegFjB8stNEalBaHgutI6+Fc +QUR+IRMbaFsQj8oK/1BRxkQgr9wr3A+RETSlsQuhFATS8Yn3P9UCA+0plYcLXAHDP1KWyIbB5tq G9lnbZxwygu5BXIL5BbILZBbILfA8VuAbz+YG6dPYpDyaRue+frMNW784Tc0+qOarf5KY0SGGh8J 9zbH9XZ/YXB+Di+WO59ibQ6LtFVQ85e6VBenOa78eB1FroB3jMzjsgtzg2TrhKuVkWdxYlyWY77F yg7zPOZHmNe9nTwJK0h4YY7bo7ZitrVhk2ViL31gU/CyaKzom+g6uisqrpKLyNSTqhXCa3lgggxC tSUcKJPFpJeG2ezoRmCDcQ4o4VfSuN0QCiAJP3aNJEzh9dUqBVyDBM2MT3FugbSA1mHMCzTVBuPT HF6Imm0vrOt5QkfUciEPr/Aqg9hJAcOCX/ghTP1PKFAHSwmmAu1cFbYortsY6AkfHVZulYgPMApt bJMJk0k8l27Wt34bn2QsqAoxTwJOzjhW1slgg9wgJmhjzTyqqifPxtprHGIbJ2K0AIE8l8goWs9V QZcJ9XSSbWzmB/MgMNQvwobM/KrRVmz+XIaIn66IQOjRrZvuU8Ova/E8t5ycKfKg+muzMcwT2eYo I/IS+SZAqzi0bGNoy/aIj3fZ+mF8vHxSxzGVU/YFJ1WdbeecPU2jSjZiA2hGY3A5EyPEuE8Vo5LM GWJaFR6dKfKg+vHY2N4FjCDtMUuF4+9Ebay6GZu/KRu7zZrZxnqMI5TWwZxaw2l0wKhxW7axnYXC e8XflI2th9ole4WkrgR6v7WCXoY+BluEHildMsCss4AVjuOABB7KxauamzSX1ZKNC0jySm6B3AK5 BXIL5BbILXBCFsATGM9oBlKkyco6C2z+0s5G/vHJ7k935kyes0wcOoaMWXNc4jDFNAZJj84/yyfF KF6K9XMM14d15+ttr5ifiKOIzFwBliks+/bjRmF7nFxJ7iXkhjkeZbM4TutyyTcrk3XiOS6Kid4J LkLM43biIAFEqE6qktc1g3E0OWfFRVVHWKjEWYwafilMBFNAzIfybKQGDuGllLWAqm5IlP1FVEnY zEJB8hYDejPx9B2X4IjIsVNQQgHESOMA1glYsI0qp/yI6ggEMKEOmPFN+SRtnHkep42NT5ZHEMFM O2a/xqZYlG84JhPH6FwVvJrHqCi7jUmX2CxhwgKQgm1SeYAW8CGOYwU+CiqgSDDie5TaWAEkMD4m Miq7/KRPMV9KBi7Rj9PGrziO1RA2LlNJEMBKUCvRMdT/GjamjERkGLSuT1AxKORQKmPlk2pjZQne ZB9szOgPflVqwtgx2IR5JJqadIPkZJlqwTMDdJ68Tyfdxt5z5NA3mMulIo9sE0ELbWwNbs2UT0pb wMcRyV0vCAKIy7+QFdwrjCAdfxEDLYKOpNE4ZkcqK9rol8NGjBime9pw36jWcMzRwWuRNS5XpSoP hbxqGwe9oEvKufB6SG0TZGpG5Y02cLDGmA9RkLw95ZPSmhECH0cEzV/LxipCxceKqprRM49YQXk2 Oepx2Fj5J/cu9l2FmQDno7X/JRubJqZBPI79IlJ1eUDSzE7KiYzjk2FjUyA/5hbILZBbILdAboHc Aq/GAvrK0owwPN8jeNiD0Rs8jzCS1ziH8THvTp5i+MQjTrYthrHN61k80ntyPNa93BI++TlPpz9m TofL8aSWBJK2WBuVyKYTUczpPXderDufbNlxXJ8srcOJ18o33nQiBYK1vecSlb/1heSFmAOb6PAo mvCCC1x9kU/4RLiBT8LO+RCQAFm2F2UXYRzsWIDmCC4r4qPYOMT4hp7y8TbPC/oeeCd8/GXZZRob raX0qGqfIhsmfP6P2jhzrqy7r9LG2bP1/6GNkwEVBpWa4LhsHLuoio0/cAazwivLYHbOMtfKCYxj Xu/cy6uiojWcGdiIHnuZEab3Ab/GXUiS/+/dK1QF2vfvyMbU2c8dNz/npsDcr4mOOltWaBg8pumv YWMfW+k17vLS+2C4cP8ObZw8/NLOWPeScdysgY8rG+v+HEqYgDSgJ1TOh4AEyLKfXYr727BxoYKq FpXTFKt+8p95BdwhLx7HQYE8yy2QWyC3QG6B3AK5BV6VBeKnbFqO3t0C17D0rCUZgaCl5qJwiktF FqIUgx9LBttiGi/H+bHoC6VnasfrKIrJssJiBWOlYhqHx7hxu5cdz3PC47LjxTrEPFn2NtI5LXOH k8fRZicdrU6gRuFbb0HK1k1UFkopGrKGvJCPY3oeKxQmt6QlWyYte8VAdkzpHeqv06xra8SnALuF iktpxsf5Rbn1iZLiZIydj7VYrUAk9UIj/wpt47wKsAEkj3jiH/CUDw74X8jH6T03Dkb117VxErqY iobYtMKeMB2PjRU3JTXCwMv5GNBqBagAsc6/QtsENpFOKY/cxmYLs+RrtTH3J0kcRMqYHHMbn0wb c4S7jdURx5sBbVx48vQG8Fe5HyfPh4KrL5ztVAltRdX1Yv3v/l6Rds9OKftH++N/4T3HbeO5ouh5 0nNFatLiT5OWvQLI34iNVbe0C6ZruI9G2gJutQJU9oldwV+hbQKbwMdrxuM4xnFKkJdyC+QWyC2Q WyC3QG6B12iBZvOz6AGfCS7xFn/c+2OeGjgs1qYYjDycTxa3GJw4MR8vZ3Hjelx2/CyfWHbRsr67 FG1pGejCqEBcJkWsVMzB4cT3cpw73GHO1+HMHUa+2TphTI5DPs5LG8Ihbo/hKSUw/KVXWSRcvOAs mCtmMz6KmeWjWKTJ8mFDyic5IXhJdj5KmhxMblLVLhNWmGxzrggWiy7OGMivwAfNqW2A7l1JCxmB MU7EvoAPmDTj43owT22TMAfYu5Dq40xIE5edKuVzbBuT1uQ6ZfO6tcQ2dn0S0Qkg5WIl8i5MMR87 BSBWeuB5nhYi4ua8jB4oaCqwTTM+Tss8tU3CHGAlyfJRBNI4Q5Y9pXxeq42de2wb1ycRnQBcvuex TgaL+ZiNQOxCPE8Azod5c14JCE25jVNb/U3YOHu6UPdhUnCuVG0i+8mPCY9jHCsZD6QrpI3rzj22 jcJi0QlAlYoOMV8Dx3xMLIhdiOcJIGJVoGOAO3vkBbZpxidCJKZXnT3qSpLlo+1EdoZOyPxEbezC PHdeKXeXQoyknBScLpunfLylKEkzYDMAyJvzikHa2owsCyDWMWxcXIqrnue5BXIL5BbILZBbILfA cVkgfmbbs9fJsk9mhyMnYrFmwvgXM/V6MiVCu6cYj7CW6rGsYuUsnS93y8qJab2tGMzbkryY8klj pkCGsUJxmaisxzBXIAt3XOZMbKcexWjZzuS8rGZH1yemi2XFcKfz/h5tbGxMeCYFYmklJW3+o2bs c3S2lrfMJ4TTJz+dQgzKzV64wSaVHLgVZmgHIOHDF0rWC/VgLX0ND81F+ThdjO0wy+MWE2vCAjtH CkQxdgLSQgG+VlKl/7ZszHMFBU/QxnEnva/GJ9ih4Iw4zPLYaq/KxoGdy9VqbuMCI+c2tnvOK90r 0rGT3nRP1jjWKz657OMzUnCqCm/2fwPj2K6rcHWFzDTO3ityG6cPo2M885IxEKyI+ivauHCI5LXc ArkFcgvkFsgtkFsgt8BJsUBLc2lnji+l+9sf88xbjGNp7v6MGCcuO3KWj/OP21kmbbbNcZh7G3P/ i+V5+yvBYp4FZXecFABbqLgQF+q5o2frhBPmf14v1mnnTZxscr6es93LMW+He1uWD+uJnHgz6wTo lImGPpkBIJKk+AlRKqYZiADQaRbRK4zw0JZyiBRMuhhaSY+kQzWUyVx5BD4JGHiJLgDGcK2gsRmf iCbGb8bHAUAyBw+ZUTOmsLwm4CRgtDhZgkuAIvzfsDF7nyT2i2ZhnhjBbON2SMCGaqQAKjxCym1s pkntGNVzG0fGCEVmYXAVjD/AjudeEXExPifRxnoFBN3IXId5GOsJGAoEUNIPBSjC/869wvSJNcxt 7OMkOVcxAKYivKXx5+MzIQn46QkPLcHkyseR8zy3QG6B3AK5BXIL5BbILfCaLeAvGfZ+zHeTZu80 QQa2ONDXGlSzKIFJAZww/jkNuWTp4ja2HysR1/9cnuPHfOOytxfLiec6FmsvgJ2Io4iE3nGWXWmW W0pZpT0kKgt3pZ1P3B6XvV0/BIZKto11/3PcosYoWG/oZlduqMS9RMWnJybNkJu9vJIWTcqCBaLx D2OLWWhgKZS10doMqkfFVZTAEADFNMZG6+VA4RrGYOeT6PyKfCjHOOhRhZpsFePAiA9jqxLbKJId 3DZOomxdIQcG/oEi5ePtaHA+CWu2gU5RWCAP5ZPb+O/Jxnr+eLATGU5vOppiME+vJgXaOQ+nPIXH BICWlZboRtKl2Eyae5Hxh4ASH0xF+KSSjaUfW+HuWILNqS3KC1DSukIRn7Qf0fXg7SRxGmcc+CjK X2kcK28eTEjI0546mCol6ikQNftfuEVMTKA0BnASyjkWn1QyJabJbRPzSRg5kIy1TLqTZGNw4rnV H4lcDoQkfaAoJK3jYPExKNh/ADxiBkiuW+DjGjo44cOCywp8zBEc4DEBQOTD5CQsgMySAyM+r2Rj DkRusM4/brquKeITxAHsPUDR2wlNhCultQVYSUmp8S4Hb9dTaSNc1T4GWpuywOGYNg5s8iy3QG6B 3AK5BXIL5BbILfCaLeCvI5rzTaT5O+BxyHAuxqA5AdvZ5n+On8WM4Y4b4zjM/ShxW1x2eTEsWyav WF62vaBeVlBruUKGHk4VY1FYnLLC4/ZiZe+Q0zmOy/K6d4h1h1FuXI7rDmfuMtjOpPUojCxjruR1 1bBx1BfkoEErfO2OQ6nZmQqSLAOGa5yoWKiG8fFuJqISbWM+TmksceQMFgjEIcHRo4EPhWJW26qs lZTiX2NTY/hcNOHGOpJU2DFtcH2MT0l5qcrAMr1AHCZHEZPENiDxria2CfoonO1J+hu1MTqjmnH2 RhvTaEgF58r7xAY2l+AAm5NOmwiPU2IgBxaeK7eZEftZd1zLExaUZyc9HX+uj5FGhH+jNk40PCp0 5KTRnGwo1VZ+Wh5DF+MaI+kEbcxJ8KYtW2TecwukprZWzp0xXbp07iyNRxvxJbIK8CRDs40KC4fm NsZZB27NoUNS1bbKsP4ObZyPYzvbvEz8JOppRP0gzm2bqja4pOBM1Pt6es07to4/VOzUx9c43TJM YPR3cK+go7TmSI1s2bxNXl63Tk4dNVL69e0j9oPJa7tX8JrauXuXbFi/UQ4cPChnTDktXGvJk0At 5TbWe6VCwiGcm2PaOFg7JsvLuQVyC+QWyC2QWyC3QG6BV2WB5MU/O88Dt+Sd0TiHD2ARaq8qqUB7 FTQKlvni44l1h5E2pnc4c8L5AoqZjybHZc4U47JcLDlNjEs8wgmL6Rzm/InXYjpeRxEFZBk6rJjw YgJdMbZ5mbTHw8fxYlovM6eBPWX5ud6eazsmqF4P1vPJo4tic0BJMIljkwlieWKzUyU0hGAQlpT6 hMKcCXypPtqEP3fuOBPkyidmnJjJuWKigggJDtgmOG+aGq3ureokwi/FW+dslc2zN8vIt46Udr3a QV7hC3sqkhJde0JZRoLenKOv/tMqObjxoJz6zlFS3qYcOls/DYlHAJy1mtOUT7pABwppaAolOnEb l5SVggcdB+hrEMxfwxkN0NTIr0ulvL1kaOm5CmRBA9MnhYEBOSNrrG/ASOI5K5ww+jk3BobLKBO7 x1CrwCNlGpXYFrezTFBqG6srEAcfLwrFAfh/ZRtHktTG7JHpzJzjljpl+2E4BbYhCEl7a0wMYJCk jRiMQHjxpVWyYeNGaV3eWuobGvQ8d+zUSXr16A7nTifp0KGD0EnJcxy4Bn7ZzHQrLSuXFS+tlJ/9 4jd6Dpcse0GqDxyQBvDet2+//OuH3i9tq6rALx1Lxgn0GRuXYgzMmTtPbr3zbrn6sktk+lnTVBfi 0xaqEkqsmW4GSfgozvHfK/4aNk51o9aZ64EDWKHA0i54PwyujQUHs7HxdEoyOPnjmNz/mjYuKS2V +QsXy823/lEueeOFct65Z+PcRn1iEYk99nuXnV2FEBpavW6tf4s2togpXm8lsnzFSvn1jb+XF15Y IZ/99L/LwAH94Shix9mfuE+o+vWg48bGhB3RhuQ9J//6unq550/3y18eekwqKitl7JhTpapNJWxa SOH3ikLo8drY5ObH3AK5BXIL5BbILZBbILfAa7dAS+9uxtnfc1jDvIGvLvxzIoKZHI1tfHNichzP ndbbHSdLwzqT47FOHi7D+fkbmte9nbQuy2m97jyJw0Qap1dAS4fjdRSR3oU6L1fM8yw8S0N6T86L OZXnjMqT45FvDPf2bB7zIo3TOdxmaxle8dIzElj3/GwAotTOgjlBYfqCauqg8Em0W5yNQIbUpoZG 2TJri9Qfqlf8ig4V0rZ/e+nQtz2iftCOd3RydNmF0gDluFTtDYdOosO7amTVnStl/+p9OuHtPLyL jH7XaERnwKECTvx76dYXZclty6THuB6Q1RGRRYAqc+NjWC7ZHBNOSzR9+a+pk+d/vFh2Lt8lgy8a LOWDW4s02ATbpslBW0wUjGtzPpxlWWtkm6CjwpVF4KMKUk22mL5H4Rza9NQGqerVVjoP66z9Zfuh rQdlz4rd0mtqH3NgEb8JfPDfdAndNU7K0SAO9xpy2JiOpzr0d/43n5OB5w+UfucOkMaGJrLTP+pj fKmXDSe2pYlaIfGgXg0tKMDorJ1lq7OJMNY8pRyN2jGR/7VsDNEuhcq7PqYVtAiNybl6DTaOx7HK Qp/2Ve+TBzG5XP7iSzL61BHSv28/qa6ull17dmP5WJlcfNHrZcaZU3VJS3K9qXFca8t5LMF5qa+r lRtuvFkO19TIJz76YVm4eKn06tlDbrz5Vtm1a7c01Nfr2HZHkZ9V7WjGxpxYb92+Q2Y/M1fOOG2S TrQ1sk5tFp8rSFed9KDnimfUrEnNEjMmUIcpoXXBbE8WJ9HGLodsTTvvMXXGOA4Os6CCYhHPkB1q uR2z4xhQ8PFxQ1IjTksusZiNydP4kiwdf6SOXXnJ+NPnNGWqlpDLFnKI+ASow1SfIMT5cKzs3LVL nnn2WRk3ZlRybg2NR17jpHTuWs3cjw2Dx8Ae+Cx7jwFtycYu4rjuFcZHdacwTdZ/Fl2mlwruFbCT PudCPmzoEJmJCLuHH31CjhyuMVbKwfpqzIxjoY0N1ftJ7EQf9IGRga87f6bMW7BYVq5ehecaHmx6 rlqyTRAd+JCvp8JnHqFpXx0nz3ML5BbILZBbILdAboHcAq/FAv5O4+9RVscxendz/pg3sDnroAkv TPoayHYmwhzuOeHG3nLW2RY7b9ge8yCO17PlmC/b4rrTeJ6lZd1TTOewZvmJOIpcKHMy5x+TC4ph 1pJ2MsbxtmL43sacb+vuRHLZ9gYfY1mZvJg8t1qqW5Yuiwd865YqhaILjFkmMGjFMHodTIEupQCW TmSAcaRBnv3iXDly8IhUdEDUxKEGjXQYeukQGf+BCdK6fWt1friyzHVPFI5H/pGPCuWLOcroxcLv zZdV96yWfmf2ldZdsZQG0ULWGUUESSvpf25/adW6lXQa2smibsDX4qfABe063ClL9aSoQBv6wlp5 ZbkMvWwYnDG9paJLhbRCd3kyDIV8SKdaKU/CfVplkwhFgGD+p0yToXUUqU+AgKn1wNkzJ01jXYPM /cpcGXzpYOnykS5ytB7Tx/JWsn3Bdnn2y3Pk8rsuk/Kq8vTSBR37RFHO2zin/Nl/1lRXIrIjsOvR uiZZfc8aaT+wgwyYOQjzHOPgeiccvB/g0SwpifMHRWCvUReB3yvxURY8JHpG1oG9Xa8CGxcoosTa x1eyMckSPmoxaqcaWE7bMDkoNBvYKNlsWAGXAKS0BmISKI8UymiwMaNOlZXj18iDjzwqV11+sVz0 htfJ4cOH4dTZIw889Ih8+zs/kC1btsrbr70G5PgHHnRLcGLqyZZFYrIKx86Onftk1uw5cs3VV8jw U06Rvn366Njs2KG91NbWSdt2iK4DE44BbGavLEhfCqcUE9sa4dzlHLcB+VnTzpBvXP8lGT5sqNaJ QzrSk47OJJaZWPexwjodHWVw3npimzmnYTe1BQ/4C/RWLJHSckQLagQg+gr+TKzTXgkuYHR2WOQb KmDYAPkcebFtlE7vDwZXW8FpTL6MqtEUaK0Sjqqf9asUkV90UHvSfoIHWwl3O7KdDoJG8GMbWdA2 dPjxHsVlfI7rtnJbklZhLNAkcNyyTW1GuiCfOORjmgFX+ac2JjmjxzRFfFgnbSIfHvrTJ0+Ub3z1 izJ0yJDk3PLe4WOBNBq1CXlMOmai89mo0Yw4J5QDhbQ9jCOT5WMU5wZjKdFZmeGgbHHGIpmxjj4W Yxv7+SQLJrJwGysAB/LgeGBfd+3eIw8/8phcdskbpV3bttK1S2cZMmQA2kp0jJOGSzWZ4r6ybnql tmV/Bcs30YI/swnL/IGCWIMHD5JuXbvIylVqDEMDvDy6VlG160ufJCmf1DbBmM6eBEzaUSvmx9wC uQVyC+QWyC2QWyC3wGu1gL576LzKOCXvIuG9rwh/vgzzRciTv604KXOdKiOPy8Rn3d9miOO03sb2 mCZud5wY5vzYxpStGzQ9xu1xOcVooeRvsy00F4CdsedsZJnJc3aChmROmOPGnQO4mYEcn22eYpjz jGGOx9zhzNNZjcGd9lj6gAzNoOZLPyeKmpiTIw+YMFmP8HJ//31SsvwFafz3T6EpEPEFXVPEB0Nh z0t7ZNBFA2XktaOkdm+tbHp6kyz66WIlm/IfZ2BmA3z856SPk8Ha6lp1IHHJVROiWpxlK4hvrG2S Nfe8LP2m95Gpn5ompa3xkl6BiRxf/KknRWMSN+CCgdJnaj+p6Bw7kqydfWmF5XDsaP3BWuPRuizI ApyJzCBv5LUj5SiiiFpXtcZkNUzQAgrRSsogF/C6g3VS3rZcJ3iMAlJFgKd9qmuUutp6ad0OEUlI xCeLojbWFkXTA5e/7V9bLUd2HkGLCWZeV10n+1ftV505oWET+0TZDZBVBicXJ1iJ/cgNONSnAc47 /lW0h/ML+jsOHRH1h+uNJ5DppCJRWRvYRidJgQmzJFEn9rcwJRA2MwUnkVWKHVM+ShLojA9s7DIK +DjzLD+D89iijbXR6WI+ieZoBJxVNjuK50oa4yogcyByYOB8HANNnAh3gAOnW9euyr5Tx44yoH8/ RP00yJDBg2TgwP7y+a3b5Fc3/E7GjB4lk8aPBw2uj7o6XV62Z89e6dixg5wybBj2Q8HYAk86lfbt 3y+VWPay8/+x9x0AVh3X2WfZzrKNDkvvVQhEk4Qqala1GuqSe/vjItc/ihM7duLYieM4sh3Jli3J kqzeewNRJXrvHZYFlqVvZxf2/74zc+6b93YXUHOU/Hfg3Zk5bc6cmfv2znkz51bslUwE1s3AcbRM xCZqm9s2cjhUYzdF6Y4dOIaWh/aLsQtiE+K31Enf3r11BxLnKI/k0OlAJxMX2ewLF+rcZbR//34Z 0K8fHFN7ZCd0zM/Pl8EDB/idT5jfmJP8bN6yVfEs9+rRQ4qKCzFHj0kW9HFOJBoCopHROcLdVKVl O6BDV9V105Yt2ubA/v2lGEfx2D4TF/fcIbVl2zapqzuCWDNdpQ90P3S4UrZt366Lcy7sO8C2XTp3 lAbYdP2mTVLSrZvkId7SwUOHpQxxnNgwjwj1whEkvY9UuruwTmdDOfq7rXQH2qmDrE7Sr09v3Efp 6tDmfb1u/UbY4wCccG1Vh+KiQrUbnS7sTxnGpGPHDhiLLNhjC/jS4Xjrpzbbtr1UxyyvXV5kP9qC sYO2b98hRTiGmIUx3Lxlm2RmZWKs+0lhfgGcYo2qL2Owbdy0GbuD9ul86t69m/RBX9SoaJ9jWla2 U/vBubV46TLJysqSIYMG6n3O+ZOf307p6TyprKzCXNgsVVXVsFMunEh9Mf4F2te6unrZhPE8eOCQ tIO+fWEH8nOO0FZ12MVWir7SMdIFu9g2bdwiVTVVUlJSgrEvwdhxoPlJJPI1YJfbVtihHvI55xnn 5wDmcI+SbrgfesKGh2Qj2j2CcR7QHw7z9h0gy/2tYVu0Me3DvBPGh/OSPzYcwX3y5ltT5clnXpDT xpwqxbAl+8p4TFSD/eU9smnzFv2uHDSwvxRgHnOOpbfJwFHQBr0v9sFp2xa26NO7l8b6co44Ohvx 9wm0m2D/3ZgjR1HmOLBtymff6JDcsnWbzgHScv70hhzqzfs/kcBjNwLBrFoKywaL89gCsQViC8QW iC0QWyC2wIe1QNK6isJafujwP9zyCaWlhxd7cuFDOgUwD+lQjZLRGA8RLKfSmxxjTMWbnFQ8+VJp SWOw1vAmp1n+fhxF1giFhM6YsNGwHNKnNkw6fiyFdfKF8klDWEhPWEvJaKxtq5t8kw0/QmoTEAcq Y9TWfCWN29D2VnCFJk0dOkqbVWslbeo0ke//raTV1oggkGdTl24JfRDguAkPyvxwuhT3L5Y+5/bW BVuPM3pI3f46WfmnlTL05qGS36sANMdk65tbZf2T66X2QI207ZInQ25AsNGzeqhMOkbm/uQ9qamo lcPbKiULTpm5/zxXH9TbD+kgp317jBxrOCrzf75ADm49rG99yu2YI2O+O0byumAXBRwodKQc2nZI Vvx+ufS5pI9sn7Zd9q/cD2dSDmIQDUNbJXh4xyJtZ5XM/9l8OKyO6O6Gon6FMubO0+B8cQ/3dLbs WrBLtrwCh9V5PWTDc5ukurRS2vXKl1OxS6r94GLoRWcQFsqg2fD0Bqk/VCtdxnaVwv6FsnflXhn3 3fHqOFIHiNkY9K7IoUKJY8EiE8xPeRqbiAi1rXOfkIaLjm1vbIMuG9S2ed3zZMQdI6TTKZ0gyTcA G6x/bj0cbRulAY6i3E5tZRjs3/307q4NkKkjCc6ihXcvgEOvTJ1oA68ZIAOuGuB08aJUpOpmAOqK PkcKO5HhleQJ6hDDstNSRaaigAt5Wy6HUCcgaitA0YYKVz0jigQDacPEeQxaBQdyEiTJQK1RrDIk 5Df5gN8KJnMCpWOn94kXSkvw3uyJxfXVV14q37vrR/L21Bly2uhTZd++g+o4onOGi9rtpTsQlHew fONrX5LyPRXyyGNPquw5782Dg6NcusMxwt0cU9+ZqUfb/v5vv6exih58+FGZt2ARFs+F0qNnCZwS Zeo4oTPh+9/5hjqM3p0zV5569iUp27VLfvzDH+CI0nB5e9p0efGV1+D8KZcxo0fBaXAQDqcyqa2t k9tuniLXXn0Vp6bel8+/9Ioe8emPxf2e8r1Y/B+UbnAg5CCGy1XY4TES8nT3B+YNF+Z0+jz0lydk 2fKV2PXRW9ohltJ2yN61a4+MOXWkfPfbX1enBZ03Lr7OU3CQ5UjD0QapgPybbrwOu6gGyBNPPyfr EPupa9cucgtgJd27yPIVq+Sff/Er+cxtN8oVl35KbXU/jujRZpdecqE66OhY5X3EedwG8dM46tNn zpEnEaOpA3aKpOM7cO369XLDdddgXC6TfXCW0YlHR0O3bl3l4P6D+L5Ily/ccZsMxZhs2bZdaOeV iIfTAw6cIth6/caNcuhQpZx95kTp1KmTrF69Vjaj33Rk3X7zDXLdNVfKHuh03wMPyRLYoWunzupk 2lZaqs654UOHyle++Dk4g3pINXae/enPj8j69Zuke/eucDjtlv0HDsjXMRcmIphyFYIqP4T5MHvO e+ogGziwn7z48utwwnWR666+Qt7GnNi8eav88G+/I2PhSNm9u1zuvueP0O+QdO7UEfF81snlOPp4 6003wCkHndDXbXB6dOvWBfPwgGTD2feFz94ugwcNUJ6HHn0SMa3maxBnOpg4dqU7dkon2I5zauiQ wW68Of1pY/zj+D/7wkuY39OlGo6mkcOHyc7d+G7dWqo2O+/sSeoIoy3pcDvllBHyf7/zLZ23dPTQ 9vfDBkfgbMrOzEabO+SC88/BuF8v096ZIY89+azs3rNHHsA4ZGVkAHeuFMAhS+cb5/KChUvgWCyV 8ooKmXT6eLnzG/8HjsNcHAk9LA889AgcshtgO4wtHIt0/Hz29pv1PqDeDFr9BOQvgvONcy0rM1O2 Qs9wRxbboKOKjrNaOGcPHDyo9xLvM+5gwnQ7/neFfqH4L4Y4iy0QWyC2QGyB2AKxBWILfOQWOPHD Bp6PSWQf0yB6ivEA4s2BYzjWmWzlQ+eDwVqCmzLGb3wGJw8T5RBndIY3etIwsU5appA+lc5RtHA1 5hZQSaBUgamNUUFTkozEs95aSpVHuhAWlluT0Ro8bNvkMA/LKbxuMZ4EBDUZdHHNX9Dv/6Okf+XL kjbvPeyKwW4TPOimbdoobb7/PUn/0d8LfnIHsV9Ua6BqSvNNwsr6JjIspPJK8Ov5jYOkcmelHNx8 QDLwy2zZnDKZ8f0ZWGAele5wJNXCITT9O9NlH+ID0cHD3UR5Je2EDhAuEHLgBMrvjZ0OvdpJ2865 ztKgK+xTKJ1GdNCFyPpn1smRQ0d00c2B4OK7/mC9rPnLWpn7T3MV1xGOlPLl5TL7h7OlprxGHTHp WW2keGAx5HRUHTe+tFEf6m00Kaey9JAs/+MKWfzrxXBaZUgxnENbXt8q8/5lrhytwxEP9Gn7jO0y /bvTpaq8SjqP6SqH4MCa9y/zZNOLmxE0Gr+I+yke2Zjm0uRtBtupWwPKcwdQ3eE67CSq0/xoHWLN qELY9YAFbPnC3TL9B9PhkKqTjkM7yD7EL5r69alyaPsh51yicws07/7oXcnEcb+ek7DQhENs1v+d IZWId0QHlK7wka2Fs4527zyyk9Tuq5FZd82W8qXloLFbxfSjsrSsv/oxJ8RROJwSRDAjJhRUkSjr DeEumRxiIjKgmpcpx6AnmMcmPEmKNWgyWPdyonmsoBa4PA8Wvo4LuS+HtklrZhsldxd0NA36hz42 DV6O3UPcSdMOuyBWrlmjOyT+/MhjMn/RYrnx+mvkjltvlMkIQvzMcy/KtOkzdfHMNzkuHx1tAABA AElEQVRxET4ci/ILzz9PxuJ40dAhA7HToQIOn93aXm5Otu5QorOpvGKfjDllJGTdIOefc5bMmv2e zJj5rnNUYTdHcXGBbNy4CbtF6tD3Juym6YOdJnmyAbAiOKquvPxS8N6kgbgfffIZPTaXge+KzXAo /Pae+6RTx45yw7VXY+F+rewoLYMTaJWMH3uadMAOGzpl3AzBrjbILsZuo0GD+sNJsFVqqmsRPPsM LMxvgXNguLz46uuyavU63UnEXVO/+vVv4UjKk89g4f7Fz9wuhXDC/O7eP0JemnwaOm1C+1zY07HC qTFt5ixd0M9E/7hTpDccLdzV0Q47RSaj39wh5PSBRhgrfsesW79B/u1Xd0sBjuvdASfORReeL1uw c4WOFzoKHnrkcXn19Tfl4gvOh5PsBrkBY8JdQL+8+7dwIh2QYjgkRgwbCvthh05NtZyJWFO333wj dsS0h/PpJXX8XApHzE1TrtOdP8++8LJUV9dgt06+OtE2YkdOZVUlxniSfBEOmYnjx8kbb0+DM+1x acT3JHfRPAznTJeunSDjWrnlpuvgOCxDzKu3tS8ZcFyMQlBlOidmzJyNnWAVctP118L+o3V3DI9J bcBumNoafG/DbtNnvytTp74jV172KT3qOADOnj3YccMdNA/AqcbdOZ+CU+3Wm25UZxl3F/3qN/+l 8i2A8170eweciEOHD5HbcFzy0osukEVLlsqbkGs/TOidDhurvTlGsBEdPZvgtOqNOTflmqvl4smI 9wMnzhtvTZNRo06RW2+cIqNGwlEJh+liyOOOssOHq+Q/f/d7OMcOymduvRlz4SaM92A42R7WmF+D Bg2CM66j5MKZeA4CsV84+Xw4IPtg7Br1CSUnO1fOPWeSOn/69e0tz7/4mmzYsEn1fOyJp1B/FbY/ C2N7o9xyw3XYNVQuv/zVb9W5yL5w/J9+/gWZfN7Z6uS7GTSD4Iyj45I7XKuxK+xhOD757fXZ227C Pftp3XVVjbnAucn76XjfFXqzuq8V9z0RX2MLxBaILRBbILZAbIHYAh+5BfzDRrR+af7wgWc2Ag1h OR/jWbacmrlHe5aa04ewsHw82aRjCmmszjxsr7V6S7ypfORtMZ3sjiITyJwNWrKyedBS6axu9Jab nNbwRsfcaK1sOLbt3Q1J3rKWZIYwlWfHOJxQvxi3lnzuMjSDHT9NE8+UtHVYrP34R4IVjDRhwZbx nTuhHX4Zvv56wZkGtYwzCBaB3IlBAT4RznnGDx063BlQVVYNYx6TNY+u0eNdZ/zdmZJTlIMdP73l 5etekg3Pb4DDoqvu5hl++3Cpx1GxNQ+tkRLsNBr1uVGI14H4RNkuTgpjRQzA7pc0HGXbMnULHDc8 tsLHcX0kd4OGftRU1Ej/T/eXsd8cp/F96HCa9s1psn/DAbwhLV9yCrHD6NZhMDqObhyoxc6hTdAZ yqf0pbq8Wnqe10uGXjdUHS08xrXqz6ukem+NFPUqkvWPr5djiPsz6adnSmHPIqk7WCdvfOVNObz1 oJtBXl5kYzNUlDsC7lLY9DIWmzsqtT9cpBzcfEiPvXHU1AZwbjGgd/9L+0vbwrbSeXxneXXKq1Kx bK8U9yvG5EiT/av3S+X2wzJoyiDpOqqr9Di/h2yfXooxQufcoOnRvux22XLaN8dKbvu2UnJeibzw 6Rdl57u7pGRsD2ngkQ96NLzuxujMgyvgtJVDe6HaH0L8LaLEuLQkh2SKT8hxoxcZJUGAkiPHlQWt n2AeO7Jm10hOhPFyoIyKdgTWTEQVFbQvbs67Xrsr8Vb3IprL8KTR97OOB6gB53GmXOzA4RvLePzp +Zdeg/OIMWUa9bhLW+D3H9iPuETzNb7R0KGD1P59cCxo7GljtHUex2oHZwd7xOMxfNX9qSNH4PhX Fo4EdZNz4WzKwe6QzjgW88jjT8LZUKrd4o6mvn36aJkLW6rFhTYX81yon3X2meqQ4vfInLnz8Man qdhZVKvH6bbCiVFatkudEjyixB0UdGiUATZx/GmSi10bie8fjDDu06LCIhk5bLg6JIcNGyJnYdcN 2yHu2edfxE6bctVlNtpaunI1HEkTsLNlv37HFBbmy5Kly7EbZbeMw06nIQP765EuOnx4FG85HFQT 4DRbvGSZOnEKCtphwb8HAYjPx26cbnr8icI51zhOdIq+/Mab2I1SLj/69Pdx5KkfnF4d5Ktf/oL0 h1OBTjY6dmjviy+ajDHK1iNfF190vvzHf94j8xcukksunCyjsAMGonDUaxB2EZ2ucndh587CRUvk 1FNO0UDl3PE1b/5CeRcf7sziOIyBc4TfnRzHiRMm6E4/6rBy5Rp1Fn3pC3dgl0on+fpXvqA7u/ia d8ZoysnJkh04ataE+5Q7XE6FEzAvN0/adE6Hs+V6PVZ4BG/o4hGsvugH2+CHibuE9uNYGXf0nInd NZ+942bd6cQjis+99Cp0Gglny3mSnZWtjjaW6QykTSefdw7aGqHOu3b5eXLhuefq8Ue28ehTz2DX zg7XiM7CxD3Fnap0bnLHFh2Q52Eu8qggd5Q9+8IrktM2Vy6AI4bH5Sj3pVde151FFLYKztPpM2bJ NZ++Ek6jSt4uOvc2b96ibzWbct3VeHtgR9w3pXLqqaO0jUzEUNoFRxZtPnrUCOwimqB/hyorK+H0 e1v2w6nGnWJPP/eSOtMu+9RF0hY72/r06SWXIX7YP//i37ETbyHiO42Rp+CgZZB3xhXj8UX+OJCP Y3r4k6Tft7TzHgQMp+4MLj8K4/2tb3xNd3TR0ci/L+7Wd1d+idlfKj8k3mZxFlsgtkBsgdgCsQVi C8QW+DgswCcO/xzi1zLul2vCzbWR1G7ioSV5Z5AJMrwxGdzqlrcGNzzzVBrWmaiYJbZncMKsHuaE p8oi7KTSyTqKKKylzlsjoZIhrDXFrANG21pOOn5sO0dIZ7LNWcR6qh5WT5VhcJVnyqhDhBACwgRE 0+kT5VjXrtLmJ38vadjBgFWnCBYrR3/xb3Js9GgGfQCfWwQoO1tIcgY4gbowwcXNRwS8Bg93sHDh uPUNOHcgl84kxhipWLI3YsrtgIdxOoWw+yUTu3jadsvVN3MpAfVDgQGzGcw2oyBD6cJOqjowT2Zu Ohw8PaUAR8ropOpyWmfJyE6XugP8ZR0JO5Oyi7OwSM2U9LYwLXRVOYFNuBjIKcqWXpN7SdsebXVh 0HUsjrjcu8zF+cFC4MC6A9IJu3K6YDcRF7t5OE5XckZXHJ07hEYgLJCn7bZyoS1y2+dI4QDGaGGQ VsTfqEaMovWU41IH7CJqRJykshllGi+pek+12uYI4j1RdzoIiocWa1DuBb+YJz3P7Y1jaR1l0NUD sSMLMUr0loNCIO42sSt2JWFc0YdOWZ2kbadcqdpd5RrioKniahEHC+uGNzJPEfIoyuicZRNyFO6b ILSZHAMyb25CmtTJV3RzAg9OzVoaikTTKGEMjpdcm7bwIyUhTLwfDO4l+szhQamkvGgBLI6Azpka 7PY4giDUPGK1o3QHjjcdkLQBaepY4Jjy+MpZk87E29K6QQ7mNu5BcjPPQkwbjiHjFDFeDuVz5xLz DOAIysjIQpyiXO0eY9Fkox0uopnopHHHaJw+ygcYHZXsUx4W0KRhvQi8vI/ZHlNhUYEe9aFDhS0y qHD5nr16FI7xeNQmoDfJlE05mYg5xkTHC51JTIyDk4l7scHrtRZHojIz0uEoq4CD7D1QQAoa4Y6o bNAx/hGdZNx5Q8cRA4Ozr7fdMkX+7sc/k7VwdpfAOVQB+BlwiJjOKkQ1cvfLihWrcbyvAPGEBuh3 Ex0Z11x5GZwx2ThitUAdCnQAMX4T4+xkwjEzbPBg1XkN3mJ36cUXqrOGveQxLetPUVGxHo2lw45w /FcHx1HsdOKYchz53UMbZSFne3QMdsPxphF4Q9lC7KhhTCS2fdak07FjZzmcHG9JXX297kyCCNzO 3GmI+QCd6OGjI4axi+iYoeOR45aB435MNrN59Iq7ke7/86OyAsflrrz0Ejlj4niZOeddbW8w4hpx zK2v3LVGhxSPqPFIF9uCeD3W1RZzimNL2+QhNtZR6M9krhCtcJ5DNzq0GKw7A049zkXW89sVwF45 Kot2o8OvI2IT0YHH+ExMaxEbinOC8Zxm46gle804StzhQ4cNf4jgzh7qwaNm3OnGo7WaMPdy0Rce g2QqLoYznZME3687cGSOO6nooOL4u/5myNDBg/ReWrt2vbTHDjY6Kceedip0bac0/F4mPxvkzljG l7rskovlL9id9KOf/BxOtnPlEjgVizCfXbwmbRoXMGhKvh/cyHB0DO/J4iy2QGyB2AKxBWILxBaI LfCRWMCeAt3ThjthZrBmzx8E8EMCe0Ax4hCmq8oU9YwvBdxiNZWWdaawDWs3xDmqBJ3VLSctdUuV b/gW85N1FFEhU8YEpSpJeEhneKO33ORYbnDmqTDWU2HWBnP/5EvWKBl92D5hxkfCEKeMCQBLFJuA 6Epr8SJp89CDkla6Q5qGYxcNHqa5iyj91/8ucuvtcuyyy+FkcXF8qLFz3XgxoSjIrtldrTGF2nbN 0UVYI4JU83hZ5a7KyPnT+6Le0hHxh/jQbcrT4aIJGUt0oiQSWvSOBr6hLDk5bbhQ5s4fOpRs0cId O1xQJGST1pkwEXPH1V2rbsGdkZOuAaypCJtlUG2sNpSEC4HG+kYNWMsFcCOP6iFlIR4S1yNuSFkI 9Xc1hm6OhpyyEUy7G968Nuarp6F/XEi2wU6r9XAKMRgvKFHf9tY2mf+L+dKueztpP6hIBXGHFRcu 7AvfutQVDqvJv7lANr++Scpmlsr6Z9ZLx+Ed5ayfTcKRPjiLQMeFHgOAU4BaDIsf9ssF6GZrgW6q fnKd46Ezh2Amjw6oFBQhIiIW1DARUyReadwllOMgoQ0dlleXWEqZx4A4aCqtui7MR6PsKidSImjH sZ6kHO8kAnuLtqE+lIcLj4y55Bqgw4CBmRnY99Jhg/S4USPGn2+r4oJT+ZT1mAZoZs/orCE3j3JF ycOUnpOPdXo6tRlc8F97h7nCNpMTkU4mc1LySgjnVDRm4DP16fAdBifCTTiKw9hIhyursSPqoC6u P/+ZW/SoJB0iTJTlGtcSZDpg0n1NlSjf61YDZwCdCFfgiBRj6Wi/qA8KDBrN+/j0CeNwNOgxWbx4 OY6hbcWum1Nx9Ot0HPsqlnfnLnAxe/r3RcDk7uD0jdr8Q3ucNXQQaD/ZgGtEd2PxyFoDHGJshw6X MPG4F4MZk5eJOjmLuv4Rxm7oPamdJQQJXyD6zxETgH8KJlblMOcb1Og0yYV3icf//uM396gjiUcQ e/borscSm/BmrmiU0D5Vb4P7mDnhTrJvIVKrSYZgzP7x7/8WO8PehnNorqzALqw7v/k1dY6Qh8G0 mYwlA84XfmGYo03HDP1gOzq/sMOGLfI7xX8tJ+4v2gCE6sYhvRccaQcc+YigPDJSBos2z+px1Dkd tqZDh/GPmEjLHZYdLPC5b5j3BXXRZDZWmAM5yY6Ezifqnxhb8tJxir8T+CPViLl78OBhpeFuoShR HmRTP84o0t+MI5e9cMzxzbenyWPYWbVi5Sr5h7u+rzGLSMzxOMp54Fi1f5ThbEOwV5YqmN5Rg3Eh tkBsgdgCsQViC8QWiC3wQS3Apy6+4sM9ZPDqnof4fIKSXhSoP+Z6pCNzTyV83GGyp5SAwyECnNFG CBRaoiee8qydluqEpaZUWc0XgAk9U3mPW09+0m+d1BRgzmS5qyWuITwss8NUmonGsrICgosZ20CU 0RKMeMNZmTmT0bfWvhJh4RXiFcaLmzIUkUhNeOjPmDVD8DO8HP3hP4jgV+a0WbOk6Wc/kzYP3C/p r74sxy6+RB1FxuUegyEHrdARw3+MU9SA+DprH18nbbFLpmhAe9U2Ox9vZsKRp1FfOBV113bV3ip9 41b0PK9gPlq7Dlo7Uc7FJBYO+k9/OcZCBDl+R8ZkdzKdMuy2k6MLEKDUEtYQ5fDXYSYi8L8N9OZi 65jGmqEswt2v1UpGeaqYa4ftZiEWUCWCXDdi0Wiv7D64DsfOuOnCiydvmKi7k0AS3MCg46KBwbu5 g+oYnEZ801oWHF1GyIXu6odWc4Ukk/5hkuIOl1fKst8tczONcvCPO6Y6jMRboE7torGadry7XWb9 YI4G9h524/DI7pwWSQuUUMFQcShKOuuK5ao/7Qa9qT/han69ZYlVSCDV2Y4sTDb/QjmGUeuQTo3N GvdOeEbNTX5CjuNNXEMbG9Q5C6CgyiU0IcfRWB15pKdqYyIcHIs+dZWx76oZ+VwyLZ2a4PVz0sWH Iruj0DdqYW4dQOwVBlKmU+TCyZNdAF/chwy+y6NcdEBybnC8uJNCe4yFLOXYrR21SSwqumsCOW3s rqClHO8kcj1KcOF2Qhug1lW7g9MRwn8ud30jngG5CaMNufvm85+9Vb79g7/Hm8gO6W4KBvzlG8Pc op18ZlMng1dtByJMf8Kcriy51Atv0TqAwNGHEHB4PI7+0DFFWzCng4aOguE4ztSrVy957uVXsSsn Xb799a9hJ0ehTBw3VmbBCcJdSgxIzYW+cwixR4lEm/TD26m4sF+1di2OiOHYGJxDhDP16N5dGJdn GwJR06nA9pnKyhDYGzvA+vXtw6qzN/KwDzQRx4IO3ijZXEjSIsFPpwWP9a1as1Z69ChRh9cf7n9I Fi1eIv/xbz/DMaqRujuGx8LUql427ch+0eGtY8MG/ZSkHkQ6W6dp7CU6NT7/2dvkTByT+8Hf/Vh3 Kv0Njrdl4Y1tW7duV2bu/mHagSNpDXizGI9lMYUWdO3iTrBGrF++bUevbKqDU8SNv9om4NPmoCfn LlWGUGWkHerw1rndeyrkUxdf6O4F7VAT3qB2xAvHnY25zT7TwcbkpPC+8SQK433Dqduku/O4s2kL nLR0gvHtZkw7cNS6Bm9x64udWYx9xJ2vK3AU8JqrrnBOJQh0toEDETw8Lvoedp5dNPlcHZ/Hn3pW HvjzX+SGKdfocccKHEujLgxy7r6haRynVEI11Sr6HlVF4ktsgdgCsQViC8QWiC0QW+BDWwBPIXxE Ch+I/HMI1zB8nrfEZ2wkPpS4BxN9sorKxCWIHQ0ZSMtkDzghjcGVIOVibTBPlZNC2qxqvGFboZxQ ntE2ExIC3o+jKOQzBfj0aWXiWWbDqcmUdE+dDtsaLbGGs5ywsEPWLmGp7RkdeY0/lQYPwG101CmY KWLiL5xJkwZVPDAfveoaSbv8SmkaOFjSFi6UNMRgODphojThGEca4lsIjklwUqkcbZUXJGSHNu+X 0tnbpRpHmEpnlunbuUZ9ZZTk98xXx0ePc3vJ0nuWStm8Mn0L194Ve2XR3Ys06HXn4Z3wK66pBGE6 cb1s14JrBm/1qmYcHzhiKndUqVPl0FbE8lGnTTaOfrVVY7idQ15P3iH4OJgTxrhC1TsRcBSLldp9 tRqc+sDGg4hnlIU3heVIXnGeqkAe00LdAug464QzXkUPxPfhW9gW371Eep/XW8qX7Zbt72yXtEwu D5Qy0J6M+PgFoyG4wOPixe0UYdkNmbbNBRBZ6ICDzHoE7j5SA4cBZthGvN2Mr5vmMTomLmS3vLZZ Vj+2Rib+YKJ0GNYBO4VwnKcagVdVJmSRVMXTNl62waIvCwD0W8Wpa5OQvCThtHHD4/hDvBNJgT6x 6MiwCPRF5vwysvln7ZLObKM87stN6QI5INJuKEkL87hlG1M2hdDJ4/gjORCUEK9Sm9XB6BK9Ypqc HLhOrHvauUgOxaAvdDPyFd7VeBU5Oq2BbvnGqSoENGZA5+cQo2U1Ajh//jO36Vu/+CV9PuICvTX1 HX3TGd/uxMXq/IWL9Q1YDGhcgzcQ8pXpDD5NBwjHvQ6OCx5dYp2vS2fMFb7qnUd46huOSD2OLPF4 GnGNkNfQUK96kbcWC26ORy3l4juAOtApxV0Q1TgWR6fMsQbA6lEGrgpvduqIMePOF749aiccJ5wD K/D2rmrgeIyqVw8cgcI/NQNwHGLahvJr6qi/a4M6q/51ta5d9gmwc84+Qx598mn5/X0P4lhTLl4Z 318DKr/59jt6VGr0qaeoI4jHph748yNyHgISDx2K7yyM8VlwgLz82utSf6STxpdhm9QjdZ7ynrv4 kgvkjWnT5Z57/wRn71F9u9cuHKXbtGWLXP6pixGb5gJ5Z/psmYkg0AzQXbZzN94S9yKOnw2U0ydO 0P7wTV5HIav+SL2OAXWogZ15P9fBHmyfR2zrMTbMa3xfOZXoGKHNDuGNW+TnfOCxuS997jM4qlag R584V/gqe9IxUHc5XtOem9vLjXNOrs4DHiVsONKo8Y+yEZeKNqVtazGOdKLUYRypx0uvvIEg2kMR FHsKjqkh2DeOavFoVi84Rj518WSZ9e5cHPWbh7fvjdI3mj39/MsycuRwmYi+k59zgIGc+Qa3esw5 HqtjfxpxpK4Bfyt4NI4OFL0raHSfOP8aMA/Z/1rQFx7L13uBOjLItZOFOD94y5vqC705l/kWwBHD Buub/hg/ik7DGthh2vRZcKSW6HE47vDahzfBrV67Tp18PNZWi/b4/VmD+US9mWo57zAmtGUxdp1d dukl8grswR1xjJW1G3Z98pnnpX+//nIGgpLnI17SkCGDcFTvLRwBHIA4UmNl1+49sm7DRvQP9zX0 oyPzTwisPXrUKRobim8+498iBmHnff6zf/2VHtf73p3fkPYI5I5p75K/H5yJ3DWan54kzmILxBaI LRBbILZAbIHYAh/aAnwAT0oA6DovXBNFBPb0ZnmEQIGSgieZqG4tkIdl47U6QAozeEtyiDM86UM5 rIeyqEMqnjRMIZ3VFXG8S+i4OR6d4dj48ZLhTcmwzuc9SyGcMKsbjT0bWp14flgPaUM8UIoz2pCe ZRrI6NOnTJkycejQoaO8l5C8mtwvzFbzOR6i8TO2NHXohAAoiP9TsUfSsGvg2HnnSVNBoSACK1o2 tRwPFzpH4XRZ8/AaBIo+KGWzdsruReX6Zq4hNw6RU754iu66oTOkoGeBHN5xGG8E2yRbXtoi297e Knld8zSodG4HOHjQPvWivFUPrJKSM7tLt/HduL7WRKcOnR6z/262BpTeNXsnXhNfL/tW7JONr23S Od99fIk6qjY+u0EGXjNQCvviiBZS3b46Wf/0eul3aV/pOLgj3hR2EG9cmyHrnlove5dUSP2BI7Jn QblsfGWD5PfIlw6D8VaxtftwfGuHDL9juGQj+DZ1O7jlIGIsbZXhtw/Tt7IVIYg030K2Ea+jL52+ Q45UHpHczjk4dlcjIz43EsG7M9GvwGa+6DIspSGTO4jWPLwasY46Ss9zeqod+Kv1vtX7ZMc7O2Tk F0do8O+sgkzYtwzHyrZI2ewdenysenu19Lmwj3QahTHD8HFHVNls0LyyBZ9NsvO9ndJ7ck8ZDl34 JrTG2kYNKt51fFfpPqFE26ITYO0T66R4ULH0Pr8PFjNuYcVpFmnOWXW8ZHj0p3kKYMejMzLSQA6r oenctE+R3mJ75Mf/FuUEfUoR1VpVjyY2ayeQo+20zM1dIvr67Kef0+NZh/G67aXLVyhsydIVetTn Rjh/roRTgvFsGGelN3a58JXus/DmrbnzF8mc9+ZigVoup2IxykXugzhuVbF3HxaplboTqTteZX7/ g4/ozhguojmnOuO17A8ifs+6tRt08c24M93xCvA/YrcDF7oMvJuDnSl7cI/z1eV8VThfD94XAYYX I2D0iy+/JtWVlerAGD1qlMbrYZDhGjgt+IYti+XyAt4atRbyBvbHq9JLd+iOlRmz3sVujPa644b3 tCXGk9mCt2j9CTqUlZbJocrDOBZWAn3byB8ffAjBo3ehvUrhm7roCKKMFQho/e7c+fLe/AXQYaHG pJkwbow6iSiPzpXpM2fLjdjBMXbMaHUKtEPw77enzdAg3NfiVfTBSLlvR68QdesC51Yx4swsX71a 5s9fCFvPw+6idQi23ElOg7w+GAv2l8e0VmOnz1Q4lXjc86tf+pzuaNqK3Ub3YdfPjh074fyrQoyh zuhXpfzl0aewW+yABtkeMXyYzEVw5Fdfe0PtfghHmvimNO6seuLp53VXGR1T02fMli2Qd+Vll2In 1KXq7ON8WLZiJT6r4QhZq3GbGAtq96496ojqi50+f8Y4L1mxHM69WsRq2icMLM4+zYbT56lnX9Aj gQex44tBp/mWtenYJVoK+/PtYgyU/rnbb8GRNgQ1R1/3IaYTY0KtQkyiqbAhnX5f+/LnZMjgQZi/ VfqaegYN5xveOLf79+srDz6MeEfQj45G2nQEjizTUcXEuUhn0ON4Wx7nczXedEcnYR/sBHsCr5Rf tmylOj4Z46g9Ygj91x8e0HlQiXnOuEAMnl2Co4MbN23RsZmrYzRf5zTHuxvi6XF85i9YBJrN+oa3 bdtKZRYce7vwBjM64Pr376MOtD/hHqF9DuC+6Y3+ngVnEPtEvXRs35mhzqWvfumzMhJ9YMwwBh3n /cJA5PMWLJY9iJnFoNiMb0QHVA84q1559U28zW2LLEFfFsKhO3nyuepk5O4wzg0GWr8Ub5JjsPnw fvDTMM5iC8QWiC0QWyC2QGyB2AIfnwX0UZwLI3ySUuIJmc/U69evX/b444/PBUni4T3ZMURu4gyf WjY8c0shjcGYhzKoGOvMrYxilAxnPC3RkJhwS2HZYK3mJ0tsdJaHClG4Kcqy0bDMZHXmfEqme8Mc NoTZB0VNxBnM6EKYySExHV0hLelCHqsbj9XbPP/889+66qqrbuevs5pI4XulxbBHSuABmExpeMDF T8TS1KULHnB5/CdIqHANqDKwFahszk44IZyDIT0X8YEQA6egd4G+XYztuQV/mlThjVwVqyrUcZOD WD4dhraXgj5w5rTxRBQIxwmdHYV9C4HjG2aoExuDUwW/+u+GQ4cOGU5v0+EYvAKFvQulw5D2+mr5 PYv2SMdRHXH0ra0qfaTmiOyevxvtddCA0/XV9VI+vxxOKcb6cHKQoRXEQEFMnwI4ixjcef+6/dJt QjfJzHEBY2sqsBjDTqiu47tIdn6O7Fu/DzT74KDBEGHEi6DzknuXqEPnhpk3SE4B4jMltkq5fqhG ajnXJ/R317s7EUMoT4oHFGt/6RSrwivt963aJ93hMMvMzdR4SBXL9iBQdiUcV9lSPLBIDm09LEUD YcMSLEIoHW0d2IwjO5sPqPMrG0f/OqLP+XDS8c1n3DWx671dUtCrQN9Kx/5yx8ruubuwkyoXsY8Q DyZyFquiSRe2Qc21MS0koYOK718AabEYCTRsM4AhkvNAvBabsTUDKH8zKJhtDn1UckJFuVCmA4XB c2lrOge4iGabmdkZcIp0kG7YhZDF40QAquMQ41EGp8mWbdt1ocvAuIzTw10fVXA0cdHMRSqdiTzq VYIg12uwsOfimoNDJwGPrTG+DQNlM3WFA4OxetbA2VGNXRvcodYZb4vijpCysp2604LxVgb176eL Z76enr8zMNDyCLx+vQILY75piwOfieDYp4wcJs+9+Apisjwrd/7NVxAMur++lWoL+vrv/3G3xg/6 6Y/uQn/cniv2l05lLprXM0AxdqRQVzov8tvlyRo4tOqx84rxaHpC954lPXRH1GY4UHgciK8771Dc HgGqu+ubwHjMk+N1GA4uBmUePHCAdOzUQe9B7oCis6ugIB+vMu/vvz9ohUSyeUB70x50YO1GIG4Q 65jQ1u0RA4djwh08W3FEia9qz22bI93hnOgNPINRHzx0UPvD3SXsX0/AGVuITgu+oYx/eBnLiU4j 7kbiHOBRuJGwaSUcFpdffYNMxK6o226eovdmQWE7yO6lAaKpLXeFrcKOs4q9FdIBgZ579+6JN8NV IKbVQSnGG+QGwEG3bv0GdSA2wdY5kD1k8AB1SpTBbny7HXfx0LnFsaVzcSNeUX8Mzpsc7NQq6d5V 6FjSY7PoKx2SdLRUYp4xWDWdi70xHsRzV9BqBHmms5B2YfDs/v36YOzWyWHMPX6PFuOI1VDswqFd zcb8kYLOFh4lZP/pAOoPvTdDDzpqOKe64EeIbnB4rlq9Vncm8fuPuvXp3Ud3Im3DvbAd868Wjqbi 9kUa9JvByvlWPzreVmL+84hcIcY8F3rTQcQdTjwOPRhzk0G416xbr04r3oP9oHdX3He0pd5nsAuD q3fD3zoes6MTjPrz7+Ym3G8cf+4g5bE93nv7sbuWb9Wj7VZDLo+Q8tgbg8WzbwzKzZ1x8+jchO3H jjlVdVBHESYu7wfOX01mKKvHeWyB2AKxBWILxBaILRBb4GOxAJ8++ODhrvYswuek55577qFrrrnm 10DRhxF+yJBaD2FWTs3Bpo0Zr9VJZ58QxjJpLbGcUNgUT8AoI0ypdcO1Bjd84pksgrRcoDKhQqQy G4YcqTCrt5QbzBw7VreccJbDTyrMHD+ksbLRtJbTuZT+zDPPfAuDflvkKAJQE02Gh/lomugWNIdy VxBgIaoeHtvSE6JR5mLgCHb4vPP1aeq4cV1wi13i+LCvD8YhH5qk44S7WBiHh5+WEp0XJiMVr0ey OL9Shp3tkYdwHl/Q2BnsIpPCIDOJBvPPTOCo9GrtUnc+0HMBGM0CL0d/MQf4UOkhfd18UZ9Clc0d PTvn7JL6ynrpfUHvRBykQH5LRbUTZFM/S9q+9gM2IhgfxLDVRTOPN1CHZnYiHXWE/eg0YlBvtTFg lixAcVJbaAcHZKTb6G4y8e8m6mLI6Lnkw6haVeVHVW2PwgN8gjKplCRHWbyypAqKSUwnqiTJgZCW 5vFJ6EabJe4HazTsV1g2fKi2xzcj4xzisUJHS05dJFJVzCsXGwVI3GNmY53DoONODDob+CYnOnEo gYtufkhjcjgP6AzgNLVEfESnnODGnOG9RzpT09HxnqVe7jilOwLptGEbLgaNu6eMjg6mv7nze7IU u6JeePpRF2AaxPv27ZNbP/sVHB07U37wnW9iHrpjX6oXu4l2CDP9+RVDB4O9CYw6sD/EOxo4N3Gs ifZjgGm97yhHe2C8zmkGsE/uviV/mJLmHxFkAEmiHTiv0D6PMhnMZNA5QD3a4C1imZluLPT+BH1o Z7t9aUP2S/sDu/Mr1O4iwng8bA8cUxdefo1cd/VVctf374R8OpbYdzrXlEH1oHy2zbfT8UOnvQUK 53cTv+usq85+iMXjx9NwhPN+Jz0DOfMNZZTFt+ZpAt6EsK90fPFoIY8rMrkfCrA7yI+dAnFpae7p GBmBtzH7YIkgzin3A4BB3ThEtlR1eH/Qihwk57RhvzkPeD9QZfaLiXyu7+7vSUIO5hO+kwVx5/SF Cei/0dnfgqM8tof+0qnHByUmk2vzgHjalHiOJZ2RbJrOo2P4UmaMOmpCPOWQn3o3wMEJNoUxd9ry Sp1chqtPzQCGiPPYArEFYgvEFogtEFsgtsAHsED4bBGWk0UFjqL/BIY7P0jMnA9wLIe52xmSgIV1 ozMesEb8xDERZ3g+HjGl4ggjDVNLeeKxyuFNjtGm4p2kVq4nG6MoZLcG2KA1Tnxq3XChYiYnhLHM p9iQ33iNPqxb2fKQj2WrW24ymLunZUcTwSmIj68KVqlkdYkPvRFIC3jMxQLEFmRGx9xJwBWL8jaI m1NyVokeF9MH+kgtPkg7CNtzSuIhHTzczWCqORoukl0ih6NhK3yo57wxyVSS3IBHHJ5RYSiT3tNg Se2boa76X4l1EZAkh20lNNCSyqEhscBoRQ6F9TjaQw6XHpbyxeV63CwzL0MGXNdfA3hjvae6ONFs g7oh0+1VbEV7iypz6xPg+M9ekowiuChxCVSgdbqSnnDHy35HEkFCqPXJja23WNBvswPprH0eu7NF kmvTYa2suR8+a0G5XePappOVxKEVN/ccnH1jD5gox/UEhZOQ49r1rTPzcrQE/gikhdASpEgkJ8Fd 1dA0lE+qhlNSIXr8DCUdOiNiPSprY9Ed7qUCz/bxKnQuVtFLjUelPG683fwmwPOj5MaFb1TCQp07 G3DPcJ2tb/PD+GXA+afzw2iRE+ZkYJy9Ui5gtrMyeWnjdPL6ftnin45E7S+u5KUzgbsurG82HzIQ 7J0d5EziNByBYNIzZ8/Vt3KdPekMOBEaZfGSZXoc6ZqrLg/mEfkomH1wb4qirirfe9C464KbCgm3 bwNrNxNBlplYN9uQ2UmlIwA6RROIbRDTPIXzT7F+HrtOM/waHESQy/6ZbUwHOnDS091r1h1MlUVj HA+3+4Ti1C0GVAYNpGpAMeij8fFhU/aa9zBjQPG4E3dRMSbSjp07dacS5Wk/IUv7RycQnCXccUZe +y6g89B007nF9oBnsvFnO268Afdy2b9s7IRqSnGIkI9zhBLY19wM9BUVa0NthzrHiS1RDoeOifTU VlUAk7WvSG9jDQCNMnF8WyVZ+f1o88zaoS0d1tFSBucD2+NDDGcCd48epV1UCCkYLwv2YIkX1r0c 3nuqJ4jpGEvo6OxMhnQoko44TeRjXUVQDJLplY2dWrSB3q/QOx3/HI6OzXTJxoeGUW7qRl784/1r crTvSkMskreNq5Ce2sYptkBsgdgCsQViC8QWiC3w0VsgWoO08rCB50Zi7DHIclOEOD5tE84nGHMm oagplZ7AkMfqIZ09CdlTfIhTobgQZnoxtxTSGjyEkc74jKfV/P04iqwRy61xE26NGpx0LNvH6Ain AYyOcDMEyyHc6sbD3OQSxxTSh22FcEfp2tGfvfHrJuVocoWE6EQD7sFWiQJpESNhvsLFSvQYjN7w tfODrx+sUNeKUzTijQoQok/2CVmuR4DrE7SDc4qyShz+W7NBgQuS4GE+pPVlMqkcL4HNRmvHiCYh R9tROB/UIZtlnyI5ACodL0yg0SIWcY01DVKDgNgNVTg6k4MAv50Qa6YdFhYUpHIdiyoBZVL1SZIL Uq0rH0qUoQCP8KIMpFXSagKUwpkMRkIKCOS0bmP0Hz+o6+4OsvlEURTrbIFK0IRz9BFp1LSgJQJd LSqR1NMSk4D7kscRE8kxGHkjiRwPNxdNDtsy0kTBNAgbc9L9iAKBFDXmiqajQwJGwdo4LjqADqNt JxSI5BCkYK+QW1T6Pqkck5wsJ7Qxe6dy0LhyRrJczx2nE+aG19GTyfR3O1u8WtoJL5WCnVQgyRCp rt0kX4LC660gfoVhjmAH05VXXArHQabwTVkLFi7C0aj2GsvmxuuvwdE3xtqKXD7K44yI9iGHWqiO vk/UWSXbzRHYWPvAtgNaCiQoAhuOMJb58f1FSZPS4hLamAiVc8zf+44UV99nraOs9gjml5dDtNnY WcbkgICCI6VZduPDv8P7cQxr9nvz5WzEyeHuopkz58i1V1+pRwHVNiRn0n44ThXnYU4fp6Vq5ccr YgAd6aOZ4vE0ib6JjwXa2KdECXhWInleDvVgAk7RLOufd68g++ZxFHtcG5ssaGfzzPRmv0wiG9I5 4ppVnbRt6K6j05IcDzM5NgPNDnQaOZLEWLppQslBipQgPR10xHkaMLiRdJColkBbdxxdCA+aMHEm WfvqaUOyuBxbILZAbIHYArEFYgvEFvhgFogellp9Pja5eHbiU0jwBKQYq9sTCut85GUelok3GhQ1 tSTPcMyNPmzDYEZnOKufCJ9Kl8pv+KT8/TiKWhJoHU0S6iukD5PVTY7VQxqWU2Wybp415pZS6Qgn jB8m42M74UdxOEYQtc+CY3IgI3YPyu5xN4Ex8RFTxJuQwybwSy+cIsqdiqA6fsGnCwcVSUoqGshX Kbx4Ac3kBCjg3BrmJOREcsOCEx7qY1YJqVzZFNHeqXYJGsOh/3itfW4nviWNvy6bfimUSh7KSfAn KJ0mxDTH+gVoMwQAH7GNqUUzG6OZ5BFzihxvHNWhF4255w7kUIL11ElzNQUHuETDCftRmi31nBwT laAx2ZE8r4LLaM/mfdL+NEMAENm4ZdtEbWjBCWhx4edlJ9uGmkIr4LyKXpyXkwJ1SGsj1MdzB3JI ZXZwHK7mZCRwiSYS9qO01mxMZyLjyky57tMaD4bH5Pj2rHaIN9QOgbP5F8QW64k+sRQs8hMIhX80 NkYvTzBWSc36WaD2hxbJyVkseaw8N1Amh1Tvx8Y8clWIWD43TrkaX/hoGTdbJnas2C4Yp1JiHJJ1 Qs037LLUeUzoB7Ox623Y2geTQ/3NNk6ak/zXtDFtQGeO9am1eWw0Ya+1fEIbuxGPGogEoEU//5Ll OFuaPhE5BKhdmiMSJHEptkBsgdgCsQViC8QWiC3woSyQeD5Jfq51T0zHER0+0vFpxZxEBrcnGOb8 MBnO1dzV6AzWEq3B2Ib5REhPeYYzOZantmVw8p10OllHUaiICW8JRlyomClvcKtbbrJaqofyw3LI 0xIf8SHceC1X/jBeBBFhiupawKM0pVkZBT5cs2qNWG58hot2DnjeBAckYBEE94kuhlzbjlsdESYw Uso9zjsnBekScyRJjj6IO2altUDYgZyoqAXSunZtrqnTNJDjyECjXrOIyovxOrPGojbNfvliIIdH hMIU0agIXMBr/bOlTETjGVlXcp/7njqYIkKOj97GqoZf7PiuYijQpreNU9M0dDVnCYM5/RI2Nhrk ga08lUe6sdeKQ6CYamNHaq14xsQ4KAJyqLSVVcbJzWNrz3j96KqwpPmnDXt9I11NG+YOZ+N8/Hns W6Gc/0k2Zi/RwXZ4K2I+Pmpudh0psUvEDwNgCTO5Mf34bAzbQ6/oO+cTOI85L7IRG6hv795qL3fh 7hrsf4kM6eeXp2jpu8J9L3x0Nk66vbXd1LGy7+NPvo1tQkbm9HZkPfpOA5HZkOj3Z2Nvd20gkgop gW0C+foNBLIT2zjUiFrFKbZAbIHYArEFYgvEFogt8EEtwOcKPqcEzyd82FRw8nOQ9xnYQw3z1GQ4 /T04BUmcfQzFVmxlHPISn0prMOamNMtMrFuiPJMbwg1v7TBnstzVWrnyCfdkUqpi5GkJZvCWFGyt nZbkWGeMhzStyWyJNoSZIUIYF3MGV8FuyWwga8rXDQybcqHFZBQsG9opycnlIIlpxnoyh5NjnJTi 5QRkfjmSwKlcEiT4kuTwaRsoxSqZ0SboVVh0ITzE+TLkJKxjJA5HiUnJ2Lnw9CmiCeQQ9r/Zxone mxUsJybE+nJgG6VUsMNF9gtFsPz/k43RXbUGjcF5jZq3HMqpiZgQ68sfg43Z8snMYzqJeSyHXzP2 Ia9paffDX++7wr67EraJ9PmE2Vi/mtU5RAeR/d2LtE0YUefEx/99TPO41sPRcxD3vW7w/zk2pvYn M49pbPs7ZnawnjsZTs77mcfN5ABgMLbmUgKSwHpUnMUWiC0QWyC2QGyB2AKxBT6UBex5I/XZzQk1 LGt4LuVDCT8h2B5UQpzBlI0Xn1J5KSeVtjU5FNESrRcdZcZvuSFSeQ0e9sVgzfKTdRSRMWyIdeuk NZSap/IYP3PSGn24Egh5iDcewo2eZSaTYfJagpmMMCddKNcLIsg97mq4WqUIRRObqDtlHI+Sgtsp hJrOJy9NkY7C8Vjj9khsqjm40aiSlKOsBj2BHG4ZMRYK0MQ+GdDkuNxdXa9IalhuPdHdJ04ArmzX 2YalBCU4ADgZOaRxC46Pycbe5tYH09PVeXUQXo0GRfheAFGUQR1das3VcW3FxsqVJCfi0Lad1KDt 2MbROJjFI4v5yWc24zhxkLSuF0dp1nS1v848pibHncdeaadN1CPVP+qDyvByUr8r/prz2Gtl1oz0 O2kbg7OVeQzR/o4zNwNpbcQSYxm1bXK8/RjI3iSkfh97E0XyQ7nk8SJ0fqmc92Vj0zwxgqojhCa+ K+xHINeS9cFqVrcvUcIjGPVjRYkD20Q0J7aNY3atWZuWU65r68RyTt7GTl+T+99hY2gQp9gCsQVi C8QWiC0QWyC2wEdiAXsus+cnV8e1hTUIHEVEp/orTA/i+HGiTpyTj7TksWQyTE6IMxrLU3kJD/mt bvQmk3XTMbVstM3y9+MoSlXaGgtzlsO68RBmZVPYaFvTgfCQh8qb7NbKhg/bSKVlvVkigzEp0lYj QZOqDFpI0BlXQpxCvBaaRXISyuvyAEguGBLLEScjNIayUqBSeaFac7I8KiFHf313ckituriqtyQj f3jHUYoc0jp9yGgLIces7biiHxDKYUpcw/YcFOikbUkJfRJ4K1nu1URV9dE2knqRgHgWzWiosM6m CeB/sP81bKw20ktsYw7SxzGPP2k21snIS3SP+0lIEOGoMndQlhRKjCaFeBbNPtZ5jBb4H43q/RDc 4/ZFG2moarp5bNpTP36MpiU5rleJq4oBl+XEUAaTwnCxevRd4YiTTGW0jtPdzU6G547kkNIEOGqt Ro14tK8b2Nw1Vk/0MtQPvCRQ8QlKtmK1ZnKC7z+jIX0ox2nrsEajMFys3sw2KsRdjN9yE8/8hHIc kwoyWq2gZWvb+kRhDkbKgJEMrBpDSt3AJsfqjsnJiWAmR8ERlBLjFFsgtkBsgdgCsQViC8QW+Mgs wKcMfvT5BIXjPdf6HUXh0oZ6uIcYJ8YeWghLepohIVJIa2WHSfCnyjd8S7m1ZzjWU2GGC3PTLYQd t/x+lAoFsSHraKhYawoYrcmwOnP7mJwQZ/SpOINbHvKQNpXe8KS39oxX8yQmVGx544jAEkgkLiHQ HoEd5fHlBE1SAIjdbjbCnRxz0YRyFJuy6FB2XgI57hdip6q5PZPlQG/IsWUAcSZH++v1CXvkxVMF ZwIygcupoxXXD+JBHNomtBK5SO05dG3917MxW2eKbZwYgOSxMts4O51orIxKTarEnCcufVQ2Tsix eWNzx80/4h2E1/+Oeazt4pI8j6GMU0uVCu+H923jQA5lfhgb69iokSAHDin3XXFiG1tnqMqJbKxt xJfYArEFYgvEFogtEFsgtkBsgdgCn3ALRM/VwfOxe+51z8emvn9TOqk8pWLCp3QCInEpdMQZrS3P QzkmN+QnT1hPpTF3AemYjNbasbrDJvAhreGOm39QRxH5WlKGMFPO8pYUMF7DhXyEhXgrW248LeVG Y21b3XKTnRYGs24mCNwmwDGAXQEmxpaowHLRlSrAyFPkJMhMDiDwrmjNyzEMZXKDQSTbEIR7QcRH iXI8glmIimhYUIQjNDkO5jlMH89EaERHmFW8nECcl+1sQ3iiRMaUBDkmihilVYBKNIhj+tA2tm67 sbIW2NwHsrHX3eRQyeSxUAgviT4qsef432hj9FV758fKbPOBbQxp5DU5asuw4hoj+GO1MeVzbrZJ ww4bvx1VYTwq1QZK+LlAGFNCLVPW3QWKbGkeA8F+pspx9LyaHIV4+cm2ORkbJ8mJviuS5bCFDzOP nYbxNbZAbIHYArEFYgvEFogtEFsgtsD/BAsEz9m2kMbTtj6be/WPuTcykZAfQzEPmKOywfTx3Isw npb8LqQ3uPGSLbXMusGM3uQaPKwTZnXKs2S0Vj9ubg0dlwjI1IZY58caYx4qFOKAapZS5YUEqXKO R0u+EM8yP6aX4UIYeVJSsufQkI4pnCwmLqCIJhVhCaePUThoWAsgnld33kRynOq8akwM5viktkwp UYp4QRURBnI8ockJlq6KSWEBLFmO6hI1ltCHciJexxVROTjlGMX/IhtHvUzY2FbYZuPEFHTEZoVo Zn6ibAwdozlEff8685iOlzZwtvBDp0vCDxNZS43n6NrgWxT/2iQcNnxtunt1upIl5qIbFu1HCPwg 85jtZWSkS2VVlRypq1dnEdtsaGiQysqqyFbUOPl+SO6DatiSjRMTQkmac3mI79MH/64wOdaC5WzW Caf+H24eaxfiS2yB2AKxBWILxBaILRBbILZAbIH/ARY43vNxkvrhgzMRfHgmzHIrExemkM/KxkM6 wgzOnDh+wpRKE9ZJZ/whn8kivjU4ccdNGcfFJpDWAHNThlhTwrZSpdJZPSHJlUxOiGc5FR7CyBnS s21zdBnc8lBH4zNdWW/y3kGWIdQ7PMhtVMhdNVmUoRN8xuQgjtovtD2KC+BoNwIIuNij/8QFRwWt 7jQg8THfplODVxWBS3o6QrriNUr8uKQYpy63AXARqrlhdUmpeIWARNtExWEcneulHz6Kbk2Oa86R Qysa3sX2MjlAkQY4d7yN7VAvh/+gNm6TwVC2kNlou+zMOeVso/Jpy4QaUcl1hzqA9ng2BonZJmLW AqU6a9lYtWZj1SpJDlu3RDnvz8amT/JYUZ72SgU77XBlAemD2tjJ0RF1giDJaf8R2hiSE5pDV0wW Olvq6o9gt45rNjsnWzLS0zEWBPDD+8HRHTlyRIk4/XNB16ZNusxfuFiONjbK2DGnar3pI7YxtprK 6jVr5c2335Gt27bLTVOulTGnjpInnn5OVqxaLZ06dJCvfvnzkpWZifnFkXJWc71J6S+ASW8ofN82 hoATzWNtw1nOdHC5G2G1f/hdEdnY6Ur9dShwsfnnMCbNjYm24IQBDZgyGU2cxxaILRBbILZAbIHY ArEFYgvEFvikW4APsO7pPWmd55+PW3jA1adfMNkDsXWQ9VQYcYSdKJEmXECwHNZTZRjO4KybjLBs MGs/tW7w4+Yn6ygyIaYc66kKGo3lxPNjTiSDM7eOpMJYD+WyTlpzCLFuiXSGS5VnMozW6KyedPSM SE0mJQIYIpFz4Wrjp2S6okrAQkquttRBBO2PVB6Ro3VHJT03XbLbZWm8aHW0qAMDnYaINukZog4s 3eLmuwDEsSNHZdeinZLfO1/ySwq8s8gpGeljcrwCzboAfOjMSOhJSt8WzdmaHCNDfrThKHiw7M1M D8Q0SUP9UaFjpw2dWkqRJNnRBnISzMkl6xNtV7F8L5pqkg4jOmmeSqkr2mRgVDM51ie3+qUVTAlP ij6zPxwDDmciuUqqnMBaCVKWPkIbaxvN9GEj1jo1dh+DRKqzQGAEQDklRX0CXMlOMI9T2KNqJMfP m1Zt7BUyG3OnzuYtW+XJZ56Hs6heGhuPymWXXCjnnXOWNMD5Q8cLByQdu3femjZd3n5nhmTi/qAz 6dabpkjXLp3lt/f+QQ4frpL7771bioqKcF8EljiJeazUuCSPObvm5KjDE0fOaupqZfrMOXLuOZNg qybJyMyQ5StWSVEh70X7emtu7Mg2kPjfYeNokFzr6BX7BU3MNt7GzTT/gPM40V5cii0QWyC2QGyB 2AKxBWILxBaILfBJtoB7Am7t+ThFcz5E88MHfzL6h2ots24wWxgApMngzFtKBreccpms7mruSpi1 a/DUOmla422J3+S0mLfkgGmJMGzQOnAiOlM0tQOs26clGQY7EY111ugtJ58llo0u7EPT0aNHQzqQ uWkSmTYJG7BiceWOo3gfm9IFeLbsYXR00Kmy8oGV8saX3pBXbn1F3vryG7L64TXYCXHUOZFIDrqG miOy+dWNUll2GMdw/LBADhfWjbUN8u5P3pOdc3ZiZ1G6E892tJRoW5uNOqAEAS2WuCAIF8WO3uQk 8uPJSUtPk43PbpAFv1wgTUex4wPEPDZUd7BeZv1gpuxZVK6OIurWXM7xbOz0dVf2CXbOSJNVD62U FQ+s0HZCCifc9z3RkSSS5PuEiho6KniY20mRahsnnbQnYWMV2bKNE3LYvmvbXRNyI4wHJY9VSOc4 nZj3a+NQDsv4qDhcNA/xpqqH+WapZ3IKeUwOKQIGL5uZ2Zg747p27iynjT5VZs1+T15/a6q88tqb usuojU4q52SlE+m1N9+WqdNmyLRZs2XMqFHSETt5ePxrwtjT5MzTx8N5lONHyNp0dnG1UD+nlVFR RdMnHGPTnY6ifn17y6SJE+XosaO4Z49Jdna2XHjeOdhN1FHqjzSoKaiuJS0C4EBsGx8H9I0n6+Nw HhbIUXmoE2T7u1wbHhgSsKy8yfOYWhBsLVIOv2uciD/AiAAAQABJREFUTPIYBkXT2ctJnn9OvKNW AmvQNRu1AHCcYgvEFogtEFsgtkBsgdgCsQViC3yCLRA+HyeelP3jtD3qev257m8hJR6iPVtAQ5w1 YXmA1mJKK/6R2ikTymY5rKfKYT1VVosKB3Sp9C3JVFhrglIZwk5a51NpWD+ZhulpO9l0PHmm08kY rxlN80G3fSa+ySQOwhycTpHd5Xtk7fr1urgyuOuQZ/JZGnxJqx5eJe/907vYGdFGepxZgu04aTL7 H2fL+ifWCZ0uFEvnT2NNozqDKlbsw/GbDNDDIcQzOVjAHTvaJIc2H5T6Q4iRgn/ctUN5acGGHjNo GnbzEKc7e5Cr2lz1IZGXclW24lgnLTD4JCdfD7qkbeNm2Q1n0LY3tuuuKOrHNo7WNMjGpzbJ4a10 dHFJimEGvI1vT/WFOhRHOZq04vrj+oQ+0yaamKdJ1a4qqS6rVjj1dv0yGk/qdfQ15UuUrRQSpfCD RLEKdjhVTYEhn8lK5ldaQ2klgddqdGEhTJ7Og5UsxTaOmnSeVhf3oNT/ditZe5RwcvM4kpskx0G9 NaJMoRSdlKzNEGj6ENYcryIUDAcqXs9eWFQgp40ZpTt0+vfpI/MXLJTSHTskXb+Q09QZtGnTFtm6 vVR69eohPH42BvSF2MmTA+fQTVOuk8/edotkZ2GHHpyW6Zg7PKLJXXlH8dHYR9gRpNpgnjLWEOdr I5y3dIzw+JrOXxCk855DXXf0wcY8AseUm5sree3yQEY5ztHSrl07yczKUBlKhAvlabwk5HQCs69s T/lQSaNMOLfoBDNHM3noMFPnL8puTBOyeJ80oh90HJPGmZTOWRc3CQV8N7CfqHsHMtvljj72R51b 5CcMNG1AAwe52h4gJGcTym9saNSZQ/10iChIC0qo/dGppxcHS1wDwgQwLsUWiC0QWyC2QGyB2AKx BWILxBb4xFlAH3N5OYkUhqsJyMOH35SnZn1sNpjlAesJi6FslsP6CZlBEPaMvKk6pNZblfl+jp6Z ohRuCnD1xNWhdSBs2GBsPFTS4CEtacJkOMuJC/ncqs3BDJ7KT17jJ01Ix3K4qo0UbMIClguwpAQp 6ZlwzPAfcO/Nmy9LlqyQf/rJD9ECm8CuHxyXYRPk1EbhLKnZXSPL7l4mXUd3lbN+fJZkFWZJ7cE6 mfatabLkt8uk32X9JKNtppQuKpWqnVVyYN1BKZ+7W3LaZcsxLDYLBxRLQa92FI+EBSYWgAe2HJA9 S/dAn3TpOqGL5LTP1cUmG22TmSbVu6qBr5AjaIf8nUZ1Ah+1SpP6w3XY8VOBcpPyFQ0ukt1o79C2 Q2gnX3qe0xNCfN/ZCXxoChbZMe6wYPlYwzFprGN/FQMUFrwoNmDnE28mSuBboliuWLkH8g9LVk6m dB7XWXKKc9A3N2Voy4b6RqlYskcqtx+W7MIc6XRaZ8nr0hYxibg7wtm7KVOktqJW+33k8BHpOLyD FA0sVn3QVJTYrtPIXSOEakQY9YcdNfdYgCM+kmAhzLUwi4rwZC4DpUcSb5OQdOy/2ooIPyciuUkF L9Bgxkcw5cBm0fzzclQZW6BTPgi1ygYDOeSzqnrxiA8TeU2Oh0dy1CYJuSbHchOTqKsiBqZgXz45 G7fRftPhkamOngvOP0fuue8BmT1nnvTv1w+eRx5vFJk6fYb07tFDsrCTZ+u2HZKVlQmHUQPuwQWy cPESKenWVa6/9tPq8NxRtktefPl1qdhbIfWIf9Svd2+54bpPCx07jIc09Z05snjJcmk82qhOm8nn ni1jRo8Cb4Zs3bpNXn3jbfDuRdPHZOKEcUI8nTv6neBmhOqkscLYfYyPmhR2Zqyld+fOlkWLl0pt bR0cLw0q46ILzlMnTz2cXPPmvyuLlq6QDsXF0qtnD5kzd54cPnRYRp96ilx15WWSiz6qfTEH3pk1 R+YvWoog2oelqKBIrrjsYhk0cIAcw/dTXW2tvDl1uqxCnCQ6koqLCuWiyefLkMED9Z7bvn2HvDNj lqxeux7H9K6TU0aMkG1wtr0FnvUbN8rn77hVBg8aqP1avnK1vPHmVKmsrtbvsLFjRssVl16kTjQ9 GotuRmMeFdQM7mIwNUQAj4uxBWILxBaILRBbILZAbIHYArEFPqkW4DNsUgKACyN9vndrKqL95hI+ 6TJZ7mruSkmhX8Gejom1suWEmQyDhfVQTkjLMpPxuFrylXIMb2VSGCwsW5uEtZq41v2wiY1bsnKo kOFS2zLaUFGD2Rrc5JDGOhziDG9tMG9JXghXPJwYSfq4JR8smbq4Bid3KczBAnba9Jm6EKupqZWK ffvU6stWrJQXX3ld4RwHk0PnzMGth+TA5gMy5NahUgjHRnb7HOkwqIMMvXGo7F+/Tw7vqMSxskZZ 9G+LZMndS+Ro7VHZ8NwGmfvPc/GZJ7vn74TDxe1s4K6fsrllMuuumUo74wczZPp3Z0jd/jrVOQ2O rL0r98nbX31b5v/LfFnx51VwSE2Vpb9bqs4H7hiqKa+RpX9YKjPvmgX578nCf18AGe9A3mIc8VqN Rag3nWYwLf5rkRePosGZeNOkZ2N3EnZh6G6FLL8DytPRSbTkN0vkTeiz+D8Wy6wfzpZp33wH/T6A 3UHuzVXc3bDo3xcK+7L60TUy7+dzZepX3pZDGw+qU0xdDpBPvWf/aJYs+NcFMu9f5skbX3hTdi/c rTROG3f1TWtFg5LpCKHqnSPO9RT0yXcq5CMoqmvBeuzleBihWuRFC8h8DoimZHwoB2hFAob/SXQt zD/rhvFo2yYukMNGbf41tSRHtTJzeKeSl2O2sbYiOZ7HMm0ukkNmL+AD27hJHTMTxo+V7t27ypvT 3pHqmhqdUwcOHpSZc96TC+BsYQBrjVuE9o4cqdcdfS+9/JrMnb9I539tbb387t77ZMHCRTLutNHS s3s3efnVN+TgwUOKf/SJp+W//vAn6dS5I3YxueNuv/7t76Wurg5Oou3y05//UnbvLgfvaYh3VCB3 /+5evd+1q9Zps7l2Gxbzdc7/V197Q376z/8q7fLy5PSJ46QazhzKWLtuve4QrEc7a+C4Id0TTz8r 782dL3ltc3V34n/94X6ZCccQnVLcjffsi6/I7//0ZxxvK5bTx42XdXDu/Pzffi17KirUKXzvfQ/K gw89KiUl3WXcmDGyfXuZ/Piffi5Ll69QGYcrK2XDxs3y6utvyZ7yfWrL6uoq2GwDjve9Jfv2H1DY 7j0V8otf/ifk7pUzJozHn7gmtRnjRYUpaX7aeJOA/U+ZfyFfXI4tEFsgtkBsgdgCsQViC8QWiC3w ibQAn2H11I1/oFcnER9tE06iFvTWVQA5U3D2VOyFRVijs5wIozVYyGNl4li2OvmYCLePAnydZdKm 8qU6nkh30inJWXKSXKHCVMZSqLQpafhUHHkM15I8dsp0I94+LckJ+Sk3rBu9tWX4JhzlCGFREwkg p4lLXAhux5GYe+67X35zz326uONiiovPX/zybuGv8vbruzXPfStVO6v1qFRRPwTahaPR7chpgtOo UBdl1burJbsgS8bdNU7GfHuMZORkyMBPD5Qz//EMmfjjidJtYjd1QNF5dayhSfYsLJe+l/eTs34x SYbdPkw2vbBJdszcrse7mhDwetGvF0nN3lqZ+A8T5ZyfnSO9L+qjzpq9q+DUwo2QV9JOzrjrDOmM XTvbZ5XKjullcsqXRsoZPzlTht4yBBrD5JEBooJ1CfZwFuHxsOqKaln9l9Wy6tGV+tnw7Ho5imDW ztGGAMB7amT7tG3S6/yecvbPsXPjztFSOq1U1v5lrTqX2FTVjipZds8y0PSSs396toz7wXhpxG6R vav2ejloGn6yCuyQKuxVpHaZ8LcT5DB2H615ZLUfHeqUfEtT8yZuWbHOBF3xTL5PNsIRZdRHpdMZ GDBHxagQ2cbkBhgHYhMfVE5CPSfLy2nWhvVTqcgUMibmsYGbWpXjmnHXUAYhH5ON0Qx3UXXt0knO OfMMWbF8laxZs1534SxeskzqaurkTDgxuMtH9ceOmrZt8+QC7PZhvKD6I3VweqTJvgP7saNnvhTA yXMecFdefqmcddbp0javLd5QtkYefPhRGTF8mFx9xWUy6fQJMmzYYOnQoQjzrI089PgTUordSDdc f7WcNWmCXHf1VbjvjsrTz7+o/XYeISrqLEOPoPeLmUmlFo6gbnB0MeD12ZPOkEsunKwy127YqHpz V9NFF5yvjt+OHTvKLTddL7feOEW++sXPySE4s9hXptLSMvnTg49AvyFyxeWfknPPnSSXXjRZd1Ax gDYd0489+bRMmHCaXIW+nAf8Z26/Ucrh7Ln/wb9INXYG9e/XV06fMBa2QQD9Juf06dunr0wYf5rq 6QJwi+6iWrp8pfRHHKZzzj5Trr7qMrzVbaTee87R6vvLjNPhZOZxwBIXYwvEFogtEFsgtkBsgdgC sQViC3wiLcDn2hOtF0HCzQ8pyVYEBNuCyWCWp7BEdAY3PtbJw3rIa/UQRlrjS80NR3iosMkhnsna crUTXN/v0bNQWVPQmmDdlAlzw1uuyw1PS1iqHINZWybL4MwtWWdDGYRZG6QjLhWflhzM2ppw+ygc MXcHOXgjdr5ccP7Z0rFjBwTVnY4jIUukFruKMhGD5BosrsaNHe2cH0nji1GC44THwdJz3K4gKsOU kQ2zQ0M6VtIzM6Tr+G7SdlsuHD5pOFJVJCWn99CjMqSlRvzH41pdx3eXwVcOlvS8dMnrlidLf7tU 9q7eL0OuRSyf/bVSOmuHDLyinxT3w7Es/CuZVCLLcMRt96Jd0m10N8nMzZQuo7tIQc920nioQUZ8 frgMumKwpGX5mRlajY0jmWVYpkwmOs5q99XK2sfWapmr5oYaxD7h29DAQKdYTlG2TPrpJMnMw6vD sZAvSiuSbMD2r9mvx2foUOJROtrgIHYQNdY3SPcJ3aWwX6Hk8ngaY68gfhIXtXld28rwzwyXth3b wmgi655cK3uW79E4NImxsunideZiXrVXxRXoaJP7pB3CxXDWR4UnRDoy1o3QF1NJIrR6pX0tlchJ i66kSiVRTm0PFx9jKpnI7V6L2ouksRBKS8xjI+HOp1S+1LrRJvLEbjnCSE/H54eysW+Uchhj53wc P3v8qedk2oyZ6rB48+1pOBo2Utq3L9axZq+oO2P/0NmSmY0ziagTlo+dPF27dsOOosXyx/sfkosv Ol/uuPlGHMsqludeeEXKsXvmwvPPVVk8JvrVL30OTps0HBOrkfnzF8uRunp56dU31SfEudkAx+vu XeV6zE37GBoIePbcfT/wlNxRueSiC2Q8gmvzmNpbU9/BEbPl1FZqq2uQuzhknTp20nhMRYX50qd3 L8XzHigoyMcRsyqlW71mnWwvLZXepT3kz488rp2r2LtPpwCP1m3cvFWPiZ139lnSAXZhX4YPHSoj hw2VhUuWyq7du2VA//76Fjh+65jaeXCYFRUWJsYLuPbF7RX2IoKIt8vPl7PPOkNuvP5ajW90zP7G HG8ec0CsAdU+vsQWiC0QWyC2QGyB2AKxBWILxBb4pFuACwg+xAYPs76Y+mjLdS9SKtg6SC6mUBgd NaxbThqjQ1FTWA95QzgJDcey4QizZDDWrZyKD2WEZZPRav5+HEUmxBqgMqEiIZ5l4ozWcMyNLzUP aVLLJotwa9NglGOyQjzLlgwf8hgOAukeIMqWfoZybgOulbjgLMSCbs+efTjOchiOjKOys3w3YqZk 6VuY6AzhitXkUEKbbDg6EIi6CTF9VG1qgUSHCkMhtcFxMVXMtHLoFq/cxVM4qFCy8rOwMG2UrIJs jXnUgCDSTA04wtZY2YDjabukunw2GsFSD3F+MtrBGVPL9n3jKBGe0zFXep7XC/gMOG7gsILnKjp6 RoE+JbjQA+qJRCdOu+75Mh47gNogVhIX1tXlVYivVC5paMo5D3hUbqdse20r7JAO51i6OpcY30V1 wavM23ZuCxnj4PhZL1O/OU1yO+RJn4t7ytBbh2k7vNB++T3zJa9TW9WPx93yuuTJwS04UqTGc+KU FheDUQctE+31Jg1T2CcFEA+gz9yYKIIXjCgEKM/7keN5EiycGV5OJNsVQn1YNh7mxyBH6xHC5LiZ FooinYOGEknh57ErRuPo6AlMTklyUohUDa/Lh7WxGhWyOD6NmFMjsYtm0KABMmP2HN2Rw516d333 W84ZSW9QUkJPyQsYHTUFBYXy7a9/We7HkaxnnntJZr87T3cIXX3l5ThStkedSZ3hXGIiTy/EPeJR r81btsn+Awe07YnYcUOnMLs8HLpkZ+Wo06SJk5pMRGhixSWW+AekBsflXnztddm5Y6f0hhOoI5w4 jNOVoIQI3PQcCYWxP7hvyMvA07YjceeuXbqbirt/uDOIMYgYqPsM7IIaAts8COdRHgJsFyPOkX7f QA770a1rZ6mqRJwzfDcx6e5FvWEjpTGZeHOyfQfjG92+d+f/kceffFbu+9NDMgPH3+645Sa0NQ6k fiYdbx4HorXR+BJbILZAbIHYArEFYgvEFogtEFvgE28Be4h160V9NjdQiu54piYmfKQPKYizhXZL dORribc1Wso2HPlYtkSPlckynOWkYdnwrDOZLFdz+FSY4Zrl78dRZA1b3kwYAMRZh0I6g4U8ISzk C+GkZ93wzK1MHMst7INpBjeZHEj9oT08ekYhTpQTHTbAxTDftvX448/KS4hFNBrBb3v07Cab8cv+ 2ZMmabyRVavXyre+8VXJyuQOB5PWpDtgGhF3qLK0SrqM7IrjUNhhhH9VqHNK5XbK8e0mmleHE9Xh Ii9YHLPKWEm60HRNYJFppiE9WZoQkLpE+kzGAtO/2WnEF0dIcX/sPMBik4msFJvTPluy2+FtUYRg /nMJ61JCZlQCStUJ+LPhsOoyrmu0O6pya6XuAGIrtNm2qVtl4S8W6BG5bqd3l0wE7WawbpyF0fa5 aObOqlM+P0q6n1Giu4r2LC+XRf+5WPlHf300u6QNRw41ryKPo+kamHifiGoGowDtBC7mVQBIafUS MHt4JIcFTXDuhHIiOyXkmG0MRVYus5PdQmFNlfLSnRzymv6qg8ogiadlpsnJUajByAsc+VzLzhlg cgilNkphPK7moAlm1B2vSfNCKUKLpqMCCCOv8uPyfm1svBDBIM0FBQUyGUep7sPRq9/c83vsmOkg I0YO16Z0nlp7zNE5Z2P0DEoxblGvXr3kru/fiSDXS+Xhx56Se/7wR41X1L64ULeNlmG3DY90OVtA XfC1zc2RTDg7OW9PRwBrbi+lk8XeRMZ7TpFszRkYlH5sUdfddQhe/Zv/+gMCRW+Sb37tyxpUeueu 3Tiq+mDCfL6v5FRzqRR2BJ8g5WNnD4N1d+nSWfWhE4ztUQ86hAry86QG7dXX1bIDEedBBMXOys5C jKTcCKZGChrQt7ypNEfC+EwTxo2VwYMHycyZc+QvTz4l9/7xfjkFNs/Pb6f2oZ3pmE6kE8zjBGFc ii0QWyC2QGyB2AKxBWILxBaILfCJtkDSWiZ4bjalsS7g07o9vhvY6oZj3S22HW1YNlrjTXn6b9ao 4Y/H1xLO+NhOKt7aZm46h/QhPiq35GSJkCdROF4DVJAfS2H5eHypONats6EMkxvmpG2J3mDG3xQe PTOgqcu6wjyCv653x9uVGMPjjptvkL59+mBBlo+3LV0pt+MX+P79++DoGU3JZlzirpviQUU45pUv qx5eKVV7qzSIc2X5YVmN+DqFfQulqA+OiMFxQja+xUwDUq+qwLGXBo3N4xaCUAIzmJKjAMVeL9eS q+TijWG5OJpVW45YKTjC1ee8Pmi/WIM+1x5gwGv0CRdS87gL20vPxSvB+VptdTh5adw9oYlt+oaQ ac9wIcRDdccEY7zwXxICNAxaXX+oXgZdN1j6XdBX2vXIk9oDWNyiLdUD9tq7pkIW37MYu5tyZMiU ITLuO2PxdrQsKXt3p+64UjWcR8D1H42wbdWFSMU5mK6ZIwSRoPTEdKA5Jtcn1V8vpLPkAM3lAB/K UfJkOUnNKjFZkqGuFWvjODb2zblGo6Yde3T10tmENuPq1iUbN6t7lQKNIoyDeVWdOGfPqCktfDw2 puNCnatQMCMdRxRh/LPPmiRtEbj6vbkLZdKZE/RoFFVg0HQm7uBjysSRTU5b8tCBsgUBqe9FDLE+ vfvIpZdcJFddeom+JW0/AmKfhqOhubnZ8uzzL2nAah5dS8cOvTIc5eKxLx7dWrpshb4RrW3btpKH Y2x00DD4NPNMOIBpATqMtW28qY03KFWi/owL9O68BXDi5MuZk06XHj1KEJAbcx1xjnikjon8Gdg5 xPnFnUaRIwq60wPlvj9Ehg0dJPmIZ8Q3sDEoNXXhsbE9OH5WWrYTjq8xkNYks9+br3LZdzqlFuOo 21C89aykpEThWZlZqu+WbaXaBwIpjykDtmOag5hOzyMg+FA4im6ccq2MGjlCNm3Zqm+F27dvP46+ PSbLli9XGytDdHHzJ62l74qIJi7EFogtEFsgtkBsgdgCsQViC8QW+CRbgIsJ6IdFkK4XVVW3zjOt /dEzq1ruV09W1SWVe0B2IJZT6xFxUGiJzvisDcvJZjiWQ3iII7w1HOmYUvEOmnI92R1FFBZ6QlhP 7ViK6GYKhDypyoWdTpUT1k1GCAvLrckhPIn3/7H3JkCXXcWZ4PmrSipJJbTvEgi0IVax22DMZsCY xTZ7uz3e6Y72xHR7pmdiOmIiuiN6ImamYzqG9tgYY7s9dmOwQZjVgI3BYBsQwhgQ+yYhiUVoX0pS qfZ/8ss837l5z7vv/e8vIdcr+A569+TJ/DJPnu/d9+o/yb335Td9nIydHCwsuAFXwBws+NlobErx /7QfZRu+bfb8nFNPOaU84xlPK/t27/UrC7zeiIkwmxWXjj19R3n8bzzefs3rH8oH/8UHy0kXnlRu s187u/mzN5Wn/oenlWNOtWfx2BUMgB976nHl3B87p3z1LV8t992825/nc+FLLywP/vEHe+oHdtst ZvYA7byNx0/L46fq0Y4+cbs/x+czv/mZ8uF/8+Fy/NnHl5u/cJP/YthFP3OxF4N23b6rfOWPvlKu +8try13X7ixX/PsrvHj16Nc8qpx4/olWnMFaSWFmpVKHXa41PFfowG5c6YBWr/Wwxe/ftd9vk4Hu zMefYb+Ktq184j9+opxyySl+a9qenXviOUZm9w3+0dvK1e+6unz3498t5zz53HLfrbvKbismnfu0 s60ygNhr5cDeg/bCumMeZALdfsyPfOy9ct5TupGtHavO60nOHEooYUV0NCwXbzfAfNsxGpoB6htb OzNNxDFtsFPnjcEQxq2R0EKOG45xMFduGEWcQVvjDgqT4jz2tbk54kAMDgYwLNCRG0Zv3DwAHOPz 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 L/tgcPIjNkUw/bvfeO6duTr3tEbP0oc+eWvh2OMerKxXPvL0exP+1IoR+eCb75j9H/ByydHDqMBa nrgxcWdAT5zYePYyVweW+Go2yUHLAuv9rFc+6vSjZlGLmd8zvme8ejfEjb4z1qv3L98xuCww39uu Vz7y9KNm9Tmov/Iep2fu5T6JwXUl3neDQ1+8vazlGRtfzQaemp/pu/3suf/KR55+6SXmmf6WGa/u sMJXs8n7p9aZgsGxXvnI0y9rMSKfv23G3iWjed5tNZvkoGOBOdOuVz7y9LOefPi/Wn/23yv0ZZ/e qzG4ruT2meDQF5981BvVWBNXs0kOOpZ83jdW1isfefpZe+6s/8YZc35W38/aGcHxzmLJyVyevtZE lnX6kOsBx15/V//yjPPO5s6EmLkz7FndM2Yix+qZgYI5O/tG+rxv9MWIrKlOnNx3tXFroktf6szd Wzx7O23rslaXMX3J+aBhZS9/8ZP3m7juae9we/+U8x59v2f3vlzvDvRl858GucfqkrkXnBWPL8DB m/ul5D765T/Ys59acaNaIhjc7GWeHPLcr3vWRJbeR/V46u++xgfjfTb5nGlwmHTgqSXvO8HJtfNJ Lbz8Q4R6tdIzzwM/fazhXF3pl/lOn+eZeCuflS755DmnyX/nk9qcTe5x5tnc9Jm0Z1j6Zb7Tre6o ZuWz0iWfPOekZ8adT2pzNrlHepmnZ3PTR/4zUb9nfPI80156dm+lSz55zqk9qHc+qc075R6TZ2LN TZ/kXc3TL/OdfnVHNSuflS755DknPTPufFKbs8k90mvKm5s+E/8MS7/Md7rVHdWsfFa65JPnnPTM uPNJ7Wdnk+dh38/6eOb0y9z+FFd3lLvyWemST55z0jPjzie1n51Nnod906d7ea5VnprMV3zw1R3V XPWZ+Fe0q/3R3jN2qu9jzjXz96xHdWXGztt/P36oz7M+w6ve4/Q5O8Xqjur6jOKrmPzMV3z3by61 73HmK58V3r45m+6tPCY8faZ+Yt4xscyfPUfyM0/PzFf7o31mxpMPHqzsmRsPxsenZ9dDhvWktyeX OPk01rortfvr5V65t7nc5qBlxix9zvY+2C96crDvWM/s47DUEPsPUHt59tbZk6uPA89+av0isp+Y XPrmxF4TBkeNfHm5Bz1fBPvyM7ZX9jpP/9Z13dqsJx/1xuRnnv324Tv2D5zkpf5qvtPvepP/M/y+ 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 InqXfaN4xuylNjm/NP+dvyjiYjmAvGji5kZ5Uz1h7tM9B944Nb8FzCWHyEdtcsjlJS5/0oDxWXHU 2Mc3c2qXXKN4RrW5Z/bJdz25+hBZ/tbUvYn5eSPVQy6wfkV5K9PH/SYe2OSTmF7p4zmSl3nuJdeY PXO1cMztGXc9OWqJrM/OOH1W5wb3435vmw4P/bKV2OTjvsnLPL3kGrNnrhaOuT3jridHLZE1zRgc r9V5ch/90PTSQ373s558EtPLc6MFYyUv86P7/qnmPXpUaj3vxN319NSHyPqdM/YsnCNzalZi3M37 vTV/1uTJy1xexmlu9tW6z8Td9doHP9afPmPOx+Ju3u8N+FmTO5vOqXtNc5Ojj/tM3F2vfe4ZO5FH /C/OmNv7LhF9h5yKPWcDnrm8jGoSM1frPhN312sf/Fi/4s8Kz0b0435vm/58eCfKzJPTXuljL7WZ p4+5GuuMauGYZ59815Orlsi6Z3zMgaez2c1x19NJn92M8WEZj+rxzH30e3QfOnh+3C95qc08OZ7h qz566med0TPAMc8++a4nVy2RNb3HnsN4MB/P3Ee/R3c9Y3R6quOXM5xBHB975OJGMJbnl2t9dA+d WGup1cmXa01UN/UmXmLmqTUn6m2U/23Rw3zbhsNGfYYcDHS/KPLsmbdevn10ruTKs0fMfuKd+1+B A598mk+tt3zjxJ2w1NsHw+fZtdNNvT6r9cTNs8hL7Gqe3p/1eVbHnix0rjyH2JW40029Pqv1xM39 5SWW+a6f3jte+nX+jA4uK39+qPMc1FfXTjf1+qzWEzfPIC+xzLOfOZz07l567PJndHBZ3zHjY6f3 zz6rdc7hveKo5E09sOxnTi+9u0f/ynpGJzf3ZY+ur+z7GZ376299tr88dR2zn3mfsXvts6qf0cnt O3W92qvxZ3Xur4/1mY88dR2znzm89O5e+6zqZ3Ryc9+V7xX8WR/3b+8zn5VOn+xnTj+9u6f+LD6j k5v7nvnv+s/6uH97nvmsdPpkP3P7xl1PzhSf0ck9u9O0z4Q96+P+7XXms9Lpk/3M7Rt3PTlTfEYn d7qTvWmPFTb5rLjgqz3OfFq3q7uX59n1ktf5Mzq5053stf+unnx2/FVv50PPXyCt9Hn2zJu/68Ht PrVrd0Y5RDUTf+efHuby9dQf714TNzl9HvniuUfqviXnLxO/ezkAh2vNuRyWZ8xanhEOHjuf5PZf pNDTTw7YtPytJly/yInnWeilt7r0kaOP5zDC5cPSy5710T2/gzq91FnnucFWdfs0b5px7rXL03vn 03umJ7306XriJp++tdH9rNMj8+xnrqc+alZ1asmbt5sN3s13P2J673x2HvTSp+vcjz2mvnqjmq7F jdnPnD51n3tVp7Z11LvZsFf6Zk4vvXc+rUPropc+XcsjfueM2a/Pvarz/JnjQb2bDZz0zZxe+u18 WofWRS99upZHZA9W8rNe4W+i4ZH8zKX2uVd1ajP3bLvZwEnfzNUTWTuf1h2K40kvz9V1cl81Y8+T +2bunvLO6tRmjo56Nxs4uU/m9NJv59M6tC566dO1POJqxnLSB6xreZ4n+5k3b1WLpzZz+tS72cDx PJ1Tp9/OJz3Q5eqZdp3cv3XGuztxv5zPKod3z5gpvH/vrP+VGU/3yJ+ztwH8fPiuZD9zufJWtXhq M6dPfeaT/VWO1+49pr9aeOa5uk7d7s+KSZe+6eM9Vn258qxX/MQzR0fdZ2uOPHGiefYmH7nyO6JH 59+NreVRp4d3zj4clt+xfLCJB+7qvv72ifrJlUM0tydf3N8RgP+25WF+2wFi4zwLOQMSIzJI4490 XPJtUqePuLH54h3dN/lizc06+Z4/+2D5ciY/ebv8yjl2env6GMU7Zn+6U/PP6vRr7q73DFefz55X vXt+1af99DVm/7N76UVMv8RXvRV/hafPZ8+78+4z72p9jCtu9j975vROv8TJp96Erbj6qfnsedXr 99moj3Hlk/3Pnjm90y/xVb7ir3B87H32vOpXZ7qK62Nc6bL/2TOnd/olvspX/BWOj70r55Wb+09Y 9q/m+hhXuuxfOfPKRzz9xHZxxV/heNm7cl65eYYJy/7VXB/jSnfWX+lW+OQ3YepXvRWOzt6rZnzF x/Nm9BzG7GV+1k/ulVw/45lmxVvh+Nm7Mhu5eY7Grvik3lwfo3jHs37zr9ZXfVe8Fc7+9q7MRm6e u7ErPqk318co3vGs3/yr9VXfFW+Fs7+9K7ORm+du7IpP6s31MYp3POs3/5n6s2d3D/VGcHOiufxV lEdkcef8fYH9t+aPhzzrjMnN2e00qSfP/clZnOe3L3+D+dsP8uMADNRhGz2XNbGXA/XLSY661MgD oz9xki/PqL/a5HoWMTmtEYfHi9B99cTkJm6udlWLE5s79XwxV9w8b98391BvbK64Mc9iTm/Xn/ZT m/HM50o//Xb57rz27hl/nKCzsdO1OPFK755xTuzIe25dp+JK70+aMWffnTn7Ox69r/bZy3XmJa+j uv/6jJ1DzqexrnfcqXfPOKdy5D3TrlNxpffMjNPb3D062jfu+vbgZq42o32jvazJs5ZjzP7EmzC1 HXdcex3bg+9ATveo7XVsLn0/qZt4jWU97ZO+estLrXnyJ96Eqe2449rr2B6vnrH+7mttXOHdTx75 rlZrTH7qsm9+Fie9Gnsd7RvpyxHLaK9jcsjbR/7EayxrdUZ6kzdY/z1In+SnT/bNz+KkV2Ovo30j fTliGe11TA755DPNQB81HfWRlzFzdJM/OGvlY2/SqoEz9Rvf/bNOvRFvcj7m+JHrQ/1b1+/+H7Oe Lp/DcpgOceJPmPzUyxOzJvKFtCb7nXNGlzpqz26Us4ornjjnWv0yL/dd+See98bftfNJnvxV3Pmg 8aW/6pm89BY3rs4jvuKB4+t3Lz9j7pv4Kofvyn13PslTu4o7HzSvmvFXfPLsv3rGudduNv/ajPOu r5pxzgj/aeW+3U9997re+cD9yvuX3q/y8W7Ouu9ztdYH/j3jxz9zmYezuWfMNN7P5n6Pj5lMz3xv pn5j8hu/Z9wTedTOzPjozNmK9ytmvPr34/lk79E85+/+89izGN+f9GO14t0z/jgrEWdmFF/FFe+e 8WpiD3w1uwfjyFY8cP9d7srPuHz99e1o/yzql3r/jDBOHvKn3oRNXs96TL4vxa58AS/d8KIZg3JY mfdQu9YeDT21RvrkueDJBafPHwQTjz4r920etZ/2SS55+uDLyvN4rtQdrOO5wtNHPlz5va+4XKNn SX5yE0eTPT2I6aOmudT21BBZydXr6Lzvia18sg/HPc3tX43TWTxrngE/cfLs6ZHYits+1K700St9 4FHbo848uXrBYWXvQN5r0yf74O5pbv9qnM4ynQe/xPNMeiS24rZPnjN99EoftfaoM0+uXvpnTyy1 mcvVgzpz9VejWvn4uYeYMfE8kx6JqSE2nj7Na6/mUqdf5snVR//siaU2c7npYW5PD2JqEzdXa43H 5EM/8fTVIzH9iI2nT/Paq7nU6Zd5cvXRP3tiGSef9DCffFKbnuTqkoPH5AM/8dRMPvBdyQVLHznE 9FHTXOrsmaNPrl7grOwdyPvn5KNHxsknte9d39/JHh6TD/3E0zfPoE/G5LZP89or91SrHz3z9CHX R7x9xI3pI1ePjPbUEVObuD319vCYfOgnnr56JKbfFNMn++mjV3LBqLNnnj7k4NlLn+bKF5erhxHc ntzWNq62zzL5oF3hk0/u1fkVH8+UXDDq7Jn3HuDZS5/mUk9cPYx4TD6pTW91RnsrH/qTP7geq73g 5Lrio1dywaizZ57+5ODZS5/myheXq4cR3J7c1jauts8y+aBd4ZNP7tX5zgeufuQT1/PSM4ebK3F4 /nJOTvqaE/3A8xxGMLnkudQZ6clNvbi9qQabVt6p+/bStzm/rfZwv+0AJxufnY9+DnaqecH0sU80 zyPgNfXA8OEXa3KMP6C31TXgtMcOfzOqx8qjaG8lXJZn6Zi9znc1Pq7cA8zzdbRHTP0Kb721/PYQ J2ZP3RSbmx720Lnw3fmc9fDRoz277juoJeY+qbNHTP0KTx/Ppc4e2lzgLHnkcqfYXPlElvse1aMW N8qVl3vZy7OZdy/rvoM9Yvt3L2tylnu2r3fIKD+5byZP+kx76q2feyQ37+e54MvVo3vtkXvY08c9 5PjnpXvYb51766N+haeP5+090uNZH8+np17i1PbE8hx5vuSST732gMfS86getXuD3zM+ppMzuWf8 eFeYTs6G2vcte2K+cx2Tq4cce+0Bzkpe1uLE+z1mMu+/q1e9x/rcM/76jHHo9/x+j+d/rh3Tnns9 Q7nMktX9e8bzHI9pzb2eodxXztg98NbXfewlDubfpf27ud+tuq7B0T3ro1/H9MnetG9jWa988Exe 7pF532nnl7pvz//E/+rZagj8Q25avow9dLkrnf2MeoFlTo2PLzZ1r+TvXhJ47ZN8+unV+1yt9fHl M6YeTuJdy83zJJ8+tf8CIl88a3P16sSJ7DPNhh78PAfYau180NC/6rXaI33yTs1nH/tqspaf5+k+ dfbVNK9x+v3+43PP+P13wtz+tRmv3g3u2ot3go8aY/KyD961XHAX71mu75px7nmWc97VzwNa+nkn MFfPaXU/+PqoMeolZ8KTI0/snrGT+NqMe+75nf8pM+4zPm5+3P1vfI+90z3jx7f56j8r7hk/Zmv2 qhm3z69+j/0uvUfXZzh9zvw3/Vnxyhnj5cyI078f2//RfltdN04f31z/4oynv+flnc1zxmA9G33E 5Wet1y7ik+9x+uR3Mn1/2WePrt0XTz9g7mHfCJ6ra3qTz3S29Pkj8r/pF0UO1C/AeGWQ+QU1n157 N8c6/1DpF0uPxNNbD6L4Kia3c/dByyeXNTH/gTVx0XlWdell7n7WzbXuPcTVEd2PfOqDM2N7K37i aHJ53vyu6FOrk5O6zuV6FvvWxO+cMefJ2XAez0Lu8tzUUx88fVb8xNHkoseaZnx0Hj9T1lN0jz4n NT387xm/n1zO3O/hPeOonOl/ccY5D++fmLnzy5nSy1qOmow949TB+5ff45zDvzBjv0vu1d/57ntN XebOJ2cz9eHhby/5ehBXuD1inzPrvhN8V++dOjj00YN/5c9j99Hvh93/1m5PdZAzV5yzmfrw8LeX fD2IK9wesc+ZNfrV6r1Th4Y+evCzGcPzrPr+gN6WtX7ixN2e6uBlTs1yP/KpD46/veTTc61w+vRY fc6s5RzM98/eO3Uw6aMHf9WM0+eH7Yez556eD17m1N5L3EgvF7g9NObJWeFw3Kdnk7Wc9DR3P/dI HRz69H7HjNnb8/1I3+XU3kuOkV6u9PGe2SdPvH3cp2eTtZz2pdbPPVJnn96vmnHen/1YYJ7H8701 6uG9dhwkuYe+aaWPXGLyyK2ba21E28vz6dEzhm+PmF5q4ZjLBctln5gecLpO3R+Ve4k/6lAXDuO5 p+EjX+FprYdfcH5p9pJvvvPuXtd6EK/05BjVET1v9uzzDy/wqZc6+NP9wVn0/AFS99b48dCbyMp+ 9sTFDvbjKZ4+YrKyNt9FdOwrRx8jOCs5yc0+vOx1fdaDn/tQ56L3p8yYc+VZV3fL+TzDSW56sG/2 qHN1L+v0STz13zFj99udZ+r1ma0nbu7h9wRmnhE8PazhTMt97WXdPnIy4vur32P3250ne97BmHpn BWaes1Fz5pd9vNSR9+pe1u3TWup7xsdUcm49p+5lfc/4/bu+m032VjOWY4RHzsqfpQN5PO/3+JhF zu0xnfc9OUa6f9uMfRe8g9E7W+e9xK5wkpsezsr99TKq66iOuNLae8U/8/x5mPbKs7knMZccMHOj PGsii73E3oCoJ05ys482e3oZ7XVUR5zurd7ZTLz0tJ9Y3vFZH/c36kttbmwOOCv3P5D32uaknx7N 0Sejuo5w9OEs06LP3xefeY97H+vdjN17dx594GbuHPXomNyp59+Hu7eqV7Nqvvsas59Y5nCu+qff b83/pv9E0TSofDGnPhhf0pU18XxBjTuffhlW3GkfubuenF3knH1Wa+NObw8uiz88+v9i0j5dvwnr wb3yDyPa6jqW9FPlbo702POzC61n1sP6qm+eYZqxvkb9raf4r82YO+b36Az+1Bn7nXhO66/EvH/7 5DvUvSu1c8w9PLu9M588w3e8x57Hc1p/Jeb92yfv170rtXPMPTy7vTOfPMM944/Tco7PzDi5OF6Z cXL8Dj+e5kDo+10RXa3rWt5nYt8pPfLsiV/NOScr9xAzHozHM7lq5TqbB/vI8pxym2NNX58/Ycae 67PR++bcxIztnVx6OT9nA45ebnJWvmhY9PV51Yxz/7dNfu6T5xN/dfS+7oW/mLH3TC69PL+zAUcv NzkrXzQs+vpMM9bX+CY6eeT+UlPvOe29OuZeeFOzjEf1ePZ58vzORr3c5Kx83YF++iSuT0b7uyg/ OewDzjIe1eufuRfuzsDYO/Z5PD/8nE36ykn/9rVun8Rz7/SX09F91RnhpT7x9sh6xcOLRd/8Dfjk A5/cK3MtX7GPXt8Wp4t82+Yv2mh3B3rTFwPGD8fUm47VPlnn/uT528uu25v91ROvnid9PqtLD3P3 f2Y2ajNe9cn7q5+wvCP5K2acnu69is9wVx7i3u+rnveMnejHeM94PZOPnc8h94w/zs2ZfOx8Dfnq nxXsztnO/lyfzj9heR7y/PPYvcCnlX7tQ+9spf6M+0w/z/KMLrmc7V+a8atn/SfNePqu+r5d93ft O26UTzxbyVV/prnS/9Nn3HdwDo1TZ88ZiRHPVnLVn2mu9O8ZP6a0m7G9B/t69qtm3L7TGRuj/syf 6942/XL/zOVOUb0xOROW/V1+df+dB/v3bNp3OmNjk0/v25ruW6/2V0+8utrrii415s/seWWPb+X8 7f+JomlYfDEucyN45lOtNqMa40o3vQxoxFOvR/bB4DYP/GzpQzRH84yX2txrdfbk9D78wdFrutd0 ttRO/as+7r+7k5yrES/3N0c7nXPlOXHvGT+m5VyJ5nSnuT1U77OJ+1+fcc7EuRLNmWBy3k/0YzVx 7xk/5uRcic7KPzserOezz8zY/XO3yWfi/Wl/HucZyZ1p4nnPz+TTbCaf3rPryac5+H51xu1J3Zhn me7RmFp97hl/nKezydndM35Mw3fogTx+VhNLXuZw7hnnpI78/rPi40xEpvfHHnH6+UyN+T3jnNr7 3BmJdv2rZ6x/fkecBRyMyIdzyf2Rnq68R+anwiLkvp6lKH9f2cP++27w8cT55fiiGP0Sib4M9nAS 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 A0YymbOws3fIAAAAAElFTkSuQmCC --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Disposition: inline; filename="Screen Shot 2020-06-19 at 12.26.54 PM 1.png" Content-Type: image/png; name="Screen Shot 2020-06-19 at 12.26.54 PM 1.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAA6MAAAUACAYAAACyPoRmAAAAAXNSR0IArs4c6QAAAJZlWElmTU0A KgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAA AAAAAACQAAAAAQAAAJAAAAABAASShgAHAAAAEgAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAA6Og AwAEAAAAAQAABQAAAAAAQVNDSUkAAABTY3JlZW5zaG90Ek58EgAAAAlwSFlzAAAWJQAAFiUBSVIk 8AAAAqlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6 bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJk ZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDov L25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9u cy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVu c2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjEy NTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ MTcyNjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0 NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlm ZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllS ZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1w bWV0YT4KDbkJCgAAQABJREFUeAHs/IF2m0nSpGnO7N7/Jc/s8iX0JE2hAEllV1ZmVcHPAdzd3MzC vwBIpfRX9//1f73idQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQOvG3jdwOsGXjfwuoHXDbxu4HUDrxt43cDrBl438LqB1w28buB1A68beN3A 6wZeN/C6gdcNvG7gdQP/DTfwf3/xEOblrZ/JcJqv5iv+qfuK/11/Pn/Wn/6rvP7PuCfn7E+deXnr k6fHqV+N+ZnxZbqTpz952+Pc8p/hfVfTebjyd3b4jPvM8zPNzqq3v+0DW97W5vLOqrfHueU/w/sd Da78nR0+46Y3lxf7yj/N6m780+8z/s6+6336P9vh5O1ZX2lw5Rt/Z9Xbf8Zf3tanZmfV25/c7Ze3 9XKqd1a9/cnd/ju80+8rjfnqYHu2emerMT8zvtx862d8vM+4q13e1svhCfuMhyN/h3tyzp6XbF7e 2vzMOOGrOXl6fJnO/Mwnb/uTu/3ytl5O9c62Pnmv/nUD/5YbeH0J/y3X/I855P8zm/z/ntQ45uWv vifN8W55jnr3Ws7WnV3/LJ6ds/zl/L8/BrCbf7N45V5i94KVeVXblW5nzYuw/N1r2Oqq9ScnnHc6 ccOdnYfn4UuHI/MpP7sbHjSyc3iXzcr/rXe/z6v23O5Eb16Gyd+9e/zN+flcnnnDy2fw8rmb706L nd8NPJwz8w+vLuy7Mz4nZ3G6h8vP77zo9xzM5eTFbzW4ZfytYTQ8llMNxzvn9WcsN72zlofj53pn t5oHXZzdbX82l3v6m93OCDv9b/zF9vnCd3Y7w7wsPIceB75cs+X2jH2fN3avcD2vetjqztp5dOW9 0zyKsp8pmvWHvZMvb+ZnXurO9vPes0++XVdrr/IGTphZWLGzB/LAzrtfXbV+Px84b35ndqach+fh S4MjN1f7XHDPjCc7Z3lm5T9z97x2L1iZf7VnCyt29kD+mru3mzP2bDvIy4XJZjK/W2/2yv+FN9AX 4hX/mTfQZ3f7/Poh7uUXevUt/DIwO/vw05/Xd/zp4/KhP2c4t3ncZ2FnOZ7amWG/678ep3ZneW/E 7fVX3n3nebbOehbnnsvdWbie19nDN+PIzdT7B/rv+vM483n29tWd0+tfcff5db7IV8AXM5N397Dl 7ixcf2r1Z8aXm6vLarrb2Wab6c58crY/96ddjnpn1cXu9kD+2nt3xrl3+O6Hd2Yc+dR5rtX5D2Kz 2zOvD295vXjA1stsMbwz37jOM0uzXvDFbr7Nl/vMF87j7OGbceRm6vIZ37n71dv9fMbT27z81e+b dtoz6ulvs9v8xOo31p/3YrjN4LCzh5fNznzOVlPdOb2+uhu+aYqzh70Pf7x5vu/408fNu6Cvdt6Z mxXwR3d/x5FXFybscDsfZzO/M5+c7avz7/VX3n3neLZ9nvCN3T18uTsL19OfPXwzjtxsz1hu9fLO 2av/m2/g//s3n/86/ucb6IdlX039Ullc7Q/b/de3Zn4gy/R5NSuWU4+vxguvXv845re62c7jFItV O3Pxd+LxZn7maDCS9XQ3iy3fs4VVd0/Vy9n6bfRHhPPfuwl3Hk8iXstphq/2eYU7pxl9tVis2stc Pnl7Js4t0505LoyOZ7i7WWz54e576+Vs7Yzy+v+f3v362iOs2jn1t10Wq/aKv3Hy8t7Y+Q0/fW98 u5fXf7Un7qzlwG453npU+67G31l9YddT+5j+uXee/OsX47pY9bnfzmnOZ4qzvK2faeDl5Ts/rLps DnuD/sCqN+gXo3+GmcvL27q5n9nq21n461XtZf5ZXu/1uZ3Hd3lbf3ZOs+Wuf7XvLU6YOu0Z5vv7 Js5qbvViPBerzpt/+VnQlb1wzfR8wn2uiy3f2WHVfi8vZ2tnlMP5793wisOzuuC1nHD7qfHst/5x zG91s53HKRardubi78TjzfzM0WAk6+luFlu+Zwur/qfcvZ8P+51371nL+zzVXsu58dzJyTt7/mc+ Penitb/7xPNMehm3/hV/4w28/jL691y+H5hO90NW7QfGL4FmXn64lm+WtqjH05eFuV72A+n8xdWb 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 uWy+XmaL4Znpy4u578XyEYsvtmdVryYeXbmZc85ZPS+zNKvHMT/z6reOVyx2etvvwXyc6+wwtbxe NIvF6xVWbP1APjzN5dMHfzN/2Gf+Znv3q6u2Z/Xytr7txbv8Wax2Pav37DzM8+QPa47/7Eya1acT dObh/G/e5+43f7q81n+1zTbwVmuPeFuvD93usb7VzfBWu57Ve3Y6c/rmsOa85LCN3Ul9zuv5V/Pf XZoXe048nvTNb7rl5XPG+pvZo37revzNu1scEQdvOetZvXunNadvDsNttp7pxM7UZuWwYmcw/ubl Pac96GhwygXczou9E15vX9/A6y+jX99RjL5sXqvwRcUx8+XUl33Bm+0PQLMb/8Rx5OZnmPF3ph8S fbq4+Pqdh50Rn/fO+J8Yf/mZP/yZP/1mdWc+q+2z/v51bbF4+ur8bp6Lxdswy6fg5270zdZfvfM4 Z8TjvTPnLvav/F7y36zuzGe1fdrZPn/27nnwPLMdzvv5b7r7ntFz9vzP6r2b5XQ39eddwtO5r+rV 1t+CX7P1eabl3/wZxznnnnD51K/nzramLfMvn3Fq1jvuzre++fAv8ynr0/CQw8QN25mfqTCep0Z/ 5jSw6sK+1c22h5U34nmFr+fWzdav2dnHucVyecpf8Tsjru+fPl34+lTvPM4ZOLt7HP7LD+MvP/OH 81+favrFw+DyM+7Nf7H15XHzXOymCcu34O9u9M3yWa/qncc5A+fE+S9+u/vmeya+c5/502xWn56L 3/z9zO6Z8fT81qe6+e054xf48Qp+NPpmcfHVO49zRjzeO+Oz2L/q7u2Wt3MWW/ys64t2Pu/As/LU x7/5r0ecM9LEWZ84p1fYKy434IO4jF7Q2w24H180ucupPn+pLN6Xvy+mWH51Yb6+vsw37KF66Pxw 2cGMTg7fOv9zN5yynWD2geclzOrV5fzPvXaeh50Wf4N/ufMwgZuWPyxO+P/z9ur85Wz9NvopmuVR rJdafjAe5/pHHDvQutf13DovnNOXR3k5W+dVrOcD+XiG+PZyhnPh9DvnK58zfVo+MJq/8u47q+j5 CjtUN3NPni186+Xs3vGK9a9+xl/Pd+GhtZcz+MDpdx4mzGU88/IzzB0st5rX4rD1Usvxq4v4NHrP VF+c87S8mp38NKc/zuLxivWvv3Gc1/wW5vKN45wb58TqC3d/zh/Tj3fekOWr5Thb08hm67k1noyv L4fZXb8e1dvHEeunltP0WRb89yy8B+Pxfp5z469OTad/5onX/Dve8b7anWe5yLfg7/v8QB/4atR2 p+dnTs+7bLYZ/q/4XZyv/e2XfxH+u38Ortfe67m/O1jO1vGLZ7r08fc83MVhns25p39nCdw4p3+c 8H/F3eflLBlW/7t3n6Yo3+7yffhjXr2crW93w5tHnBNr9h0c58zp8ww3W6w6vM/EvmHF8s9+Z/zf RT/eTqw+/8Ln/+g+zlnP6iJdr1c8uQEX9WT8PwvvvVT3pSvg5f1ifdafMz70z+Z+qOIX+NWrqV5u PHM5TVFfwPW8aR+sx/ty8XaupsXXm5fDzl8U5uluP9zuPl6ck+e85uuvPj2Xpy4LfmWRlzCvr3b3 yzGDlfnR65dz3s1y8fIWi8XFd54+ftjpH17EO++J1hn1Jw8nj/VXn54nr36DX1k4v95c3R/6/aG8 nGYbzfiVfV5x6Mrn3ThLji/4bI/nPH2cm/9q3dOp1eOW8xXNcey083OH+sX4lOFlkbcw1zc778ys bK/FqtcHZ7GTf+vtZddTr7/5m60vXthtjttMpKGjkXG+k2l457lhHlbtu7KcW51Pn09xej7Q5+/O 9HwxF6M8P38c8807U/O367knXj7VxXLO+c4e7Mf78m746Z0PDL/+d37fOPPmFXbe3Z5zfsZ5hYl6 WLkoe/7T/+S+C37wm63WDFYW/OvN1e13e6blpecH1/NeTt7FcvEek5/fafH1ywq77Rkn3b/y7p11 enaWmbos7F8W8YV5vZ1vz7S89Pzget520vOnXbxZsVh+vGn0uLc9m8VzTzxXi1PmXV3gV9OEdRbP Zht4i1XDy+Lm3yxO/p1TLO+B/PpO8+vkfxxxif/j1/D+peou+qLsl7B78WXemS8d7tmng8m4O6vm X43jC067nOXFj+Nz3BqGH3f9q/NN02vnb+0f+zsbr5kIE86LX+irT++w1dqlvOHsMH5h6nCc1Xoe uZnzYGW75kPPz0wfR5xe4YvpYe1782/eq5n5W/mHl7PLvJoXq3MfdtYv56F6vK9X5zpnObzC+IWp w+nO3ev3bOfByrC49PycrX+j/BF0zfzrMGyzun35h9Wnre6157+1f+zlbNxmwiyt+wgrtj+9m9ur ujkvfZkXbDX2PnfXpxF0O1vveO3QfLn6ZmLnYT3nidE19+zrEU5T7a5OvP4WtOu9Z6bZ3tl05qf3 8pYbvj3vsh14mtWvn3m54HfjmD2YP7/zP89dT/o4Pp/9fu38Z/ef99qz8BazA+zGgZWXl1ZfXSym L8cTNPV0n81oV4dP7278TMRtZh6fT5zz903zAqfad5qnvlnxzN/MTu/kH2+L8QtTR3Pebfd9LrvC VltN70y++jji5nVi9bB9dn5lnJ13Bh0uXjOBU+8+4hf6R/fX3v1t97D2M7MrrGzXdoxXeF4z/WP6 eOe1M9hmdXdx82/ey44P91/vvnN4LYfOXdtZT6NfrTqPfQ6e9oq3P3vrla4elrYo08PeBzMzh5ft YW/9cszKzoXh1ffyLIungZd54PxPZh/w/+TD/3hoX4TbF8eXWMZJWl2YlWFws/pmzqovzG/aB+Pn L+2en4Y+Lv/yjdcPVUEXp7ATrzIv2HJ3nh5n/cPtgI/XrOhc2HKbOb+a/jscfmV1HqdfmGiP5qd/ cx5l88Wri/Wv3ztN27+oF9W86pdXb3a7G9w9K37x7O4f04/n0N/8efHfXN3cfvnYB0aPF6fgU42j rm/39W9W4JbNT7x+/et3r7R7983jF8urd87tbnD3LPs9u3tzuTOK03/75ruHXWHmp2e4OGe0cDn+ +uubLydcL6frdXLdU5rm3c1q1Gder2b6t/Jdr+ePkz8Mh3faM8yWC4u7NW1Y/KL6xjEri5On332/ 4pqX6avtz8tM33x3pjHHDy/qF0uL21zAeIfThZ0+dDj6Mq9qc5lXs2L7OHt+c7pqAZPDq/fn9Zzh yJ3Tnnj1i6nxy+tfHyc9D7lZcfov9/Sv71XwuXHM1ivNyeUD5w0vF+sXZ/t3wo83PrDlVe/d1DvP d2H5vGDOxTXvLJz1D6cxl5sVf+bu8+Bz7uC8vJdXf3LDRHs0p+ffXF02P/H69a93T/bYPwd5nbx6 s9vd8Nyz4hfP7v4x/fX95s+L/2YO9qvnAaMv29VMvz7V5qv9jNNOcfHj2hN2Zpq4G3hh1dsv73+i fv1l9ONj9kXYL071Bk6YWg7bL2U1fZzl4ZYLs7IfGhqz0+szf5q8+yWxP7TN0n7m/zb+Y/flhhf8 7bD+zWlw8ZyJUy7WDyeNgOGFw6px7eG8k1e/Ee+87+bOkfk7Ux+Xvrqgqf6du+edjn95/Zrpm5mf WpzyydPnVeCu12PyeOeNd/bpit+9e3eTlqd6M38cfZzP7n6fZ7Xqcpzl5ckfHiZo6s35LVaNu7zq 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 tv3yzcO6l8LvlvOsOL14mevNymeE8TenXy6PsJ3vGeds9TQnP86eux6rcT4uXRy8m3Z1Ny6fsqDR r/8zLM3eI82Z13vrfHGdsZl/uYgrYPrNPPGdWd46TfuvF22zZ7Ectbz+YXBeZx9OU32b3/A0v3v3 +WycZ+0e/MtF3DPMFl9Ptcyfbu+ev9l6bs0rTC2vfxic/uzDaapv8xue5rO7T1Os9wP5eD/PWi7/ sogvFoeV11Mt86f9u+5+97GzbDeccNGs13nvy22+PW05nf++VMf150scerg74inHFbvT/vcpL/71 RR69/Lf3OY+z8ZU/Xznvot6+ZbvhxRHuo57GTF4/2H983r/8/Kc/TB+cD69c9MFuwMP2A1WH80iL 33y91M19gd/K9zg1zU//iN19Ps2K6rgbN388nmV1WufHww3rhVduhluuh/fDWV8s54E8ZvQ0Zvir 3Tp+rzPShdtFH289V4u/nMWWG6dY/wfy/H297AArP/OPi587ngxbTvV67mz5e+/hG+lPXXPY+q/O 2eXv+u9Z67/1nlG9/udMHyfvgpcMb7Z1fWH3R/fQ48n8ecaFLYdHOTxO/r3On9M36A9O9Rnrr75x 7G+P5dghbOv8Cli51xnx+p1zm8F2t2reeeFUb4THs7tZmHuiDcNfXhgOXMb3Z9WNh0Nz5uY4N317 8T+19bRnnQ5W9nzv4I+3MK+g0+sH7Y/UvLss1p837MF4vPO/PdvyqnFvOP15xva7/3o80944MLvI fV88O7+4zfV2kRdXpyn4LnfrOGkWc75ZufnywkQzc9gt0zsrjn1Xb37mmydsfWBnxoHn38vzNt96 ebTnTourV+eMsOb0uCfmfPxymuWFCX76Z5l++Xbgn9b8zOtLB9PTwDfjwOL28rzNt14eLX95cfXq +J8zvUyz55vlUe1MXN63OSw/2rB99XPuzyKcvOMUaenrcXnT5EMTT908fXPct/KPOf/mBS59uddq l1ddNF9OdV43/fLibOy58Z4F//Sf8Z7p/9G4S/hHL/mN5faLo17ZYr4Ui229uupmBd2j+/k9zv5g 0IT54pnfZtya7Zes2hfP+fRp1r++aB5eVOvP+p3wY563c513zvVl3DwLu531+/DHvBq/zCN8I7yX e1tvvBtmtrlz3Hu4Xr0+t51OfrqNm2Y9l7s1zu/4f8Xluefc6tvOeHn0enb3zYo8is+87Lvc/V4+ HB7vNx965+DjyvDyd+4A55k/v/W/cfl891y+z3J+vb5z9+1TxL+FffHi4C4WXm9WX9Cr38EfeNxT Q88bJ92tfuYfv/iz/g/15++nd+xzfw64O4fhPMtp/C71OyhtsbMH8nhf7z0TZ+ew8smt37PUN40d m938eZuX179e0O8cFke9c/7NBJ5ehq8ehlNu7rk+u/tnPr+z08ldz63tid+edqw2rxbLbV6s5wP5 +Xl3/szTufx553fTOKf8lX8cHqd//Z7tXPy0pyZs5/Xi5Nbz3JoeVrZHXuc8LI64eZqtF/9mPPHK JzdsvXenZsX62Cls8Xfijzc4Ls/z7Hhn0OyMX9yt49b38jP2Vv70/ag/5yd2m/NrdovdM079Ymns ZxbPWWHdi96Mx9voj1g9MH64DC/z4OlZdoa/+nTtVKyH+jH59b35+vzK+A9Beoj/5LC/D6O8H75n g/cvLM3P4LMfPCxutQ89vR/wZqI5/+Wbw269s5y/3GpnLs5HPmf6M+PLzfP3r0/VYWLr3a95/d7F recTL2+xe9lhMbzN67+7wO1ev3uvx2c1n3IvwYuvGRxv8erzbpaPmxYvDGfrOMViW5vx0ZeLf+Xd +wx3T/5h517vC1zecI3S2b9a7DmrgcfDh62XuZm+XOyZOOnP+oa9G7y93c4zu93NesWrL5z56H59 f8bjJ/+q/PhcOoPPMx7cPnzp4PFuGL35V3z+Jx8ur++z+uTq5VMXXuyOD+Tn92e8Z77U5nLn8Fps f3el3e9NPW51wcPe5vz1D/aHno5/cxpep0a/mT+tXsY9+6/w2/yZR9zvzJ5xPtt9NVs7s+y+mvs9 Ym62PZ+ysEO5134P1gO/vOfx4uNz1T/zWL+zPv15xTv9w25n5EG3dxN/Y3l8YPG21peXu/7xz94e cvpCX+71Z+4+XeHc73g8FPd3PuVedoytlmFlkabAud3Fg/Gzf/zCmc/qZ3P823ndif82Xn2awq6P 7uf+sxl+uXPPu3cXy3P+Lcc7z4uXd7H+D+TBr3bWeY/OoT257iYejzji3Gd7dTmf/+joC/KfHH0I z6IvkA8rjh8SXw652dZp6HwJ42wsP3w1zYrlbB1XbE0Hkz0HDV49jtmJNfdDcO7gPuJ4zuWsl3PK vfC2jl+YVeM7K0yYnfzmYXbCDytO/vo8GI/38OLmFW6OUy7w5Qf66/vqTe1S3/579zdOfHfjucoF fxmGF65uVtS7t+a9+L+Vf4TZ6sOK9XggD2xndDR48uJb7/x2N87+rj/vci+6v/Lu3a+zPJPd6+3z 1d3zwqPjWc63MJMf6K/vzW9Bl5/decdfHe5nPma4PMPVZWd41vjquEUYXrXAW6wZ/7Ouj3vyw4sT 395ZD+bHPnR8V4N7w87ZcjwrjjPk5eIspi67CzX+5mar6Vnp8OiXu7yd08i869PcuIvhy+nU592E m6lvnDzOWJ3Zaqv3GauL5dSfPrvHWcffMA/jX81T3Zkw2X5xzjj5zrE7j3TVz7yWR5sGXw5bbn1x wxbvmW+/69P1yr/sbvTlgv/m1W39UHx4rp7/Ympn6sthq4HJ5z72aG6mvnmZlQvPq+7s1a1nnOIZ Bs/js7t/N3l72+dMaxc+cnzz8tbNitvOnqU5TVh14fz1XE0cO/Ev45vjeObwwjlluvzx6OJWO3v9 mxW8Ht2v7+tlulh6Zzd3Vpzdr1nhPNl+j+mv73i/Tv7hyH/yX0bPS9f34ap9cPX7hcDB248J5kuy s+rwjZNX7155LX9rX0Ce6WjkZv3QFGH1+DjNRBhcjc8/3NnV/POIS1cucB/dgwPDbeYcOnm5689P xo/jF8XOznuNl3fhjJPzmD7e+S8/LG1evQq89Q+/ccIF3fb8P7v7OL3yV9Pxks8d4edzpy/cS/3u cPrj5+/uYbT5wZbnDDs0C+sl6Orxw6rj9yrw5Ad655itDpae/z73nr3P2fk0dLzkOGnsCvfc6Qp5 z9odTn/88u6U1+5Vj8vb/YV7xTPHL4fhxwk7/T3b6vnyoi2LnfEI89zrZw++5w485fUO09NvTyPn zR+2u4TRh9udxhknLxyfXo4rnmHh7ibuMx5O8+WoFz8xs8U7S+wcp9mz2t3EcT/LT9edFKe32c2b ZnWeezE83icn7oaz0tFUp/Ms8PL+7Hk+87fxe9SL9Qgzs5de3j1Of7P1iWOncJF/wTde+oKP3eTH 9PFOt/ywtPFp8Or5v5VXTrig257/3o3zmnnO6s4re72V71Evzh3NzruBu5f603+fDT+OnZzZ7PTH i+MMu8n0Zf7V+GHV8Wnw6ne/G+eN8kfQAer5n3dv5jntAKezJ0874S1eHV7I9PX2N3snHm9x7FRd 0NLp8Zyx/HThG/Thdmm+NU6Z3nlmzkm7YQ7jEb96+zj8q5dTv8E3zmpw7IMH/4/J/4mLt3OvPpBb 9uXsQzCvFnT15uVC/+h+7cPpV9OZviS+KOZp1lddVscpVmtWzr9fJJ7NDm/Qe8Qp4M9y+iI+/3r8 6qLe8/CG62969xBX5FUsf/ub386rxblnWmd6trg8t7ZHWHHuYx5uVl5/uLvhU8Y7d9Q3T1/weXSP fvfnjx/PftXwMP5y82LPqF5/sz3n9N8+v5u/Zz694xe7pzMXT3fi+vL6w+18+sDjCTs7J5wPjnP0 +TgXtnfBfzHn4O8Zp7+ZfWlkc/3pDd984+RTmJWL0/+BPt6fzXjsvNq9wsvCefoy3mJ4q93a/Ka3 1/qdZ9Cv58mhX/ymw9t87uAc+OmzuNq5Mn9zffnkwHBoymozmUfzol6ozcLxceT1xwnz3T49cOjl G07brDg5zpZxyjA5rND73obxLfu5LwvPUo+bDzxM3Pyb0anX3yw/kY8w15edA4tj92b04UJttvhi 6vi96sv8y4u/te8RVuDRPdCffXD5xInfHaQX7rged335hBX19nsHfmDn/Jw5xxnnXF/e8+udee5u N5yyPaqL8zzzcLOyO/Vs8ez8Vr5zy3jnjnp6GueZb8+/829hv505H2b3+pN/9jTybW7P5TizvEEv NzvrMHfi2eP0gq8/vbtJH1bg2/HMzQv+znugP+vX39w5p46n8/Xxblx+/7jsX3n+cYs9WcgHeY59 UOF9kEXY+WGs3px2uWZhp2Z7Gh5y5/tCyavDW/9qu6cXYfjmvPYHBR+3/vT3L2N84vBPV33uAXNm GrH+YXzj7oy2XKxnfdyN+tU3o8WjgTujef63u6Etr3+13XHM9ebOodlfMrjl1eOGp6fhGV6NZ77c 6iJOwR/Oqx7nnfj2FrY8d2O+Oe3pTYvHH/7M33PQyetfbfdzrjd3Hg1/OD7/etzqeDQ8w6vxmnse XP5xvGBv0E/7N9/gFdY5ee7Z4RvpT435OYOX7YOzM7XdcFdXTfvVnB+evP43Lxh9OS09nM+zHn+1 3/G+cWDnmXnv54TnbLvpzcO3xrtl2t+d8f+OHidNoZc9I884W+vLuNX01QVNuNlZL6+6sFf59Ofz TjzezNI4O8rWh+S93XPyqD819nAGzf5uoM30M32zjXR8b7svNy1vmtXH5b9zHvn7feN3mRlfOX21 Zz95enN7nP72wOdfv/7OWyyOO7E7bO8+LF2x/vW7H054Yedq55z7NivS8saR3wk/5tXwstr+crwz 1r/a7njmenPn0PhsnY2/etxm8Wh4hlfH8/eCPUcdT6x/GK+4zQo6Ocw5sDPHKcKX+w7+eFv/IB7V aXq+nsOOzTcWr7b7csLozkzjHp3PV+bHP95qds6zXMQ9fd4HP97sVLv+q1/+P7r2pftHL/ljub14 H1ojH5gPTW/2Q/6ecMzieuH5IH244XRxN/bLSoezvovdvGD5rQ+PMg6v9sCHlf0Q7ry6Wa/1Dxc3 fO+AXk6354cXfJrB3gfTw9er2jPShvU8y3tr3wO2uurCTC3nv97hsGrxzOfE7Zuu2Xp1zu5uHrfZ Gc1xystZvLpo7nxYfdEM9g5MH76v5vW8aMN2/3ji1IeHFWZq2d2Y18PiiGc+J27fdDur7xl29+bx i2ZnNMdR48Dr926c37zQ4zzQxzsOb7lpNS28vPvHK8ILvEf3816wM69mz6sW7ma5W5/P1qxYzgP5 2FVf5r/Yqd1+/c+z82hufzoaZ+hluAx/5n/y4tM0U++znZzl7d2H19Oubmv6Pav6fPZ4X/nHKU7/ fX77LM95u++70cWLbvMz7p4b5+b/zAfuXm49rFx4tr278M88aPDi9vNpd32ZD3+ctAJn89Zp62mr b78P8mtG60z9zhaLt975OBMvTH36LJ4PLQ3/+uZ2ry6aF3we3ePdWTxp8GnCT64Zf5zTn5dMV95z +dsfj5/56nDMnCHnby9cGF9cGe/0rLcvLi/c3R0/7t5rfUGTR1EvVosH08el9Yz05XjF5q09y+4G i8e7utfy3to/fLde/+5i/w8y+fXiw1/vnOXkXaxv8/rl5cHvrfxjXs2/uqB/dI93fs4x05uHb61f Hu0/Olv4n7zkbcfb5fcMvmxlX4z9YQyD85BvX4g8C1+sOH2ZT//9csUpaB7d/Qtnttz2yb+w2/qH ewZnyfGLerWcJx/16bM4XX7PAsf5+ds9zekflsZ+dPrmhf70f0w/5vX8zG5YfnvH619d8DF7oL/i eOb068+vbH7T+TzinOem/SzyK/j/U+7+sdXHe/vt3XjOvQ+1GfWJ68332dXN4hWwm+7Z3Z/ch9PP 76f/v+Pu91na5tzz7PE/u/t9jvj69Yef/nGKE+fh/Afr4z38O3ePd/qc/r9z9x9b/Prz1jl5n8+T xg7OPjnweDduvxNxVrv16hbv/M/i5G5fvWfzWU6Y/uTD6U5u/Wf+PVMe6wNLW5z9uYO53LyoF/xh OKcXXrqt69efT/hncXroy8Vnd/NgfOyR5sbHKz/z393j1ffanzO43W7n8Y+7cfM3p4lTrD8Mrqd5 F8zbM3woT0ta5ztrBTgwffm8+/S84uOq8fFw63v9FXef74ad4HaA426/tXn5d/GbNo/CPo/u8f7M f/k4cjO1O+3eC/jtnv2ZgJO2urCbHucxfXwP0sdzZjOfd3Ua/e7TbMMZ/88beHrS42xvRznPc09Y Oe3t7yVp6NYrzT8u/hP+L6M+RBfrcr+6TLpy0YeRtmf2wcDeoPeIG0dsDZPNzpyHL5Zz4njZJ5+w 3WH5djk56U4N783x6u1SX5ycMH7NdodmBc2je7zj0crLSVc089x4Zs1v/mFxBV39as1h+7w0zsbl YV6v5oN74vrVnP5xdq7/Af+0fzP65dmjrKbHKzeTzcs0zfi7GzO87WHOqF//k4tf5l9N4+zVbb3c r3Ceq+EfVtgbV/+YftwLLv3Ja94+50505cI5j+7xTtOMv7sxi9ls+7D63WU9Tu7ydw+1s+OJm0ez 8J3xgOnjVtu9WqhxZXNe9c3sR7fz6u3TFLjqk6PnX+4FT1fY/9E93uMsl0fTUw/jX0+LK8PLzyJu O50cfXM+edTD4Lh6vHKB/+h+fTfnvYz1dE7zuBvnbPt4+M7gK/Na3urMy+tNf+rgy10P9Xn3+dCo 1xt2+tPki++MncFkfmUvM2fUrwd/Gf9ZxpP5yvzN+dTvueF+n1XT08nwU5tm4+ZPwwu/Hnb608TF odsZTI7Li79ejrs1f5nXmWnwZLgcrl4P+GLLU/OV4eVC/+g+3r/y/2D+/L3kt/64dtDj1K8unvPV 28eHbx2m/1H+0e/3EoeHP2/gt714+/MhP/wyTbxqPDoc83qxHLvkwUcdf7lb84p7RrxezWjwOk/9 Vv7zwsL/vM0eG7ncutuXzOXGa+5fB+ILz7gfUDN4dTPzsi9KsyIuvH/lKOjlB/rx/gx3Dibvcq/z OePdNOG057zZV5G2SLsBl82/OqM7627o8qy+Pc9yzJ/5xzXDzfuzWP/v7O+M09O5J86f9zk/db9z N3md/qffeV78293cdLzzoLnx9oxn/stRr3++Bf9mMLX8Tpw3moHeS/58Tt7Z/1Pv/tn+5/P+Tn/e zWqb+bzdufyMt3j16e8Z4MuH4ZiF2wMm05ifnyVeOW7zG+eG8U7bvLjxHpMPf/1XmX+e62vPZ3rc 5cFoeNev/40XVqzfrX8n/eCpafnK5jzt0+dU6B/dr8+/uLp8+pvx8z2Anzn9/lld/8zz1Nbjeq7F 8O1iRiMvD1beeOZ/eqdZj53z6Hm7F2csJ/3GzvDNnaMv4ze7zRer/qfefbsVPU8v/e7vWeOd8+U1 5/FPuXs7lYv2PXd+H8ybZwjCvWEk5/3QyMuDlXsVq6/HqRbOp8GhhcfHpf1uXo/qPkNYnvs7Zmv+ cc999HFoeNKV+ft7Ca/N6lOnz7/Ay7O6WP/z7yUPxuN9NbQ7/0fULflPDpdoT3073z6ccNzqPkhf PjmdXypxChr5gf787rzlV/tw1399tuZoBz0f3LIveTN4tXBus1765suHw5bbrH6x9IXZo7tzbrqw gr68d/Ps7k8NH3i5eHam8+JUi/WBbcZdHiwePMzu1fByL5qdvcF/4Pgwmtvd8FhNusLs0f05f9qy M/jKzaoLu8oP9PEOk8/Z9me9/mbOl8Oru6fzF25n7rmreRv9tH99gcOzrO5nzjzfM8zg9cVyccq3 z/Zd8ONtdYtXr/d6Ls+zyztzNozH9tW7A46MW/aHYnyveOLUmN38aTbH53HTmNF8158On37PgMm4 y4HhNDu967v3whzngf78uS6Gv1rn79kw/N/1T9dr/3y5+fOVd1c7LmafckF3834wfn3H5cEHE37z DvtX3n1evvN7vucMs4f5s/1p/Eza9ea/vl/5O8/5u7Mzzdyd/sy8lgeLC7fTzqo7e8/ES1vg84HR fOducFdbXfwr/Pk459mu5u8H/3iD0dinMWz5W+MuD7b6sP2Mm8GcD7t5nRjNd+4+X9GZvOwJ44n7 LNM1T/OZDhdHduZ5Bj5v8/DVPPPxu3G5vJrxT1/wqT41uHjlm3/Y+dmuf/Nb7Hm7By4PvGc++H9b tujftsCTg/1wNN4L7kLNXC6L5cHiFj786tV5/jDBv35xXLm52hcJH152tnPzh8n4eRb6Ms9wHuZ6 HDhueOedPs1xae0lm8ddTrW+WZHmxOg9Y7w4cHn91mf9cPMots+f7vTnAU8Xf4MXTjk/wV/mmU69 mtP/2W7509srbvr6mz++/Eb749mrRdqCV3UauBzGa8+G4aUvwm93wwe/zKNc3+u8G3yc8s0/XTje W/mTP43njVfQrM6ZuPYq46nzCOOjLxeLP5CPO+Yfzrfa+WHwc4flVYvVwjbv3uG7e/XGeqlP/TP+ 4mrPIp+4M5r3cnf4i6WFV4uwgteje7zD4qxWfT5b+O5w87ph6QRvvTNOvHlYr84scGT77/cmHs+t V4MfhrOaH/BPPrDNe/7pw/vET/3y7IhjpxNvHtbL3YQVuHarfxanvz7+6c+32XqHt0N3Kjc/vZrZ RX6D3jXbh/H3OYXFgcthtM/8cfMQMDvzgZf5lut72Qe/MzfCF+NPh3v60+Dx9/88yg7p0xZhhb3y oL/548tp02wfxp9XWBy4HEa7PrB0uNXF9vnTnf484OnsE9YrbYGzWDh/uXmRl3o1p/9nd4977lV/ 89/z2qGIdwuezXjh6pvxrN4Ix1/8Wb0+dGE3H8/NC6e8n2XzvPbuefPY2frQhsFhZfqt8TqDrvm5 U9izsF/6jcXP2fL+ltpyf8vhTw516cY+lPrq/eDP2V7w6bN+vgSrx88jvDDXh+18a/q4/OMLc728 3rAzL8eZYdVicVgZvvmzXeL1Wo7zeeR7RrMC93YHzeC7/2o69wze4bg3rPkzf3z6uKJZeNp9bvPV 4DRbz8Xp+OKVP/PH67yt86vfPcIKvGpzdxAmmsFv/rf90978b1jcZ/6Lxys8j+z89Y7nmcJ7+X7g eS54mqL5PmfY2cPKu+N6N+NVvYEXZk8+y7NjeXeg+cp/eXxh9fY4vRenc9Zms838Tw+6uOcMtnuE nT0MP5/9uXh2dvzCudUnN6xY/DP/5Z11usXejX8Di09Py/N8hu1XB8/nWc27HOfkwstiOWHbnzWN bA+68mLwxW6edo2/ceqafYblXSynHl4tnPmd3zdpfmfv+HZw9p/5fWC3/DZ4h/G/Yc2de+6PTx9X NAvf8/HjrObGObVpitOXdr3j8YfXbx2HV/UZJ9cdLM+O5Zu/3VZTzbs6XXHDwp17+uPTxxXNwp2P a04T3sufd3irpSk3b4ZHq49T8H+2exxe1Rvrdfosz47lXul6+d2//uY0b7T3qC/2zAfy4al/xtv5 1p59MbXzdl+z8mrtHn7bn1fzjTwK91HN6zz35vFX3k27/KVh+b/0kD9h3l69+nB8MPthNKvvtc+w 9dvoj8APWJ/6nd30iy2X1tyXMX//G/E47W9WX6yP2nPyezA/7mFxmvWCldU8bs9sFtcPgfuktxNc TnvWuHzL+RRxi/Ly9mzcd+IP7mLVfHDM937D9FuvZn2q4/VSm8Pg9cX697TRkc4AAEAASURBVD8d 9S+PzeKY16ftmQu+j+7jTDheevfkbJmPXertWS3MeZd5xrGnuiycJT/zb46Tlme5V3fjmd7KX/ak 5S8vdznhe7fVftacufO0zq/ecBYc7++6+91H7ZncgV3DPWfYfq6ekUbPs/6c4cjrH7ba+t2j/gz+ 6Qr8R/fxPamPc/OnpeGpL586WDk+zcmDxyua7306m06+cd19ntX5FKfHA328n+eb7Tk4fOoL+Gd1 s/WqLxZbn8f08e4c55otf33M8eOd3NvPVLqbT1p3uvOtn/l/dfer6/wN/nGK+l67e/X+vnlrf3rW 3b2ZyKfgvTz1uftD8bN/mD3NYeU8zN2huVl9gffoPs6By8tt1/DinH/nd/3u9HB5vPNyP/W92pnG 2XLKs8ZtJvIpeJeX55w4uNXF+tc351Nf0Ljfm/937iYf/jL/PHeXncfp7P1eNrdPczupy4JXnKK7 KX7n7uPzqRZhBW976HdGf9OEmac5Y/3wnNVzFHCfPU252YYZjT5O+j5PmvPu49zuPo/1iXf6r+fu CU8j1ouPHIcGr8zT3N3U/+1h4b99kR8L+I96F7h77UWHu1wfvPk+U7V5mj4MffqTu+dW7w/4jf9G eY9meQvnOs+Mh4wv4+9eZovxL/OC8dgzF/MFhPFw952XZ7GeYb3Sye7yDXoauBGqz3A+HAe+GWcz f7pm1XT2XazZhtkN2xlPmJxOLa/XqVt+tTnNzePEzp52c5yev6g+43ZunHCx52zdnP964+xssfV2 xpmX7/Ozq9lqYGeOc9Ph7ZzfzhbDLd84uHI/G/1MFfHPOPf6ytOcV3oevJfj3vDjxP8qeMTjL++M D3/e29905rfvJX+6PWP91eab11/dnHd578ZZX3ni5VW9fVjhjEf3eLcDfnnj1NgvDi0+bh5+9+Kc vjTy8nBhfHGbh5njNz+5YWL5PHa2PuHrtXWzuPuM6/fZdyctr90H1lycWP3pjSPf9uK3GR+mdwf1 BfzRfXyvzD33ZtwyvLuy+86rzzNO7Jzn6e7jFvyd90Af76tXL//0SoXHp97+1QWOvHvBHszP33HT F/W38Gzm+s3p1q96n5WWP66+vNjWOCf2XX+65bt7z3Cer//du4/P295nbh87LT+ssNPmPAsYXXn9 +HrWNIvRl4ubFv5OeHuLez7TZ/5mN+9mhb15h6nLac+/Z4QVZXp92Z1U34Jv+mp9+Xw+Z918/q2Y /1j6tx765DAX1ri6KKtdWh8EbLM5XXk/DL35as3C9nVy+bVDoafRN4Opz9wcdnLreTlrsdW9m/x4 83k+8zt18fY+zZ3Np77IP6zYXL2ad8Jwzp4vPO0+p1res2jkOPbDO3VxF8O75ROjc97pVU9jppf/ VXezZ+1ee39xCmc/uo8+fGerDeeLc2Z+5bjuHn7q8cp5PfO7zT7zz6/gV+3sMvxfdfe7n3M6c++v Hs/5MHnxMF50eGWxGrzyV3ePm89Z8342O/1Xn8ZzhxfyV3fveR+qD90zf97rT2sH/elBW3YunxOD y82L7au9zruP64zqAvfRfcxvnvmF51Gtx+XlXP3O32Q/7Vsvls+j2eqrd7bPg2c/vZzX8usLc7N9 LrN45otV96LBiV8sd2d05vqH6uMdvv77/KfejG7n5z5mTqPhsfzbbJ9HLa+n/7g0cy7PuGaec2c7 pw17xmlWLJc/vBns9IlT0Nsp/nfu5vTjI7+bj389zXf849t968X4nXcfv9hd6Dwn7YP5cdZqnnFo lsvfuatVl2/Pbqc8bnN6M72zNvOKU9DkDdu8XrTvwh/85cLL4TfvPgvPsd5p4t/2aBa+4Vw7mZ/+ aexy898dmvOjSc+7WWEGD6Mzj3PWy2lWvx5hxU37mPwD3i33d67SDr36sAt9tQ8Jvn3YRpe/Xxgf SJn/eqflB8dtdkacgld1Z9anu3m9wX88D04a58h49Z5jzwvfcKacpuCHv3MYnj2c927w9ubc9cKF 4Z5ezgtfn1NnF5z1u9Xru17h+71ZLd5qm8Plc74ey4fTyef9weX1/wzjLy+3Z8xnY+fVxWJ62Dvh B6f69DMvr+a2f5zw8+7p5NWmgcvnPM4GHkwvd/f7P5k5eetPc8PoyvGKeL1ud9+8uHmFFfk48x34 0VfjwMu4ctj614vwcy86+dTC5XPOW8Y7e/jusF47V9v1xuNfxl/sWX3zCivyOb3qC5xH93jHlfFo lpve88DxeJfD1m9rujPT51/U37zeh1+80S0Ndu4bB/bZ7/p4PGTPpedVD8NZ/WJq+cbjtf7VxWe6 c/4uuLz5PZ5X8Wz/x/Tz992VVznv9Q8rYN+9+4fqV91XXvbqvOpCLYedvO3Ny8VnunP+Lri8/e7d 75mnnV3h+5zpClg17Lt3z//UrRf/3XN1t3n64uRtb/5OfHvjv36wOFvTnPnmvxhvupsnfvn83ZXO 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 13/Phzvr5p3/s6Avd35x84fbke5d8PZmRz3+uQ8e/eY0z/zX96zzsHuzer71RX1x7vNAP3/nZXds +O/cPQ9aOU+7hcHLhdmje/4ezz6x+Dj3VJ7++M+067Nc+/FzTn2vPp/VNqd/hsfZwKMri2bmsDOb rz6sKLu3nZvtPEzAb9/bfOB4ZWF/mHObr7Y+Dn49Li2sXOCW+wuqvllRb7d34Mcb3F3wpy/vLtXb r1d4PnvO6psXePow54Xd5rinf9oifecKz6Nf/zB7qXfnzsI3L9sNxgO3/J909+f+nu+8O3d/8t0D XX2x+r0bPNiD/fN7HPPbeeY7w9/PcOdp9nvT7Jy3BV718qsL/qsNP3fCbxbX99K54f9/9t4zyK4j uffMvu0dGmgAhAcaIEjQezMz5Aw55DhqhhonjWaklfbFrt7qhfZpI3Y3FNJ+UGwoYkMvNvRhY0NS bGxIK6/3xmg8OUOOIyl6A1oMCQzhvW2gve+7+atz/7erD2832twGyXmVwO2qysrMyspz7rn1P1Wn jkg8bKh9Uij2gXLcDmX5IXl46EiOMiS5rDT1F776NMXN5OPykufjDix5Y1EDCpQOEFUKVqVUqvJX Mior+LIre/mLguSpR0f1MZ86CF4lfr5tyZLmCfvYIIVkT7ZJscen0gkBL+6bF4MN8SiLZFtl2cM2 pLYkp3K+Tv5QH8sgB8X6lJGP5VSOfRePVBTrwKMc9yv2X7akK3nZFZ+yeHn7kpGu6iVPGpPaRC6m vFxcpzw6fOgPlG9L5ax2ql5lpZKTLVI+orzvKse+ixf7LbuyE9uHN1PsZUv6eV/y9bIfp+hIX/J5 35BXXawby8V85fP+qIye7Ck2sU4lu/KRVOclefFlL68r+5JTerH2qM/bly3qaIcypLazUlbO81QX p+jLX8mTKk/7kMrk4ek8ppwnyUqXevGUpxz7Dh9ChzrRbOWZfI91yavtOI1l4vbEJ43tiy9Z0tj/ fF8lF/Nlg1R8Up1L0pEcdeJJXnXSiWVURyp59OP8bDKSVZszyVJP37ErP/I6+TYp52WcVZGkezH7 2JNsbEg+xbw4L5252EcPOfUZ22pXfGRikn3JUUdeJL2ZUskplRxl7GiMQp7jgE8xxbzYl1hmpjzy ak/+x76jp3rZFi+ODbxKJPvyWbZi2ZinvPokn8RXKn3KkORm8z2WydvJrEz1VTbf7dgrDuonfpGf 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 BF2Ulx//58+9OnS6hM1OUl5O0L13Ix572ooLyhErrsRhdh6zzs9cd7XNwNiniEBwkNJGuKTqUj7j NfHBRAaD8yel0GCqukdCIoIiSqNXEVwEdbwy8uxzz+v04q1WQHtKIGQ1mftKj5FST1xWLVdIwD9I PGIFGxPIjVq5JX8oN5dfcrFXa5hAyOVWtKFiQxTlfKiUvjOHD03dunf3ShUrJ5iLHaZyaN6imRSP rVJ6N8M284bywPlX8dnjg4C5QsL1ytXrXOY9e3RzOCbLKA0tVCeoa5hXUo4vylydWf82ElhZtaXO YHpKOJMsKOVLpdxyhRDXpHDFBO3uEJlwnnLyoHT00QNMQ2uZYDHJ8daU6apvWqUQD1mFRijGROwk 3dl6vMqMOoM5dpfOhycmVjDZXKKJFATxThJ4OeAEs9MzZQJ6k5QGzOcQtuEF5dtPwv7ll14kBbZd kZfk8m0vMzB4uFWrFKRd4U1mkWmkOMk7QhDmp16+qwi3Wi1TGvQ3rNxAZz2t+B+p/qJ7t65EtCLL Kh6rszNnz7HCQL1r2bKFJjCaaSWBfZpKMCdkJQZTxIYyW8s9ay6rQ5S/dhKKucKKNkEZffb6T8tk VZMDqq/klbqKYgivm6p/QvlmogrUmM+yErlK9W3+goXu5xpq4os7LLdqBf9yKZXHyLIg92PJ5rms VN99731erUUpZmJsk+rSzl3vSfjcYhNgrCeGnHKylVVWRqeq/2SFjXY96PjjxZvmqhs7NDnSzorb KxKYl2rih74c5RuaVQTmfVE1zTfKj76HK5WO00QhroPq0bwFCyREv+V6jdJDmfVS27rkogvEl7qu b8BiCdBWh9KwGo/1AJN3ON7fVRvDFHOLVrC2izZgTx9yqhUB+jhWOuE6+UWJGCIT5C4aT6gWWFlg 3TJy1MvuExgmlKx5TLhHNEWnrnDlU0v1nVw9Rl9JO+isfghoyuJ4Wdm8p9XYTh06iYam8le9FN9a tWmZ9r69zyefU39xUARN5JdJDNotK9W0uWuuvFx92jxZGbwpi4i30lH9+/mQOvddjkdspak6gmnk YrVNtmr069/XecJMe6CsMVBImaxjmwCTM3XrHqxoylXR36DIsCr7mlbhGFc/dc0VrofUGdot4xw8 M61OUqe/SynGNB9F81hNCPLEddY4iGULiv02TSZ536DaT5uWrdynUZbNpIjQf+TtKpkDWK7QllmR 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 IEAhIDNBnjlrjoRhnf167XV75vlXXJ2PSXU/1TmMXLXSjk1zCZa7ZHiIXYzhMojy/MuvePkSl8n0 6eojOnRo73zatXO38vexym+idjzGq58aqra11u/kvFE7721EP2qHrw590559/mVdDbRSbXizW+iE j/CaesAiFXUPwWKRBGT6hrffH6YrhN50QzR7tCCEBgDtdtuO7d7m3nrvfV8QAT/Xu5A/DPqwAPDE M8/7dTUYv1q1ep3qawMXPp7TFRtvvvuB6udGtyCNFU9v/xJU2JXCKu1SlRnlckCLc0sk/IyTZdMR oz/0OG3btNaVRo00cVIBZH19KpNKvkj3uNJF+KD+r1Yd3r17j9XRmcWJU3Tv7JPPyEDSArcwu1J1 l/ZGOXJs4TW1Ne6vpE9bs36d10UWZ1CvZ6ds+sxZfn3PG+ov6depF3179/JxaIHaIFoWtGmuEKGv 46jHaT1PUZtt6fUOfwRXrNsi0GHBHWup9FtcNzZS+XtMdXDmrLnex1JO1BsWRim7l1UOq9es1WLW RrcI3ljG97j7tlkL1RXVgVGqU+ykvfTK6744NkU78G2LW+s+6v6+oIUhpTXK29x5C2306I993KFd oOa9TVac6atWrVntV+tggClZmGXsSFMB6jFWr+mzxk3UdUxacEOAGT9hinWRsHvX7Te7AEdH6SOu GFtDi0sTJ02VJkeJ2vUlMkLV1PnN0uMUjQm/+9ODaj/T/E5YdlDZheL+2Bdffd3zzFUyGK9ih/ek zh1tlNr8I48+ZQtUP7eIj4sWL3FjW5QT5ckiE2qok2Ts7hUJoS+qja2UoHj22Wf6GM2icZUqWK01 vwqqWo2aNld99wjtKk4VPS9rcRnetNPYdv+9d/uVOQjMz774shYuX3Qr91icxcAW4znHGsZOmGAf qb7PV73y9qKyYteae0u535P+Lc3y4WPZHIQ66+c7NT5PkprzYV0R10t3NaNKTC8Dv2fo7s9Pxo1X /Z/kVxW98MprPt5gdfyu23Wnq8qJRSRU27nTd6rsD7z1zgfK91AtZL0o2Kl+xALrvu3atfE5BW10 kfri4aNGq04NVR/0kr39zvs+VnOXOXe/siiYxmJRnBqXf3P9Sv3SenZ4+yFbP3a9LXxloc16cLbN eWa+bV+4Tfdoqk38sK81Pa2pVZWAtnPpDnv/lnddcN2+crvtXLnb5j0516b8xxRb/Opiaz2gla5X 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 u9Lf/N3H0t1aeb3im9+JNwqvUjI8ZWrcvJtjM+6QRsRy8DjaPpJqttIi0CLQItAi0CLQItAi0CLw UomAJ9JMCFViimia+kHO88YiEWLMUcuLS5n4wzK7nlV6wukaGeTp1zS3qZEBw7LUbKOKkw7XyBif tnVrfbDtI7JuI18XdIxrv6jtK7KjdKHV9pDbZbGhXQpWArUjJtc0O0ttfGo7Z1nToOM8fTb4tazl RY5iPnW9FXZXGd+BqfERwgY0So2ZKaNp8GrfjD2pf5uuBbNwvhmUNoZiuNFRTx5MnzE9vf6yV6c/ /oP/O54dfXHlyljpPOqoRemD//kD6Rff9+40V6uScRuwVMo6qzwpN5kKa0wJ4Fa9dIik7xUXnq9V zLmRtG0TbcnSpUoaF+sW3U3pzrvuieTv+OOOTVN06y8YFG7L5ZZXVlm3jG1N31By9+0rr45bdfdT 8vnud/60VlPPSJde8qr0SuHztt2nnn06ffkrX0vHHXtMet/P/kysnEJnlfics89M//X3/lP64O9+ IH3gt38tHXf00ZFAEr4VK19Ij+j24ZmzZsUzsW99y5s1vtllfHqhkKLKB33h4Qv0HO0PpeOOO0Zq 3Hqbx4uv+h/Pv47ptmN+xSKcvAiKZ2JJaOmzES23R8W+HJCQbLsWgRaBFoEWgRaBFoEWgRaBl0oE 8kzRc+EYNZPFQu6iUM+9Rawfy1MXjf7WqVYN5yWQyB8o3FZZW6xx4LvvNjWl1rG3xu9yE8n18Ufl PWBRXFvGuNS1H6Yj5ztF0adAM04QJrKzwYnIWqZ2yg7B67fp9zfkfACoPThqZB1A+2VZsTqsul3j Wxc+BR7FQTF+TTO+cUJBu7pvPep+sf96BnPq0Moowh4UySMJlHKmzhnaebQZdqqexZy317w0f/78 9HPv/hndyvqudLySMN6qO33GzDIacGiirKIohbZ28QZcjWaSVjkPW7AgHa9nOj2K555/IS2+8x6t dq5Nt92+OL38gnPSAfvvp4SvJLPCIxA8H0qWt163DfPio9VaZZysW3jnz9srzZs3N5EkrxXG/gfs F+b1CGpa+tTT6Vmtuk7X7bVTy63KvJBoX91Ge/BBB6RZ8v/whQuVsB4diS3j3qoV0nVr10Yw+LMw 3L47VavDGbQESWNiJZUXF/G8rIcctUT4MzfHCvNVr7oozZ0zR8+hLkgXnn9e2nfffYS/NcSIzURi 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 s8ZnDhpkXbp0dLiW+uaee85QbbdtmRsAp7LdqLPWTz/zgr362luyXLxXzzdtgcqAQXz/fmf4alO0 jy1bt9vzL75s4yZMtPcWLvatiMO1u+BrX/mi9erV0+VJXWYA/ubb41TnXreVskh7QANxjE5de9Vn 7LqrPyN/S2+3UZQ8o7/xItUPdCpkOXbcO5NssuQ1c+Zcn4jprXS+8VdfsXOkNNfR6i1b91FUJ06Z ai+89JqtURtikuioJmp6a8vvF2+5yc7TahltV8Jw5X3xkqX26BNP2dRpM70vOKxJio4d2hmT5Kxg pjqmGqP/a9ets0e06vb2uPG2TNv92Y556UUX2FfvuE1WsNurPxAQdMVzyo/avV62qMyeee5Fe/GV N/2c5+uSB9ZwmdTqo90al158octr4qSp9vwrr7vF4oMomKq7Z4jvL6g+sXOjpATFG/mkvvyA2tfj jz9tv/7tH2zduo1K86QbJ/rc9VepXl5cqBvwAEf+SF5+vU9APi+/9oa99uZbtm7NBp9Q69ixvd16 o/oPtcnS0kY+UvSsORY/xe8skw3rtCL47Isv2cSJU2337r125NgRNxBH+V595WesRbMmQqlpa9Sn Pqs68476g+07d3u5sjX9uquvsEvUzkqblHoKB6RwTpw6XZM4mhTRKv1wbXvvoTPL706fZbPUF9AH cG72m391p5115kC36Mz5+mdefMVe1Hny/Xv321tjxtvSZcvVjmtZ71497LJLLvK+DTsCT+noxnsL F9lubedtrPZxmdr0DddfZ12Ub2Q+dsJ09b0Tbdr0ObJWPNQGKY0xYybYTPVh9HUY7vrBd75pZ8mi NCuiFRUV9tTzL3m7Y1LgrbETbNmqlaqPtaxz1w72+euusy27t6r9P6/2OdYo24NSsps3bWZ33H6z XX/N1VJKZZVa37RTxn9eZp9sDFIoooKHWhE1MmqA+k6FRp3wsg2QAl7Bk6pyQgioCIv3vNLJBxxH Igw2wwFLWPaBL6yWRjzPoAd9/OECL58udHjPw8JHhIEb8AEDTY2onXbQj2fg8c5f5ENefw8eqsYR /7Hu0yijeeY/LAGYiczFE8bzzAITLmhGfF4YARdPcII+8OEiHXAJz8MDwzt/IcB4B6+qgqkg5786 OtAPeGh4uvrY4S+4yFAhoODJYgJTLLHCdeBApQ8o2usMBpYiGdTUV0eOwR/8DBbmvP+eVeyqsBHa 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 2eP59hku38ezH/759jX83KF5Z11Yd/C4G5w8rlfYY+/1j1N/3E1w0dmf2voP/2af35c1xZ2vfT5s 2vex84U/nnV3y+PCH98bV/nY1fw49/O5P3zv7v6Tc3mcd99Rj7PG/4fu/pJ3Nc74jd59z5q/3a76 sdtxBw9Ob8UP3P3n1+3w/0V3f53bbv0e8fi9u9q9VF7458+ucfB7lvrr9fgGT3c+Q/qwK6L96eXb 1/l5Oc+7f/hfnD/pZ9/+1DLN4+353/18eHZE5/X75JV//ZEfs8umX4s+FLZ7Oz3u/uPseH/ah9Hr P+Hyn6+/8fj/uv7tuf/hT/7kT/7Tdc7/8nFeOz3Onf4qH1g4/+rnP9ieWA9HS49b7m7xr/LzjBPT 58FHXt3W+XdhtM0KHu3m/Dh2fXwvRrxi6yfy9bv57vI146ZL9EsiHa2FPYzZLrIPRLfnNj/1y1PL pzY8fZlXtddiF/zVB019XPVH+eDxNF/PeHcfeDuvF626Pr5dzS/ok8u/XKQV+GHrcc59o8Xr5WuU Pt3pyWtny01vn6t8eJTtk+4M+rvMy7n8cfnhnd71tDQ4NJ453nLDC7ydVRc85cXp1v+peurWn55n M/o8fR2b7x56X7t6Xucu+jhnpNkzm/NRm8P51b+K3RU/Lk2enm254UU85+n5wOXFwwqeZmHNvuXv OeOms58+/fr/3N2n+1bYh2fcajvvXM1vNbDN6xOOzxt3n9Pz73Ovj1rOg1+aon7nD/Djbblqczr9 5mY/4t/534q7/RZTO7fcq1hvvOfkyzs8TTXNerhrKmf0nPTN7moYf7wyzFmw5dCb1W9tzqvZyfmW /8PsG2/8Ubbfunn9/pqlMbOHXU/9yeNXFml7+R4Lv+Ot954XX1/e0KddfRwa/D3TLKzQr1/19g/i zRvteT7v7rdn5xeOe+dv1lHVd3qz8s7rC7pn9+X8ncURe+Y+T/P69vd9Elbs7qt/Tr9+tw9euVfh vPzhYesf7y5o+eLw3rs5uXf+66OWl3/nv2e7q3j0zas9Z32evjf0NNuvH/x8nvDCns/uy5n6sj3u 6vTOa75+6nIvz7b8NIUPd/F2Xr39zvluxi/DYRf06WW+s+brj8Nn5808z87DRbjngu389Fg//DLe 1nnr/V5pj3w20i/HDM+8/N1B/N2Ci+ib14OudrFqvYy7szBzD7i86sW7IPpysfrm+Hg4PgjqzX2g hJfzMN8aZ2f48ZxvXqZfrTObCZrFaPl4/jR4dGY0+rhxxFnHs091EYce3yx/s7gbdItV0/Dg2Ww1 p+/OTm59kab9/a9K9c67yq/8z/6Vvz3kePuLOB/BY7lq+dTCy+1anJww3tU0i+Gk3Wc+8eYivVgv /nezsOXilDv3R+/+zgtmDzn81d10vmeLx2PzqeVb/tG777zi9P+5u1/+0+GLR71dygX+WT+GH29x ivP5wla//YnvrPq8m3pY88K5ZmGen798as8+7YnRNit2biY/Gffvcb7nblZ9+p49bnhx5x9+6vRy HBHGx7Pe8ZYfDzccX8aVcctFX6/OLNJs8KC5m8Fw9Wl8L4TxWN7Wcbbf+pzVf098rweeHe3eGb4e e178Yu+Nx+ZX2sU7q+CphtvpQfrgwfLZO8Zp/pv+5+B6t2uvfQ7zsjuA6WX4Zs9U7pmKO/88imZF Pd/Nd3fTfD07qwgXPOrtdDcLWy5Oml969zxk/vaQw/c58MunRr/51PItf+vu84+zwRemX08zXxPn r9fJ3x5vs3PyKprRwJyjp6/fOj3OOeMrx/VBECbzOT3CcU5t3J7F+XH9td80xebq5Zqtz+m3Hup0 7lDNt/78fcU56VdXL9LYg2d5tbgvsw8gLwk3A4c12nqplg7beper9uBx1Kdm9dXbL5e+DI9bhNGd O8PL+6KzczMR1t3xUpvbhV84vf1wy3wWe8VbDs/F9my7N9+6Pi1M7Zuy+d1O4bjO5lH2Motf1PPG Dz9r3mbmfPXNhbP2F4PZ8qv584uXTr/8ZsKcHi7Tmevp9Ph2rq/eu8E9c9zF7uo4dsDnv7hZuchr 56d3PSz+Rvjd3Z8c/uulllejNqOHl81ObGdxXkWeP3r3efE8z98dm/FffPXq5urT+zzjg/pIvnf5 0/LCNa8/n/dH/Pmdmj2Xv91oztxOuOu3Xml293oa/vgnDxeOJ8Pl+GblfTU7w/n0tHj1ZmHm9r/z p8HH0ZcLXs/u6/7n/P1z5ee8213seac/TjmNZ37lH68Znv7Mq99ZdbHz6o3v8Y/vWarT+Gcn7804 YRs8cJupl1v9rWemK8cTPDpHXVbHq07TC89cvkafGnvs7HyOnVXbqdprPbde/62Xc3qed48b76w/ oM+v37nP9rT20G/e2nMu5k5hdtKX0+GZyyfvbj+cu5mdzPjKtGXP2WxrHB48Tw1PvOZn7Azfs+PC 6/va7rxa4JXPfVcTPw4tXXgBr95ZeL6bzcPUZa+r/MSr6asLZ53aZjB1/flB1HPGEfs/5oetD86J 7x52LIv18PyLVdtldenxZJhfp/Fp4uDJ8X8ofsmHUUu0VGGhZ/fl/cTrWzQdDxzfrNufnC/OX/Sw 5a5/c57LXY45D7w47Ru+fHdG18w39fLorvGnT7VovvcRvho8/s28wgoez+7pp5bjCPr9hgnzjRpv vfkv350s5gw5H/Oy2pzv8tRmafCbbb09b/x4POKZ39XrqabVuxu9vL6nd32Bq6axa5k/zmrwmxXN Tgwur3cY/7Re4cV6rW7reLvT9rzx1z+slzjr9VSXedGvZ144fMvrDedZr8bjYX8cvHrc6oImfHlq czkN/zCv8GL9eZa3PjXpwgre+Mvl82Ten2XGr8yLfj3j49CWaRbjGaaOt2H/sPOc5fIvq/nwLpuV N3jjNFvOWa+nmp/e7s6El08/2sVh8Wl4mMlwmY+Mtxm3rI5f3e6F/uQ8p18/B+zMafnYR47Lu1w4 u3p5WzcraM2c1Sys3j+rwnZeT3fW9cX6Vxc0/HHu5k/FT8/FpeVbv88ffnLCCns8u/v3tHjVRf25 e/h5Nl2zresLe63XyXt19yfv7E//x4HXG17Z+XIc82rRfPH6YjO/3+bdd4aXnXeHPXv33fqx+Mfu aZvxOnm80+BWn7yzx6c3L3s5M64wq6/eM3HKfHe+WvPlNi/wtn9Ovn7nHa/vwe6WBlMvh1dv72vC z24nb3uc/OjM5cXjidV29tnHC1s8T8G/Z14cX8bX73OGecVbn9XBeXSmGu9uj7AiLo8H8D1vPlh9 D/fkOGyXVFvm7Fv2vJz19TBh+a/PetGcGP8Tr/eydzm+nOfqnA/T7zcSz7R5nVy958KHy3mfYQav x9scvly8xfDdfZ54Zvo4YfX7rFf7iZuHFfrl85X51cPK4YVcDceDlYvlnmfWF3H41Kt5mjcr4M/u 63fcOM7D313wFotXv3vlTl9NFwdfbl7gL77Y4k/FF836m3WW7/+7fXnH3/qOi+MZ8XHtdoenpas+ w+5p14c3Pt7i+PzN7JGWLs7y/ZqNg29+Yos3K2jW/zl5Pq+7D9u98MPz4FO/vO093/KXy7O8eB7r r8eh43/O6ws8ujC+djKD07n31eAulg7OY/eKK8zj49Bvjh9n+eqyGq8Mswt/M3g83uU7nNZsPZxT 9mq+sf7w1eXPez1gaXDozOpPf5x0Bc6z+7InXfP1h8d/Vd95LaYu81fnubX9Tty9m3/IfvI8uzuO vPvD8iv4P7vnuxmdHt+Opwa+/Go4vl23r3YePi0/c7pyMzxzPd0+oxkPGmfyrKdbDU/8enMz3nf4 cs57cHbZXnd8vt8655zpzzM9o/P2uWBpt+bVHnYx15cL5+mf6POdpizo7QUvr0e1V/qTz0c+9f50 z37NC/xys7K6fw7ihxVy9ckPE3w8czhMLfOUwwt9u6sXry6a9bJreYP2Dt+7xNvsDjwrflnEf4XH Oc+l45GefzN+1TjVr2L5y0nbbON7/Jb/qH/Jh9EuzmHlHvD8werVcuGdWaapzmc9YRf8CNzyXdDy jRNWX/Av8+C5d2DG7yH+0Fc339nu6Yx4avvg0erlPRcnH/qztnt4dV+DPTO8SF80W6+wc1bv7LJv XP5p+FTH56E3h8vNi9Pfc+CV90UTxjusvv3EOQ93J3irNy+H4+7ZJ3anp82nSF+c++XlHml2563x HkbX293+p3/c3Y+GB3+9fcKL8vkK5ymHxVv/+p3jhOGd88V3FzuE0Zz+OOvvTJl/PX+e5fXc2t3n XfDZXZz/ZDzfd05jzl/f3Pd92Grr6eFh4u7ssCI+bX01D5zy4vGEWT3+q3q5yznxZsJsvc1kM9zF w3p5pmZqs33+5uJ77ibuq7tp5oxqEVbYo/rk6Xe3rWnC4q7X1s7iRyevJ67ZamDl/Ivlnz6ndndS r+b00+8ZYQWd/ESf77zTmcNibF3P/y7Tx6veX+f8+dWr49fD1iesKJ94+jD5Kj+DV4C58/jE2Rcu LX49TRzzcsG/Gm+1J25nev6rUae98w8/9WFF/t9793h57Tn5vPLHNffMaQrzap77e3Hz84VLWy7K 63/O+cfFC6M/8Tg75w87/en3nDD+9GFF/u6U5vR01vJwX+33MP94o6v1zDtX83T37WHvOPrdL02B t/6wJ+P57oNxufBsvMPo3I1ZvVm5nv4qP/er3g+xq2lmxzt98+V7vrLdl7M1XZg494PL/H2Nyq8i //g0snPN6dcrbs/ra4vzs3k/iP0seQiWC1JvblkLwhdLt32cXmGCzgwu59+s7IsO46PnRcsTfuZ4 aYsyv+VV/xwnPY06r7DFF/OFxDHzDR2+z2u35e3X1Zyfb3R9ey1Hb97MXN1MwOrVtMsxP3Mafp5x dc2LZuoH8PEGk4Or8yzDt77gz9kdt3mxmrP+1vyc3fVh+0z5F3L13kd1sc91cpuH3XGWi7fYnmUO Ky+3eQGTYXs+7OTU9zq58Qvzs34MX8zX6+482vI+E65snp/6o/xMJ9fgbgfc8s7ThLnn+mKx6l5n nNjJ2/lZn9zz/M46NXt+M3eDt88Fo9GvBoazudn6nTPasjrOahY/eTs7n70eduo6o1j91s/pl/d8 znlY0a7mcfZumq9u5+esfiMuPn/eeDj6Mzcv5NXzNI+z/4xcvFrw0rsHfRmGW+7l/MXjF7Bn93yn O2f6/JajTw1/On05n1Y237xa9bfupuf1bHzonGN+4vHDzOndobmMxwdf9kO7c/HSweKu//fsz58H P31zdbnXctTLqz6DFt5u37r7PZOmvD6dXcBWU23+IF1vezfLxTt96Ny9Z8XT462/u3dOHDp8GYdf /e4UjxbnTnuHtQd/HvFe+eCc56fhZQYrF+bV67+e6jgiXVFe77h+HjYPW87i1fz3/Fd43D3THvx5 OJN3fmeYrXa9m4s4XnR+Lay+uvlmurzMzLcP29h+6+V8s94PLd8kznAP2jpKyxYe3PJhneXyVhen V5pwmuVc8GfgAWjD8zeHL0ZT5l9Wh6cv7FFu9ziwq3wEXfnU3fET4T0Mrjf+5a3pnak/c/MivMi/ Z15ds7Bi9WF0zZZTnwd/efE9o1/Uvp/4rD8vPpvVdjn7ztwwD/M8Oz/r+LybnX2Y+XrDw2jO88x8 XVePS5ufCEuzHLNvZf7pVpuXWZn/euHLzWjCCn01rFqc8+1xNjdfn0zuElkAAEAASURBVLOPa356 hYfR6NMUZn9ed/889flul3b43rtPSVedtggr9NWw6sKzPruvfWCb8flsD5PT7dn1zU7NyTl59UVa vwc8gI83fq++750ZPa6v64f8M63/qbnTxTnDs5jp48Fomp3zV/3JzePkwvac1S0e91sRd/1xu//9 voSXT38e5f09++TRdp7Z3dnnTJ/+5G8fr9diavmOk28Rp9e3zsNbDqx84mGvIq694ujL6vCN8A28 8t79ctTLDXO23BxnMXpYvfOqw2nrz6DD0S8vjM/iZ/0tTv6/NNKud/UZp/9qzt+v6GXcPLfeOXwx O8DonReejhZfpmt+Bk0cPnHgy/+WD83uhM97M9/9fq32+zW8DKenLTsjjlhetec+ffDCl6Nfb1z3 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 P/YM37O+5b/an63vDvxZ0Q2BT0tW9/KQSw/HkZufGv0+tNplpdu6XtDr4+3ZO1fbhye8XJz9K56z nqovO/Khk8M7W/9zenvw51u/sxM3X51njrt1nPrdK+yMPeOcbc8/jCZvYW52hy/f/C7z2hltd6tu Hrfv0/D9foWX16+6WI8n8nxf7uLfqlfzc/7rQyfvbOudv/Lvecxo6+/uxvwu71nm7uq8++bN7u6e Zv3sZ8ZfPrmvePjlUxP2I7rVpz1j59XFfp/Vd54ZfvlH7p4uv431XnxrnPU46/iv7uXkvuLtmafm W/53Ovoz4y6+3p51sbjL3/2Xz/vMtIvzWG/zV57rc9ZpefKRT+4rHn751IT9iI7+zPkU8LOud06c P2vw4JmfutnuYfab+v0mP3GeAz/z8qoL+z67Z28Go3uV8TbjLuas8/fiuHe/36zHWefLb8+oXu7O Tnz7s073yv9bnjvb+nv8Oy/eBl35/L17eVvTLOZZ/te6+93lrD1beHVh32d3/+455VeaV/7Lr+az p+Hs3cPusrPM8korto6Dd+J3/emNI/PjKTc3u9uDfmerhcPKdrmbLeZOaZu9qunK/Dfv/K5e37v5 N7HfxJ+Mtuy+OrC+sFy/AHEeg49e3byIT/sAPt7u9I2Wz3/1fMt9wcs0eOX1X/waPaJ7ggdUrw// V5z1X311kc7rAXy88Ss7b+fVdCe3GY1ZvdjZiW9Pm25x9d08rLnZ+Yut2c7x6Hgv55I8NGb1rwJn fXGbmZdxzMvm9gnbeufNCpjfeMLW23y5zfdu4izvTm9evpvnH26OH15sv3oac/o05yzsVXge3nL8 8252xs/5zjzxnZ8zZ+/ucWi25m9WVsfb3eCb7+Z0ywsT8Hp6udnd/s2brfZqv4pm8eh50prxMF8T M5i+rDZbvZkc524evpxqvRynWH39cus3dpZuezU8He+yGq95AS+fswdh3prjBVef+vB4hZn+iX49 3zO3pk1Dv/luzl+Oc2r0q48PV++82d38xGnL6XmU7/TxilezxU/eK38aZz8O+Hgzg9XD5GarXbxZ v+6+NY/T/M4btnrcdMUr/93j1DRbrLqXWG3+/YxSrAaHTn9m8/TnTI+jX+7W5nIz2uVVF6/uplm6 fPx8xnNz9frTXPAj1v+c8bnDF6vuJejq9+7Nyzh0+jObr+YVB77n0JmV1XjfOuNuli48n7I7lC/o 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 p9758LLYGlYO70ULc7ZsB3OZbxm3mXjl35ymfPqHFXLz/do5q7lX/DNWn6Z+tXvu4mrz1XXG2cdb /+a9ipP7RJ84/8WcLeOcnvydzUNuTruY2r7ra1aGl+/uPu9er2L1ceo90zlbXP3K/85n/XkvVl3s M7+6m/XH4SnnVS341uPIOGeml833TNhmvvKeHS8cdnqb09bjVhdm9niiX3yXo5adJ4fnv7H+OwvX 49zlvMLF7o/f7rzwys3DmxfrU++ZT7xZcfo7A7/MvwxPK3jUL4euHexHg1tevVo2Lxd5bvA+8fSC 1+ZmdlpuuB4/3umP5xn1ZZGOB2yzGX9n7Pn8y4vz4VG/nPpmefc6Y89aX36L0Z7+vHnh0davnzrc TrinN268O386c33eRTiPev68zMv+WRAvDW79+i/eLK65WXm9Tz89fb36o3z4npief2c4Ow8+8eIU 9jB7le2eRh2Xf/hd9LN3dxfXmXsG3CyP9TcPL5p51Tv/5DUL62ze+mYFzfo9J180+h/ODv1h4SE4 fepbvPAAz+7L0jR7OfsN3LyXeXqaMv9wOnMYDn4fvvOLT7P7hcXFv8qvvjhm8VYHj1/wX47zZLO0 RfjW5s3g8npUL1cfhpeOFl4uwu+wx3DmZ0/vT3t3Xr1fNzN5dwyzm5x3L32cYvv8C17NVqMuC1xa fjJe+dX+uM350dWHO3Pnu1/zXuZmF/T5jM1f4Xf+p5b/uacd4294rnTOvpuHuRuasNWoy8Kzpi30 6/GcfLk/vYz7yv/P8+7tcrdb+7lnzxkPRiPzcjf65lvny5vWXdSry4I+zLwZHK+8usVx6ZfXTG++ 2urlmMHSdC8Fn2f3fMczr9/Qn9rV4aRbHjwMHgaPL3B8PeOE4a5+6/T7dT11zQVdPZ667LyTd+cf X+QVp7y+zevF+sJWC9tMf/o7x/zV7uFmfGn0u9f60pmbpeOxd7P4qXXWnccdF8/Zvi/4OKt5L7/2 5fQ0PNIUdqfVP6fPd5jn4xWezly9Z+DS4sp7jq8r7PRvzg+nPtyZ5vzPndaT5hW3M/Bx+TcrVhvH PnJzGh7pilOrf06/zOvdTZx8NjdfrL5wbtqCv/xEn+/8F6vGbc4PxzN6rp3vfs177ZyGfz1N/ovj nvqTYx85n63redG6G+efnHAcs3NPf7rJm1e5WfnVHs1O/7Bewh/Y4DWzg7Pj0qz+rOPxqS7q8yvz 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 vHwKGtn3vec0E+9q8/LlbI/H3+xmvKeM26x6+yc+ntk9G47Hj7ee7vKvbue3ziufYv2r/Zl1jnM/ yT/4TzWszPPWy7n+zpGXe+vl7FmXt/1q7tnveLxp6Z74uDt7quPlU6xmceeEbdx+Z+rlVG+PI5vd bP6UcZv1O2H7J37Y5dRf7PJw8NyJvHzcsILm1X19Lu732WJfzF+r3+Xglbdu53d7dxJu9bvA4b19 mvxv4MBp9fLFfa+rt3957245avk7/2aXh7/5dzl45a3b1+757mz7W9eL1ay/+Xf+OO/y9ft37/6e 8+Qfxztd/vZ/lrNnVd+753199TJeGVb27Pzd3dMt99bX73fvPp/133rPePJf7e5Ox0uGy/C098+h vtx8g668dRz97hO2/6dR7gYfl7bsfJzvMj8+en72L98ZDv/tw4oweNluZf+O81F+3pPZ8p0f5ynS 4OxZyzWHrSasOS2uHG4edwNHNrP/xc3/lvyf/suoJfuSvMj+haB5uJm+y/2/Ph4Xer9kF+pL+M5/ tfzT2+NpHm9jObtrHDPv0U6wO/el3hx/d0pX8MQPW//wOPT17kT+gD69797hxXqr7V+/NX7euHzr q+G0+rQF/NV9+dfnW8ShW8/P4XzsrDq9fdXhgn85/2Y7x5Ob2SOseu+6ejm4/icW6728vPQ0YQVc /Qmej/aPd7l58WvmfT/Kz2hm/4A4ApeHe6xfHv49Oz1v56yOv38Q/dHvnvXvTJ5bL6d58Ud3733K NJ/Cj4/1293N4/cezS53/Zp534/yM5pfzY/RTy6PP3P3PPbMamflKdwNf/h3mf76X43dw50th62P Gh5vudUbvOkuF55mZ+sBL/cUdPzD3E0YXrjgoy8vtnUz3k9+y9067u/G+ts9bX7F9br9i/X6pFls /XfHreNvr07bTuWwng27OMP+l5eG563XbznhfJ0Pu/509sFrn2Z+t4VvxN/fB2b86uPk8/T7wN3E 253skUa9nluvNm6z3WnruAXP699s96gv9jz+vitnLmf9w3sK3Ff3+qSjwePfjurVxX96N3649fE2 0v7Vu1+f6j3PWXmryz3Ce/rn4J3X46S5vd2bVdPTyPducNMJ3jur3vuOI9Rx3CmPOFvzxOOx/upy T4EPs0u98z+JPz7oatNe/mpwu/vquD105vLH6DP0y6P3znKCePWe+v59h89H+fNdmgn+vMqCttzD e+vleq/1aB7Oa2uYnM68XJi9ur/58y76N9v/YrdnqZ9eLqw5TiZ4cF+uGU19sZfXTN9MvxpnyfH2 LL28vLsLnXPSFDSb4xQwdT19f3D8IMPiFXhqfVmdplqonR0Ow7nZnNf29DvjDYsDu9769fR9+YPa jJc6HSwevbkcr8jTDs2ud5xwuuU2c9biW/Pk8c6fV7m4Op6v6eszTtHs3s3n4OPDufTl1eE95eVd /2a8qt01TJ/vcu0Rnicej3B8tX65zZy1nuFFGp5295cufnjlgg8dD/iL9fpsVjTj334bVx93dZe7 5+Spp+Ff71wcuZl7yh9XhpXXY/Vbxyt45lPEWc9P8MfH3T3uetKuZud7Fny5dgizw+XtDvH2zMvl wa9cLH71689v+fTlnddvpPG9wsMErb58zzFb3fLsLuOXF7tn7YzfauyxOjvc2fbuDpZnUb9Y9bu7 wXO2Ph+xWPWNsHf+fK/mXZ8Xv96v4B1+77L5Ys7D3Vnc8CL8O3/6svPTFbS8y8J3Us9j53CzenOY jLvzZu1TxjOPX4QXi+O+Js+fPPP/nbvJpTPuec7aWdzl/Y5//P8v3X131J3duwkX7rbe97v3ilfG 9T24z/LOrsb3/38+Bv27cT2PuGrnl/fnHiedc8KqC7r+PYJuPbf+FPz4sFdzT57OwW1WwJdr1lx9 d6Btbv+yev3i8jEPK+D8w+IUdnt1r0/8xf622sF/m+GDUWf07Mt5KeeXYWWX8zT/GP/kNscNv2G2 /nHCN8yd1w7VnuVubV62PwyvvuD56r68r/b6mNPfd+LPd8/ynuvZ91CY8X+hr72WD5fN6PU7z9Ne O3fWzbRlfO+5s507A78ZX/Xyqzcul0/5vhusTFcu6F7dq0/f/P7M08flU1089eE0ZWfd/eIVuE+7 8b/5pXx9rr/6aZ4HH/Ptq4snj/DLXd7VNvOzQHc5eRa46uU10/OJVzz14TTlnsIur+7rE9cZ+DGe /HfOJew7/3hP3/36P52fbvdz9uriPGlxbo4v+O1u+HGcXb349nC5mVh/tVmZf9piOev3NH8pXp+X y0fe99szzXO5Z5iF31m93xFmedBUh7/r4bRyeLXf9dU9cLoP6F9wvGZ4YcXOXsiXp5lsvn11wVcd fmf17iZeEbZa/eZ4OHLzngKm3hmsXPB9db/2fPjK4dX37nnQ1fO/uRkeX5xmwln6y9meD9809HdW /3T3i/HezFPmK393Nk254Ksu08t8Zbgcbrb66vB4NzdbfT1OdXHnYZezfXVBpw6/s/p7z/EvdneP w9+Mt1l9s52rywKvnsfOaZ7meOnWJy4dDv321XhP+vVZPQ8aHvjlonss/C7Xv9Bf7znMPtW84eXC 2esVtzC7mVe5v/QW7XQ99nwecemrBW4+1XHyKxc0fO6cBh/vpf56F/3fmv/ofyr3dx7WC3rJsh+G fWFzl+JSd49mtOG3D+PfrKco73/DuGd9En58rDdOo63j6POtLof78mEf0C9xtQ15qe2wu9PB4m5d X9BW2yWeM8pxwujNYXF69g/GR/vzHdXrH1Y4Jy96/vpP4scHXE9bblbA1PrmV1+/759GpKMNu9ow nPVe3q3TCN5y3Bu7m7tbThqc1S++/uo8qrdP82d63PLVfkA/vczDCrrd8TX5+oyD94X+Wu3c+XLM W/+qfnXrcefuNfzfufv2KPas6u1317j1e/6d05bvLP2dhxXw6/+avj5x5J2pd+Z8Oc67evXrAZe9 ez7r1by+oN95NW3zy6WjrV+9nkf9je+0cc33/HCeu2P4jeXd3eLm2+N3I849L+4G3vo3Tyd4P/nH yaO4Z/EOzx8v7o3m/PmUN26/s+/8073zXI939d6Nd1ou///W3e/vHXfq/exlT/eKZ755349PeeP2 ZuE0sM3mMHvp/yjbzTvfPfj/p+7e/fG3R3u70/v+3pEW775rOu9nRqsv33c28+7f+a92vd9peJft hrtezZ3vf0HEP7xa7+5gq4XRNCt4N189Xnj70X+Un1FfxCv08gt9P+ePt5nH7ga7PBy7v/u5MafP z72H1T/ttP7V+dDZ6ep4xTODfUA/g3czXg3vf3scr5Bf3b/uAS+v3+J/W32X+duMH4yc5aX0UavD 5TCBJ8fDheGWzX1xYXzxL2fx+IUfkFf3+nRuXRq67eMUZX/5Xa75Yp+CHx/N9+x4YXvWD+on7874 8zCH6/nxj98MrzMuJ+zql2+22tXglu2Hu7Mw+1QXzXvsFHZrvzj2Dzgevd571+/Z4Wabl1fd7Aaf 9cDxy2tn14M+jVkZLpvVq737aqsFbfn/LXf/7m4W7/3/zrv3c/ln776dvvu59L3c3cP3rOZPEae4 84vzh6ep9l7v9PF2dn12FrfI1zl/h39n7M85//Cn8z/gz7DDcnjh8OAJr6eTzeQn/zvz/otf7+2X p94dYe/ODl+/tHo5D/fp3fCaFcvdPnyDPozHcszN4pn/0d3ELXi8ui/90yzsyR9Wzs8+v+ONu95X 1+z+vgkrnLk79O7iyf/eTVzf2eq2Ni8/+Tu/857OtKfZ5s6hr252w7wZbRz4k/964IXxf/IxW613 X221M3mXn+4Gt3zvPg2f5sXuUO38f9rdt2s7Fe3Zc9+lWZjwbrjh5mb6pxkfGbd8795uOO/unld5 d9gd3T0vM73zy/t857naamenKfhUmy1W3V7N7HOzOf/NH7Jv7979OTu+cA7O3i2+Xeth6eG8/mN5 D/2PHfLDuAvoMvaHsNHThdur3FzozVe7f/HDN6/nk9aXwa8ZbPeDpxc0+LtLHP7eNY/1oYsLTxN/ 36FZuFm5gDV/ivVv7gz78FktL9ynGZ18NfXNeHSeMKvHKePwlHnTy6tdz3xol/Pkn261611tVu4u /aeHzZzRbIOmuV1geLT2g8fDxWl2dw+72jBh1s67g3kZp3z9w4p2Efj16s1PHt7FDteLv/N4l2nl 9cCnx1l//KeZc3Cch8s/PE6xWLWzP4fzYfZn796fVfqx/OW+w+2Jc3fkUd53jG9m/3qh5o+jj7ec +p2ZO/NptuevFy4sr6f3Co/7FKvlV1ancX6Z/737d/z0O6vn4Wz+zTYufn3Mb45XtKOA1fNJV9TD PoGPDzO9vD4w55vVr/6d/z0zPx7l37njNMXy6+20Gc+5ZuE37owGz7ws4myYLc5nZzBas/L+uTAv N6Mr9xTh9PVmi12tGY/y093nF5e+vlh+vbmcl5953HjOq34XcfLZqOcNv140i/PaGYwPXzvrzcsw 2Rn1PSL8nT+tvJr/t9390/3sz7U7cxfufu+kunnPaqvjF/TVe+97PhxWVj/576zaGXR2Dd+gw2uG Y+bPBE96c305jL7eHfBo7uemeb27WW21/il7nzyKOMKe8ur37MtfD7O/PfeXn/9W7BfhTNjN5uVm PV0W3kf5eckXC38XPHbOL59C7/L3C9pZNU61HxqcvAo9/7B0Pc3M9Tz9gH5QfnJxYOX08PWC4cjh nrCt6eFlmBzfbrB4xXpVi+p9fzi9vHqcm9d3ZzyeMLPVwpZfHWdn+sVoFlO/44d70lffyGPxe2c7 i+vMfMzKPbyWE0/AZTrzp+yMnaXncfHtt74avvZ+x8Vr/nQm/Z2F08p7Br+dvduRbs9YXX82doa/ 2VxO36NfrnrPgMV/0iym5v/uZ8r85tXvuWqZDn/xZhu3T7NYvSd8Z/nsGTur3tl919XirR4Wb2M5 8LiXv/3WNOWL2/nmeMttvu+j3t2W31lFc5zNuGF7VjXvj/Kn/uLNCp6v7tdPZ4SqZUznL8dMdkba p/pq7xl8Lu5snnr8xfdO1Ob5Xu88mvO8ubmgLfNutvrF6ZoX6/1Cft1n/dWrq16cx+XAL3d7tZ3S wOjL3u3pHeIvvu+upq9/5985RVyel6svq2noFm8m7PhuHs+srA7nXb14vVgObLnN3Udzs9XB6MvN e8Tyw8zK/PPhFX41H9Bn0PbPQZz7z0QcfmXcsvmn4fm4c9r2pJP5Z4FXfef6ZoW+TLde5jD5U/xD H3bx5mk99cU77s7i0FW/+7lPs/tV+w6bCbuZ7f3FMcf/r+T/5l9Gu5he0ovKvWi1S6wX4feHuRm+ ucusF7de/3d12rxoO9sX1qxo5vkEHj7yT/dud5J4vHYn58erxltOs/w38GD6q+N/5/Xr6b8VDOeR 1nutfvfsfDM4jE8eann3ojejXw5Mjms370H/lO12Z/mJd7O9G9wyPqzeOX5Ol7fz1f6R/77f+vN+ uif+e/dP/N2peQFT39zc3f/R7mlFup6ngJe9Y7zf9V/d6p98Yfl7j8XC6z31YnlP9Wq+u/v84u6u i1UL55TzLPYc89fk1xmMxs/KxXfOm69M89R7D5mfHH535+M7WH8zGB/9zq9vnMVWS1e2azU8bAOO c3NcHLqnfn2b355PeLs7Z/Hq4nf8l7d8vvKn4Y+Pi7ULzL71BXzri5k95bBiNfrPwY+PPS+o3wfF xV/oF7693d2t/vqE3983nYNf7ecqbbHzF/L63P3UaXvscfl44XHqe/b8j/bnu6uvJ593OV3B/9X9 6rtzPv1/NLWXud30ZZHOvGxP+J7f/N3dOz99oefzQr8+d65Oq4556+3bpX4x9c3e6Wm3PYcuTCy2 dXN92d094WEF/qt79ekKeu8VFp8m/N59nAKnzA9evxi8XNDeu39Nvz7x8lLvebAU7nuxuzvtzelX 5zzYU+7f49af5um9zfhcjp+Ru0f8y/V3kfVSp49PI+8c52Lw8o0n7uX8Lf1/8y+jFu6SesEeF1aG d+Hwj/KzNlvcv9jvrFqf9kYzXyjeaqr9YKfFsau+mQgT1duHr6az+eO6C2fo026E+75w96ywwkz9 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 jnHUzYvV8V/sxXp9wsuF/tX9a49jzr++enucMv/l3LOW/1Svlueexw+mx72eePDtn7QwPL3Mp4zz DqMpP4V5Pltf7p5T3dOfp8KM/oX++okTapeL1Xvi+fNaXXznvzM1//LF+JXNccIKvTm/1/Trveub 3Tl9+cb1xL287fmX926u15MGZhde4c4Og/PX4/CRm5vtPxue5rBy/svngaNffzM77exi9OUbq2v2 HZd2/d1NM154m2lgdlnc2WHwxdLq+cj49dX8zctPWvvjX46e5z0n352Zw+j5x79B80fceJ64+M7q XUSYd1sMt7yxXjhh734u1199/5mYPy91WfR3oubLsUcctXn+953iiXgb6QvZvLx3hQPHCy/s8epe nxfj5yx5NdVXd+f/lf6f8pfRXtale3EX5AJdrLmcLk4PDqz+/uB+QJ/cMh4M15nL2f22juMHvvN4 lsXuFWYmLy+spx1k/njN7IqzWDy9ur6Hv7tpHmbH+iKsMKPLo1h//eVsTxe2fDv9gB/T1a4+P3PZ Gcu7xjirXyx+/c554NXf/fV0Tzu98wlfb/1iT/7mzlxd/LsDDzn+u7jaeHR73ne8600n84sXVpTN P4EfH+bfnUd3OU/nZHt5zrPDnqmm05fXx5/PxVZjl9U5V47Tw2vPWt09I/0TFk4nx1tfnPINvCdv PuubfjXVHh4yXhpe1eJi29PC6qsL2Kv79f2XZ16Gp/2zd09bLu75sM/hxwd+PU317+yPt7qwgt7s 7qEv944FrJquWiy23HfzcBp5sep8CnP9C33hznriwNaD9urC1z+tfn1g9Pzwce8c7+L86OOpf+fu nffk76zl7HnOopXpdk4H41lW46wevyx2vlr/nhHGyzwtbPXhOPKdxykuzu+et7yt+b/cvs7VL1dN Uy9g+s10YXgwGV5W88fhaa7fuVkYfdjWV7f6Zjz2ZzXc78ZqGtx3/cVXaxZW7J793NR3pvqj/IVT n4e96PnK8cRywryj+Wbcm+PA8OtF5/aIaufE82cCh5d39T70ZZxquuriXR9uL5zFPsX/q49/0l9G u4N7QX1JsC6xZzEzF+oLhvvC9LIvZL2WW93z9EOCVy6WAwvvrD1v+63jFqvV09dXO9sP587N4voh ri7i9X+D4Yz6e1cf0C/+3gtedl97Vnhx/ZZj9xfz6170yw176sMK7/zEeTG+vhOa5W6NH4a7mLPC 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 f0D/EmZ50vDRXxG8jBtnaxpc/hevjyO6MxrZ+77zb94svny/89XuGfCy+qP8DOfv3eM08057bsL6 Al5NVy3Mm1XTmf8j8tPi/4jFPpa4X8C7vVywjOcLKPuSl6Nu7qy04QW9HlamNdv+6YfTnGceorNF c5xyYfdX9zWvj7O748h3P3jZOTj1i3kPGjN92XvJi+HtfnkUYfkXe/7WO+NP/yn8oW2WF8/r4fy0 6o/y57tW86jeCDd78jfPm7/3yufO63Gr7RNmVi5g6jKOWo4r1HHxy/byHvHDi3dnNVttvVgtz8Xi 7ftt3Qz3O3+z8t0xDN7MDh/lL97NaLe2T/zwIr8CX112llqmrVfvbtW/e/c87LHaZsJcf/e983h2 q27eE0a7c3ezM56wD+ln6OnXO8LOq/PeWF04/lMddv3DCj523/drrleX96ztcXk2E802eOA27+k7 x93Zaquf9Dhmy7uzJ+8935zO/cDf7fvd7s3oZfydOfNy6vHj3B5WLpr7uXnH5Vf+7u53zqtcdAat WfjW29Pt2TC8coFTjeO8ne9ZeLRl2PqE97Q7Txr88Ooe9Uf52ePyCC/q45fNnvzN179dhHn9vV/+ zdTyYupyfnGK6mKxevPq+74wO/K458YzKy8/bk/ehdr7wcrOxykX5Sf/ZuF47lymocetx8mjaLZz 9efwx6yal7yYurx6tdxc8DGTm2+9PU3Y1vhh4mluVsZN2+N7gccpmhV3zt/Z67F88/h793CZ357f rIDxKPeYX044XzlOsToz+cX4Ok//j8gt+U+Ou9+91HZ/wuDN/N+m9SUVYd9plofvB7W+SC/2y4dt Xi48TT+4tPnXb9gRx2z9zHBxbsYLv/rl8imrd74+4U+cMBG/p4A/aczvPX8Kzwcfvmf8bWv/dzsQ N3/ahU5e/tM+zsMrr9Zc3tlqqvnHKZ64Zs3j860vnjTwp/f9FM0Hf7vM6Gf57oy7y+0ZpN9d8PjK y7/7XI8nLl/5+tKU+ccpnrhmzePzrS+eNPB930/ywwd/uzxQ/uWMd2fe3XjF313w+Mj4ZRzYE6fZ 4jTyzvjQtI9aTreRvoDzfaG/ng0rp9v33dnW/H+Hm+7d+/B8t5/9nYd/M//lw564YXGdK3+n4S37 59X6757x+MrL/aPaLlcLT78zuMz/9nB5PcLww4v67+KJD7s6Xnk71zlP95l+vWhgerxyEb6zT/BP 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 u31Dl3feDV6+1QW+3h5msp3qxfncezdx8jw5V/5x7ZSmOp2d5PUP63X6P6Bn8KhxJk39d3efzg6r C99wflg8cXX3zTqb3/o3c8c4YXG3ry7SLl6fXqSzm71ocWS4s+zVnNYMtpywPPiU49OcHrTnfPXL eVh9Cn5xaJYQXvB/dX+jdw/4N1r506rtf16+L8Un4g9e2H6QtHsPO/cBL3b6p+0H4upLwtc5nb9x 4nsObb78/eCuRzUuffncPc7+4PKlLafjsfgDfsbO8M3K5jAcXjs/Z6vH5yOvPoyHZ8H7Sn/O8uSz +nC+Mt7pUe+zoTt33X79nLnz0385zXrhl7fHhZUL/OpztnN8mH71zTyDHFbgv7qv3692txtfGX76 1//O3Z/6Ntxne3eOXa+eaPXNd+f6nV/5m+9ue555XsvhfeUJi1Os3/an91e88+z1qb6K0z/OnnHO d4Zbvjp758tZj9M/3sZy4bDVNjt3WN45q2+Ok34D/i7jmutluOy8navL5vZMJ2D6svnVbOc0J4++ +TmjP3HPstp3/u88wvPNg5++WQG/yn52X8zvdz+9+dOXccpF54pzFm6Ojyub6+1cbmb+lf6cpbEL X/367+/a06N+5/bhV7ZbNV/nyM2K0z+MvtnJ33l1gcOL/moWZo4ftmEO8wwy/Cv9OcszbL31fGX4 6VH/3969nc/z4Zvtao9ztv3uHJ7WGc14bY5XfOXv2T0zr5fy9f5O7yxzfVnww5Gb44VtwMvpC1jc PhuxfmHbp+Etx+FVDV/s5NT/rcJ/yfhbLX0s2wfiw2+k9oEtPQxe9mFuvfzm67/6eKuv563u/1G6 fXwRzdM5k+d5Th546rJIx98ezfhWr2e9uynTwJrTlgvn2/+Ffmh5wOn0m5tdzU+P+sXS1K/2qn9Q PvHWo1kBk1/o6/1X/Je/9ennvuwed/2b1+88Dxj9A/oZy303/0k+Cr5gZ+nl8H0WZ5YFLd5mPBjN ZjPcZls3P/srPYyf3t3kYXblt3PaMJ8NrIybH89zXt8M17y+l8DRb15vPqc2vhntevKQccqw9dya z+nPg15/ZvPVn/6nRh/P3fMxq1/syn/ndPG+O59Opj2z+Z69HPMwtbP1y/8jdX77bFf+zpZPDrzc zKu9qs31sHKx83r4d7PlrS7cn0vVp3/cq4jnZ745f3r9O+05P/tT1zzvXtV79qN9hrNlmoa06mZe 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 3Zjl/+7M+LT4YQIWp1c+YTwf5RMvF8tXvyYfM7zmy+G/fOfiyeHVMlzOw7war3rjxFffTCy+2Fcc syttHubVV5wwnOruXpwzOL6+/M4bnqZaT3N6NcfdGZ186mnCq30X8dKtNrxY3c63xlmM9mny480c H2fvFB8Xp34xePmcrX/zYrV+fsLjijj19lmf1eMvd+dbr0c6mnIR1wsWvrr1a6aPg9fO+/tAbZ7u Xd2ssAf/sDR7H9VhvE7u9g/az13Vzmi/av7lAvbqXu+n53n2ztU4ObibZr2cjVt2/qP8uVM1TnWh j+8M/ntPT/LBX616eWGL588zXrM99+RuH3+jmZfn5+85mpvRnp7LjbNzNU5zd2OWfxhO+J65+GP0 KXjE6ZUPvXsKF8tXn7P6Zl7m/PXNnXvFNS9fBTwP3Hf3gCvzo9VvPrnN8ne3zsQr9zJ/lM+A62W6 enuEVf/rwpft3/bgPuyy2pe4u+jLVJxfDFzZ3JevvleBU84bvrNq2uX7fwQP6xXn3We1/jx4PmTP SLtYPLtX9+o/TNiRj9l5dngYHt0D+hnrX+31k/Ao0odf+dPHd466mdrdXPl75vUKE/sczqDZ/tyP 3tlx3/FPbTz70MSxP6zc60ofhvco/yP4exbeS0wffuVPf55Dk0+157/y35ldwzZOf/vil8/96Jv1 ncUNd2bYO61no8s/rIC90/PEe6k+v/P3LFd3kz58n58n/Tkz7zQ1jzCxs8XgYemE8/TluHsv58y5 PGXa9V+tmn9nFPXrkX49mm3/aN9G985r/RPATy/+8pqH0Z0e/PHx4LTweOez0ZaXx8Pc7NzdPPyK E0bT3RT17/zD8eOK9XeOWTnMi/f6nDP9elS/O2f57/zTm+GXRbN6e6lxynHW49H+fK7z9w0+PV+a sudZjj2aF83iOTesgNPKr+nn5/jq983OePguOOfciWb55372iNvMs4bTVxfNF8sXv7pXHGc4d2eP 8c/Ax8vrjPVvVs8fN/1XOH85HY16n//cY2c8wkRYO5V3bvd4PKrPWL3Z8s3NymH8q3HcTX2xsxfy esfH25mav2fN+7yb9GHOpYXvObRmcatxmuM0K9xDeLzCPrRm5uX1OfunyY+3Zj67oPrFaOFxivWv dzcnr9m/Jv6t/8vo+QH7QvqSyPGq9b5c4dWFWRkGN6tvdv7QLe/U1qdfj/1BguOt/6mrb46rf0A/ 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 d7MYKr93/nD8srNPfxzz+vXn9St3j8tzM/+T4yxz58t/9t2f59ux86/uJv757HHDeZ3zx+hTeLb4 tEswD1uO+pwvr/r0pGtW0Idv4Jk3wyn/FXd/7r77VdvNrrtfs53/qhaPtp6vmeffXi2nP3VmZf5x Tu7v+NOu3+/4v9uRb14b9nVeM1g/I0Wzc/4czJs57bmHeRIz3LBzbhaupls+jH656uVX08DxNjcT vOuXow7HCTvDM4RvTU/bHHZ19++86cpnnN7mzrmaN/uzfx907rv9z9/F7QRLV9iXh97+8Bf79W7G 6+SYn/54V7/rnZsmPW79GfxPDg/zdDjlP/vueV/td95NO8Hw7ctHb384ftmM18kxj8uvjPdvvHt3 cT57d/Xd3aQV7nbv1axsXu2+1c6qv+MXbuD+P9P9hUv6grJfQF9MOZl6eezMyv2i2Qgzh9fn4wds 51f+ePSbm63ebP1h5Sucx7vd8z9neXkO5+fNPz683Ov0gD9Gz8DncYXDZJr6dBunf7Ow9f9KH/+/ uft061tf7Lkv5OUf96u7OZ8rredwThz+f9Xdf3U37WW39hV2rN/51TP6Xn4147v5aq89F9eOf+bd 29WzldffmbuD+l3Ok1+crU/N6X/Ov9Ob5+NZ1oP/1TzsjN196z6j+j1jvU+f+qsz0/PCKcP2TP7N i6t9l7O7vRQvzdX3a+enL59fwfd8nnKz7852VllNXz53OGfN6Za7dRqc1Vd/t9/6XJ1Ff+Uf3/w8 t9l6m+dzpQk/+fHC9uf10T7jq1ma9at27l/1u9izXO0fZv58mB+9HcN2Hn7G1R3iuBt9en6yWXnP hfM47z691zlL22zPq+b/V999+3T2ht1PzI7hccSpD/+du+dTXl/4ngv77u7jXe31v3D3X93N1d17 Frq9o33Grd3TnX/xBu5/jP7iRf0izZe0L+V+qX2J2TTbL+7O4adHWv585BPnD9+crzPSN9t52Bnm 4fg8tq9e/57LPO1GeLHPfsXduTPLcZvBtn7AP2P1gelo6s1PvFmY2BpWPnE+cL399uxmeOu59c7x eeS58/BztnO+MM8ezhunvHO+5bieB8+8Xqw+LN3yeJw4brlofhWLV/OB653jbFy8K++wnW/d7Hy2 vPk3c0bcDT6nPpw+/s7h5XA9r/gbJ35613ul41d9asO+Cj5feTTrhXt1BkzG33toD/Pqjfi4VxyY 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 --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Disposition: attachment; filename=prettify-info.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="prettify-info.patch" Content-Transfer-Encoding: quoted-printable diff=20--git=20a/lisp/info.el=20b/lisp/info.el=0Aindex=20= d579ecc5a3..bca6ffa961=20100644=0A---=20a/lisp/info.el=0A+++=20= b/lisp/info.el=0A@@=20-4660,16=20+4660,17=20@@=20Info-breadcrumbs=0A=20=20= =20=20=20;;=20=09=09=09=09=20=20=20=20'font-lock-face=20'header-line=20= line)=0A=20=20=20=20=20line))=0A=20=0A-(defun=20Info-fontify-node=20()=0A= +(defun=20Info-fontify-node=20(&optional=20force)=0A=20=20=20"Fontify=20= the=20node."=0A=20=20=20(save-excursion=0A=20=20=20=20=20(let*=20= ((inhibit-read-only=20t)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (case-fold-search=20t)=0A=20=20=20=20=20=20=20=20=20=20=20=20= paragraph-markers=0A=20=20=20=20=20=20=20=20=20=20=20=20(not-fontified-p=20= ;=20the=20node=20hasn't=20already=20been=20fontified=0A-=20=20=20=20=20=20= =20=20=20=20=20=20(not=20(let=20((where=20(next-single-property-change=20= (point-min)=0A-=09=09=09=09=09=09=09=20=20=20'font-lock-face)))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20where=20(not=20= (=3D=20where=20(point-max)))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (or=20force=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (let=20((where=20(next-single-property-change=20(point-min)=0A+=09=09=09=09= =09=09=09=20=20=20=20=20=20=20'font-lock-face)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20where=20(not=20(=3D= =20where=20(point-max))))))))=0A=20=20=20=20=20=20=20=20=20=20=20=20= (fontify-visited-p=20;=20visited=20nodes=20need=20to=20be=20re-fontified=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20(and=20Info-fontify-visited-nodes=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Don't=20take=20= time=20to=20refontify=20visited=20nodes=20in=20huge=20nodes=0A@@=20= -5082,6=20+5083,226=20@@=20Info-fontify-node=0A=20=09(put-text-property=20= (point)=20(1-=20(point-max))=20'invisible=20t))=0A=20=0A=20=20=20=20=20=20= =20(set-buffer-modified-p=20nil))))=0A+=0A+;;=20Extended=20= prettification=20starts=20here.=0A+=0A+;;=20Block=20types:=0A+;;=20|=20= Body=20indent1=20indent2=0A+;;=20|=20BulletBody=20indent1=20indent2=0A= +;;=20|=20DetailList=20indent1=20indent2=0A+;;=20|=20MenuHeader=0A+;;=20= |=20MenuEntry=20align=0A+;;=20|=20Definition=20indent=0A+;;=20|=20Code=20= indent=0A+=0A+(defface=20info-body=20`((t=20.=20(:inherit=20= variable-pitch)))=0A+=20=20"Face=20for=20body=20text=20in=20Info=20= buffer."=0A+=20=20:group=20'info)=0A+=0A+(defun=20Info--next-block=20()=0A= +=20=20"Return=20(BEG=20.=20END)=20of=20next=20text=20block=20after=20= point.=0A+Move=20point=20to=20BEG.=0A+If=20search=20failed,=20return=20= nil."=0A+=20=20(condition-case=20nil=0A+=20=20=20=20=20=20(let=20(beg=20= end)=0A+=20=20=20=20=20=20=20=20;;=20Non-empty=20line=0A+=20=20=20=20=20=20= =20=20(re-search-forward=20"^[^\n]+$")=0A+=20=20=20=20=20=20=20=20(setq=20= beg=20(match-beginning=200))=0A+=20=20=20=20=20=20=20=20(if=20= (search-forward=20"\n\n"=20nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (progn=20(skip-chars-backward=20"=20\n")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20end=20(point)))=0A+=20=20=20=20=20=20=20= =20=20=20(setq=20end=20(point-max)))=0A+=20=20=20=20=20=20=20=20(cons=20= beg=20end))=0A+=20=20=20=20(search-failed=20nil)))=0A+=0A+(defsubst=20= Info--menu-entry-detail-beg=20()=0A+=20=20"Go=20to=20the=20beginning=20= of=20the=20entry=20detail.=0A+Assumes=20the=20point=20is=20at=20BOL."=0A= +=20=20(re-search-forward=0A+=20=20=20(rx=20(seq=20"*"=20"=20"=20(+=20= (not=20(any=20"\n")))=20(group=20(>=3D=202=20"=20"))))))=0A+=0A+(defun=20= Info--block-type=20(beg=20end)=0A+=20=20"Return=20the=20type=20of=20the=20= block=20between=20BEG=20and=20END.=0A+Moves=20point."=0A+=20=20= (skip-chars-backward=20"=20\n")=0A+=20=20;;=20=20=20=20=20=20=20Code=20= block=0A+=20=20(cl-labels=20((indent=20()=20(-=20(point)=20= (line-beginning-position))))=0A+=20=20=20=20(cond=20((progn=20(goto-char=20= end)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (looking-back=20(rx=20(or=20"."=20":"=20".)"))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(-=20(point)=205))))=0A+=20=20=20=20=20=20=20=20=20=20=20= (goto-char=20beg)=0A+=20=20=20=20=20=20=20=20=20=20=20= (skip-chars-forward=20"=20")=0A+=20=20=20=20=20=20=20=20=20=20=20`(Code=20= ,(indent)))=0A+=20=20=20=20=20=20=20=20=20=20;;=20Manue=20(header=20or=20= entry)=0A+=20=20=20=20=20=20=20=20=20=20((progn=20(goto-char=20beg)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(looking-at=20"*"))=0A= +=20=20=20=20=20=20=20=20=20=20=20(if=20(looking-at=20"*=20Menu:")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'(MenuHeader)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Find=20the=20beginning=20of=20entry=20= detail.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (Info--menu-entry-detail-beg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= `(MenuEntry=20,(indent))))=0A+=20=20=20=20=20=20=20=20=20=20;;=20= Definition=0A+=20=20=20=20=20=20=20=20=20=20((progn=20(goto-char=20beg)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (skip-chars-forward=20"=20")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(eq=20(char-after)=20?-))=0A+=20=20=20=20=20=20=20=20=20=20=20= (re-search-forward=20"\n=20+")=0A+=20=20=20=20=20=20=20=20=20=20=20= `(Definition=20,(indent)))=0A+=20=20=20=20=20=20=20=20=20=20;;=20Body=0A= +=20=20=20=20=20=20=20=20=20=20(t=20(goto-char=20beg)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20(let=20(indent1=20indent2)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(skip-chars-forward=20"=20")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20indent1=20(indent))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(re-search-forward=20"\n")=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(skip-chars-forward=20"=20")=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(setq=20indent2=20(indent))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(if=20(progn=20(goto-char=20beg)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (looking-at=20"=20+=E2=80=A2"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20We=20want=20to=20keep=20the=20indent=20under=20= the=20bullet,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20so=20increase=20the=20second=20indent.=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20`(BulletBody=20,indent1=20,(+=20indent1=20= 2))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(>=3D=20= indent1=20indent2)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20`(Body=20,indent1=20,(indent))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20`(DetailList=20,=20indent1=20= ,indent2))))))))=0A+=0A+(defun=20Info--align-menu-entry=20(beg=20end=20= align)=0A+=20=20"Align=20menu=20entries=20between=20BEG=20and=20END.=0A= +The=20type=20of=20the=20block=20should=20be=20(MenuEntry=20ALIGN)."=0A+=20= =20(goto-char=20beg)=0A+=20=20(cl-labels=0A+=20=20=20=20=20=20= ((glyph-width-at=0A+=20=20=20=20=20=20=20=20(p)=20(aref=20(aref=20= (font-get-glyphs=20(font-at=20p)=20p=20(1+=20p))=200)=204)))=0A+=0A+=20=20= =20=20(while=20(<=3D=20(point)=20end)=0A+=20=20=20=20=20=20= (Info--menu-entry-detail-beg)=0A+=20=20=20=20=20=20(put-text-property=0A= +=20=20=20=20=20=20=20(match-beginning=201)=20(match-end=201)=0A+=20=20=20= =20=20=20=20'display=20`(space=20:align-to=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,(*=20align=20= (glyph-width-at=20(1-=20(point)))))))=0A+=20=20=20=20=20=20= (search-forward=20"\n"))))=0A+=0A+(defun=20Info--remove-indent=20()=0A+=20= =20"Remove=20the=20spaces=20at=20the=20beginning=20of=20this=20line."=0A= +=20=20(goto-char=20(line-beginning-position))=0A+=20=20= (skip-chars-forward=20"=20")=0A+=20=20(delete-region=20= (line-beginning-position)=20(point)))=0A+=0A+(defun=20= Info--remove-line-breaks=20(beg=20end)=0A+=20=20"Remove=20hard=20line=20= braks=20between=20BEG=20and=20END.=0A+Moves=20point."=0A+=20=20= (goto-char=20end)=0A+=20=20(let=20((end-mark=20(point-marker)))=0A+=20=20= =20=20(goto-char=20beg)=0A+=20=20=20=20(skip-chars-forward=20"=20")=0A+=20= =20=20=20(delete-region=20beg=20(point))=0A+=20=20=20=20(while=20(and=20= (search-forward=20"\n"=20end=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(<=3D=20(point)=20(1-=20end-mark)))=0A+=20=20=20=20=20=20= (let=20((p=20(match-beginning=200)))=0A+=20=20=20=20=20=20=20=20= (skip-chars-forward=20"=20")=0A+=20=20=20=20=20=20=20=20(delete-region=20= p=20(point))=0A+=20=20=20=20=20=20=20=20(insert=20"=20")))))=0A+=0A= +(defun=20Info--unfontify-quote=20(beg=20end)=0A+=20=20"Remove=20= info-body=20face=20from=20quoted=20text=20between=20BEG=20and=20END."=0A= +=20=20(goto-char=20beg)=0A+=20=20(while=20(re-search-forward=20(rx=20= (or=20(seq=20"`"=20(group=20(+?=20anychar))=20"'")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(seq=20"=E2=80=98"=20(group=20(+?=20anychar))=20"=E2=80=99")))= =0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20end=20t)=0A+=20=20=20=20(put-text-property=20(or=20= (match-beginning=201)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(match-beginning=202))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20(match-end=20= 1)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(match-end=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20'font-lock-face=20nil)))=0A+=0A+(defun=20= Info--fontify-block=20(beg=20end=20type)=0A+=20=20"Fontify=20block=20= between=20BEG=20and=20END=20of=20TYPE.=0A+Moves=20point."=0A+=20=20= (goto-char=20beg)=0A+=20=20(pcase=20type=0A+=20=20=20=20(`(Body=20= ,indent1=20,indent2)=0A+=20=20=20=20=20(put-text-property=20beg=20end=20= 'font-lock-face=20'info-body)=0A+=20=20=20=20=20(when=20(not=20(eq=20= indent1=200))=0A+=20=20=20=20=20=20=20(put-text-property=20beg=20end=20= 'line-prefix=20`(space=20:width=20,indent1)))=0A+=20=20=20=20=20;;=20We=20= make=20the=20whole=20block=20indent=20the=20same,=20ignoring=20indent2.=0A= +=20=20=20=20=20(ignore=20indent2)=0A+=20=20=20=20=20(put-text-property=20= beg=20end=20'wrap-prefix=20`(space=20:width=20,indent1))=0A+=20=20=20=20=20= ;;=20We=20want=20to=20include=20the=20final=20new=20line=20for=20= line-height=20to=20take=0A+=20=20=20=20=20;;=20effect.=0A+=20=20=20=20=20= (put-text-property=20beg=20(1+=20end)=20'line-spacing=200.3)=0A+=20=20=20= =20=20;;=20This=20function=20messes=20positions=20up,=20has=20to=20run=20= at=20the=20end.=0A+=20=20=20=20=20(Info--remove-line-breaks=20beg=20= end))=0A+=0A+=20=20=20=20(`(BulletBody=20,indent1=20,indent2)=0A+=20=20=20= =20=20(skip-chars-forward=20"=20=E2=80=A2")=0A+=20=20=20=20=20;;=20We=20= want=20to=20keep=20the=20bullet=20in=20default=20font.=0A+=20=20=20=20=20= (put-text-property=20(point)=20end=20'font-lock-face=20'info-body)=0A+=20= =20=20=20=20(when=20(not=20(eq=20indent1=200))=0A+=20=20=20=20=20=20=20= (put-text-property=20beg=20end=20'line-prefix=20`(space=20:width=20= ,indent1)))=0A+=20=20=20=20=20(put-text-property=20beg=20end=20= 'wrap-prefix=20`(space=20:width=20,indent2))=0A+=20=20=20=20=20= (put-text-property=20beg=20(1+=20end)=20'line-spacing=200.3)=0A+=20=20=20= =20=20(Info--remove-line-breaks=20beg=20end))=0A+=0A+=20=20=20=20= (`(MenuHeader))=0A+=0A+=20=20=20=20(`(MenuEntry=20,align)=0A+=20=20=20=20= =20(Info--align-menu-entry=20beg=20end=20align)=0A+=20=20=20=20=20;;=20= We=20skip=20over=20the=20stars.=20Because=20info-menu-star=20is=20= monospaced=0A+=20=20=20=20=20;;=20and=20we=20want=20to=20keep=20the=20= stars=20consistent.=0A+=20=20=20=20=20(goto-char=20beg)=0A+=20=20=20=20=20= (while=20(re-search-forward=20(rx=20(seq=20bol=20"*"=20(group=20(+=20= (not=20(any=20?\n))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20end=20t)=0A+=20=20=20=20=20=20= =20(put-text-property=20(match-beginning=201)=20(match-end=201)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= 'font-lock-face=20'info-body))=0A+=20=20=20=20=20(put-text-property=20= beg=20(1+=20end)=20'line-spacing=200.3))=0A+=0A+=20=20=20=20= (`(DetailList=20,indent1=20,indent2)=0A+=20=20=20=20=20= (Info--remove-indent)=0A+=20=20=20=20=20(goto-char=20beg)=0A+=20=20=20=20= =20(search-forward=20"\n")=0A+=20=20=20=20=20(let=20((p=20(point)))=0A+=20= =20=20=20=20=20=20(put-text-property=20beg=20(1+=20end)=20'line-spacing=20= 0.3)=0A+=20=20=20=20=20=20=20(put-text-property=20p=20end=20= 'font-lock-face=20'info-body)=0A+=20=20=20=20=20=20=20(put-text-property=20= p=20end=20'line-prefix=20`(space=20:width=20,indent2))=0A+=20=20=20=20=20= =20=20(put-text-property=20p=20end=20'wrap-prefix=20`(space=20:width=20= ,indent2))=0A+=20=20=20=20=20=20=20(put-text-property=20beg=20(1-=20p)=20= 'line-prefix=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20`(space=20:width=20,indent1))=0A+=20=20=20=20=20=20=20= (Info--remove-line-breaks=20p=20end)))=0A+=0A+=20=20=20=20(`(Definition=20= ,indent)=0A+=20=20=20=20=20(re-search-forward=20"\n=20+")=0A+=20=20=20=20= =20(let=20((p=20(point)))=0A+=20=20=20=20=20=20=20(put-text-property=20= beg=20(1+=20end)=20'line-spacing=200.3)=0A+=20=20=20=20=20=20=20= (put-text-property=20p=20end=20'font-lock-face=20'info-body)=0A+=20=20=20= =20=20=20=20(put-text-property=20p=20end=20'line-prefix=20`(space=20= :width=20,indent))=0A+=20=20=20=20=20=20=20(put-text-property=20p=20end=20= 'wrap-prefix=20`(space=20:width=20,indent))=0A+=20=20=20=20=20=20=20= (Info--remove-line-breaks=20p=20end)))=0A+=20=20=20=20(`(Code=20,indent)=20= (ignore=20indent))))=0A+=0A+(defun=20Info--prettify-buffer=20()=0A+=20=20= "Prettify=20Info=20buffer."=0A+=20=20(interactive)=0A+=20=20= (save-excursion=0A+=20=20=20=20(let=20((buffer-read-only=20nil))=0A+=20=20= =20=20=20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20= (re-search-forward=20"[=3D-\\*]$")=0A+=20=20=20=20=20=20(let=20(region)=0A= +=20=20=20=20=20=20=20=20(while=20(setq=20region=20(Info--next-block))=0A= +=20=20=20=20=20=20=20=20=20=20(let=20((beg=20(car=20region))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(end=20(cdr=20region))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20end-mark)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(setq=20end-mark=20(make-marker))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(set-marker=20end-mark=20end)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20(condition-case=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(progn=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (Info--fontify-block=20beg=20end=20(Info--block-type=20beg=20end))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (Info--unfontify-quote=20beg=20end-mark)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(goto-char=20end-mark))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(search-failed=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(message=20"Failed=20to=20fontify=20block=20%d=20%d"=20beg=20= end))))))=0A+=20=20=20=20=20=20(Info-fontify-node=20'force)=0A+=20=20=20=20= =20=20(visual-line-mode))))=0A+=0A+;;=20Extended=20prettification=20ends=20= here.=0A+=0A=20=0C=0A=20;;;=20Speedbar=20support:=0A=20;;=20These=20= functions=20permit=20speedbar=20to=20display=20the=20"tags"=20in=20the=0A= --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_BE3E52FE-8FAB-4C01-BBFD-31616BF59B82-- From MAILER-DAEMON Fri Jun 19 14:01:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLKN-0001oK-FY for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:01:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLKL-0001oA-Dz for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:01:21 -0400 Received: from mout.gmx.net ([212.227.15.18]:48517) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLKJ-000534-Gb for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:01:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592589677; bh=eRClg2oCEY3JjHjmBKri6UWgT73wQNUCJhlMBOdz2QI=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=KYQE9qU7rnZ+id5FU2Qk7/YaJfYgOyvAc8ab/PmDUOkXXGlJHGzTi1Ydy24zvzeO/ IETigEBMQ7ADziJa43iqD99bUEvkLEjshDM3gn4EfWOLRj8rHwY3NrVSxiQyKwJ6N7 hbeJ0V2G63FG4GOuTMO3pJxDdGqV1nDfan+gEe7c= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([178.20.94.188]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mq2j2-1j96p43NEA-00n72z; Fri, 19 Jun 2020 20:01:16 +0200 From: Michael Albinus To: Dmitry Gutov Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , felipelema@mortemale.org, Tobias Rittweiler , emacs-devel Subject: Re: Eglot and Tramp References: <87y2oocltq.fsf@gmail.com> <87pn9v19e8.fsf@gmx.de> <87ftar186z.fsf@gmx.de> <87bllf15h3.fsf@gmx.de> <877dw314yz.fsf@gmx.de> <87366r10lu.fsf@gmx.de> <87y2ojyppp.fsf@gmx.de> <87tuz7yncn.fsf@gmx.de> Date: Fri, 19 Jun 2020 20:01:16 +0200 In-Reply-To: (Dmitry Gutov's message of "Fri, 19 Jun 2020 20:47:02 +0300") Message-ID: <87pn9vylxv.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:476MT1iXhP6Bwj8fPKdKkfO59A2eArsGZcieVOfEC2+BqbOJ8uI O0rJgUM8Eg1CQV8r2bzZvyYsHfIrRLiSJG5J1Imqu5pgJv7yS/uifCpjV9lTTgh7x3EC9Fl wEmdA2OYgtwRVUSzWkYA6xwe5GL36K9HIjRjLT9fP0b7ntsOa7bz3YEZdrIMR1P9qgw9QfP NPHevqzoGYTbavbGOIdsg== X-UI-Out-Filterresults: notjunk:1;V03:K0:csYu2XBCAGw=:R9fA7VoXYntAuiNzs2Axeq F03ZSaxoKyjEP+6ahyL98nzoPy9yggjlGZoui7r79Bl4gGesFuCF/iSv8fcQUfENFhY6cXX0X Edm7nHOY+md+HOV2fcmrHKfAiEVOGacHRQx7JVfJLkeQPCxApV1PTMvuN8/k9MrwfGH9ZzC7Z rF+bGrBHjg691vOI5j++vZxWjIKAH7eSyoMh6xa9USNEwp8Dsb2aRiEFzdYf8XmxnHxFXpvAf R7vE6kFkagKhePpwfEoni+8kfCiRlNf9LhadXKH4IwzrcUBSaUAyjTFR//8tMCpDcNJrQ4TQ0 zqnS4+1G6oFy8u91yIWP/2q/3Zy+EBuUit6BRiid0sXQ2LzIfU3Yw5+/ocnM227ex8pSp2w9T T53KYPp0sFAyim/1KFIVgPkcMBq3RS7GT4h87AO/I8sbZrFk1uZ5HDL8/33aCMOV0LNUa9WJd 1RViR3j2sKfSy3P+Hyn1yKnY4u8SfZKCR/xw2i/DmCLi+w8tXu5P7NIoYuEme4XuD54X2lc2N R3OngQ4YC2Y0Ye7U5/pH1fNY0f14zLX0crl4im/4sW18BpIL8pCJ2m4ARfHvD8R4tVcksq7Q2 WVZY3n5pFSISK+jiqbO/8bgtii94Jti/i6KcnlFSP/jtH5MW+rc1gy372YRZNRtAxoJ0Ry21W D2kwzCcxYFsQt0frbdT0f+R9ZkxDUZpRkLK+mlOuxaBC6cRW7+/OX9trfHuCgrEl/aw95t4+Q nO7c9ul7+WQe8CjEU/rEBLKxtZhHSR3bHGM8zfSNc05It14qL02cfrMtgkKCuTptbxHP0NqI8 USwL7Ry49l3Dv2hcZadDU2DbrspyEF6JS+VKAT11QMQn06TGLvZzUCzN7/+mGzAEfuCy1Uzth 2nkRIl7iqmo02aIx1kR4gpw9cqYIYL5alh4vxNtHhTj/B30cTDtvFIUe8V6tK3prz0GJnTzAp roffufK300wF4IPDNUNNdcRlW9zKKRh+3GCFYC3Z1+Nyi6veE1W/ZT4ggUZyBu13DDzbp6A8C QMCS6nXGxXSWknPN6mwhWlUnnAlBFc7hMrFzEjFGe251Op92WVDPewrediMb8VP4eIcpUzf04 9rXPEbub9P2aQ4IxscbuJAULtny7BNlMgJ9+7HxVT0BL/EtPReTFZcVf/vjwmQ8QiIQMhbiys UeDs1U3zz/vYxugHJBfXoLZgRapTtw2fZ7jyEduo1+S7Yr5zyc4utthoU/PYjdB5bnA+dhGkX 87y9Gx4fakkyKaJgs Received-SPF: pass client-ip=212.227.15.18; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 14:01:17 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:01:21 -0000 Dmitry Gutov writes: >> 4. I put in an automated check in eglot.el that does the same as 3. > > A runtime check sounds best to me, personally. Likely yes. But there won't be a feature or Lisp object to check for the given solution in Tramp. You can only check the Tramp version. Best regards, Michael. From MAILER-DAEMON Fri Jun 19 14:03:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLMK-00042P-Ml for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:03:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44134) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLMJ-00040X-59 for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:03:23 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52662) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmLMI-0005PA-OZ; Fri, 19 Jun 2020 14:03:22 -0400 Received: from [176.228.60.248] (port=4251 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmLMB-0000H7-Er; Fri, 19 Jun 2020 14:03:21 -0400 Date: Fri, 19 Jun 2020 21:03:03 +0300 Message-Id: <83a70zx7ag.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <877dw3ne2z.fsf@thornhill.no> (message from Theodor Thornhill on Fri, 19 Jun 2020 17:46:36 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:03:23 -0000 > Date: Fri, 19 Jun 2020 17:46:36 +0000 > From: Theodor Thornhill > Cc: dgutov@yandex.ru, emacs-devel@gnu.org > > If for instance the project-switch-to-buffer should have to know > everything about every imaginable combination of interesting derivates > of a project, then I believe that would be a quite a bit larger > function (or at least a huge curated map of sorts). What I had in mind was a simple filtering by major mode, not unlike the current filtering by default-directory. How complicate could that be? > What I am thinking, surely without knowing all the intricacies here, is > that maybe the "switch-to-buffer" and "kill-buffers" also should be > defgenerics? Then the implementation of what to show can be put off for > later, and the "(head vc)" version can be decided now? I don't see how this is relevant. Whether the function we are talking about is switch-to-buffer or project-switch-to-buffer, the problems it will need to solve are the same, and the questions we need to answer are the same. My point was and remains that using default-directory as the single criterion for deciding whether a buffer should be offered as completion candidate to switch while working on a project, sounds like not the best idea, since it will pick up many buffers to which users are unlikely to want to switch as part of working on the project. > Otherwise, I guess the user has to specify a set of patterns, or at > least decide on major-modes to include, and that would seem like a > hassle to me. That is a one-time decision, when you start a project and decide what kind of a project will it be. From MAILER-DAEMON Fri Jun 19 14:03:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLMR-0004DR-TC for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:03:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLMP-00048K-Rh for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:03:29 -0400 Received: from mail-qk1-x72c.google.com ([2607:f8b0:4864:20::72c]:34620) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLMO-0005PM-5z; Fri, 19 Jun 2020 14:03:29 -0400 Received: by mail-qk1-x72c.google.com with SMTP id f18so9826389qkh.1; Fri, 19 Jun 2020 11:03:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=vtQoVqYRuxir53cjP6tTvVJqKt7l4V9HsSmPIowrWOo=; b=ImTBI5D/cvattYmZSl+vsaS+08TS2mK99ykOpFpMysIqJK1Xd21sIXTvzofm80TFYd 4vuP6emNBxlpJuG8lUubjgVC21VRtY3/TQezNFhgJVNjvFjwgIUywrkeombKC99wOl89 dHvJZmjCnwbkYNXGZ9BCfZMQUOnTs5VO0cEqn9oU5CC4dStWhaZK5GSYyPCGRgxJfc8A mBcBJyVdglkHdRdc+8jT7buQYfDjX/KiGBXqJHXLet1aFsHosUOZS4H9nxKv8ISzL4gn TMPt0/vIt7MF0q+0X38Rix04R7Y0QnGpJBkSkEIpEJUOFfPwbWL/A/Z+RcmLHNxggQwY iNjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=vtQoVqYRuxir53cjP6tTvVJqKt7l4V9HsSmPIowrWOo=; b=dvJ2s1i5xvCIHxEgOC69YdeKLvEjyxhZ85AlQwhFdo00Hpak1qoNVx7snlfnAHpmMz eNyX5f1iFd/tqcLIxZXn3m7ySMOGbeOR6JQBzmU3oEzzxrpDCJIMl60sxVKIIRrXXgSi lDrYLT3CfhV8RC/MK9rf6KihuP5bip1SkBLkkivE/huRHSOlJXuUnXpyjraW2m8Oz8Vi G4aJLQ1Fq9FqNYIZg9y77pgTsHE9P8FKTk8Y4IqrK0FNfeketfhbcL3p+6cPcZxSYHrz i9BDaZs2hxPyB1B8rTrbJpgklY1GbVcaMIP9hqkG+b2wdT+SeaI83LlSlLXgbgVRUl2L k7RA== X-Gm-Message-State: AOAM530/nStHFTkD7/bsROG8uua8l+8sV6pLZvGRr8XZp8Peq57N4K7s 1c3KG2/ejXaM3lnUDeY60fnAHpmm2kntyA== X-Google-Smtp-Source: ABdhPJx/9Det+6Efw3ymhGvnyoJCDrV9832UxMi+aqn5kkeagxnrQwhdvx9i62/e2wIP/G8jhqzl+g== X-Received: by 2002:a37:668d:: with SMTP id a135mr4542762qkc.131.1592589806530; Fri, 19 Jun 2020 11:03:26 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id b4sm6216717qka.133.2020.06.19.11.03.25 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Jun 2020 11:03:25 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Line wrap reconsidered From: Yuan Fu In-Reply-To: <83bllfx80g.fsf@gnu.org> Date: Fri, 19 Jun 2020 14:03:24 -0400 Cc: Lars Ingebrigtsen , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <2F9680C4-11D8-4092-A485-2590AAF62CC9@gmail.com> References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> <83sgerxmbs.fsf@gnu.org> <83bllfx80g.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::72c; envelope-from=casouri@gmail.com; helo=mail-qk1-x72c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:03:30 -0000 > On Jun 19, 2020, at 1:47 PM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Fri, 19 Jun 2020 13:22:18 -0400 >> Cc: Lars Ingebrigtsen , >> emacs-devel@gnu.org >>=20 >>> What do you mean by "in the RTL context"? >>>=20 >>> Remember: bidi reordering can take place in two different = situations: >>> then the paragraph direction is left-to-right, and when it's >>> right-to-left. In the former situation, the lines begin on the = left, >>> in the latter they begin on the right. But LTR text, such as CJK >>> characters, will always be rendered left-to-right, no matter what is >>> the paragraph direction. >>>=20 >>> So which "RTL context" did you mean here? >>=20 >> Oooh so there are four cases: LRT text in LTR paragraph, LRT text in = RTL paragraph, RTL text in RTL paragraph, and RTL text in LTR paragraph. = And the order in which the iterator draws glyphs depends on the = paragraph order (although it doesn=E2=80=99t know it). Am I right? >=20 > You can say that there are 4 cases, yes. But from the iterator POV, > there are only 2: either the text of the same direction as the > paragraph, or of the opposite direction. >=20 >>> =D7=90=D7=91=D7=92=D7=93 =D7=94=D7=95=D7=96=D7=97=D7=98=D7=99=D7=9B=D7= =9A =D7=9C=D7=9E=D7=A0=D7=9F = =E6=88=91=E4=BB=8A=E5=A4=A9=E7=9C=8B=E6=9D=A5=E4=BA=86=E6=9C=AC=E4=B9=A6=EF= =BC=8C=E6=84=9F=E8=A7=89=E6=8C=BA=E6=9C=89=E6=84=8F=E6=80=9D=EF=BC=8C=E5=90= =8D=E5=AD=97=E6=98=AF >>> =E3=80=8A=E9=92=A2=E9=93=81=E6=98=AF=E6=80=8E=E6=A0=B7=E7=82=BC=E6=88=90= =E7=9A=84=E3=80=8B=E3=80=82 >=20 >>>=20 >>> (I assume you are reading your email in Emacs; if not, copy/paste = this >>> text into an Emacs buffer whose bidi-paragraph-direction is nil, and >>> look at the resulting display.) >>>=20 >>> Does the above look correct, from the Kinsoku POV? This is how LTR >>> CJK text will be displayed in a paragraph with right-to-left base >>> direction. Do you still think something needs to be flipped here? >>=20 >> Kinsoku looks right, yes. However the period (=E2=80=9C=E3=80=82=E2=80=9D= ) seems to be interpreted as RTL text, not sure why. >=20 > That's expected, since the period has a "weak directionality", so at > the end of the paragraph it takes the paragraph direction. >=20 >>> We must use BOL and EOL in their logical-order meanings, otherwise = the >>> result will be utter confusion. In the above example, the EOL >>> character in the first line is =E6=98=AF, and it is not at the left = edge of >>> the line. It is at the logical-order end of the line, i.e. the >>> character after it in the buffer position order is the newline. But >>> if we had RTL characters instead of the CJK text above, the = character >>> at EOL would indeed have been displayed at the left edge of the = line. >>>=20 >>=20 >> I see. However, I suggest to define EOL and BOL (in kinsoku) in terms = of visual edges, instead of the logical order. Because we are using this = information (NOT_AT_BOL, etc) for visual layout. When we are at a window = edge and ask if this character can appear at this edge, we are = interested in the visual aspect rather than the logical order, if you = get what I mean.=20 >=20 > If that works, then fine. >=20 >> BTW, what does it->bidi_p mean exactly? Does it mean = bidi-display-reordering is t, or current paragraph is =E2=80=98right-to-le= ft, or the char at point is RTL, or something else? >=20 > It means bidi reordering is in effect. For displaying buffer text, it > is determined by bidi-display-reordering. >=20 >> Can I know whether I=E2=80=99m at the left edge or the right edge? >=20 > You can, but why do you need to? I don=E2=80=99t have to know if I=E2=80=99m at left or right edge, I = just want to know if the iterator is drawing from right to left or left = to right. What is the right way to know that? Yuan From MAILER-DAEMON Fri Jun 19 14:19:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLc9-00049k-7C for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:19:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLc8-00047s-4Q for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:19:44 -0400 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]:45656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLc6-0007h1-Cw; Fri, 19 Jun 2020 14:19:43 -0400 Received: by mail-ed1-x52e.google.com with SMTP id t21so8289682edr.12; Fri, 19 Jun 2020 11:19:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=9Xa4OGJkkeHyJmg9Eh8AUV7rcgMMvEgIyvci/hAURaE=; b=Yej+6rQq/foIJF3OcwrjOJ5CM2QWhC5UhaUT47GlZ03sMoZQr7F5OVg4Qqt8z6Yqwh EEmhF+AjK0ZzTqpAM+QNXMiRCbhW6DbkRoFqo/ECFjw8dsUXyN2CdAu3G3zRZrF75QkE FdbZ1HhylnvzH0RkfV792cGrPfaNiaLDZwBUFFHN+TP3/x+NJmH/dn3YNZsUiMkgmHYS u+McwNgJoBRpEDFn12ZHXgBETuMjMT8BwLU6ouzJQufTGhCdbJEL52amevY7CScdRiwk bHaJLKITKdlpUXagqLOu8htxTMCjmb0SMuoY48nDnPidhJ39ONHkqjLYaWXZq7OjdohT 2ozQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=9Xa4OGJkkeHyJmg9Eh8AUV7rcgMMvEgIyvci/hAURaE=; b=jLSJN/Woawr1m+xsy8KAo5bNXyeIDIbWRQHFSkHaAuzmQVSlg85+Id8p88y/D7lrCx C2kowe/wSfy8syVVSzYqVXRl1k751y9TnPNBaoKALaPXDfFCSMNzk6Rp5mH1Azyh5i6W cF+/Ukg5X9jLIsUFeSEQbe5C6Z9aZtWpzmsS/32obPazbw7iUrr9aD9BlShGaVByLFxh Gd3QFSwOoJx2fYk5U9WScHqBTU1te6GB+XLEuFGuY/rcYP4jWvd5XpEBaNOFdkuUQwlh RdkLGRinVz9yWtKwZN9Z1XFuykzI3Mu8LXGDcoA01huDjuQSmDphs9ymSuC1rTcvmiC5 Bjaw== X-Gm-Message-State: AOAM533u2NDZUYEPwdXAQS9CFYwPOGKaCoCNe1XxIrvbGD9L2mqoISIr xUR/Ov8JtxgoErbzKGDlPIWqbsh5 X-Google-Smtp-Source: ABdhPJwioYrsO/D/BtFs9IKKnSrh2rmrl3qMylr3CArvAOPfEKbzXS33GDcxpo9dKslzezLUhx/s8w== X-Received: by 2002:a50:ee08:: with SMTP id g8mr4434099eds.267.1592590780129; Fri, 19 Jun 2020 11:19:40 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y64sm5180191eda.33.2020.06.19.11.19.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:19:39 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> From: Dmitry Gutov Message-ID: <295d9f94-5198-6d5b-c51e-ba0bcf76a39c@yandex.ru> Date: Fri, 19 Jun 2020 21:19:37 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83a70zx7ag.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::52e; envelope-from=raaahh@gmail.com; helo=mail-ed1-x52e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:19:44 -0000 On 19.06.2020 21:03, Eli Zaretskii wrote: >> If for instance the project-switch-to-buffer should have to know >> everything about every imaginable combination of interesting derivates >> of a project, then I believe that would be a quite a bit larger >> function (or at least a huge curated map of sorts). > What I had in mind was a simple filtering by major mode, not unlike > the current filtering by default-directory. How complicate could that > be? That's not how it works. A project is defined by the generic functions the API already has. Even if some projects would prefer to work with files with certain extensions only (doesn't sound like a good idea to me), that would be an extra, new feature. As such, it is irrelevant to this discussion. From MAILER-DAEMON Fri Jun 19 14:21:20 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLdg-0006JY-Gc for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:21:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLdf-0006JN-EX for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:21:19 -0400 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]:34986) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLde-000874-3G; Fri, 19 Jun 2020 14:21:19 -0400 Received: by mail-ed1-x52d.google.com with SMTP id e12so8354237eds.2; Fri, 19 Jun 2020 11:21:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=hvUb0Q4xouHWKqTM7bQQ/VqtuCJ1d/eQd9JdFZkyvSs=; b=BKe1aLqtveXrm1EyE3pmjolXjqeaCcvZCucXZ1hc1PlHw9bzWhwEdEya9StjaEuZjq 4VeYWmlafVEFwBQvrzDg1gvn5SCXrFr/9iND4e0tvnXs6fgNJ+DlwitYTOjIVAr4u1OR gfQvzR3elb+Ot1QZBeZTEkOxDjTiWQ684uOMaGteIe4VQWDe/MA1YOQzeYCoBrpk8X2v ah3URl6BusLNOwf2PoLIry5b+/v0Rey6ud1qHldOAesYz62o++wtofnHByQpnYqNqFF0 xUvb06T/iICO8ajl8N5NPZpD9ELEE4QFzBls6kZMKgkMlo1lhEkuBLwWm4+kK+w4m//g mk+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=hvUb0Q4xouHWKqTM7bQQ/VqtuCJ1d/eQd9JdFZkyvSs=; b=ry4QS3V2FcCpII6zu4rnta5GwwTUli3Z4SsdNS6wcNgBcpFlqL/SuXkVIzXxWiYClo bnJ7CyL6e20XtMSZDc8CV6/aM/fhLZhvDF7HDhriBavB6PvPPkqK4OF+wVhBaod/tso0 dbUyd1W3Mmj5EKDiPQbPaNIfC8UJDgRMn/nlCH2F092pNinZRrwEvGbUKzZTdaRdgLRs 5Ndi8eaZ3iSK7/GHPtzfBnnQcgZ8sRSJ2dc3brs/XlLvt3q1K08IJNFW9pHhSeJBBLY+ Yy37d8LBJP5HtkT3I3FTIL7gtg823KTPw6s2EZpIiTekxIgBgqxSEY1SFlMo3SNSIcNC 98YA== X-Gm-Message-State: AOAM5323qiu481mRysI5opLz0t822dMS51yYSFXwczlFdG1jP/JEPuVl /HFtoUZNQ0sqNk+3Hb7erIWYzIbO X-Google-Smtp-Source: ABdhPJyxlNYTFkZDISgwJl+ikxSkE3TMXJ4ZC/fADiTqEqlZ6NYO5YTf4kyFTqn6HFDBSsXBEqQoZQ== X-Received: by 2002:a05:6402:155a:: with SMTP id p26mr4428794edx.376.1592590876163; Fri, 19 Jun 2020 11:21:16 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id ox27sm5289399ejb.101.2020.06.19.11.21.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:21:15 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Theodor Thornhill , Eli Zaretskii Cc: philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> From: Dmitry Gutov Message-ID: <7db8ac85-5f05-b834-4a18-ccebc117f492@yandex.ru> Date: Fri, 19 Jun 2020 21:21:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87bllfnjy5.fsf@thornhill.no> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::52d; envelope-from=raaahh@gmail.com; helo=mail-ed1-x52d.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:21:19 -0000 On 19.06.2020 18:39, Theodor Thornhill wrote: > I believe project.el to be a bit ambiguous, since it is both a generic > "wrapper" for a generic interface "project", but also an implementation of > the "vc" version of this interface. So the behaviour you suggest here is > easily done in say: > > (cl-defmethod project-root ((project (head some-major-mode))) > ...) > > The version used now is merely saying: "Show me everything but the > things ignored in .gitignore." Let's not do that. In any case, this doesn't help us to define what project-switch-to-buffer should do now. It would only complicate things. From MAILER-DAEMON Fri Jun 19 14:22:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLfH-00089U-QN for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:22:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48278) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLfG-00089K-8U for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:22:58 -0400 Received: from mail-40136.protonmail.ch ([185.70.40.136]:48154) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLfC-0008Qa-6U for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:22:57 -0400 Date: Fri, 19 Jun 2020 18:22:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592590971; bh=eA91zKoe+7QKrWNGpOPH29y+2gmkPaHcZAXERKgiWjg=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=OQ1QrV7UrluHn/QWQfvqlUMcXIweAm8ca+7HH6auXOvn2/dmJnXn3MrBvC5iYGl3l 61B9piCYqy8evSoLGq5695XIIUhm55veDAaphofYc+k3oi6MQNqoXWIyBN6veeD/xq l+VKQM3gfO5Pl4maSarMyzYsvaYFIPPQNurKwraJ1AqTlfCSGQpxElzGDQhYAleLcF EgN7HRxRR8ucsnUbQao9CrxXKNeJBgUtKEJWLuO6AzMgbVRsq0wM+0+y+TtffiA0hX sqOKKVLLjj9tc0k7iL8pL3hx9ot2TODhPpcrHI+86IAvP4f/6sxRwPlPot7OvVHFmZ H5di4TarXETcQ== To: Eli Zaretskii From: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <874kr6oqz1.fsf@thornhill.no> In-Reply-To: <83a70zx7ag.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.136; envelope-from=theothornhill@pm.me; helo=mail-40136.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 14:22:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:22:58 -0000 > My point was and remains that using default-directory as the single > criterion for deciding whether a buffer should be offered as > completion candidate to switch while working on a project, sounds like > not the best idea, since it will pick up many buffers to which users > are unlikely to want to switch as part of working on the project. Yeah, I agree. I can try to come up with something more appropriate than the default-directory. Though I for one, want the *xref* to be part of that, since "project-find-regexp" uses it. I believe I read you wouldn't want it. I guess many others will have many different opinions in this matter. >> Otherwise, I guess the user has to specify a set of patterns, or at >> least decide on major-modes to include, and that would seem like a >> hassle to me. > > That is a one-time decision, when you start a project and decide what > kind of a project will it be. I see your point, though that seems to imply a little foresight from the users. Also, I am not sure every emacs users are aware of what modes inherits from what modes etc.=20 In addition, when do we make that first desicion, really? Right now it just sort of happens after you go "git init" in terminal. To me it sounds like that new workflow adds some steps to what is right now a quite seamless experience. Theo From MAILER-DAEMON Fri Jun 19 14:23:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLg5-0000Ne-7H for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:23:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLg4-0000MB-2Z for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:23:48 -0400 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]:36624) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLg2-00007X-EJ; Fri, 19 Jun 2020 14:23:47 -0400 Received: by mail-ed1-x535.google.com with SMTP id y6so8348497edi.3; Fri, 19 Jun 2020 11:23:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=dC8ErTfS3un648tC/0kNVhA/k3sd0yqmVgizU5PSR4s=; b=ob9wNIUZVqiZ2MGbsd/egwMXqexpIiEqMoAVtZ98Oys5UrL8gmrB+dNYJpt3laka0M 0U3PWhgibUFCoKH2Hbs+vJx51QD7qbuKb4elQPhaX+NeaRZr/QkK6syq+6Hw8z66bEcX jD/2iqQibTK1n1sxjGBOqou9OseMgfJWMMaqc2cboygezbXRF4yKsGNWO0ftYKa8VKQi QH1I/8VzSD655WfTY6EL35BUevQrrQAmTuvGzv3H3mfil/ncPuFjnF+cJcIj+5klFq6w vxYgCON9ZsUEZpv+ilHAxvpbamazn4rmIXoN7brT3HswJH6N3lJFgI8sBX7dVouEFSJi fpSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=dC8ErTfS3un648tC/0kNVhA/k3sd0yqmVgizU5PSR4s=; b=MqdTemye8YioVErbKCQSkz7IxMZXnI/s6JsBMsTVKMfMw1LDGLOJlacTaQ6fOs4YaE ++eMX1dzgnyO3ZpZswMdhq1fTWKO9GBTbVaKLl/wGWEtWthBZEyMN1Ivt4ToDsZo80NX 7Q53XmDGAHkPMNaAELfTvXav4Gt6t+c+xgYd44MjBY66yowWyBt3Xj2KpmcEzbr9VdHZ /hrv+yF7+uuft/x75Kqs9/ynHtqTkl3qiVqjl6JX50LaKWLlr6O1BSh5mbWvXy4hSZpG xExuOeCk15siYZLUNUP6+ljNdDt6VUi7cMbflE3kzE04FwlcHLMTHQBJ9GEbzQz/Snuk ddqA== X-Gm-Message-State: AOAM53242uR12fXvf0h0uc3Adx8HOaKAGhHCyMLRE/tKvJm0Xu8k4Hy8 MOJw+WhLtUrqBoedJRpxkkwpghPE X-Google-Smtp-Source: ABdhPJyzAlRX6J0P1xOGBBHNXqKSvzfz2TFMrHgLndGArHVpE+urQZmd+JU1s05Saea0PJukQEr9fA== X-Received: by 2002:aa7:df05:: with SMTP id c5mr4502185edy.48.1592591024422; Fri, 19 Jun 2020 11:23:44 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id w21sm5212409ejc.11.2020.06.19.11.23.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:23:43 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> <83ftarxf58.fsf@gnu.org> From: Dmitry Gutov Message-ID: <27b37b2d-c509-b5fb-c633-fc9dd60dc184@yandex.ru> Date: Fri, 19 Jun 2020 21:23:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83ftarxf58.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::535; envelope-from=raaahh@gmail.com; helo=mail-ed1-x535.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:23:48 -0000 On 19.06.2020 18:13, Eli Zaretskii wrote: >> It's not the worst idea, but the set of "buffers belonging to the >> current project" should probably be the same between >> project-switch-to-buffer and project-kill-buffers. > > No, not necessarily. The purpose of the commands is different, so > they could start with the same basic list, but apply different filters > to it. There can be subtle differences (e.g. ones stemming from project-kill-buffers-skip-conditions), but the general notion of what it mean to have a buffer belong to a project should be generally the same. >> And as Philip explained, it's useful for the latter to consider many >> different major modes. > > I'm talking about the former, not about the latter. And I am talking about both. From MAILER-DAEMON Fri Jun 19 14:30:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLmT-0003ip-4i for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:30:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50436) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLmR-0003eB-Ae for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:30:23 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:21377) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLmN-0001Zm-D0; Fri, 19 Jun 2020 14:30:22 -0400 Date: Fri, 19 Jun 2020 18:30:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592591415; bh=0CQ0zIAbFdky+KsurPOOFvSoD5L4n/i58ZEfpFEbT3g=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=fIIUUn2WtKCQehVhpfYxzrvM462cJj3uO9VLAMAJ5wtmwcA4+gqtayVp9gJDJz3zL cRAf3afXsZDQGm1Ye25rCNbQ81qwCDrEpOG6iRjvK+FatS9Idj/p64YgsU6fJ/nKqs jX3vY3KKbNllF/uOSqYfxIQZfXR3kihgmNkICiXqIFgiIw+qHLMKsjkFztSj3jBntF aq4wZ6R0WC9gMoOt3MfvOuwDpX8++TPsHwBQSAy0q+N8nDQ755E9s+D97s7qfyWh/N m27ogYnoZ2sTPH9vPBLOq/POmblPJpDUIHoAmLrTC0snAQPphL9djc/5RsbXOcgdua hBh/eAk4O2ZBg== To: Dmitry Gutov , Eli Zaretskii From: Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <871rmaoqmz.fsf@thornhill.no> In-Reply-To: <7db8ac85-5f05-b834-4a18-ccebc117f492@yandex.ru> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <7db8ac85-5f05-b834-4a18-ccebc117f492@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.131; envelope-from=theothornhill@pm.me; helo=mail-40131.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 14:30:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:30:23 -0000 "Dmitry Gutov" writes: > On 19.06.2020 18:39, Theodor Thornhill wrote: >> I believe project.el to be a bit ambiguous, since it is both a generic >> "wrapper" for a generic interface "project", but also an implementation = of >> the "vc" version of this interface. So the behaviour you suggest here is >> easily done in say: >> >> (cl-defmethod project-root ((project (head some-major-mode))) >> ...) >> >> The version used now is merely saying: "Show me everything but the >> things ignored in .gitignore." > > Let's not do that. FWIW, I agree From MAILER-DAEMON Fri Jun 19 14:33:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLpR-0006B6-I7 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:33:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51462) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLpQ-0006Az-A8 for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:33:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53310) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmLpQ-00022n-16; Fri, 19 Jun 2020 14:33:28 -0400 Received: from [176.228.60.248] (port=2112 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmLpP-0001rQ-DO; Fri, 19 Jun 2020 14:33:27 -0400 Date: Fri, 19 Jun 2020 21:33:16 +0300 Message-Id: <838sgiykgj.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu Cc: emacs-devel@gnu.org In-Reply-To: (message from Yuan Fu on Fri, 19 Jun 2020 13:36:10 -0400) Subject: Re: Prettifying Info node (variable pitch font) References: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:33:28 -0000 > From: Yuan Fu > Date: Fri, 19 Jun 2020 13:36:10 -0400 > > Here is my take on prettifying Info node. Apart from looks prettier, I think it makes Info node more legible. > > 1. I added variable pitch font to Info. > 2. My prettification also takes advantage of word wrapping, so the Info node looks good in any buffer width. > 3. Indent and everything work right. Thanks, but I don't see how this can be done correctly in principle. Texinfo has several types of what it calls "environments", each one of which determines whether the produced text needs to be indented or not, filled or not, centered or not, etc. In the Info format produced by 'makeinfo' that information is lost. While you may be able to guess the kind of "environment" in some situations, I don't see how you could do that everywhere and with 100% accuracy. Without that, the result will sometimes be incorrect. E.g., what happens with results of @quotation or @verbatim or @display or @format or @flushright or @caption or...? Check out the Texinfo manual for what effect each one of these produces in the Info manual. It's possible that our own manuals don't use any of these features, so you didn't see them. But we could use them at some future time, and other manuals do. The way to display the Info documentation as a Web browser would is to work with HTML (or similar) format, not with Info format. I believe there's work under way as part of the Texinfo package to add such capabilities to Texinfo. When that is done, we will need to adapt our Info reader to the resulting format, or maybe write a new reader from scratch. From MAILER-DAEMON Fri Jun 19 14:33:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLpf-0006WP-0C for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:33:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLpd-0006Rl-9z for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:33:41 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:36837) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLpb-00023q-8D; Fri, 19 Jun 2020 14:33:40 -0400 Received: by mail-wm1-x333.google.com with SMTP id d128so9959496wmc.1; Fri, 19 Jun 2020 11:33:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=pqNvaMhZPj5xFdDZ0F9JAyMlDvcBowImjvfpdFIZGnE=; b=pk7A3hQeT4+TCT+h4K/shQ8N3wH1VTInrXHEaFr3L0/REZkm9k9/VbfX6P6ddgoXSa CktfaGitOFhyNjCxyS8Le4ivyMuwPNpzeVO9f+pzk9nY0CajmUXVWagiSlCx4pAJ8k7h enw4cOGEZ5VX2Ym6MRKYIUUXRBVdv2cl/nN3uW2SaN0dvyooVKTmXERT0948Zt5km5BK Q+gZUeVgILy78WJROFjNo9Va8i7LyzShT/udUd8+g10TpLTZ8F4aPs/KbawoyvckAqcj 8y7PdQIoOOjiH2F+OqLV6E+8D0Du21rRT/047y8crruAFadvS79jQvoLYmp//RmJHEhD mPYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=pqNvaMhZPj5xFdDZ0F9JAyMlDvcBowImjvfpdFIZGnE=; b=GSnRGcymI0uxpybF+IoZHiYKkddn+6HEev8EhgbYkWSiURzb4jL5kWKZIQgyG7H6Zf p90FHxxYFLLgpmB5BPMxBklMwohdb4OcAE4ubHCOweApQdCBFOna5GmYvvQSmBWogBMv TTkvODdB/XiHjyQhYeXiF0GoHlsRt/zhigfrXXloOrEdJ2KQqaOyMMwknzsls/GOx15p 6IbTLi/k57+9sF/ZTw7aKBv2yZskxE6b7td3Jhmrb7BBOnwjSk8q4CM6KNrjYlaHEy1A Ir6Suda6wrQZVHJcqqK6K0vRCGTRTbWGIqatu/FVSO/g1+fKPsY+QtbbpTwbnp1mp3V3 l3Tg== X-Gm-Message-State: AOAM531C4V1ElUCISgK5dZZd+29P7bCcSR6xtczDPjBRPZk2wtPkI358 HPKE9viDV6rfxsyviLZR6bPFfFuE X-Google-Smtp-Source: ABdhPJxdDKGFzCYsLBV0WYt2yiGBlgR98D0A5/qIVw4doucj14AH/07aNui+PXM/MIXdBOivWc+Jwg== X-Received: by 2002:a1c:f203:: with SMTP id s3mr3499668wmc.126.1592591616824; Fri, 19 Jun 2020 11:33:36 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id 138sm7869455wma.23.2020.06.19.11.33.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:33:36 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 21:33:34 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83h7v7xf7w.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=raaahh@gmail.com; helo=mail-wm1-x333.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:33:41 -0000 On 19.06.2020 18:11, Eli Zaretskii wrote: >> >>> Switch to another buffer related to the current project. >> >>> A buffer is related to a project if its `default-directory' >> >>> is inside the directory hierarchy of the project's root. >> >> >> >> Sounds good. Except some projects can be inside one another, too. >> >> > Does that invalidate what the text above says? >> >> If the current project contains a few other projects inside of its >> subdirectories, project-switch-to-buffer probably should offer any of >> "their" buffers for switching. > > "Should" or "should not"? If the former, then the text I proposed is > fine as it is. Sorry, should not. But it's an edge case. So we could take your description now. But we'd need to change it when/if that edge case is fixed. The fix isn't difficult, I'm just unsure about its performance characteristics. >> As soon as you start relying on completion hints, you don't need to >> remember the names in advance. And it's also a good overview of the >> current open buffers in the current project. > > If this is just for completion's sake, then I could understand, but > still it sounds very strange to include stuff like *XREF*, Eshell, > Occur, *Compilation*, *Grep*, etc. Those are basically singletons, at > least by default, Not really. In most of these cases, such a buffer shows results pertaining to a specific project, so its contents are basically irrelevant when a user is working on a different one. Occur can be an exception because multi-occur can work across buffer (and thus, projects). Help buffers contain history, so they are special too. But the rest usually fall in with that rule. And there are also derived compilation modes, which pertain to specific projects even more (e.g. they contain test runner outputs). > and a simple "C-x b" should be enough to switch to > them. 'C-x b' can be used in a lot of cases, but what I have seen requested here, it being able to do all work on a project (or as much as possible) while only using 'C-x p b'. It makes some sense to me, and I think Projectile has proven the demand for such command. > project-switch-to-buffer should be more helpful by offering > only "useful" buffers. That is indeed an option, but Andrii requested a different behavior. Please see the original discussion. >> Also, different projects can have files with conflicting names. > > That cannot be solved by completion, where only the basename is > usually shown. It can, if we ask Emacs to only show the buffers from the current project. Then you don't need to worry about conflicting with other projects. From MAILER-DAEMON Fri Jun 19 14:34:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLqq-0000bH-90 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:34:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLqo-0000W1-EB for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:34:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53331) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmLqo-0002Dg-0H; Fri, 19 Jun 2020 14:34:54 -0400 Received: from [176.228.60.248] (port=2193 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmLqg-0001yB-62; Fri, 19 Jun 2020 14:34:52 -0400 Date: Fri, 19 Jun 2020 21:34:36 +0300 Message-Id: <837dw2ykeb.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu Cc: larsi@gnus.org, emacs-devel@gnu.org In-Reply-To: <2F9680C4-11D8-4092-A485-2590AAF62CC9@gmail.com> (message from Yuan Fu on Fri, 19 Jun 2020 14:03:24 -0400) Subject: Re: Line wrap reconsidered References: <92FF4412-04FB-4521-B6CE-52B08526E4E5@gmail.com> <878shfsq35.fsf@gnus.org> <83imgivjak.fsf@gnu.org> <83lfletr03.fsf@gnu.org> <4895C6EE-5E1F-44BF-93C1-CC5F7C096F73@gmail.com> <9766BA3D-B8F9-456B-9F59-60D21B86E390@gmail.com> <83sgfls2ul.fsf@gnu.org> <83v9kgq6jy.fsf@gnu.org> <5E75D1E2-8BFF-45DA-A643-40DBD5784508@gmail.com> <83r1v3qlel.fsf@gnu.org> <83blm6lzj3.fsf@gnu.org> <83pnakj8fs.fsf@gnu.org> <83k10sj60l.fsf@gnu.org> <0B30F8C8-9B8F-4FCB-B9FB-1B5A0E993CDB@gmail.com> <838sgjzij2.fsf@gnu.org> <83sgerxmbs.fsf@gnu.org> <83bllfx80g.fsf@gnu.org> <2F9680C4-11D8-4092-A485-2590AAF62CC9@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:34:54 -0000 > From: Yuan Fu > Date: Fri, 19 Jun 2020 14:03:24 -0400 > Cc: Lars Ingebrigtsen , > emacs-devel@gnu.org > > I don’t have to know if I’m at left or right edge, I just want to know if the iterator is drawing from right to left or left to right. What is the right way to know that? Look at the reversed_p flag of the glyph row. From MAILER-DAEMON Fri Jun 19 14:36:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLsU-0002r3-JA for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:36:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52398) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLsS-0002p5-RL for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:36:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53377) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmLsS-0002nx-Cl; Fri, 19 Jun 2020 14:36:36 -0400 Received: from [176.228.60.248] (port=2304 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmLsR-0002Es-Dn; Fri, 19 Jun 2020 14:36:35 -0400 Date: Fri, 19 Jun 2020 21:36:25 +0300 Message-Id: <835zbmykba.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theothornhill@pm.me, emacs-devel@gnu.org In-Reply-To: <295d9f94-5198-6d5b-c51e-ba0bcf76a39c@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 21:19:37 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <295d9f94-5198-6d5b-c51e-ba0bcf76a39c@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:36:37 -0000 > Cc: emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 21:19:37 +0300 > > > What I had in mind was a simple filtering by major mode, not unlike > > the current filtering by default-directory. How complicate could that > > be? > > That's not how it works. A project is defined by the generic functions > the API already has. > > Even if some projects would prefer to work with files with certain > extensions only (doesn't sound like a good idea to me), that would be an > extra, new feature. As such, it is irrelevant to this discussion. You have completely missed my point. But since you say this is irrelevant, I won't say more. From MAILER-DAEMON Fri Jun 19 14:41:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLxE-0007Yi-AC for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:41:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53304) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLx8-0007YL-2S for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:41:26 -0400 Received: from mail-qk1-x72f.google.com ([2607:f8b0:4864:20::72f]:36867) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmLx6-0003f5-FP for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:41:25 -0400 Received: by mail-qk1-x72f.google.com with SMTP id k18so770040qke.4 for ; Fri, 19 Jun 2020 11:41:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:subject:organization:mail-copies-to:date:message-id :user-agent:mime-version; bh=wlhWqz6UK8BB6Fe9+m4in+kIZJpZzky8jNwBRccKi5M=; b=rQNMYUu+h17N2SSvA5W1yBQmJPBKdJQ6GMorToHgQlJGljgk4S09dplP6G5IKQ83hW Gjl4gpEzVrW2WemltTl/9gcmWSuPkrfQj55MOPL+SBSjLLDpl1jxaZCw0Uyk4MMpjADW uj7yG02DWArH5fF9LXSiGEqU90IRDh8ROCoBU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:organization:mail-copies-to:date :message-id:user-agent:mime-version; bh=wlhWqz6UK8BB6Fe9+m4in+kIZJpZzky8jNwBRccKi5M=; b=mz45rYvarVupnV6LqJ/QC1n5mu+j4i+ANO7zI4m3/3RKQ0LmHGmQeRULglsnlP451B HfDcXn7FVNHYAhInAlZujy26+WsRQz9Cog0gLqr38vEMTrl4Z7RusrxR8sv/OWL4mceA cmGLze0C5k8WlDAAg/BWttgfmJxGAXX2leWXbvfuy7JYEqxlqorff4W6gxZv96lEyao0 Mxl0tgVhJbktfGQtWUalw1STSLAoUVSypHPSCFkQQVMjhuGVShE75Oc0FUSaTKNblMD8 Z2RlkrC1DItI/okIHMgG6gEJegDWDxlX4sy2jZjrzSrqNiUpMiZQN1pGI1z40fbC0dKj ICtQ== X-Gm-Message-State: AOAM532yWdpBvAILupqWr+6X0cLbU4E5VnzB9yRwYBYiUO+nQN0xu246 ATtzcviYmAs7CSvItxaxlnh5cA== X-Google-Smtp-Source: ABdhPJxx4Yq5s16/HYPclPAf3NBfpbVX8mOdB56D01iH8waSbZbFYThwMEC5C/vWDmA7qsIGhQO+2Q== X-Received: by 2002:a37:9fcc:: with SMTP id i195mr4073546qke.415.1592592082948; Fri, 19 Jun 2020 11:41:22 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id o62sm6909115qkd.53.2020.06.19.11.41.21 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 Jun 2020 11:41:22 -0700 (PDT) From: Ted Zlatanov To: Emacs Development , John Wiegley Subject: RFC: omit some variables from custom-save-variables Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 19 Jun 2020 18:41:20 +0000 Message-ID: <4kr6525r.fsf@lifelogs.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::72f; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x72f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:41:26 -0000 Hello! I am proposing a simple way for Emacs packages to use the customize machinery without forcing the variables to be saved. A good use case is to let use-package :custom coexist with cus-edit.el:custom-save-variables. It bothered me yesterday because I like use-package :custom a lot so I thought I'd propose something :) Specific example. On the use-package side, something like this: (use-package python-mode :custom (python-indent-offset 4)) creates python-indent-offset in my custom.el file *and* in the code above, creating duplication and possible problems if I remove it from the use-package invocation. The proposal is for use-package to apply the save-exemptions symbol property behind the scenes. This is a new symbol property. This change has no effect on existing code or customizations so it's a gentle upgrade. For users with older Emacs versions, there is no difference. There is no provision in this proposal for channeling Customize UI interactions into use-package :custom or other places. Users will have to manually migrate customized variables from the custom.el file, just like they do now. Ted #+BEGIN_SRC diff diff --git i/lisp/cus-edit.el w/lisp/cus-edit.el index 1ec2708550..308bb9fa0a 100644 --- i/lisp/cus-edit.el +++ w/lisp/cus-edit.el @@ -4600,6 +4600,8 @@ custom-save-variables (mapatoms (lambda (symbol) (if (and (get symbol 'saved-value) + ;; Drop explicitly ignored customizations. + (null (get symbol 'save-exemptions)) ;; ignore theme values (or (null (get symbol 'theme-value)) (eq 'user (caar (get symbol 'theme-value))))) #+END_SRC From MAILER-DAEMON Fri Jun 19 14:42:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmLxm-00005k-L1 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:42:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmLxl-0008Ua-MK for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:42:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53447) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmLxk-0003jX-TV; Fri, 19 Jun 2020 14:42:04 -0400 Received: from [176.228.60.248] (port=2634 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmLxk-0002cS-1G; Fri, 19 Jun 2020 14:42:04 -0400 Date: Fri, 19 Jun 2020 21:41:52 +0300 Message-Id: <834kr6yk27.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <874kr6oqz1.fsf@thornhill.no> (message from Theodor Thornhill on Fri, 19 Jun 2020 18:22:48 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:42:05 -0000 > Date: Fri, 19 Jun 2020 18:22:48 +0000 > From: Theodor Thornhill > Cc: dgutov@yandex.ru, emacs-devel@gnu.org > > > My point was and remains that using default-directory as the single > > criterion for deciding whether a buffer should be offered as > > completion candidate to switch while working on a project, sounds like > > not the best idea, since it will pick up many buffers to which users > > are unlikely to want to switch as part of working on the project. > Yeah, I agree. I can try to come up with something more appropriate > than the default-directory. Though I for one, want the *xref* to be part > of that, since "project-find-regexp" uses it. Why does it matter that project-find-regexp uses *XREF*? the question is why would you need to switch to it when it is not displayed in any window? > I believe I read you wouldn't want it. I guess many others will have > many different opinions in this matter. When I work with xref-related features, I keep the *XREF* buffer on display as long as I use it. When I'm done using it, I don't care about it anymore. In any case, there's just one such buffer, so switching to it is easy. > In addition, when do we make that first desicion, really? Right now it > just sort of happens after you go "git init" in terminal. To me it > sounds like that new workflow adds some steps to what is right now a > quite seamless experience. That we mainly support projects that piggy-back VCS repositories doesn't mean that's the only kind of project that could be useful. And even if the backend is Git, no one said that I want all of the files in the repository to be part of my project. I may be working on a project that includes just a handful of files from a repository that has thousands of them. From MAILER-DAEMON Fri Jun 19 14:44:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmM0O-0002YI-7R for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:44:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54044) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmM0M-0002Y8-HH for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:44:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53518) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmM0L-00046Y-Nn; Fri, 19 Jun 2020 14:44:45 -0400 Received: from [176.228.60.248] (port=2808 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmM0K-0002n9-Pl; Fri, 19 Jun 2020 14:44:45 -0400 Date: Fri, 19 Jun 2020 21:44:35 +0300 Message-Id: <83366qyjxo.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <27b37b2d-c509-b5fb-c633-fc9dd60dc184@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 21:23:42 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> <83ftarxf58.fsf@gnu.org> <27b37b2d-c509-b5fb-c633-fc9dd60dc184@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:44:46 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 21:23:42 +0300 > > On 19.06.2020 18:13, Eli Zaretskii wrote: > > >> It's not the worst idea, but the set of "buffers belonging to the > >> current project" should probably be the same between > >> project-switch-to-buffer and project-kill-buffers. > > > > No, not necessarily. The purpose of the commands is different, so > > they could start with the same basic list, but apply different filters > > to it. > > There can be subtle differences (e.g. ones stemming from > project-kill-buffers-skip-conditions), but the general notion of what it > mean to have a buffer belong to a project should be generally the same. "Generally", yes. But your objection above was based on the premise that they are identical. If they are similar, then there's no problem. > >> And as Philip explained, it's useful for the latter to consider many > >> different major modes. > > > > I'm talking about the former, not about the latter. > > And I am talking about both. Are we still talking about the doc string of project-switch-to-buffer? If we are, then the latter is a separate discussion. From MAILER-DAEMON Fri Jun 19 14:49:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmM4g-0006Iu-9R for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:49:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55048) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmM4d-0006E2-On for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:49:11 -0400 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]:36069) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmM4b-0004xE-T0; Fri, 19 Jun 2020 14:49:11 -0400 Received: by mail-ej1-x629.google.com with SMTP id dr13so11222209ejc.3; Fri, 19 Jun 2020 11:49:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=ghy3qA6nw5z6UJ0E5/SrFDS/nb1BhMBfR/NKjIoIL3c=; b=kIiyk9lksOBKP/YLpJiRD+X5On8gMfZp3K5BIN896NUMbFQBKFljJFC42nP5R9yB/K FpTvxYgfhUaV3ieiMii4DkyyzelWdfUhtXyI3y0raeLs9uhnh532y/+jab27AItooJo5 cjzkueKstpA2EjK/URzs8SY3oPYsLH8EQBuIN3M5V4zNiAND8rtLO4ZLAFGlMdNBB4Lb L9D5oHIlryZc6PbyqfZgFgeY1ogi8bEkcaKOR0Hstls2DYpGRtGoajs2ZwNLFYC8ydv3 JeKhMiAzZ1CmBrs0bivqYdaCMqIKx2iFw+Hpq2WxViwtJoUzMMfs4ZuGsCX4o/kOOHmG WGhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=ghy3qA6nw5z6UJ0E5/SrFDS/nb1BhMBfR/NKjIoIL3c=; b=IqMktzEnPOI62HWx74g6cBP3da4lry1Wnf48z+2RK1GKPvbD/JE9pMurca3OACi5aE saGznhbP6uCj8yHJCKmhhmGA6j9fypA3/QHir99I8mHO8KlM0wNfLBqj44yFx/VlEbBK kY8aMP/3zAHwguL2UuqK/K2X4YGP5ICcy1KcUXZpyQ/LIWdGrJ0p9SrF/efFmpyc8P/z Jv77I4a1Pr9hGfVdFXmMz8IdOGZpcFc4u1GtgHAiDKs6IGzoyoY43Qq52QtA7nYHFoyG xoKjA0YHQ3nQEpE1HbgL1FgCrf8nKcUQdhip3dkEv4c+Oei2URh/wY4VPdAvYPhMqmuk FrSQ== X-Gm-Message-State: AOAM532ptBPeYSNHDiy4zWrCZAE3g6mnRkQMwdmVV0gLVBXBe5Qorp6F A6waLT1QOeLD+eNfFioBC6iL9shi X-Google-Smtp-Source: ABdhPJynUP1TXrOmRX39GnN+qxIUzJIXKKQPpyp0IY6iGYjgQ22Xp9+eJ97ywS+9WH4q1ZamUXGQTg== X-Received: by 2002:a17:906:3e15:: with SMTP id k21mr4908396eji.525.1592592547763; Fri, 19 Jun 2020 11:49:07 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id z26sm5493555edm.1.2020.06.19.11.49.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:49:07 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theothornhill@pm.me, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <295d9f94-5198-6d5b-c51e-ba0bcf76a39c@yandex.ru> <835zbmykba.fsf@gnu.org> From: Dmitry Gutov Message-ID: <0e9134ea-1cdf-5b0f-20fd-a7e8d58417c5@yandex.ru> Date: Fri, 19 Jun 2020 21:49:05 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <835zbmykba.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=raaahh@gmail.com; helo=mail-ej1-x629.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:49:12 -0000 On 19.06.2020 21:36, Eli Zaretskii wrote: >>> What I had in mind was a simple filtering by major mode, not unlike >>> the current filtering by default-directory. How complicate could that >>> be? >> That's not how it works. A project is defined by the generic functions >> the API already has. >> >> Even if some projects would prefer to work with files with certain >> extensions only (doesn't sound like a good idea to me), that would be an >> extra, new feature. As such, it is irrelevant to this discussion. > You have completely missed my point. But since you say this is > irrelevant, I won't say more. Perhaps. So let me clarify a little. What I originally though you meant, it adding a filter by major modes for non-file-visiting buffers. That kind of makes sense, but that kind of filter shouldn't depend on the project in question (it could, but that, again, would make things more complicated; so let's work with the current model first). On the flip side, *some* projects could specify that they only work with certain major modes. But a lot of projects won't specify that. And we need these commands to work in both cases. So discussing the projects of the former kind is, again, a complication, and I'd rather we did that later in a separate discussion. From MAILER-DAEMON Fri Jun 19 14:50:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmM5V-0007Sz-9I for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:50:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmM5U-0007Sr-G0 for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:50:04 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]:45668) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmM5S-00053R-Vx; Fri, 19 Jun 2020 14:50:04 -0400 Received: by mail-ej1-x62e.google.com with SMTP id o15so11188102ejm.12; Fri, 19 Jun 2020 11:50:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=xfyOARs25KnoXjIi+5J8PRlHIoc2+4KFEpgJY/u8qg8=; b=I6lYMLuGxZB14v99qqnVxaJEEyCweUXHrMYIw8NH5gkokBAUpPjoRm2x/RyNy5mRTJ hpqx1vJURxglIbunvPpqqh7BO+u7XkblAS4OGotg4eeisUDlFOQEQ7BawJ5k9Va6aFTt B4HEaByjSV1Ki8psMone/WFMWy1UaIx3AM0B5kcY3jFq3pZ8k+5CxJeuuubQJ+7Ithz4 7DebGmvbsm9GVSLpJj5Iws5pnM5stA+svKmIaT6wSYfASYQ8SN66GhxKtMF8p65vN6t2 3wtatKlA8CY2k+PK39TYVw7CoRUPzc1wqA6vMrlsYlyIHiN6Zoac+qfLh2kxjjZe8NE7 pvYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=xfyOARs25KnoXjIi+5J8PRlHIoc2+4KFEpgJY/u8qg8=; b=dgawSK847CmlqL5jqLX8GnDFtnu6lj5rrOGal6VhkrI1pKTu7cpDeTFKLJb2OoehQv IGhRcpDQvgWNq2UVj2FldoA2tmBg0hVUQNGTsFjKFnWriCVm9/WgOfMUiL4o1WSKVVER wTk2R6Ua8BCJ1vsltgyX2v87NlGjpO3noscyxiRnYdVwktQithiK5TQzCMCk3I9KR8fH /B6odu64qmbjoDFLfCQARmR7DGOfTeLgbcsSFOqDdCEnAXUtvOTtktEbD0j6A3Mr0q8Q Oa2T4jU3sKVy1jxfSQjdw8LyP4teC+4bW9x7U/cH6UiU0Inf8YtaAQI6lmBakPzh4ODm dLLA== X-Gm-Message-State: AOAM532M6HPZwQieRtrQdN7R9xVaX446b6eE9VRFnOo4hv6OJV/SZgB9 Plsdp7+7lIBonyfjnB7T8y78i4FY X-Google-Smtp-Source: ABdhPJwi417uhxar2y8TQzQOW5AFqKGcp2uLNEGWgGreRQlaVKNb0SBEbkrxJylLbr3AVUWKC0UXAA== X-Received: by 2002:a17:906:5283:: with SMTP id c3mr4677717ejm.22.1592592601058; Fri, 19 Jun 2020 11:50:01 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id bo26sm5403349edb.67.2020.06.19.11.49.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 11:50:00 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> <83ftarxf58.fsf@gnu.org> <27b37b2d-c509-b5fb-c633-fc9dd60dc184@yandex.ru> <83366qyjxo.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 21:49:59 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83366qyjxo.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62e; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:50:04 -0000 On 19.06.2020 21:44, Eli Zaretskii wrote: >>>> It's not the worst idea, but the set of "buffers belonging to the >>>> current project" should probably be the same between >>>> project-switch-to-buffer and project-kill-buffers. >>> No, not necessarily. The purpose of the commands is different, so >>> they could start with the same basic list, but apply different filters >>> to it. >> There can be subtle differences (e.g. ones stemming from >> project-kill-buffers-skip-conditions), but the general notion of what it >> mean to have a buffer belong to a project should be generally the same. > "Generally", yes. But your objection above was based on the premise > that they are identical. If they are similar, then there's no > problem. If we agree on that, then we probably agree that the docstrings of those functions should also be similar to a certain degree. From MAILER-DAEMON Fri Jun 19 14:58:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMDJ-0004QW-9e for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:58:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMDH-0004O7-Qx for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:58:07 -0400 Received: from mail2.protonmail.ch ([185.70.40.22]:42429) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMDE-0006C9-BY for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:58:07 -0400 Date: Fri, 19 Jun 2020 18:57:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592593081; bh=3wZ+yYH8EqBj+BohtO/ratGIc5ML+t2RU3N5C9+mu2c=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=ZDjPN9mZYDP+metUtnWwaRi8do1JmkZbQTfxGq6D9Hmu84N8Li7hqLEpGQ36f82OJ ws0yr5v3rIg9p/5DJBVQGMQFnGBK2r79s2d4r1plHRQl9I8ZoljRDy8wVI1Sux10X7 f+pCw1BjEVzj90eKWSXSQtEBNQVRdBn6nlLLsSIhly9Ti8X7WCdUJkCdsliGOSBo1P JhVyb85nrFg3HeMe7qS62WhD+yQupPH1Xz+hFE7Tn5HTGsOv92h12UX3qQqYJgLktW eWNvECvZ6tXWkJigUGi6cwEKD/ZThEk1nPwjLdFvPEbGyvtzluXL5l2El0qCZTaNlO JGdFO7wZbhVbQ== To: Eli Zaretskii From: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <87y2oinas1.fsf@thornhill.no> In-Reply-To: <834kr6yk27.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.22; envelope-from=theothornhill@pm.me; helo=mail2.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 13:46:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:58:08 -0000 "Eli Zaretskii" writes: > Why does it matter that project-find-regexp uses *XREF*? the question > is why would you need to switch to it when it is not displayed in any > window? I don't always use a very big computer screen, so sometimes I don't split the screen. > >> I believe I read you wouldn't want it. I guess many others will have >> many different opinions in this matter. > > When I work with xref-related features, I keep the *XREF* buffer on > display as long as I use it. When I'm done using it, I don't care > about it anymore. Same here, though I have wanted to jump back to one. Not always, but certainly not never. > In any case, there's just one such buffer, so switching to it is easy. Yeah, sure. I could use "switch-to-buffer" for that, but then I have to context switch only a little. It isn't the end of the world at all, but I'd like to have it there. (Though I didn't include it until Andrii mentioned it) > >> In addition, when do we make that first desicion, really? Right now it >> just sort of happens after you go "git init" in terminal. To me it >> sounds like that new workflow adds some steps to what is right now a >> quite seamless experience. > > That we mainly support projects that piggy-back VCS repositories > doesn't mean that's the only kind of project that could be useful. I definitively agree here. > And even if the backend is Git, no one said that I want all of the > files in the repository to be part of my project. I may be working on > a project that includes just a handful of files from a repository that > has thousands of them. True. I believe this is not yet supported fully by the api. For example, a huge monorepo with .git only in root is a struggle. Theo From MAILER-DAEMON Fri Jun 19 14:59:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMEG-0006ao-HW for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 14:59:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57208) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMEF-0006ah-Iy for emacs-devel@gnu.org; Fri, 19 Jun 2020 14:59:07 -0400 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]:33805) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmMEE-0006JR-0q; Fri, 19 Jun 2020 14:59:07 -0400 Received: by mail-qt1-x835.google.com with SMTP id u17so8036275qtq.1; Fri, 19 Jun 2020 11:59:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=iSabeD5RoDx6hiRLquaOtKjxIWSYRJpwM4G18MehA3o=; b=X3Um8qBMOrMdFOKzgXP8QCvFl6B9yIGN4BCGz7Zrtu0exjnR0qgAJSNrBgY01zLXbr +WVZvfP3NkJ3+kW5BTpWP6TSl/aJHqNltZU6uzTdHHqAbcU9N7WohM7KgA1EBm0L/8IC GetkMkh2HsJuqLMVQFJPMSy+ELeczS6G9SIbb3HPZApdGuPyqiH+zc8ZvtBL3YXcCnaR g7KpgEGRDv+N8XHsXpCgZAX0tzkBLglgs9FHy9O22OOzmkLCcwdj42z/sFmyhmQAzcLx NDbsPAqPEi2chVLkUAjigb35WfIARkRzh76geCS/6OwPHEIxFKMIxrLLcwoD4x5mX3df 3fEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=iSabeD5RoDx6hiRLquaOtKjxIWSYRJpwM4G18MehA3o=; b=c3eA2w9XWfNw6Fd2PgfG/xPodOuJ50SCeElEvxjLVCuVA0b7f8Hw6QjEMmr+YBsYI0 UUQ1jsfptO5z8TNPoF+ncMAGgvIxz67Uu6rqZTv/FdlPgeFQs2Qpk3m99hFpIFXRwxQK QMEm99hkyIHRwW4XBWDy9120PJIeyYI/B6yT2ECRWHSaxlsML2vQtpYySq4yHnvKxfTi Q0XftyC+y1UL1o4CAgJrFfImmSfFPPrd7jhOIyiP1u6TGYHtiZGwCjbXHCzS5453BDbE HvOHdbDDtkhzDfZd05i48aluzdARAk2iEOkAQlqsgMHMttXrT6pN5Pxd7xvMtK0FWUmR duyw== X-Gm-Message-State: AOAM530TZFa+KAg8KsijSITYw5eJAgrs5pu6qYIVl/Idz+gBS7uCeCaD 7Gv9kIsPakD9/Sv3s+owoUo5PwbMNA+qMA== X-Google-Smtp-Source: ABdhPJwr8N8EArbxD/+hozNqjJlb8jM9u6w7blcQTCiniBdrTRgJJPRJIXLYvhlb0gAHic3Ppl3iGw== X-Received: by 2002:aed:2171:: with SMTP id 104mr2482275qtc.22.1592593144379; Fri, 19 Jun 2020 11:59:04 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f9:e10f:5b2e:903c? ([2601:98a:4200:9210:f9:e10f:5b2e:903c]) by smtp.gmail.com with ESMTPSA id n63sm6401730qkn.104.2020.06.19.11.59.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Jun 2020 11:59:03 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Prettifying Info node (variable pitch font) From: Yuan Fu In-Reply-To: <838sgiykgj.fsf@gnu.org> Date: Fri, 19 Jun 2020 14:59:03 -0400 Cc: emacs-devel Content-Transfer-Encoding: quoted-printable Message-Id: <29D720A9-A47F-44AA-B34D-ED455FFE7039@gmail.com> References: <838sgiykgj.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::835; envelope-from=casouri@gmail.com; helo=mail-qt1-x835.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 18:59:07 -0000 > On Jun 19, 2020, at 2:33 PM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Fri, 19 Jun 2020 13:36:10 -0400 >>=20 >> Here is my take on prettifying Info node. Apart from looks prettier, = I think it makes Info node more legible. >>=20 >> 1. I added variable pitch font to Info. >> 2. My prettification also takes advantage of word wrapping, so the = Info node looks good in any buffer width. >> 3. Indent and everything work right. >=20 > Thanks, but I don't see how this can be done correctly in principle. > Texinfo has several types of what it calls "environments", each one of > which determines whether the produced text needs to be indented or > not, filled or not, centered or not, etc. In the Info format produced > by 'makeinfo' that information is lost. While you may be able to > guess the kind of "environment" in some situations, I don't see how > you could do that everywhere and with 100% accuracy. Without that, > the result will sometimes be incorrect. E.g., what happens with > results of @quotation or @verbatim or @display or @format or > @flushright or @caption or...? Check out the Texinfo manual for what > effect each one of these produces in the Info manual. It's possible > that our own manuals don't use any of these features, so you didn't > see them. But we could use them at some future time, and other > manuals do. >=20 Indeed, I used some ad-hoc rules to =E2=80=9Cparse=E2=80=9D the info = file. Then the right thing for me is to make this a package for whoever = is interested and can stand incorrectness here and there. > The way to display the Info documentation as a Web browser would is to > work with HTML (or similar) format, not with Info format. I believe > there's work under way as part of the Texinfo package to add such > capabilities to Texinfo. When that is done, we will need to adapt our > Info reader to the resulting format, or maybe write a new reader from > scratch. That would be very nice.=20 Yuan= From MAILER-DAEMON Fri Jun 19 15:01:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMH0-0008Of-9r for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:01:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMGy-0008Ni-Jt for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:01:56 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53896) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmMGx-00072T-0x; Fri, 19 Jun 2020 15:01:55 -0400 Received: from [176.228.60.248] (port=3856 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmMGw-0008U7-6m; Fri, 19 Jun 2020 15:01:54 -0400 Date: Fri, 19 Jun 2020 22:01:42 +0300 Message-Id: <831rmayj55.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Fri, 19 Jun 2020 21:33:34 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:01:56 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 21:33:34 +0300 > > >> If the current project contains a few other projects inside of its > >> subdirectories, project-switch-to-buffer probably should offer any of > >> "their" buffers for switching. > > > > "Should" or "should not"? If the former, then the text I proposed is > > fine as it is. > > Sorry, should not. > > But it's an edge case. So we could take your description now. But we'd > need to change it when/if that edge case is fixed. The fix isn't > difficult, I'm just unsure about its performance characteristics. I'm not sure that the doc string will have to be changed (or how) when you fix that, but that's a separate issue. > >> As soon as you start relying on completion hints, you don't need to > >> remember the names in advance. And it's also a good overview of the > >> current open buffers in the current project. > > > > If this is just for completion's sake, then I could understand, but > > still it sounds very strange to include stuff like *XREF*, Eshell, > > Occur, *Compilation*, *Grep*, etc. Those are basically singletons, at > > least by default, > > Not really. In most of these cases, such a buffer shows results > pertaining to a specific project, so its contents are basically > irrelevant when a user is working on a different one. But the default-directory of these buffers is a very weak evidence of them being relevant to some project. E.g., I could (and many times do) grep some other project when I need to see how it solves some problem which is relevant to what I'm working on now. If we really want to record in these buffers what project they are related to, we need to have stronger evidence, like what was the current-buffer when the command was invoked, or maybe something else (like name the buffers in some special way). > Occur can be an exception because multi-occur can work across buffer > (and thus, projects). Help buffers contain history, so they are special > too. But the rest usually fall in with that rule. "The rest" are a legion. I suspect that many/most of them are like Occur and Help. We should audit them before we make such far-reaching conclusions (unless someone already did). > > project-switch-to-buffer should be more helpful by offering > > only "useful" buffers. > > That is indeed an option, but Andrii requested a different behavior. That's fine, but Andrii's opinion is not the only one that counts, is it? We are talking about a general-purpose Emacs feature, not about a command that will only be used by a single person. It should make sense to all of us. From MAILER-DAEMON Fri Jun 19 15:04:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMJt-0002T4-Bd for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:04:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMJr-0002Qx-AG for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:04:55 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:40071) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmMJp-0007cN-E0; Fri, 19 Jun 2020 15:04:55 -0400 Received: by mail-wr1-x429.google.com with SMTP id h5so10731872wrc.7; Fri, 19 Jun 2020 12:04:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=EcjIXnd9Xb/LEdjgbGHq+Qa16zRTOAlCTk7yqRdKWdg=; b=O7gw9xQC1boR/RLVzuxioMShgTDPLGvlIZwIz6PVEBWdNSZxCPfh1RUH4gyLf1iKoS Hc8sD5qTKikqPMVBt9TYGwXI34/NfCkTLoUVuq9QhElanEqR4smm3SslZUugdbIXODH/ IyFNS9DG3t8QO2sah9JgIzz8E4nj1YSHB9f6aDxqqKIxhdBx/LLvpxbvaInD7CG2tf+y LoBvmDs2mYSV5mBMZfPveOPcDHo00gI+ByzHm4av8FXehnP6Yl8/XilrwPmMMgHQ4yTw ru83Cabew25wZQ8DgFwl2+LZAXmdCAqZciqAj7k7hgg6DkieVYmv4tk0/BHbmS3kYbE4 S4RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=EcjIXnd9Xb/LEdjgbGHq+Qa16zRTOAlCTk7yqRdKWdg=; b=jYJUQJZR1sdMLbur5PVf9hFvw1Uh2Bm7/BR4mWnsH5dLg5tK2mgk2ZBLTl0+ZOMmZt W7M3QE3jO7ceIM3BaO+huFcsVf1Y2kls2R8LCIwn1oR+9AXNkYLflQpjRkI9jeiPU6rp grxkCn1j47wHMoV+SLEwgTiWIBqCwdLLEnc9DbsbdwmFnkSDup2hkUGCts5roP7qtp95 nzr0mqyY9GYEszF/i00PhM2anH8jkL8nMoqPODnzGjj0Jl2a3on1kkh/KLWaZsh+M0G9 M2p2EE+/xFbwVUR9+7WchXATRSRW0BojFTB/Z7VQFvaKEVBRAvI4GtQgdlmgA+rtqRog RKxg== X-Gm-Message-State: AOAM533DUvXu4bfkRqC1nX2VtgdaHVBd23Dq7d+2tS24ns8KHl99cFRL fEdAnitjTxdIkkbpnLkz0AXjpKI1 X-Google-Smtp-Source: ABdhPJyMDjWpqt4WxOOZ1LuWGk7uHJu12g2HiAsvwSyAJYy2rLqLP+TUG5Ie9+f8sPVGYszSZi81Gw== X-Received: by 2002:a5d:60d1:: with SMTP id x17mr5391090wrt.46.1592593491148; Fri, 19 Jun 2020 12:04:51 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b18sm7972034wrn.88.2020.06.19.12.04.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 12:04:50 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 22:04:49 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <834kr6yk27.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=raaahh@gmail.com; helo=mail-wr1-x429.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:04:55 -0000 On 19.06.2020 21:41, Eli Zaretskii wrote: > When I work with xref-related features, I keep the*XREF* buffer on > display as long as I use it. When I'm done using it, I don't care > about it anymore. > > In any case, there's just one such buffer, so switching to it is easy. For singleton buffers, we could conceivably go either way, but recall what I said about people wanting to be able to predominantly use project-switch-to-buffer while working on a project. There are other kinds of buffers not tied to files that are not always singleton. E.g. rspec-mode creates compilation-based buffers that can be (depending on a user option) created per-project. And even when it's singleton, that particular buffer is only relevant to one project usually (the one that ran the tests most recently). > That we mainly support projects that piggy-back VCS repositories > doesn't mean that's the only kind of project that could be useful. True. > And even if the backend is Git, no one said that I want all of the > files in the repository to be part of my project. I may be working on > a project that includes just a handful of files from a repository that > has thousands of them. That is, again, true. But what of the rest of files in that repository? Do they belong to a different project? Do you also visit them, or not? If both answers are "no", then the current approach should work well enough. Otherwise, you're welcome to file a new bug report with more details, and we'll see what can be improved to accommodate that situation too. From MAILER-DAEMON Fri Jun 19 15:07:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMMT-0005B3-4M for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:07:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMMR-0005AF-3q for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:07:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53979) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmMMP-000856-W5; Fri, 19 Jun 2020 15:07:34 -0400 Received: from [176.228.60.248] (port=4204 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmMMP-0005Uy-FW; Fri, 19 Jun 2020 15:07:33 -0400 Date: Fri, 19 Jun 2020 22:07:22 +0300 Message-Id: <83zh8yx4b9.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Fri, 19 Jun 2020 21:49:59 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <73f90d2e-b754-93e0-4caa-5f86601edd98@yandex.ru> <83ftarxf58.fsf@gnu.org> <27b37b2d-c509-b5fb-c633-fc9dd60dc184@yandex.ru> <83366qyjxo.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:07:35 -0000 > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 21:49:59 +0300 > Cc: philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org > > If we agree on that, then we probably agree that the docstrings of those > functions should also be similar to a certain degree. They are. But if you think they should be more so, and would like to add to the doc string of project-kill-buffers text similar to what I wrote for project-switch-to-buffer, feel free, I won't object. From MAILER-DAEMON Fri Jun 19 15:10:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMP7-0006hA-7Z for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:10:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMP5-0006fk-IU for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:10:19 -0400 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]:45822) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmMP3-000097-Oy; Fri, 19 Jun 2020 15:10:19 -0400 Received: by mail-ej1-x636.google.com with SMTP id o15so11243217ejm.12; Fri, 19 Jun 2020 12:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=+8XkysTAOTTmCgEmZ8pazsX9l4nid4lXB5LfKgYdxpo=; b=cLN+dO4Z+bQL2T20J2qNtSMC4SQGjXqFaiWMHcWF9ZshtUGy7xpFNn+MiSXiiimsq3 WymHKC5C6X2CLhO4DEhfbnj7u0de/TPz0uIaHwO/kkPnP0111kZVd8X8mfLBfaCXBDpR ZlSxGzcJQHLrc+A8GJui9AfZD9S07nWuQ8sSD7agSPmvwVrz7B/z+LJXGFM8jP313QPU ekJCD2u2rkKNpCbJZ2krRoBC2HL25Rm2gE6A9MwANi5ykPVbVxCU4ISsaJdt9qVfVDkH aV/0cH6TQOQqMQN5WqU1S7ZN2+0co8Gh11XtDIJzpa41mjH7GblgObqs8DMkRZKGqtz6 Ceeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=+8XkysTAOTTmCgEmZ8pazsX9l4nid4lXB5LfKgYdxpo=; b=uEWCun4wkEsbhtIm2ViQ6NV4CzpkrTdZFYbcBYqgN8+Fl49kxRu+NKfgae8tde1CZb XfUrEzVu3uLO/GxRKGqL9FQP4IB204/3t5XJIQ6Q/tbOrc5dSqLIOYbZpchc44gJ2J7j eKqnuyL2ifD++/melUD6eVG3h6fXqvG0mOSGhjr4pLrQSlS/bgi06z/A+6mLUOWnnEOd YKLa9bw/jj5kG8DdZHIzjzsnibh2QVuibKQeKXZFZZOVETzej2JQytgePwJFReTSjGbN 4kVy6sNFlSpSM2W07qNgnbWZyYRZOAr0fkT4aHlT2G+hTCI69pRYI9DubgT5JCU0VLnu P6Cg== X-Gm-Message-State: AOAM533uPNmG9IzwKj4zgC/sDjGMHKpUUytxFAwjQ1YhSTG2EuSXalRo jKTNW5+7M73cveGnIi0+Gqjb7nTL X-Google-Smtp-Source: ABdhPJwV5OvPDtIvxDGTpNbvZcomd6eu6QkJDyct5W5r/Tc8Rb5igSiSviPuTOKKC81kpji2vieXRw== X-Received: by 2002:a17:906:648e:: with SMTP id e14mr4930229ejm.308.1592593815680; Fri, 19 Jun 2020 12:10:15 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id n35sm5617289edc.11.2020.06.19.12.10.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 12:10:15 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Theodor Thornhill , Eli Zaretskii Cc: emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <87y2oinas1.fsf@thornhill.no> From: Dmitry Gutov Message-ID: Date: Fri, 19 Jun 2020 22:10:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87y2oinas1.fsf@thornhill.no> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::636; envelope-from=raaahh@gmail.com; helo=mail-ej1-x636.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:10:19 -0000 On 19.06.2020 21:57, Theodor Thornhill wrote: >> And even if the backend is Git, no one said that I want all of the >> files in the repository to be part of my project. I may be working on >> a project that includes just a handful of files from a repository that >> has thousands of them. > True. I believe this is not yet supported fully by the api. For example, > a huge monorepo with .git only in root is a struggle. I suppose it could be fixed with whitelisting approach to project-ignores (feature planned). But that depends on how you can/want to define such a project. We'll need examples. And a new bug report, probably. From MAILER-DAEMON Fri Jun 19 15:12:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMRE-0001z0-HX for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:12:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMRD-0001wb-Fn for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:12:31 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54097) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmMRD-0000Tw-2q; Fri, 19 Jun 2020 15:12:31 -0400 Received: from [176.228.60.248] (port=4504 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmMRB-0005x0-64; Fri, 19 Jun 2020 15:12:30 -0400 Date: Fri, 19 Jun 2020 22:12:18 +0300 Message-Id: <83y2oix431.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theothornhill@pm.me, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Fri, 19 Jun 2020 22:04:49 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:12:31 -0000 > Cc: emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 22:04:49 +0300 > > > And even if the backend is Git, no one said that I want all of the > > files in the repository to be part of my project. I may be working on > > a project that includes just a handful of files from a repository that > > has thousands of them. > > That is, again, true. But what of the rest of files in that repository? > Do they belong to a different project? Yes. > Do you also visit them, or not? Not as part of working on the current project. Though I might decide to add some of them to the current project, as the need arises. > If both answers are "no", then the current approach should work well > enough. Otherwise, you're welcome to file a new bug report with more > details, and we'll see what can be improved to accommodate that > situation too. Which details are needed? In any case, my point was that relying on the VCS to determine what is and isn't in the project presents a restriction that a general-purpose project-handling facility should lift early on to be useful, IMO. From MAILER-DAEMON Fri Jun 19 15:28:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMgy-0005K7-Gc for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:28:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37188) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMgw-0005Ja-Ck for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:28:46 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:42948) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmMgu-0003I0-Do; Fri, 19 Jun 2020 15:28:46 -0400 Received: by mail-wr1-x430.google.com with SMTP id o11so3057260wrv.9; Fri, 19 Jun 2020 12:28:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=G44tBswrcFinQoVKHxBsizwciVVU+Yk00Cdx3Qsrw2A=; b=Wg3XpYa+CqIjmxEK31q7MCZuvQb+YGjGuGbqxBpa5nzw1ZaktutibI9xGD8RES2cXX BpHSo5+0PJKlsDzKWwwJHzXTKO0ZXTkUbJdrFMBLTEuvSZ1lhhLtkVnKnwfZ9sBQX6WX agwYB8OVAd5ViDWvPWRZJXj+TkJnRgcPADvP4ttVyEe6QInbo15TPMKDE/8hKUb/wghH yvu5z+1Of4bw3cY1+chjPRqxuG9Ichab2yweoDW59liYHErMJpixlwWdYCM+Sy5tC33e 4NWG5qvlWxliLHXh+BSBNjvyhVeGTJoX5MEjTD3ujgdq+sx+VdETnj594mII6imnJbNI n5fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=G44tBswrcFinQoVKHxBsizwciVVU+Yk00Cdx3Qsrw2A=; b=gxegGpvzQltAAHReWubhY/Av1J2PQPFxbV+m59a7g1bFcQfIfrzYC73YBHDGe0/kpq h2/hQhjIk6p1nfCfsvFHzNV+URVbaT+gXlze5RLYRF+lzZcDCMYIA9CEcWB+ze1pS4iY WWrNtk+p8AkiA/ZAtODzyWdHcQpcPy1lJyyxDZrUJN//IVMaAnmAJ8SI1iNXnTOW5XF9 0QiFY73p2cukt1Mb147F5yNxNRTL6E4/rJ/P7I1K0izGqff0bSD56xJz74iKT63P7ibl 8ERsRHC4ihmHY5Q/stQfeNXBt/AYNLqvfaZpCozeGgCUsoxcaRJhtwTE6U8t0W08XdIf FF3g== X-Gm-Message-State: AOAM530j6ctYLLxQiG88zyoqge3HeeePXLJ/5IgmtDISt7QBpItOKZkY 0o3k1xQDWl3u5xyWey1bHdv7grxt X-Google-Smtp-Source: ABdhPJzjaeZNUrkPXyAQsPr+6ugoRlA7zoVikWx4nuca2ZSsOBe9VVF6mC8bzz5W/e9wCEBV6d0XQg== X-Received: by 2002:a5d:6986:: with SMTP id g6mr5803353wru.27.1592594922046; Fri, 19 Jun 2020 12:28:42 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id j6sm7150799wmb.3.2020.06.19.12.28.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 12:28:41 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> From: Dmitry Gutov Message-ID: <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> Date: Fri, 19 Jun 2020 22:28:39 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <831rmayj55.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=raaahh@gmail.com; helo=mail-wr1-x430.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:28:46 -0000 On 19.06.2020 22:01, Eli Zaretskii wrote: >> But it's an edge case. So we could take your description now. But we'd >> need to change it when/if that edge case is fixed. The fix isn't >> difficult, I'm just unsure about its performance characteristics. > > I'm not sure that the doc string will have to be changed (or how) when > you fix that, but that's a separate issue. The fix would look like this: diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 89dcee97fa..d4eab9cd58 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -777,7 +777,7 @@ project-compile (defun project-switch-to-buffer () "Switch to a buffer in the current project." (interactive) - (let* ((root (project-root (project-current t))) + (let* ((project (project-current t)) (current-buffer (current-buffer)) (other-buffer (other-buffer current-buffer)) (other-name (buffer-name other-buffer)) @@ -785,9 +785,13 @@ project-switch-to-buffer (lambda (buffer) ;; BUFFER is an entry (BUF-NAME . BUF-OBJ) of Vbuffer_alist. (and (not (eq (cdr buffer) current-buffer)) - (when-let ((file (buffer-local-value 'default-directory - (cdr buffer)))) - (file-in-directory-p file root)))))) + (cdr buffer) + (when-let ((other-pr + (project-current + nil + (buffer-local-value 'default-directory + (cdr buffer))))) + (equal project other-pr)))))) (switch-to-buffer (read-buffer "Switch to buffer: " It's reasonably fast here when there are not many open buffers, but I fear the accuracy improvement from it might not outweigh the performance problems that will come up in the case of a lot of buffers. There can be a different approach, though. To define a new generic like project-contains-p. >> Not really. In most of these cases, such a buffer shows results >> pertaining to a specific project, so its contents are basically >> irrelevant when a user is working on a different one. > > But the default-directory of these buffers is a very weak evidence of > them being relevant to some project. E.g., I could (and many times > do) grep some other project when I need to see how it solves some > problem which is relevant to what I'm working on now. That is a case of working on multiple projects at once. And whatever your purpose of grepping it, wouldn't you agree that that grep buffer is probably closer to the "other" project rather that to the current one? To reuse your argument, 'M-x switch-to-buffer' is still available for borderline cases. > If we really > want to record in these buffers what project they are related to, we > need to have stronger evidence, like what was the current-buffer when > the command was invoked, or maybe something else (like name the > buffers in some special way). We would start with strong counter-examples. Generally, though, new buffers inherit default-directory from the buffers that created them. So default-directory is not the worst indicator. >> Occur can be an exception because multi-occur can work across buffer >> (and thus, projects). Help buffers contain history, so they are special >> too. But the rest usually fall in with that rule. > > "The rest" are a legion. I suspect that many/most of them are like > Occur and Help. We should audit them before we make such far-reaching > conclusions (unless someone already did). I think some people here already have some experience working with Projectile and its projectile-switch-to-buffer, which exposes the current behavior by default. But we should also try the new command out and document our experiences. >>> project-switch-to-buffer should be more helpful by offering >>> only "useful" buffers. >> >> That is indeed an option, but Andrii requested a different behavior. > > That's fine, but Andrii's opinion is not the only one that counts, is > it? We are talking about a general-purpose Emacs feature, not about a > command that will only be used by a single person. It should make > sense to all of us. So far Theodor agreed too. And myself as well. You alone have voiced disagreement. With this distribution of votes, it seems the default behavior should default to including non-file-visiting buffers (with some agreed-upon exceptions). And, of course, we can add a user option that would allow to tweak the choosing logic. From MAILER-DAEMON Fri Jun 19 15:33:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmMlH-0007z9-6i for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 15:33:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmMlE-0007y1-Ud for emacs-devel@gnu.org; Fri, 19 Jun 2020 15:33:12 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:33617) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmMlD-0003yn-Gh; Fri, 19 Jun 2020 15:33:12 -0400 Received: by mail-wr1-x42c.google.com with SMTP id l11so10804489wru.0; Fri, 19 Jun 2020 12:33:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=hTujO0NbUlX8dQ1oUYe+K2WwhWDhTYq0dtSdVTAzZXg=; b=sQaA5ARC/03arKSAc25P+VxT1zF8rHIQZ0xELUnNF3nvCF0Bc7pP4CjrfqisVyhRbv 8GzzdkiMDx80wH2f2Mp7VEizd+R13USYS1+Mjy/fJUWGe6tNHWli2r8Xjbp+rUynFzgk Ws+3sKKbHS7focVwhkmt9EHUKlI4ERJj/tnKVogsY1iNukKd4JsIrbrtiE9evjb/yMw/ O6EPM90o7oLTJghD+PmpyslVE+fw9Sy416Pd2SLCltzQaK+Oy5wvHB8w9XKLL8Gj8lGC z5f80IMvLyJrdEJk4sPBRwjjYJcYyyUaRsKuO7OXEJnP8Z2oNbmvhGha6yN3uwfSkQ6N a1Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=hTujO0NbUlX8dQ1oUYe+K2WwhWDhTYq0dtSdVTAzZXg=; b=eNk2qiPqJI9+YMi3NdfEvp1+EbAwtBayiI0WEf+qw9hSKL/rtTk4GwH0WTG5S5PEUg 1ShYWihKKtSMB9Ueycxh2KGnic2/PCSmR3jMz/0o/2x4dkqCnw7CNGKOPSLqpM/bb/KT GDrX4X6D5mVq3f0No+41/vcfDrK10fBzmEKZU42+KoUo2XaOIT840t+yn00ZwZDAwxKO 4V57V6PKS9MVCQS3I0NPf0drdRzvL0SOqjo8LAm9uhctjB/M4mcPmybmov9W0rmAbIz2 Z/SaGxC+5tQODTDX+azTgHKjEJgsgO+4yI6on5azue//CL+zY2Hr2geEO8qYlkbDgil8 J05Q== X-Gm-Message-State: AOAM530td3iK5Gj6WGZjxNaDXqBgwQOOkdBN4DXIG15EHekKhbqM+CSk v+/vyl/BJg59zSg15rPPwjA8+scK X-Google-Smtp-Source: ABdhPJzhW6lntwJo0J05xB/9zcDPsN9KuX1hgpNXUFWZCXWOs3byD49RbskEBieT/PcV/RTpiyIRrQ== X-Received: by 2002:adf:e80a:: with SMTP id o10mr5857505wrm.185.1592595189341; Fri, 19 Jun 2020 12:33:09 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id n19sm7464902wmi.33.2020.06.19.12.33.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 12:33:08 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theothornhill@pm.me, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <83y2oix431.fsf@gnu.org> From: Dmitry Gutov Message-ID: <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> Date: Fri, 19 Jun 2020 22:33:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83y2oix431.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 19:33:13 -0000 On 19.06.2020 22:12, Eli Zaretskii wrote: >> That is, again, true. But what of the rest of files in that repository? >> Do they belong to a different project? > > Yes. > >> Do you also visit them, or not? > > Not as part of working on the current project. Though I might decide > to add some of them to the current project, as the need arises. I mean, do you visit them in the same Emacs session? >> If both answers are "no", then the current approach should work well >> enough. Otherwise, you're welcome to file a new bug report with more >> details, and we'll see what can be improved to accommodate that >> situation too. > > Which details are needed? How is the current project defined. How is the "other" project defined. Something like that. > In any case, my point was that relying on the VCS to determine what is > and isn't in the project presents a restriction that a general-purpose > project-handling facility should lift early on to be useful, IMO. I agree, but agreement alone is not enough to make it a reality. OTOH, we already have a customization point that allows to exclude more files than .gitignore does (the project-vc-ignores variable). *And* one can use the project API to introduce a project backend that does not rely on VC repositories. That's just not trivial, is all. From MAILER-DAEMON Fri Jun 19 16:08:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmNJf-000193-I5 for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 16:08:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmNJd-00018x-Ul for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:08:45 -0400 Received: from mail2.protonmail.ch ([185.70.40.22]:14560) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmNJb-0001FD-B3 for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:08:45 -0400 Date: Fri, 19 Jun 2020 20:08:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=protonmail; t=1592597317; bh=bLfRTBcZUwX9H8jTEFn1mCy3Shi6DipwAFwO5TWHVFU=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=T3mZ2Vlyq0cXZGfAzmZOH3AdCdQxBANVGt6IXCeqWLBhoLHHJE0yYwHE4/NTsOXGS X+x7yrYtv4Wr8v3dA5IK3V8ldn6JTuAOKj1Z0lcHzj3w7lvN/hVzo5jgoUz01Tjalx 4Mzdg4i9HYCJJoINke20oLeB46RY1l0J0/2czzIez9uvteL7UpksULUpDzIkzISvtB BCOhRhxJ/Nyb/pqmgXywD/Pzi8M1/v56gNw9SECBpc0kQHuf0TX/SWMlhxpbFmriv0 e2VPXpKHZPnFWi6x+tEJRhVj84GTiudsBYHYFugCEnxm5gAMT/A+OODX9AbopNUEuI TiijHh6IBCwHg== To: Dmitry Gutov From: "theo@thornhill.no" Cc: emacs-devel@gnu.org Reply-To: "theo@thornhill.no" Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <87sgeqn7id.fsf@thornhill.no> In-Reply-To: References: <87bllfqj82.fsf@warpmail.net> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <87y2oinas1.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.22; envelope-from=theo@thornhill.no; helo=mail2.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 13:46:38 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 20:08:46 -0000 > But that depends on how you can/want to define such a project. We'll > need examples. And a new bug report, probably. I'll add a bug report for the troubles I had with that, and my ad-hoc solution at the time. From MAILER-DAEMON Fri Jun 19 16:14:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmNOs-0006A0-CO for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 16:14:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46268) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmNOq-00065D-L4 for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:14:08 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:13590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmNOo-00021s-Gj for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:14:07 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id F0BF0102982; Fri, 19 Jun 2020 16:14:04 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 7973B101E25; Fri, 19 Jun 2020 16:14:02 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592597642; bh=V1RxZrfxIXEKzdD+FbL5OMaJGEEsFUzawGa75FEnPp4=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=doTFwv/pnqeZXzQzTZWfKtwlY3N9AfIFgw1fB4knucoQgHDEtryESNzPoXiCeR60F xBkioTDf5jrzR2ZI8ww/rPOSpTc1m7w6iLujKqVL5BLtz75UvMychloAqSvsHDlx/k MGSveDQgBd6KFmdvHcycdlAprUJL13Df3kTwV8opZeiKkYYUTZHhwbGzf0k+e/TXL2 528ii0ergyphoQi5dG3kRbV+YJHN0d/JL7GP6r2Tvj0y92FEpG3inmLNMGUZMdPoRt efnFzuhH8/Od+hSF7MPO/GBGnG3mIMbjvSPHrEfEV1AbexNRfIHmS9Y3pCWqJwVPQW gb/3l5/Fq96uw== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2F79D120B1A; Fri, 19 Jun 2020 16:14:02 -0400 (EDT) From: Stefan Monnier To: Emacs Development Cc: John Wiegley Subject: Re: RFC: omit some variables from custom-save-variables Message-ID: References: <4kr6525r.fsf@lifelogs.com> Date: Fri, 19 Jun 2020 16:14:01 -0400 In-Reply-To: <4kr6525r.fsf@lifelogs.com> (Ted Zlatanov's message of "Fri, 19 Jun 2020 18:41:20 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.087 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 16:14:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 20:14:09 -0000 > The proposal is for use-package to apply the save-exemptions symbol > property behind the scenes. This is a new symbol property. Hmm... my reflex would have been to make use-package use something like (funcall (or (get variable 'custom-set) #'set-default) variable value) instead of whichever other way it currently uses to set the variable. Could you describe what would be the advantage of introducing a new symbol property? [ BTW: whichever way we end up going, I think that it would be better if use-package didn't use custom's symbol properties, so we should introduce a new function (I suggest to name it `customize-set-variable-external` to get the bikeshedding rolling ;-). ] Stefan From MAILER-DAEMON Fri Jun 19 16:24:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmNYX-000200-8w for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 16:24:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48228) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmNYV-0001zt-Vt for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:24:08 -0400 Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]:43998) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmNYT-0003UQ-G2 for emacs-devel@gnu.org; Fri, 19 Jun 2020 16:24:07 -0400 Received: by mail-qk1-x734.google.com with SMTP id j68so6851810qkb.10 for ; Fri, 19 Jun 2020 13:24:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=5+0x7gMDbrSPR2VPcZ3Mwzi81p/qh19KaGtFI4OZteI=; b=tSdRgqBAHYzgcxSPEloaEFjl1CKKY3ObAyzw5iTcWOG8sM87TSH3GUp0VbSM0cjZzy hmm0DT7ePNYhoxR2JC475DrNqfSONDlYtvou1UEc10nFjgDQ5qp+GtCeXzJSlUfvBTVd GCfAWTLtvxmtxEkWpT3X6BMD8DS3zXE5Pys8c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=5+0x7gMDbrSPR2VPcZ3Mwzi81p/qh19KaGtFI4OZteI=; b=j9zMgHE8xgEob8VxZdxB4XM3ic3sd60oSj+zSNLsd6Qyc1joyI0OXJyGeJhWFROdB8 vSxzBOFtaK60C2J4ygX6imKPt+BL5xLX5CCyrUch4vSJP0yyjNAE6jICO7T4eYQ/5KHC OTYvttoe8/G0x2SR1QNVSW29dGdHRciZZSXfnnbRQ60ZF3qBT18DBh6L70JqpiG87LVl 8TdWyGSuHeCSpexSf1YSMDuqZFpI3pxdgNpZXRgIvA398WBZ/HER75YZaO/JK+1qa450 7Xnvv2IRH4zx9jdgxqOLgHR/zyMtXsaTZMC81CJeH6RdABsxqv7rOtnd8qtxC+lNt2md 31Uw== X-Gm-Message-State: AOAM532En3/BrGewybsRo0BaJDFTG0Qafwr610jRXrJF1w3Mcqcg1SoW uhwotQQLN7U6IgOqczsx/FgjHQ== X-Google-Smtp-Source: ABdhPJwZHeb6YhBLurmbmUWbSlco2IlbMMjT5dSKpB6qbPCs8gnwA/3HnGHb01Yxy8RT3IpWJv+umw== X-Received: by 2002:a37:62c8:: with SMTP id w191mr5205996qkb.217.1592598244082; Fri, 19 Jun 2020 13:24:04 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id k20sm7643132qtu.16.2020.06.19.13.24.02 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 Jun 2020 13:24:03 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: Emacs Development , John Wiegley Subject: Re: RFC: omit some variables from custom-save-variables Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4kr6525r.fsf@lifelogs.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 19 Jun 2020 20:24:02 +0000 In-Reply-To: (Stefan Monnier's message of "Fri, 19 Jun 2020 16:14:01 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::734; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x734.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 20:24:08 -0000 On Fri, 19 Jun 2020 16:14:01 -0400 Stefan Monnier wrote: >> The proposal is for use-package to apply the save-exemptions symbol >> property behind the scenes. This is a new symbol property. SM> Hmm... my reflex would have been to make use-package use something like SM> (funcall (or (get variable 'custom-set) #'set-default) variable value) SM> instead of whichever other way it currently uses to set the variable. Does that omit the variable from the custom.el file? The problem is the double persistence, both in code and in custom.el. SM> Could you describe what would be the advantage of introducing a new SM> symbol property? Soft migration, no unexpected behavior, everything works like it does today. SM> [ BTW: whichever way we end up going, I think that it would be better if SM> use-package didn't use custom's symbol properties, so we should SM> introduce a new function (I suggest to name it SM> `customize-set-variable-external` to get the bikeshedding SM> rolling ;-). ] Sure, an API instead of a direct setting. I like the approach and the name. Ted From MAILER-DAEMON Fri Jun 19 17:26:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmOWf-0003Sh-CG for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 17:26:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35098) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmOWe-0003Sb-80 for emacs-devel@gnu.org; Fri, 19 Jun 2020 17:26:16 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:63749) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmOWZ-0006Q2-Lu for emacs-devel@gnu.org; Fri, 19 Jun 2020 17:26:15 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 2974D441968; Fri, 19 Jun 2020 17:26:10 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A3D41441963; Fri, 19 Jun 2020 17:26:08 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592601968; bh=blaD9DwjFa+5GP7YTF9B9IgzJ8P8rUa7WwsH/GdPnCA=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=mnNpF4BCoH4V80zgGCacAlcLojiOKhUj8OV1WdkZ2CO+tvcnAc0/0hP+3sQIhJk9y j0NArn8OuWBb6HR9+eL2UdOJex93PPZYkXROem/oMA+DbxJVm4VPcjZkZKHzbPgOOj DjfWgyBnWZKkXRjN3/nMurg2FbAzC4RhkCpDSUsQjkCZTUNC2T6AJstKh7Vg/uWolw V7De63i/0STUZZ+whNxC/2e/a/ytrbkuVqt88I9Hjzln6UCHfIo/B11FAVCCYtQuXS 83Ci0GnuE+tc0Ps5n2ipM4tTBHjiJiKSKv0eHMDGqiQ5gPvKBLfRRVuKD8Cmsroug6 imzctVIyoKxNQ== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id B9AB61206C2; Fri, 19 Jun 2020 17:26:07 -0400 (EDT) From: Stefan Monnier To: Emacs Development Cc: John Wiegley Subject: Re: RFC: omit some variables from custom-save-variables Message-ID: References: <4kr6525r.fsf@lifelogs.com> Date: Fri, 19 Jun 2020 17:26:06 -0400 In-Reply-To: (Ted Zlatanov's message of "Fri, 19 Jun 2020 20:24:02 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.087 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/19 16:14:05 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2020 21:26:16 -0000 >>> The proposal is for use-package to apply the save-exemptions symbol >>> property behind the scenes. This is a new symbol property. > SM> Hmm... my reflex would have been to make use-package use something like > SM> (funcall (or (get variable 'custom-set) #'set-default) variable value) > SM> instead of whichever other way it currently uses to set the variable. > Does that omit the variable from the custom.el file? Yes, as should be obvious at least in the case where it falls back on `set-default`. > SM> Could you describe what would be the advantage of introducing a new > SM> symbol property? > Soft migration, no unexpected behavior, everything works like it does today. I was thinking compared to the approach I showed. I'm not favoring either of them, I'm just trying to better understand the trade-offs. Stefan From MAILER-DAEMON Fri Jun 19 21:06:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmRxt-0001rI-4N for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 21:06:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmRxp-0001r3-BL for emacs-devel@gnu.org; Fri, 19 Jun 2020 21:06:35 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:35685) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmRxn-0006pq-HA for emacs-devel@gnu.org; Fri, 19 Jun 2020 21:06:33 -0400 Received: by mail-wm1-x335.google.com with SMTP id g21so6176141wmg.0 for ; Fri, 19 Jun 2020 18:06:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Z/5qCx3UMZzJAvlYc0hcCE9wE/rY6rQjwmeXwMF/2FA=; b=Tgx2dl3l9lcqT9MOCjK4tCjEojct/10wMG7EBm32kyKErhQhoBAGQkce0SKSagQqzd Vdv3WMwfULlsp3g/lMQ5AW1Jk2D5zvcNFblnmfE1KfVxr1lX5r5HgIJ3QAo0dk3CQ91R pieN0yPXUXOKJLg3vlgX+5bU+63qA93+nUQAnLcRU//Xiy4JQWBkqWXP7ycxTenxeVMp bfE2cpC6NwVcgtdUmpf7zn8tvDkjZwg7tGqdVEi2xLaPbiVD/ufq19I0CDKrwOCKF8ee KFAO4jldDxDO4scFk1sp97iJrpuuKSF4/EVKdgGKEjRVsT29o/xKA27TlvGMOX09JZ4T U0+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:references:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Z/5qCx3UMZzJAvlYc0hcCE9wE/rY6rQjwmeXwMF/2FA=; b=uKxzVGUkG8IszPX+gInU8RMAhq0aq0KUoWENa+E2GynWA2pxKhI/waU295kWb4lS9K mTrCwMcVjfSrKJIud7VeMnD4w92ouXXamzbYCXPEd6yWzM+6BIHLddWDB4RVDVMA9/gp 0Cf3rYve9ex5SjQMvBFQbMM297TRtjYEGjOcHefcK7phQ4sRukaAw8B19nv9FGYXhDrn +ed0to1JWHHM1K3TCxhDv5qRTZK7JKkMXuB9FXJUc7wU8a2rkULQwzf4hhcg5VU9bN4C Q4Ew7F82Z4Z1hQDL62+4NcAtLjDsWmZ/oIYfpU/6QRuVYZoh/4GIKVjcx4FPAde7uSGv 2V/Q== X-Gm-Message-State: AOAM531MsJSbi0KkYFPAXU+Bc8UhQpucxPw6nJQdQ1aI+OaabYwCE0Zp 5WNxqEZtL3R2fOTqKGW0ZHvXC4b6 X-Google-Smtp-Source: ABdhPJykYM36sCLAKFLQzOrTOqal/QxZY1bWLdVc+aiBBeYvVr0Mn2LR20CFiJOXQeE/vhaPfgsycQ== X-Received: by 2002:a1c:c357:: with SMTP id t84mr6732138wmf.155.1592615189670; Fri, 19 Jun 2020 18:06:29 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b204sm7711207wmb.12.2020.06.19.18.06.28 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2020 18:06:29 -0700 (PDT) Sender: DG Subject: Re: project-find-regexp using ripgrep From: Dmitry Gutov To: emacs-devel References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> Message-ID: Date: Sat, 20 Jun 2020 04:06:27 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::335; envelope-from=raaahh@gmail.com; helo=mail-wm1-x335.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: 10 X-Spam_score: 1.0 X-Spam_bar: + X-Spam_report: (1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, PDS_TONAME_EQ_TOLOCAL_SHORT=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 01:06:35 -0000 On 15.06.2020 00:30, Dmitry Gutov wrote: > Here's a small patch I've been toying with, inspired by bug#41766. > > In my testing, it makes the project search an order of magnitude faster. > Probably due to smart parallelization. > > If people confirm this experience ... Anybody? From MAILER-DAEMON Fri Jun 19 23:09:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmTt7-00014q-AE for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 23:09:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmTt5-00014T-TT for emacs-devel@gnu.org; Fri, 19 Jun 2020 23:09:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33083) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmTt3-00021G-U3; Fri, 19 Jun 2020 23:09:45 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jmTt2-0007LG-7Q; Fri, 19 Jun 2020 23:09:44 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Arthur Miller Cc: deng@randomsample.de, emacs-devel@gnu.org, joaotavora@gmail.com, dgutov@yandex.ru, eliz@gnu.org, monnier@iro.umontreal.ca In-Reply-To: (message from Arthur Miller on Tue, 26 May 2020 07:42:34 +0200) Subject: Re: Drop the Copyright Assignment requirement for Emacs Reply-To: rms@gnu.org References: <9mmFgzvrBwjt_n_VJyaJdXINraNi5HsGpwq-0MLeKiJA7kG2BQA4uywrzjyz7lpRS0OZDpjEi8lspOKYUA7P_QsODsDew_8nbH960G55fmY=@protonmail.com> <3f79ff6e-2471-fa6d-08ff-682afd504eca@yandex.ru> <83v9l29yz3.fsf@gnu.org> <87o8qujs0p.fsf@randomsample> <83lfly9vvs.fsf@gnu.org> <835zd29rjb.fsf@gnu.org> <3c558381-f584-a2e5-972e-007221347f16@yandex.ru> <87tv0c2pxc.fsf@gmail.com> Message-Id: Date: Fri, 19 Jun 2020 23:09:44 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 03:09:48 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > If people working for those companies or in activities involving such > hardware/software, say in some hospital, and would like to use Emacs (or > other GNU software) to develop possibly but non-necessary free or "open > source" applications to work with/alongside non-free what should they > do? What they should do is, not use GNU discussion lists to promote the use of those nonfree programs. Regarding the putative free programs they might perhaps be developing, there may be some GNU discussion list where it is pertinent to discuss them. Especially if they are GNU packages. But not here -- this list is for developing GNU Emacs. Those other free programs may be entirely admirable, but discussing them here is off topic, aside from special cases. BTW, the words "free or 'open source'" could reinforce a widespread confusion. It appears that most people in computing think that "free" and "open source" are disjoint. On the contrary, nearly all free programs are open source, and most open source programs are free. See https://gnu.org/philosophy/open-source-misses-the-point.html and https://gnu.org/licenses/license-list.html. Isn't it unnecessary hard on them to not be able to talk about > non-free software? For mailing lists to have specified topics is normal and necessary. I am sure they can learn to live with that. Isn't it also a limitation on GNU software itself if > it can't be used in such cases as well as further inclination for > development of non-free software? Golly, what a misunderstanding. These rules are about GNU mailing lists, not about using your MUA (whichever one that may be). -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Fri Jun 19 23:11:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmTuF-0001yr-RL for mharc-emacs-devel@gnu.org; Fri, 19 Jun 2020 23:10:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmTuD-0001uk-RN for emacs-devel@gnu.org; Fri, 19 Jun 2020 23:10:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33096) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmTuD-0002G2-4W; Fri, 19 Jun 2020 23:10:57 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jmTuB-0007Xr-U1; Fri, 19 Jun 2020 23:10:56 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Ted Zlatanov Cc: contovob@tcd.ie, emacs-devel@gnu.org, monnier@iro.umontreal.ca, dgutov@yandex.ru In-Reply-To: (message from Ted Zlatanov on Fri, 19 Jun 2020 14:47:23 +0000) Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example Reply-To: rms@gnu.org References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <87d05w2af4.fsf@tcd.ie> Message-Id: Date: Fri, 19 Jun 2020 23:10:55 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 03:10:58 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > If you feel this is better left out until after use-package gets the > copyright assignments, I'll remove the example configuration. Please write documentation to show how to use Emacs by itself, not Emacs plus external add-ons. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Sat Jun 20 00:09:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmUok-0003u5-5l for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 00:09:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmUoi-0003px-H2 for emacs-devel@gnu.org; Sat, 20 Jun 2020 00:09:20 -0400 Received: from mail-qv1-f41.google.com ([209.85.219.41]:37273) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmUoh-00036P-4B for emacs-devel@gnu.org; Sat, 20 Jun 2020 00:09:20 -0400 Received: by mail-qv1-f41.google.com with SMTP id y9so5500493qvs.4 for ; Fri, 19 Jun 2020 21:09:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=8admFsK6eiR/y0jYECgo5bosH/o3IhGmhd/FqucpKTo=; b=JDPrI8yDz3/nUgGgIi7W1IecBqHdnpmYBB7TSFO/f1daaNWjChOGTwYZ4xfid2l10L Fu7w601NlxuF8UZnriOo8XtlBHob0PVSxdkQnL9xYOJujVG/q7Y6d3SjpMU94ebLhoFu GvttSFwDdh3oMSPY5qoEIO850IgG44HJRq6I14c9DZs3EVEXK3NCD5R2MsGye+kOHQ7r OeLLEBLpLbHizlGPv/HoG97poRuf5hP3r2aWPQcFlBw4wN28irzfJyJhrsW80Cow+0fC xVy9bwbo43BvvVBdPUYOYzxgT/6ImvZAFAbPZOqVMTdRZeDxL7TzDKH9frYO47ys3mrM RXwQ== X-Gm-Message-State: AOAM532QnivA/rR6yYY1eHyhhp7LFn04CJSzqgKgcJsCDpvKkODipIk7 R721O/IJ8ZXALxpbJlpYUAp1IBKD X-Google-Smtp-Source: ABdhPJyWoiU0ovQYdc2j+2LJBdOWDSGcapdA+qzg5z3C+25OGb7tGHvQZyhN+1K9KtvZzv7t+KI+uA== X-Received: by 2002:ad4:5668:: with SMTP id bm8mr11848519qvb.248.1592626157565; Fri, 19 Jun 2020 21:09:17 -0700 (PDT) Received: from sacsa.n800.arm.processor.yandex.fm ([190.236.255.173]) by smtp.gmail.com with ESMTPSA id j16sm1848812qtp.92.2020.06.19.21.09.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jun 2020 21:09:16 -0700 (PDT) From: andres.ramirez To: Dmitry Gutov Cc: emacs-devel Subject: Re: project-find-regexp using ripgrep In-Reply-To: References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> Date: Sat, 20 Jun 2020 04:09:14 +0000 Message-ID: <86tuz69y51.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=209.85.219.41; envelope-from=rrandresf@gmail.com; helo=mail-qv1-f41.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 00:09:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FREEMAIL_FROM=0.001, NML_ADSP_CUSTOM_MED=0.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 04:09:20 -0000 Hi. Dmitry. >>>>> "Dmitry" == Dmitry Gutov writes: Dmitry> On 15.06.2020 00:30, Dmitry Gutov wrote: >> Here's a small patch I've been toying with, inspired by bug#41766. [...] Dmitry> Anybody? Before the patch: --8<---------------cut here---------------start------------->8--- Elapsed time: 6.010101s Elapsed time: 5.863914s --8<---------------cut here---------------end--------------->8--- After installing ripgrep and patch: --8<---------------cut here---------------start------------->8--- Elapsed time: 3.261737s Elapsed time: 1.742008s --8<---------------cut here---------------end--------------->8--- Best Regards From MAILER-DAEMON Sat Jun 20 02:43:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmXDw-0007PU-4n for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 02:43:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59084) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmXDu-0007PN-V7 for emacs-devel@gnu.org; Sat, 20 Jun 2020 02:43:30 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35753) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmXDs-0008VP-Fo; Sat, 20 Jun 2020 02:43:28 -0400 Received: from [176.228.60.248] (port=2848 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmXDr-00078n-PN; Sat, 20 Jun 2020 02:43:28 -0400 Date: Sat, 20 Jun 2020 09:43:17 +0300 Message-Id: <83wo42w83e.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 22:28:39 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 06:43:31 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 22:28:39 +0300 > > > I'm not sure that the doc string will have to be changed (or how) when > > you fix that, but that's a separate issue. > > The fix would look like this: So all you want to add to the current doc string is "...and doesn't belong to some other project"? > > But the default-directory of these buffers is a very weak evidence of > > them being relevant to some project. E.g., I could (and many times > > do) grep some other project when I need to see how it solves some > > problem which is relevant to what I'm working on now. > > That is a case of working on multiple projects at once. No, it isn't. I'm working on a single project, but need to look outside of its directory to find some information. A very natural thing to do, and it doesn't mean I started working on another project. More importantly, I do want that Grep buffer be available to me as part of the current project, because I'm likely to return there more than once. > And whatever your purpose of grepping it, wouldn't you agree that > that grep buffer is probably closer to the "other" project rather > that to the current one? No. And that "other" project doesn't even have to be a "project" in the project.el sense of the word. > To reuse your argument, 'M-x switch-to-buffer' is still available for > borderline cases. An argument that you dismissed previously. > > If we really > > want to record in these buffers what project they are related to, we > > need to have stronger evidence, like what was the current-buffer when > > the command was invoked, or maybe something else (like name the > > buffers in some special way). > > We would start with strong counter-examples. I just gave you one. You want to dismiss it as "not strong", but I think you are making a mistake. Search-like activities are ubiquitous, and not confined to the project's directory tree. I think that non file-visiting buffers are rarely related to a project, an exception rather than a rule. My suggestion is therefore to turn the table and come up with a list of such buffers that _always_ are related to a specific project. And instead of using the default-directory as evidence for the buffer's relevance, we may need a command that explicitly makes a buffer related to a project. > So default-directory is not the worst indicator. I'm saying it isn't the best, either. We have just discovered at least 2 problems with it. We should try to find a better one. > But we should also try the new command out and document our experiences. IMNSHO, some thought is required even before we hope the experience will teach us in due time. Doing this only by trial and error runs the risk of converging on a design that is found later to be restrictive, or one that cannot be easily extended to support behaviors not accounted for or envisioned originally. We are just at the beginning of development here, and so this is the right place for thinking about possible project-related activities, and how they could be supported by different ways of determining which buffers are related to a project and which aren't. A simple solution we decide on now could make future development and extension much easier. > > That's fine, but Andrii's opinion is not the only one that counts, is > > it? > > So far Theodor agreed too. And myself as well. You alone have voiced > disagreement. With this distribution of votes, it seems the default > behavior should default to including non-file-visiting buffers (with > some agreed-upon exceptions). For an opinion to "count", it doesn't have to _replace_ the other opinions. It could be taken into consideration by augmenting the design so that it supports both kinds of behaviors. This is IME better than flatly discarding the dissenting opinions. > And, of course, we can add a user option that would allow to tweak > the choosing logic. Sub-optimal selection of the "belongs to a project" criteria will make any such user options cumbersome and hard to use. IOW, user options shouldn't be considered as means to "fix" sub-optimal design. We are at a point where we can make the design better, if we consider a wider variety of project-related activities. From MAILER-DAEMON Sat Jun 20 03:21:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmXoL-0005Vy-Dn for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 03:21:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38126) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmXoK-0005Pr-8k for emacs-devel@gnu.org; Sat, 20 Jun 2020 03:21:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35980) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmXoJ-00062J-0T; Sat, 20 Jun 2020 03:21:07 -0400 Received: from [176.228.60.248] (port=1195 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmXoI-0002CW-Ca; Sat, 20 Jun 2020 03:21:06 -0400 Date: Sat, 20 Jun 2020 10:20:57 +0300 Message-Id: <83pn9uw6cm.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theothornhill@pm.me, emacs-devel@gnu.org In-Reply-To: <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> (message from Dmitry Gutov on Fri, 19 Jun 2020 22:33:07 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <83y2oix431.fsf@gnu.org> <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 07:21:08 -0000 > Cc: theothornhill@pm.me, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Fri, 19 Jun 2020 22:33:07 +0300 > > On 19.06.2020 22:12, Eli Zaretskii wrote: > > >> That is, again, true. But what of the rest of files in that repository? > >> Do they belong to a different project? > > > > Yes. > > > >> Do you also visit them, or not? > > > > Not as part of working on the current project. Though I might decide > > to add some of them to the current project, as the need arises. > > I mean, do you visit them in the same Emacs session? I just answered that above. This is all in a single Emacs session. > > In any case, my point was that relying on the VCS to determine what is > > and isn't in the project presents a restriction that a general-purpose > > project-handling facility should lift early on to be useful, IMO. > > I agree, but agreement alone is not enough to make it a reality. > > OTOH, we already have a customization point that allows to exclude more > files than .gitignore does (the project-vc-ignores variable). I don't think exclusion alone is enough. We need also a way of _including_ files in a project. > *And* one can use the project API to introduce a project backend that > does not rely on VC repositories. I think we should have commands to do so in the core. It's too basic a capability for any IDE for us to leave it to add-ons. From MAILER-DAEMON Sat Jun 20 03:22:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmXpz-0000aQ-2z for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 03:22:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmXpx-0000ZS-K3 for emacs-devel@gnu.org; Sat, 20 Jun 2020 03:22:49 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36011) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmXpx-0006E4-Am; Sat, 20 Jun 2020 03:22:49 -0400 Received: from [176.228.60.248] (port=1301 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmXpw-0002T2-Q1; Sat, 20 Jun 2020 03:22:49 -0400 Date: Sat, 20 Jun 2020 10:22:39 +0300 Message-Id: <83o8pew69s.fsf@gnu.org> From: Eli Zaretskii To: "Philip K." Cc: dgutov@yandex.ru, emacs-devel@gnu.org In-Reply-To: <877dw3qfsw.fsf@warpmail.net> (philip@warpmail.net) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <877dw3qfsw.fsf@warpmail.net> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 07:22:49 -0000 > From: "Philip K." > Cc: dgutov@yandex.ru, emacs-devel@gnu.org > Date: Fri, 19 Jun 2020 16:41:03 +0200 > > > More generally, I question the wisdom of judging by the > > default-directory in the first place. Can't we come up with a better, > > more specific criterion? > > My rule of thumb would be was a buffer generated "by" a file/action on > file in the project. The question is: how to express this in Emacs terms that can be used to code this? From MAILER-DAEMON Sat Jun 20 03:44:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmYAe-0000Oz-8H for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 03:44:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42956) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmYAb-0000OS-AU for emacs-devel@gnu.org; Sat, 20 Jun 2020 03:44:09 -0400 Received: from mail-40134.protonmail.ch ([185.70.40.134]:37699) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmYAU-0001F6-VF for emacs-devel@gnu.org; Sat, 20 Jun 2020 03:44:08 -0400 Date: Sat, 20 Jun 2020 07:43:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1592639040; bh=piTs6nZHqz327pGSdvniX402RqhczWiCIYRASy2l9iY=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=hDnkWRTtaSd9GawauHBuv9N1FVMDuWR97PXAHbLjYwr+yYS6MJc0MmhiBmaN8adHD W4NqkJM+X31/j6Vt2ofvvOklSeCGcRRh3wIQtTt0NjPQ0O/2RJZ9LrRk7RgJM7HpmJ KI1bkvArOq0829KKsU/FK6rvdFXsxkhNEnMkSUBzDnj570h38jS+ZNjYVPNHFFgSrQ 4UdTiS3WyvvOVOIQbevpmkYLFBOwVgXaYgTdg+g1mlSkvvotTWoLVzi5KfR+H2bG/j Phg/s3tu/giYFl7mMDlfMs0CooFKzJ67ZvUljSyQ7gqWobU8iOD4ujkMX50wgWgwWt 0YT8CCpeYAtRA== To: Eli Zaretskii , Dmitry Gutov From: Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: In-Reply-To: <83wo42w83e.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_lBhoyREXfxed3klIeDuu9TUwqKrvexivE9Kt4akj8" Received-SPF: pass client-ip=185.70.40.134; envelope-from=theothornhill@pm.me; helo=mail-40134.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 03:44:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 07:44:09 -0000 This is a multi-part message in MIME format. --b1_lBhoyREXfxed3klIeDuu9TUwqKrvexivE9Kt4akj8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 PiBObywgaXQgaXNuJ3QuIEknbSB3b3JraW5nIG9uIGEgc2luZ2xlIHByb2plY3QsIGJ1dCBuZWVk IHRvIGxvb2sKPiBvdXRzaWRlIG9mIGl0cyBkaXJlY3RvcnkgdG8gZmluZCBzb21lIGluZm9ybWF0 aW9uLiBBIHZlcnkgbmF0dXJhbAo+IHRoaW5nIHRvIGRvLCBhbmQgaXQgZG9lc24ndCBtZWFuIEkg c3RhcnRlZCB3b3JraW5nIG9uIGFub3RoZXIKPiBwcm9qZWN0LiBNb3JlIGltcG9ydGFudGx5LCBJ IGRvIHdhbnQgdGhhdCBHcmVwIGJ1ZmZlciBiZSBhdmFpbGFibGUgdG8KPiBtZSBhcyBwYXJ0IG9m IHRoZSBjdXJyZW50IHByb2plY3QsIGJlY2F1c2UgSSdtIGxpa2VseSB0byByZXR1cm4gdGhlcmUK PiBtb3JlIHRoYW4gb25jZS4KCldoYXQgaWYgd2Ugb2ZmZXIgdGhpcyB3b3JrZmxvdzoKCi0gdGhl IGdpdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmFja2VuZCBvZmZlcnMgb25seSBmaWxlIGJvdW5k IGFsdGVybmF0aXZlcy4gVG8gbWUgdGhhdCBzZWVtcyBraW5kIG9mIHJlYXNvbmFibGUsIHNpbmNl IGl0cyB0YXNrIGlzIHRvIHRyYWNrIGFjdHVhbCBmaWxlcyBhbmQgaWdub3Jlcy4KCi0gaW4gYWRk aXRpb24sIHdlIG9mZmVyIHNvbWV0aGluZyBzaW1pbGFyIHRvIG9yZy1hZGQtdG8tYWdlbmRhLWZp bGVzLiBUaGVuIG15ICp4cmVmKiwgQW5kcmlpcyBpbmZlcmlvciBweXRob24sIHNoZWxscyBhbmQg d2hhdGV2ZXIgeW91IHdhbnQgdG8gYWRkIGNhbiBiZSBhZGRlZC4KCi0gb2J2aW91c2x5IHdlIHRo ZW4gbmVlZCBhbiBvcHRpb24gdG8gZGVsZXRlIGZpbGVzIGZyb20gdGhhdCBuZXcgbGlzdAoKSSBp bWFnaW5lIHRoaXMgYmVpbmcgaW1wbGVtZW50ZWQganVzdCB3aXRoIGEgbmV3IGRlZnZhci0gcHJv amVjdC1hZGRpdGlvbmFsLWJ1ZmZlcnMsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCgpUaGVuIHN3 aXRjaCB0byBidWZmZXIganVzdCBhZGRzIHRoZW0gYXMgd2VsbC4KCkNvdWxkIHNvbWV0aGluZyBs aWtlIHRoaXMgYmUgdmlhYmxlPwoKVGhlbw== --b1_lBhoyREXfxed3klIeDuu9TUwqKrvexivE9Kt4akj8 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 ICAgIDxkaXY+PGJyPjwvZGl2Pjxicj48YmxvY2txdW90ZSBjbGFzcz0icHJvdG9ubWFpbF9xdW90 ZSIgdHlwZT0iY2l0ZSI+Tm8sIGl0IGlzbid0LiAgSSdtIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJv amVjdCwgYnV0IG5lZWQgdG8gbG9vazxicj5vdXRzaWRlIG9mIGl0cyBkaXJlY3RvcnkgdG8gZmlu ZCBzb21lIGluZm9ybWF0aW9uLiAgQSB2ZXJ5IG5hdHVyYWw8YnI+dGhpbmcgdG8gZG8sIGFuZCBp dCBkb2Vzbid0IG1lYW4gSSBzdGFydGVkIHdvcmtpbmcgb24gYW5vdGhlcjxicj5wcm9qZWN0LiAg TW9yZSBpbXBvcnRhbnRseSwgSSBkbyB3YW50IHRoYXQgR3JlcCBidWZmZXIgYmUgYXZhaWxhYmxl IHRvPGJyPm1lIGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCwgYmVjYXVzZSBJJ20gbGlr ZWx5IHRvIHJldHVybiB0aGVyZTxicj5tb3JlIHRoYW4gb25jZS4mbmJzcDs8L2Jsb2NrcXVvdGU+ PGRpdj48YnI+PC9kaXY+PGRpdj5XaGF0IGlmIHdlIG9mZmVyIHRoaXMgd29ya2Zsb3c6PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj4tIHRoZSBnaXQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJhY2tl bmQgb2ZmZXJzIG9ubHkgZmlsZSBib3VuZCAmbmJzcDthbHRlcm5hdGl2ZXMuIFRvIG1lIHRoYXQg c2VlbXMga2luZCBvZiByZWFzb25hYmxlLCBzaW5jZSBpdHMgdGFzayBpcyB0byB0cmFjayBhY3R1 YWwgZmlsZXMgYW5kIGlnbm9yZXMuJm5ic3A7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4tIGlu IGFkZGl0aW9uLCB3ZSBvZmZlciBzb21ldGhpbmcgc2ltaWxhciB0byBvcmctYWRkLXRvLWFnZW5k YS1maWxlcy4gVGhlbiBteSAqeHJlZiosIEFuZHJpaXMgaW5mZXJpb3IgcHl0aG9uLCBzaGVsbHMg YW5kIHdoYXRldmVyIHlvdSB3YW50IHRvIGFkZCBjYW4gYmUgYWRkZWQuJm5ic3A7PC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj4tIG9idmlvdXNseSB3ZSB0aGVuIG5lZWQgYW4gb3B0aW9uIHRvIGRl bGV0ZSBmaWxlcyBmcm9tIHRoYXQgbmV3IGxpc3Q8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxi cj48L2Rpdj48ZGl2PkkgaW1hZ2luZSB0aGlzIGJlaW5nIGltcGxlbWVudGVkIGp1c3Qgd2l0aCBh IG5ldyBkZWZ2YXItIHByb2plY3QtYWRkaXRpb25hbC1idWZmZXJzLCBvciBzb21ldGhpbmcgbGlr ZSB0aGF0LiZuYnNwOzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlbiBzd2l0Y2ggdG8gYnVm ZmVyIGp1c3QgYWRkcyB0aGVtIGFzIHdlbGwuJm5ic3A7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj5Db3VsZCBzb21ldGhpbmcgbGlrZSB0aGlzIGJlIHZpYWJsZT88L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZW88Y2FyZXQ+PC9jYXJldD48L2Rpdj4= --b1_lBhoyREXfxed3klIeDuu9TUwqKrvexivE9Kt4akj8-- From MAILER-DAEMON Sat Jun 20 03:45:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmYC5-0001Qn-3U for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 03:45:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43362) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmYC3-0001NQ-Bi for emacs-devel@gnu.org; Sat, 20 Jun 2020 03:45:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36256) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmYC3-0001ll-0g; Sat, 20 Jun 2020 03:45:39 -0400 Received: from [176.228.60.248] (port=2712 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmYC2-0000VO-G3; Sat, 20 Jun 2020 03:45:38 -0400 Date: Sat, 20 Jun 2020 10:45:27 +0300 Message-Id: <83k102w57s.fsf@gnu.org> From: Eli Zaretskii To: Andrew Burgess Cc: emacs-devel@gnu.org In-Reply-To: <20200607082019.255681-1-andrew.burgess@embecosm.com> (message from Andrew Burgess on Sun, 7 Jun 2020 09:20:19 +0100) Subject: Re: [PATCH] Use deactivate-mark from cua-cancel References: <20200607082019.255681-1-andrew.burgess@embecosm.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 07:45:39 -0000 > From: Andrew Burgess > Date: Sun, 7 Jun 2020 09:20:19 +0100 > Cc: Andrew Burgess > > The reason is that with `cua-selection-mode` enabled, C-g now calls > `cua-cancel` instead of `keyboard-quit`. Currently `cua-cancel` looks > like this: > > (defun cua-cancel () > "Cancel the active region, rectangle, or global mark." > (interactive) > (setq mark-active nil) > (if (fboundp 'cua--cancel-rectangle) > (cua--cancel-rectangle))) > > It is the line: > > (setq mark-active nil) > > that is problematic, setting `mark-active` directly avoids the > `deactivate-mark-hook`. I think that instead we should be calling > `deactivate-mark`, and this is what this patch does. Thanks, pushed to the master branch. From MAILER-DAEMON Sat Jun 20 04:56:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmZIK-0004PF-Ih for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 04:56:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55240) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmZII-0004P3-Iu for emacs-devel@gnu.org; Sat, 20 Jun 2020 04:56:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36907) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmZIH-0003pE-4T; Sat, 20 Jun 2020 04:56:09 -0400 Received: from [176.228.60.248] (port=3209 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmZIG-0008Am-04; Sat, 20 Jun 2020 04:56:08 -0400 Date: Sat, 20 Jun 2020 11:55:59 +0300 Message-Id: <83a70yw1y8.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: dgutov@yandex.ru, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: (message from Theodor Thornhill on Sat, 20 Jun 2020 07:43:57 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 08:56:10 -0000 > Date: Sat, 20 Jun 2020 07:43:57 +0000 > From: Theodor Thornhill > Cc: philip@warpmail.net, emacs-devel@gnu.org > > What if we offer this workflow: > > - the git implementation of the backend offers only file bound alternatives. To me that seems kind of > reasonable, since its task is to track actual files and ignores. > > - in addition, we offer something similar to org-add-to-agenda-files. Then my *xref*, Andriis inferior python, > shells and whatever you want to add can be added. > > - obviously we then need an option to delete files from that new list > > I imagine this being implemented just with a new defvar- project-additional-buffers, or something like that. > > Then switch to buffer just adds them as well. > > Could something like this be viable? I proposed to find a different way of telling which buffer is related to a project, other than by looking at its default-directory. We could design a way of doing that which would then support adding buffers to a project quite easily. But Dmitry doesn't think we should go that way. More to the point, my question is how would adding a buffer to the project be recorded and where, under your proposal? From MAILER-DAEMON Sat Jun 20 05:30:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmZpb-00053W-75 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 05:30:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmZp4-0004vh-6I for emacs-devel@gnu.org; Sat, 20 Jun 2020 05:30:02 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:24563) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmZp0-0000T6-J1 for emacs-devel@gnu.org; Sat, 20 Jun 2020 05:30:01 -0400 Date: Sat, 20 Jun 2020 09:29:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=protonmail; t=1592645395; bh=4t4TR/wK19v4qlOgT/zN5a0jzkm+uIo7zrEgQZA/8AM=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=aYw3lbJgcOTyRVb7MtDSeGmSFmSGydLzk5PhxPqQbwfWzRAK1X12s3Y2bzU7L6PH6 2/n8Eaoilt0Lt2Oq1PCCbMnjNj/qs/eCfIKkivsuAHUYET0GZ53XYdXKhUBY/L41DM /mfbDBMY27POJaG6e1ccP7KJjTzZ9adknGmsiWd1OVKSktPUqLe2o7jFFnJ+1BJu7U pH59//5UPDTTMyQWs9RIPvxwlUyZf/aL6bZI6uHUub/2i1HlevG9h8mVBZzDtACpp6 t1aZvJJ1/EUjHiWtKSqsHSQDDxVGDBJ14UyC9OnXSXjqeGrv2kqEojse9PKRtF41NT yMthbc4HYsXFw== To: Eli Zaretskii From: Theodor Thornhill Cc: dgutov@yandex.ru, philip@warpmail.net, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <87mu4ym6f6.fsf@thornhill.no> In-Reply-To: <83a70yw1y8.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.131; envelope-from=theo@thornhill.no; helo=mail-40131.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 05:29:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 09:30:02 -0000 >> Could something like this be viable? > > I proposed to find a different way of telling which buffer is related > to a project, other than by looking at its default-directory. =20 My proposal here isn't using default-directory. It would then check (buffer-file-name (cdr buffer)) in project-root. As such it would exclude other 'junk' buffers. After, the persisted other buffers are included as well. > We could design a way of doing that which would then support adding > buffers to a project quite easily. But Dmitry doesn't think we should > go that way. Maybe we should reconsider the API then? It seems to me like you don't want this generic interface, and rather would like a more general notion of what a project is. You want to have a more granular approach, something akin to bookmark.el. Am I reading you correctly here? > More to the point, my question is how would adding a buffer to the > project be recorded and where, under your proposal? We already are persisting a project list under "user-emacs-directory" in a readable lisp format. I guess this could be extended to include the added buffers? Not sure how unwieldy this can get, though. From MAILER-DAEMON Sat Jun 20 06:08:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmaPx-0001XW-Ss for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 06:08:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39076) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmaPw-0001Un-5j for emacs-devel@gnu.org; Sat, 20 Jun 2020 06:08:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:37352) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmaPv-0005xO-Gi; Sat, 20 Jun 2020 06:08:07 -0400 Received: from [176.228.60.248] (port=3628 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmaPu-00040w-NP; Sat, 20 Jun 2020 06:08:07 -0400 Date: Sat, 20 Jun 2020 13:07:56 +0300 Message-Id: <834kr6vymb.fsf@gnu.org> From: Eli Zaretskii To: Theodor Thornhill Cc: dgutov@yandex.ru, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <87mu4ym6f6.fsf@thornhill.no> (message from Theodor Thornhill on Sat, 20 Jun 2020 09:29:45 +0000) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 10:08:08 -0000 > Date: Sat, 20 Jun 2020 09:29:45 +0000 > From: Theodor Thornhill > Cc: dgutov@yandex.ru, philip@warpmail.net, emacs-devel@gnu.org > > > We could design a way of doing that which would then support adding > > buffers to a project quite easily. But Dmitry doesn't think we should > > go that way. > > Maybe we should reconsider the API then? It seems to me like you don't > want this generic interface, and rather would like a more general notion > of what a project is. You want to have a more granular approach, > something akin to bookmark.el. Am I reading you correctly here? Which API did you have in mind? In any case, my proposal was not about the API itself, it was more about the implementation of the API. For example, we could have an implementation of the generic project-files API that consulted some list instead of asking the VCS or the filesystem to provide the files. > > More to the point, my question is how would adding a buffer to the > > project be recorded and where, under your proposal? > > We already are persisting a project list under "user-emacs-directory" in > a readable lisp format. I guess this could be extended to include the > added buffers? Not sure how unwieldy this can get, though. That's one possibility, yes. From MAILER-DAEMON Sat Jun 20 06:19:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmabN-00088x-Ux for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 06:19:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmabL-00088o-Uw for emacs-devel@gnu.org; Sat, 20 Jun 2020 06:19:55 -0400 Received: from mail2.protonmail.ch ([185.70.40.22]:16235) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmabJ-0007cW-DJ for emacs-devel@gnu.org; Sat, 20 Jun 2020 06:19:55 -0400 Date: Sat, 20 Jun 2020 10:19:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=protonmail; t=1592648391; bh=lKweOZUmEdPJus4Ab+p9WbZrHCyPu6NzoC/Ks3jJF7I=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=DyYxpnfNZuyU76lmzOEgTQgQsJDCcPiodILOlpQB1BU4U89PiMWxDbKHe56d0GySM mPNZHQknx9BNXZrH+xNzZvybjO8gV8CLbSwMyfFaCxj1oN1AGpvubPj9hWxcCAlPre lOEDwFJNXNRsVldAXgWofqCwVZ2vG8Jq1/oeTfT5N5TqOyw41FqHE9swAZd4/ULf5L tZtjmHTG39W6t9+IBUotL7o2JBnQSLqSXMwr+JtReYtAtwVmwqcevlDyfOdCOYGj2D 5KCvODEPROx9R57KMTc2Z14/MIJTEpDgTezw70qj43PwI4cor5v7q1GSSVWFJu8QOA Xz/9U066G4oHw== To: Eli Zaretskii From: Theodor Thornhill Cc: dgutov@yandex.ru, emacs-devel@gnu.org Reply-To: Theodor Thornhill Subject: Re: master 1e3b0f2: Improve doc strings of project.el Message-ID: <87sgeqjayt.fsf@thornhill.no> In-Reply-To: <834kr6vymb.fsf@gnu.org> References: <87bllfqj82.fsf@warpmail.net> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> <834kr6vymb.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=185.70.40.22; envelope-from=theo@thornhill.no; helo=mail2.protonmail.ch X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 06:19:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 10:19:56 -0000 > Which API did you have in mind? > > In any case, my proposal was not about the API itself, it was more > about the implementation of the API. For example, we could have an > implementation of the generic project-files API that consulted some > list instead of asking the VCS or the filesystem to provide the files. > Yeah, this is kind of what I was thinking with the 'project-additional-buffers' idea. This could be implementation agnostic as well, and be just a flat list connected to some root, persisted in the project list. As such, this will always be consulted when invoking "project-find-files", "project-switch-to-buffer" etc. Then we are free to implement and choose the "main" implementation of the API, most likely at first the VC version, since it is the fastest one. Later, other notions of projects could be added. However, I don't want to step too far into Dmitrys domain without him chiming in. From MAILER-DAEMON Sat Jun 20 07:25:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmbdH-0003q1-Gs for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:25:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbdG-0003pq-1g for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:25:58 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:40145) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmbdD-0001HP-JA; Sat, 20 Jun 2020 07:25:57 -0400 Received: by mail-wm1-x32b.google.com with SMTP id r15so11281804wmh.5; Sat, 20 Jun 2020 04:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=gZ7O+cZU9Jg+DVNakmwj2sei5iKOwAT/OtRYdCr9LrE=; b=JWjlPHwL9JhLuItx/WC4I79JgyD+BsAXPdyEEo/8dTTm260So9rLEyQudYl8vxObUq QiQ1FMFvAzwmo9IAdRtPFLFw05A1yogOjIZHT2Xfc84eS/4igsoRpmqcoB3dUc/fboug opbA6h0HAcED7FxtwR+Z7mDyVloctT/OyxS2h+1mbI1p7IbNW8a8+Q8Qld6dNZnQ39LU D8APTJR3Cxem4w2LBw/HQo2jq5jB/wLynGbgikeiT1FR9PDG2U/o9PHV/MYQExGAcFXg p/nbthL9d3dzGge0VRHnGczJLS83su2oLgYLqp5aF2MCGF9dH5yDpkqetl64JrNTgmx4 OPoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=gZ7O+cZU9Jg+DVNakmwj2sei5iKOwAT/OtRYdCr9LrE=; b=k/V5d3u4WJJezKVepOyg6St2agdxiPMh/iISl1psUYQV99/eG0psBcuewx2MIirvAD 2quXOl+AxRUgIXLZHPl1TCsX7JosOzvxwgE8F0uAhKw83OqZ8dIeLqamcH3qO90ep/kK xfk2ZjIOd6LIhZzrShCXkKttDJvPRG4QXsfNLdEKsrPblNwfurswBFJsjAVS8BtKjdMo ESuqh5EAp+V/SKXhPJ7RHPAsg80JyjOjNofmH+E52Lt9OnymuVi37FJ2BJvTj4LxnfT9 lDkTy+MnuyxVVYxWAcOHXlMPkhDBCLPamx77RVbYjzjrA6/i5mZOo2+8eAx4t+FXwJfS DisQ== X-Gm-Message-State: AOAM530gujgbkEs/HUNPQwel4UbXy7s2DdsL/f1SQSEPWPw9WUfEvU+6 Q63p4pJTyDkYPrkmB/2s2zs5BVJr X-Google-Smtp-Source: ABdhPJx3YGFG+RQIZ7mUSH74an8Iv7Q8dNCwLDqUAbqj6MhZg6lamvgnrM8k2FBAuB4K8o0DVhEcUA== X-Received: by 2002:a1c:9687:: with SMTP id y129mr8294328wmd.30.1592652352762; Sat, 20 Jun 2020 04:25:52 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y196sm4580512wmd.11.2020.06.20.04.25.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:25:52 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> From: Dmitry Gutov Message-ID: <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> Date: Sat, 20 Jun 2020 14:25:50 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83wo42w83e.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32b; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32b.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:25:58 -0000 On 20.06.2020 09:43, Eli Zaretskii wrote: > So all you want to add to the current doc string is "...and doesn't > belong to some other project"? I don't know about that. Interpreting that literally would mean that such buffers would never be suggested because they "belong to some other project" (according to the reasoning which gave rise to this wording) no matter which of the projects is the current one: "the outer", or "the inner". So what we should say is just "belongs to the current project". The implication being that if it's inside a nested project, it doesn't belong to the outer one. >>> But the default-directory of these buffers is a very weak evidence of >>> them being relevant to some project. E.g., I could (and many times >>> do) grep some other project when I need to see how it solves some >>> problem which is relevant to what I'm working on now. >> >> That is a case of working on multiple projects at once. > > No, it isn't. I'm working on a single project, but need to look > outside of its directory to find some information. A very natural > thing to do, and it doesn't mean I started working on another > project. More importantly, I do want that Grep buffer be available to > me as part of the current project, because I'm likely to return there > more than once. And bookmarks/switch-to-buffer/registers are not good options for this goal? >> And whatever your purpose of grepping it, wouldn't you agree that >> that grep buffer is probably closer to the "other" project rather >> that to the current one? > > No. And that "other" project doesn't even have to be a "project" in > the project.el sense of the word. Here's one direction how it could be resolved: Make sure project-vc-external-roots-function points to a function that returns a list which includes the "other" directory. By default, it will include the directories where tags tables reside. Then create a new command, project-or-external-switch-to-buffer. Which would check for default-directory belonging not only to the project root, but for belonging the external roots as well. >> To reuse your argument, 'M-x switch-to-buffer' is still available for >> borderline cases. > > An argument that you dismissed previously. I dismissed it as in "people wanted to call this command less". But my specific wording also made provision for it being necessary at least sometimes. But you made this argument. So perhaps it may be good enough for your purposes. Am I wrong here? I don't want to dismiss your request outright, but we'll need to have some design which would fit the existing model and/or wouldn't be hard to support. Because exceptions and edge cases tend to pile up, if we just start adding exceptions here and there. > I think that non file-visiting buffers are rarely related to a > project, an exception rather than a rule. My suggestion is therefore > to turn the table and come up with a list of such buffers that > _always_ are related to a specific project. And instead of using the > default-directory as evidence for the buffer's relevance, we may need > a command that explicitly makes a buffer related to a project. Well, Phil gave a list of examples. And in all of those cases, I think, default-directory worked well as an indicator. In my work, having Grep buffer's default-directory belong to the current project is also a string indicator. >> So default-directory is not the worst indicator. > > I'm saying it isn't the best, either. We have just discovered at > least 2 problems with it. We should try to find a better one. One might interpret your request essentially as "I want any buffer, arbitrarily, based on my current intention, be associated with the current project". It's probably not as arbitrary, so you're welcome to suggest an alternative indicator. >> But we should also try the new command out and document our experiences. > > IMNSHO, some thought is required even before we hope the experience > will teach us in due time. Doing this only by trial and error runs > the risk of converging on a design that is found later to be > restrictive, or one that cannot be easily extended to support > behaviors not accounted for or envisioned originally. I'm not suggesting trying it for a few years. The command is here already, so the process has started. >> So far Theodor agreed too. And myself as well. You alone have voiced >> disagreement. With this distribution of votes, it seems the default >> behavior should default to including non-file-visiting buffers (with >> some agreed-upon exceptions). > > For an opinion to "count", it doesn't have to _replace_ the other > opinions. It could be taken into consideration by augmenting the > design so that it supports both kinds of behaviors. This is IME > better than flatly discarding the dissenting opinions. Sure. >> And, of course, we can add a user option that would allow to tweak >> the choosing logic. > > Sub-optimal selection of the "belongs to a project" criteria will make > any such user options cumbersome and hard to use. IOW, user options > shouldn't be considered as means to "fix" sub-optimal design. We are > at a point where we can make the design better, if we consider a wider > variety of project-related activities. Also agree. From MAILER-DAEMON Sat Jun 20 07:29:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmbgd-000544-D0 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:29:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbgc-00053h-Bx for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:29:26 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:39277) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmbgb-0001lc-2M; Sat, 20 Jun 2020 07:29:26 -0400 Received: by mail-wm1-x335.google.com with SMTP id t194so11285104wmt.4; Sat, 20 Jun 2020 04:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Q3otPPRYdxsMdz1gDdOlIZgcDZcFcRlDJ050hVOvInU=; b=RtyAL8x56OnS9dCOh1o8rSbYY89WS2iiE7egzR7GN7UlvUvilg6D1fzg8jf8Uypxl3 Ak60ymTKcdgkea9owVO+PhPX78JJ8fgfqsfBJNEXyBJIcPQV7kYQxC89qRD2nOgZ4/or KywJ65K8k6dYq/tin0/KyaUIUTQqjbjkUQm+fQRGi/qb3NXwwFRB1laXNnZ/idJo3tJv QhHuVUUpsDWgK32c06Nq1KJ1e6+5nCgia4EKfqfE4l54jCsUYxfTdU1zUziW/ome/P1e CxarLUZ4UhymKQDSngzA82Kx168saPI8rHB+shofRW5sogVyySm2l2PMJgeyXAdMgh1o QrXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Q3otPPRYdxsMdz1gDdOlIZgcDZcFcRlDJ050hVOvInU=; b=i6p61oAEhLJZGtEPxWT4L92DGpxoVG8K8DCemEDFAuouaZpJ+P5eAi1GKjPI8WZ0xr tONG2j27SGc/XwXAdt0YJPCcWkbCIShTN5racmgybDOJpXBB291Yq/QySnhKrapNbeKF KJZkMXcEssQoO+EbZu+60EXyIfLTCwsLl2xeAPJam8KyCgpwscsN3mb/iQySMzOaQsb3 yutAdCAMD25FWPOE7FyhJkQpMK+i2lDKPjFpRmnoXZXBCbJUJT8DfAXWh+5hF7PkihOC uWqvwIclF9mdcSV+PqRYqRxIs3FwAOynfWar9juy9eRWr9JJnIlG8NqtmUX2r+/WUUzU uR3g== X-Gm-Message-State: AOAM531DK9D/HVmAW/xQS+LTje2OuXuxoSAl3IK98a3ebV78RDOI6wvU IAbk5yFVqLH/355R8/OVe9jpMFP2 X-Google-Smtp-Source: ABdhPJyAAK1g+ZPRWtJudRXYk/HSuDoKjAN+M6kwzd/0gY2qm1sXamICF9jylA4MBfz8PaqAafr9cA== X-Received: by 2002:a1c:8107:: with SMTP id c7mr8355237wmd.20.1592652563135; Sat, 20 Jun 2020 04:29:23 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id c16sm10487643wrx.4.2020.06.20.04.29.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:29:22 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Sat, 20 Jun 2020 14:29:20 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83a70yw1y8.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::335; envelope-from=raaahh@gmail.com; helo=mail-wm1-x335.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:29:26 -0000 On 20.06.2020 11:55, Eli Zaretskii wrote: > I proposed to find a different way of telling which buffer is related > to a project, other than by looking at its default-directory. We > could design a way of doing that which would then support adding > buffers to a project quite easily. But Dmitry doesn't think we should > go that way. If you can outline and propose that alternative way, I'm all for considering it. Compared to an ad-hoc variable (or having a command that adds such a buffer manually), I'd much prefer an automatic approach. It's just that I'm not seeing anything concrete yet. From MAILER-DAEMON Sat Jun 20 07:35:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmbmV-0001v1-6p for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:35:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbmT-0001qW-EO for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:35:29 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]:36137) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmbmS-0002k9-1a; Sat, 20 Jun 2020 07:35:29 -0400 Received: by mail-ej1-x635.google.com with SMTP id dr13so13090669ejc.3; Sat, 20 Jun 2020 04:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=BDZ7+1fBWTjzhi07vDbIKllktxgKq7K4iUnXObkgFOk=; b=aaCRB7Y5wJNx0/m0ehTwxYu+arUIi1UDlq/Y6a4UGUsvh/Flmf1iwI9CfDGz0qOg9u pbF1tnRi2xOHmU8u7P7cs80ARQydiQDOg2J4T8YwMERAG679wJNIdldNOwUuU1PTIEts eeAVkXJ31TTvGLloQ9EATjQrvWu+o39obgC8j1Ps9pQ4vTGfMsWQmgf9F7SCBGR2fpux Iyir6lZvsT1JqsfeWEqsCMADM8fm6BbFd1XlFlZCrYLurG05l581g0PiunLFXyV4OsNN sFzRroWyhffOZqhX51EcyPqusChguFMa3ThLqho9gdzti1qB4Y/FBzJc7up9TLcf+wQL XbOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BDZ7+1fBWTjzhi07vDbIKllktxgKq7K4iUnXObkgFOk=; b=kNHekrnyeq9OcVUqGiyfqY1K97rGQS1E4nu0XBFIHBxiHFx7A+Bl/c/SlIodTWrx9l Mb3+uBzGPAXv98/KvsULXiCUoiqNmKjpp5xXGwGCf6aGP1kffLr0v1lSAaqtlEXf4/Bb KF19V3ZI+AYw/37qXSmf9B25fwbO7uYYQZ518uuiZWdcOotjc9z/lUfkQIXNlCHoE9rW jxe1/vuuF4q6G+7b5fW7+R/7XI/uW1OXY+5sBtGA5oNTYH6s3xVu8+u7WEt6F6k4w+O3 pq9Px1hlRiPujd0OrXSp0ziPPpt/LHBdFHWFpQAY1oNVp0QfEe2CromoKafQCcRnocm1 5kXQ== X-Gm-Message-State: AOAM531eW/Dof95HBfvSeypGLhPc1cyMSBCFRu4Q/GEimKEfli6MvAfQ TmJnchIQRYlz6to+UpHdNOHjckyC X-Google-Smtp-Source: ABdhPJwMoo5fzMmJVbDFavl+iETUgh3O3ceeLss5h1aLkbX1S5Hke2H9zEX9WTznctBEXodzGSY+IQ== X-Received: by 2002:a17:907:7014:: with SMTP id wr20mr7457250ejb.251.1592652925949; Sat, 20 Jun 2020 04:35:25 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id i9sm7124292ejv.44.2020.06.20.04.35.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:35:25 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii , Theodor Thornhill Cc: philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> <834kr6vymb.fsf@gnu.org> From: Dmitry Gutov Message-ID: <90f4c9e8-bf8d-3b27-a8a9-ed44c5d23839@yandex.ru> Date: Sat, 20 Jun 2020 14:35:24 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <834kr6vymb.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=raaahh@gmail.com; helo=mail-ej1-x635.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:35:29 -0000 On 20.06.2020 13:07, Eli Zaretskii wrote: > In any case, my proposal was not about the API itself, it was more > about the implementation of the API. For example, we could have an > implementation of the generic project-files API that consulted some > list instead of asking the VCS or the filesystem to provide the files. You can of course do this already, in 10 lines or so. But imagine you did add such a backend where project-files returns an arbitrary list of files. And you use it. How would project-switch-to-buffer consult it? Will it have to call project-files now, as opposed to just using project-root as the basis for comparison? And then compare buffer-file-name of all file-visiting buffers against that list? That would work for smaller projects, but in large ones project-files is not instantaneous, so they will be penalized in performance by such an approach. And project-switch-to-buffer should work with all kinds of projects. That also wouldn't solve the problem of non-file-visiting buffers like Grep from your example. From MAILER-DAEMON Sat Jun 20 07:37:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmboq-00041K-U2 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:37:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbop-00040c-Cd for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:37:55 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]:39820) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmboo-0002zt-15; Sat, 20 Jun 2020 07:37:55 -0400 Received: by mail-ej1-x62d.google.com with SMTP id w6so1761247ejq.6; Sat, 20 Jun 2020 04:37:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=nru9NXMy4E9hUlPBK7dhQEd6b+LbWfMK1Fv8OFTgPoY=; b=ByWtVmfQ/FqhwO+kgbO+LCRxGND3BZhAgNfeuXKI8rlfl86vNWrx2TMYEK5rHlQNEP hTCZO27Ad3Sp0klpi2bMLVlzJGJuvcOuuJ+PnKHQBFNbwirC+PyH0mIslexKHYuVtPnu AABtI084RtcoYfS7BiuMSoXZA9wjlYVYSG3OzEIcFjjNJtbxK3pn08OAjGwcCfE3p6Is TFhR3PlS6uQEpkwvSG7WuVb6xZnkY8NbM3DHjYYSAGEuQdjaB8cc6FysfwNcPHhNuyKe aKwQ0JoBOZwybQAlNxm4Tm9ibwDM9ag8LfnjTD2RMW/sSYH0rhYyg/Ld8vNMHEVO0x9P 6Lig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=nru9NXMy4E9hUlPBK7dhQEd6b+LbWfMK1Fv8OFTgPoY=; b=b43Vg2joffOseGJCFTLdhaXtC5sktF/v+lh+9XLBvAYulwc0IJo0dGjv137DXCD4R9 4SXKoTQ4PTRhfaQ9RlkgR6WkqtB9DjmRKl+Hd+k8z5he4dIGaJaY2dKMqiN+a7KVlPhk /POdCE3sdAd1WenMHf98Ejw1NYlm0KGFE6B6G6s/kiNqpFMXXZtkL70VluccxymYDwya hzleDmlhH0UiOBgASSXt8LpXOOipsmM5xsr7UZ6p8ehKaL4xYvDgYn/pgOqwwra7iP2u EyAEIXjjG8f46ksEMujW2/Y7qkZY4jYZkzsfIUR/UlRd64rNrsEM6a3tphnx2IzbGqfN RILQ== X-Gm-Message-State: AOAM530YxpffqAZLZwHmgp870v7p9PfXabuYUU2jVSfPO7mpYAguj+r9 r1MsFOyQi78giSY5ybxnmzvqY+7S X-Google-Smtp-Source: ABdhPJxvXgSFHpWBRP8iTTXwseHg55W1m5U28guKARopOeQ6J6J7gqos0a1jSefKkqKuCzHlmHIRsw== X-Received: by 2002:a17:906:7f05:: with SMTP id d5mr7479728ejr.70.1592653072072; Sat, 20 Jun 2020 04:37:52 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id m2sm7203920ejg.7.2020.06.20.04.37.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:37:51 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Theodor Thornhill , Eli Zaretskii Cc: emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> <834kr6vymb.fsf@gnu.org> <87sgeqjayt.fsf@thornhill.no> From: Dmitry Gutov Message-ID: <0e936751-cb3a-4e7f-e84a-8d0b82110cb4@yandex.ru> Date: Sat, 20 Jun 2020 14:37:50 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87sgeqjayt.fsf@thornhill.no> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62d.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:37:55 -0000 On 20.06.2020 13:19, Theodor Thornhill wrote: > Yeah, this is kind of what I was thinking with the > 'project-additional-buffers' idea. This could be implementation > agnostic as well, and be just a flat list connected to some root, > persisted in the project list. Or it could be a new generic function on projects (probably not). Or it could be a hook, where any user can add their desired buffer-finding logic. And that hook would be consulted by project-switch-to-buffer and project-kill-buffers (maybe). > As such, this will always be consulted > when invoking "project-find-files", "project-switch-to-buffer" etc. Probably not project-find-files. From MAILER-DAEMON Sat Jun 20 07:41:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmbsH-00079M-Oa for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:41:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55142) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbsG-000776-On for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:41:28 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:52717) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmbsE-0003lT-85; Sat, 20 Jun 2020 07:41:28 -0400 Received: by mail-wm1-x334.google.com with SMTP id r9so10673793wmh.2; Sat, 20 Jun 2020 04:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=BIJLg9USl44SBkIFMEGiy7HV/bZPrs++IryjVt7wHAA=; b=Vuck63Np2lBCLJWGp498pw2xDVVn0AG1H/bN45G9bhMfsRYsx/JNp5c3EpGyUCdmsg WIe6QzAlRmKz67B6T8u9EZIxH2WywFLYz/K6uNbFXaRVpoQAmQOtAaLfNE7cDwFa2aiu Mqj7Gx4aSodH6xvP5vE+9db+w9TxnxlK+av0wBpBP6p6VfExPAFuyLkiPmsoq1ropifY Y8rhAi12X3HAzMu9yNpVoY0Tq3vU5MOMyH9F7+GkDr3A3KTUA9DcixiIDqa+LmcdWbgQ SPsgCvmGXDUBrWN38mHj3FJeijOJSH609Kkgg7a9VEwFXFn7cCkgVZsieBf5MII28fRu Ww/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BIJLg9USl44SBkIFMEGiy7HV/bZPrs++IryjVt7wHAA=; b=DeEBDGr6a7zQiHjvGyKOg8PoXbKqdOESx+Jj0W64q7zDsRxDXc9ytbBNyEhVTfUuU3 OrU3SpU1P1OR65rLfYp0uZQNkZ8A83gFVmOlgshx48TpESWGHvgJqLhQ0nTj6h40VdIp VBzCu3qPXqj5I84WppZiXg8jR/42pT5ktbSjXB7qker7mAWX9cx/nlvvlo6vSB1gI2rJ efhcFO1IujPgSMX+bHc8yLIcxcuQruzHxU8aA8lFV98a4HErx7IVPY0urVX0sm4hv50i 5S00x5bdAUQCJFrO46IkJ5/10Mt3E7EmHtHKQWptMldKb6zgww0ZpXam7gdN3HVlwcb8 Wotg== X-Gm-Message-State: AOAM531kbiOKZ9hcxsuY9XX4Oz1b619qdCqyZTUGGJrn4bgzLFEEx3u8 ZsMcFvVV/nWezPO2Q7o2+SklkCSi X-Google-Smtp-Source: ABdhPJyuhB7pkDAEktBaTAKR1O0z2KM6Vpm6AFN3lk5PBIjFaMGVjwNTfQbAl3xO6YI2DMepoi5Itg== X-Received: by 2002:a1c:31c6:: with SMTP id x189mr6919536wmx.182.1592653283859; Sat, 20 Jun 2020 04:41:23 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id 14sm1927636wmk.19.2020.06.20.04.41.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:41:23 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theothornhill@pm.me, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <83y2oix431.fsf@gnu.org> <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> <83pn9uw6cm.fsf@gnu.org> From: Dmitry Gutov Message-ID: <0a2b7b06-f6ac-2e33-0901-d56e3f94f260@yandex.ru> Date: Sat, 20 Jun 2020 14:41:22 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83pn9uw6cm.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=raaahh@gmail.com; helo=mail-wm1-x334.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:41:29 -0000 On 20.06.2020 10:20, Eli Zaretskii wrote: >>> Not as part of working on the current project. Though I might decide >>> to add some of them to the current project, as the need arises. >> >> I mean, do you visit them in the same Emacs session? > > I just answered that above. This is all in a single Emacs session. What I meant is, is there harm in modeling that kind of project as VC project with just lots of exceptions (additional ignores). Or is that just difficult. >> OTOH, we already have a customization point that allows to exclude more >> files than .gitignore does (the project-vc-ignores variable). > > I don't think exclusion alone is enough. We need also a way of > _including_ files in a project. It's on my list. As long as we're talking about whitelisting files in the same directory tree. But also see project-external-roots. >> *And* one can use the project API to introduce a project backend that >> does not rely on VC repositories. > > I think we should have commands to do so in the core. It's too basic > a capability for any IDE for us to leave it to add-ons. Commands? Project backends are applied automatically in the current model. From MAILER-DAEMON Sat Jun 20 07:46:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmbxN-0003dF-Le for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:46:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmbxL-0003d7-Sd for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:46:43 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:34176) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmbxJ-0004W6-V7; Sat, 20 Jun 2020 07:46:43 -0400 Received: by mail-wm1-x336.google.com with SMTP id u26so10396841wmn.1; Sat, 20 Jun 2020 04:46:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=WHq4nFJgamZ/6mwqwe6AOPpFaMmGytrLP/0J04DvJK0=; b=BjHCyv98hF3LPh6cZkjg3aKfXFfLtxv1orYa2/grxHsOr69z171GUDAwI9fPfZNwQ5 lLUnTJeKu51HcwZAWzG2gyPubbsUSllFBxB3OM+L0Ns1aIG106VvIDtsuJKQM26rF5y3 DROsyFiv4a3ndHHSE5H2irgsyzDvnB5bw+UaBBINKUcb50IrjjLtEc5qQlOYEILdfqaM 4qRVhbQXPAlbwNd1BVhYdnd8BSApF5CTjAezPQjdmjyp4OfiqRPKSNfYG3AEWcEIA1iG I81rCdIJtjTaPXijjeZDb8VXtoYAl728CdMn7GYBLahPhzr8mE6TZ3jO/GbdfV/PWMQn wE9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=WHq4nFJgamZ/6mwqwe6AOPpFaMmGytrLP/0J04DvJK0=; b=gxSZFyhbYrQy0QM1N2/sC4G8rAHHbDBd+P4i+74ehOCXcRNNHTllp1wcZdCXlb4X9x ztNJaByMEQ+yGtwru8AxjJU/6h+GEPX3Z85BNkavP6G9N9pEHVW3+Ggf3OoE1UriHzvH l7mysvnjzpqoaa/sQjJZeEp9k2CAJfwTqsOZb8H5zKqNAt+K7YhtLz4aHrhZKtnMrXa0 Ak5COWSVYCuyyVVT+7/4K/BROxINvndxuwMdDr1Spz9RGr/d9I8I73ckWcvRDJ82JX5F riohKy9JYJL/knSnXosTyRaGJPGre0Pui98R9/JMf2jsOvqxBVGwSWC9fsfjz4Erz6PS W/yw== X-Gm-Message-State: AOAM5325iHF0R/pVYcgQmO3z5BEHQHdL789kQ4TGtx5uBu1p0Hpjqrjv cN3tZCObMx4DLcVV6lUEKMzPlrskDgY= X-Google-Smtp-Source: ABdhPJx375ifycdOIlzgREHYZQ1fyhAgkGibv3VkP018fChXIAvJ3UZA/XS/qBGZsKuRmBSQhCQufw== X-Received: by 2002:a1c:2d4d:: with SMTP id t74mr8941751wmt.177.1592653599019; Sat, 20 Jun 2020 04:46:39 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id z9sm9527155wmi.41.2020.06.20.04.46.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jun 2020 04:46:38 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Dmitry Gutov Cc: Eli Zaretskii , Theodor Thornhill , philip@warpmail.net, emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> Date: Sat, 20 Jun 2020 13:46:36 +0200 In-Reply-To: (Dmitry Gutov's message of "Sat, 20 Jun 2020 14:29:20 +0300") Message-ID: <87eeqat0wz.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x336.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:46:44 -0000 Dmitry Gutov writes: > On 20.06.2020 11:55, Eli Zaretskii wrote: >> I proposed to find a different way of telling which buffer is related >> to a project, other than by looking at its default-directory. We >> could design a way of doing that which would then support adding >> buffers to a project quite easily. But Dmitry doesn't think we should >> go that way. > > If you can outline and propose that alternative way, I'm all for > considering it. A few messages back, Eli said: > If we really > want to record in these buffers what project they are related to, we > need to have stronger evidence, like what was the current-buffer when > the command was invoked, or maybe something else (like name the > buffers in some special way). Where "these buffers" refers, IIUC, to "stuff like *XREF*, Eshell, Occur, *Compilation*, *Grep*, etc.". Would it make sense for these special modes to have a buffer-local variable pointing to the buffer where the command was invoked? project.el could then consult that variable first, then fallback to default-directory? From MAILER-DAEMON Sat Jun 20 07:57:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmc7Y-0001Mi-80 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 07:57:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmc7W-0001LU-Gd for emacs-devel@gnu.org; Sat, 20 Jun 2020 07:57:14 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:41199) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmc7U-00067d-Ff; Sat, 20 Jun 2020 07:57:14 -0400 Received: by mail-wr1-x435.google.com with SMTP id q2so9667366wrv.8; Sat, 20 Jun 2020 04:57:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=7exW0oMnL68KvtvOQmWBj8qXoe3ai1UY+AlCxR/MgMU=; b=Ya2vsfJN7NRIzWi0nnmKIKd8PuibIl6sXID0IG4ZiG2q3/fPNkZSu7irxn6cgmPcXW 2KEYj++M+AJ/4sbC6LVDHTP3zC6SfmLYORIBeWRsUMPiluUpO5mJ9YS/dEREDMNdytrR wq5pNlvNAjbbl7gkI5bGY1FhRzPwOERfABkaRoU+vHoQo1/KG9tzrTWtyRI40xD+w7j4 ErcgXDezwMtrZ+WCLym/Taf6W76aB4Th2LKocz+VUkVQCgip2/RhFDSp0NuQpZKh6sDl DfW7/eFsMjMH4iJgAdVCWnGM7lCpRtW4yUOdJHGq7bCcTKkvxFIZ1D0DyKkDwh+Dqt/u 4XGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=7exW0oMnL68KvtvOQmWBj8qXoe3ai1UY+AlCxR/MgMU=; b=gdwDa+jXGDgSYrbSyVLrPCF0GkPKPTWqXQdxulBVhP9+eV1gmq3poaj44SVWW0aXmv kJ8bZLot4fROVnBPc8SDGoKv50FPFiRYfQ8Y+aIaN40vxswa0uz749N2DXq8vZVpPQuE 1OOySVlGaaydrh5S81ny1IewmF5EjCkYiS1EGQu9xDKZAEjD6axAnTGO4/s2gyYyCPJp or7wjj/veSiqKY7u/Zibe8zhI3ebRigDGc0yWReDt3lZBus00lZ0SQsHTDCtZidV6GNS UjYq/c4G9Rdc+X4WCcJMdrs54kESPSAwNgPZci0D953ju54OgxgaGEIpEQf0pOYto/rW 9yMw== X-Gm-Message-State: AOAM5327M/P5d4umJM2i3EMnLdGAy+q5ZQsO8ikbutNZHD0sWZvyGRzE HnZm7LadxTm8vjs5ltISMSUKXVri X-Google-Smtp-Source: ABdhPJyR1eQ0rL8lw0tgwW9xkOEI2TegjB25R7wTPGu/Zh8ernYfShiiQgBOwrJvf/6eq3xHeG5ymw== X-Received: by 2002:adf:e4cc:: with SMTP id v12mr8542920wrm.183.1592654230324; Sat, 20 Jun 2020 04:57:10 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id 67sm10775402wrk.49.2020.06.20.04.57.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 04:57:09 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: =?UTF-8?Q?K=c3=a9vin_Le_Gouguec?= Cc: Eli Zaretskii , Theodor Thornhill , philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87eeqat0wz.fsf@gmail.com> From: Dmitry Gutov Message-ID: Date: Sat, 20 Jun 2020 14:57:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87eeqat0wz.fsf@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::435; envelope-from=raaahh@gmail.com; helo=mail-wr1-x435.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 11:57:14 -0000 On 20.06.2020 14:46, Kévin Le Gouguec wrote: > A few messages back, Eli said: > >> If we really >> want to record in these buffers what project they are related to, we >> need to have stronger evidence, like what was the current-buffer when >> the command was invoked, or maybe something else (like name the >> buffers in some special way). > Where "these buffers" refers, IIUC, to "stuff like*XREF*, Eshell, > Occur,*Compilation*,*Grep*, etc.". > > Would it make sense for these special modes to have a buffer-local > variable pointing to the buffer where the command was invoked? > project.el could then consult that variable first, then fallback to > default-directory? Perhaps. I don't know if that would be enough for Eli's purposes, however. After all, in the Grep example, it could have been invoked from one of the buffers belonging to the current project, or just as well from an "outside" buffer (because, for example, that made it easier to select the intended directory). From MAILER-DAEMON Sat Jun 20 08:12:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcMY-0003vE-Qq for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:12:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmcMW-0003v6-OE for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:12:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38350) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmcMU-0008Ql-Ey; Sat, 20 Jun 2020 08:12:43 -0400 Received: from [176.228.60.248] (port=3304 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcMT-0007SW-BC; Sat, 20 Jun 2020 08:12:41 -0400 Date: Sat, 20 Jun 2020 15:12:29 +0300 Message-Id: <831rmavsuq.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> (message from Dmitry Gutov on Sat, 20 Jun 2020 14:25:50 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:12:44 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sat, 20 Jun 2020 14:25:50 +0300 > > On 20.06.2020 09:43, Eli Zaretskii wrote: > > > So all you want to add to the current doc string is "...and doesn't > > belong to some other project"? > > I don't know about that. Interpreting that literally would mean that > such buffers would never be suggested because they "belong to some other > project" (according to the reasoning which gave rise to this wording) no > matter which of the projects is the current one: "the outer", or "the > inner". > > So what we should say is just "belongs to the current project". Not sure I understand. The current doc string says "Switch to another buffer that is related to the current project. A buffer is related to a project if its `default-directory' is inside the directory hierarchy of the project's root." You want to change the last sentence to say A buffer is related to a project if it belongs to the project. ? > The implication being that if it's inside a nested project, it > doesn't belong to the outer one. How will this implication become apparent to the users, if the doc string doesn't discuss the significance of being "nested"? > > No, it isn't. I'm working on a single project, but need to look > > outside of its directory to find some information. A very natural > > thing to do, and it doesn't mean I started working on another > > project. More importantly, I do want that Grep buffer be available to > > me as part of the current project, because I'm likely to return there > > more than once. > > And bookmarks/switch-to-buffer/registers are not good options for this goal? The problem I raised is that such a Grep buffer will not be offered as a completion candidate when it is definitely relevant to my work on a project. You suggest that I don't use the project.el commands, which is exactly what bothers me: it means that project.el commands don't support well a very simple project-related activity, which for me is a very frequent one. > Make sure project-vc-external-roots-function points to a function that > returns a list which includes the "other" directory. By default, it will > include the directories where tags tables reside. But I don't want all the files in that directory to be part of the project. I want just the Grep buffer. And anyway, coming up with a function that does some job is not a user-level operation, at least not when the user needs to do it every now and then, when the work on a project takes him/her outside of a directory. We need easier facilities, like commands and simple-valued variables. > >> To reuse your argument, 'M-x switch-to-buffer' is still available for > >> borderline cases. > > > > An argument that you dismissed previously. > > I dismissed it as in "people wanted to call this command less". But my > specific wording also made provision for it being necessary at least > sometimes. > > But you made this argument. So perhaps it may be good enough for your > purposes. Am I wrong here? How can it be good enough for my purposes, but not good enough for those of others? What kind of logic is this? > I don't want to dismiss your request outright, but we'll need to have > some design which would fit the existing model and/or wouldn't be hard > to support. I presented a critique of the current design, whereby the buffer's default-directory is used to decide whether the buffer belongs to a project. I presented several examples where this design doesn't do what I as a user expect. If you don't want to dismiss that critique outright, I'd expect you to come up with some changes that would support the use cases I described. That is the expected response to a critique such as the one I presented. I don't understand why you expect _me_ to have some design, I'm not working on developing project.el, I'm just a (potential) user of it. > Because exceptions and edge cases tend to pile up, if we just start > adding exceptions here and there. The use cases I presented aren't exceptions, they are something developers do all the time. > > I think that non file-visiting buffers are rarely related to a > > project, an exception rather than a rule. My suggestion is therefore > > to turn the table and come up with a list of such buffers that > > _always_ are related to a specific project. And instead of using the > > default-directory as evidence for the buffer's relevance, we may need > > a command that explicitly makes a buffer related to a project. > > Well, Phil gave a list of examples. And in all of those cases, I think, > default-directory worked well as an indicator. The same examples could be supported by having a list of buffers that should be considered. Whether such an explicit list is a good or a bad idea depends on how long it will have to be. That is why I suggested to see how many such buffers are there, because I suspect there are only a few. By contrast, making a far-reaching decision that default-directory is all we need, based on such a small sample, might produce sub-optimal results, as I described. > In my work, having Grep buffer's default-directory belong to the current > project is also a string indicator. My example was with a Grep buffer whose default-directory is NOT in the current project. IOW, my problem was with the false negative. > >> So default-directory is not the worst indicator. > > > > I'm saying it isn't the best, either. We have just discovered at > > least 2 problems with it. We should try to find a better one. > > One might interpret your request essentially as "I want any buffer, > arbitrarily, based on my current intention, be associated with the > current project". It's probably not as arbitrary, so you're welcome to > suggest an alternative indicator. I already suggested one: let the user specify that with special commands, and have other commands do that automatically where we know the user will want that with very high probability. Doing this means we need some indicator other than default-directory. A buffer-local variable, perhaps, or membership in some data structure, like a list of buffers associated with a project. Or anything else, really, that can support better, more accurate decisions. There are many alternatives; my point is that basing this on default-directory is not the best strategy. From MAILER-DAEMON Sat Jun 20 08:25:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcZ6-0001Os-5N for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:25:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35142) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmcZ4-0001OO-A5 for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:25:42 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38529) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmcZ2-0001x4-O7; Sat, 20 Jun 2020 08:25:40 -0400 Received: from [176.228.60.248] (port=4104 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcZ2-0000IG-49; Sat, 20 Jun 2020 08:25:40 -0400 Date: Sat, 20 Jun 2020 15:25:30 +0300 Message-Id: <83zh8xvs91.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theothornhill@pm.me, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Sat, 20 Jun 2020 14:29:20 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:25:42 -0000 > Cc: philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sat, 20 Jun 2020 14:29:20 +0300 > > On 20.06.2020 11:55, Eli Zaretskii wrote: > > I proposed to find a different way of telling which buffer is related > > to a project, other than by looking at its default-directory. We > > could design a way of doing that which would then support adding > > buffers to a project quite easily. But Dmitry doesn't think we should > > go that way. > > If you can outline and propose that alternative way, I'm all for > considering it. I think I did. And I don't really understand what is being requested here. Recording something in a variable, be it a buffer-local one or a global one indexed by a project, is easy, and doesn't require any complicated design. I'm talking as a user here, asking you to support what I think is a very common usage pattern of working on some programming problem that involves changes in a group of related files. > Compared to an ad-hoc variable (or having a command that adds such a > buffer manually), I'd much prefer an automatic approach. Not sure what does "automatic" mean here. If that means using only currently available buffer-local variables, then who's to say that this is good enough? Why limit ourselves to only such solutions? the few presented examples already uncovered some deficiencies in relying on one such variable. OTOH, we could introduce a new buffer-local variable to be automatically set by, say, a find-file-hook, or by project-find-file, or via some other feature we have. Same with recording relevant buffers in some project-specific data structure. IOW, it sounds like we have any number of ways for doing something like that, and the only argument is whether we should. From MAILER-DAEMON Sat Jun 20 08:31:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmceJ-0005DS-4F for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:31:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmceH-0005DJ-QR for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:31:05 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:38083) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmceE-0002ni-5P for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:31:05 -0400 Received: by mail-wr1-x429.google.com with SMTP id z13so392102wrw.5 for ; Sat, 20 Jun 2020 05:31:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=V6o4LKFV3MNWT4bbWfu4/B2o5/Pdu7frBbustfAxAq0=; b=K/JGQKxP5xIp/wNUsZ4YFuwWHgr2vhMmm+KjPUMFOWGdMUFk5qTVyXQXk6xhbApS7e nM0PO68hweTD9mvgMLjxn4QSaLnMkSs9hPk31iNLqsFXjwkdwzeWwLVdVjTXmlK0Wzwa gWqTBNYM33mO6ZoBt0CnPNgH2Bt06ZLGGCJZWF4CrldpRNDLR01q6GI3NYIGE4uQtRJQ zjymCiCa2B22K3H8+MByPwt9+758Fk/biWrViyNTCHOKq9cXnrdhLJ6c+hU3CAH1jsc6 AfVas/uC+5V4huFEtrgbWVT7ywoMzDwKePYTW9Lf1n8mK/7QzH6BfHai/RIWn1POf4so 7E7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=V6o4LKFV3MNWT4bbWfu4/B2o5/Pdu7frBbustfAxAq0=; b=hnOd2Pb6X8+3L80mVBkFBWkDLi4zhk+C11ysCOfXB4lFasKzNXBcb1JzlC+GBDompq +De2vJJBQvK+j1Bk8X0vGDyf70qmIg+izewF8/5h/4o8EfQ2R/G47TxY2P7xdllj3gKS uJuFhYHYMtf9TIAPCXU+xxdWGQeBCa2hLEvhN+W8y/AViInZ7UE/ZPzx5R+ZURCsGPCA AWnS66amCIbtsPUn/lCu4vMk3iH2petSUIHVhLC7PTPZvs955SVbXFFZIw44wpVKYuyY invq+746CEeCfv2u7bid9yyHblRR3Uphbitmcw2ueVegPm6KoCSjbQHbAWj1hEH8JfK+ nc0w== X-Gm-Message-State: AOAM530ZpDi+qXnXpOrmfzrq9PtMnj3rQ8+Z6zbb25b/b2fCNNalHP5e YbOPUBswFCafDSmUjCdDO4FlxQ== X-Google-Smtp-Source: ABdhPJwWnjiBpYedrhb9LocT24glENgnu8HI1P4GUrDRWvDUaOsWvYygRnLvCSNFrUefpronp58M/Q== X-Received: by 2002:a5d:4903:: with SMTP id x3mr9515143wrq.351.1592656259675; Sat, 20 Jun 2020 05:30:59 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id 14sm2058555wmk.19.2020.06.20.05.30.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jun 2020 05:30:59 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: Dmitry Gutov , philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> Date: Sat, 20 Jun 2020 13:30:57 +0100 In-Reply-To: <831rmavsuq.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 20 Jun 2020 15:12:29 +0300") Message-ID: <87lfkhdim6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::429; envelope-from=contovob@tcd.ie; helo=mail-wr1-x429.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:31:06 -0000 Eli Zaretskii writes: >> One might interpret your request essentially as "I want any buffer, >> arbitrarily, based on my current intention, be associated with the >> current project". It's probably not as arbitrary, so you're welcome to >> suggest an alternative indicator. > > I already suggested one: let the user specify that with special > commands, and have other commands do that automatically where we know > the user will want that with very high probability. > > Doing this means we need some indicator other than default-directory. > A buffer-local variable, perhaps, or membership in some data > structure, like a list of buffers associated with a project. Or > anything else, really, that can support better, more accurate > decisions. There are many alternatives; my point is that basing this > on default-directory is not the best strategy. What if grep, xref, etc. "singleton" buffers get created per project, either automatically by detecting that they are called from within a project, or by providing project.el wrappers for their respective commands? Then they could be switched to based on default-directory alone, right? Would that fly at all? -- Basil From MAILER-DAEMON Sat Jun 20 08:32:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcfn-0007dl-Sc for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:32:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmcfi-0007cu-KI for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:32:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38601) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmcfh-00031x-UC; Sat, 20 Jun 2020 08:32:33 -0400 Received: from [176.228.60.248] (port=4519 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcfg-0008UW-Mc; Sat, 20 Jun 2020 08:32:33 -0400 Date: Sat, 20 Jun 2020 15:32:22 +0300 Message-Id: <83y2ohvrxl.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <90f4c9e8-bf8d-3b27-a8a9-ed44c5d23839@yandex.ru> (message from Dmitry Gutov on Sat, 20 Jun 2020 14:35:24 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> <834kr6vymb.fsf@gnu.org> <90f4c9e8-bf8d-3b27-a8a9-ed44c5d23839@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:32:35 -0000 > Cc: philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sat, 20 Jun 2020 14:35:24 +0300 > > On 20.06.2020 13:07, Eli Zaretskii wrote: > > In any case, my proposal was not about the API itself, it was more > > about the implementation of the API. For example, we could have an > > implementation of the generic project-files API that consulted some > > list instead of asking the VCS or the filesystem to provide the files. > > You can of course do this already, in 10 lines or so. I'm a user. I don't want to write code every time I want something simple from the project-related commands. I expect such simple use cases to be supported OOTB. > But imagine you did add such a backend where project-files returns an > arbitrary list of files. And you use it. > > How would project-switch-to-buffer consult it? Will it have to call > project-files now, as opposed to just using project-root as the basis > for comparison? And then compare buffer-file-name of all file-visiting > buffers against that list? That's one possibility, yes. > That would work for smaller projects, but in large ones project-files is > not instantaneous, so they will be penalized in performance by such an > approach. We have faster data structures than lists. We could use them. And in any case, we should identify the needs first, and then implement the features that support those needs. Rejecting some of the needs because they don't fit the current implementation is the wrong way for designing features such as this, which is supposed to be part of our IDE infrastructure. > And project-switch-to-buffer should work with all kinds of projects. Yes. And one such kind is an ad-hoc collection of files and buffers, where only the user knows which ones he/she is interested in and which ones he/she isn't. Every IDE I saw supports something like that, so we should do that as well, IMO. > That also wouldn't solve the problem of non-file-visiting buffers like > Grep from your example. You talked about project-files, so buffers that don't visit files are excluded, of course. But an indication that supports marking buffers as belonging to a project could support both file-visiting and non file-visiting buffers. From MAILER-DAEMON Sat Jun 20 08:36:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcjo-0001WR-Jc for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:36:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmcjm-0001WH-So for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:36:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38635) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmcjl-0003fa-Oi; Sat, 20 Jun 2020 08:36:45 -0400 Received: from [176.228.60.248] (port=4782 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcjl-0000cy-41; Sat, 20 Jun 2020 08:36:45 -0400 Date: Sat, 20 Jun 2020 15:36:37 +0300 Message-Id: <83v9jlvrqi.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theothornhill@pm.me, emacs-devel@gnu.org In-Reply-To: <0a2b7b06-f6ac-2e33-0901-d56e3f94f260@yandex.ru> (message from Dmitry Gutov on Sat, 20 Jun 2020 14:41:22 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <83y2oix431.fsf@gnu.org> <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> <83pn9uw6cm.fsf@gnu.org> <0a2b7b06-f6ac-2e33-0901-d56e3f94f260@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:36:47 -0000 > Cc: theothornhill@pm.me, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sat, 20 Jun 2020 14:41:22 +0300 > > On 20.06.2020 10:20, Eli Zaretskii wrote: > > >>> Not as part of working on the current project. Though I might decide > >>> to add some of them to the current project, as the need arises. > >> > >> I mean, do you visit them in the same Emacs session? > > > > I just answered that above. This is all in a single Emacs session. > > What I meant is, is there harm in modeling that kind of project as VC > project with just lots of exceptions (additional ignores). Or is that > just difficult. I don't understand the question. What is a "VC project", and how is it relevant to the use case I described with grepping another directory to see how others solved some problem? > >> OTOH, we already have a customization point that allows to exclude more > >> files than .gitignore does (the project-vc-ignores variable). > > > > I don't think exclusion alone is enough. We need also a way of > > _including_ files in a project. > > It's on my list. As long as we're talking about whitelisting files in > the same directory tree. That's part of the issue, but it isn't all of it. > But also see project-external-roots. That supports only entire directory trees, so is not selective enough, IMO. > >> *And* one can use the project API to introduce a project backend that > >> does not rely on VC repositories. > > > > I think we should have commands to do so in the core. It's too basic > > a capability for any IDE for us to leave it to add-ons. > > Commands? Project backends are applied automatically in the current model. Don't understand what you are saying here, either. Are you saying a backend cannot support some notion of starting a project, or of adding a file to a project? From MAILER-DAEMON Sat Jun 20 08:38:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcl0-0002og-SN for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:38:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmckz-0002oA-C8 for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:38:01 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38655) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmckz-0003qB-0d; Sat, 20 Jun 2020 08:38:01 -0400 Received: from [176.228.60.248] (port=4857 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcky-0008Bv-Eq; Sat, 20 Jun 2020 08:38:00 -0400 Date: Sat, 20 Jun 2020 15:37:51 +0300 Message-Id: <83tuz5vrog.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: kevin.legouguec@gmail.com, theothornhill@pm.me, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Sat, 20 Jun 2020 14:57:07 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87eeqat0wz.fsf@gmail.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:38:01 -0000 > Cc: Eli Zaretskii , Theodor Thornhill , > philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sat, 20 Jun 2020 14:57:07 +0300 > > > Would it make sense for these special modes to have a buffer-local > > variable pointing to the buffer where the command was invoked? > > project.el could then consult that variable first, then fallback to > > default-directory? > > Perhaps. I don't know if that would be enough for Eli's purposes, however. It will solve some of them, to be sure. > After all, in the Grep example, it could have been invoked from one of > the buffers belonging to the current project, or just as well from an > "outside" buffer (because, for example, that made it easier to select > the intended directory). So you are saying that it's better to have no way of supporting that use case than have some, even restricted, way? From MAILER-DAEMON Sat Jun 20 08:42:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmcp1-0006DY-BE for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 08:42:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmcp0-0006DP-7a for emacs-devel@gnu.org; Sat, 20 Jun 2020 08:42:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38691) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmcoy-0004Uv-OC; Sat, 20 Jun 2020 08:42:08 -0400 Received: from [176.228.60.248] (port=1138 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmcoy-0003G0-6G; Sat, 20 Jun 2020 08:42:08 -0400 Date: Sat, 20 Jun 2020 15:42:00 +0300 Message-Id: <83sgepvrhj.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: dgutov@yandex.ru, philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org In-Reply-To: <87lfkhdim6.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <87lfkhdim6.fsf@tcd.ie> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 12:42:10 -0000 > From: "Basil L. Contovounesios" > Cc: Dmitry Gutov , philip@warpmail.net, > theo@thornhill.no, emacs-devel@gnu.org > Date: Sat, 20 Jun 2020 13:30:57 +0100 > > > Doing this means we need some indicator other than default-directory. > > A buffer-local variable, perhaps, or membership in some data > > structure, like a list of buffers associated with a project. Or > > anything else, really, that can support better, more accurate > > decisions. There are many alternatives; my point is that basing this > > on default-directory is not the best strategy. > > What if grep, xref, etc. "singleton" buffers get created per project, > either automatically by detecting that they are called from within a > project, or by providing project.el wrappers for their respective > commands? That is something I suggested a few messages back, actually. > Then they could be switched to based on default-directory alone, > right? Would that fly at all? Why would we need the default-directory in this case? If these buffers are created to be project-specific, it would mean that they are somehow different from one another, right? We could then use these differences directly to tell which ones are related to a project. For example, the names of these buffers could include the project ID, or some buffer-local variable could do that. Once again, default-directory is too random to be a strong evidence in this case. It will cause too many false positives and false negatives. From MAILER-DAEMON Sat Jun 20 09:08:10 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmdEA-0003lj-6l for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 09:08:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42410) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmdE8-0003lT-8W for emacs-devel@gnu.org; Sat, 20 Jun 2020 09:08:08 -0400 Received: from forward103o.mail.yandex.net ([37.140.190.177]:43783) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmdE4-00085V-OY; Sat, 20 Jun 2020 09:08:07 -0400 Received: from mxback30g.mail.yandex.net (mxback30g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:330]) by forward103o.mail.yandex.net (Yandex) with ESMTP id 1FBED5F80465; Sat, 20 Jun 2020 16:07:58 +0300 (MSK) Received: from iva4-bca95d3b11b1.qloud-c.yandex.net (iva4-bca95d3b11b1.qloud-c.yandex.net [2a02:6b8:c0c:4e8e:0:640:bca9:5d3b]) by mxback30g.mail.yandex.net (mxback/Yandex) with ESMTP id H0yjkeyTlv-7vTK5FSm; Sat, 20 Jun 2020 16:07:58 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592658478; bh=ROmoIfOl/srGLbalmlceG0urn0m6JDqhijGv4JKZVHw=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=Qls/TPDV3gOzwRpISAldDbkP5XlGuVBvis0BV+8AlPL3CRpxPu+VDcLV4MU/85mcv 30hC+vVasXbPRtS1rEL5QTdVJ/K3UK548EuYS8q7G2MzjzKTPomcCBPtu2yKJw/hyF Z2feQwtRj52ZvOU8FNqRx/WS1ni69nkQhW6OTLiU= Authentication-Results: mxback30g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva4-bca95d3b11b1.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id ScZNNoMkdb-7tk0XLsN; Sat, 20 Jun 2020 16:07:56 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sat, 20 Jun 2020 16:07:54 +0300 In-Reply-To: <83wo43xom6.fsf@gnu.org> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=37.140.190.177; envelope-from=hi-angel@yandex.ru; helo=forward103o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 09:07:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 13:08:08 -0000 On Fri, 2020-06-19 at 14:48 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Cc: Eli Zaretskii , Dmitry Gutov , Stefan > > Kangas , emacs-devel@gnu.org > > Date: Fri, 19 Jun 2020 01:34:21 +0300 > > > > > I’d also like to note that this list can be invaluable when rebasing > > > commits and resolving conflicts. It’s not strictly necessary (just like > > > other parts of a version control workflow are not strictly necessary), > > > but it can serve as a sanity check in a time when the diff is not > > > authoritative as it is in flux. > > > > While it may be useful, but explicit examples may be more interesting. Right > > now > > when I read your text about this list in the context of resolving rebase > > conflicts, I only see the downside that if the conflict came up because a > > function was renamed, you need to go fix the commit message too. > > > > Even worse: if upon rebasing a function was renamed, you may not get any > > conflicts (i.e. because thunk you modified didn't include the beginning of > > the > > function), and now your commit message is broken without you even noticing. > > There's no requirement to retroactively fix commit log messages when > files or functions are renamed. The renaming is recorded in the > history and can be found when one needs to explore the history of some > code fragment. > > What is important is that the log message names the files and > functions/macros/data structures as they are called at the time of the > commit, because the log message is many times read in conjunction with > the diffs. > > So I don't think the difficulties you describe are real. Are you saying that wrong commit messages are okay? Will it be okay if I make a v1 of a patch where just one function is changed, and then in v2 I additionally modify a dozen of others, and won't add their names to the commit message? Also, what you say here contradicts to your quote of GNU standard, which says the list is needed to generate Changelog files. Because not fixing commit messages retroactively will result in wrong Changelogs. What's the point in wrong Changelog files and wrong commit messages? > > Let me sum up the positive mentions: so far, you just say it simplifies > > review > > for you, but I don't know your workflow, there may be many factors that make > > you > > assert that, which does not necessarily applies to everyone. Dmitry said the > > list makes better commit messages from novices, but again when I tried to > > dig > > deeper, that discussion died. > > When you contribute changes to a project, you need to satisfy the > workflows of others, even if they differ from yours. So you need to > respect the opinions of the project developers when they tell you this > information is of help to them. Right. Judging by the fact you say this me, I have a feeling you miss the point why we're even discussing this. Let me abstract from Emacs a bit. People like different things, which is okay, everyone has unique life and character. And some like things that would in fact hurt when applied to others! That's okay too, just don't apply these to everybody. There're communities for them as well, so it's not like they're alone. Now let's get back to Emacs. I hope it's unquestionable that purpose of Emacs project is prosperity of Emacs project. It doesn't have explicit purpose to cater to Emacs contributors or developers. But if you ask "how can we make Emacs evolve and prosper", the "making Emacs contributors, developers and users comfortable" is hopefully an obvious answer. Having good developer practices is an implication of "making developers/contributors comfortable". Which includes, that if some developer practice (I'm pointing out here to the functions list) 1. carries burden on everyone, and 2. Makes happy only a few (perhaps, because of their habits or whatever), we should ditch this practice. Because Emacs project is not a community of peoples who like a specific thing that would hurt others when applied to them. Instead it's a community who want Emacs to evolve and prosper. > Here are the excerpts from the latest GNU Coding Standards manual I > mentioned above: > […snipped…] Thanks. I should say, it's a big text, half of which basically says "it's cool to have" which doesn't answer the question "why". So, I'm sorry if I missed some point while reading this, in this case pointing this out more explicitly might help. Regarding the discussion I grasped from it two points: 1. The list is used to generate Changelogs. 2. The standard does not enforce having the list in commit messages if you're using a decent VCS (which I'd think includes git) The text then goes into details that generating Changelogs from a VCS alone may be unreliable. The example it shows can be reproduced on Emacs repo as follows: if you do `git log -1 -p 50a0126402d`, you'll see some renames, however the context above the hunk shows not the variable/function being renamed. I'd argue it would be way more productive to make git produce what Changelog files need correctly rather than forcing tedious manual work upon everybody. git already can recognize the context correctly, we just need a specific flag to only make it show changed functions/variables (ATM it seems not to have it, at least I didn't find one). From MAILER-DAEMON Sat Jun 20 10:02:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jme58-0001Oh-B0 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 10:02:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jme56-0001OT-PT for emacs-devel@gnu.org; Sat, 20 Jun 2020 10:02:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39103) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jme55-0007iI-3o; Sat, 20 Jun 2020 10:02:51 -0400 Received: from [176.228.60.248] (port=2096 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jme54-0001qM-Fi; Sat, 20 Jun 2020 10:02:50 -0400 Date: Sat, 20 Jun 2020 17:02:40 +0300 Message-Id: <83r1u9vnr3.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: (message from Konstantin Kharlamov on Sat, 20 Jun 2020 16:07:54 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 14:02:53 -0000 > From: Konstantin Kharlamov > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > Date: Sat, 20 Jun 2020 16:07:54 +0300 > > > There's no requirement to retroactively fix commit log messages when > > files or functions are renamed. The renaming is recorded in the > > history and can be found when one needs to explore the history of some > > code fragment. > > > > What is important is that the log message names the files and > > functions/macros/data structures as they are called at the time of the > > commit, because the log message is many times read in conjunction with > > the diffs. > > > > So I don't think the difficulties you describe are real. > > Are you saying that wrong commit messages are okay? Of course not. > Will it be okay if I make a > v1 of a patch where just one function is changed, and then in v2 I additionally > modify a dozen of others, and won't add their names to the commit message? Of course not. But you could omit the log messages completely in v1 if it is known in advance that there will be a v2. IOW, the only log message that really matters is the last one, the one that is going to be committed to upstream. It's similar to documentation: it is perfectly acceptable to initially post a patch without the documentation bits, saying you will provide one when the code details are finalized. > Also, what you say here contradicts to your quote of GNU standard, which says > the list is needed to generate Changelog files. Because not fixing commit > messages retroactively will result in wrong Changelogs. > > What's the point in wrong Changelog files and wrong commit messages? We are miscommunicating. You have only a very specific scenario in mind, whereas I was talking about something much more general. For the situations you had in mind (IIUC), only the last variant of the log messages matters. If you can get those log message right on the first attempt, you can omit them in intermediate variants, and just say you will provide them with the last version. (Of course, if you don't get them right the first time, you will get review comments for them, so it's up to you to decide whether indeed you can afford omitting them from intermediate versions.) Also, let's face it: changesets where v2 renames many symbols present in v1's log are rare. There's no need to make these rare cases sound as if they were the rule: they are not. > Now let's get back to Emacs. I hope it's unquestionable that purpose of Emacs > project is prosperity of Emacs project. It doesn't have explicit purpose to > cater to Emacs contributors or developers. But if you ask "how can we make Emacs > evolve and prosper", the "making Emacs contributors, developers and users > comfortable" is hopefully an obvious answer. > > Having good developer practices is an implication of "making > developers/contributors comfortable". Which includes, that if some developer > practice (I'm pointing out here to the functions list) 1. carries burden on > everyone, and 2. Makes happy only a few (perhaps, because of their habits or > whatever), we should ditch this practice. We are not asking contributors to adhere to some arbitrary and outlandish standards and practices, or something that satisfies only a small group of people who usurped the power, so to say. These are standards common to the GNU Project as a whole (although minor variations do exist, and when I submit changes to, say, GDB, I need to do that according to what GDB developers expect and require, not to what I'm accustomed to in Emacs). These standards are the result of quite a few discussions among developers of many GNU projects, where arguments not unlike those you present are also voiced and considered. The result is described in the GCS document, and it includes rationale that also comes out of those discussions. IOW, it isn't like some band of people conquered the Emacs project and now dictates its arbitrary demands to the community at large. These requirements are the result of many discussions, and include the summary experience and knowledge of many people who understand very well that every additional requirement adds to the burden of the contributors. Requirements for contributors are always a fine balancing act, whereby too few or too many requirements will both produce sub-optimal results for various reasons. So let's not pretend that dropping important requirements to make it easy on contributors is the right solution, because the requirements are there for a reason, and dropping any one of them brings a disadvantage. We need to carefully weigh the advantages and disadvantages of each requirement. > > Here are the excerpts from the latest GNU Coding Standards manual I > > mentioned above: > > […snipped…] > > Thanks. I should say, it's a big text, half of which basically says "it's cool > to have" which doesn't answer the question "why". So, I'm sorry if I missed some > point while reading this, in this case pointing this out more explicitly might > help. Actually, the reasons (a.k.a. "why") are presented there at least twice: once indirectly, by explaining the general purpose of good change log records, and then once more by providing specific considerations for keeping the information we are talking about (names of files and functions/macros/data structures that were modified) in the log. > 1. The list is used to generate Changelogs. No. The text says that it is recommended to have ChangeLog files in the release tarball, but it doesn't make that mandatory. > 2. The standard does not enforce having the list in commit messages if you're > using a decent VCS (which I'd think includes git) No. The text leaves this decision to each package maintainer, and presents important considerations that could and should influence that decision. > The text then goes into details that generating Changelogs from a VCS alone may > be unreliable. The example it shows can be reproduced on Emacs repo as follows: > if you do `git log -1 -p 50a0126402d`, you'll see some renames, however the > context above the hunk shows not the variable/function being renamed. > > I'd argue it would be way more productive to make git produce what Changelog > files need correctly rather than forcing tedious manual work upon everybody. git > already can recognize the context correctly, we just need a specific flag to > only make it show changed functions/variables (ATM it seems not to have it, at > least I didn't find one). I encourage you to talk to Git developers so that they improve this capability. Not sure this is going to happen in practice (knowing how the diffs are generated, and given that one GNU project using Git after another sets up alternative tools for overcoming these problems), but it definitely cannot harm, so by all means go for it. From MAILER-DAEMON Sat Jun 20 10:42:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmehT-0002FG-EV for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 10:42:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmehR-0002EU-U2 for emacs-devel@gnu.org; Sat, 20 Jun 2020 10:42:29 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:14424) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmehP-0005CL-3m; Sat, 20 Jun 2020 10:42:28 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 992E6101E25; Sat, 20 Jun 2020 10:42:24 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id B8E4E101BC6; Sat, 20 Jun 2020 10:42:22 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592664142; bh=SwaF2pT8VWUYuVWJ7STJY96scjzW5e6hcttqLnQWOss=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=I4KNfz/oJbtle7PUDB28JPWUZ+6+Z1slBZiCXgT1ERLg5CSrH9fHyo6l5JOrA+Vl6 ZGtK8325/ZON3hEacMe81ugFTRPvVn11M1AWFVk1+UVmaqekupM1Jp5CaXfHRelCu4 l96N1+01MbIJM1sA1D6xn7wG6+Yrg38WZ4qv9MTPmKkTD4EavJmtQ2UTfEyWbmwizP 8J/3cquMnXwooCGZPMusZJDTgSXqHMqH5mTPpUgg+VHRWTEm8OkL9KDLLcDJfBbEOj 2vM7vEehToBXPRpBqA4vzv+MPsfdMXJVFVxKPCtmxPPrmtUomOXeqzm5RacUqX33LG mWhHDPQq1iIvw== Received: from alfajor (unknown [216.154.55.41]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 24FB81206C2; Sat, 20 Jun 2020 10:42:22 -0400 (EDT) From: Stefan Monnier To: Arthur Miller Cc: Richard Stallman , deng@randomsample.de, emacs-devel@gnu.org, joaotavora@gmail.com, dgutov@yandex.ru, eliz@gnu.org Subject: Re: Drop the Copyright Assignment requirement for Emacs Message-ID: References: <9mmFgzvrBwjt_n_VJyaJdXINraNi5HsGpwq-0MLeKiJA7kG2BQA4uywrzjyz7lpRS0OZDpjEi8lspOKYUA7P_QsODsDew_8nbH960G55fmY=@protonmail.com> <83v9l29yz3.fsf@gnu.org> <87o8qujs0p.fsf@randomsample> <83lfly9vvs.fsf@gnu.org> <835zd29rjb.fsf@gnu.org> <3c558381-f584-a2e5-972e-007221347f16@yandex.ru> <87tv0c2pxc.fsf@gmail.com> Date: Sat, 20 Jun 2020 10:42:20 -0400 In-Reply-To: (Arthur Miller's message of "Tue, 26 May 2020 07:42:34 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.087 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 10:42:24 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 14:42:30 -0000 > If people working for those companies or in activities involving such > hardware/software, say in some hospital, and would like to use Emacs (or > other GNU software) to develop possibly but non-necessary free or "open > source" applications to work with/alongside non-free what should they > do? I don't see any particular difficulty: just don't promote the proprietary software with which you need to work. Very often, you can mention its name without it being a promotion. Very often for the situations you talk a bout the software is sufficiently special-purposed that the name is both harmless and useless (harmless because mentioning it won't cause other people to try it out because they don't have the necessary equipment anyway, and useless because the probability that someone knows that software and reads your post is fairly low). And in case of doubt, you can skip the name (replace it with "that damned proprietary software" ;-) > Isn't it unnecessary hard on them to not be able to talk about > non-free software? Presumably they don't want to talk about that non-Free software but about the Free software that they are writing (and about the format of the data it has to manipulate: whether that data comes from or goes to a program that's proprietary or not is rather irrelevant). > Isn't it also a limitation on GNU software itself if it can't be used > in such cases as well as further inclination for development of > non-free software? I don't think there is such a limitation. Stefan From MAILER-DAEMON Sat Jun 20 11:22:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmfK8-0002gQ-JS for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 11:22:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34370) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmfK5-0002gB-VW for emacs-devel@gnu.org; Sat, 20 Jun 2020 11:22:26 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:40506) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmfK3-0002p8-Rh for emacs-devel@gnu.org; Sat, 20 Jun 2020 11:22:25 -0400 Received: by mail-wm1-x343.google.com with SMTP id r15so11630498wmh.5 for ; Sat, 20 Jun 2020 08:22:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=user-agent:from:to:subject:date:message-id:mime-version; bh=Z0xL7TMf82pklwN53xeJAXJcU1eFgsGwlfuAJDNELAI=; b=cln9RQ0Ans0PF/vzO6z07Qce57qfNdXadBSxOH+oZVo+2F4BDiuskAzn+0cknb0Q5k dEU6lTCqfC/530DxVyiZXk5C/mvGYZd/DrIZ+wPk4Dc/aAg+dtoMsftz3u1F3vH6PwE0 EQquYl4zSDVvGzd8N0NXe4PiVquqpQgmZyowT5eY+pKHhFyKKWZdpwSsmIvQ2VcVejL+ XfbwttHeEJAy497B8vX4pEfiHiilHxofk90VXogdUYKYBicPTces8y8VpdUDzeToOZTl HjkHckFfCqc3+SMnd1fOGEg0clhfmAB3AvwC71L+nHuM2R4P+vn3x7bg92He0M1/Phn4 vTBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:user-agent:from:to:subject:date:message-id :mime-version; bh=Z0xL7TMf82pklwN53xeJAXJcU1eFgsGwlfuAJDNELAI=; b=QSXwAHOiYXMLJpHujj0YYvKftXcX8PodNXiJrdnRcr2Th8k/pvMo4FNk9Wf+huutP2 qKt4f7BTMfoiei3Rtjvh5lseiPsPNxLcnaPXfSv6i4cy1O0R3oJOjvo1+ljC5ZcQAUk9 TfxqLoJo6K4hFmqThennbLE6pj2jexOMR8HK22WlIiRAnTfZgkX6s1IvQwVy7X6MkMVa RoW63J80sXVCabWxV+eROU3fJ0ZXVVoye/A0Sd5t76V+nNj46c9jzl26EwHTxLMeX+9C uSXHIpeJ14hZMEycPY9er5RwhN31pZOa3jVYqAsTE496V1Ex9I9PI+L3BuybXd1sWrvb zFJw== X-Gm-Message-State: AOAM533L3SZbJTneGnkFFdHDmTkKQHeH8oLKh0+OKx4ael6HICs/2B2t oN1YithWNm9OYpr/OuL5K7WZWYfO X-Google-Smtp-Source: ABdhPJw3RIiN/eBkQk7RNPzdC24trr3Gk764hQ9FaDIXktwokSln372X9cdRM8AFQGtRUNHy4ECPqg== X-Received: by 2002:a1c:cc07:: with SMTP id h7mr9121057wmb.179.1592666541627; Sat, 20 Jun 2020 08:22:21 -0700 (PDT) Received: from kyoncho-H87-D3H ([2a00:4802:28d:1200:fd29:64f8:d78d:722c]) by smtp.gmail.com with ESMTPSA id e25sm11610842wrc.69.2020.06.20.08.22.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jun 2020 08:22:21 -0700 (PDT) User-agent: mu4e 1.3.7; emacs 27.0.91 From: Ivan Yonchovski To: Michael Albinus , emacs-devel@gnu.org Subject: tramp and executable-find Date: Sat, 20 Jun 2020 18:22:19 +0300 Message-ID: <871rm9u5hw.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=yyoncho@gmail.com; helo=mail-wm1-x343.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 15:22:26 -0000 Hi Michael, As part of investigating https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that executable-find does not return the binary when it is not on the remote PATH(or at least this is what I see) even if you specify the full path to the binary. Can you comment if this is the expected behaviour? Thanks, Ivan From MAILER-DAEMON Sat Jun 20 11:41:49 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmfcq-0005jU-V7 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 11:41:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmfcp-0005jJ-OB for emacs-devel@gnu.org; Sat, 20 Jun 2020 11:41:48 -0400 Received: from forward106j.mail.yandex.net ([5.45.198.249]:50482) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmfcm-0006Wg-8u; Sat, 20 Jun 2020 11:41:47 -0400 Received: from mxback8o.mail.yandex.net (mxback8o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::22]) by forward106j.mail.yandex.net (Yandex) with ESMTP id 6ABBB11A0591; Sat, 20 Jun 2020 18:41:40 +0300 (MSK) Received: from sas1-e20a8b944cac.qloud-c.yandex.net (sas1-e20a8b944cac.qloud-c.yandex.net [2a02:6b8:c14:6696:0:640:e20a:8b94]) by mxback8o.mail.yandex.net (mxback/Yandex) with ESMTP id PB5zHgNo49-fdr8u7k1; Sat, 20 Jun 2020 18:41:40 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592667700; bh=k7R4NH/HqFyuP7qdFtJJPuzgPqhzEcI4An4MVGZnsR4=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=HjvvK7bqFFKY/EHhiSUT9iokYA2gYd+eeOiSVbgYNSbVftax/s6CFH4XHepb8FP6G afTP6b1bmjXuBrS5QaLxVq19BSbBSUHM3wHrkarGsoAx/JPTXJ3G8jH36yu8XhJ2ju brgfGsu70yJobAA5fvTBjV8G+avZHE1gKu9/+mWQ= Authentication-Results: mxback8o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas1-e20a8b944cac.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id KmjT0dCcdf-fcBmxV9Q; Sat, 20 Jun 2020 18:41:38 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sat, 20 Jun 2020 18:41:37 +0300 In-Reply-To: <83r1u9vnr3.fsf@gnu.org> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=5.45.198.249; envelope-from=hi-angel@yandex.ru; helo=forward106j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 11:41:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 15:41:48 -0000 On Sat, 2020-06-20 at 17:02 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > > stefan@marxist.se, emacs-devel@gnu.org > > Date: Sat, 20 Jun 2020 16:07:54 +0300 > > > > > There's no requirement to retroactively fix commit log messages when > > > files or functions are renamed. The renaming is recorded in the > > > history and can be found when one needs to explore the history of some > > > code fragment. > > > > > > What is important is that the log message names the files and > > > functions/macros/data structures as they are called at the time of the > > > commit, because the log message is many times read in conjunction with > > > the diffs. > > > > > > So I don't think the difficulties you describe are real. > > > > Are you saying that wrong commit messages are okay? > > Of course not. > > > Will it be okay if I make a > > v1 of a patch where just one function is changed, and then in v2 I > > additionally > > modify a dozen of others, and won't add their names to the commit message? > > Of course not. But you could omit the log messages completely in v1 > if it is known in advance that there will be a v2. IOW, the only log > message that really matters is the last one, the one that is going to > be committed to upstream. > > It's similar to documentation: it is perfectly acceptable to initially > post a patch without the documentation bits, saying you will provide > one when the code details are finalized. > > > Also, what you say here contradicts to your quote of GNU standard, which > > says > > the list is needed to generate Changelog files. Because not fixing commit > > messages retroactively will result in wrong Changelogs. > > > > What's the point in wrong Changelog files and wrong commit messages? > > We are miscommunicating. You have only a very specific scenario in > mind, whereas I was talking about something much more general. For > the situations you had in mind (IIUC), only the last variant of the > log messages matters. If you can get those log message right on the > first attempt, you can omit them in intermediate variants, and just > say you will provide them with the last version. (Of course, if you > don't get them right the first time, you will get review comments for > them, so it's up to you to decide whether indeed you can afford > omitting them from intermediate versions.) > > Also, let's face it: changesets where v2 renames many symbols present > in v1's log are rare. There's no need to make these rare cases sound > as if they were the rule: they are not. Please note that I haven't provided example here. From your text you seem to think I implied scenario where v1 is an RFC, and later patches are actual changes. It's not what I had in mind. I rather was thinking about making some change in v1, and then as result of code review making more similar changes to other places. As a real life example, while discussing the patch `Replace manually crafted hex regexes with [[:xdigit:]]`, more places where similar changes can be applied were uncovered. In code-refactoring I think it's pretty common to happen. You can't omit the list in v1 in these cases because you don't know there will be followups. > > Now let's get back to Emacs. I hope it's unquestionable that purpose of > > Emacs > > project is prosperity of Emacs project. It doesn't have explicit purpose to > > cater to Emacs contributors or developers. But if you ask "how can we make > > Emacs > > evolve and prosper", the "making Emacs contributors, developers and users > > comfortable" is hopefully an obvious answer. > > > > Having good developer practices is an implication of "making > > developers/contributors comfortable". Which includes, that if some developer > > practice (I'm pointing out here to the functions list) 1. carries burden on > > everyone, and 2. Makes happy only a few (perhaps, because of their habits or > > whatever), we should ditch this practice. > > We are not asking contributors to adhere to some arbitrary and > outlandish standards and practices, or something that satisfies only a > small group of people who usurped the power, so to say. These are > standards common to the GNU Project as a whole (although minor > variations do exist, and when I submit changes to, say, GDB, I need to > do that according to what GDB developers expect and require, not to > what I'm accustomed to in Emacs). These standards are the result of > quite a few discussions among developers of many GNU projects, where > arguments not unlike those you present are also voiced and considered. > The result is described in the GCS document, and it includes > rationale that also comes out of those discussions. > > IOW, it isn't like some band of people conquered the Emacs project and > now dictates its arbitrary demands to the community at large. These > requirements are the result of many discussions, and include the > summary experience and knowledge of many people who understand very > well that every additional requirement adds to the burden of the > contributors. > > Requirements for contributors are always a fine balancing act, whereby > too few or too many requirements will both produce sub-optimal results > for various reasons. So let's not pretend that dropping important > requirements to make it easy on contributors is the right solution, > because the requirements are there for a reason, and dropping any one > of them brings a disadvantage. We need to carefully weigh the > advantages and disadvantages of each requirement. Sounds reasonable. I'd like to see those discussions though to understand the background, and maybe even participate in them. Do you have any reference? > > > Here are the excerpts from the latest GNU Coding Standards manual I > > > mentioned above: > > > […snipped…] > > > > Thanks. I should say, it's a big text, half of which basically says "it's > > cool > > to have" which doesn't answer the question "why". So, I'm sorry if I missed > > some > > point while reading this, in this case pointing this out more explicitly > > might > > help. > > Actually, the reasons (a.k.a. "why") are presented there at least > twice: once indirectly, by explaining the general purpose of good > change log records, Err. Okay, I mean, text does explain it. Was I ever opposed to it? Let me repeat, I'm all for good commit messages. My point is the functions list is not necessary for having good commit messages. This whole thread is dedicated to "why having the list is necessary as opposed to not having it", and while text explains "why having the list is good" in general, but it does not make comparison to not using it. There's no answer to that question. > and then once more by providing specific > considerations for keeping the information we are talking about (names > of files and functions/macros/data structures that were modified) in > the log. Again, I don't see why just saying in commit message e.g. "Factor out code doing X out of all functions", is worse than additionally making the list of those functions (or is it a bad example, and you have a better one in mind? Great, I want to hear it!). > > The text then goes into details that generating Changelogs from a VCS alone > > may > > be unreliable. The example it shows can be reproduced on Emacs repo as > > follows: > > if you do `git log -1 -p 50a0126402d`, you'll see some renames, however the > > context above the hunk shows not the variable/function being renamed. > > > > I'd argue it would be way more productive to make git produce what Changelog > > files need correctly rather than forcing tedious manual work upon everybody. > > git > > already can recognize the context correctly, we just need a specific flag to > > only make it show changed functions/variables (ATM it seems not to have it, > > at > > least I didn't find one). > > I encourage you to talk to Git developers so that they improve this > capability. Not sure this is going to happen in practice (knowing how > the diffs are generated, and given that one GNU project using Git > after another sets up alternative tools for overcoming these > problems), but it definitely cannot harm, so by all means go for it. I might do it, but I need motivation. If I knew this is the only reason Emacs has requirement for the functions list, thus having such ability in git would allow to drop this requirement, I'd do it. Right now people seem to prefer to stick to having the list for other reasons (which are being discussed in the text above), so clearly even if git got such ability, it would be of little use to Emacs. From MAILER-DAEMON Sat Jun 20 12:11:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmg5F-0004aW-NE for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 12:11:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmg5F-0004aO-79 for emacs-devel@gnu.org; Sat, 20 Jun 2020 12:11:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40259) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmg5E-0001zc-8A; Sat, 20 Jun 2020 12:11:08 -0400 Received: from [176.228.60.248] (port=1956 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmg5C-0001WC-7D; Sat, 20 Jun 2020 12:11:07 -0400 Date: Sat, 20 Jun 2020 19:10:57 +0300 Message-Id: <83pn9tvhta.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> (message from Konstantin Kharlamov on Sat, 20 Jun 2020 18:41:37 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 16:11:09 -0000 > From: Konstantin Kharlamov > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > Date: Sat, 20 Jun 2020 18:41:37 +0300 > > > Also, let's face it: changesets where v2 renames many symbols present > > in v1's log are rare. There's no need to make these rare cases sound > > as if they were the rule: they are not. > > Please note that I haven't provided example here. From your text you seem to > think I implied scenario where v1 is an RFC, and later patches are actual > changes. Many times the first version of a patch is an implicit RFC, especially for a rare contributor who cannot be sure his or her ideas will be accepted by the developers. As another data point, I frequently post my proposed patches without log messages, because I believe people generally trust me to produce the right log messages when the time comes. > It's not what I had in mind. I rather was thinking about making some change in > v1, and then as result of code review making more similar changes to other > places. As a real life example, while discussing the patch `Replace manually > crafted hex regexes with [[:xdigit:]]`, more places where similar changes can be > applied were uncovered. > > In code-refactoring I think it's pretty common to happen. You can't omit the > list in v1 in these cases because you don't know there will be followups. Fair enough, but massive renames are still rare, IME, and thus the danger of having to completely rewrite the log messages is also small. > Sounds reasonable. I'd like to see those discussions though to understand the > background, and maybe even participate in them. Do you have any reference? They are scattered across different mailing lists (and across many months), but you can find many of them on bug-standard@gnu.org and on gnu-prog-discuss@gnu.org. > My point is the functions list is not necessary for having good > commit messages. Our experiences are different, then. I find them very important in at least some cases. > This whole thread is dedicated to "why having the list is necessary as opposed > to not having it", and while text explains "why having the list is good" in > general, but it does not make comparison to not using it. There's no answer to > that question. Isn't saying "A is good to have" the same as saying "not having A is not so good"? > Again, I don't see why just saying in commit message e.g. "Factor out code doing > X out of all functions", is worse than additionally making the list of those > functions (or is it a bad example, and you have a better one in mind? Great, I > want to hear it!). For repetitive mechanical changes, it might be okay. There's no argument that some changes don't need detailed lists. The argument is whether having them in general is helpful. If you are saying that in some cases they are redundant, then we agree at least in principle (though we could disagree in specific cases). But if you are saying they are seldom or never needed or useful, then I disagree, based on my experience. > > I encourage you to talk to Git developers so that they improve this > > capability. Not sure this is going to happen in practice (knowing how > > the diffs are generated, and given that one GNU project using Git > > after another sets up alternative tools for overcoming these > > problems), but it definitely cannot harm, so by all means go for it. > > I might do it, but I need motivation. If I knew this is the only reason Emacs > has requirement for the functions list, thus having such ability in git would > allow to drop this requirement, I'd do it. Right now people seem to prefer to > stick to having the list for other reasons (which are being discussed in the > text above), so clearly even if git got such ability, it would be of little use > to Emacs. It depends how good a job they do. If they do a perfect job, which will allow generating accurate ChangeLog-formatted entries without providing the lists of functions in the log messages, then we might indeed drop the requirement. From MAILER-DAEMON Sat Jun 20 12:47:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmgen-0000Fi-U6 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 12:47:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmgem-0000FZ-BM for emacs-devel@gnu.org; Sat, 20 Jun 2020 12:47:52 -0400 Received: from mout.gmx.net ([212.227.17.21]:53439) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmgek-0007W4-63 for emacs-devel@gnu.org; Sat, 20 Jun 2020 12:47:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592671665; bh=yhd+VE5GG4c3xPe7bEN02RcJXFeHWnyBNUkenPGsE1Q=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=JSmefNOr221l8wQVex7emfJim6es/lKmj9pyIyYm1t2OVuCxVolcvZlj+LIIbdgHQ qs8dOmIrP210uCvTgaToksnt380/s4gOVhanT4Q3CrG5CwaBWJhDcmoedt7ADQeZ3s SgRDC85968ClQ/oJl3kvaPPLbnfHTe0/14Q8AGWk= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([213.220.148.8]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MAfUe-1jbe1p2zY8-00B5KH; Sat, 20 Jun 2020 18:47:45 +0200 From: Michael Albinus To: Ivan Yonchovski Cc: emacs-devel@gnu.org Subject: Re: tramp and executable-find References: <871rm9u5hw.fsf@gmail.com> Date: Sat, 20 Jun 2020 18:47:44 +0200 In-Reply-To: <871rm9u5hw.fsf@gmail.com> (Ivan Yonchovski's message of "Sat, 20 Jun 2020 18:22:19 +0300") Message-ID: <87blldzntb.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:Nap+91F3XIYtMZ2KLt4Ul05ErHnKpw8KcX8+m4XCMP3K+Ok01P5 Ye0/wy33WDoS1+tazfRdgjWeYujWyP1H23Q9lyZFq7aFAiZNvI0PJFHGyfE/3mnAEL7VCkG sBTV0AzROfUl/EqhJpb5Oa+AKjAWOBxsDLOrFrj/enK/0yqTadvu5XXowP5V6W/zsnsbl1E IFcP4iyfq4zyw9cMBefHA== X-UI-Out-Filterresults: notjunk:1;V03:K0:7S4wBLYmfu4=:lE3x9xI8DktaxNPJJD7Nyf IDZobzKqoKk142leH2kq6X9ewT2scvlUgRQLFtvur8x4siASu0GZVF2reFWuDZmvDXiHYDUbS sVKBmLic/dLGlTJbNTs3tyg0V00cl8YtiXCJ8dzhlRFRQzyWMH94ePG9okz8EdBTqZArqiekL ijdAkJOfKR9cxH1Oh6cYVAtFEpQmQh7xsuzeydOPkxhXDnFtdPR1Nl5OBW/ITq6rLWYvnpWEz 3c6qFGpHZ+LHRRc7eBcHYoky8cjOwBadE03fHr08vsq0TSbffpafYCz5e5DMuZ9tLj7tgtruH VkWh8sDkBGXFCOTN/P13opo0aaOulk8+Uybh4tLE4/3aUeodmiUO0K+KbU9ZU7fKJqAyOg0Pd QQ133Jt036kJYjtCKdK9hgc2Vk/myKOnw7oq9U0A5q+CNMlwwab+er3LZSK6XBybkFvuuvUOc n8KTZVJm8Dsx9IbVfedzFt5u7AZu/0ssb43bWuWIUAed4HNo27vU5R/WJ6UkHHB97Rj+5dEVt iolONY/AfwlkovGCybB/z+XyBiLJwfRsQVUWBbY+wEMVroS85rVoNF+38rghD4Bdg/7MxCuZV TM4tSR8xPYMkS3gBrV77XasHLnPSTXKI0uqnbsk7p7yve707p0UhoxxkzkwaYTcSVC+KY+d51 yPJVya7Fw94yXnKTi9JY6jxc8MW74JcmcKoHx33KDp16TMSJK3E7FOVbFXmyR++O5CkT51MWu 2150I/I9ewzbQOa2bP45mFjZuOiLSzR/k/arC1wf6+3wKAQLtVvz9Fn+TQ664oltl1rdOezbH hUs7++xRhflgT1TMjPzIuE2otNY09d2n1rxXBQ0sevRYzKuTFdgTihOTlJrmh63RFfURrP+PZ 2X1pHn5+hjl6YpMPaHo0DdrSNCRJFYwl60mHc1DhRGZntZIjzQ9c+QYGOa3Ap+7RAnZWmYYty 5oZTm4Toee5wXBcKcvttP/Qr7gGFZe5f0E5pYhp/JiPoULs6oXjifvEErUk7ZwsJDGAccv0VF +E6jfWL7bhagxQAZOvfgf/cvqi8xCtgW0gSSeMwqyA53X0898dSgSe6eL0X24CgPt6mM4uYYU iNi3c3tdY5UUFYQnYw4tlwGI9T2+cjiWqlclX0cB/KpyVf5URGPTqSrERjc4e6r8jscdvvd2i wnrYSipLgLjRx8rEgfufww+ZhvrIexj2PpAbmRsoP6YNfBuBQxn4JuAcCDyuJElizGbxczWU7 GTY2bWHFmGuMbQEiv Received-SPF: pass client-ip=212.227.17.21; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 12:47:46 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 16:47:52 -0000 Ivan Yonchovski writes: > Hi Michael, Hi Ivan > As part of investigating > https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that > executable-find does not return the binary when it is not on the remote > PATH(or at least this is what I see) even if you specify the full path > to the binary. Can you comment if this is the expected behaviour? `executable-find' is not designed to be supported by a file name handler like Tramp. It will always check for binaries on the local host. > Thanks, > Ivan Best regards, Michael. From MAILER-DAEMON Sat Jun 20 13:00:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmgrD-0007Jo-Nk for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 13:00:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmgrB-0007C0-0l for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:00:41 -0400 Received: from mail-oo1-xc43.google.com ([2607:f8b0:4864:20::c43]:38118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmgr6-0000ww-9A for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:00:40 -0400 Received: by mail-oo1-xc43.google.com with SMTP id f2so2526523ooo.5 for ; Sat, 20 Jun 2020 10:00:34 -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 :cc; bh=zv0qgmMLejKN/36q7ZPqpXtkuQLc2zvJwjgskzdu+0A=; b=gZntQTlavSwqOQRyQ5giSc8KAGAq+Lz2N3Q70qdkx41kSyCPvpmD5ZthCglzYY3b0b gWoImbzjwUx+LpcNswaGePsuSiQvsaSOYHwOG0UWLz67ZGFmzD2TQ27ctU2GpD08xt/y WpiYnDw0Mnn/FLFxMUFwEK88YSrc8KajqDfi0/O9HYyVL+XHYxGKEodfiusXvUHlgHVP JdJK4YN2uT+wjjr9VUEelY5wy9HAA0Rv/IDeS4BVWWKiq06t5G/xoKp6ksbpfg4E4+Fk Xc5/SkGY23b235ca1J0NiNsBZVcyhOcmiPWSjmybzSqeMVjcAVB7EYykRi4OzlXhk0vw w0cg== 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:cc; bh=zv0qgmMLejKN/36q7ZPqpXtkuQLc2zvJwjgskzdu+0A=; b=R7fwR4iiHFuQZv9KJDF0iZBWxJ9Q7Ml6/TX+vVMzokO243YTAp7tw0qDSmDIN7uvKb WPH8vZthS4rXEaGdvhkVJvCwBZ4yhU4r/4kzJsGhN6mydfSHfFzuOX7HSvGE/Q3HoV0o 0TgFvMGA+dOhPYw3am2Qvp82kdn3vfRbXqc/BX3d7risTSwU+vr4BkBMoVj6wgZJkFAu IeyjwTZseccZVrYiDw9AmrV3qUmp9fHwyf29AdNAEC0MjJ8RuXFfKMfUsXnIylFU+kMr w2p3yHPY9N4t8uq6mK4SPNvHnTlA+kdI7SGjDoaCnDHR+nMDl8n6wCgtaXM2fekFLX4o vMWg== X-Gm-Message-State: AOAM531wsdU7+mez6/cigQ09GE2dv/q4gyE1SOQ2WyXJMJEXjQBjbmuR EFvcMTWVtflaP6P3ApLjrVTNcgHjFDLh/ITjkFs= X-Google-Smtp-Source: ABdhPJzT9KlIUfq9RCycre3PBsnRXO/SPVovfjLPRRudQijRVBf0DuvXnaXoU8dXIkQrWd3D8fvhYA0NrKTr/ewwBx8= X-Received: by 2002:a4a:d1ac:: with SMTP id z12mr8102693oor.60.1592672433593; Sat, 20 Jun 2020 10:00:33 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> In-Reply-To: <87blldzntb.fsf@gmx.de> From: Philipp Stephani Date: Sat, 20 Jun 2020 19:00:22 +0200 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: Ivan Yonchovski , Emacs developers Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::c43; envelope-from=p.stephani2@gmail.com; helo=mail-oo1-xc43.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 17:00:41 -0000 Am Sa., 20. Juni 2020 um 18:49 Uhr schrieb Michael Albinus : > > Ivan Yonchovski writes: > > > Hi Michael, > > Hi Ivan > > > As part of investigating > > https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that > > executable-find does not return the binary when it is not on the remote > > PATH(or at least this is what I see) even if you specify the full path > > to the binary. Can you comment if this is the expected behaviour? > > `executable-find' is not designed to be supported by a file name handler > like Tramp. It will always check for binaries on the local host. > Starting with Emacs 27, it takes an optional REMOTE argument to check on the remote host. It doesn't have its own file name handler, though; it rather relies on the file name handler for `exec-path'. From MAILER-DAEMON Sat Jun 20 13:08:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmgyc-0004Ka-Fx for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 13:08:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmgyb-0004KT-Lj for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:08:21 -0400 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]:36267) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmgyZ-0001nH-Fv for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:08:21 -0400 Received: by mail-lf1-x12a.google.com with SMTP id c21so7312677lfb.3 for ; Sat, 20 Jun 2020 10:08: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 :cc; bh=AbxElt3xts01dZhdTHGr2dA0nyUF1ipGs3mOxbLrEJI=; b=DK9Q+0GB9zJQQNeCiORlWUcGBAcKcKQummUXPRMKzCe1fqu3EwTIfxbfaaLjxgx8rV rAqknxdwPH9V2cusihR4l8bloUfLhhVpexO/BdDHX45oatXfMvCxHhdVnmzgHWQTcoWI COQPuGKbgcj5qyohuPNfBprpfbsFKbIxfkEoB9vC7xQNDWLEjsR7oXzhSt1AOnNkqwwp nszhYV4aocNYwLxIJRsGoBUcIvel+DxqMN4qcyJR3S0ltdba7lMC/p1KqBNRy6eutBOf nzWvsQx4ZkEb/rxH3u98HCCyYETOBnmBAGuHcn3g/fKMsCBkHbUBWM710fr0woGCm8EJ EZRw== 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:cc; bh=AbxElt3xts01dZhdTHGr2dA0nyUF1ipGs3mOxbLrEJI=; b=pv8EwHQqpYmqt0sZdsXc8E1y44NsuFqWhI3rpnJdjp9z7a/25QXkfcbVteeFZq59Es Zuu6ghKG/Ka+kFWZ6864dyiIzW+qiIpa7lpCHUxZJS2ZbbBV+LBoeWKGEwTwuX6wbAvo Ol2xZDlYJesWPrtXtfUdJhldP6Jd5kKXyAcTYY9nHPbtZlrpmtzLcCLmL3dakHW/JAyj zbXwrYDhNJ8RhLl4uY/uov1vkyA1MCwFKJVfyIF7z2QrPi49a09/1KtPksF8N9qAhHGo ryk3MSv/W0qgBV8ZX+QDAxNAcTrBS1PEp1Fwce7/8u5lpyDn1mMStcsVLkxJchlxROkf IYJQ== X-Gm-Message-State: AOAM531QVfIgeWme6qe0RZu72Zfa0mYqQurkwOflvVPXANLOokmHAkGv /1B2RW2DDqm/OAAMLqeATennDCyD42ygZL+s0jI= X-Google-Smtp-Source: ABdhPJw+PSV1JYXzW8LqhV1GXmm9qQ/R5/JwDsRSpVxNfdFiufpkPeSsivaBAFT8IkHQPJqMdNihMU8AZZuZ0vIJ3S0= X-Received: by 2002:a19:e346:: with SMTP id c6mr5128256lfk.177.1592672897641; Sat, 20 Jun 2020 10:08:17 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> In-Reply-To: <87blldzntb.fsf@gmx.de> From: yyoncho Date: Sat, 20 Jun 2020 20:08:06 +0300 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: emacs-devel Content-Type: multipart/alternative; boundary="0000000000004eaf6405a8870e70" Received-SPF: pass client-ip=2a00:1450:4864:20::12a; envelope-from=yyoncho@gmail.com; helo=mail-lf1-x12a.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 17:08:21 -0000 --0000000000004eaf6405a8870e70 Content-Type: text/plain; charset="UTF-8" Hi Michael, Can you comment on remote flag mentioned by Philip as well? Here it is the docs for it: REMOTE is non-nil, search on the remote host indicated by `default-directory' instead. Thanks, Ivan On Sat, Jun 20, 2020 at 7:47 PM Michael Albinus wrote: > Ivan Yonchovski writes: > > > Hi Michael, > > Hi Ivan > > > As part of investigating > > https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that > > executable-find does not return the binary when it is not on the remote > > PATH(or at least this is what I see) even if you specify the full path > > to the binary. Can you comment if this is the expected behaviour? > > `executable-find' is not designed to be supported by a file name handler > like Tramp. It will always check for binaries on the local host. > > > Thanks, > > Ivan > > Best regards, Michael. > --0000000000004eaf6405a8870e70 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Michael,

Can you comment on remote f= lag mentioned by Philip as well?=C2=A0

Here it is = the docs for it:

REMOTE is non-nil, search on the = remote host indicated by
`default-directory' instead.
=
Thanks,
Ivan

On Sat, Jun 20, 2020 at 7:47 PM = Michael Albinus <michael.albin= us@gmx.de> wrote:
Ivan Yonchovski <yyoncho@gmail.com> writes:

> Hi Michael,

Hi Ivan

> As part of investigating
> https://github.com/emacs-lsp/lsp-mode/issues/1= 688 I noticed that
> executable-find does not return the binary when it is not on the remot= e
> PATH(or at least this is what I see) even if you specify the full path=
> to the binary. Can you comment if this is the expected behaviour?

`executable-find' is not designed to be supported by a file name handle= r
like Tramp. It will always check for binaries on the local host.

> Thanks,
> Ivan

Best regards, Michael.
--0000000000004eaf6405a8870e70-- From MAILER-DAEMON Sat Jun 20 13:43:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmhWP-0001Ny-IV for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 13:43:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmhWM-0001Fb-7m for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:43:14 -0400 Received: from mout.gmx.net ([212.227.17.22]:50255) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmhWK-0006jN-2W for emacs-devel@gnu.org; Sat, 20 Jun 2020 13:43:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592674990; bh=ZFJGrNYqTHESsTx+fh9A/jqrb/BNhdoc9pIPGWsfC/s=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=AHWKmMnwn08x6HtE4NpYezdrs1yvHn3EZ87DyBBteIpYKUkxDuSJg4r3dtLsp8Xal q9aeCKcRgFXIrsC9bCxg30LOA4C63WgLu0/jrEiJFt61BY4P3Kia9h/n3GsPMjWRxf yNG/Ygta21WheQhsvXfQ3bU3YJKz9HdAhTinlEYs= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([213.220.148.8]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M4s0t-1jlKTS3ltH-0020ka; Sat, 20 Jun 2020 19:43:10 +0200 From: Michael Albinus To: yyoncho Cc: emacs-devel Subject: Re: tramp and executable-find References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> Date: Sat, 20 Jun 2020 19:43:09 +0200 In-Reply-To: (yyoncho@gmail.com's message of "Sat, 20 Jun 2020 20:08:06 +0300") Message-ID: <877dw1zl8y.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:MN+WJE0BhAk2cr6MNzJhyJ24YtWWnWwTbSYi8z7MyY+EbymwVR/ bukWevF522s5gHEFJ3HWOTNfl5vRAvDWxJKG/f+gxxS7L0kpWmPGJh49C7MjIGLlSu6dRlA oxBTUDIysGs5pUv2mAai2U3p4cEuroZ3IoI2KbBnekZJnbqWeYkkRcU9hcjKo7T4sHEI4kN +RWcNvvsiR5376OCK9cXA== X-UI-Out-Filterresults: notjunk:1;V03:K0:z4TsyOuYFx4=:fqlr4mFMsJOd5CiuD1qZ/y kQrWOaQzAaRqtcRDiXPqHKbZT9KT8arNd4B/RurlvlwfSh+B4r+0FT2CFTmYuXRS2e7ACHJJu bVhZ68CXpY1CpTvs5S72u6dWrC/X3mk7X6+11cjyQpM6wSqJBKP4khQlAsps3sSqLdbszc88j PxrGiWMktd/lum01zG2iz8IR7n5ZR//GQ+2e5D6+UtCJKMy/wuLhdWg3ycqkNmyq21siPac4H ZJeqdLk6ENWDZCsb7ULwUNWw2MIJokK9xz7RUN1v3pwCT0SsNcdEhghZyk/rjftpbsbiihj6x fDS8pnO5jhFJQefe0ZudwMfT4zeVB3VMe6E4g5XVPxSQwoJ0J3FNv7yGPxO3zjkhyvFIvS1Z2 fjwg9zqTd1YIilZwqhumTZlEd//cDjnxmKlx3A0Gt59CUaAX1w/rwqc5SLClEL37CTH9EYUwc ipldeWpd/Xb0GSoSO6N1b0udERQ4ANqKfoRIMAvchHzO/7YPV38k7dmrz4No4MyXHt4waZMRq XA7/xVktJ9vWmtGpTvIo550IIAVFvbLjZCaobIeMunHuWLgjrNjJeQRB/e+YsjcpncSebMp+C aB/UfSaT/sO69cVyxLYfgp1DQNLkclbMlWwJZHKY/SgrI5m6ibV7uKQwu7+/nDLVwDfpfskhy byyeUjiVUzmiy6kDe4htFSBS3toh2YGu0cpqDCHaC9Xz9g9CM+lnNWVd1NWQtGJs8JDDuosIy qoTLQeIr4LRshKl+F5Xn2R2rKqfFP73mQUFElre/NgNoZDZN4olWEJVlgLAGKkLW054mUIY4s m8np3AIfp62XLPaoSynWoeK8mGGmb5fio/PKn95ku0BLsZW3AeIS7IbAA1CecfllCuYvcm5Om 4fX2wiPtVoffhw7stHCL+I/IAQ5Q5auSXO/9Ku5fkUkCBg2Y0W9lkBcxXnfxgWWCbpGxiUieJ 0dWpb7bRl+UGtQ+/DAChQNE8OV5wkSTXPXCCSxHZhs9MF3dZFYVDoBwtrbsIzHV/OAOJFqwxO N7T3vjiwypAprs4VBHeUfjdCqnyXRtmeYFkMwMCZrNscd/AECAiRQPPw3DpnpPM/VzkAv9Fug zMNAmcdE3keTvxInT1boEV0JfSMt7H3a+glujd4pz+B7Buf5ar9qnxVT+XxMhx+ioDVpw3tjs xWt3L1/8dWr908wkBnetTci2iGpdgny8H60lgpYTq41yotwQ63Qpcy2i334g9cNYlAaFKhA9E 6GrkGB2qXaf6MYxA6 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=212.227.17.22; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 13:43:10 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 17:43:14 -0000 yyoncho writes: > Hi Michael, Hi Ivan, > Can you comment on remote flag mentioned by Philip as well? > > Here it is the docs for it: > > REMOTE is non-nil, search on the remote host indicated by > `default-directory' instead. Right, I forgot this. Sorry. So let's go back to your question: >> As part of investigating >> https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that >> executable-find does not return the binary when it is not on the >> remote PATH(or at least this is what I see) even if you specify the >> full path to the binary. Can you comment if this is the expected >> behaviour? The crucial point is `default-directory'. In my local environment, I have for example =2D-8<---------------cut here---------------start------------->8--- (let ((default-directory "/tmp")) (executable-find "emacs")) "/usr/local/bin/emacs" (let ((default-directory "/tmp")) (executable-find "emacs" 'remote)) "/usr/local/bin/emacs" (let ((default-directory "/ssh:ford:")) (executable-find "emacs")) "/usr/local/bin/emacs" (let ((default-directory "/ssh:ford:")) (executable-find "emacs" 'remote)) "/opt/bin/emacs" =2D-8<---------------cut here---------------end--------------->8--- You get the remote path only if `default-directory' is a remote file name, and the REMOTE argument of `executable-find' is non-nil. And this is understandable: if `default-directory' is not a remote file name, `executable-find' does not know which remote host it shall use for search. > Thanks, > Ivan Best regards, Michael. From MAILER-DAEMON Sat Jun 20 14:04:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmhr8-0006A4-61 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 14:04:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmhr5-00069p-Ee for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:04:39 -0400 Received: from forward103o.mail.yandex.net ([2a02:6b8:0:1a2d::606]:38258) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmhr1-0001QH-Kh; Sat, 20 Jun 2020 14:04:39 -0400 Received: from mxback8j.mail.yandex.net (mxback8j.mail.yandex.net [IPv6:2a02:6b8:0:1619::111]) by forward103o.mail.yandex.net (Yandex) with ESMTP id EF1C15F80503; Sat, 20 Jun 2020 21:04:25 +0300 (MSK) Received: from iva3-dd2bb2ff2b5f.qloud-c.yandex.net (iva3-dd2bb2ff2b5f.qloud-c.yandex.net [2a02:6b8:c0c:7611:0:640:dd2b:b2ff]) by mxback8j.mail.yandex.net (mxback/Yandex) with ESMTP id qyYpxGZcZs-4PUiR8YZ; Sat, 20 Jun 2020 21:04:25 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592676265; bh=E7ShPnKbJa++1rVeqmdy9741phyWp+XwvcbXMCEir84=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=w620Pyz8KL5h6HSOWzXpjVSqoAt+SilwpJxT9vMeM6TiT9hnWiVQj3P39rTWBQpg6 G80VpL72MvjwrVLeNKbM1SPTjrVsj6YTQHK1j7uAqCj1rZzCr+9Z/X6bnPrAg2XnnS Ad400fo8EDM16Pn9zc5kgjcENT4kf8ba6YxZweo0= Authentication-Results: mxback8j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by iva3-dd2bb2ff2b5f.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id 56DnCMWTD3-4OlKBBEE; Sat, 20 Jun 2020 21:04:24 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sat, 20 Jun 2020 21:04:23 +0300 In-Reply-To: <83pn9tvhta.fsf@gnu.org> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::606; envelope-from=hi-angel@yandex.ru; helo=forward103o.mail.yandex.net 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 18:04:40 -0000 On Sat, 2020-06-20 at 19:10 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Sounds reasonable. I'd like to see those discussions though to understand > > the > > background, and maybe even participate in them. Do you have any reference? > > They are scattered across different mailing lists (and across many > months), but you can find many of them on bug-standard@gnu.org and on > gnu-prog-discuss@gnu.org. Thanks, I'll look at it. > > My point is the functions list is not necessary for having good > > commit messages. > > Our experiences are different, then. I find them very important in at > least some cases. Right. I should mention though, my experience is not specific to myself. Most non-GNU projects (actually, all I have seen) don't require having the list, but do require good commit messages. Peter Hutterer, a libinput and kernel HID subsystem maintainer wrote a good blog-post in 2009 on commit messages, and this too did not include having the list http://who-t.blogspot.com/2009/12/on-commit-messages.html I also don't think GNU projects are any good to make examples of. This is my general experience of seeing how new projects get under GNU umbrella to get never heard of (which I attribute to points listed in my starting mail, since most of them are unspecific to Emacs). But to support this claim regarding GNU, I just did some experiment. I downloaded git repositories of GNU GCC and Clang, and tried to count contributors to last 500 commits. I was interested in seeing the number of occasional contributors. I think that if a project only lives by means of maintainers and paid people, the project pretty much goes down. Maintainers may burn out, paid people will move on. Number of occasional contributors shows how big interest in supporting the development, and they're the ones who at some point may become maintainers too. So, I looked at "author email" fields and removed ones with email addresses that are either clearly corporate or clearly maintainers. Not the most scientific method, I might have missed a few ones who contributed from their personal email, but I don't expect the difference to be statistically significant. So, the command is (I hope my email client won't break it terribly): git log -500 --format="%ae" | grep -vP "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huawei|c odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|micros oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproject|si five)\.(org|com|de|cz|cn)" | sort -u | wc -l Results are: * GCC as of commit 445d8da5fbd: 15 * Clang as of commit 7b201bfcac2: 49 This is some pretty big difference! If I expand the commits range, the difference increases further. > > This whole thread is dedicated to "why having the list is necessary as > > opposed > > to not having it", and while text explains "why having the list is good" in > > general, but it does not make comparison to not using it. There's no answer > > to > > that question. > > Isn't saying "A is good to have" the same as saying "not having A is > not so good"? It depends. If A is free, then sure. But if I gotta pay for A, then I'd consider my options. > > Again, I don't see why just saying in commit message e.g. "Factor out code > > doing > > X out of all functions", is worse than additionally making the list of those > > functions (or is it a bad example, and you have a better one in mind? Great, > > I > > want to hear it!). > > For repetitive mechanical changes, it might be okay. There's no > argument that some changes don't need detailed lists. The argument is > whether having them in general is helpful. If you are saying that in > some cases they are redundant, then we agree at least in principle > (though we could disagree in specific cases). But if you are saying > they are seldom or never needed or useful, then I disagree, based on > my experience. > > > > I encourage you to talk to Git developers so that they improve this > > > capability. Not sure this is going to happen in practice (knowing how > > > the diffs are generated, and given that one GNU project using Git > > > after another sets up alternative tools for overcoming these > > > problems), but it definitely cannot harm, so by all means go for it. > > > > I might do it, but I need motivation. If I knew this is the only reason > > Emacs > > has requirement for the functions list, thus having such ability in git > > would > > allow to drop this requirement, I'd do it. Right now people seem to prefer > > to > > stick to having the list for other reasons (which are being discussed in the > > text above), so clearly even if git got such ability, it would be of little > > use > > to Emacs. > > It depends how good a job they do. If they do a perfect job, which > will allow generating accurate ChangeLog-formatted entries without > providing the lists of functions in the log messages, then we might > indeed drop the requirement. Okay, I'll ask about it. From MAILER-DAEMON Sat Jun 20 14:23:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmi9K-00082F-TJ for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 14:23:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmi9J-000826-TI for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:23:29 -0400 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]:45735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmi9I-00045V-3D for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:23:29 -0400 Received: by mail-lj1-x22f.google.com with SMTP id i27so14992500ljb.12 for ; Sat, 20 Jun 2020 11:23:27 -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 :cc; bh=90Gc/FwYFt2VTPoqa2PDLYdZvaloK1/ouUqA9jcvgxQ=; b=ARjZaJEleM5Kc3BCm8plZpDvssLb8Hh5OAQaFxEZSZ72NHoY0E6IlObKRYw1bpQtbi FiXtBGcy0heRyG7yxxLpwyrtrINBEANCb4+lxQIKP6dfBxoVls4hs8RxtseJybwTgVMc 2mJoVavL25V5WfH472dY7fZhCn3E7v1VFMwGLiS3NsMbcHLqOp1R+qLdQ7Eytiz6MMS0 BSXRGQgJ6b+thPV7KQZU4ORc2buCrl9Pke2FMvPgdLXc2nil6R3NiHIoLAN73m0bT3Eg lb2IOUcysneGsHtp2/Ce85F8BUPMqsGtScbJrNOym/yRG1aCJNarWNlRn4XDCIQCWpKr cVRw== 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:cc; bh=90Gc/FwYFt2VTPoqa2PDLYdZvaloK1/ouUqA9jcvgxQ=; b=LwRJ32EPXVCmGsiRMfCKaHuZ4/6yVNIiJqT13Joz2tkBpAacHmDyiApWT2sb5yC/HH Ez4pOxOZSPmPnPj8OSo4QAZbjXxrQ2R659WvNKk2Qa10CVwFfh3OX5kPl75BSrGa6oxB CgGrwWlR8IX48BZdMQDkJNVkVICHxc4Gmnutj60NVSdFfwZMTPDxRu+dA6w4W22GPPdu 9yKttqOmdh3VcK9vx3QzspK1lv4/9k46rfzqwt4rZDBr4P9v9aexqRr8942QP4WgCnkw gp9GX883Gz62jpYMBiVZjf1kyCZoeklmngx6my1EA9PJ2eWZ3fiYicAhXKaZWwzCygYj swiQ== X-Gm-Message-State: AOAM531AivUPOD0q23INVgEQpIsHGHyYtnVP1lstcFsDhPnBkQloohJa AJppTE44ItumCajVmFmU6eDckDK0/k6LcwUrhlg= X-Google-Smtp-Source: ABdhPJzQOyN2iltfj+D9tZYEVaRz6PVXeqNdtWqcQ8lAnECKIW1Wapf98jO9fPdySLnhZ+EM2paNxT7bKYUUWHdWZe8= X-Received: by 2002:a2e:571b:: with SMTP id l27mr4931077ljb.308.1592677406305; Sat, 20 Jun 2020 11:23:26 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> In-Reply-To: <877dw1zl8y.fsf@gmx.de> From: yyoncho Date: Sat, 20 Jun 2020 21:23:15 +0300 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: emacs-devel Content-Type: multipart/alternative; boundary="0000000000000b6fc905a8881b08" Received-SPF: pass client-ip=2a00:1450:4864:20::22f; envelope-from=yyoncho@gmail.com; helo=mail-lj1-x22f.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 18:23:30 -0000 --0000000000000b6fc905a8881b08 Content-Type: text/plain; charset="UTF-8" Hi Michael, The examples that do not work on my side are when using a full file path when the binary is not on remote PATH. Thanks, Ivan On Sat, Jun 20, 2020 at 8:43 PM Michael Albinus wrote: > yyoncho writes: > > > Hi Michael, > > Hi Ivan, > > > Can you comment on remote flag mentioned by Philip as well? > > > > Here it is the docs for it: > > > > REMOTE is non-nil, search on the remote host indicated by > > `default-directory' instead. > > Right, I forgot this. Sorry. So let's go back to your question: > > >> As part of investigating > >> https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that > >> executable-find does not return the binary when it is not on the > >> remote PATH(or at least this is what I see) even if you specify the > >> full path to the binary. Can you comment if this is the expected > >> behaviour? > > The crucial point is `default-directory'. In my local environment, I > have for example > > --8<---------------cut here---------------start------------->8--- > (let ((default-directory "/tmp")) > (executable-find "emacs")) > "/usr/local/bin/emacs" > > (let ((default-directory "/tmp")) > (executable-find "emacs" 'remote)) > "/usr/local/bin/emacs" > > (let ((default-directory "/ssh:ford:")) > (executable-find "emacs")) > "/usr/local/bin/emacs" > > (let ((default-directory "/ssh:ford:")) > (executable-find "emacs" 'remote)) > "/opt/bin/emacs" > --8<---------------cut here---------------end--------------->8--- > > You get the remote path only if `default-directory' is a remote file > name, and the REMOTE argument of `executable-find' is non-nil. And this > is understandable: if `default-directory' is not a remote file name, > `executable-find' does not know which remote host it shall use for search. > > > Thanks, > > Ivan > > Best regards, Michael. > --0000000000000b6fc905a8881b08 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Michael,

The examples that do not wo= rk on my side are when using a full
file path when the binary is = not on remote PATH.

Thanks,
Ivan

On= Sat, Jun 20, 2020 at 8:43 PM Michael Albinus <michael.albinus@gmx.de> wrote:
yyoncho <yyoncho@gmail.com> writes:

> Hi Michael,

Hi Ivan,

> Can you comment on remote flag mentioned by Philip as well?
>
> Here it is the docs for it:
>
> REMOTE is non-nil, search on the remote host indicated by
> `default-directory' instead.

Right, I forgot this. Sorry. So let's go back to your question:

>> As part of investigating
>> https://github.com/emacs-lsp/lsp-mode/iss= ues/1688 I noticed that
>> executable-find does not return the binary when it is not on the >> remote PATH(or at least this is what I see) even if you specify th= e
>> full path to the binary. Can you comment if this is the expected >> behaviour?

The crucial point is `default-directory'. In my local environment, I have for example

--8<---------------cut here---------------start------------->8---
(let ((default-directory "/tmp"))
=C2=A0 (executable-find "emacs"))
"/usr/local/bin/emacs"

(let ((default-directory "/tmp"))
=C2=A0 (executable-find "emacs" 'remote))
"/usr/local/bin/emacs"

(let ((default-directory "/ssh:ford:"))
=C2=A0 (executable-find "emacs"))
"/usr/local/bin/emacs"

(let ((default-directory "/ssh:ford:"))
=C2=A0 (executable-find "emacs" 'remote))
"/opt/bin/emacs"
--8<---------------cut here---------------end--------------->8---

You get the remote path only if `default-directory' is a remote file name, and the REMOTE argument of `executable-find' is non-nil. And this=
is understandable: if `default-directory' is not a remote file name, `executable-find' does not know which remote host it shall use for sear= ch.

> Thanks,
> Ivan

Best regards, Michael.
--0000000000000b6fc905a8881b08-- From MAILER-DAEMON Sat Jun 20 14:27:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmiDa-0002fU-GL for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 14:27:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmiDZ-0002fM-KI for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:27:53 -0400 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]:37298) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmiDX-0004h7-Q8 for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:27:53 -0400 Received: by mail-lj1-x22b.google.com with SMTP id e4so15044830ljn.4 for ; Sat, 20 Jun 2020 11:27:51 -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 :cc; bh=IRTSR6McxkbqEndWZSY4WnxRQfbHfxD/L8L99+nP9Cg=; b=DUQSS2I6YIHxRO7DhW8/MZ6ZjyCCEat3ZjjTO/HOA0cno4J/bhpRje5Q92K7OGJ5/h xK9DmAU2yv1dSlYYIkmXR5IKxOB4sTYSeQ5qDhgYcHNBzIlYAEsr1+YC3LWUMD2ydip7 +0HqEQh02fUEh3BCm54ZI7Tn9b8Tc8XZP/OpSFSPttEyZkvjAbZwnAFpu3OWCbBmzARf 0IaLSaJblr8NwaO66ohOvBRH6hzhghav0g856wCQ+wI/3TLhwu5dm2ZKSv0HGBIvjnyV c23bsMSBDYGNztx1sy/seA7KuDzhrTovDkO6Oa/dxDdTDDdbgDlPAjGUCO1dCJujScrm ezfw== 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:cc; bh=IRTSR6McxkbqEndWZSY4WnxRQfbHfxD/L8L99+nP9Cg=; b=mgkrhP7wurS35AMSROniq0Jii/Mdh3fgegn8mZTgBODlSSgAJjWA7N5+eHIiwxSxcs LP1CASC48B7I7V7XaNiqOtO7Nr8l+q6HjOM2JJ7YnoD1vBKfiA5NAuREYUQnoXNYOiEa KTR2yoH/4fa/gsFtr05pId89U9B7fgBFhiRz7aCCauZEkQIMsuLN4TTKW+r8gMC33nGR b1LGeCJ4ruM/8Gqt3Yjd+C1KzBV+SigDZdKHwpDOsUWz4yC4ny0YG8biX1BjyUvXjvnS 7Rr9of6w4AUYQ6oi5NB7wPhuYvPr8GIb3Lm2zizov9RC7+Eb6EIdmsEAYgeaN6lkS+k8 wC+Q== X-Gm-Message-State: AOAM530WcodNRVt62M310IXOtaPjI++ofvstZN9DSfhLDoPo5aHnjXEi EBdp/FGUUl9yanaWtmTQvc+7v4+wvINKsW0o1VmbL/Um X-Google-Smtp-Source: ABdhPJz5myvzM7t1wwuTor9h1rgu9hom0GVWv7pogOTLldSn+g37Dd5bfvT6v5we6mQjhSgc7WkUChrYCxf9EugBv6I= X-Received: by 2002:a2e:8ec9:: with SMTP id e9mr4879346ljl.152.1592677670152; Sat, 20 Jun 2020 11:27:50 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> In-Reply-To: From: yyoncho Date: Sat, 20 Jun 2020 21:27:38 +0300 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: emacs-devel Content-Type: multipart/alternative; boundary="000000000000c5772405a8882ae9" Received-SPF: pass client-ip=2a00:1450:4864:20::22b; envelope-from=yyoncho@gmail.com; helo=mail-lj1-x22b.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 18:27:53 -0000 --000000000000c5772405a8882ae9 Content-Type: text/plain; charset="UTF-8" Here it is an example: Copy ls from /bin/ and name it lss. Then: ;; works (let ((default-directory "")) (executable-find "lss" 'remote)) ;; does not work (let ((default-directory "")) (executable-find "/bin/lss" 'remote)) Thanks, Ivan On Sat, Jun 20, 2020 at 9:23 PM yyoncho wrote: > Hi Michael, > > The examples that do not work on my side are when using a full > file path when the binary is not on remote PATH. > > Thanks, > Ivan > > On Sat, Jun 20, 2020 at 8:43 PM Michael Albinus > wrote: > >> yyoncho writes: >> >> > Hi Michael, >> >> Hi Ivan, >> >> > Can you comment on remote flag mentioned by Philip as well? >> > >> > Here it is the docs for it: >> > >> > REMOTE is non-nil, search on the remote host indicated by >> > `default-directory' instead. >> >> Right, I forgot this. Sorry. So let's go back to your question: >> >> >> As part of investigating >> >> https://github.com/emacs-lsp/lsp-mode/issues/1688 I noticed that >> >> executable-find does not return the binary when it is not on the >> >> remote PATH(or at least this is what I see) even if you specify the >> >> full path to the binary. Can you comment if this is the expected >> >> behaviour? >> >> The crucial point is `default-directory'. In my local environment, I >> have for example >> >> --8<---------------cut here---------------start------------->8--- >> (let ((default-directory "/tmp")) >> (executable-find "emacs")) >> "/usr/local/bin/emacs" >> >> (let ((default-directory "/tmp")) >> (executable-find "emacs" 'remote)) >> "/usr/local/bin/emacs" >> >> (let ((default-directory "/ssh:ford:")) >> (executable-find "emacs")) >> "/usr/local/bin/emacs" >> >> (let ((default-directory "/ssh:ford:")) >> (executable-find "emacs" 'remote)) >> "/opt/bin/emacs" >> --8<---------------cut here---------------end--------------->8--- >> >> You get the remote path only if `default-directory' is a remote file >> name, and the REMOTE argument of `executable-find' is non-nil. And this >> is understandable: if `default-directory' is not a remote file name, >> `executable-find' does not know which remote host it shall use for search. >> >> > Thanks, >> > Ivan >> >> Best regards, Michael. >> > --000000000000c5772405a8882ae9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Here it is an example:

Copy ls from /bi= n/ and name it lss.

Then:

;; works=C2=A0
(let ((default-directory "<remote-path>"= ))
=C2=A0 (executable-find "lss" 'remote))=C2=A0
=

;; does not work
(let ((default-director= y "<remote-path>"))
=C2=A0 (executable-find "/bin/l= ss" 'remote))

Thanks,
Ivan

On Sat, Jun 20, 2020 at 9:23 PM yyoncho <yyoncho@gmail.com> wrote:
Hi Michael,

The examples that do not work on my side are when using a full
=
file path when the binary is not on remote PATH.

<= div>Thanks,
Ivan

On Sat, Jun 20, 2020 at 8:43 PM Michael Alb= inus <michae= l.albinus@gmx.de> wrote:
yyoncho <yyoncho@gmail.com> writes:

> Hi Michael,

Hi Ivan,

> Can you comment on remote flag mentioned by Philip as well?
>
> Here it is the docs for it:
>
> REMOTE is non-nil, search on the remote host indicated by
> `default-directory' instead.

Right, I forgot this. Sorry. So let's go back to your question:

>> As part of investigating
>> https://github.com/emacs-lsp/lsp-mode/iss= ues/1688 I noticed that
>> executable-find does not return the binary when it is not on the >> remote PATH(or at least this is what I see) even if you specify th= e
>> full path to the binary. Can you comment if this is the expected >> behaviour?

The crucial point is `default-directory'. In my local environment, I have for example

--8<---------------cut here---------------start------------->8---
(let ((default-directory "/tmp"))
=C2=A0 (executable-find "emacs"))
"/usr/local/bin/emacs"

(let ((default-directory "/tmp"))
=C2=A0 (executable-find "emacs" 'remote))
"/usr/local/bin/emacs"

(let ((default-directory "/ssh:ford:"))
=C2=A0 (executable-find "emacs"))
"/usr/local/bin/emacs"

(let ((default-directory "/ssh:ford:"))
=C2=A0 (executable-find "emacs" 'remote))
"/opt/bin/emacs"
--8<---------------cut here---------------end--------------->8---

You get the remote path only if `default-directory' is a remote file name, and the REMOTE argument of `executable-find' is non-nil. And this=
is understandable: if `default-directory' is not a remote file name, `executable-find' does not know which remote host it shall use for sear= ch.

> Thanks,
> Ivan

Best regards, Michael.
--000000000000c5772405a8882ae9-- From MAILER-DAEMON Sat Jun 20 14:43:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmiSd-0002ZK-K0 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 14:43:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmiSc-0002Z6-IK for emacs-devel@gnu.org; Sat, 20 Jun 2020 14:43:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42116) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmiSa-00074m-Bb; Sat, 20 Jun 2020 14:43:24 -0400 Received: from [176.228.60.248] (port=3419 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmiSZ-0004jF-8j; Sat, 20 Jun 2020 14:43:24 -0400 Date: Sat, 20 Jun 2020 21:43:13 +0300 Message-Id: <83mu4xvari.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org In-Reply-To: (message from Konstantin Kharlamov on Sat, 20 Jun 2020 21:04:23 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 18:43:26 -0000 > From: Konstantin Kharlamov > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > stefan@marxist.se, emacs-devel@gnu.org > Date: Sat, 20 Jun 2020 21:04:23 +0300 > > > Our experiences are different, then. I find them very important in at > > least some cases. > > Right. I should mention though, my experience is not specific to myself. Most > non-GNU projects (actually, all I have seen) don't require having the list, but > do require good commit messages. Like I said, latest GCS leave this decision to the project developers' discretion. You may also wish to check how long do those projects live, and compare that with Emacs. Not every technique that is good for a 5-year project will scale well for a 35-year one. In my work on Emacs I quite frequently need to look at changes made 30 years ago, using a different VCS. > I also don't think GNU projects are any good to make examples of. This is my > general experience of seeing how new projects get under GNU umbrella to get > never heard of (which I attribute to points listed in my starting mail, since > most of them are unspecific to Emacs). I hope you realize how saying that makes your opinions matter much less, do you? > git log -500 --format="%ae" | grep -vP > "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huawei|c > odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|micros > oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproject|si > five)\.(org|com|de|cz|cn)" | sort -u | wc -l > > Results are: > * GCC as of commit 445d8da5fbd: 15 > * Clang as of commit 7b201bfcac2: 49 > > This is some pretty big difference! If I expand the commits range, the > difference increases further. GCC is alive for 33 years, so I think your theory eats dust. Many of the GCC and GDB developers get paid for their work, but that doesn't mean the project is less viable, and the long history of both GCC and GDB is the proof. > > > This whole thread is dedicated to "why having the list is necessary as > > > opposed > > > to not having it", and while text explains "why having the list is good" in > > > general, but it does not make comparison to not using it. There's no answer > > > to > > > that question. > > > > Isn't saying "A is good to have" the same as saying "not having A is > > not so good"? > > It depends. If A is free, then sure. But if I gotta pay for A, then I'd consider > my options. That text described the advantages of having the lists precisely so you could consider your options and make an informed decision. From MAILER-DAEMON Sat Jun 20 15:14:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmiwU-0002u9-9O for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 15:14:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmiwS-0002t7-JP for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:14:16 -0400 Received: from mout.gmx.net ([212.227.17.22]:51493) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmiwQ-00034C-Cq for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:14:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592680451; bh=rIL7uSZ4LwSnOQpl6iCLlTpN3wrJJDuvrVk6xH4W0ZA=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=XfzoZGquukPvk2OkDezq2KpEYCtxmb2Bife1Rj25cb6BlmLkZkTQKeSqetOiAFL3q jBQF4uOd+Mlu4KlmU3Rwg/rtI8DXzsY28Nzjra7g9aLc5Z7aeAX72VUDGHXGVCngYr ssJC1i9hGF3Bpo0QZDYFgBguX4otPFtuuUpGW0/k= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([213.220.148.8]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MPGRp-1jWSkQ0xED-00PaQ0; Sat, 20 Jun 2020 21:14:11 +0200 From: Michael Albinus To: yyoncho Cc: emacs-devel Subject: Re: tramp and executable-find References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> Date: Sat, 20 Jun 2020 21:14:09 +0200 In-Reply-To: (yyoncho@gmail.com's message of "Sat, 20 Jun 2020 21:27:38 +0300") Message-ID: <87366pzh1a.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:yhO/Ryj7g4oO15N/Uzqs+6CbJYqeJYmP+K7ZEFR2FiLOyauzf6x aTfYCkKsfhuRwCWn+mX/CEznbBqdoW4ILdti+vjsltXRZB53pMI2juwUv4rFY0+XiBUgaII SuhdkZ58IATw+aLg9zwFte1YLMbdGLDi+fU2mKzzlQKfMcgXq4VrQgWpzVubZsQrLwxVJlg 5YSJL6ORX97S7Il2agGmQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:n7Arpyzi03Q=:PgU404oFWQfqqLDywdT4Jo ovZ5e9fM9GWPTlWOuDJFxL4qPxcwdidbTMIFfve4uLSfQN0TnSt/nFJb5keMYtmH95/9c5bwi fmEOdfXG3ao2DZ1kAhYdB1WDpA2wv6LDnW+jlzJoT/lsuws1lFj9zZ6Qj8sCnwP8IxseC+pal aqazuxXLFgWBFD/U/9uxXiZ2DA3oZvD32qvjUEyQ7POKoPmOyauh14k/AOfIS8JA/Y4rvzuYW YOR1lARqy/szGdAlOWmJLqsUeEnUwOyTovJ7m0PsTOQnSzhIB8B+mcfS9cGLb8hacWuVRcVig f19Iy2YOM03eK3IGARbTC21rgqhEfjg4vu7wzEVATKi2u6OJFOmXlT87G5Fg6wmWvgklqpTFs hKKQ4gdRW7PBEvSLwIH4x2UwaVyF97bOKwXZRFQhyy/Y6G7IJIJp4QexW98YU6s8QKbbQMjaR Xck1rOjn7iuVq4WsSMZq36YcaK+I/ThhXccqaWphDwGYOHRAVo/IL8aDSvjcmEOgLZuD8CRST CCA07C3bBoYfENpav5GDu/Z8MmMcGoErwA+mvmcb3j7rHLrY/Wa6mQci34qqvCrYjI+d51bFk +CgRcL5LhYAdpE04CItPLJSNfMUbLqR/GfabRp2FJKGJWCINe51dKqBUqv0D4uL5xI1WTPpXW jThJx9rN94CQJMItbd2whUMljsgHDCt3W4V+eiYGz8bAg5OPhZYdFXKq7JBrBQTLLQHcSg86w n/JRQRIwZHfMyD7E5BL4KP3mX/nEq13naFazRgT9SGFeRAh0kJfobO+UZjlEpybaoiVFBI1HX SSL2e9YgUbEiagPEnssUJNxpZAgI25aBjWuBGA+jomtVbdaZM3B3XCmuKCIQlNFy9kBT42b5h mAY5BLM+7sxEQtXYNeiZUdd2d94t7yDV7atfScMDFI92nQPEwP4nVVjvNkg+WOVePlxVHz0aI ycOa3N3df3RKd02brtPx8Acnneqe7ngBoWFH0jqTrVAPnpgSeWSbT2XngcYwg91SwPbsA4ln+ HrHco2S2S/jcZEze3RE/B2YN6sA34NW74R4h3wo2ZvKV2tXx9wKsYPP5+xtgcAqMlFAktqfC7 kPcrltBCiV4abrqKtX+Si1sZmDqYYveSP0qfDylK1SHhI/gu/xNUIddwh1X945i0YR2YXltlG TMu2yAEmxtYt0deVHcryxKYqSy29S2psGg7px7dYSFsRet9ORMNy2JVyYTKJg3cNnNgQ3ihfl oJIjcUrpa/LpmjwuM Received-SPF: pass client-ip=212.227.17.22; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 13:43:10 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 19:14:16 -0000 yyoncho writes: > Here it is an example: > > Copy ls from /bin/ and name it lss. > > Then: > > ;; works=20 > (let ((default-directory "")) > (executable-find "lss" 'remote))=20 > > ;; does not work > (let ((default-directory "")) > (executable-find "/bin/lss" 'remote)) But this second example doesn't make sense. You want to know the path, where the executable "lss" is located. Why do you want to give an absolute file name as argument? The docstring of executable-find says "Search for COMMAND in =E2=80=98exec-= path=E2=80=99". A command is a command, and not an absolute file name. *If* you want to use an absolute file name, you would need to give it also to the command, like (let ((default-directory "")) (executable-find "/bin/lss" 'remote)) where is something like /ssh:user@host: - you see that this doesn't make sense. Search for "lss", that's it, as you have shown with your first example. > Thanks, > Ivan Best regards, Michael. From MAILER-DAEMON Sat Jun 20 15:28:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmj9n-0000pM-Lc for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 15:28:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmj9m-0000o4-KI for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:28:02 -0400 Received: from ciao.gmane.io ([159.69.161.202]:52290) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmj9l-0004u1-26 for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:28:02 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jmj9i-000T3X-Ao for emacs-devel@gnu.org; Sat, 20 Jun 2020 21:27:58 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Jamie Beardslee Subject: [PATCH] Add user option to disable location in bookmarks Date: Sun, 21 Jun 2020 07:27:48 +1200 Message-ID: <87sgep35cb.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:sqX+uJflqYKpmS1dXmJoUoY1Eo8= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 15:27:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 20 X-Spam_score: 2.0 X-Spam_bar: ++ X-Spam_report: (2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 19:28:02 -0000 --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Hi, I've just started using save-place-mode, and found that bookmarks really get in the way. I figure there are probably a lot of people that use bookmarks just to save some common files, rather than locations within a file. -- Jamie --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-user-option-to-disable-location-in-bookmarks.patch Content-Transfer-Encoding: quoted-printable From=2017db59cbb7e060bed4c181f459b80cb67c1163b5 Mon Sep 17 00:00:00 2001 From: Jamie Beardslee Date: Sun, 21 Jun 2020 06:59:12 +1200 Subject: [PATCH] Add user option to disable location in bookmarks When `bookmark-use-location' set to nil, bookmark-default-handler won't try to jump to the right location in the file. This way bookmarks can be used to just save regularly used files, and save-place (or similar) can be relied on to, well, save the place. =2D-- lisp/bookmark.el | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 5bb1698171..3687a0b20f 100644 =2D-- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -170,6 +170,10 @@ bookmark-menu-heading "Face used to highlight the heading in bookmark menu buffers." :version "22.1") =20 +(defcustom bookmark-use-location t + "Whether to open the specific location of bookmarked files. +See also `save-place-mode'." + :type 'boolean) =20 ;;; No user-serviceable parts beyond this point. =20 @@ -1224,16 +1228,17 @@ bookmark-default-handler ((and buf (get-buffer buf))) (t ;; If not, raise error. (signal 'bookmark-error-no-filename (list 'stringp file))))) =2D (if place (goto-char place)) =2D ;; Go searching forward first. Then, if forward-str exists and =2D ;; was found in the file, we can search backward for behind-str. =2D ;; Rationale is that if text was inserted between the two in the =2D ;; file, it's better to be put before it so you can read it, =2D ;; rather than after and remain perhaps unaware of the changes. =2D (when (and forward-str (search-forward forward-str (point-max) t)) =2D (goto-char (match-beginning 0))) =2D (when (and behind-str (search-backward behind-str (point-min) t)) =2D (goto-char (match-end 0))) + (when bookmark-use-location + (if place (goto-char place)) + ;; Go searching forward first. Then, if forward-str exists and + ;; was found in the file, we can search backward for behind-str. + ;; Rationale is that if text was inserted between the two in the + ;; file, it's better to be put before it so you can read it, + ;; rather than after and remain perhaps unaware of the changes. + (when (and forward-str (search-forward forward-str (point-max) t)) + (goto-char (match-beginning 0))) + (when (and behind-str (search-backward behind-str (point-min) t)) + (goto-char (match-end 0)))) nil)) =20 ;;;###autoload =2D-=20 2.27.0 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFNBAEBCAA3FiEElxJbPtj12sn/xkPXc0qyklu3X7MFAl7uYzUZHGJlYXJkc2xl ZWphbWllQGdtYWlsLmNvbQAKCRBzSrKSW7dfs76DCACamqY/sYAA2XB3L+nKZ0vp 6g/JB9wccmLv/0VPbx98fEdP9svjHwmq+Kbc564fp4t37rUyrSlCSaEYmFnUSav4 cj2ijSI6zpT6Qmj7mF9/b/EqvHVBd5bHLwynphQgsPeA3dSzHEQUHP/VdnR03fRs uuGd/lnmHmod/hIV/0z4m82XPNBmrwNMvUfgd1l+b2hOBzSwAPk12+635M0aEFFS 4f1t12RQkfpS0v9XG5RXMyrkbDTnzDaWo+kVURtNA5U2D3suavzANfHqpCPysNjb iguY6bzMKwo7JMSAiPrnTaQznQULtAiaFyshYfcRbTWYCZ4wnU2Du/3oYMm7eNKd =nuwc -----END PGP SIGNATURE----- --==-=-=-- From MAILER-DAEMON Sat Jun 20 15:30:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmjBu-0002bd-67 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 15:30:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41028) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmjBs-0002an-Bf for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:30:12 -0400 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:40177) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmjBq-0005IJ-KP for emacs-devel@gnu.org; Sat, 20 Jun 2020 15:30:12 -0400 Received: by mail-lj1-x236.google.com with SMTP id n23so15116200ljh.7 for ; Sat, 20 Jun 2020 12:30:10 -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 :cc; bh=b/+gwzjjtgelhwQpnOUKpOHx2iKbux5bcCc+xnoMtm8=; b=Z0aF5oBvil1vmNegbdtOE92Oq+bc9GJgZxbp1M+GcL3T/jZU7jdwQ693vnvXrltLoo /jIp8g47Wlg6m9q+gnyzoUdXUd00YtIioQYsblrarotbvED6eEw75P5xXb/PzUTTvpD5 rS0m38dqtWx8wWUlrBYpQvzVAF9fp/ETiAEMWJ9lzK+a28FiL1bM0s3Pdq7Gt02gP9N+ mzFzssCqE0jY/J1lydQUxZXbpohkZaNpESrktwGNSD0aOQePh7+Yhh2iFZYmXIvoCgwr JoJTD55H35S6+4i1wAs4Yh0tclptELFyeSkcQjWGf3UENcf5c3tBKxmPX9QLm+U05UJ0 aEsg== 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:cc; bh=b/+gwzjjtgelhwQpnOUKpOHx2iKbux5bcCc+xnoMtm8=; b=nU1c47r+vrZyqheeKTJRXwm9Xb+UqvkbDBOnFSQm9E0hZ4sqLVaKFwkIEC9TCO8V1k HMWdeT+jstDCJlZyaJiW3VjqIXp22aYqDoEHJBANMby6pJCUiezH7fQLSszn5rXA3RQN xxJn2VMnv7ePuODOk8h8Dj5/5kVM8GY48aGzejeYyjyHGAraacJL0K5OH5+X0aHhDWOp cFoHeI0eyghut387PbC4yLxiI4op7QVtqPQJSso2x84IFmV6lK2Ld8GZfSmzyBQuXOGF zS0HaJpzduc47yZMfnj9H2YjeFRIylPCTuYxvCazYxnTClT3w0wU/4Df1sYO7VsY+qwP u5ZA== X-Gm-Message-State: AOAM531iqKKP37uFdq2i4fQ99/RLrkpNLFwoDXE3bvlH2jLj1ZjOu6SG fsOtEiO3cvJOPtDyqau8WJD0FbhK8io3ybFyNEE= X-Google-Smtp-Source: ABdhPJzJY/K8JbaDjToRfvQzzsgf8ULLzUWpjSm38r6w3Bv03sGF/fNHfYVCtpKHYfJ4SIs/6q0ZiMB2sa+4zf4sK8Y= X-Received: by 2002:a2e:8ec9:: with SMTP id e9mr4976550ljl.152.1592681408636; Sat, 20 Jun 2020 12:30:08 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> <87366pzh1a.fsf@gmx.de> In-Reply-To: <87366pzh1a.fsf@gmx.de> From: yyoncho Date: Sat, 20 Jun 2020 22:29:57 +0300 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: emacs-devel Content-Type: multipart/alternative; boundary="0000000000009a298305a88909ed" Received-SPF: pass client-ip=2a00:1450:4864:20::236; envelope-from=yyoncho@gmail.com; helo=mail-lj1-x236.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 19:30:12 -0000 --0000000000009a298305a88909ed Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Michael, Thank you, this is enough for me to solve the original issue in lsp-mode repo. As a side note, if you do search for /bin/ls executable-find will work although it is not prefixed with the remote identifier. This is what confused me initially. > Why do you want to give an > absolute file name as argument? This is a configuration setting for lsp-mode when the server is located on the remote server. Some users dont have admin access on the remote machine so they put the binary somewhere else so they have you use full path. Thanks, Ivan On Sat, Jun 20, 2020 at 10:14 PM Michael Albinus wrote: > yyoncho writes: > > > Here it is an example: > > > > Copy ls from /bin/ and name it lss. > > > > Then: > > > > ;; works > > (let ((default-directory "")) > > (executable-find "lss" 'remote)) > > > > ;; does not work > > (let ((default-directory "")) > > (executable-find "/bin/lss" 'remote)) > > But this second example doesn't make sense. You want to know the path, > where the executable "lss" is located. Why do you want to give an > absolute file name as argument? > > The docstring of executable-find says "Search for COMMAND in =E2=80=98exe= c-path=E2=80=99". > A command is a command, and not an absolute file name. > > *If* you want to use an absolute file name, you would need to give it > also to the command, like > > (let ((default-directory "")) > (executable-find "/bin/lss" 'remote)) > > where is something like /ssh:user@host: - you > see that this doesn't make sense. Search for "lss", that's it, as you > have shown with your first example. > > > Thanks, > > Ivan > > Best regards, Michael. > --0000000000009a298305a88909ed Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Michael,

Thank you,=C2=A0 this is en= ough for me to solve the original issue in lsp-mode repo.=C2=A0
<= br>
As a side note, if you do search for /bin/ls executable-find = will work=C2=A0
although it is not prefixed with the remote ident= ifier. This is what
confused=C2=A0me initially.

> Why do you want to give an
> absolute file name as argum= ent?

This is a configuration setting for lsp-m= ode when the server is located
on the remote server. Some users d= ont=C2=A0have admin access=C2=A0on the remote=C2=A0
machine so th= ey put the binary somewhere else so they have you use full
path.<= /div>

Thanks,
Ivan

On Sat, Jun 20, 2020= at 10:14 PM Michael Albinus <= michael.albinus@gmx.de> wrote:
yyoncho <yyoncho@gmail.com> writes:

> Here it is an example:
>
> Copy ls from /bin/ and name it lss.
>
> Then:
>
> ;; works
> (let ((default-directory "<remote-path>"))
>=C2=A0 =C2=A0(executable-find "lss" 'remote))
>
> ;; does not work
> (let ((default-directory "<remote-path>"))
>=C2=A0 =C2=A0(executable-find "/bin/lss" 'remote))

But this second example doesn't make sense. You want to know the path,<= br> where the executable "lss" is located. Why do you want to give an=
absolute file name as argument?

The docstring of executable-find says "Search for COMMAND in =E2=80=98= exec-path=E2=80=99".
A command is a command, and not an absolute file name.

*If* you want to use an absolute file name, you would need to give it
also to the command, like

(let ((default-directory "<remote-path>"))
=C2=A0 (executable-find "<remote identification>/bin/lss" &= #39;remote))

where <remote identification> is something like /ssh:user@host: - you=
see that this doesn't make sense. Search for "lss", that'= s it, as you
have shown with your first example.

> Thanks,
> Ivan

Best regards, Michael.
--0000000000009a298305a88909ed-- From MAILER-DAEMON Sat Jun 20 16:15:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmjtl-0008Ma-P4 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 16:15:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmjYS-0005z7-LO; Sat, 20 Jun 2020 15:53:32 -0400 Received: from mout.gmx.net ([212.227.17.21]:47483) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmjYQ-0008R0-Lj; Sat, 20 Jun 2020 15:53:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592682806; bh=h7YhVaUnPa+I2pTY9bjJKgFuoeqSf4nN36N/j4REr78=; h=X-UI-Sender-Class:From:Subject:Date:Cc:To; b=E4WUGwORljfgW9h3AadhZs8Zuj4VlsmSAZIvTpK5pk0/i+m/Uv07rnAy02+jfnzwr joPqMg6tUuzDduutiEdDofUEoIegcxswpmlgdmEtgoX9Fhpq3SUP07DFFxQmY2Y46v /IZAaHdHBWHQtk2OBbyYpmtTYS37hBEVc1mEmSK0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.75] ([77.4.47.52]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mzyyk-1iymQK30vW-00wznm; Sat, 20 Jun 2020 21:53:26 +0200 From: Friedrich Beckmann Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.5\)) Subject: [ELPA] New package: pspp-mode.el for PSPP/SPSS syntax highlighting Message-Id: <136BE842-9BBB-4D69-A994-705993AF58EC@gmx.de> Date: Sat, 20 Jun 2020 21:53:25 +0200 Cc: PSPP Development Mailing List To: emacs-devel@gnu.org X-Mailer: Apple Mail (2.3445.9.5) X-Provags-ID: V03:K1:knqCgES5vUXuvj1fqRUfPG7eC9OQYCuHVHbCH0ejqx+GL0vwWzR S4OQ6ofaH5JzvGE3EgLegg2CMosE+0q2HdxJzQfZW/Kb691ToUG8PSp3wZFKzWzLXmQKWQ0 aPo/dWxANR+jmRBUzqAJKcV+qSwz7upNLP7BgREY2UwDMdmNfXfcX4jJN9JeY1UClucbDGl 4N2c0nRDMG7D5IoJNjbPw== X-UI-Out-Filterresults: notjunk:1;V03:K0:Wi0xde8fIdo=:fTE3LdsjTJIhitI/pjK/jl 4iXkcjrP3298A5iBS1QXXlHWDpsl1tNTAwecCXvjYoMWCNm0VbE2VqQ5RZif/Dl/u6EL7ZCiQ HciJ56oelcAB6VwjgypT2dFYKB8vyq/A0hqyX8CR1KX3fHr6EopDNKxkme9RKBCzAQvVaAFTT C9jqkRvX0y6BsMsvb6vkn1HtRE2/YL3de/pqlYIm6FWsLzqf+JTRjBFKH6rS7Gkki29NhAMEY LB3VFkTNBzoQkm3UnlVP7T3HUyWB8SEH8pJsFx68e9ev6EC/ZQvH6jQytlN6YA7K9IZ8Dxopf k66tBlAztKsZLVYbfcuC//gsGaUDxFpaKzrjQL/8JZXhNIHYRhsbhY3I4YgXp4gh0pcTRGVW9 G92GWkOfz0mWcKVv9pKk5CRZ2nfhDRRnkSFBjxJz5sLwwLJsnrcOtrsUoAmG8rhhUBI0FqTE3 +kcubVpLZdhM0V6XRsYPZgSYu+4DOrBjk5q+senNIDjTQAG9dh+EkKyG+1WWxbtWDtQZS1vs6 bwJZs5ZDt7fLxejEpWGsaCtVyCXhV9o1SKn103lU/aifsHpKmbdqaNon5Uh7L50J7FltjOqSg v0L2gYYxachc3IJNHkRF9tlLX8i9mJYknDEaZ0QBLfoTtlNXXBIJiAzx14lnyk6LHm/EbWTcY pKolEnFfEYplrofhnesrfHTyK0Ns6t1viBo+dNK8+dLGpxCcyPpzhpAzwLPL7jrCNaALR+Gde Kss9mt0hclOeL6AHwetIKmMaB5JIaus0cLyZ/I1AQEJVt7cazeMKGHUoUY046o71aI/lyHjEC 4nxLO3riwgof/MJ9w5sWXnvjsBgxDuHpRXHxk+rmuUGTHvQ8d0UR4L3eEGXLbCdMOOKWVcjI9 B47CzCZOucmxj+Hh/tB5hQpS1FzIu62nsJFl2ZXV1DETTBvZM4jmTY1/cqdViB3VitfpitWsb Ny57qCu/KHK5qEqWZAV22QHe1j05+CB7iPMtvkchZeFJs7J/MgKzmj0Tksuz/X1IL/+mzbJBF fV/3gH6rkI7wVJ7pjtGtCghoIJ79P27uiWfxET1jb9EiU1rSXMIHgwx6EhotbDT621MU32NdO 8Re2ZeMVS//y6vXcqlOJRwGc1isHc1ewdqhepy66Uv/fZFwpA95C6jatc9MfaLiQrS9oKLTut 0NPrcKo0nRegkNJL8mvqNVF2CORHmMFzrVHnA+QyZ+Lo+wpT5Eq+eefMROh2ejqJcoFxMj0vt ExsYhAtM7UxHLjpoV Received-SPF: pass client-ip=212.227.17.21; envelope-from=friedrich.beckmann@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 12:47:46 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Sat, 20 Jun 2020 16:15:33 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 19:53:33 -0000 Hi, I contribute to the GNU PSPP software and maintain the pspp debian package. The package contains a pspp-mode.el file which provides the pspp-mode for syntax highlighting spss syntax files. Currently the file is installed via dh-elpa in the debian package but I think it should be in the normal gnu elpa distribution. The file is available here: http://git.savannah.gnu.org/cgit/pspp.git/tree/pspp-mode.el Can you integrate that in gnu elpa? Regards Friedrich From MAILER-DAEMON Sat Jun 20 16:57:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmkYI-0008Ox-1V for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 16:57:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkYF-0008J0-6E for emacs-devel@gnu.org; Sat, 20 Jun 2020 16:57:23 -0400 Received: from sender4-of-o57.zoho.com ([136.143.188.57]:21788) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jmkYD-0000cs-3E; Sat, 20 Jun 2020 16:57:22 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592686637; cv=none; d=zohomail.com; s=zohoarc; b=FPQndcomU5nmynFfVHWzx72ZU0TrxHUsMEARmQ7MDyq8DaKVCiCT8d8wP92DBsZ1UDvDF4ux35eJcocSvptUirxr2hoq3l4CL726+56qY/gycyvVgu+SZ0xJtbduS/F8A8o8n9m6StlEN9LrSaCn7arKN5KG4VU550tidWj5md4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592686637; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=HlB25TfCoFhTbSVTpipPDJHQY0zRVnRkD1lL6OGXUu8=; b=GiVPwnCqXBmnmJlIFVrRrKATfoTI7ldeUEeaOKH0aY6MMq32ALASr8wpLHykHQJH0yWdeOsF3+B1YIIbMP9o+ztKkn4fGXdm0bobZr3/OAR2joUAK11OTYaZdFQNb/p76LDbZ5gAQyffgs9/kcSIIfsI1TgY/cZEuPlZoZtPTts= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592686637; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Cc:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=HlB25TfCoFhTbSVTpipPDJHQY0zRVnRkD1lL6OGXUu8=; b=No8JTkWHelh2HSPBjuC3EqaM7am/ndSU3La8i0X+X7bSpfotJLnJU6Ik2tP5pYi4 eJYCpIgoyS8BQTH/KGYMJKdBEjJGlAQTQPeUEoVbs/Otn0+Ju7JgtZRP5xzvaFRPCA8 QogTVd2YQdXaQDuZFIvExIHQ9VWuF7nD8PHTcrlw= Received: from localhost (p54ad45a0.dip0.t-ipconnect.de [84.173.69.160]) by mx.zohomail.com with SMTPS id 1592686634282692.7184199825499; Sat, 20 Jun 2020 13:57:14 -0700 (PDT) References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: Konstantin Kharlamov Cc: Eli Zaretskii , joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers In-reply-to: X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Sat, 20 Jun 2020 22:57:09 +0200 Message-ID: <87tuz5sbfe.fsf@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.57; envelope-from=rekado@elephly.net; helo=sender4-of-o57.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 16:57:19 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 20:57:23 -0000 Konstantin Kharlamov writes: > I also don't think GNU projects are any good to make examples of. This is= my > general experience of seeing how new projects get under GNU umbrella to g= et > never heard of (which I attribute to points listed in my starting mail, s= ince > most of them are unspecific to Emacs). This is where I stopped reading and considering your points to be valid. There are countless things that determine whether a person will contribute to a project or not =E2=80=94 even projects that you =E2=80=9Cdo= n=E2=80=99t think [=E2=80=A6] are any good=E2=80=9D. Pinning a complex behaviour on commit message forma= t is beyond ludicrous. --=20 Ricardo From MAILER-DAEMON Sat Jun 20 17:18:23 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmksZ-0006Yo-9w for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 17:18:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmksX-0006YX-MC for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:18:21 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:51586) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmksV-0003kG-Rr; Sat, 20 Jun 2020 17:18:21 -0400 Received: by mail-wm1-x32c.google.com with SMTP id x16so2398898wmj.1; Sat, 20 Jun 2020 14:18:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=cy6xkgz1jshEdm9NVqlBh9ZgIb6c8OW5OH7e8FrzLmw=; b=Yb6gEBaRrkrOfdKpI/ZheAJ3LC6z0D24YYO4F5ATQ92X71D3WjNkf2tf9C0n2rsRNg tHkS58YbDqGcep0mXqsJmiLcbeBTGjcgmZymr3eia+SPMLH88ZCpJ93dJAlwI90kId+E Jw8zNbv5U2Yw4UPMxChEDGINVeffIgiHU1OO3chmRi4lW5UpYCVjkNHPZwdVw7ZZ0XfN YaPoEmkUYrxzwAS96asxaIqJYBgSVOiyul92oSoUQx5m0Ip1Em0IKoXCcomCNyf2Y4Sm 0N5A9mt5El49Z2n2eD/q1QYjmsmgJjeZlZKYpB5FZDYKXmJfAiP0YjcK51vogVZkk3z3 2djg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=cy6xkgz1jshEdm9NVqlBh9ZgIb6c8OW5OH7e8FrzLmw=; b=LLsSKtwkxvEY/TbDwPAs/vSreDO7v6gA652o+3z4hELRRjHxyGbJj55H+BD00Rc5W6 YTViBF4maRbv3N/qF4qDezbG9ky9zgipnHbyCGWVbVmAL8RPLq3cXG6WiNOEyZjoaf6x PGzksMAHJbZqp9V2xAkFNV2XX/9K5d47N3UVbU0vGitPdrjVZiyYnr/eDMWrenINYezy CJkg60Yrqiv7JRhnpSYXAhTlk0ACjxwnt/xhabV3s9KdL8peWhipeASjGe3nieVJEzwp HofauIpHZCicFvgel4oQSm+KHxW4eOSaMNNog4hpTZwNL1+F8XHMuhrkh6vGmnqK+Jfg Z+Rw== X-Gm-Message-State: AOAM532r8YMgpqcKLomdp3MZOQ4w26hH83hqBXkmOVPLeXz98971Hac+ CbwJ4uLoroiSLPTjuhVDVZkAyKu6 X-Google-Smtp-Source: ABdhPJy0vCeOCIS3cKDFPkGSFk8G7OmPoZxJOA11mfcGBdnvb7Jp+fQcuDYfNFSNUE5G9H8MjGNuUQ== X-Received: by 2002:a1c:8186:: with SMTP id c128mr10864208wmd.114.1592687897397; Sat, 20 Jun 2020 14:18:17 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id f186sm1935962wmf.29.2020.06.20.14.18.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 14:18:16 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: kevin.legouguec@gmail.com, theothornhill@pm.me, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87eeqat0wz.fsf@gmail.com> <83tuz5vrog.fsf@gnu.org> From: Dmitry Gutov Message-ID: <26757137-dcf1-3700-e142-cdc9d4cfb1ef@yandex.ru> Date: Sun, 21 Jun 2020 00:18:14 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83tuz5vrog.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32c.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: 10 X-Spam_score: 1.0 X-Spam_bar: + X-Spam_report: (1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 21:18:21 -0000 On 20.06.2020 15:37, Eli Zaretskii wrote: >> Cc: Eli Zaretskii , Theodor Thornhill , >> philip@warpmail.net, emacs-devel@gnu.org >> From: Dmitry Gutov >> Date: Sat, 20 Jun 2020 14:57:07 +0300 >> >>> Would it make sense for these special modes to have a buffer-local >>> variable pointing to the buffer where the command was invoked? >>> project.el could then consult that variable first, then fallback to >>> default-directory? >> >> Perhaps. I don't know if that would be enough for Eli's purposes, however. > > It will solve some of them, to be sure. Solve them how? Do you always invoke that search command from a buffer belonging to the original project? 75% of the time? 30%? >> After all, in the Grep example, it could have been invoked from one of >> the buffers belonging to the current project, or just as well from an >> "outside" buffer (because, for example, that made it easier to select >> the intended directory). > > So you are saying that it's better to have no way of supporting that > use case than have some, even restricted, way? No. I even suggested a few ways how this can be user-extensible. And I'm saying we need a coherent design that's in line with what is already there. Or extends the behavior in a predictable way. Going back to Kevin's suggestion, I'm fairly sure it will also generate both false positives and false negatives, going simply by my own usage habits: the originating buffer of where I'm calling a command doesn't necessarily correspond to which project I'm thinking of right now. So I'm not sure if we can do this for the default behavior. Hence we'd need to use either one of the existing customization point, or add a new one. From MAILER-DAEMON Sat Jun 20 17:31:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jml5Q-0007Qa-GS for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 17:31:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57170) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml5P-0007QN-14 for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:31:39 -0400 Received: from forward105p.mail.yandex.net ([2a02:6b8:0:1472:2741:0:8b7:108]:34019) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml5K-0005M5-BA; Sat, 20 Jun 2020 17:31:38 -0400 Received: from mxback10g.mail.yandex.net (mxback10g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:171]) by forward105p.mail.yandex.net (Yandex) with ESMTP id C15064D4059D; Sun, 21 Jun 2020 00:31:27 +0300 (MSK) Received: from sas8-b61c542d7279.qloud-c.yandex.net (sas8-b61c542d7279.qloud-c.yandex.net [2a02:6b8:c1b:2912:0:640:b61c:542d]) by mxback10g.mail.yandex.net (mxback/Yandex) with ESMTP id Jkw2N4roh9-VR0Cgv2B; Sun, 21 Jun 2020 00:31:27 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592688687; bh=8ACHAvQYC2ByUGx1l2Tj8xzgSBR0SO/N8m7UA5lnPgI=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=BZIPc31JaGP2h2DGFgoOzzRkcs4PGwlSPutOpc1Me5/4cekbSHjV/S87nMJhQA2ki Tlnfa6h4KXbKE1tN+wq8luqCjcpuZch/W/j3PbiJBeETpB1rjx0wTDjV8ZqpA7+gbe bIFiHlu598yskpLdfwPRb+AvObTrbVFAcMfGFEdw= Authentication-Results: mxback10g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by sas8-b61c542d7279.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id CCRZXlKb17-VPPu59ma; Sun, 21 Jun 2020 00:31:26 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sun, 21 Jun 2020 00:31:23 +0300 In-Reply-To: <83mu4xvari.fsf@gnu.org> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:1472:2741:0:8b7:108; envelope-from=hi-angel@yandex.ru; helo=forward105p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:31:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 21:31:39 -0000 On Sat, 2020-06-20 at 21:43 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > > stefan@marxist.se, emacs-devel@gnu.org > > Date: Sat, 20 Jun 2020 21:04:23 +0300 > > > > > Our experiences are different, then. I find them very important in at > > > least some cases. > > > > Right. I should mention though, my experience is not specific to myself. > > Most > > non-GNU projects (actually, all I have seen) don't require having the list, > > but > > do require good commit messages. > > Like I said, latest GCS leave this decision to the project developers' > discretion. > > You may also wish to check how long do those projects live, and > compare that with Emacs. Not every technique that is good for a > 5-year project will scale well for a 35-year one. In my work on Emacs > I quite frequently need to look at changes made 30 years ago, using a > different VCS. Right, as well as not every technique that was good 35 years ago is still as good nowadays. > > I also don't think GNU projects are any good to make examples of. This is my > > general experience of seeing how new projects get under GNU umbrella to get > > never heard of (which I attribute to points listed in my starting mail, > > since > > most of them are unspecific to Emacs). > > I hope you realize how saying that makes your opinions matter much > less, do you? No, I don't. Are you implying that voicing bad opinion regarding GNU on a GNU mailing list may lead to some people to start ignoring me? If so, I'm fine with it. You see, my opinions are based on facts. My interpretation of them may be wrong, but if I expressed them, I am not aware of it. On this mailing list, we carry technical discussions, which means expressing arguments and counter- arguments based on facts, and being ready to turn out to be wrong. Ignoring someone based on their opinion instead of trying to prove them wrong is not a technical behavior. These are not very technical people, they sometimes go personal, so if their reaction is a silence, that's fine with me. FYI, for me even participating in discussions is hard, for personal reasons. But I am a software engineer, and I get the boundary between personal feelings and technical discussions, so I get over it. > > git log -500 --format="%ae" | grep -vP > > "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huaw > > ei|c > > odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|mi > > cros > > oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcprojec > > t|si > > five)\.(org|com|de|cz|cn)" | sort -u | wc -l > > > > Results are: > > * GCC as of commit 445d8da5fbd: 15 > > * Clang as of commit 7b201bfcac2: 49 > > > > This is some pretty big difference! If I expand the commits range, the > > difference increases further. > > GCC is alive for 33 years, so I think your theory eats dust. Many of > the GCC and GDB developers get paid for their work, but that doesn't > mean the project is less viable, and the long history of both GCC and > GDB is the proof. Okay, let me say beforehand that both GCC and Clang are very active projects right now. Just in case, so there's no misunderstanding. So, times are changing. In older times there were no standard to development, Git was not as popular, development practices are varied too. So, as long you could get your patch to a project, any odd contribution requirements were fine, they hardly would set a barrier. But these days Git got over all other VCSes (and for a reason), so using SVN or Perforce, or whatever, is a barrier to contribution. 12 years ago Github was founded, and then also the open-source clone Gitlab appeared. These two pretty much set the standard development model nowadays (for a reason too). There still are projects that use other models, but this is a barrier to contributors. What I'm getting at is that your reasoning that since GCC is 33 years old it will live on does not work. For a project to "live on" it needs to be active. Sure GCC is active! But its activity mainly stems from paid people and maintainers. Whereas in Clang a large chunk of it stems from contributors. Let me repeat, paid people come and go, so do maintainers (they may burn out, or just move on). These contributors are the ones who will become new maintainers and the ones who advertise the project in their environment. I hope it makes clear the future of what project looks brighter. > > > > This whole thread is dedicated to "why having the list is necessary as > > > > opposed > > > > to not having it", and while text explains "why having the list is good" > > > > in > > > > general, but it does not make comparison to not using it. There's no > > > > answer > > > > to > > > > that question. > > > > > > Isn't saying "A is good to have" the same as saying "not having A is > > > not so good"? > > > > It depends. If A is free, then sure. But if I gotta pay for A, then I'd > > consider > > my options. > > That text described the advantages of having the lists precisely so > you could consider your options and make an informed decision. I can't make decision since I am not a Emacs maintainer. From MAILER-DAEMON Sat Jun 20 17:35:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jml8u-0002gS-Vs for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 17:35:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml8t-0002dy-Uh for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:35:15 -0400 Received: from forward101o.mail.yandex.net ([2a02:6b8:0:1a2d::601]:42535) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml8q-00068m-Pg; Sat, 20 Jun 2020 17:35:15 -0400 Received: from mxback8g.mail.yandex.net (mxback8g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:169]) by forward101o.mail.yandex.net (Yandex) with ESMTP id 1B4623C00E26; Sun, 21 Jun 2020 00:35:09 +0300 (MSK) Received: from myt6-9bdf92ffd111.qloud-c.yandex.net (myt6-9bdf92ffd111.qloud-c.yandex.net [2a02:6b8:c12:468a:0:640:9bdf:92ff]) by mxback8g.mail.yandex.net (mxback/Yandex) with ESMTP id IhiBYXyYH4-Z8k8gW8i; Sun, 21 Jun 2020 00:35:09 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592688909; bh=/cBL0aFnYDzo4+pTWo6271+b3WXo+AdgZVcW7Q40wrc=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=qb7XiE9HMyTnC/62sA39gIOnFDKy99QSlWlafvovvUpMJxCLPuhPIAYRD8euwwQ9D ppuJWk8Ehgswnv/gW3aO5nrlV9Hx7s92Uh99Gzb4B3HsyCStvryFoU72hqWnkNEiwC Zj+YaWQLXwthq7UdfXshX+QfKiz0ZUO9XqZ3wB04= Authentication-Results: mxback8g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt6-9bdf92ffd111.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id X7HBmBhRkX-Z7ki5Jxe; Sun, 21 Jun 2020 00:35:08 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <0a57d76dfbbe21b9fca423482ce86884f72c3f43.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Ricardo Wurmus Cc: Eli Zaretskii , joaotavora@gmail.com, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sun, 21 Jun 2020 00:35:07 +0300 In-Reply-To: <87tuz5sbfe.fsf@elephly.net> References: <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <87tuz5sbfe.fsf@elephly.net> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a02:6b8:0:1a2d::601; envelope-from=hi-angel@yandex.ru; helo=forward101o.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 21:35:16 -0000 On Sat, 2020-06-20 at 22:57 +0200, Ricardo Wurmus wrote: > Konstantin Kharlamov writes: > > > I also don't think GNU projects are any good to make examples of. This is my > > general experience of seeing how new projects get under GNU umbrella to get > > never heard of (which I attribute to points listed in my starting mail, > > since > > most of them are unspecific to Emacs). > > This is where I stopped reading and considering your points to be valid. lol. This is a very helpful mail, thanks for contributing to discussion! > There are countless things that determine whether a person will > contribute to a project or not — even projects that you “don’t think […] > are any goodâ€. Pinning a complex behaviour on commit message format is > beyond ludicrous. I didn't. From MAILER-DAEMON Sat Jun 20 17:36:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jml9c-0003OW-7q for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 17:36:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml9a-0003Mu-OI for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:35:58 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:43848) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jml9Y-0006L2-79 for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:35:58 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KLI21k021940; Sat, 20 Jun 2020 21:35:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=zD/4G5ZV95HjRgWAoNlur2+u6gEsSsqWw9p8KsP3tkw=; b=i1aTeUse0vGm8Z8bQxCZSuZLQxUIB6hDTE3Sc8T+VIFdoKVsmDlUFqi6sx7+nfuo0/k+ 9yZrqVc3pE+sUS/2FekH30C1ZlKCiga9YftOGEa9l7Pj+fbX7loaCDCBVPkgCDB3sWGD uYFsBJyoeur5KmB2M9u+cmO5uvYxaRYzk6yOW4V+6n6L/OEtdEa8RNbce0xaTdhQH9MA Nt5fRHuFBFmfQk7J9yHA5d4+1x3z0XtPlVvaJCZPeJCA/AjrKF+7Aod7MohA3jzLG1hq PEKAYQwyS2MPQoNaqQWcy19mYnsET7NPCD7OEiEHmJdUABsfbk1udKHDdlXaXK0JDh8s rg== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2120.oracle.com with ESMTP id 31sebb9k0b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 20 Jun 2020 21:35:50 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KLIlcJ149062; Sat, 20 Jun 2020 21:35:50 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3030.oracle.com with ESMTP id 31seb7bfhv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 20 Jun 2020 21:35:50 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05KLZnJa023359; Sat, 20 Jun 2020 21:35:49 GMT MIME-Version: 1.0 Message-ID: Date: Sat, 20 Jun 2020 21:35:48 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Jamie Beardslee , emacs-devel@gnu.org Subject: RE: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> In-Reply-To: <87sgep35cb.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 malwarescore=0 mlxscore=0 spamscore=0 mlxlogscore=767 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200160 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 cotscore=-2147483648 mlxscore=0 suspectscore=0 mlxlogscore=785 bulkscore=0 lowpriorityscore=0 clxscore=1011 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200160 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:35:53 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 21:35:59 -0000 > I've just started using save-place-mode, and found that bookmarks really > get in the way. I figure there are probably a lot of people that use > bookmarks just to save some common files, rather than locations within a > file. (FYI: Half of your message ended up as an attachment. At least that's how = my email client, Outlook, delivered it. Maybe a problem at my end; dunno.) You don't specify what the actual problem is. How does a bookmark interfere with save-place? Maybe provide a step-by-step recipe to show the problem, starting from `emacs -Q' (no init file). Just what behavior are you looking for? Do you not want to open the file at all? (If so, what do you want the bookmark to do with the file, instead of opening it?) If you want the bookmark to open the file, where do you want the cursor to be in it - at what position? You can create a bookmark to (almost) anything - a file is just one possibility. And a bookmark can do (almost) anything with the thing it targets. A bookmark can target a file in any way you want, including (but not limited to) opening it at a given position. You can easily bookmark a file so that the bookmark opens it with the cursor at position 1, for example. (And you need not visit a file in order to bookmark it.) Finally, a bookmark need not have any `location' field. In sum, it's not clear to me: (1) what problem you want to report, (2) why you think the solution is to not include a `location' field, and (3) why you (apparently) think that a bookmark requires a `location' field. From MAILER-DAEMON Sat Jun 20 17:59:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmlVv-0008VF-7X for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 17:59:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60990) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmlVs-0008Pu-UO for emacs-devel@gnu.org; Sat, 20 Jun 2020 17:59:01 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:36349) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmlVp-00010j-1z; Sat, 20 Jun 2020 17:59:00 -0400 Received: by mail-wm1-x333.google.com with SMTP id p19so1698212wmg.1; Sat, 20 Jun 2020 14:58:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=JiBXyUyvv5lxLZoe3kKGD1yfim3XmfVJh4hYjoqAULY=; b=vbc6PKfm7TMMUekU1msMB7GY4phQ786wkvnQg49aGDqazCKhFVWzS9PSz6mlGm5IwQ KSDl+JLfJZ60QSiOSUcE1iJrQgDk0xip6XWsUhwFcxaN1QA1U9eFaCqjqX+znX59Fk+i I6ebk2ESRPoAYRPkGEZa4A4lUCrk/ffg0hQiEnrtNKg1d4gj+m/zbaYM1hNd35TPOCdw qELU9Hw0robYRxsC3bsRVPZ8GUwT2dFrT7VXnpRZ06Ni1uzRKLvqclHFrugr9hDJ5FyI Nd0Y3GEvWOZeUqleya6bJU+gEbJXA6X/2iWC3y13T5gd3cfckN1H2mybzry1nSqZM7rf jU9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=JiBXyUyvv5lxLZoe3kKGD1yfim3XmfVJh4hYjoqAULY=; b=tLo9VpANYikMrsIr8pG2pa2pKWSw3P8UHhZbM8+MZy5VPb6B//JYRdLbsiuG/Q686x 2Gt/Th2cSJ26mK6SAiQgAGzLnzuKxtf0/gNUKnFmTbSa2b4+3j1Xd04LKO6Mgo3OiWEE 8H5as8F/z3gFsaocS5f9Yv1pC4nYRSVca1P3lw7rLoBvaLNUN8lBG0whPDLVjBjAxdmx YRWrGnByNbPqzw1mY75npMTwKZfM7+y1ePCbE9/4sLaVcwfFGlab8SUzAP8K3rFVAn4R qtKruREER04uMjFo7Akac43PfG8dADFp5IJ9arMAXHkaY6wXqmGElJ1liaND8g9pjwvw GO2Q== X-Gm-Message-State: AOAM533C1XUpCQSA/CUlTWvzAaSiVH/wFn2IKphqHVNmWUIZbC4u9CWX 338suKaEq5uXd/UmBoy/ofOQYLYl X-Google-Smtp-Source: ABdhPJxedZZ2I5R5GSvG1tWPGkBGGH1T743soJoAXUK9bo/83LvB5/pYpyTajuIdEPASO5qAms/TLw== X-Received: by 2002:a1c:3b8b:: with SMTP id i133mr10257605wma.111.1592690334552; Sat, 20 Jun 2020 14:58:54 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d132sm3680733wmd.35.2020.06.20.14.58.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 14:58:53 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theothornhill@pm.me, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <83eeqbxevp.fsf@gnu.org> <87bllfnjy5.fsf@thornhill.no> <83d05vx9or.fsf@gnu.org> <877dw3ne2z.fsf@thornhill.no> <83a70zx7ag.fsf@gnu.org> <874kr6oqz1.fsf@thornhill.no> <834kr6yk27.fsf@gnu.org> <83y2oix431.fsf@gnu.org> <158b0bbb-01c1-0a3e-ceaa-69eb9c2b22f4@yandex.ru> <83pn9uw6cm.fsf@gnu.org> <0a2b7b06-f6ac-2e33-0901-d56e3f94f260@yandex.ru> <83v9jlvrqi.fsf@gnu.org> From: Dmitry Gutov Message-ID: <6c2c6171-bf8a-0aa3-f8d5-f7dea44709c7@yandex.ru> Date: Sun, 21 Jun 2020 00:58:51 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83v9jlvrqi.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=raaahh@gmail.com; helo=mail-wm1-x333.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 21:59:01 -0000 On 20.06.2020 15:36, Eli Zaretskii wrote: >> What I meant is, is there harm in modeling that kind of project as VC >> project with just lots of exceptions (additional ignores). Or is that >> just difficult. > > I don't understand the question. What is a "VC project", and how is > it relevant to the use case I described with grepping another > directory to see how others solved some problem? A VC project is a project recognized by the VC project backend. It's tweakable by customizing project-vc-ignores (or, more preferably, setting that variable in dir-locals.el) and the project-vc-external-roots-function variable. >>>> OTOH, we already have a customization point that allows to exclude more >>>> files than .gitignore does (the project-vc-ignores variable). >>> >>> I don't think exclusion alone is enough. We need also a way of >>> _including_ files in a project. >> >> It's on my list. As long as we're talking about whitelisting files in >> the same directory tree. > > That's part of the issue, but it isn't all of it. > >> But also see project-external-roots. > > That supports only entire directory trees, so is not selective enough, > IMO. Perhaps. But does that affect your usage? I'm still not sure about the entirety of your usage scenario. You have this project, which is current. Do you switch to other projects in the same session? How do they generally look? Is is generally the same idea of having an arbitrary set of files and buffers? >>>> *And* one can use the project API to introduce a project backend that >>>> does not rely on VC repositories. >>> >>> I think we should have commands to do so in the core. It's too basic >>> a capability for any IDE for us to leave it to add-ons. >> >> Commands? Project backends are applied automatically in the current model. > > Don't understand what you are saying here, either. Are you saying a > backend cannot support some notion of starting a project, or of adding > a file to a project? If we do decide on the separate backend approach, this can be done. But the commands would need to clearly specify that they work (and probably enable) a particular kind of project backend. So this is workable, but a bit clunky, so I'd like to see a bit more general support for this approach before adding it to project.el. But that shouldn't stop us from working on it. BTW, you're saying it's a "basic IDE capability", and that other editors have that. Do you have a particular editor in mind as an example? So we're speaking the same language. From MAILER-DAEMON Sat Jun 20 18:21:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmls4-0003lP-0z for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 18:21:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmls3-0003lJ-1m for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:21:55 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:42360) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmls1-0004Mz-4S; Sat, 20 Jun 2020 18:21:54 -0400 Received: by mail-wr1-x42f.google.com with SMTP id o11so5392836wrv.9; Sat, 20 Jun 2020 15:21:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=1Pw+zbpONxE2VynnJfFiYqxFn2iT4ekmclmdrcZK5nE=; b=USpVCE9OwS5cam/DF4gGyAydI6PBR1u1prI3j64NUQRbDo8KnDr5wgDGfAze5visFV dcmesPIrWpPy5Q8dzIjK0IZWiuE+AeTRCj9sfGr6nrSmcZmyiRccr38EMyR+WmEkcRGV CHKLgh+eT9nLpVyb69KPyoegUqMm0uvg7VjMIfyFEZfpUkBNPoXJLwdLE8qfGhSn4miG poTdU1kcw0rbaTDo3sb6HmUeKC+QOrXaBEWputZ+NgUs/eQNEob9OlS1EPmaec1HqU/y cxsWYcESApO0jx7vf9sy3JUCz0v1k6duHrKxZabPYo80C7EpgKw22DYGCb0yZYfdBzc/ jkvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1Pw+zbpONxE2VynnJfFiYqxFn2iT4ekmclmdrcZK5nE=; b=mZzwTXWhv8LFhsFbFzmZePK+9GODuTeXp/jEoiOwwHwvBKDw45dAPLQK+DIY1wad4t 0Til9NU3VNcmxuD3pga+K7Y+a1RNkFAMqIjpjihk5x5ZRv/lSRKEhjvkZdi0MyMynpO6 IQwPBTS0FMMWa9Iu8WPugwRw+P7btA4DA6OWhXJAm45MxhEk3HU5yqkyDU6fvmJcyi14 GsDRrd8qb7LvjaucYInGaemjt6s/hqHIPhtabJ/J16Z7WP6eWq2XObzJzQSdig0rnsZt qu3kpqrsnqz8MzwlMTuLvXseGCaI/XUJOfJzvS35pQcH14E/CUOkbn9t3lB2YE6H8Ziz ZRgg== X-Gm-Message-State: AOAM530SvzzpFUkBAeTyvpc1u4093etBcUb3N4M5G7cwnn9ghZM3q10z wEsU9Xz/48Oe97szgYfgYpnOuejT X-Google-Smtp-Source: ABdhPJxbZG1Jhi/C4qpRNm3eZA+qKY95jEXlMyCD1HROuBicmoy8CDxeY6+n9TEGmYJVXxsTDsUWiw== X-Received: by 2002:adf:fe0b:: with SMTP id n11mr10605887wrr.245.1592691710983; Sat, 20 Jun 2020 15:21:50 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id s2sm10869559wmh.11.2020.06.20.15.21.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 15:21:50 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <87mu4ym6f6.fsf@thornhill.no> <834kr6vymb.fsf@gnu.org> <90f4c9e8-bf8d-3b27-a8a9-ed44c5d23839@yandex.ru> <83y2ohvrxl.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Sun, 21 Jun 2020 01:21:48 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83y2ohvrxl.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=raaahh@gmail.com; helo=mail-wr1-x42f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 22:21:55 -0000 On 20.06.2020 15:32, Eli Zaretskii wrote: >> On 20.06.2020 13:07, Eli Zaretskii wrote: >>> In any case, my proposal was not about the API itself, it was more >>> about the implementation of the API. For example, we could have an >>> implementation of the generic project-files API that consulted some >>> list instead of asking the VCS or the filesystem to provide the files. >> >> You can of course do this already, in 10 lines or so. > > I'm a user. I don't want to write code every time I want something > simple from the project-related commands. I expect such simple use > cases to be supported OOTB. I think we're generally comfortable recommending users customize something in their init script, if that's a one-off request, and nobody else comes with the same request. Of course, when such customization turns out to be useful and elegant enough, we can always incorporate it later. For less technical users, we sometimes offer a snippet to use. Even if you just do this for yourself, it can be a valuable of the API is defined, whether it can support your usage scenario this way. >> But imagine you did add such a backend where project-files returns an >> arbitrary list of files. And you use it. >> >> How would project-switch-to-buffer consult it? Will it have to call >> project-files now, as opposed to just using project-root as the basis >> for comparison? And then compare buffer-file-name of all file-visiting >> buffers against that list? > > That's one possibility, yes. I'm asking for a concrete suggestion, if you have it. And I have just outlined a problem with the most obvious approach. >> That would work for smaller projects, but in large ones project-files is >> not instantaneous, so they will be penalized in performance by such an >> approach. > > We have faster data structures than lists. We could use them. List as a data structure is a secondary problem. Big projects can take a while to fetch that list. > And in any case, we should identify the needs first, and then > implement the features that support those needs. Rejecting some of > the needs because they don't fit the current implementation is the > wrong way for designing features such as this, which is supposed to be > part of our IDE infrastructure. As outlined above, even if I recommend trying to implement a usage pattern in one's init script first, that doesn't necessarily mean I rejected it. >> And project-switch-to-buffer should work with all kinds of projects. > > Yes. And one such kind is an ad-hoc collection of files and buffers, > where only the user knows which ones he/she is interested in and which > ones he/she isn't. Every IDE I saw supports something like that, so > we should do that as well, IMO. I'm curious about those "every IDE". I don't recall such a feature in ones I tried. Perhaps I just didn't use it, of course. >> That also wouldn't solve the problem of non-file-visiting buffers like >> Grep from your example. > > You talked about project-files, so buffers that don't visit files are > excluded, of course. But an indication that supports marking buffers > as belonging to a project could support both file-visiting and non > file-visiting buffers. Buffers are essentially transient. An indication could be a list of files, but the project API has no provision for "list of buffers", and such a thing has never come up until now. So my first instinct would be to make this customizable through some hook, rather than extend the API. From MAILER-DAEMON Sat Jun 20 18:24:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmluv-0004x6-EC for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 18:24:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36468) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmluu-0004wz-Cm for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:24:52 -0400 Received: from ciao.gmane.io ([159.69.161.202]:46808) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmlut-0004ec-1Z for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:24:52 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jmlur-000Buh-4M for emacs-devel@gnu.org; Sun, 21 Jun 2020 00:24:49 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Jamie Beardslee Subject: Re: [PATCH] Add user option to disable location in bookmarks Date: Sun, 21 Jun 2020 10:24:42 +1200 Message-ID: <87blld2x5h.fsf@gmail.com> References: <87sgep35cb.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:+JLTyF4iOSdS2I859YTa14ixXUs= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:24:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 20 X-Spam_score: 2.0 X-Spam_bar: ++ X-Spam_report: (2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 22:24:52 -0000 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > You don't specify what the actual problem is. How does a bookmark > interfere with save-place? Maybe provide a step-by-step recipe to > show the problem, starting from `emacs -Q' (no init file). =E2=80=98bookmark-set=E2=80=99 saves the position--by which I mean point an= d context strings--with no option (that I can find) of not saving it. When using =E2=80=98bookmark-jump=E2=80=99, point will always be moved to that positio= n, ignoring the position from save-place. > Just what behavior are you looking for? Do you not want to open the > file at all? (If so, what do you want the bookmark to do with the > file, instead of opening it?) > > If you want the bookmark to open the file, where do you want the > cursor to be in it - at what position? My patch allows the user to choose whether or not the bookmark record should be in control of the position. > A bookmark can target a file in any way you want, including (but not > limited to) opening it at a given position. You can easily bookmark a > file so that the bookmark opens it with the cursor at position 1, for > example. (And you need not visit a file in order to bookmark it.) > > Finally, a bookmark need not have any `location' field. I understand this. I think it would be useful to have a simple accessible way to effectively disable the point manipulation part of bookmarks. It=E2=80=99s not exactly convenient to edit the bookmark file by hand every time a bookmark is created just to disable this feature. =2D- Jamie --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFNBAEBCAA3FiEElxJbPtj12sn/xkPXc0qyklu3X7MFAl7ujKoZHGJlYXJkc2xl ZWphbWllQGdtYWlsLmNvbQAKCRBzSrKSW7dfs8XFCADCuxv7vP1kzquXMDO9meKP 1BSxG/BE85Y0AtPFj3MMvYcFj+RT3XQkErdQ8jE1QwAxJgE5nQWVtpaXF+/fyWEx 4ytEeYPAEkfTxnp9r7mYonVKuPkWGsqFB+GcHp2x7hRZL3jVHOG48XVzap7uh2fg uQHX8EXDxFNc88qO2SwlvccRDqdHjfmNMl0fIlQIQs/tyXxq/cG/vWeKbMXbOVYc nkL5Ggyw8Gos7mGYcvoV8aoTRuShu7njjJOeugizYNIguyJdrIT8WJrjPiUcMd4g 4erwDFVm0NVtdMjJOpvJMBTqVExpYfW6a4Z9SuAvoTGf90JrYMjz4FbLKTYG5Zfh =BxfX -----END PGP SIGNATURE----- --=-=-=-- From MAILER-DAEMON Sat Jun 20 18:25:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmlvR-0006Nt-MC for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 18:25:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmlvQ-0006I3-CD for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:25:24 -0400 Received: from forward101j.mail.yandex.net ([5.45.198.241]:52011) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmlvN-0004ts-Fx; Sat, 20 Jun 2020 18:25:24 -0400 Received: from mxback9j.mail.yandex.net (mxback9j.mail.yandex.net [IPv6:2a02:6b8:0:1619::112]) by forward101j.mail.yandex.net (Yandex) with ESMTP id B9DFD1BE1195; Sun, 21 Jun 2020 01:25:17 +0300 (MSK) Received: from myt5-aad1beefab42.qloud-c.yandex.net (myt5-aad1beefab42.qloud-c.yandex.net [2a02:6b8:c12:128:0:640:aad1:beef]) by mxback9j.mail.yandex.net (mxback/Yandex) with ESMTP id MpxawLelby-PHjGMfOo; Sun, 21 Jun 2020 01:25:17 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592691917; bh=TSya3QaurdlinmPFTepWqbOkgsJnh71HjYNj7kY9z+A=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=lBmgKct4ipwRWiGtxyp0zCdJ18xdWd3MY7bhVwHzL2ThTBpK0c2woFduex2YfNBWt IepimlLzNRnYvCYKVFI4RkXt2RUkV3KwPCx1DI+NF37EzZE7EuDu4nMxG8N/HpD/eB g+isI72XYi1YwKhvMvUSsOwuRB2MjkyiB1gEgdwA= Authentication-Results: mxback9j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt5-aad1beefab42.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id o5xQh8mW4A-PGJuiTbo; Sun, 21 Jun 2020 01:25:16 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, joaotavora@gmail.com, dgutov@yandex.ru Date: Sun, 21 Jun 2020 01:25:15 +0300 In-Reply-To: <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=5.45.198.241; envelope-from=hi-angel@yandex.ru; helo=forward101j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:25:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 22:25:25 -0000 On Sun, 2020-06-21 at 00:31 +0300, Konstantin Kharlamov wrote: > On Sat, 2020-06-20 at 21:43 +0300, Eli Zaretskii wrote: > > > From: Konstantin Kharlamov > > > Cc: rekado@elephly.net, joaotavora@gmail.com, dgutov@yandex.ru, > > > stefan@marxist.se, emacs-devel@gnu.org > > > Date: Sat, 20 Jun 2020 21:04:23 +0300 > > > > > > > Our experiences are different, then. I find them very important in at > > > > least some cases. > > > > > > Right. I should mention though, my experience is not specific to myself. > > > Most > > > non-GNU projects (actually, all I have seen) don't require having the > > > list, > > > but > > > do require good commit messages. > > > > Like I said, latest GCS leave this decision to the project developers' > > discretion. > > > > You may also wish to check how long do those projects live, and > > compare that with Emacs. Not every technique that is good for a > > 5-year project will scale well for a 35-year one. In my work on Emacs > > I quite frequently need to look at changes made 30 years ago, using a > > different VCS. > > Right, as well as not every technique that was good 35 years ago is still as > good nowadays. > > > > I also don't think GNU projects are any good to make examples of. This is > > > my > > > general experience of seeing how new projects get under GNU umbrella to > > > get > > > never heard of (which I attribute to points listed in my starting mail, > > > since > > > most of them are unspecific to Emacs). > > > > I hope you realize how saying that makes your opinions matter much > > less, do you? > > No, I don't. Are you implying that voicing bad opinion regarding GNU on a GNU > mailing list may lead to some people to start ignoring me? If so, I'm fine > with > it. You see, my opinions are based on facts. My interpretation of them may be > wrong, but if I expressed them, I am not aware of it. On this mailing list, we > carry technical discussions, which means expressing arguments and counter- > arguments based on facts, and being ready to turn out to be wrong. > > Ignoring someone based on their opinion instead of trying to prove them wrong > is > not a technical behavior. These are not very technical people, they sometimes > go > personal, so if their reaction is a silence, that's fine with me. > > FYI, for me even participating in discussions is hard, for personal reasons. > But > I am a software engineer, and I get the boundary between personal feelings and > technical discussions, so I get over it. > > > > git log -500 --format="%ae" | grep -vP > > > "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|hu > > > aw > > > ei|c > > > odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft| > > > mi > > > cros > > > oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproj > > > ec > > > t|si > > > five)\.(org|com|de|cz|cn)" | sort -u | wc -l > > > > > > Results are: > > > * GCC as of commit 445d8da5fbd: 15 > > > * Clang as of commit 7b201bfcac2: 49 > > > > > > This is some pretty big difference! If I expand the commits range, the > > > difference increases further. > > > > GCC is alive for 33 years, so I think your theory eats dust. Many of > > the GCC and GDB developers get paid for their work, but that doesn't > > mean the project is less viable, and the long history of both GCC and > > GDB is the proof. > > Okay, let me say beforehand that both GCC and Clang are very active projects > right now. Just in case, so there's no misunderstanding. > > So, times are changing. In older times there were no standard to development, > Git was not as popular, development practices are varied too. So, as long you > could get your patch to a project, any odd contribution requirements were > fine, > they hardly would set a barrier. > > But these days Git got over all other VCSes (and for a reason), so using SVN > or > Perforce, or whatever, is a barrier to contribution. 12 years ago Github was > founded, and then also the open-source clone Gitlab appeared. These two pretty > much set the standard development model nowadays (for a reason too). There > still > are projects that use other models, but this is a barrier to contributors. > > What I'm getting at is that your reasoning that since GCC is 33 years old it > will live on does not work. For a project to "live on" it needs to be active. > Sure GCC is active! But its activity mainly stems from paid people and > maintainers. Whereas in Clang a large chunk of it stems from contributors. Let > me repeat, paid people come and go, so do maintainers (they may burn out, or > just move on). These contributors are the ones who will become new maintainers > and the ones who advertise the project in their environment. > > I hope it makes clear the future of what project looks brighter. Btw, I figured I botched my calculations by using last 500 commits. If in one project a few persons posted huge patchsets, but in another nobody, then clearly the latter gets more mails in last 500 commits, which is wrong. So, I recalculated by looking at date of the last commit of those "500" in GCC, and used that date on Clang. I made sure to sort out other corporate mails too. Command I used is: git log --since="Jun 8 21:34:46" --format="%ae" | grep -vP "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huawei|c odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|micros oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproject|si five|imagelabs|xilinx|sap|sas|sigmatechnology|sonarsource|ericsson|lowrisc|hight ec-rt|polymagelabs)\.(org|com|de|cz|cn|ai|se)" | sort -u | wc -l So, now GCC still gets 15, while for Clang this number gets increased to 89. From MAILER-DAEMON Sat Jun 20 18:51:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmmKN-0005O3-4B for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 18:51:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmKL-0005N4-CI for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:51:09 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:1240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmKG-0008NY-4U for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:51:08 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A735F44062D; Sat, 20 Jun 2020 18:51:02 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 2EAEF440533; Sat, 20 Jun 2020 18:51:01 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592693461; bh=iHXEBGedKQ+hzroH/Ax0682iRvZJsk+ENzSJjuesZ9o=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=VHd58bFI2xHuhGykftLsOT4ui8v4TxvdZaxGLaG81q4mpw0pc9cgH7iwdQbjjGA+R GbZPRupkyTTdMq3XsFWz2WccmMVs/Uk4fwzmYy4fNwL63mjVGO3A0DtHOP06Lbcknt UYlJorxKI5eS7+0HHtpM9qWQvsxzcM+MrToUCk16Be3dzxfnSu3T63zAIUUu2/XZLl xtJwB4k+jZaXAo/ZtIgRQk1+suRvYnoSrfOH4zy+GTRWr9GNW2doXidADjmOJA9LhQ sFKl5WfbdLJ6C3Yb6mlusRr58v7O6bhrl7HQFvBENKiIMDz9uPGEPbrw2jQ5efcPj8 YxKaa1VVl554w== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 00B711201F1; Sat, 20 Jun 2020 18:51:00 -0400 (EDT) From: Stefan Monnier To: Jamie Beardslee Cc: emacs-devel@gnu.org Subject: Re: [PATCH] Add user option to disable location in bookmarks Message-ID: References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> Date: Sat, 20 Jun 2020 18:50:54 -0400 In-Reply-To: <87blld2x5h.fsf@gmail.com> (Jamie Beardslee's message of "Sun, 21 Jun 2020 10:24:42 +1200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.154 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:51:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 22:51:09 -0000 > =E2=80=98bookmark-set=E2=80=99 saves the position--by which I mean point = and context > strings--with no option (that I can find) of not saving it. > When using =E2=80=98bookmark-jump=E2=80=99, point will always be moved to= that > position, ignoring the position from save-place. Yes, that's on purpose. > My patch allows the user to choose whether or not the bookmark record > should be in control of the position. I think it makes sense, but I think it shouldn't be a global option. Maybe it should be a setting saved with the bookmark (i.e. when saving the bookmark you could specify not to save the location) or otherwise specified when jumping. Maybe a prefix command which causes the subsequent `bookmark-jump` to ignore the location info (and it could also cause a subsequent `bookmark-set` not to save the location)? Stefan From MAILER-DAEMON Sat Jun 20 18:57:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmmQo-0007P2-Jq for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 18:57:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40352) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmQn-0007Ot-Ny for emacs-devel@gnu.org; Sat, 20 Jun 2020 18:57:49 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:57856) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmQl-0000rJ-98; Sat, 20 Jun 2020 18:57:49 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KMrU3V156834; Sat, 20 Jun 2020 22:57:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=FMZTALDer4a9lf1XUMEeAto3KlSFjumxFm1kj2qTj3w=; b=sw0Ok63HEOD55Iqb5GfQoW+bnlRTUZtBy27aN0au8nTDaqQYfbzMpN2yI3ivd5nsdOi+ p9/cbLPbnU+Pus3FNx0ALvrGPViNjnNYU+YNWPni147zWxI03AXlJJkQ9XMZHrpAB0jc D5MHkMKR47eUG/oGcaxT9eiTy7tfxkWDPzBs9yySdlvk+/ffNFn7lqV2ldI7eMsMCYY8 B8mgSDTeN1MD69a4tnme3a9fVW9OeKQczzokTmtiAXoqAmeR+ee74ycImeif5ecmX1XD c+zKh2vVzM/GVWUqWW95Js9SH/12FScl2JkYyjUmkKMOKBk3TvZmVHYnMwF9hIhIUTDw fg== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by aserp2120.oracle.com with ESMTP id 31sebb1prn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 20 Jun 2020 22:57:43 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KMqm6g122556; Sat, 20 Jun 2020 22:55:42 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3030.oracle.com with ESMTP id 31seb7dewq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 20 Jun 2020 22:55:42 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05KMtacW030029; Sat, 20 Jun 2020 22:55:36 GMT MIME-Version: 1.0 Message-ID: <045712ee-02de-4cdf-b33a-a617644792af@default> Date: Sat, 20 Jun 2020 22:55:35 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Eli Zaretskii , Dmitry Gutov Cc: philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org Subject: RE: master 1e3b0f2: Improve doc strings of project.el References: <<87bllfqj82.fsf@warpmail.net>> <<83o8pfxhzq.fsf@gnu.org>> <> <<83imfnxgt3.fsf@gnu.org>> <<626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru>> <<83h7v7xf7w.fsf@gnu.org>> <> <<831rmayj55.fsf@gnu.org>> <<6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru>> <<83wo42w83e.fsf@gnu.org>> <<6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru>> <<831rmavsuq.fsf@gnu.org>> In-Reply-To: <<831rmavsuq.fsf@gnu.org>> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 malwarescore=0 mlxscore=0 spamscore=0 mlxlogscore=999 phishscore=0 suspectscore=1 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200172 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 cotscore=-2147483648 lowpriorityscore=0 phishscore=0 bulkscore=0 clxscore=1011 impostorscore=0 malwarescore=0 priorityscore=1501 spamscore=0 mlxscore=0 adultscore=0 suspectscore=1 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200173 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:57:45 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 22:57:50 -0000 (Caveat: I haven't been following this thread, I'll likely continue to not follow it, and I know almost nothing about project.el.) >From one msg: > > And bookmarks/switch-to-buffer/registers are not good > > options for this goal? >=20 > The problem I raised is that such a Grep buffer will not be offered as > a completion candidate when it is definitely relevant to my work on a > project. You suggest that I don't use the project.el commands, which > is exactly what bothers me: it means that project.el commands don't > support well a very simple project-related activity, which for me is > a very frequent one. >From another msg: > I proposed to find a different way of telling which buffer is related > to a project, other than by looking at its default-directory. We > could design a way of doing that which would then support adding > buffers to a project quite easily. But Dmitry doesn't think we should > go that way. >=20 > More to the point, my question is how would adding a buffer to the > project be recorded and where, under your proposal? I imagine that project.el defines a project as including something like these things, and perhaps some other stuff: 1. A set of files. 2. Possibly a set of other Emacs/Lisp objects: buffers, vars, whatever. 3. Associations among such things, and among them and other things, including things (e.g. tools) outside Emacs. I imagine that project.el can persist a project. I'll just mention that bookmarks, bookmark files, and bookmark-list displays are objects that can be persisted. A bookmark can record nearly anything: a set of variables, a location or set of locations,... anything. Bookmark+ takes advantage of this generality in ways that could be useful for project mgt. I mention this because vanilla Emacs bookmarks could too. I'm not proposing using Bookmark+, but just mentioning some of what you can do using bookmarks that I think can be relevant to working with or defining projects. You can bookmark a Dired buffer, with its markings, omit-set, switches, inserted subdirs, hidden subdirs, etc. And Dired can list an arbitrary set of files and dirs; it need not show only part of a single tree. You can bookmark a set of Dired bookmarks that represent a dir hierarchy and are opened together. You can bookmark buffers, and locations in them. Of course, if restored from persistence the bookmark must know how to regenerate the buffer. One thing I haven't gotten around to implementing, but is possible, is to bookmark the marked buffers in either Ibuffer or Buffer Menu. (Again, supposing knowledge of how to regenerate or recuperate the buffer in a new session.) You can bookmark a function. For example, a bookmark to restore a given `*grep*' listing, by recomputing it, records a function that performs the given `grep' invocation. >From a `grep', `occur', compilation, etc. buffer you can bookmark one or more of the individual hits, so that jumping to such a bookmark takes you to the hit destination (e.g. position in the grepped file). You can bookmark all hits visible in the `grep', `occur', etc. buffer, so after editing to remove some hits you can get the effect of having "marked" some and then bookmarked each of the marked ones. In Dired, you can bookmark each of the marked files or dirs. In the bookmark-list display, you can dired the marked bookmarks, i.e., create a Dired buffer with just the files and dirs that are the targets of the marked bookmarks. You can bookmark a bookmark-list display itself (what `C-x r l' shows). This includes filtering, sorting, etc. You can bookmark a bookmark file, so that jumping to the bookmark switches to that set of bookmarks or loads them additionally. There are bookmark jump commands specific to different types or sets of bookmarks. E.g. jump to the bookmarks for a specific project, choosing only among "project" bookmarks. There are many ways to define a project in this regard. One is to mark the "project" bookmarks in a bookmark list and use `C-c C-j' to define a command that jumps to them (they are the only completion candidates). You can bookmark a desktop. Besides bookmark-file bookmarks, bookmark-list bookmarks, Dired bookmarks, desktop bookmarks, etc., as ways of organizing bookmarks into sets (~projects), you have tags. You can tag any set of bookmarks any way you like, including with any Lisp object as tag value instead of just a string. You can list or complete against bookmarks that have certain combinations of tags. So your wanting to get to a `*grep*' buffer that belongs to a given project is realized trivially: just tag it for the project, then use a command that jumps to a bookmark with that tag (i.e., only those bookmarks are completion candidates). Tags are the most flexible way to organize bookmarks. You can even use bookmarks to tag files or other objects in various ways just for purposes of organizing them, whether or not you ever use the bookmarks as a way to visit them. Different projects can have different tags for the same sets of files, directories,..., whatever. No need for copies - just different tagging. Bookmarks are persistent pointers. If a "project" is mostly about grouping things to be able to act on them together (search, visit, apply a tool, etc.), and if a "project" should be able to be persisted, then consider that you might do well to leverage bookmarks - a flexible, open-ended way to persist and restore or otherwise act on nearly anything. If "project" means code-development project for you, or even if it means something else, what it does is likely to be more or less a subset of what you can do with bookmarks. You might want to build features for code-development project using, or on top of, bookmarks. And if you're thinking of adding very general capabilities to project.el, you might want to think instead about adding them at a more general level, and then adapting them for the more specific use for projects. Just a thought. ____ For more info, search here for "project", "tag", or any other terms used above: https://www.emacswiki.org/emacs/BookmarkPlus From MAILER-DAEMON Sat Jun 20 19:11:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmme4-00061p-EQ for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 19:11:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmdy-0005sN-V7 for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:11:29 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:39101) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmmdv-0002xG-Rx; Sat, 20 Jun 2020 19:11:26 -0400 Received: by mail-wr1-x429.google.com with SMTP id q5so759522wru.6; Sat, 20 Jun 2020 16:11:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=r0Z/d9lUSsUPfrItPy2bp/Ytt81Zb0jq760qnSEux6Y=; b=afYBGaygqqU0upi3ekrPl7ageR1NXai2x/wHenGoWhBXZc80nVr4iITKUkqdkvgxO4 jZI1Ed8zbnYHCA5xnfm154SIzhWc+2OMo3ErcOqWkk0XA4aKe8eaZkj3bni8xBAaEviJ xF1DvLJ183e3RM0nBBoJ/+kSRFyDLrFciEJBUxnwh2g7A0xHbx3mAEGkpBAlBEWPYxQJ kZf2zYI423LOnuQF9dM6JC+2sQyUxSzKVlnJgypkw6WteDUDMkGOeQ0M62FherQAtabI Hi8QWUyRYpSX+47X4xyJ7EVk9RtKHA2jwcc+e6CVJJsfbQ6dj2LiaSHbHpR6QJQQ0gEh 7fgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=r0Z/d9lUSsUPfrItPy2bp/Ytt81Zb0jq760qnSEux6Y=; b=tY8sUK+U4VWy8BODlhIG1pMWYRoClXIwEOqhLmvguoT+7p6vs0aq5xRDrNhGQacvyV va7s3kiI71+HpHTVdI52w/ObMow9ZAquyMce5HatSoS7GeE9g5DSCgI+WFJsaaX8Dk6P wBS0NXaIlEIBJDFM2o3dA1q1lAHZed8ZiUd5gBKcRAjFNw7WKnSjHMWUgxVCTcZkF5iD yNuUUlPqdN9vtqrznHWSg2Nd/r8x/nMtwADAf9gakKzww/9gQDmWdvY3BddPYYTEzJ4z LXZBwRjj6hk0OMgs6h1ZtV7ufGtQrtz1eOJyqj6ozQTixZ5su4jzuvjMndp1a97O0Otw hItg== X-Gm-Message-State: AOAM533TKKFIgpeeea/+D1d4rnVCqh3RAJ8z4bKFQabdYnndyG7sepMV kR6LUONXG/isl9jKtJQakS93RiL7 X-Google-Smtp-Source: ABdhPJzYyeQoOZuNA7oyVaQwcEofIeO5buE+F815509Q8KNxz70+GuKIuTantdlLSdfxoA++sfaM+A== X-Received: by 2002:a5d:4286:: with SMTP id k6mr10662076wrq.140.1592694681570; Sat, 20 Jun 2020 16:11:21 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id z9sm2902335wmi.7.2020.06.20.16.11.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 16:11:20 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Sun, 21 Jun 2020 02:11:18 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <831rmavsuq.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=raaahh@gmail.com; helo=mail-wr1-x429.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 23:11:30 -0000 On 20.06.2020 15:12, Eli Zaretskii wrote: >> I don't know about that. Interpreting that literally would mean that >> such buffers would never be suggested because they "belong to some other >> project" (according to the reasoning which gave rise to this wording) no >> matter which of the projects is the current one: "the outer", or "the >> inner". >> >> So what we should say is just "belongs to the current project". > > Not sure I understand. The current doc string says > > "Switch to another buffer that is related to the current project. > A buffer is related to a project if its `default-directory' > is inside the directory hierarchy of the project's root." > > You want to change the last sentence to say > > A buffer is related to a project if it belongs to the project. > > ? It could say "A buffer is related to project PR if 'project-current', when called in it, returns a value equal to PR". But that could be considered tautological. So alternatively, the first line would just say Switch to another buffer that belongs to the current project. But only if the implementation is made more precise in this respect. >> The implication being that if it's inside a nested project, it >> doesn't belong to the outer one. > > How will this implication become apparent to the users, if the doc > string doesn't discuss the significance of being "nested"? The doc string of project-try-vc can describe that. Or the general description of VC projects, in the Commentary header and/or the manual. >>> No, it isn't. I'm working on a single project, but need to look >>> outside of its directory to find some information. A very natural >>> thing to do, and it doesn't mean I started working on another >>> project. More importantly, I do want that Grep buffer be available to >>> me as part of the current project, because I'm likely to return there >>> more than once. >> >> And bookmarks/switch-to-buffer/registers are not good options for this goal? > > The problem I raised is that such a Grep buffer will not be offered as > a completion candidate when it is definitely relevant to my work on a > project. You suggest that I don't use the project.el commands, which > is exactly what bothers me: it means that project.el commands don't > support well a very simple project-related activity, which for me is > a very frequent one. It is a possibility. But so far I don't understand very well whether your usage habits and the view of how a project should be defined are common enough, or fairly singular. In any case, we should weigh the added complexity of implementing it (using any of the proposed ways) against the added utility. For instance, you also said that you generally work on a single project at once (in an Emacs session). I could have misunderstood you there, but if that's true, the added benefit of using project-switch-to-buffer, as opposed to switch-to-buffer, would be marginal. The reason the former function was added, as I see it, is for people who switch between different projects in the same session to be able to "narrow down" their view of the buffer list, to more easily find the one they are currently looking for. >> Make sure project-vc-external-roots-function points to a function that >> returns a list which includes the "other" directory. By default, it will >> include the directories where tags tables reside. > > But I don't want all the files in that directory to be part of the > project. I want just the Grep buffer. Fair enough. > And anyway, coming up with a function that does some job is not a > user-level operation, at least not when the user needs to do it every > now and then, when the work on a project takes him/her outside of a > directory. We need easier facilities, like commands and simple-valued > variables. Alternatively, it could be a customization variable you could set in some .dir-locals.el. Or a full-blown configuration file, specific to a new project backend, that would list which files belong to which projects. Not sure if such configurations would reside in some "project roots" (the meaning of the term becomes a bit blurry when project files are allowed to reside outside of its directory tree), or inside .emacs.d. >>>> To reuse your argument, 'M-x switch-to-buffer' is still available for >>>> borderline cases. >>> >>> An argument that you dismissed previously. >> >> I dismissed it as in "people wanted to call this command less". But my >> specific wording also made provision for it being necessary at least >> sometimes. >> >> But you made this argument. So perhaps it may be good enough for your >> purposes. Am I wrong here? > > How can it be good enough for my purposes, but not good enough for > those of others? What kind of logic is this? Different usage patterns. I'm sure you're familiar with that notion. >> I don't want to dismiss your request outright, but we'll need to have >> some design which would fit the existing model and/or wouldn't be hard >> to support. > > I presented a critique of the current design, whereby the buffer's > default-directory is used to decide whether the buffer belongs to a > project. I presented several examples where this design doesn't do > what I as a user expect. If you don't want to dismiss that critique > outright, I'd expect you to come up with some changes that would > support the use cases I described. That is the expected response to a > critique such as the one I presented. I don't understand why you > expect _me_ to have some design, I'm not working on developing > project.el, I'm just a (potential) user of it. I don't want to dismiss the critique outright. Believe it or not, I really do want you, personally, to be happier and more productive as a result of things I do here. I spent several hours today just thinking about this discussion. But our workflows are different, and expectations are different as well, and it seems that your requests tend to conflict with some design choices I have originally made. One of them was to make the VC project a hands-off backend, one that immediately "just works" (or tries to), with a few possibilities for customization through local variables. Consider also that your critique might be based on a different view of what a "project" is. In my understanding, it is, roughly speaking, a directory with files. Some of them are "junk", build artefacts and the like. But the rest usually support a program, or a document, etc, and together they result in one whole. Some stuff working together. A project could have dependencies, they often reside outside of that directory (but not always), but they aren't as much a part of the said project. Consequently, if there is a regexp search across these files, I immediately consider that search (the process, and the search results) a part of that project. Because it searches in that project's files. No matter the end goal of that search. You seem to think (and this is only my guess, of course) that a project is a unit of work. And that whatever files, or activities, are pertinent to your current goal, are a part of that project. Hence, if you do a search anywhere, in any directory, but in pursuit of that goal, the search results are certainly a part of the current project. It is certainly a valid viewpoint, but one that I have never considered before. I _think_ (though I can't be sure) that the former viewpoint is more prevalent among other editors, and among our users as well. And with that definition, your example doesn't show anomalous behavior, and the outcome is something that a user would expect. Even if someone might say that they would be able to reach that Grep buffer quickly by this or other means. So I'm not sure where to go from here. If the latter viewpoint has more supporters, perhaps an new, alternative backend is the way to go. This would be a test of the API, how well it adapts to different goals. But it we were able to adopt the same language, perhaps that would be more productive after all. And we might reach the additional goals by other means. >>> I think that non file-visiting buffers are rarely related to a >>> project, an exception rather than a rule. My suggestion is therefore >>> to turn the table and come up with a list of such buffers that >>> _always_ are related to a specific project. And instead of using the >>> default-directory as evidence for the buffer's relevance, we may need >>> a command that explicitly makes a buffer related to a project. >> >> Well, Phil gave a list of examples. And in all of those cases, I think, >> default-directory worked well as an indicator. > > The same examples could be supported by having a list of buffers that > should be considered. Whether such an explicit list is a good or a > bad idea depends on how long it will have to be. That is why I > suggested to see how many such buffers are there, because I suspect > there are only a few. IMO (and I know at least some people who hold a similar view), constructing a list of buffers/files/etc that constitute the current project by hand, is not user-friendly. So I'd rather the default behavior didn't require extra hand-holding by the user. > By contrast, making a far-reaching decision that default-directory is > all we need, based on such a small sample, might produce sub-optimal > results, as I described. So far it's not a done decision, and a lot can be improved as a result of this and nearby discussions. A far-reaching decision would be to make an API change, or to add a new backend. From MAILER-DAEMON Sat Jun 20 19:17:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmmk3-0002d0-Ie for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 19:17:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmk1-0002b7-VT for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:17:41 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:36622) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmmjz-0003lp-Tb; Sat, 20 Jun 2020 19:17:41 -0400 Received: by mail-wm1-x332.google.com with SMTP id p19so1799548wmg.1; Sat, 20 Jun 2020 16:17:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=upEu1toL4agmahkZDUUWy5dcZhSdTxRZxxRrjhKIiDs=; b=DiiRbfckl/6344kRPsS0HondANDuLllXiULnwkfHk7ODM91WunDoBu6S8nam0GZdKb B4ScaE50zZbpgflY2NxkXzfU+YBHRDVOsIaqOZqnRTWnTVGXyfzyYUQT06EhCXphnavC b1xvIHoFZVjOqyPmLmK/CbFtbKDP2OA1p1XjfVOa/KY8jASD6QlY4oG52/uMxaSr0xf6 CzQS0rmfro/XFYxaFnBKF+ty1AbeqyDlwgfI4ePIuB8akG0l2KouQTWrWfAlMYalb1Lx XZJzq4BQCMyEeiMrQr6tMm4zmYmECkiZVA2Gqxtvta4evKwjN1JqIDWuXMkI+C+V2Hqf h1ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=upEu1toL4agmahkZDUUWy5dcZhSdTxRZxxRrjhKIiDs=; b=e1Cs3SMAQtdqmrLWXlwv6b4i8rNgy/fRzhFr96t+6OfU277CIop4LSZdo4FX8vrz9P Smx8wcIFp3ZkM8LmFGzBgn/2bkqCgpyy34aF7Hg6KnGR6FL9YASYq+wFzR/cwQTDk7u9 8F7yOx1Pwbyas2lg4jgNAbFbzdG5fWoPT13C6V1plakHITiyhTPjV0cXxgqCpbrrrdpH 8nI9oezF13XZtop8Dmi5USKoon7pvfi8XSltxiDWFwMSSOK1CjObiuzgI93MVHnChIWM 3ho0cX+FXcVEVlB1p+4g/Y/Geh6Yq2JSw6Xyud4j3U2rj5djb7RqfRcJJET2YrS+E8HP rw5w== X-Gm-Message-State: AOAM530qp4l44u7y45gALYC68TcxDMDBsEpPpqbNtMPzY9cDHRTNM53W YLjXDhkT3Pk4IxSwMpttJ5DPx/f/ X-Google-Smtp-Source: ABdhPJyWu39oMAR/5Ehv1lNkM8ev18gqtz6ZeDTBGHQzoJR1h6xFCtf18sN+dC/ZAdIiJT2b8fspdA== X-Received: by 2002:a7b:cf06:: with SMTP id l6mr10578452wmg.63.1592695057579; Sat, 20 Jun 2020 16:17:37 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b81sm12233308wmc.5.2020.06.20.16.17.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 16:17:36 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theothornhill@pm.me, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <83a70yw1y8.fsf@gnu.org> <83zh8xvs91.fsf@gnu.org> From: Dmitry Gutov Message-ID: <18a668a1-6f79-6ca3-9672-9d825e6a830c@yandex.ru> Date: Sun, 21 Jun 2020 02:17:34 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83zh8xvs91.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=raaahh@gmail.com; helo=mail-wm1-x332.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 23:17:42 -0000 On 20.06.2020 15:25, Eli Zaretskii wrote: >> Compared to an ad-hoc variable (or having a command that adds such a >> buffer manually), I'd much prefer an automatic approach. > > Not sure what does "automatic" mean here. If that means using only > currently available buffer-local variables, then who's to say that > this is good enough? And/or adding new custom variables and hooks. > Why limit ourselves to only such solutions? the > few presented examples already uncovered some deficiencies in relying > on one such variable. As explained in the other email, it's a matter of interpretation. > OTOH, we could introduce a new buffer-local variable to be > automatically set by, say, a find-file-hook, or by project-find-file, > or via some other feature we have. Same with recording relevant > buffers in some project-specific data structure. find-file-hook seems a bit late to use if we wanted to save which project the current command was called from. project-find-file would only affect file-visiting buffers, and only ones that we already consider a part of the current project. So what new info would it save? "Some other feature" sounds nice. > IOW, it sounds like we have any number of ways for doing something > like that, and the only argument is whether we should. I'm still not certain of what is the optimal solution. From MAILER-DAEMON Sat Jun 20 19:34:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmn03-0007eZ-1Q for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 19:34:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmn01-0007eG-Jf for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:34:13 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:54884) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmmzz-0005wU-JX for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:34:13 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KNViAI020311; Sat, 20 Jun 2020 23:34:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=XeM+0IN62mghu5OwhAPJxXOyF4EoGqEH08Mzt8I4zlc=; b=E+RNh4vV99nV0VScowRw8J24bwcprnXm2uL4X1r6dmShBx1lx4JgXl64d/gAyvTiLzDS 393TcMaxUhn+Lb+WU1LxET+Jd4CI88c4XSA4GTFq1ACZFHehBDXdm6WlrATNZCOUiGa5 CohZGIaq03bOWXuAQNVF6jrcw9AIVSTJKO3NwekzCauV8Srtv/AfzOjpopifRvRij6// VsZ1YTXhJplH+YLcKIoawcyoahqlgFH3bf5x9wVaphbnSYHgYvKDH9qs2T+PWWbe3HkD 8ozSIzDheSh5W/eBviy3qB45cv6HUfWjzsmENjtezFkUdaO8Q0addb0l0BiJ3pVYymlK TQ== Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by aserp2120.oracle.com with ESMTP id 31sebb1r8q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 20 Jun 2020 23:34:08 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KNXIjZ010174; Sat, 20 Jun 2020 23:34:07 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3030.oracle.com with ESMTP id 31seb7e95h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 20 Jun 2020 23:34:07 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05KNY6MQ031422; Sat, 20 Jun 2020 23:34:06 GMT MIME-Version: 1.0 Message-ID: <062414c6-41f4-4803-9a62-28274825b8e0@default> Date: Sat, 20 Jun 2020 23:34:05 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Jamie Beardslee , emacs-devel@gnu.org Subject: RE: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> In-Reply-To: <87blld2x5h.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 malwarescore=0 mlxscore=0 spamscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200178 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 cotscore=-2147483648 lowpriorityscore=0 phishscore=0 bulkscore=0 clxscore=1015 impostorscore=0 malwarescore=0 priorityscore=1501 spamscore=0 mlxscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200178 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:57:45 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 23:34:13 -0000 > > You don't specify what the actual problem is. How does a bookmark > > interfere with save-place? Maybe provide a step-by-step recipe to > > show the problem, starting from `emacs -Q' (no init file). >=20 > =E2=80=98bookmark-set=E2=80=99 saves the position--by which I mean point = and context > strings--with no option (that I can find) of not saving it. When using > =E2=80=98bookmark-jump=E2=80=99, point will always be moved to that posit= ion, ignoring > the position from save-place. That's not a recipe. A bookmark can do anything. It can even make use of save-place or any save-place info. You can create whatever kind of bookmark you need, if you need something special. See `bookmark-make-record-function', and see how it's used in the Elisp sources to create different kinds of bookmarks. `bookmark-set' uses `bookmark-make-record', which calls the function value of `bookmark-make-record-function'. It's only the default value of variable `bookmark-make-record-function' that does what you say. If the default `bookmark-make-record-function' doesn't do what's needed for save-place, then maybe save-place should define its own type of bookmark. Or probably all it needs to do is `add-hook' for `bookmark-after-jump-hook', just as it does for `find-file-hook', `dired-initial-position-hook', and `kill-emacs-hook'. IOW, after jumping to the position that you bookmarked, move to the save-place position. It's you who bookmarked a given position. And likely you do sometimes want to return to that position. But if there's a more recent position in that file, which save-place has saved for you, then just use that one, via `bookmark-after-jump-hook'. (And again, a bookmark need not have a location. If you use the default make-record function then yes, the bookmark saves a position.) > > Just what behavior are you looking for? Do you not want to open the > > file at all? (If so, what do you want the bookmark to do with the > > file, instead of opening it?) > > > > If you want the bookmark to open the file, where do you want the > > cursor to be in it - at what position? >=20 > My patch allows the user to choose whether or not the bookmark record > should be in control of the position. The bookmark record has already chosen that. Just use a different kind of record. Why have an option that acts in a blanket manner on all bookmarks, to ignore their position? If this is about save-place then save-place should do the right thing. See above. If there's an option to be added in that regard, it's a save-place option: `save-place-ignore-bookmark-position'. The hook function (see above) can move to the save-place place if the option is non-nil, and just do nothing if it's nil. > > A bookmark can target a file in any way you want, including (but not > > limited to) opening it at a given position. You can easily bookmark a > > file so that the bookmark opens it with the cursor at position 1, for > > example. (And you need not visit a file in order to bookmark it.) > > > > Finally, a bookmark need not have any `location' field. >=20 > I understand this. I think it would be useful to have a simple > accessible way to effectively disable the point manipulation part of > bookmarks. It=E2=80=99s not exactly convenient to edit the bookmark file= by > hand every time a bookmark is created just to disable this feature. No one suggested that you edit a bookmark file. Your cure isn't localized to the ill. If this is a good option to give users, to let save-place override bookmark locations, just like it does for Dired and `find-file', then that option belongs to save-place. From MAILER-DAEMON Sat Jun 20 19:39:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmn52-0002ss-F0 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 19:39:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46414) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmn50-0002sX-US for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:39:22 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:58256) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmn4w-0006lG-UX for emacs-devel@gnu.org; Sat, 20 Jun 2020 19:39:22 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KNdGMc042429; Sat, 20 Jun 2020 23:39:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=CNxxIqu0GGOEk77VKAi4+KHkrZo1CN156Lh5kbASX1E=; b=VFkDv9BBg2Px9xRLYAzG/C42BemLedm3p0UmzVSFixPFU4XLg46ga4/Pio1UZMQsqIxV K3GkaQzICKjHCDbnVo3SFQ4nq8YVEuO25F+5In5lrBFcb0PK0eXBM/d3NCa1TTRVmTRi FO4qRKMUWDSyjDYrDfB4v5exPrvGk+hV1m/htcVpewmGF2jRlgWNPu084qDDdyDzXt3G pXUCgcbvOY2XMhtUFvaTqyPVFWDfwgXiIb6TmQukKDwGnYktfF9FzHJXqP7ufoIqCnVf HDU8lbKbg9tZk/cX4SQXmcW/ZZHYS+7k5BJNveNpF6A1lMx0gcZsWMMDS+emiBKgtPuq fg== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31sebb1re6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 20 Jun 2020 23:39:16 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05KNXb6N082656; Sat, 20 Jun 2020 23:37:16 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3020.oracle.com with ESMTP id 31seb8e5e1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 20 Jun 2020 23:37:16 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05KNbEDP032285; Sat, 20 Jun 2020 23:37:15 GMT MIME-Version: 1.0 Message-ID: <7964f0a0-1995-4dcc-8460-19c2714004db@default> Date: Sat, 20 Jun 2020 23:37:13 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Stefan Monnier , Jamie Beardslee Cc: emacs-devel@gnu.org Subject: RE: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 mlxscore=0 malwarescore=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200178 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 cotscore=-2147483648 lowpriorityscore=0 phishscore=0 bulkscore=0 clxscore=1015 impostorscore=0 malwarescore=0 priorityscore=1501 spamscore=0 mlxscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006200179 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:57:45 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2020 23:39:23 -0000 > I think it makes sense, but I think it shouldn't be a global option. > Maybe it should be a setting saved with the bookmark (i.e. when saving > the bookmark you could specify not to save the location) or otherwise > specified when jumping. >=20 > Maybe a prefix command which causes the subsequent `bookmark-jump` to > ignore the location info (and it could also cause a subsequent > `bookmark-set` not to save the location)? Please, no. Overkill, overoverkill. Just have save-place do what it does for `find-file' and `dired': move to the save-place place after the function does its thing. `bookmark-after-jump-hook'. From MAILER-DAEMON Sat Jun 20 20:22:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmnke-00023C-2z for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 20:22:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmnkb-0001xh-6L for emacs-devel@gnu.org; Sat, 20 Jun 2020 20:22:22 -0400 Received: from ciao.gmane.io ([159.69.161.202]:60942) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmnkZ-0004gu-Jx for emacs-devel@gnu.org; Sat, 20 Jun 2020 20:22:20 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jmnkW-000UgZ-3I for emacs-devel@gnu.org; Sun, 21 Jun 2020 02:22:16 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: Jamie Beardslee Subject: Re: [PATCH] Add user option to disable location in bookmarks Date: Sun, 21 Jun 2020 12:22:07 +1200 Message-ID: <87r1u9mfo0.fsf@gmail.com> References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> <062414c6-41f4-4803-9a62-28274825b8e0@default> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:TRurf9GchTR/HcYmvCWUOcYzvTI= Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 18:24:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 20 X-Spam_score: 2.0 X-Spam_bar: ++ X-Spam_report: (2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 00:22:22 -0000 --=-=-= Content-Type: text/plain >> My patch allows the user to choose whether or not the bookmark record >> should be in control of the position. > > The bookmark record has already chosen that. Just use a different > kind of record. Why have an option that acts in a blanket manner on > all bookmarks, to ignore their position? I don't see the problem here, surely some users would want to ignore bookmarks' positions. There isn't a similar built-in library that doesn't save position so I feel it should be an option provided by bookmark.el without the user needing to define their own handler. > If this is about save-place then save-place should do the right thing. > See above. If there's an option to be added in that regard, it's a > save-place option: `save-place-ignore-bookmark-position'. The hook > function (see above) can move to the save-place place if the option is > non-nil, and just do nothing if it's nil. Okay, well I've attached that patch here. I understand this is skipping over one of the best features of bookmarks, but I still think it's a valuable option even without the use of save-place. -- Jamie --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Allow-save-place-to-override-the-position-when-using.patch >From c4378882ef88fafcd04017d1942f673658b04dd1 Mon Sep 17 00:00:00 2001 From: Jamie Beardslee Date: Sun, 21 Jun 2020 11:59:44 +1200 Subject: [PATCH] Allow save-place to override the position when using bookmarks. When the user option `save-place-override-bookmark' is non-nil, save-place will go to the last position rather than the position specified in the bookmark record. --- lisp/saveplace.el | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lisp/saveplace.el b/lisp/saveplace.el index 46738ab03d..f32c1ad753 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el @@ -118,12 +118,22 @@ save-place-ignore-files-regexp :version "24.1" :type 'regexp) +(defcustom save-place-override-bookmark nil + "Whether `save-place' should override bookmarks. + +Normally, a bookmark is used to save a specific point in a buffer +or file. If this is non-nil, `save-place' will provide the +position instead." + :type 'boolean) + (declare-function dired-current-directory "dired" (&optional localp)) (defun save-place--setup-hooks (add) (cond (add (add-hook 'find-file-hook #'save-place-find-file-hook t) + (eval-after-load "bookmark" + '(add-hook 'bookmark-after-jump-hook #'save-place-bookmark-hook t)) (add-hook 'dired-initial-position-hook #'save-place-dired-hook) (unless noninteractive (add-hook 'kill-emacs-hook #'save-place-kill-emacs-hook)) @@ -334,6 +344,10 @@ save-place-find-file-hook ;; and make sure it will be saved again for later (setq save-place-mode t))))) +(defun save-place-bookmark-hook () + (when save-place-override-bookmark + (save-place-find-file-hook))) + (declare-function dired-goto-file "dired" (file)) (defun save-place-dired-hook () -- 2.27.0 --=-=-=-- From MAILER-DAEMON Sat Jun 20 21:37:09 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmouz-0006a6-93 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 21:37:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59748) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmoux-0006Zs-VJ for emacs-devel@gnu.org; Sat, 20 Jun 2020 21:37:08 -0400 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]:34421) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmouv-0006Ig-NV; Sat, 20 Jun 2020 21:37:07 -0400 Received: by mail-qk1-x732.google.com with SMTP id f18so12659610qkh.1; Sat, 20 Jun 2020 18:37:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=NP7rkfxOp+Q+wYvUDqmrGCzAWbcjIyzozflEBCcjnk0=; b=ajb9sbtiUYHkGgiKLwSnzcfvJIgD3lPS6L7Fpynzklka7DKGdfG4vClshVEmFMQtvn 8ag1YBECO172/Eho80NJQ8WhPjfRfAO9vNsGlpmd7Xvx63WvFp/YDOcK1e4XM7G6BOG6 Qzw4mtyErznxRmnW1PVouxn0YhBd1b5jIpvCrKG9bUSbtHJezJrg92fpzDAE+y7EOn4S KMJCNnz46Wut8CG1YtM5a0viHSJYxkKujdog78VMZRKW6vMUTeNjF+TaBquzgLliRXSX R4LvwkhvN9P0ICcUxiulEbijo/BlvnFvRpWZGaxQ371e6Y78SF3qRDHkWjEOCb7KkeKJ l/ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=NP7rkfxOp+Q+wYvUDqmrGCzAWbcjIyzozflEBCcjnk0=; b=rrHrwG17Fp1w7frCIxy93V9MImoJTBaClivSuH+w1LHt2qIhS8RdC3SnW+F6fuW7kf PT3i4afrsAk3Uy0kki6od8f24Qx4mOBW13kVEWp04eyXKGNkMm5vKuf/VNRNS4wU87Ue twp5FVmrqychpxQYKvITJbXqLFgLfUrmbAkhEKN/vIr+qvOIxcP5NzfT2qSjNUWI3ecF 00sDe+J11nbkVvHRzMjoomYD+fJg3vfR8ZyayUG6LT1dGKc6g9ZlQ/9hnDeO7n4QQrO0 GN2SWd6feqiiWyZsFeDeVeLIxyvdph0ol9aTHFA2GHInqHIZd2XjGeVtLUFGyOe6kLVx gcXw== X-Gm-Message-State: AOAM532x7lXjOVXvcAV6DomNYQvBLTxhk2KGXTL5DpstKrRcfJzoxJ9X HT8xaSA14jiXPTsLxCaA0Ss= X-Google-Smtp-Source: ABdhPJxHhyZ1C9Qv1OGzyEsxpyQEV+js6RpEZp5EeiIFs3zJGxyfXEdsktnphEUyHr3EL0VbfpQ1iA== X-Received: by 2002:a05:620a:222c:: with SMTP id n12mr7677179qkh.210.1592703424021; Sat, 20 Jun 2020 18:37:04 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:4db3:689a:8b65:21d1? ([2601:98a:4200:9210:4db3:689a:8b65:21d1]) by smtp.gmail.com with ESMTPSA id e16sm11811403qtc.71.2020.06.20.18.37.02 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 20 Jun 2020 18:37:03 -0700 (PDT) From: Yuan Fu Message-Id: <5EEE3785-D1EB-40A2-AA91-10E97C68ABBB@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_6C6B6BCF-EBFF-4DBE-9E8C-2A38F989D592" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers Date: Sat, 20 Jun 2020 21:37:02 -0400 In-Reply-To: <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> Cc: Eli Zaretskii , rekado@elephly.net, emacs-devel , Stefan Kangas , =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , dgutov@yandex.ru To: Konstantin Kharlamov References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::732; envelope-from=casouri@gmail.com; helo=mail-qk1-x732.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 01:37:08 -0000 --Apple-Mail=_6C6B6BCF-EBFF-4DBE-9E8C-2A38F989D592 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 >=20 >>> git log -500 --format=3D"%ae" | grep -vP >>> = "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|hu= aw >>> ei|c >>> = odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|= mi >>> cros >>> = oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproj= ec >>> t|si >>> five)\.(org|com|de|cz|cn)" | sort -u | wc -l >>>=20 >>> Results are: >>> * GCC as of commit 445d8da5fbd: 15 >>> * Clang as of commit 7b201bfcac2: 49 >>>=20 >>> This is some pretty big difference! If I expand the commits range, = the >>> difference increases further. >>=20 >> GCC is alive for 33 years, so I think your theory eats dust. Many of >> the GCC and GDB developers get paid for their work, but that doesn't >> mean the project is less viable, and the long history of both GCC and >> GDB is the proof. >=20 > Okay, let me say beforehand that both GCC and Clang are very active = projects > right now. Just in case, so there's no misunderstanding. >=20 > So, times are changing. In older times there were no standard to = development, > Git was not as popular, development practices are varied too. So, as = long you > could get your patch to a project, any odd contribution requirements = were fine, > they hardly would set a barrier. >=20 > But these days Git got over all other VCSes (and for a reason), so = using SVN or > Perforce, or whatever, is a barrier to contribution. 12 years ago = Github was > founded, and then also the open-source clone Gitlab appeared. These = two pretty > much set the standard development model nowadays (for a reason too). = There still > are projects that use other models, but this is a barrier to = contributors. >=20 > What I'm getting at is that your reasoning that since GCC is 33 years = old it > will live on does not work. For a project to "live on" it needs to be = active. > Sure GCC is active! But its activity mainly stems from paid people and > maintainers. Whereas in Clang a large chunk of it stems from = contributors. Let > me repeat, paid people come and go, so do maintainers (they may burn = out, or > just move on). These contributors are the ones who will become new = maintainers > and the ones who advertise the project in their environment. >=20 > I hope it makes clear the future of what project looks brighter. I think the point is not =E2=80=9Cthis works for a long time and it must = be better than new stuff=E2=80=9D but rather the current method _can_ = live long (proven by gcc & gdb, etc). If in the future people moves to = other shiny new SVN=E2=80=99s and github=E2=80=99s, does the git method = still work?=20 Yuan= --Apple-Mail=_6C6B6BCF-EBFF-4DBE-9E8C-2A38F989D592 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

   git log -500 --format=3D"%ae" | grep -vP
"@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|appl= e|linaro|huaw
ei|c
odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoft= ek|ubisoft|mi
cros
oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphc= ore|gdcprojec
t|si
five)\.(org|com|de|cz|cn)" = | sort -u | wc -l

Results are:
* GCC as of commit 445d8da5fbd: 15
* Clang as = of commit 7b201bfcac2: 49

This is some = pretty big difference! If I expand the commits range, the
difference increases further.

GCC is alive for 33 years, so I think your theory eats dust. =  Many of
the GCC and GDB developers get paid for = their work, but that doesn't
mean the project is less = viable, and the long history of both GCC and
GDB is the = proof.

Okay, let me say beforehand that both GCC and Clang are very = active projects
right now. Just in case, so there's no = misunderstanding.

So, times are changing. In older times there were no standard = to development,
Git was not as popular, development practices are varied too. = So, as long you
could get your patch to a project, any odd contribution = requirements were fine,
they hardly would set a barrier.

But these days Git got over all other VCSes (and for a = reason), so using SVN or
Perforce, or whatever, is a barrier to contribution. 12 years = ago Github was
founded, and then also the open-source clone Gitlab appeared. = These two pretty
much set the standard development model nowadays (for a = reason too). There still
are projects that use other models, but this is a barrier to = contributors.

What I'm getting at is that your reasoning that since GCC is = 33 years old it
will live on does not work. For a project to "live on" it = needs to be active.
Sure GCC is active! But its activity mainly stems from paid = people and
maintainers. Whereas in Clang a large chunk of it stems from = contributors. Let
me repeat, paid people come and go, so do maintainers (they = may burn out, or
just move on). These contributors are the ones who will = become new maintainers
and the ones who advertise the project in their = environment.

I hope it makes clear the future of what project looks = brighter.

I think the point is not =E2=80=9Cthis works = for a long time and it must be better than new stuff=E2=80=9D but rather = the current method _can_ live long (proven by gcc & gdb, etc). If in = the future people moves to other shiny new SVN=E2=80=99s and github=E2=80=99= s, does the git method still work? 

Yuan
= --Apple-Mail=_6C6B6BCF-EBFF-4DBE-9E8C-2A38F989D592-- From MAILER-DAEMON Sat Jun 20 22:35:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmppa-0005bN-02 for mharc-emacs-devel@gnu.org; Sat, 20 Jun 2020 22:35:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmppY-0005b4-Dm for emacs-devel@gnu.org; Sat, 20 Jun 2020 22:35:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47500) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmppW-0006AE-Aa; Sat, 20 Jun 2020 22:35:34 -0400 Received: from [176.228.60.248] (port=4506 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmppV-0001g0-PR; Sat, 20 Jun 2020 22:35:34 -0400 Date: Sun, 21 Jun 2020 05:35:24 +0300 Message-Id: <83k101uowj.fsf@gnu.org> From: Eli Zaretskii To: Konstantin Kharlamov Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, joaotavora@gmail.com, dgutov@yandex.ru In-Reply-To: <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> (message from Konstantin Kharlamov on Sun, 21 Jun 2020 01:25:15 +0300) Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 02:35:36 -0000 > From: Konstantin Kharlamov > Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, > joaotavora@gmail.com, dgutov@yandex.ru > Date: Sun, 21 Jun 2020 01:25:15 +0300 > > So, I recalculated by looking at date of the last commit of those "500" in GCC, > and used that date on Clang. I made sure to sort out other corporate mails too. > Command I used is: > > git log --since="Jun 8 21:34:46" --format="%ae" | grep -vP > "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huawei|c > odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|micros > oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproject|si > five|imagelabs|xilinx|sap|sas|sigmatechnology|sonarsource|ericsson|lowrisc|hight > ec-rt|polymagelabs)\.(org|com|de|cz|cn|ai|se)" | sort -u | wc -l > > So, now GCC still gets 15, while for Clang this number gets increased to 89. This metric is irrelevant. Basically, you removed everyone who was a prominent developer, so it's little wonder that you are left with a small number. Using such arbitrary criteria, one can "prove" anything for any project. Once again, the long history and the active development of GCC over those long years are a clear evidence that your criterion is completely off the mark. From MAILER-DAEMON Sun Jun 21 01:08:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmsDV-00044X-0q for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 01:08:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmsDT-00044D-Bq for emacs-devel@gnu.org; Sun, 21 Jun 2020 01:08:27 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:59654) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmsDP-0000wa-VY for emacs-devel@gnu.org; Sun, 21 Jun 2020 01:08:25 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 6B8D11016A5; Sun, 21 Jun 2020 01:08:22 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id AD9D51006D2; Sun, 21 Jun 2020 01:08:20 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592716100; bh=1eQLprmmOW6Hs7SWDsgCI1rP6p0b2LwqNzsi21UkcdY=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=PurOtCbPRiALFQwjtgqfqWvIukHIrOdCpmcJlhsTY5Q7Nen0wqp5vHk8nJDo/t00P tc6PY1d9BZ6YJfuI7niRPXW7ZOsxmwtyQNDueLUDA/1jtgsr98Ca/a0bY2zHXjermA M9S0BO5ehuK7Un7ekuVErDE18jxNjo+GAlTOQo/HoyvN36ygXhQGt3XatAvwSSF0kL 3ADaQN243lpPgFQ6uVDjqgR1jOFdj/IKB/c9gorYjiZ0Dd93NWGtCR3LWR+VbSG5+t QSp5EolRHLd7YNBXE16PL0am+ouYH1tl7w9Xe8Q87aeDe396RqjZlfmxecI3PfEBBr d9nPdM5oDM14A== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 55082120281; Sun, 21 Jun 2020 01:08:20 -0400 (EDT) From: Stefan Monnier To: Konstantin Kharlamov Cc: rekado@elephly.net, dgutov@yandex.ru, stefan@marxist.se, joaotavora@gmail.com, emacs-devel@gnu.org Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers Message-ID: References: <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> <83k101uowj.fsf@gnu.org> Date: Sun, 21 Jun 2020 01:08:19 -0400 In-Reply-To: <83k101uowj.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 21 Jun 2020 05:35:24 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.049 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 01:08:22 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 05:08:27 -0000 I haven't followed this thread very closely, but it seems we've strayed far enough away from Emacs that it's become quite offtopic. I may be wrong (since I haven't followed the thread very closely) but my understanding is that Konstantin would like it for Emacs to accept submission using a "merge request" model or something like that. We've discussed this many times in the past. IIUC, we're slowly going there (see https://libreplanet.org/wiki/Fsf_2019_forge_evaluation), but we're an old project, and those people who most contribute to Emacs tend not to go very much for the shiny new stuff, so if you like the shiny new stuff I recommend you a healthy dose of patience. Stefan Eli Zaretskii [2020-06-21 05:35:24] wrote: >> From: Konstantin Kharlamov >> Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, >> joaotavora@gmail.com, dgutov@yandex.ru >> Date: Sun, 21 Jun 2020 01:25:15 +0300 >> >> So, I recalculated by looking at date of the last commit of those "500" in GCC, >> and used that date on Clang. I made sure to sort out other corporate mails too. >> Command I used is: >> >> git log --since="Jun 8 21:34:46" --format="%ae" | grep -vP >> "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huawei|c >> odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|micros >> oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcproject|si >> five|imagelabs|xilinx|sap|sas|sigmatechnology|sonarsource|ericsson|lowrisc|hight >> ec-rt|polymagelabs)\.(org|com|de|cz|cn|ai|se)" | sort -u | wc -l >> >> So, now GCC still gets 15, while for Clang this number gets increased to 89. > > This metric is irrelevant. Basically, you removed everyone who was a > prominent developer, so it's little wonder that you are left with a > small number. Using such arbitrary criteria, one can "prove" anything > for any project. > > Once again, the long history and the active development of GCC over > those long years are a clear evidence that your criterion is > completely off the mark. From MAILER-DAEMON Sun Jun 21 01:19:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmsOc-0006V9-DC for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 01:19:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmsOa-0006UM-2I for emacs-devel@gnu.org; Sun, 21 Jun 2020 01:19:56 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:43862) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmsOY-0002Jq-4k for emacs-devel@gnu.org; Sun, 21 Jun 2020 01:19:55 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05L5HhJx026147; Sun, 21 Jun 2020 05:19:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=REuMGVulTLb2NVZUFu79eQie0te7oMLCpus44S4shik=; b=ytX+HBUgJlHKnaAC3dyMme5we1fgiEozb7VDyLKHceGkr/hTtwSFx0Yu4WmjDOYX4o8o KV+rW40K+zDULZLy3IJVB5AveeGP90I+svM5OhktomXWOEXK26g2EhNRSZ+I74b3LRDg Epg83WaTI8Gt+2C/zitYOGu8UR56XxHRMoUYQZSvLIUWPvP1junBYMpDS4mRI3SjJIJs 4trWCCawEnDGyDVKRDonyhA8QONLUYwLjB80iO6CcIFIsnDlWShYduUXdQSLcVlRTayq ezLAtu42yJhCLmEvArd43rGj40yNL2kOs/Iwk9ejAZNwHgO6i34DAexCce0s1fsQ7Veg 6w== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 31sebba2c1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 21 Jun 2020 05:19:50 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05L5DPD1050969; Sun, 21 Jun 2020 05:19:50 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3030.oracle.com with ESMTP id 31sv1j6s7r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 21 Jun 2020 05:19:50 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05L5JmwG015512; Sun, 21 Jun 2020 05:19:48 GMT MIME-Version: 1.0 Message-ID: <5b7b92cf-941b-477b-96ad-f31236ea8127@default> Date: Sun, 21 Jun 2020 05:19:47 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Jamie Beardslee , emacs-devel@gnu.org Subject: RE: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> <062414c6-41f4-4803-9a62-28274825b8e0@default> <87r1u9mfo0.fsf@gmail.com> In-Reply-To: <87r1u9mfo0.fsf@gmail.com> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 adultscore=0 phishscore=0 bulkscore=0 suspectscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006210041 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9658 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 cotscore=-2147483648 mlxscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006210041 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 01:19:52 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 05:19:56 -0000 > >> My patch allows the user to choose whether or not the bookmark record > >> should be in control of the position. > > > > The bookmark record has already chosen that. Just use a different > > kind of record. Why have an option that acts in a blanket manner on > > all bookmarks, to ignore their position? >=20 > I don't see the problem here, surely some users would want to ignore > bookmarks' positions. Positions of all bookmarks, of any type? Maybe there are such users. But my point was that such a shotgun approach isn't needed, to solve the specific save-place problem. Just do it for save-place (and optionally, per a user option). > There isn't a similar built-in library that > doesn't save position so I feel it should be an option provided by > bookmark.el without the user needing to define their own handler. >=20 > > If this is about save-place then save-place should do the right thing. > > See above. If there's an option to be added in that regard, it's a > > save-place option: `save-place-ignore-bookmark-position'. The hook > > function (see above) can move to the save-place place if the option is > > non-nil, and just do nothing if it's nil. >=20 > Okay, well I've attached that patch here. I understand this is skipping > over one of the best features of bookmarks, but I still think it's a > valuable option even without the use of save-place. Yes, that's the idea. (Didn't try it, but a priori LGTM.) From MAILER-DAEMON Sun Jun 21 03:16:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmuD8-00052s-UV for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 03:16:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmuD7-00052i-NK for emacs-devel@gnu.org; Sun, 21 Jun 2020 03:16:13 -0400 Received: from mout.gmx.net ([212.227.15.18]:59737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmuD5-0000B5-Lg for emacs-devel@gnu.org; Sun, 21 Jun 2020 03:16:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592723769; bh=vC0tvGDOL0zmhe4Ug62bl2+6dDXg/IiEC34wheKq03c=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=K/iSJsSQICbrr8TARI3ZWzAGnmBwF/LfGE60MMoGyncxLi8WH92auH7LUj7OYMywM aPqT+GUwaF+yh8MWzjqu2l4MJCH0JN24jT5k7YUstp3UZOHCfO6p22BJfm3z6FGKOH bWVZa68peUlPxXKEsIDiQGaYy3USACa69PiI+Pt4= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([212.86.59.28]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MjS9I-1j2KAs3E2E-00kyIN; Sun, 21 Jun 2020 09:16:08 +0200 From: Michael Albinus To: yyoncho Cc: emacs-devel Subject: Re: tramp and executable-find References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> <87366pzh1a.fsf@gmx.de> Date: Sun, 21 Jun 2020 09:16:07 +0200 In-Reply-To: (yyoncho@gmail.com's message of "Sat, 20 Jun 2020 22:29:57 +0300") Message-ID: <87y2ogyjm0.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:LJijmQynwZtuun3wmPwDCHIO6eOdvSMZqApm96dOjpJG+gSwX0i ATdZGZ9txdCJllXh/6Nk9LB9xF6cykqkL/byRU9rajmChzK6e9/KLtiLKv7MUpnVsLlOepO PRKJEybJs/kMMbW+M4a5qCbC1VUOE35Xnonn2OAIovEHg1Nk9IBY9GSvcoX+8/K8k7p3aPl SaJ+1qWRkXyFWJVZ5JQNw== X-UI-Out-Filterresults: notjunk:1;V03:K0:O7aM+nw5k+0=:qOt/thLIJFzdTlKconEa10 b1pwy5lvWbm6gE3XI3bAK3mkYlq7x+bgcd+wd94mwBDCoPtip5U3BwAa2oqwrQI28B9axUOU4 V7CUgrKYqfcESSwUlOX9OPcWJSY8ewc4rtm4SV8KMNxmmTDIxNsubv4X0ian8w7LdsKOqcE71 0PRsos60Z5ceEYcaSyXk7UiRNmnWV/eYUQxexzYJk0G1w5wf/4YmWU2TzfHfoKyv1QC0M+lub z5XZJPfJ9tga2xwBgHr3bp1b+UMQn2VIavyu1KObp6W/DGNkO+gDZ74n1aOPXehKiuXIR6kHe Suc3mm57wZQaKzxIurVQHKAKVSqoUB6NKTecb8oUHarNJZJkiWNQN00Yaf6rm2PBPL3g/2yr7 IiHGl9REoH3wzMQxlDjRTPXepYtzM1PnJZi7Q4LZYQWriTzhhZ1JEENg0MApXx4klUTASZxpb wejTFsQj7ccEwtWA9ucCIDK5mv6hz77Q2gDWKtzXb/aWBIDhfPuU3cp3PGwwsujPkBLj+DWs4 ug96Ckmclcf108JiSGyNwBW9tBZNqEX+XCgCOylDak7eTsHgDMimi+RpmzX8WO4Lf+9mtJAc9 KE10XvtSaXQ5O/220HzRyW5zlpCDCuCibEP8AqXE8PvAD9HlD01lTVrwMaQauDSKLIiRmk1AD YGiyvuplWjsZ5WH0B0SfoOO6YtsAhVLQ6Qx+TRw6hQBaEJjUhc9wmu8id+q4NZOQBqUk2lECL kHSSVCUSHe1VrLj4KwA1lKKM1/+lBrx6h+KPNsMYzblXaIxAtnFPUfautTeo64V5GTle4+lOw HfTG4/S8qw3pZthsw3YkK7orhTqtgSPGtyfTs+BxJ9388DzzyjYlj4HrJGap45JlbGN4rw0Lf wpOgSJodUnmgCU6Cs9nJzSjwOlLpSGE8CaDiUtNdqLbgGFPri+bh5g5JbKJ8fcQZ5XtBCuyhn 1uone3YGoUqXfm55nz1905d02L8bEHaYf9MSU8yR88LBZ111llmLYib7djDycG789W+eSpipb N+y1tIbOVXDNUWZbUX6++XMCQyQIZAokD/rQ0Sa70ESLtq627gQ215cpcIZo2TawkDwJfqMl6 FS5BD+rppQcAiKZRUNbVCUTIV+3+B8+5Wv3Q4NLwjp47GUL958Exjr9JsZvrx36Rdd0uLn3PA R/SBhNYcV3rEqzdrnNWeAOwoPv11HBa77u6IvxOzJDGIoFqGnq0wCvKtmaBa89/WWY+5JqDwl LKtsnBRHMuYFRe24r Received-SPF: pass client-ip=212.227.15.18; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 03:16:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 07:16:14 -0000 yyoncho writes: > Hi Michael, Hi Ivan, > As a side note, if you do search for /bin/ls executable-find will work > although it is not prefixed with the remote identifier. This is what > confused me initially. Everything you do with a COMMAND being an absolute file name will return not specified results. It might work, or not. Don't trust on this. > This is a configuration setting for lsp-mode when the server is > located on the remote server. Some users dont have admin access on the > remote machine so they put the binary somewhere else so they have you > use full path. They don't have to. They shall add that directory to the remote path, and they can still use the program name. > Thanks, > Ivan Best regards, Michael. From MAILER-DAEMON Sun Jun 21 03:48:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmuiT-0004ph-Ov for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 03:48:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmuiS-0004pX-0E for emacs-devel@gnu.org; Sun, 21 Jun 2020 03:48:36 -0400 Received: from mail222c50.megamailservers.eu ([91.136.10.232]:41098 helo=mail33c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmuiP-0004Et-Ih; Sun, 21 Jun 2020 03:48:35 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592725707; bh=rgRLJV1sxd3egu68bNgJ9TKS4Jx3BOz67DqpfV1Nl60=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=nV4qaUx6lp1DZmi4G0UAGL/Kc+UZ4Xci4q/FuaSwkJ5DH0vTgGmVQQ82jTlD1DBO5 oqfsFOrbMbJmLUjfSm4tCzsxhGAR1VQyg7cMKsYLkApn1NlZISbDxGbW4PR8wYVKrb eZRPtViJEvUp7ttJW6XUc2gFFeGqsmAIVLGhHI9Y= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail33c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05L7mPHs010120; Sun, 21 Jun 2020 07:48:26 +0000 Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <468DA4C0-EB5B-4B97-B389-9335F72CF283@acm.org> Date: Sun, 21 Jun 2020 09:48:24 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> <83r1ui3j3m.fsf@gnu.org> <468DA4C0-EB5B-4B97-B389-9335F72CF283@acm.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F19.5EEF10CB.0024, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=eaJDgIMH c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=N54-gffFAAAA:8 a=Fo4qgdLgW9CeWBsOyLUA:9 a=QEXdDO2ut3YA:10 a=v7zKWsmy5NQA:10 a=6l0D2HzqY3Epnrm8mE3f:22 Received-SPF: softfail client-ip=91.136.10.232; envelope-from=mattiase@acm.org; helo=mail33c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 03:48:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 07:48:36 -0000 15 juni 2020 kl. 10.31 skrev Mattias Engdeg=C3=A5rd : > <0001-Consolidate-RGB-string-parsers.patch> Is the patch acceptable, or does anything need to be altered? It seems = that we are nearly done. From MAILER-DAEMON Sun Jun 21 03:51:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmulW-0008Jn-6o for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 03:51:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36998) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmulV-0008Jc-08 for emacs-devel@gnu.org; Sun, 21 Jun 2020 03:51:45 -0400 Received: from mail1440c50.megamailservers.eu ([91.136.14.40]:49812 helo=mail264c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmulT-0004lI-9O for emacs-devel@gnu.org; Sun, 21 Jun 2020 03:51:44 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592725900; bh=NpmepgbUlUZzTEQrIKKygNlNekJ6zARec5MCoys3+EM=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=G+JhiwrAuz6wlW2kTzKJJUrqxQ1fmYlLg0/4Hzd9aM/JKjYhV8a9xHPCkwyvp1++C OMmRXNnM2OMvESQeIeWN/mxQ1Ic7Cv3vcddmfWK8Ch8IOJA8KOg6UY6xTTppJ+lSu8 LxOowhhHiqPMCiRa8wS+Y6Ul/jzwYTBg/bzC9m/w= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail264c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05L7pbRb017286; Sun, 21 Jun 2020 07:51:39 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 68ae6fa: Improved light/dark colour predicate (bug#41544) From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= X-Priority: 3 In-Reply-To: Date: Sun, 21 Jun 2020 09:51:37 +0200 Cc: emacs-devel , tomas@tuxteam.de, Stephen Leake , Yuri Khan Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200610181238.9796.44750@vcs0.savannah.gnu.org> <20200610181239.947C4204DF@vcs0.savannah.gnu.org> <93F81C41-E774-4C02-9E9D-5B2CD1F66445@acm.org> <86v9jwksod.fsf@stephe-leake.org> <5A6B8DE2-EADF-4D74-A0EA-DE5303F828D4@acm.org> <0F5723EE-113E-4D3B-9BD8-D5327B3E87A1@acm.org> To: Drew Adams X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F19.5EEF118C.004B, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=PPNxBsiC c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=yPCof4ZbAAAA:8 a=qqpj90cVz5AlglWUQuoA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.14.40; envelope-from=mattiase@acm.org; helo=mail264c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 03:51:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 07:51:45 -0000 18 juni 2020 kl. 22.32 skrev Drew Adams : > A defvar would be fine. defconst explicitly signals > the intention that neither users nor code should > change the value. That's the wrong signal, I think. We'll have to disagree then -- the amount isn't changed programmatically = and not intended to be changed by the user any more than any numeric = literal inside a function. Again, this can be changed if it turns out to = be useful. From MAILER-DAEMON Sun Jun 21 04:41:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmvXd-00043z-T7 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 04:41:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmvXc-00041w-4x for emacs-devel@gnu.org; Sun, 21 Jun 2020 04:41:28 -0400 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:44929) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmvXa-00035L-HU for emacs-devel@gnu.org; Sun, 21 Jun 2020 04:41:27 -0400 Received: by mail-lf1-x130.google.com with SMTP id w15so7880184lfe.11 for ; Sun, 21 Jun 2020 01:41:26 -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 :cc; bh=hns09nkfUc2hzhpe12alk8MNruJsP9VnpXazdJBYLBk=; b=tQe9yVJ22TB/yej9juA/tm8zRpM5qOb+6TuVyIVwn09f88oU064yNelGXGd+g+amki VhKJUNt+j3WMlk6Lf7mD48wbnNDP/35WTGndowxTMENz148Elep0IX5DogBUcRXoWjA8 MFGu6N7AM0RBMGBE8kp6fzWPtZm2XP7hWvDp3x+SjMJkhK7n0RY0zdJZQagMMUu7MUyf QwvDvt6slFTrT77iI/fr471XlbeBspBPcRp433d2jU442GGifPFRwTnhSvf05KviM2lq M1ri8ppuOwQuC+N3n9yBg+2eFQDzAW37sHxOKQ3H1rWCTMVrVwrZYu1tYnbW9q+fzjAt 2xYQ== 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:cc; bh=hns09nkfUc2hzhpe12alk8MNruJsP9VnpXazdJBYLBk=; b=Xu5FkhZK4OaalFETP80IkkGm8CrLWbW94qRk2e1OnighjqyXqi/nkRqVlVK3k4RqYM lIPZv8d0saKQbYYciMszJ+axGbt5AEkpASORqVMeuXTRAcsmfXB6RoGm0SMRhe5Tsx0i BJeIitwiyQR4RtHA8OkzD0YCjRkvmXmZT/UnSBozjEmt3g4XFOF7McrTDlR9XK2LOoZd shEJM8sySJX4r2yFjhopL2qMp98yUFU2+a2gD3VL4S0Q8T3HXFBLo2kzfuuyCEDjkeqF a4MiYB2STr7q0lfqhHLPEJvKgVYhOlk/8G7jW+4NDrBOhDeAIpIDyuDD3uwCGd5J25I+ 1U+A== X-Gm-Message-State: AOAM531CUan+qa/7XcepXYPOclV+Qf3HcjaizKkTMutvI6K6leAP+kqY 2tMUpyxVTBPWFA4HGyBfQw5OrDXhmbGnCbcqkjI= X-Google-Smtp-Source: ABdhPJwIHC1/ZrbS0AFw2nQ9DJpOLw3Bx0wXkRDRDoiFcWjHQ22pyNl8W9tkshG2byFN87bkWSUD59YjVInsQE9aGe4= X-Received: by 2002:a05:6512:682:: with SMTP id t2mr6646780lfe.101.1592728884586; Sun, 21 Jun 2020 01:41:24 -0700 (PDT) MIME-Version: 1.0 References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> <87366pzh1a.fsf@gmx.de> <87y2ogyjm0.fsf@gmx.de> In-Reply-To: <87y2ogyjm0.fsf@gmx.de> From: yyoncho Date: Sun, 21 Jun 2020 11:41:13 +0300 Message-ID: Subject: Re: tramp and executable-find To: Michael Albinus Cc: emacs-devel Content-Type: multipart/alternative; boundary="00000000000063af9e05a8941722" Received-SPF: pass client-ip=2a00:1450:4864:20::130; envelope-from=yyoncho@gmail.com; helo=mail-lf1-x130.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 08:41:28 -0000 --00000000000063af9e05a8941722 Content-Type: text/plain; charset="UTF-8" Hi Michael, Thank you for clarification. By remote path, you mean tramp-remote-path, right? Thanks, Ivan On Sun, Jun 21, 2020 at 10:16 AM Michael Albinus wrote: > yyoncho writes: > > > Hi Michael, > > Hi Ivan, > > > As a side note, if you do search for /bin/ls executable-find will work > > although it is not prefixed with the remote identifier. This is what > > confused me initially. > > Everything you do with a COMMAND being an absolute file name will return > not specified results. It might work, or not. Don't trust on this. > > > This is a configuration setting for lsp-mode when the server is > > located on the remote server. Some users dont have admin access on the > > remote machine so they put the binary somewhere else so they have you > > use full path. > > They don't have to. They shall add that directory to the remote path, and > they can still use the program name. > > > Thanks, > > Ivan > > Best regards, Michael. > --00000000000063af9e05a8941722 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Michael,

Thank you for clarification= . By remote path, you mean tramp-remote-path, right?

Thanks,
Ivan

On Sun, Jun 21, 2020 at 10:16 AM Michael Alb= inus <michael.albinus@gmx.de> wrote:
yy= oncho <yyoncho@gm= ail.com> writes:

> Hi Michael,

Hi Ivan,

> As a side note, if you do search for /bin/ls executable-find will work=
> although it is not prefixed with the remote identifier. This is what > confused me initially.

Everything you do with a COMMAND being an absolute file name will return not specified results. It might work, or not. Don't trust on this.

> This is a configuration setting for lsp-mode when the server is
> located on the remote server. Some users dont have admin access on the=
> remote machine so they put the binary somewhere else so they have you<= br> > use full path.

They don't have to. They shall add that directory to the remote path, a= nd
they can still use the program name.

> Thanks,
> Ivan

Best regards, Michael.
--00000000000063af9e05a8941722-- From MAILER-DAEMON Sun Jun 21 04:58:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmvnx-0001Gj-NK for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 04:58:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmvnw-0001FO-64 for emacs-devel@gnu.org; Sun, 21 Jun 2020 04:58:20 -0400 Received: from forward104j.mail.yandex.net ([2a02:6b8:0:801:2::107]:34991) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmvns-0005Ai-IG for emacs-devel@gnu.org; Sun, 21 Jun 2020 04:58:19 -0400 Received: from mxback18o.mail.yandex.net (mxback18o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::69]) by forward104j.mail.yandex.net (Yandex) with ESMTP id 983A84A00F0; Sun, 21 Jun 2020 11:58:11 +0300 (MSK) Received: from myt6-efff10c3476a.qloud-c.yandex.net (myt6-efff10c3476a.qloud-c.yandex.net [2a02:6b8:c12:13a3:0:640:efff:10c3]) by mxback18o.mail.yandex.net (mxback/Yandex) with ESMTP id 0RRFOALEMG-wAXqG5ow; Sun, 21 Jun 2020 11:58:11 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592729891; bh=/GAFwgU5wMtQAHQX76Ymt19eXw97jfaWFDBkmY07u0g=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=gC3J3idkyyWPH3YQ9is4PbAWiBDV2lLYDNKpRqqN/31lNDeNLvgwZWi4BCmNPnIMv 0qXw+Aw+NMTOorlZbdJ6Z26LhTA7G+qtHVemiFuMQs6f+5F4nfjv+QB9KYXI4Ewgir gwwMCyzqBOAUCtssGLxlc62iPSI8p6hHWWaBk3Q8= Authentication-Results: mxback18o.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt6-efff10c3476a.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id iussUBMxsf-w9WqAOjV; Sun, 21 Jun 2020 11:58:10 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Stefan Monnier Cc: rekado@elephly.net, dgutov@yandex.ru, stefan@marxist.se, joaotavora@gmail.com, emacs-devel@gnu.org Date: Sun, 21 Jun 2020 11:58:08 +0300 In-Reply-To: References: <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> <83k101uowj.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:801:2::107; envelope-from=hi-angel@yandex.ru; helo=forward104j.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 08:58:20 -0000 On Sun, 2020-06-21 at 01:08 -0400, Stefan Monnier wrote: > I haven't followed this thread very closely, but it seems we've strayed > far enough away from Emacs that it's become quite offtopic. Yeah, it probably did. > I may be wrong (since I haven't followed the thread very closely) but my > understanding is that Konstantin would like it for Emacs to accept > submission using a "merge request" model or something like that. > > We've discussed this many times in the past. IIUC, we're slowly going > there (see https://libreplanet.org/wiki/Fsf_2019_forge_evaluation), but > we're an old project, and those people who most contribute to Emacs tend > not to go very much for the shiny new stuff, so if you like the shiny > new stuff I recommend you a healthy dose of patience. Yeah, that was one of points I mentioned in my 1st email. Thanks for the link! From MAILER-DAEMON Sun Jun 21 05:00:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmvqP-0002Xl-G2 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 05:00:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45548) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmvqN-0002Xb-OB for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:00:51 -0400 Received: from forward105p.mail.yandex.net ([2a02:6b8:0:1472:2741:0:8b7:108]:59086) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmvqK-0005g9-Bu; Sun, 21 Jun 2020 05:00:51 -0400 Received: from mxback14g.mail.yandex.net (mxback14g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:93]) by forward105p.mail.yandex.net (Yandex) with ESMTP id 73F0F4D40099; Sun, 21 Jun 2020 12:00:43 +0300 (MSK) Received: from myt6-9bdf92ffd111.qloud-c.yandex.net (myt6-9bdf92ffd111.qloud-c.yandex.net [2a02:6b8:c12:468a:0:640:9bdf:92ff]) by mxback14g.mail.yandex.net (mxback/Yandex) with ESMTP id 3KnyJUI7Ll-0h8GbBKi; Sun, 21 Jun 2020 12:00:43 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592730043; bh=LEjoO/yHrqbkeyu50eaOEjfXpccoa23Cc+u3yMupcRE=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=Cor0gPJ7gxfIWm/RSX6jlYdFzwMSW0AETJti9RNIZMy23NC70qKC9en02Rs08nCgI Hs9PZYnz1HDvLWke8p604S37/2GSZMP9UW3miBuQZoS5UkrHpwVMMYqT74xSxVo2/n ZFgDGyQ6pDwM7Bz2NFXR9sXnMMFYpLkyZTepfEWE= Authentication-Results: mxback14g.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt6-9bdf92ffd111.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id A7dh2rJvP8-0gkWl4JR; Sun, 21 Jun 2020 12:00:42 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: Eli Zaretskii Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, joaotavora@gmail.com, dgutov@yandex.ru Date: Sun, 21 Jun 2020 12:00:41 +0300 In-Reply-To: <83k101uowj.fsf@gnu.org> References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> <7980043db95fb5d74052e25f1ce3f5d3db1cae2d.camel@yandex.ru> <83k101uowj.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a02:6b8:0:1472:2741:0:8b7:108; envelope-from=hi-angel@yandex.ru; helo=forward105p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 05:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 09:00:52 -0000 On Sun, 2020-06-21 at 05:35 +0300, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Cc: rekado@elephly.net, emacs-devel@gnu.org, stefan@marxist.se, > > joaotavora@gmail.com, dgutov@yandex.ru > > Date: Sun, 21 Jun 2020 01:25:15 +0300 > > > > So, I recalculated by looking at date of the last commit of those "500" in > > GCC, > > and used that date on Clang. I made sure to sort out other corporate mails > > too. > > Command I used is: > > > > git log --since="Jun 8 21:34:46" --format="%ae" | grep -vP > > "@\S*(redhat|arm|suse|google|gnu|adacore|alibaba|intel|ibm|apple|linaro|huaw > > ei|c > > odesourcery|golang|sony|amd|chromium|nvidia|loongson|accesssoftek|ubisoft|mi > > cros > > oft|fb|energize|comstyle|nextsilicon|quicinc|azul|gentoo|graphcore|gdcprojec > > t|si > > five|imagelabs|xilinx|sap|sas|sigmatechnology|sonarsource|ericsson|lowrisc|h > > ight > > ec-rt|polymagelabs)\.(org|com|de|cz|cn|ai|se)" | sort -u | wc -l > > > > So, now GCC still gets 15, while for Clang this number gets increased to 89. > > This metric is irrelevant. Basically, you removed everyone who was a > prominent developer, so it's little wonder that you are left with a > small number. Using such arbitrary criteria, one can "prove" anything > for any project. > > Once again, the long history and the active development of GCC over > those long years are a clear evidence that your criterion is > completely off the mark. I thought I brought counter-arguments to both of your points in my previous email. Anyway, as Stefan mentioned, it is getting offtopic, so maybe let's not continue discussing GCC and Clang. From MAILER-DAEMON Sun Jun 21 05:13:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmw2T-0007b6-QJ for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 05:13:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmw2S-0007af-Pt for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:13:20 -0400 Received: from mail-ua1-x941.google.com ([2607:f8b0:4864:20::941]:46881) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmw2R-0007Qr-2x for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:13:20 -0400 Received: by mail-ua1-x941.google.com with SMTP id t26so4616561ual.13 for ; Sun, 21 Jun 2020 02:13:18 -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 :cc:content-transfer-encoding; bh=VBkHK8r+ZOFAhV7dBkhjHCYoNOgxWQE2olDfDMhtr98=; b=EYG+HkV4ANdXjMr05c5sO2STGktrxuiyDlXxfgStCfX0+BP3SeDGZ2IWhC0cjkB0rr Daq3AD9YctmCGgt9ZlvspF50WAAZZmDJ9QQ6DGDSLOb1kuzQqqCNGofpg07GEq4ARN4i ND0XSUQfGffZxvP2EGhCXv8MsZvFdIjtKg0huovM6AnZ7AMGwUtkFzbMnuwBs8Gm+EGu 36DSk3NkZLNmmsn5hUWbSJ6DjJLniHqKQxSin5679+YZDUQ6sxsACnc2kIdsXqm9F1P1 KmVJK3nquc1se90IKJegOSqUnJjUshyEa5/p6FU03/SUkxhGnnpuaiuM0N+7Ich9Py2R FDeQ== 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:cc:content-transfer-encoding; bh=VBkHK8r+ZOFAhV7dBkhjHCYoNOgxWQE2olDfDMhtr98=; b=p8A22eGho66vF/sH8mPnxu3XWxnmznuYqX7jXSs6oAQU5ao6/qc3xyDRB4oGq36YaQ Si4f0751kkFX9x7edybTSQIvj5c3BOGREz5nHxVucIZJVf0GoIsexgQ+FAB9Hpn9By5u heKwxw+t23Y5VHYRTMUYwXz2itSz3YjpJUEyTr0o0wxMeFxbXLllhXSbxlOMAo02PwqW U2a33US7jpjzy36AiBPLBXbVr1O4tuLopJE9ICFCWWz3rW4Q96G9YKoZBqV709AYTix+ Yvwle3+4rokxrTfw1NU6NfMfh3whk0FlkWjVn/XuBcmOsB8XRbgdVBGn7Ahl+XWMhllv gtZg== X-Gm-Message-State: AOAM533PDr7OcphBCe5TbIyGQRHxwLzF1bbyoVGUzBIIvY4pABDhxijS k3jRltX4xsd29w3fO2GdcZG9ZdnWdrbFUkDey4g= X-Google-Smtp-Source: ABdhPJyxKN+gqBf28g7rOsAdTAUghMlDoNtRdBz35zBo5WwS6DCE8Jr6CK/AsMJefArL5dM7NlBPu7hWiUtAKsj3Nt8= X-Received: by 2002:a9f:2636:: with SMTP id 51mr8296779uag.41.1592730797620; Sun, 21 Jun 2020 02:13:17 -0700 (PDT) MIME-Version: 1.0 References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> <062414c6-41f4-4803-9a62-28274825b8e0@default> In-Reply-To: <062414c6-41f4-4803-9a62-28274825b8e0@default> From: Yuri Khan Date: Sun, 21 Jun 2020 16:13:06 +0700 Message-ID: Subject: Re: [PATCH] Add user option to disable location in bookmarks To: Drew Adams Cc: Jamie Beardslee , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::941; envelope-from=yurivkhan@gmail.com; helo=mail-ua1-x941.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 09:13:21 -0000 On Sun, 21 Jun 2020 at 06:34, Drew Adams wrote: > If this is about save-place then save-place should > do the right thing. See above. If there's an option > to be added in that regard, it's a save-place option: > `save-place-ignore-bookmark-position'. The hook > function (see above) can move to the save-place place > if the option is non-nil, and just do nothing if it's > nil. I think you are too quick in punting the change to =E2=80=98save-place=E2= =80=99. I think it=E2=80=99s a matter of user expectations. You expect that a bookmark targets a particular location in the file. (There are bookmarks that do not target a file; let=E2=80=99s ignore them f= or now.) Activating the bookmark visits that file (if not already visited), displays that file=E2=80=99s buffer, and jumps to the bookmarked location (adjusting it by searching for context if necessary). Jamie expects that a bookmark targets the file in its entirety. Activating the bookmark then should visit the file (if not already visited) and display the file=E2=80=99s buffer. If the file had to be re-visited, save-place kicks in and restores the point and scroll position to the values saved when the file=E2=80=99s buffer was killed. If save-place is not active, the point and scroll position should remain whatever they end up by default (top of buffer?). I dare say both expectations are valid for files. Therefore, the fix should allow the user to avoid saving a location in bookmarks targeting files, perhaps by introducing a setting like =E2=80=98bookmark-set-save-location=E2=80=99, boolean, default t. Other boo= kmark types would then decide if it makes sense to honor that setting, and how. E.g. an Info buffer technically contains a whole Info manual but, through narrowing, makes an appearance of displaying only a single Info page; it would make sense to bookmark the page but not the exact line and context. From MAILER-DAEMON Sun Jun 21 05:34:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmwMw-00077D-Vi for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 05:34:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49430) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmwMv-00076v-AY for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:34:29 -0400 Received: from mout.gmx.net ([212.227.17.20]:36907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmwMs-0001ks-O3 for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:34:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1592732064; bh=pm/Ndc3INCLEIYkfooVqfCPuiF0PwULpcZ+PS0pvP24=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=gwHz4pyoKvPhLA5Mm8blIGV0SKb6JdlahSS6SF3pHOpihtsJmMwkOrw+hqqUIv7gA /LSHaByttqXeQMH6dYgUzaENo9rm3H4jr9sPrNn0JUXqKMbr3dasJoacOQOUxd0ire UbkuyVPjKXeO1mIziBDz/Rv0OHXj8D7sQ0HfxxpE= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from gandalf.gmx.de ([212.86.59.28]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N0X8u-1izffg0g0i-00wT5p; Sun, 21 Jun 2020 11:34:24 +0200 From: Michael Albinus To: yyoncho Cc: emacs-devel Subject: Re: tramp and executable-find References: <871rm9u5hw.fsf@gmail.com> <87blldzntb.fsf@gmx.de> <877dw1zl8y.fsf@gmx.de> <87366pzh1a.fsf@gmx.de> <87y2ogyjm0.fsf@gmx.de> Date: Sun, 21 Jun 2020 11:34:23 +0200 In-Reply-To: (yyoncho@gmail.com's message of "Sun, 21 Jun 2020 11:41:13 +0300") Message-ID: <87tuz4yd7k.fsf@gmx.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:1Kyp5mrVKVdbQwRZe5FaGX+G+iAGl0D7dxZ92nWRQplyPcV51zY 4h46apuiQP5rD/q4Ckoi0lqQlI0+5hjnQGIu5rivMXUXgYyi1g9v2mKAxHtpZy4IN1+MPsW gDYHC+et0EdhXHZm997X5fzKgxFcXfNVDmeysCAecWvHqE+Oinkr72n/QOt22gpEUNgHa1P YwSc225bso5reMPxheiqA== X-UI-Out-Filterresults: notjunk:1;V03:K0:+UR33Zu1Jsk=:XCA01YCBOxZPe8Tml5Nev5 Y3NH1C6xv+Y6JYs5tKwEnVnGX7497F5d42nTefiaHlb6yWGWvHr3SGZ4B81KHH32sg5brvpIg IXsWo8pjLE2Sg5nimwQ3o2kETJRipbx+c0Hm0Q2AHworfhYKniLkO8geZC625X/AMbOt+K2Jz C1tIZlgNQxBJHRkJFvKLWd9kSWMlrDFfHK88GDwiWsLz8NyybxOYblmZqcemiVKQqM7rimqYr A9buYI4C/WliX88+khk+pTW5B84ldaYWiRZ7XyWwi+3BecaP8S3yuPtjGJpSDuEJuexELJW8O cBYPE4HxWnrPYDd7yYjVNm5FwuZKdSNafnpE8lEw+Hz7NtHaP6HKV4dDqhWK7GMAfLEq9d7+E 3whfRJQBl1nSTKQ5H1Jhl8RfLdRFtKcObSN4HHcRJvKuuyr+zUmc3N4DAXtK6QdZ+LGbbgLqC UXJR9VkIDunzXrPyKouccBTlgXVnh2jJPOyUJgQ6INqbdAY2pPypFq0TKJ1HPvMGA+1A3jVqR i9QXrqARRNEHuH4CbVUfr1KYOs/bo/SwO5+4SzgaxBkj0rirhOVIGlo4XBcFq3SxN2PvFy2JH o4D1C+IPQi3BYVNKx5ixGDBnfg0FMOimXW5SXRE66Apwu1TPTMCk2dnUX+jFoA5lw2GVqlK/J TU3dnRh5ZsfA2Ifs2GgdbKIMaATT7M6Y5ncOahzz/vp+ScBvm6Na9GhvBrwgYBtAr/bcCXtvP 333Kp3sS2KMZcU947hYj01XKcWmI40U72GFITYS0BXz3lSFGDNBwPqsLV0cWXnPgeG4EslRhe hx8tI3QRk7F/Ir7ZC8pGkUYFss9u1uBDbQrBl44zzvcBNbFnq868mtk9oFY3agW4r338b4L6F P2Ph0Tk+aVT+gtFI/0f0BO3bdC64pf466GVtmrBG6nMzTnidtN2LyQezXL13dV7LpJpZKPqRa dPtZbx9LvtKQN2xB1+32+Ggm4BcpiNAEpZdGuM3w7TJS/kLUoKcrTTmzpMWwEBXz2kuNRqRxb YONGTkibW2BiJqIlSj4SDWCMgXHKMvmZrKHv3oLIPajrlcD46vQo42sJ988Wm9V9omiE7V79q lqv+j48DNnNmOQ0UVlYoVHXyZuNEl6AcaLMt6mKlBRmsSZMJyqdOKPAL2GM20iVuI44WA2u93 rg+odVAVBUxVECr1subvJPSHcJTnXwmO6+c5+nOiZzDZlfp40eSR3+Q5G65Poijmf9UnS0O+/ 1FRJiDBPjf+FNBjKw Received-SPF: pass client-ip=212.227.17.20; envelope-from=michael.albinus@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 05:34:24 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, FREEMAIL_FROM=0.001, PDS_TONAME_EQ_TOLOCAL_SHORT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 09:34:29 -0000 yyoncho writes: > Hi Michael, Hi Ivan, > Thank you for clarification. By remote path, you mean > tramp-remote-path, right? Yes. > Thanks, > Ivan Best regards, Michael. From MAILER-DAEMON Sun Jun 21 05:56:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmwic-0006kf-It for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 05:56:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52204) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmwib-0006kP-0w for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:56:53 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:45422) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmwiY-0004uh-Ve for emacs-devel@gnu.org; Sun, 21 Jun 2020 05:56:52 -0400 Received: by mail-wr1-x444.google.com with SMTP id c3so13727681wru.12 for ; Sun, 21 Jun 2020 02:56:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=zlVns75QI9WHQZWKXgtSKalnJ0wbCszDWqmLM/s11XY=; b=N2WH26iqDmHB6j0Zc89feFvhrb1PmOgNDSvpf/u3T2sQpPc3mAZH0s28MDzyydZzlZ T2tXT5hWMPggH6TXv/l7J5ZCuovvYv7SUoYmLB1mKGDD3m7PxkRGfndazBDOqg8OyAmS /lqJqPpe21cekPXDNCnv5V/85IQbkjjz59YmKbpldSyOI7Yc0MV0sexVG5XwOKI7sfoa 0gTVcw23ETxlQ4ad+NvesWKR2RD0vQSCuovPyb3a2YimcMtDhglWb+I/PYH0GQfMQ4Yg VL3ydjRFf63i/nVYWCd8tLdmGErwD/j9AJ2vBYGqQsktyShQ3gb9QX1pAFKP4NkINrFm NdPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=zlVns75QI9WHQZWKXgtSKalnJ0wbCszDWqmLM/s11XY=; b=rEHCcvMeySx5QuYjczzYPH4kLC5gaJjwfzx6l8j2+ycgmQ0wQk9WJrJB5cKo8yL782 MgBsEKbh9VO4jcyZocfPFTGRyqW1hjcakKm+QVuz6zSRm7xY+4psqzwsXVKTg3uDXQSg r64CvkajgAlU8BjVqv93KCLPBYjh5NmzYA63HvTILmt9b+7646ohFEKLeitE+Fd7Bfhz SQwZMeFCEO2rwDmKN6FIsN85Yip5rLSeyM7pzbmGplWSNjL9VrT6gmsxYC4+JTXE7aJo H6GwWiHqLKhAydSjQCdtMKWE3sCgpUzMe4pCqufwpTzbDkztQ1JULiP4kaFJwqi2lXqg pgZg== X-Gm-Message-State: AOAM532QHZsycaStvSSYQ/QTb+1K3GdHGSLr2PlL+XzIkADd3fIHrdMm CWLoG9OAB4bfpeB5GyURsVMNEw== X-Google-Smtp-Source: ABdhPJzyEGBY83OtX57KcSaAV2booAgmTMewkRPgJUGGRoG7HNgiBf6B0OlPFM4YCGYHT4PLGNDG0A== X-Received: by 2002:a5d:508e:: with SMTP id a14mr12667085wrt.335.1592733407093; Sun, 21 Jun 2020 02:56:47 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id n65sm11319370wmf.47.2020.06.21.02.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2020 02:56:46 -0700 (PDT) From: "Basil L. Contovounesios" To: Jamie Beardslee Cc: emacs-devel@gnu.org Subject: Re: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> <062414c6-41f4-4803-9a62-28274825b8e0@default> <87r1u9mfo0.fsf@gmail.com> Date: Sun, 21 Jun 2020 10:56:44 +0100 In-Reply-To: <87r1u9mfo0.fsf@gmail.com> (Jamie Beardslee's message of "Sun, 21 Jun 2020 12:22:07 +1200") Message-ID: <87a70wkahv.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::444; envelope-from=contovob@tcd.ie; helo=mail-wr1-x444.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 09:56:53 -0000 Jamie Beardslee writes: > (defun save-place--setup-hooks (add) > (cond > (add > (add-hook 'find-file-hook #'save-place-find-file-hook t) > + (eval-after-load "bookmark" > + '(add-hook 'bookmark-after-jump-hook #'save-place-bookmark-hook t)) with-eval-after-load is preferred to eval-after-load, but is it necessary? add-hook knows how to deal with as of yet undefined hook variables. > (add-hook 'dired-initial-position-hook #'save-place-dired-hook) > (unless noninteractive > (add-hook 'kill-emacs-hook #'save-place-kill-emacs-hook)) > @@ -334,6 +344,10 @@ save-place-find-file-hook > ;; and make sure it will be saved again for later > (setq save-place-mode t))))) -- Basil From MAILER-DAEMON Sun Jun 21 06:16:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jmx1N-0006Ai-SJ for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 06:16:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmx1M-0006AT-6D for emacs-devel@gnu.org; Sun, 21 Jun 2020 06:16:16 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:39354) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jmx1K-0007o7-BH for emacs-devel@gnu.org; Sun, 21 Jun 2020 06:16:15 -0400 Received: by mail-wm1-x331.google.com with SMTP id t194so13038089wmt.4 for ; Sun, 21 Jun 2020 03:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=ZgeLX8VR27wzpWkeypraxiiWFSJpqodL0KzCaLMGVWc=; b=K0297UOXnxuzJy55872Y9iWAZwIKuVfVK7NUsZXtxZQfmxxPiZ9nAcWW+mPYsia8Mk Of3iWFb6FqixhbEbWPpu13fRW92N/WA0cqsqAgByHYSoNHy/SZerpZ4TzZJ+MUolFKCW m2Ey/NSeC+Uvrqz96JqWyDi+UF3WFSfhMD7QO9HACIS6XrzWK8GuijP5ZJlOKDg/HZKl K5OFKtqYuAXfU50pPDD9dlyAln5StyOXY5zysJjRbkRAntfYbmRIRj7yms+k1i8koPy0 JROs0o2gRqE4p9s19FHjljwianwHSaMDZ7K7Utjhr9zGrFRX73ptPTAHBSOm4tDk4+F6 u5lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=ZgeLX8VR27wzpWkeypraxiiWFSJpqodL0KzCaLMGVWc=; b=CkFw4q57TrpKlkEvdQB+9k8FVYHRUr54uuZpUGY3Uy8vVRgl6/c7I2qYmTZzlNXNr3 4guNw5DYom6T/Iw5+XuZwAU6bt6KZ1g1THlShVOKspCyve3a+0qZRed/IUwf84Nq7ODm VHfPfVbcC3CvznTW9nW4TzOx+GUjKo2UpDjild1QCqKFcsuhCHEPitseAeUtPmf0BpqQ Yk1QgmZkQNaSisgMgxN/k3m8SiMoNcSTKo/ZYWxmTB4fKeCOjEbo0Zj28bLjCCJaRvYP 2EDrBCOkPmWGN8em1qeqWScRpyejfdpWlllzYm86qxP7WItODiAwg0a5+9rU6UcfmfSV 7GGA== X-Gm-Message-State: AOAM531iFTAiudUunYni6tbRlPAvoLcxdnMyEbWB3LBXBQucmgHzV8UA uPx2mSXYYmAjAbzAplq07Mzu2w== X-Google-Smtp-Source: ABdhPJwUMmWVwuCH2ybdaM0v+4Z/760YJWGRYkuZZVOQyo20jUPu436faRU47HJV3ADGKr77bsOB7Q== X-Received: by 2002:a7b:c007:: with SMTP id c7mr13147831wmb.165.1592734571926; Sun, 21 Jun 2020 03:16:11 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id u4sm13571182wmb.48.2020.06.21.03.16.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2020 03:16:11 -0700 (PDT) From: "Basil L. Contovounesios" To: Philipp Stephani Cc: emacs-devel@gnu.org Subject: Re: master c59475a: Fix a byte-compile warning. References: <20200620201425.26585.89611@vcs0.savannah.gnu.org> <20200620201426.EC93820A27@vcs0.savannah.gnu.org> Date: Sun, 21 Jun 2020 11:16:10 +0100 In-Reply-To: <20200620201426.EC93820A27@vcs0.savannah.gnu.org> (Philipp Stephani's message of "Sat, 20 Jun 2020 16:14:26 -0400 (EDT)") Message-ID: <87y2ogiv11.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::331; envelope-from=contovob@tcd.ie; helo=mail-wm1-x331.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 10:16:16 -0000 p.stephani2@gmail.com (Philipp Stephani) writes: > branch: master > commit c59475ae1e34332501ea0f5758176a29b2797ba6 > Author: Philipp Stephani > Commit: Philipp Stephani > > Fix a byte-compile warning. > > * lisp/gnus/gnus-cloud.el (gnus-cloud-download-data): Don't use > 'mapcar' or effect. > --- > lisp/gnus/gnus-cloud.el | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el > index 7ea691e..5028da5 100644 > --- a/lisp/gnus/gnus-cloud.el > +++ b/lisp/gnus/gnus-cloud.el > @@ -479,7 +479,7 @@ Otherwise, returns the Gnus Cloud data chunks." > (forward-line 1)))) > (if update > (progn > - (mapcar #'gnus-cloud-update-all chunks) > + (mapc #'gnus-cloud-update-all chunks) > (setq gnus-cloud-sequence highest-sequence-seen)) > chunks))) See https://debbugs.gnu.org/40280#20 for the correct fix. Thanks, -- Basil From MAILER-DAEMON Sun Jun 21 09:50:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn0MC-0001te-0A for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 09:50:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn0M9-0001tG-9G for emacs-devel@gnu.org; Sun, 21 Jun 2020 09:49:57 -0400 Received: from mail-io1-xd2c.google.com ([2607:f8b0:4864:20::d2c]:47102) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jn0M7-0002El-CP; Sun, 21 Jun 2020 09:49:56 -0400 Received: by mail-io1-xd2c.google.com with SMTP id a12so3042970ion.13; Sun, 21 Jun 2020 06:49:54 -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 :cc; bh=+BmNtydAQKNcsm1F/qzdIM06pzGzF4uX+b3b/daRZsI=; b=s8s2Cg0rTNnM+ECrC+a8fkEbszqwZLfGGcpHsmIV6H5gRTkUilGYS/tMMVmfpa4mTl 1QxazRW4leuG2Oc/S+OpM5rjV6AGYEWy79l7O4ht5Z/cVlPEzqeK+veGFtgWrRW/E3La 7DNWPnqse3wOpz/aXRIWmIqQhFxruRoRFPiabFcdIVDVhxm08vIEVrYfS3iYhRIw5x76 1+znuGyF6Xkm6u8Ep6fFZvgU2W7kPzfL7b+qYKrK87h34nK1dlKpU98N6GFPdDCmcNHx TZTYJxnmj7xV3ob25bSQCKRyws8h0yxm18aRCc70coobIQQCpepf028ip076ohR9TPlZ ksog== 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:cc; bh=+BmNtydAQKNcsm1F/qzdIM06pzGzF4uX+b3b/daRZsI=; b=oebm+poHYK0jipkyIhU355urEmMkKkgsqboVcxQJmFrRdItcwmudWPR+BLkcfLlrKG SFUwWaFs0a6OrXUGnOHHJNYP32Hcdm9idV6hvSIb4JL8L36Gm5RV7cLJjm92lIwXqEcT qRLNif+GC3fj/sq2ihuLX7kdX19vqgp54UtAPIHLc3oB8d6DpCzs7cNjvs3BkCaf/EsS UNOOu1jUg0z0SWgdq2ahhXAj8FCHyZKXYDZWoi2qVsAv7DyyQFXlwdsICAM8iMwR2zh8 AB/vbHEsknb6sNhTVeP5yh2O5sanY/Qmojl5pVHNjMjzXZsGXrI3/sCPD6t0spkOOdB7 Yd2A== X-Gm-Message-State: AOAM532SLwE71xcTcoMInJij++4Tl3kmpk57tLzfHWrklQ9HEyuWGadM yAH/TP+qCfK0PrQc/T4aZoHoLtwD8rVnrX2b5H0= X-Google-Smtp-Source: ABdhPJwsGLX5E+0AMxvwrzo/fNRX/ykl0uY2shmvxc4hpEchMAT3YwLw/zgp8U5pOX/g5X5GRYQMvSp/3/e0K1kRAss= X-Received: by 2002:a02:b697:: with SMTP id i23mr12533356jam.78.1592747393276; Sun, 21 Jun 2020 06:49:53 -0700 (PDT) MIME-Version: 1.0 References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> In-Reply-To: <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= Date: Sun, 21 Jun 2020 14:49:43 +0100 Message-ID: Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers To: Konstantin Kharlamov Cc: Eli Zaretskii , rekado@elephly.net, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="00000000000097de1b05a898662e" Received-SPF: pass client-ip=2607:f8b0:4864:20::d2c; envelope-from=joaotavora@gmail.com; helo=mail-io1-xd2c.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 13:49:57 -0000 --00000000000097de1b05a898662e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 20, 2020, 22:31 Konstantin Kharlamov wrote= : > > > > I also don't think GNU projects are any good to make examples of. Thi= s > is my > > > general experience of seeing how new projects get under GNU umbrella > to get > > > never heard of (which I attribute to points listed in my starting mai= l, > > > since > > > most of them are unspecific to Emacs). > > > > I hope you realize how saying that makes your opinions matter much > > less, do you? > > No, I don't. I think what Eli and Ricardo (and now me), are trying to alert you to is that starting a discussion about working methods of GNU projects from a position of such a broad disdain of such projects ("not any good to make examples of") is nonsensical and likely leads to your arguments being ignored, regardless of how sophisticated they are (even though they aren't)= . Jo=C3=A3o --00000000000097de1b05a898662e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 20, 2020, 22:31 Konstantin Kharlamov <hi-angel@yandex.ru> wrote:
<= blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px= #ccc solid;padding-left:1ex">
> > I also don't think GNU projects are any good to make examples= of. This is my
> > general experience of seeing how new projects get under GNU umbre= lla to get
> > never heard of (which I attribute to points listed in my starting= mail,
> > since
> > most of them are unspecific to Emacs).
>
> I hope you realize how saying that makes your opinions matter much
> less, do you?

No, I don't.

I think what Eli and Ricardo (and now me), are trying to alert= you to is that starting a discussion about working methods of GNU projects= from a position of such a broad disdain of such projects ("not any go= od to make examples of") is nonsensical and likely leads to your argum= ents being ignored, regardless of how sophisticated they are (even though t= hey aren't).

Jo=C3= =A3o


--00000000000097de1b05a898662e-- From MAILER-DAEMON Sun Jun 21 10:59:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn1R9-0000be-L7 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 10:59:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn1R7-0000ZM-G9 for emacs-devel@gnu.org; Sun, 21 Jun 2020 10:59:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53441) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jn1R7-0002lr-4v; Sun, 21 Jun 2020 10:59:09 -0400 Received: from [176.228.60.248] (port=2239 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jn1R3-0008PY-GU; Sun, 21 Jun 2020 10:59:06 -0400 Date: Sun, 21 Jun 2020 17:59:00 +0300 Message-Id: <83d05sv51n.fsf@gnu.org> From: Eli Zaretskii To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: pipcet@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Mattias =?utf-8?Q?Engdeg=C3=A5rd?= on Sun, 21 Jun 2020 09:48:24 +0200) Subject: Re: master 64e25cd: More robust NS hex colour string parsing References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> <83r1ui3j3m.fsf@gnu.org> <468DA4C0-EB5B-4B97-B389-9335F72CF283@acm.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 14:59:09 -0000 > From: Mattias EngdegÃ¥rd > Date: Sun, 21 Jun 2020 09:48:24 +0200 > Cc: pipcet@gmail.com, emacs-devel@gnu.org > > 15 juni 2020 kl. 10.31 skrev Mattias EngdegÃ¥rd : > > > <0001-Consolidate-RGB-string-parsers.patch> > > Is the patch acceptable, or does anything need to be altered? It seems that we are nearly done. I have no further comments. From MAILER-DAEMON Sun Jun 21 11:08:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn1Zv-0007GW-Bk for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 11:08:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn1Zs-0007Fv-Vk for emacs-devel@gnu.org; Sun, 21 Jun 2020 11:08:13 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53586) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jn1Zr-0004qr-C4; Sun, 21 Jun 2020 11:08:11 -0400 Received: from [176.228.60.248] (port=2794 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jn1Zq-0003AS-MM; Sun, 21 Jun 2020 11:08:11 -0400 Date: Sun, 21 Jun 2020 18:08:04 +0300 Message-Id: <83a70wv4mj.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Sun, 21 Jun 2020 02:11:18 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 15:08:13 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sun, 21 Jun 2020 02:11:18 +0300 > > I don't want to dismiss the critique outright. Believe it or not, I really do want you, personally, to be happier and more productive as a result of things I do here. I spent several hours today just thinking about this discussion. But our workflows are different, and expectations are different as well, and it seems that your requests tend to conflict with some design choices I have originally made. > > > One of them was to make the VC project a hands-off backend, one that immediately "just works" (or tries to), with a few possibilities for customization through local variables. This must be supported, of course. And the backend which treats an entire directory with its subdirectories as a project must also be supported. I'm not arguing for dropping any of these two. I'm arguing for adding yet another possibility, whereby the files belonging to a project are selected by the user, whether by marking in a Dired-like directory display, or by explicitly naming each file to be added, or by drag-n-drop. Based on the discussion of non file-visiting buffers related to a project, I think there should also be a command that would allow the user to include/exclude such buffers from the project, because it doesn't make sense to me to decide up front that any *shell* or *grep* or whatever buffers are automatically considered to be part of the project based on something as ephemeral as their default-directory. > You seem to think (and this is only my guess, of course) that a project is a unit of work. And that whatever files, or activities, are pertinent to your current goal, are a part of that project. Hence, if you do a search anywhere, in any directory, but in pursuit of that goal, the search results are certainly a part of the current project. It is certainly a valid viewpoint, but one that I have never considered before. I think it needs to be considered because it's a valid use case and happens in practice. It would be useful to support it OOTB. Even if all the files belonging to a project are in the same directory, the MO where _all_ (or a vast majority) of the files in a directory belong to the project is a serious limitation, and we shouldn't impose it on our users. Granted, one can produce a large enough exclude/ignore list to leave only a handful of files, but if just 5% or 10% of files in a directory should be part of a project, excluding the other 90% or 95% is a nuisance and an unnatural thing to do. > So I'm not sure where to go from here. If the latter viewpoint has more supporters, perhaps an new, alternative backend is the way to go. This would be a test of the API, how well it adapts to different goals. I'm not talking in terms of backends, I'm talking in terms of user-facing features. I think we should decide whether a feature such as the above should be part of what project.el supports, and then consider how to implement it. I don't see why the implementation should be very complicated, FWIW, so there's no need to bring the implementation into the picture, not yet. > And project-switch-to-buffer should work with all kinds of projects. > > Yes. And one such kind is an ad-hoc collection of files and buffers, > where only the user knows which ones he/she is interested in and which > ones he/she isn't. Every IDE I saw supports something like that, so > we should do that as well, IMO. > > I'm curious about those "every IDE". I don't recall such a feature in ones I tried. Perhaps I just didn't use it, of course. Few examples below: Code::Blocks: https://www.cs.odu.edu/~zeil/FAQs/Public/newIDEProject/index.html#creating-a-project-from-existing-code Visual Studio: https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects?view=vs-2019 Look under "Create a project from existing code files", "Add files to a solution", "Create empty solutions" QNX: https://www.qnx.com/developers/docs/6.4.1/ide_en/user_guide/tutorials.html Netbeans: https://netbeans.apache.org/kb/docs/cnd/quickstart.html#_adding_existing_files_to_your_project TI's Code Composer: http://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html#adding-or-linking-source-files-to-project From MAILER-DAEMON Sun Jun 21 11:36:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn21U-0008Oj-UJ for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 11:36:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44432) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn21S-0008OL-Et for emacs-devel@gnu.org; Sun, 21 Jun 2020 11:36:42 -0400 Received: from forward105p.mail.yandex.net ([77.88.28.108]:51486) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn21P-0001EZ-2i; Sun, 21 Jun 2020 11:36:41 -0400 Received: from mxback20j.mail.yandex.net (mxback20j.mail.yandex.net [IPv6:2a02:6b8:0:1619::114]) by forward105p.mail.yandex.net (Yandex) with ESMTP id 9121C4D40921; Sun, 21 Jun 2020 18:36:33 +0300 (MSK) Received: from myt5-95c1fb78270f.qloud-c.yandex.net (myt5-95c1fb78270f.qloud-c.yandex.net [2a02:6b8:c12:1725:0:640:95c1:fb78]) by mxback20j.mail.yandex.net (mxback/Yandex) with ESMTP id i9nX1OweBu-aXOesW1s; Sun, 21 Jun 2020 18:36:33 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1592753793; bh=sO+v3mLsLA6KWvBx0beRhO0K9LQNr8OwbX/wYT0Hp2Q=; h=In-Reply-To:Cc:To:From:Subject:Message-ID:References:Date; b=fBOwkJY6NQ+aGmtNpSQbCps0y5LjOc5gEEpnv2nLI0p9U9RJbQNuEj5I/KAVKyXzU zLUIg1ZPJJrIAre5hdNaWFeOtbHhwqbv02y43xpLtBpiLz9RtCDRPa3Zv/N6jKgBG/ 1y/otG2dMSmkfwfipJkFuF4eqBv4nrkrkdDEzH0Y= Authentication-Results: mxback20j.mail.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt5-95c1fb78270f.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id Jf2XsX9p0x-aWG8IjiZ; Sun, 21 Jun 2020 18:36:32 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <7c01ed6b2b99761b4c7265b88d6257695d19af5e.camel@yandex.ru> Subject: Re: Why are so many great packages not trying to get included in GNU Emacs? WAS: Re: Making Emacs more friendly to newcomers From: Konstantin Kharlamov To: =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= Cc: Eli Zaretskii , rekado@elephly.net, dgutov@yandex.ru, stefan@marxist.se, emacs-devel@gnu.org Date: Sun, 21 Jun 2020 18:36:31 +0300 In-Reply-To: References: <87k12bdgx7.fsf@yahoo.com> <87r1wi7a8o.fsf@yahoo.com> <875zdteybt.fsf@runbox.com> <87368wrvf5.fsf@yahoo.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <874krex73o.fsf@gmail.com> <87eeqctgb4.fsf@elephly.net> <83wo43xom6.fsf@gnu.org> <83r1u9vnr3.fsf@gnu.org> <09632e8ec343ddee558b18f811ef6da77e594f55.camel@yandex.ru> <83pn9tvhta.fsf@gnu.org> <83mu4xvari.fsf@gnu.org> <1faa5c4154ea49a2d10d16741dfad8451ef27abd.camel@yandex.ru> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=77.88.28.108; envelope-from=hi-angel@yandex.ru; helo=forward105p.mail.yandex.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 11:36:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 15:36:42 -0000 On Sun, 2020-06-21 at 14:49 +0100, João Távora wrote: > On Sat, Jun 20, 2020, 22:31 Konstantin Kharlamov wrote: > > > > I also don't think GNU projects are any good to make examples of. This > > is my > > > > general experience of seeing how new projects get under GNU umbrella to > > get > > > > never heard of (which I attribute to points listed in my starting mail, > > > > since > > > > most of them are unspecific to Emacs). > > > > > > I hope you realize how saying that makes your opinions matter much > > > less, do you? > > > > No, I don't. > > I think what Eli and Ricardo (and now me), are trying to alert you to is that > starting a discussion about working methods of GNU projects from a position of > such a broad disdain of such projects ("not any good to make examples of") is > nonsensical and likely leads to your arguments being ignored, regardless of > how sophisticated they are (even though they aren't). Thank you for elaboration! Well, someone's position per se can not make her/his arguments more or less valid. They may contradict the position, or they may be less or more valid… But it is impossible to make correct judgement of arguments by looking at position alone. Those (hopefully) hypothetical people basically smugly declare "I am right because I know I am". Great for them! Bad for others though, because even if they were right, no one but themselves will know that. Idk, maybe because I had too wide experience, having contributed to dozens of unrelated projects, having used a dozen of programming languages in various paradigms, and having tried to grok various mathematical stuff, but one thing I used to understand is: "However I am sure I am right, I may turn out to be wrong". I wish those mentioned people had that understanding. From MAILER-DAEMON Sun Jun 21 12:18:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn2gN-00051s-7y for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 12:18:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51798) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn2gL-00051M-HW for emacs-devel@gnu.org; Sun, 21 Jun 2020 12:18:57 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:25999) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn2gI-0007LL-W0 for emacs-devel@gnu.org; Sun, 21 Jun 2020 12:18:56 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0929580D86; Sun, 21 Jun 2020 12:18:53 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 2C5F080A02; Sun, 21 Jun 2020 12:18:51 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592756331; bh=MUq8+IjFTY+kgHM7YMga26J4JQUpXzuqoRPNJcGglCI=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=DaMFChOnkscRM9N43jARHQhKlvIMfnULFXjfGQnUykFNrvF937lp8IR51axMmsbiL 7WY5yTeQwIptRVLsBprYSuXGIer6OISSvADaaxbQHenthBAesLIxPg7HMrl3D7SUqI fXN71Q5/YxLvCKTgvtjJ+TizhAQOleEzt+6qx97tDLbFUjKmhxRiWGiy+7DotpEUtk jznYYRe3pcGo2g2IzBpxq/QxAcJdsQqB9zhdpkblvaYFkGSDAriQF4/cLkataL7f4P sG00FEc3EE0CM9fTJE1F6nWnKs2Hy1lJ2LW91YP4poaqIpZLmQmuX+jCoqJXZlzIvS 6Mylp19kNk8uQ== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E272D120460; Sun, 21 Jun 2020 12:18:50 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Cc: "Basil L. Contovounesios" Subject: Re: master 1ecd350 2/2: Evaluate some unnecessarily quoted lambdas Message-ID: References: <20200621124626.3690.70321@vcs0.savannah.gnu.org> <20200621124629.C414420A26@vcs0.savannah.gnu.org> Date: Sun, 21 Jun 2020 12:18:50 -0400 In-Reply-To: <20200621124629.C414420A26@vcs0.savannah.gnu.org> (Basil L. Contovounesios's message of "Sun, 21 Jun 2020 08:46:29 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.011 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 12:18:53 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 16:18:57 -0000 > - (lambda-code (byte-compile '(lambda ())))) > + (lambda-code (byte-compile (lambda ())))) I can't believe I'm doing that, but: this hunk is wrong! `byte-compile` takes source code as input, not values. It does go to the trouble of trying to handle the case where we pass it a function value that's not yet compiled because it's an important use-case in practice, but it's better to avoid it since the above means that we'll first turn '(lambda () ()) into a closure object which `byte-compile` then has to convert back to something like (lambda () ()). Stefan From MAILER-DAEMON Sun Jun 21 14:08:30 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn4OM-0007RC-8u for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 14:08:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn4OK-0007Qt-Ig for emacs-devel@gnu.org; Sun, 21 Jun 2020 14:08:28 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:34426) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jn4OI-0005Qk-He for emacs-devel@gnu.org; Sun, 21 Jun 2020 14:08:28 -0400 Received: by mail-wm1-x330.google.com with SMTP id u26so12081823wmn.1 for ; Sun, 21 Jun 2020 11:08:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=ZZJaNV5CfZ/K0Op0WjgVtejQtbxHQuk0vzIPtVe7Who=; b=nqaj4KH1j9pvsNlPk0hRvI2qaUdkU75BR58miftr5jlXPTwuvcdiX6ze//yqhCVb4c 07xTWxc8Cj3G74dmAXiW2/XjGHHCNi56Ui6Fx5X+q6JxmqlpNFYYdxZXFHtPRa6pT4jU snSDaBiY2tWU64eaB0C3sBe56ZlMdEnwbmqPGw/F/6jO0LR7BIMIlFbAcU4UHiWnvehL Lk82stS21lI+/ulvnma45/JgIUpQkS5JP7JXZCIqqpko5yPItHmDUekocMeWK8GiU9DA kmQrVOpf9F1HlIjc+IltzsKkAZMHeg+NAGEhnCaO8fovCAdc+xMJegLgHhyzk+3Owrfa TKWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=ZZJaNV5CfZ/K0Op0WjgVtejQtbxHQuk0vzIPtVe7Who=; b=PWQAKZCMSDvvZrAo+looSJzxhllE6MUBFE6adaB9CWngszr+5sY84CJKjfX78rvFsH Yw2VG0RR3w0+j+lxLZZJ06E7r6b6rPOuiSx/HMdAxduP1t1mppJDpzWStxiANEDmXVPo gVC2RYcTOpaqfvyp1ErWNEOow46CroYjPwdJKT5DWwh5mbnR3VASX6fFb5l80DBbir2/ b0xsLPVpi/gC8dcxj80Qe6/Lt+sKS0P+amKsGPd2fgTuVhgqdPudd+YiNIPkWxGBi8aB UJOhISTBnPugcKQKSucp5YA83PppYgkD7E7qXyRlMl4Sk1+SHkOvTH+IjrfbyYCTyZ7+ D1eA== X-Gm-Message-State: AOAM533Bzc2xtuDXMNi0AAVFxLp6VkUtj3iV9hM01FcW641X6112bdg8 P2pvp6PApxo9lwIgePz/5MOtog== X-Google-Smtp-Source: ABdhPJw5CsBnOliqlkyoZJertO3a9DqC20NEf+HPzkDhf3+NXDZPKTcOQYOWuN8Zny8WYCtbIEoQag== X-Received: by 2002:a1c:4143:: with SMTP id o64mr14014303wma.157.1592762904299; Sun, 21 Jun 2020 11:08:24 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:1f68:7ff5:120d:64e]) by smtp.gmail.com with ESMTPSA id j14sm14680918wrs.75.2020.06.21.11.08.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2020 11:08:23 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master 1ecd350 2/2: Evaluate some unnecessarily quoted lambdas References: <20200621124626.3690.70321@vcs0.savannah.gnu.org> <20200621124629.C414420A26@vcs0.savannah.gnu.org> Date: Sun, 21 Jun 2020 19:08:22 +0100 In-Reply-To: (Stefan Monnier's message of "Sun, 21 Jun 2020 12:18:50 -0400") Message-ID: <87lfkg8f6x.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::330; envelope-from=contovob@tcd.ie; helo=mail-wm1-x330.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 18:08:29 -0000 Stefan Monnier writes: >> - (lambda-code (byte-compile '(lambda ())))) >> + (lambda-code (byte-compile (lambda ())))) > > I can't believe I'm doing that, but: this hunk is wrong! > > `byte-compile` takes source code as input, not values. It does go to > the trouble of trying to handle the case where we pass it a function > value that's not yet compiled because it's an important use-case in > practice, (Also it's advertised in its docstring.) > but it's better to avoid it since the above means that we'll > first turn '(lambda () ()) into a closure object which `byte-compile` > then has to convert back to something like (lambda () ()). Ah okay. I admit the main reason I thought the hunk was okay is because (byte-compile (lambda ())) and (byte-compile '(lambda ())) produce the same byte-code. Thanks for catching that, now reverted. Revert last change in benchmark.el 0792f8e4f0 2020-06-21 19:01:40 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=0792f8e4f0de2328c57d552a5845bdf77265a971 -- Basil From MAILER-DAEMON Sun Jun 21 14:46:39 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn4zG-0002lF-Q1 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 14:46:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn4zF-0002l6-C2 for emacs-devel@gnu.org; Sun, 21 Jun 2020 14:46:37 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:48470) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn4zC-0002Vl-Tl for emacs-devel@gnu.org; Sun, 21 Jun 2020 14:46:36 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05LIi3Tj166905; Sun, 21 Jun 2020 18:46:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=Iah8mk17wksyk0uSzzT67oCwHxzfmqWTUMeznqR7M5M=; b=nYARK2345CXslXiymtdWuW0iX67OqrSZXUhhuepmxcQCq/UJGyAiNIXX5sVf8HWCr4af faNROFgz5YIBaAzSsNuY+BqyQUJk4hbjscganv06GeJD+IrRwdItFE347HNFwIj8F/I/ Iwcb9LPWa27PJw52ta6xrJgbcMActW/zYCAADa0t3/1P62kJU56qWl2QkZ34LSEvE/om MpH5unuSvPQ/Ipr8HAGhCQzNMmxAUbkwb54xga3u1ZXcJ8oDfT8X/4naAbC33uZpXEZ/ 7Y0eE/+/vsMFavv5HmT3kLA/2Bg/TWHfCP875k1boBTnkaLsxZt+msLehaUmuXMORFG2 Zw== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2120.oracle.com with ESMTP id 31sebbbc1f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 21 Jun 2020 18:46:31 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05LIi1HZ074980; Sun, 21 Jun 2020 18:44:31 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 31sv7nx8xs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 21 Jun 2020 18:44:31 +0000 Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05LIiThX026200; Sun, 21 Jun 2020 18:44:30 GMT MIME-Version: 1.0 Message-ID: <2ee3b657-fefb-4ced-8f98-967e6c353e1e@default> Date: Sun, 21 Jun 2020 18:44:29 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Yuri Khan Cc: Jamie Beardslee , Emacs developers Subject: RE: [PATCH] Add user option to disable location in bookmarks References: <87sgep35cb.fsf@gmail.com> <87blld2x5h.fsf@gmail.com> <062414c6-41f4-4803-9a62-28274825b8e0@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9659 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 suspectscore=0 mlxlogscore=999 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006210147 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9659 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 cotscore=-2147483648 mlxscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006210146 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 14:46:33 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 18:46:38 -0000 > > If this is about save-place then save-place should > > do the right thing. See above. If there's an option > > to be added in that regard, it's a save-place option: > > `save-place-ignore-bookmark-position'. The hook > > function (see above) can move to the save-place place > > if the option is non-nil, and just do nothing if it's > > nil. >=20 > I think you are too quick in punting the change to =E2=80=98save-place=E2= =80=99. > > I think it=E2=80=99s a matter of user expectations. Of course it is. User expectations, common use cases, and individual preferences. The _general_ expectation is realized in the default make-record function. And in the default jump-to behavior. That's why they are defaults. But they're only defaults. > You expect that a bookmark targets a particular location in the file. No. I don't expect anything particular from a given bookmark, other than what it advertises. Emacs users, in general, expect, by default, what the default behavior provides. That's why it's the default. > (There are bookmarks that do not target a file; > let=E2=80=99s ignore them for now.) First, not targeting a file is not the same thing as not targeting a particular location in a file. But if you really mean not targeting a position in a file, why ignore the case of bookmarks that don't target such locations, if that's just what this user's looking for? If you as a particular user, or a particular mode or library author, want all bookmarks used in some context - or even all bookmarks - to not go to a specific file position then why create bookmarks that do that? Why use the _default_ make-record function to create bookmarks for that use case? That's the first point. There's no requirement to use the default make-record function, if you want a custom behavior. > Activating the bookmark visits that file (if not already > visited), displays that file=E2=80=99s buffer, and jumps to the bookmarke= d > location (adjusting it by searching for context if necessary). By default, yes. That's the default behavior for jumping to a bookmark, including a file-visiting bookmark.=20 > Jamie expects that a bookmark targets the file in its entirety. > Activating the bookmark then should visit the file (if not already > visited) and display the file=E2=80=99s buffer. I understand that. (Visiting a file does put the cursor at _some_ position - bob by default.) > If the file had to be > re-visited, save-place kicks in and restores the point and scroll > position to the values saved when the file=E2=80=99s buffer was killed. I= f > save-place is not active, the point and scroll position should remain > whatever they end up by default (top of buffer?). Yes, bob, by default, when first visiting a file. > I dare say both expectations are valid for files. All kinds of expectations are valid. Whatever a user wants and is realizable is valid. No one's suggested that Jamie's preferred behavior is invalid. > Therefore, the fix should allow the user to avoid > saving a location in bookmarks targeting files, That doesn't follow. A user should be able to jump to a file bookmark and end up at the last save-place location in that file. That says nothing about what gets saved in a bookmark record. Is the need to avoid saving a location in bookmarks? Or is the need to always visit a file bookmark at bob (position 1)? Or is the need to always (or only sometimes perhaps) let a hook function adjust the position upon visiting? I think the need described is just to have jumping to a file bookmark go to save-place's recorded location within the file. > perhaps by introducing a setting like > =E2=80=98bookmark-set-save-location=E2=80=99, boolean, default t. saveplace.el affects only file (and Dired) visits, right? So only file (and possibly Dired) bookmarks present the user with this need. > Other bookmark types would then decide if it makes > sense to honor that setting, and how. You mean they would _have_ to do that - decide. Or else they would just get their `location' settings ignored whenever someone wanted save-place to ignore `location' for file bookmarks. So _every_ kind of bookmark would now need to add logic to deal with this blanket, all-bookmarks option. Unless, that is, for some reason some particular kind of bookmark really wanted to make its `location' be ignored whenever the option is enabled. In which case, it probably would have just not included a `location' setting, or it too would have already felt the need for such an option. > E.g. an Info buffer technically contains a whole Info manual but, > through narrowing, makes an appearance of displaying only a single > Info page; it would make sense to bookmark the page but not the exact > line and context. Would it? If necessarily so, then Info bookmarks wouldn't have a `location' setting, would they? Now, you can say that we could add such a blanket user option, which makes all bookmarks, of all kinds, have their `location' setting ignored. And we could compensate for that blanket treatment by providing a separate option that lists bookmark types (or buffers or files or whatever) to exclude from the option behavior. Or we could incorporate that into the same option, by making it (1) a list of type, buffer, files, or whatever to exclude; (2) t or `all', meaning include all; or (3) nil, meaning always respect `location'. _____ Or we can just satisfy the need, which is for save-place, by having save-place do what it does for visiting files generally: invoke its hook, already defined, for visiting a file, `save-place-find-file-hook'. That hook function (which shouldn't be named `*-hook', BTW) does just what's wanted. (And perhaps Jamie will want to do similarly for Dired bookmarks, using `save-place-dired-hook'.) And the place to use such a save-place hook function for bookmark jumping, is `bookmark-after-jump-hook', just as the place to use the same function for `find-file' visiting is `find-file-hook'. Completely comparable, IMO. From MAILER-DAEMON Sun Jun 21 15:23:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn5ZD-00005t-A3 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 15:23:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn5ZB-0008PJ-5a for emacs-devel@gnu.org; Sun, 21 Jun 2020 15:23:45 -0400 Received: from mail1465c50.megamailservers.eu ([91.136.14.65]:51268 helo=mail268c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn5Z9-0007oU-5Y; Sun, 21 Jun 2020 15:23:44 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592767418; bh=yH6Wcon23PiZMjhsiGqCregt0k8ksCq8GqpYkvxm2+o=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=kRokSyrmWLiS9m+/PJRvFtz0ZL7TcBi6fFiBCqY4TjFIEkXSqwbOKtnJWr3V6jDaX GzGCK4ogB4znRuHuVA3AgAmw58znhzapXmO4CSKzc4ZQjPyf23tcuzOboYtQ0xG8gB R54dO08iMHxQNmraE9HpBtwUupZqZSuLd/wZidoY= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail268c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05LJNaxv024643; Sun, 21 Jun 2020 19:23:38 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 64e25cd: More robust NS hex colour string parsing From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <83d05sv51n.fsf@gnu.org> Date: Sun, 21 Jun 2020 21:23:36 +0200 Cc: pipcet@gmail.com, emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20200608120746.30163.87810@vcs0.savannah.gnu.org> <20200608120747.80E8E20A2E@vcs0.savannah.gnu.org> <83r1uk429y.fsf@gnu.org> <3C92A091-F389-4179-B2F0-B3AA5ABD6CCE@acm.org> <83pna43xrl.fsf@gnu.org> <9259B4A6-F3CC-4243-9F08-2882993C9B2C@acm.org> <83a71741mr.fsf@gnu.org> <83y2or2c0o.fsf@gnu.org> <82DE05DD-0F2A-4722-AB75-D9D95F58BAF4@acm.org> <83v9ju3nbl.fsf@gnu.org> <83sgey3m3i.fsf@gnu.org> <83r1ui3j3m.fsf@gnu.org> <468DA4C0-EB5B-4B97-B389-9335F72CF283@acm.org> <83d05sv51n.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F1D.5EEFB338.004F:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=BZ+mLYl2 c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=wpu4gX4tqElpF4IGxqcA:9 a=CjuIK1q_8ugA:10 a=ncZ9vwaUYPMA:10 a=_FVE-zBwftR9WsbkzFJk:22 Received-SPF: softfail client-ip=91.136.14.65; envelope-from=mattiase@acm.org; helo=mail268c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 15:23:39 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 19:23:45 -0000 21 juni 2020 kl. 16.59 skrev Eli Zaretskii : >> Is the patch acceptable, or does anything need to be altered? It = seems that we are nearly done. >=20 > I have no further comments. Thank you, pushed to master. From MAILER-DAEMON Sun Jun 21 19:19:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn9F3-0006jS-JZ for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 19:19:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn9F2-0006jM-7m for emacs-devel@gnu.org; Sun, 21 Jun 2020 19:19:12 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:36881) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn9Ez-0006bS-Tc; Sun, 21 Jun 2020 19:19:11 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 8681B240006; Sun, 21 Jun 2020 23:19:04 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Cc: Dmitry Gutov , philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org Subject: Re: master 1e3b0f2: Improve doc strings of project.el Organization: LINKOV.NET References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> Date: Mon, 22 Jun 2020 01:24:15 +0300 In-Reply-To: <83a70wv4mj.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 21 Jun 2020 18:08:04 +0300") Message-ID: <87k100jbw0.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.230; envelope-from=juri@linkov.net; helo=relay10.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 19:19:06 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 23:19:12 -0000 >> And one such kind is an ad-hoc collection of files and buffers, >> where only the user knows which ones he/she is interested in and which >> ones he/she isn't. Every IDE I saw supports something like that, so >> we should do that as well, IMO. >> >> I'm curious about those "every IDE". I don't recall such a feature >> in ones I tried. Perhaps I just didn't use it, of course. > > Few examples below: > > Code::Blocks: > https://www.cs.odu.edu/~zeil/FAQs/Public/newIDEProject/index.html#creating-a-project-from-existing-code > > Visual Studio: > https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects?view=vs-2019 > Look under "Create a project from existing code files", "Add files > to a solution", "Create empty solutions" > > QNX: > https://www.qnx.com/developers/docs/6.4.1/ide_en/user_guide/tutorials.html > > Netbeans: > https://netbeans.apache.org/kb/docs/cnd/quickstart.html#_adding_existing_files_to_your_project > > TI's Code Composer: > http://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html#adding-or-linking-source-files-to-project Such point-and-click wizards are more of a hassle than a help. If someone doesn't want to specify files to *exclude* in .gitignore, then in Emacs a better thing to do would be to support a special file .project with the same syntax as .gitignore but specifying what files to *include* in the project. Should such file also support specifying buffer names, I'm not sure. From MAILER-DAEMON Sun Jun 21 19:19:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn9F5-0006lV-QK for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 19:19:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn9F4-0006ji-Fa for emacs-devel@gnu.org; Sun, 21 Jun 2020 19:19:14 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:49217) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn9F2-0006bo-Ax for emacs-devel@gnu.org; Sun, 21 Jun 2020 19:19:14 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay11.mail.gandi.net (Postfix) with ESMTPSA id DDD61100005; Sun, 21 Jun 2020 23:19:07 +0000 (UTC) From: Juri Linkov To: =?iso-8859-1?Q?K=E9vin?= Le Gouguec Cc: Karl Fogel , Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? Organization: LINKOV.NET References: <87r1ubfyq5.fsf@red-bean.com> <87o8pffqm2.fsf@gmail.com> Date: Mon, 22 Jun 2020 01:37:32 +0300 In-Reply-To: <87o8pffqm2.fsf@gmail.com> (=?iso-8859-1?Q?=22K=E9vin?= Le Gouguec"'s message of "Fri, 19 Jun 2020 09:43:01 +0200") Message-ID: <87366ojb9v.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.231; envelope-from=juri@linkov.net; helo=relay11.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 19:19:10 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, 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 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2020 23:19:14 -0000 >> But I'd like to understand the more general question too: why does >> `read-multiple-choice' lock the user into the minbuffer so strictly? > > IIUC (but maybe I'm wrong; I'm not entirely sure I understand all the > nuances between the minibuffer and the echo-area), it's "just" an > implementation detail: read-multiple-choice uses read-event, which does > not use the minibuffer. > > So you're not actually "locked into the minibuffer" (if you were, keys > such as C-x o would be available to you), it's just that > read-multiple-choice traps you in a while-loop, calling read-event until > you hit one of the keys you are prompted for. > > FWIW, back in December[1] Juri mentioned that read-multiple-choice > should probably be patched to use the minibuffer. > > [1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35564#184 Indeed, read-multiple-choice should use the minibuffer. Other similar functions were already patched to use the minibuffer. From MAILER-DAEMON Sun Jun 21 20:01:53 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jn9uL-0005JT-4o for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 20:01:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33778) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jn9uJ-0005JK-AT for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:01:51 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:39642) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jn9uG-00045h-7m for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:01:50 -0400 Received: by mail-wm1-x335.google.com with SMTP id t194so14053354wmt.4 for ; Sun, 21 Jun 2020 17:01:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=R1dKjHj9nHLpkAY7UN5zN9m0JEbuybE7MRkW6oWAa6A=; b=XCMHayFepuXk3BrrQPDlX/gK/BovCWaVM87tYP32Yxfbqjz5woz0lkN4CkkTmaX1BM Qy4pELssfzPDDvMYJGYK7AsdwEfhgtm4m+FacjxYxUe9HzD3JJul/1SWQZVU3srMGHOH Wk3ec4qlGKOe8h4Xs9edP0XWbpM0D2azsR0PP023GqvHPmZqbiyziEeH4u5UwDvUXTKj J4HBLnaV2vARBwTLzYmFbo8wpoXR2KJmPH5GblVKFqOM3frcazM9dpDC+czzmSk9l5YE XiJHbTEymgnWXIj7obXDKwvW9wCg+8IrvhLOG4LW8w8FrrWX4eNR//BSReo33Krqovq6 GNMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language; bh=R1dKjHj9nHLpkAY7UN5zN9m0JEbuybE7MRkW6oWAa6A=; b=PB/L9WhJMoD2vUNEm72HY72HUC/4ENhzjFVew+2neTsHHX8m+aK1f8SmZlMHMrh+OB 6fajir+wZlq7xDF9l5LMB55IbEUd1j1sNWAwW4mtUyLxGFbDiLa18eWiFnaCR8MPLQlk wGX8khFjyEphhM1TWn3mMZMzONywrsyTfDHGfxUGQrip/8q1sdLdni2IOKPr/TUIza3C qxcaYCZw8rMHCuftOuYrHnCwatfQrkzUfoOu7pNYXL7IszYpgepnYnH79h5ll7PfPqSu R/3NZXq0CoY0/arBCcMlkHUQdiFJ5zS1MQyH3Sm/GDomg1ZEeaeM65muaY1e4QHhTTe1 PICw== X-Gm-Message-State: AOAM533mdohARa0BFjyqUvGRZEfTBE7++qes+rvb42s0aiCTQjX8QxCD B94gPS8FkmWiNexFAgEHzaxn74+w X-Google-Smtp-Source: ABdhPJy9ozkOxTB8TF7rc2P55cs4Qq/iVQE8TtqjVLMbB4H74CyE+4aE69nVWjxGw+HCh84//+zldg== X-Received: by 2002:a7b:c5c4:: with SMTP id n4mr10551938wmk.67.1592784105016; Sun, 21 Jun 2020 17:01:45 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id b17sm6912091wrp.32.2020.06.21.17.01.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 21 Jun 2020 17:01:44 -0700 (PDT) Sender: DG Subject: Re: project-find-regexp using ripgrep To: "andres.ramirez" Cc: emacs-devel References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <86tuz69y51.fsf@gmail.com> From: Dmitry Gutov Message-ID: <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> Date: Mon, 22 Jun 2020 03:01:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <86tuz69y51.fsf@gmail.com> Content-Type: multipart/mixed; boundary="------------F0C43CFB5748594229E4A589" Content-Language: en-US Received-SPF: pass client-ip=2a00:1450:4864:20::335; envelope-from=raaahh@gmail.com; helo=mail-wm1-x335.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 00:01:51 -0000 This is a multi-part message in MIME format. --------------F0C43CFB5748594229E4A589 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 20.06.2020 07:09, andres.ramirez wrote: > Dmitry> Anybody? > > Before the patch: > --8<---------------cut here---------------start------------->8--- > Elapsed time: 6.010101s > Elapsed time: 5.863914s > --8<---------------cut here---------------end--------------->8--- > > After installing ripgrep and patch: > --8<---------------cut here---------------start------------->8--- > Elapsed time: 3.261737s > Elapsed time: 1.742008s > --8<---------------cut here---------------end--------------->8--- Thanks, Andres. Looks promising. Here's the latest version of the patch, if you'd like to test. I don't expect major changes in performance, but it does add a pipe to 'sort', which creates some overhead proportional to the number of search results. To enable ripgrep with this, one needs to 'M-x customize-variable xref-search-command-template'. --------------F0C43CFB5748594229E4A589 Content-Type: text/x-patch; charset=UTF-8; name="xref-ripgrep.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xref-ripgrep.diff" diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 3e3a37f6da..a8283d0d4a 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1246,12 +1246,45 @@ xref-matches-in-directory (declare-function tramp-tramp-file-p "tramp") (declare-function tramp-file-local-name "tramp") +;; '-s' because 'git ls-files' can output broken symlinks. +(defconst xref-grep-search-template + "xargs -0 grep -snHE -e " + "Use Grep to search a list of files piped from stdin.") + +;; See https://github.com/BurntSushi/ripgrep/issues/152 on +;; the subject of non-deterministic output. +(defconst xref-ripgrep-search-template + "xargs -0 rg -nH --no-messages -g '!*/' -e | sort -t: -k1 -k2n" + "Use ripgrep to search a list of files piped from stdin. + +The arguments are chosen carefully so that the output format is +compatible with Grep. As well as its '-s' argument. + +Note: by default, ripgrep's output order is non-deterministic +because it does the search in parallel. You can use the template +without the '| sort ...' part if GNU sort is not available on +your system and/or stable ordering is not important to you.") + +(defcustom xref-search-command-template xref-grep-search-template + "Command template to search a list of files piped from stdin. + +Allowed fields: + + for extra arguments such as -i and --color + for the regexp itself (in Extended format)" + :type `(choice + (const :tag "Use Grep" ,xref-grep-search-template) + (const :tag "Use ripgrep" ,xref-ripgrep-search-template) + (string :tag "User defined"))) + ;;;###autoload (defun xref-matches-in-files (regexp files) "Find all matches for REGEXP in FILES. Return a list of xref values. FILES must be a list of absolute file names." (cl-assert (consp files)) + (require 'grep) + (defvar grep-highlight-matches) (pcase-let* ((output (get-buffer-create " *project grep output*")) (`(,grep-re ,file-group ,line-group . ,_) (car grep-regexp-alist)) @@ -1261,13 +1294,12 @@ xref-matches-in-files ;; first file is remote, they all are, and on the same host. (dir (file-name-directory (car files))) (remote-id (file-remote-p dir)) - ;; 'git ls-files' can output broken symlinks. - (command (format "xargs -0 grep %s -snHE -e %s" - (if (and case-fold-search - (isearch-no-upper-case-p regexp t)) - "-i" - "") - (shell-quote-argument (xref--regexp-to-extended regexp))))) + ;; The 'auto' default would be fine too, but ripgrep can't handle + ;; the options we pass in that case. + (grep-highlight-matches) + (command (grep-expand-template xref-search-command-template + (xref--regexp-to-extended regexp) + regexp))) (when remote-id (require 'tramp) (setq files (mapcar --------------F0C43CFB5748594229E4A589-- From MAILER-DAEMON Sun Jun 21 20:29:32 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnAL6-0001cI-1D for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 20:29:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42434) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnAL4-0001c8-QX for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:29:30 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:44372) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnAL2-0000cS-Je for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:29:30 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4B4601004F2; Sun, 21 Jun 2020 20:29:27 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id AFE2A1002BA; Sun, 21 Jun 2020 20:29:25 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592785765; bh=hbYA4Uh5VIzDm80KDDL8LJ2cBbvnJrZJRDQoSP+B+ks=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=l+oeYkYZhACeU85LzNlaXyQ3/kW97zZMuYmynNPeTFFrX4FDg/JkKsOAVYfb1EZ1s VCTj2WR+58Fxp+X1/FkUJxww65R4ZqwjUqUazhlbqb7zYfW89BOi+WXLiqCove1z4S gpVfXUfjYRsEY3OfuCPvV3s69NectUNuucSRMyLCgD7Ps2kH2JNOsRXgUkh39n0oPX 6oIUckOryddsIoc6IDYNeVXH5Czh3NQuDCYaKY6L0zgvq/g2UXpq/VUvcULcJXTNQH RslP37J1GL/g9zVBtjUBTfGB9DVAoO710E7fvW+WcwUMkVpLrgSg8Kk0i0D2AtalIc qx3BxYc1vNy6Q== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 673B11202A1; Sun, 21 Jun 2020 20:29:25 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> Date: Sun, 21 Jun 2020 20:29:17 -0400 In-Reply-To: <20200621233623.C811520A26@vcs0.savannah.gnu.org> (Juri Linkov's message of "Sun, 21 Jun 2020 19:36:23 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.069 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 20:29:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 00:29:31 -0000 > Fix display-buffer-override-next-command to call action only once (bug#39722) How do prefix commands using `display-buffer-override-next-command` interact with other prefix commands such as `C-u`? Any chance this can be merged/unified with `other-frame-window` code? Stefan From MAILER-DAEMON Sun Jun 21 20:39:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnAUn-00062u-DO for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 20:39:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnAUl-00062h-US for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:39:31 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:54255) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnAUj-00020d-OO for emacs-devel@gnu.org; Sun, 21 Jun 2020 20:39:31 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 2439A240004; Mon, 22 Jun 2020 00:39:24 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> Date: Mon, 22 Jun 2020 03:35:19 +0300 In-Reply-To: (Stefan Monnier's message of "Sun, 21 Jun 2020 20:29:17 -0400") Message-ID: <87lfkgj5tk.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.230; envelope-from=juri@linkov.net; helo=relay10.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 19:19:06 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 00:39:32 -0000 >> Fix display-buffer-override-next-command to call action only once (bug#39722) > > How do prefix commands using `display-buffer-override-next-command` > interact with other prefix commands such as `C-u`? They play nicely with all prefix commands, and even with the minibuffer: display-buffer-override-next-command comes into play only after exiting the minibuffer. > Any chance this can be merged/unified with `other-frame-window` code? What features do you miss from other-frame-window? From MAILER-DAEMON Sun Jun 21 22:27:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnCBb-0005RW-86 for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 22:27:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnCBZ-0005O7-Ub for emacs-devel@gnu.org; Sun, 21 Jun 2020 22:27:49 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33993) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jnCBV-00077v-Jn; Sun, 21 Jun 2020 22:27:45 -0400 Received: from [176.228.60.248] (port=1217 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jnCBU-0001xR-GR; Sun, 21 Jun 2020 22:27:45 -0400 Date: Mon, 22 Jun 2020 05:27:40 +0300 Message-Id: <83zh8vu95v.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov Cc: dgutov@yandex.ru, philip@warpmail.net, theo@thornhill.no, emacs-devel@gnu.org In-Reply-To: <87k100jbw0.fsf@mail.linkov.net> (message from Juri Linkov on Mon, 22 Jun 2020 01:24:15 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <87k100jbw0.fsf@mail.linkov.net> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 02:27:50 -0000 > From: Juri Linkov > Cc: Dmitry Gutov , philip@warpmail.net, > theo@thornhill.no, emacs-devel@gnu.org > Date: Mon, 22 Jun 2020 01:24:15 +0300 > > > Code::Blocks: > > https://www.cs.odu.edu/~zeil/FAQs/Public/newIDEProject/index.html#creating-a-project-from-existing-code > > > > Visual Studio: > > https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects?view=vs-2019 > > Look under "Create a project from existing code files", "Add files > > to a solution", "Create empty solutions" > > > > QNX: > > https://www.qnx.com/developers/docs/6.4.1/ide_en/user_guide/tutorials.html > > > > Netbeans: > > https://netbeans.apache.org/kb/docs/cnd/quickstart.html#_adding_existing_files_to_your_project > > > > TI's Code Composer: > > http://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html#adding-or-linking-source-files-to-project > > Such point-and-click wizards are more of a hassle than a help. I didn't post that to ask for the wizard functionality, I posted that at Dmitry's request to show IDE facilities that allow to add files to a (possibly empty) project. From MAILER-DAEMON Sun Jun 21 22:30:19 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnCDz-0006jn-Km for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 22:30:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57284) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnCDy-0006iQ-7e for emacs-devel@gnu.org; Sun, 21 Jun 2020 22:30:18 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34049) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jnCDx-0007Uk-NM; Sun, 21 Jun 2020 22:30:17 -0400 Received: from [176.228.60.248] (port=1372 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jnCDv-0006Ta-QU; Sun, 21 Jun 2020 22:30:16 -0400 Date: Mon, 22 Jun 2020 05:30:11 +0300 Message-Id: <83y2ofu91o.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: rrandresf@gmail.com, emacs-devel@gnu.org In-Reply-To: <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> (message from Dmitry Gutov on Mon, 22 Jun 2020 03:01:42 +0300) Subject: Re: project-find-regexp using ripgrep References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <86tuz69y51.fsf@gmail.com> <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 02:30:18 -0000 > From: Dmitry Gutov > Date: Mon, 22 Jun 2020 03:01:42 +0300 > Cc: emacs-devel > > +(defcustom xref-search-command-template xref-grep-search-template > + "Command template to search a list of files piped from stdin. > + > +Allowed fields: > + > + for extra arguments such as -i and --color > + for the regexp itself (in Extended format)" > + :type `(choice > + (const :tag "Use Grep" ,xref-grep-search-template) > + (const :tag "Use ripgrep" ,xref-ripgrep-search-template) > + (string :tag "User defined"))) Please don't forget the :version tag. Also, I think this new option should be in NEWS. Thanks. From MAILER-DAEMON Sun Jun 21 23:12:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnCsr-0004cQ-OI for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 23:12:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36294) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnCsp-0004bo-He for emacs-devel@gnu.org; Sun, 21 Jun 2020 23:12:31 -0400 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]:36352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnCsn-0006OD-VT for emacs-devel@gnu.org; Sun, 21 Jun 2020 23:12:31 -0400 Received: by mail-qt1-x836.google.com with SMTP id x62so8282530qtd.3 for ; Sun, 21 Jun 2020 20:12:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:organization:references:date :message-id:mime-version; bh=9CvPTbRYhRU5N0tPZUtohpDCktkG6cqF4Zk2QNRKwlY=; b=uZ7egmUIhi6AsnS1BlrAiZ3KTu70w+olDvkLQ/r0sMowYTWinRIGJGSX+dFwWlmEQR Q5UUxXeBsmpff8QRsENNkZf6167k1Vm8eqP2j8wqF96OI/FzOJpTVjszCEeT1J6QPj+f bcUFMEHJMq8iovwEyl0jKNRUXlOa9DsyQ+EV/kKyguwkzCkm2ayXzWcT3f7J9yR6un74 NL0dIKnCRmQgjYnsyarfBtlEq2zs8hBY7XDE2Xqmaq9HLwm+/fZZiC8VimKcENLVOxd3 0i9ID3+tzczni8PBTxR3A6V/iyOL06adnTRXmtrn/k9/bN4pe/eEwNbzSrqKz/YB4iQD TVOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:organization :references:date:message-id:mime-version; bh=9CvPTbRYhRU5N0tPZUtohpDCktkG6cqF4Zk2QNRKwlY=; b=BjAQuNqmoCvdC7B7XgKUJKLxdWoCODTbvyHM0SuYS56LsMrOZILMq57kRMPdCXSIDf /UbXmhcX9m054DKVtHqmy8PuI8v0zeyBc+6xNZ9X5QrzyfSWvT/cejiv1/UqV8JO62lt xv1kS+n78853GS2Gck1PjyjaUVyaZeM1ktBHz5zCx6mhCiy7UlVVv62+UPwyos9ihi/l 2Q3OwuEQukTboWX85jAkHWUGYN4KZ6vmI+wbDsaF3E0Fze5MJvAad81yMc+7ra9mRl5a lC29rHP4WuQjLnihiuHA7r2r1Nzb9HaBg3vqD1gCO+M6f6RyX24AsQF4LBCfRfRN96Di Tz7w== X-Gm-Message-State: AOAM533ipuC2jBJM26ySn4a6d3eLbiMKS2y9FQaiVXhxfKfAL1CSQ2zs bmm8duJmDD8P7vZd5L+vvXiASeRh X-Google-Smtp-Source: ABdhPJyeUj25jpU959GLpvfsCQ8N8+php0Osz50Ausrx25bdV4JgEe6zWlqqfpYhMXAh3X9AJWi3Rw== X-Received: by 2002:ac8:34bd:: with SMTP id w58mr13871857qtb.359.1592795548738; Sun, 21 Jun 2020 20:12:28 -0700 (PDT) Received: from sacsa.n800.arm.processor.yandex.fm ([190.236.255.173]) by smtp.gmail.com with ESMTPSA id w13sm12638988qkb.91.2020.06.21.20.12.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2020 20:12:28 -0700 (PDT) From: =?utf-8?Q?andr=C3=A9s_ram=C3=ADrez?= To: Dmitry Gutov Cc: emacs-devel Subject: Re: project-find-regexp using ripgrep In-Reply-To: <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> Organization: bien.comun.org References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <86tuz69y51.fsf@gmail.com> <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> X-Attribution: INKA Date: Mon, 22 Jun 2020 03:12:24 +0000 Message-ID: <86eeq7aj53.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::836; envelope-from=rrandresf@gmail.com; helo=mail-qt1-x836.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 03:12:31 -0000 Hello. Dmitry. >>>>> "Dmitry" == Dmitry Gutov writes: Dmitry> [1 ] On 20.06.2020 07:09, andres.ramirez wrote: Anybody? >> >> Before the patch: --8<---------------cut here---------------start------------->8--- Elapsed >> time: 6.010101s Elapsed time: 5.863914s --8<---------------cut >> here---------------end--------------->8--- >> >> After installing ripgrep and patch: --8<---------------cut >> here---------------start------------->8--- Elapsed time: 3.261737s Elapsed time: 1.742008s >> --8<---------------cut here---------------end--------------->8--- Dmitry> Thanks, Andres. Looks promising. Dmitry> Here's the latest version of the patch, [...] --8<---------------cut here---------------start------------->8--- Elapsed time: 3.017855s Elapsed time: 1.403502s --8<---------------cut here---------------end--------------->8--- Best Regards From MAILER-DAEMON Sun Jun 21 23:38:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnDHm-0005ys-9g for mharc-emacs-devel@gnu.org; Sun, 21 Jun 2020 23:38:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnDHl-0005yd-2L for emacs-devel@gnu.org; Sun, 21 Jun 2020 23:38:17 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:59993) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnDHi-0001R7-3q for emacs-devel@gnu.org; Sun, 21 Jun 2020 23:38:16 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id DAC064406EF; Sun, 21 Jun 2020 23:38:12 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 501A44406EB; Sun, 21 Jun 2020 23:38:11 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592797091; bh=6ae0h8emrNUZHdCXcIZiQOHVJzTFoLzHTnnYrrhj8m0=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=oldLE1JzJFMqWrUu9b+ggJJ7JetkVBPvYpAU+dS9SQbwvAkDJraY+mkh8vzyVQSWz 5FJaFyd9a3t7NWlVTOIJO4ESdtkwGACUEv04FNab/Ubhk8PWKNG7Ka0i/nWH7WMyGO HkX6Amd02CySV433bmB68yIDIqJipTPCIyUeSrHaqZubi8S3IWG4QWcb8mmlpZHRDM NXdw5VUd0xSbbazsDNKvMbpQ4tG9jCsLN6hu9FWBqCeq/LoVU7VD5Rmh1JVGAmM7GD 4BZkZbIjvuKWlDs5T4DgVqgglQbAK7y2OTDfRSHtovShYznWb2Mj2ydQGRovgu00Fo TGKs3exbTveAA== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 1A0081201B3; Sun, 21 Jun 2020 23:38:11 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> Date: Sun, 21 Jun 2020 23:38:10 -0400 In-Reply-To: <87lfkgj5tk.fsf@mail.linkov.net> (Juri Linkov's message of "Mon, 22 Jun 2020 03:35:19 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.154 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/21 23:38:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 03:38:17 -0000 >>> Fix display-buffer-override-next-command to call action only once (bug#39722) >> How do prefix commands using `display-buffer-override-next-command` >> interact with other prefix commands such as `C-u`? > They play nicely with all prefix commands, and even with the minibuffer: > display-buffer-override-next-command comes into play only after exiting > the minibuffer. I'm not sure how. I think `C-x 4 4` followed by `C-u` will work thanks to the (eq this-command command) check (because `prefix-command-preserve-state` does (setq this-command last-command)), but I don't think the reverse will work. Another problem I see in the code is that `display-buffer-override-next-command` does (setq display-buffer-overriding-action (delq action display-buffer-overriding-action)) [...] (push action display-buffer-overriding-action))) But `display-buffer-overriding-action` is not supposed to hold a list of actions. >> Any chance this can be merged/unified with `other-frame-window` code? > What features do you miss from other-frame-window? I'm not really worried about features but more about the code and about what we've learned about the detailed interactions (i.e. trying to avoid reinventing the same not-quite-circular wheel). In terms of features (besides the extra transient keymap which allows the use of shorter `C-x 4` and `C-x 5` prefixes and special bindings under those prefixes) I suspect that there's the echo area feedback that's missing, tho I'm not sure it works really well yet in `other-frame-window`. Stefan From MAILER-DAEMON Mon Jun 22 06:18:03 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnJWd-0003zw-ID for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 06:18:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnJWc-0003yq-C9 for emacs-devel@gnu.org; Mon, 22 Jun 2020 06:18:02 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:39858) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnJWX-0001Va-Op; Mon, 22 Jun 2020 06:18:02 -0400 Received: by mail-wm1-x333.google.com with SMTP id t194so15137172wmt.4; Mon, 22 Jun 2020 03:17:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=Gnki/iXEtCJ6FwuKjL1ikm+ZbvLe/gwZOKrRJ57uKAg=; b=LqcO1ePLBIXYk8057SKQKS/QzPgkSSo2dYiQb5BknHqD4DqBV13EMT1p0ZoIT8zKWX nY0E0hi7k3xOjhfvxo4evLVMDB8nD2uNH5j66kM+fFjNYSaGVW/8xyAGcnTKvrNDu6Lq 5JyH+kPuc6hUxQGoYYoOXsWNSXrNLr1VyQuozEOKPoQHY1ulRaCzwRjVsdKgo3ZjPpoU ykbmsseczzREHETOgaI/xTNUHcFmOVx7SbqsnjtvlZA2sEjVTNJkDN8324RUVtZETd1B QdRxEPZeDr2vGvTatL63BZQ8MULH+R/sKdLKrHpupeAZtQErJCYyb8NMDfrQlQK4TjQ+ nu9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=Gnki/iXEtCJ6FwuKjL1ikm+ZbvLe/gwZOKrRJ57uKAg=; b=uZyvyKj4droYlB9B0ZzX9E6cMYLpU3uQwtypt+/Dk49YKq9zsTM6xIAMmWDiT8PNMJ zDw/mdg+Laxmgv0j1HM/o6tsNXcuL745nI8gIipeCt1JnihTlbCxKf4xC0n0+wbgJj2R nUBpv8dymFz/qo0x8wAd2VexAbOYBh/XZ5kuPRIFyn5PgpcM9oaIQU8FVXTCfxMPFCFN YfCdft36BCLcRO9Fz2idZLq63bWrlbe44vVVVOzCYFgWAjr1mNB9fNCXacKsLaepZA23 2Go/YJjujsddGMzv2RaOIcMf9OJBbpdjshw/pafxnmMTZq/SuxJOOeC1+TtUehBl9sG1 tj8Q== X-Gm-Message-State: AOAM530EoDjyHAZVVtXBTwIs9YfvPE9tDv5TF6bAG5kbqbNdW9NgxJT6 UmNA0uh9eN7p3OGMXsw7BRuawrP0twf3bA== X-Google-Smtp-Source: ABdhPJzQLD6UihvgkXp4zpr8LsF5T81aEKUAel7iPZ/icIUWOwdvS0eK6+vSeQE7m2r+M2AXlZV7sg== X-Received: by 2002:a05:600c:21c2:: with SMTP id x2mr17880211wmj.33.1592821075291; Mon, 22 Jun 2020 03:17:55 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id v4sm2092813wro.26.2020.06.22.03.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2020 03:17:54 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: git-send-email References: <875zdteybt.fsf@runbox.com> <86k126d83n.wl-me@enzu.ru> <83pnbyckvv.fsf@gnu.org> <4923d7e98f5ed816a7569093dbc673153adcea88.camel@yandex.ru> <837dwb3zb6.fsf@gnu.org> <20200613141653.GA55972@breton.holly.idiocy.org> <835zbv3v6q.fsf@gnu.org> <20200613142329.GA56313@breton.holly.idiocy.org> <834krf3uij.fsf@gnu.org> <87r1ujatv4.fsf@igel.home> <831rmj3stn.fsf@gnu.org> <87mu57atav.fsf@igel.home> <87lfkpcn6t.fsf_-_@gmail.com> <83d0612gx3.fsf@gnu.org> <878sgobuvf.fsf@gmail.com> <837dw82xwd.fsf@gnu.org> <87pna05ogg.fsf@gmail.com> <83zh941cem.fsf@gnu.org> <87r1ugb46u.fsf@gmail.com> <83wo4819sl.fsf@gnu.org> Date: Mon, 22 Jun 2020 12:17:53 +0200 In-Reply-To: <83wo4819sl.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 15 Jun 2020 21:08:42 +0300") Message-ID: <87zh8vz9ny.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x333.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 10:18:02 -0000 Eli Zaretskii writes: >> Mmm, now that you mention it, I'm confused. Here's what we say in >> CONTRIBUTE: >> >> > To email a patch you can use a shell command like 'git format-patch -1' >> > to create a file, and then attach the file to your email. This nicely >> > packages the patch's commit message and changes. To send just one >> > such patch without additional remarks, you can use a command like >> > 'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'. >> >> I just tried to git-send-email --to=myself a patch file generated from >> git-format-patch, and the email I received looks just like what >> Konstantin sent to the bug list, i.e. > > Then maybe we should remove that sentence. (Re: 2020-06-20T08:42:41Z!eliz@gnu.org) Thank you for following up on this. I'm pretty sure just removing the sentence about git send-email wouldn't have been enough, as I expect some people could read "use a shell command like 'git format-patch -1'" and think "oh well, git send-email will work just as well then". I think your amendments make things a lot clearer. FWIW, I just fooled around with rmail and mboxes from Debbugs; adding - "\|^x-mailer: git-send-email" to rmail-nonignored-headers - "\|^x-mailer:" to rmail-highlighted-headers makes it slightly easier to spot patches sent by git send-email AFAICT. Of course, I'm not an rmail guru; there probably are better ways to solve the recognizability problem. From MAILER-DAEMON Mon Jun 22 09:10:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnMDl-0003bG-Ce for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 09:10:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45056) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnMDi-0003XQ-N7 for emacs-devel@gnu.org; Mon, 22 Jun 2020 09:10:42 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]:36494) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnMDg-00004y-Pa; Mon, 22 Jun 2020 09:10:42 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 17so1094493wmo.1; Mon, 22 Jun 2020 06:10:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=sMq5CZRrSg7LEM77fysO3pNSh4lNTwNzX8B+UajwDWw=; b=hivkb3d+ub4FKhKpYFpzYca8/Z6bSFMIJexB3eY28pNGLCqUUQmlJMJij+pqhK4Iom tAwei2K1ghRSS61eaPKy/MASYTrZw9i3tfPd74//d3Rof/Qbbg5gBWY+1tmEVDvAKI9N jS7d0rLUa5Nm4zf0jbl5nxDwmvOno6iAYfgsNgcUGPzylSr9ksFWmGM9O7C3lNb2v+dv hBaNEIcCgeEuJdVmWFN9O6riwlrnuGrCjgWiYb1wpL4baDXgjPbZvmcoUrWvWdoTBur6 BCHDPM6XngpWLvWr/I3KnuLszlo/TFZDmafTORy4PU+Hi3caG9LS2y1zGq1t1BEz8iv+ qX3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=sMq5CZRrSg7LEM77fysO3pNSh4lNTwNzX8B+UajwDWw=; b=SDuPZZe1vyBXyJibmGL+4rki7gaXIZxbOpbgdkTAk9EwyyhFbasJZCNHlOkksGnEM3 8S2Du5B+PQwCGaNj0SFg8CvELu1ytgnPa+DLFCMLAumz3vKx1553YNWBg3qXT5gLBCyp 45qpA3UmhMiS0SbIuJVGTxS7fUuZkteHw2unaDiV+OiEEh3sfoYSyHwvgHuKXWKmL8+4 c1OvbDEp7nbecLFPsAcxYnVcJO2zh6cn4Ggza0AkC6EG1meVNRj9DakQU4mWO50bQPDz 9rNz6EcEd5sV/po3ipSoZC9VAynkHJkp6F3cqlzeOVHGcWlDIRT5hatnSyyNZ4i8/M6/ qiLg== X-Gm-Message-State: AOAM5314fwz42D9euN3HnqCP8m912UqGITymc3ww7s2efXsByvNs0P4U A2lNYihaEL/3bOtQ1UKUtzdEBHJF X-Google-Smtp-Source: ABdhPJwQc2+kye0O/E3tpsOC2pISdA0A7pZize2S3DAkWsCK0Y3zOXPHloW+mA4JKSlwmDlwEuWr/Q== X-Received: by 2002:a7b:c4d8:: with SMTP id g24mr7164836wmk.127.1592831438884; Mon, 22 Jun 2020 06:10:38 -0700 (PDT) Received: from [192.168.0.111] ([109.110.245.170]) by smtp.googlemail.com with ESMTPSA id u9sm17035291wme.16.2020.06.22.06.10.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Jun 2020 06:10:37 -0700 (PDT) Sender: DG Subject: Re: project-find-regexp using ripgrep To: Eli Zaretskii Cc: rrandresf@gmail.com, emacs-devel@gnu.org References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <86tuz69y51.fsf@gmail.com> <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> <83y2ofu91o.fsf@gnu.org> From: Dmitry Gutov Message-ID: Date: Mon, 22 Jun 2020 16:10:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83y2ofu91o.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=raaahh@gmail.com; helo=mail-wm1-x32f.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 13:10:43 -0000 On 22.06.2020 05:30, Eli Zaretskii wrote: > Please don't forget the :version tag. > > Also, I think this new option should be in NEWS. Yes, of course. I'm going to write something unusually verbose in there, so you might have to cut it down after. Have you tried the patch yourself, BTW? I'm curious about the impact on slower machines (with fewer cores, among other things) and/or unoptimized Emacs builds. From MAILER-DAEMON Mon Jun 22 10:10:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnN9p-0007b5-1B for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 10:10:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnN9n-0007XW-0l for emacs-devel@gnu.org; Mon, 22 Jun 2020 10:10:43 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:34252) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnN9i-00026p-Q8 for emacs-devel@gnu.org; Mon, 22 Jun 2020 10:10:42 -0400 Received: by mail-wr1-x42c.google.com with SMTP id v3so9351710wrc.1 for ; Mon, 22 Jun 2020 07:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=4h3Grou6jgFgRWKmIC3BwDKIyqp9gMjhbSjEQZ/M4Tg=; b=YdpseA+kR2RTNA9dV3vgKoeJXPOQlRhPM7+K1irM2CKjJ8w4jtjinXiAnMuus1nf19 a0A9HMyl7MrHwKZe09M9yEwIPyblUSTMuDi7m1Kth5ItdbccYOeK9eBH7NARCLFyAobm MS7638FTaL2L7bTqiLW5o97SdxEPISOVQ19m5C9b6JmtMxFeVMl+YXC5WD/hxW3lTkfs 1FEdZ1P+622uh9zwyCYsJAYmeHQtgZZJFjqcA+XDBDfIIXWCIg7fNefwoBzAmiSexX5a XVeyXouGrPUy8CL3x/ox1LxK0tbCRc+THb8pc2pCkCx+Srn96NYRdK5SWmp9LNSKw28I epYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=4h3Grou6jgFgRWKmIC3BwDKIyqp9gMjhbSjEQZ/M4Tg=; b=mOZmc+2SW9cb539GcAYT6RFALu/jD9ODgbTljOE/7jNvQvx0w8xkgLEKj0kriRzLXe //GVM1TxW7Dwx+srl0Bprt7zCRoymbWyK+ub1vjtS4pwdS8skxbSztzwU8GE63UVxTZ1 BU5KyC2SYv+Luf8AzNRFBTnoomkz0kYe/aqZoEFUAga3LzVflaGsnSmTu3fIVV3tPZmw ACqu5HTIWxar7gmfqoEDhxQ0Wmm011v8zMP5H9z9lB52deU733/3EQxlblCncXvO/O9e pRMiyAJSiSumh/Xr88KnpCLsLiCRVuMfhOAuNNBuM2ngVy7xaCXanw1SanRB2OCEysnI WwjA== X-Gm-Message-State: AOAM531BV6N10ZDYXAYbFN9xr7wVr8OpJmfJzpyK3qXOOTvQSoxUE5Me oeRHyapWN0x6N+XqJCrmyZwvwA== X-Google-Smtp-Source: ABdhPJyDlafAtimfNrlE0H0kybK4kI/Tb8thD/csRx1f5ePuKWplvNIkqafFi7HUX1nFbHG3mdIVdA== X-Received: by 2002:adf:edc6:: with SMTP id v6mr7794546wro.413.1592835035616; Mon, 22 Jun 2020 07:10:35 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id m10sm8296wru.4.2020.06.22.07.10.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2020 07:10:34 -0700 (PDT) From: "Basil L. Contovounesios" To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: emacs-devel@gnu.org Subject: Re: master 8ef8463: Accept lexical lambda in auto-insert-alist References: <20200622111631.31420.48804@vcs0.savannah.gnu.org> <20200622111633.AB9FA20A26@vcs0.savannah.gnu.org> Date: Mon, 22 Jun 2020 15:10:33 +0100 In-Reply-To: <20200622111633.AB9FA20A26@vcs0.savannah.gnu.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Mon, 22 Jun 2020 07:16:32 -0400 (EDT)") Message-ID: <875zbjyyw6.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::42c; envelope-from=contovob@tcd.ie; helo=mail-wr1-x42c.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 14:10:43 -0000 > branch: master > commit 8ef84632c24192a71cec89a859b064925ed5aca2 > Author: Mattias Engdeg=C3=A5rd > Commit: Mattias Engdeg=C3=A5rd > > Accept lexical lambda in auto-insert-alist >=20=20=20=20=20 > This bug was exposed by a previous removal of quoting around lambda > expressions in autoinsert-tests.el (1ecd350f38ee), which caused some > of those tests to fail. Thanks for fixing this. I wonder why I didn't get any test failures with 'make bootstrap && make check', though? Did you run the tests as 'cd test; make autoinsert-tests' instead? Would that make a difference? --=20 Basil From MAILER-DAEMON Mon Jun 22 10:53:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnNp8-00057q-8P for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 10:53:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnNp6-00054K-7n for emacs-devel@gnu.org; Mon, 22 Jun 2020 10:53:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42941) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jnNp5-0001IG-Sk; Mon, 22 Jun 2020 10:53:23 -0400 Received: from [176.228.60.248] (port=2898 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jnNp5-0005W9-8S; Mon, 22 Jun 2020 10:53:23 -0400 Date: Mon, 22 Jun 2020 17:53:19 +0300 Message-Id: <83tuz3tan4.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: rrandresf@gmail.com, emacs-devel@gnu.org In-Reply-To: (message from Dmitry Gutov on Mon, 22 Jun 2020 16:10:36 +0300) Subject: Re: project-find-regexp using ripgrep References: <49f66d46-da8d-9658-ec85-ced39a99ad87@yandex.ru> <86tuz69y51.fsf@gmail.com> <15b1e532-99e7-5f43-defc-3c32072af3d6@yandex.ru> <83y2ofu91o.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 14:53:24 -0000 > Cc: rrandresf@gmail.com, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Mon, 22 Jun 2020 16:10:36 +0300 > > On 22.06.2020 05:30, Eli Zaretskii wrote: > > Please don't forget the :version tag. > > > > Also, I think this new option should be in NEWS. > > Yes, of course. I'm going to write something unusually verbose in there, > so you might have to cut it down after. Thanks. > Have you tried the patch yourself, BTW? No, not yet. > I'm curious about the impact on slower machines (with fewer cores, > among other things) and/or unoptimized Emacs builds. I use neither, at least not most of the time. From MAILER-DAEMON Mon Jun 22 11:35:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnOTc-0006r7-5C for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 11:35:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnOTa-0006hx-HZ for emacs-devel@gnu.org; Mon, 22 Jun 2020 11:35:14 -0400 Received: from mail238c50.megamailservers.eu ([91.136.10.248]:56276 helo=mail56c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnOTX-0002Od-5E for emacs-devel@gnu.org; Mon, 22 Jun 2020 11:35:14 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1592840101; bh=+iIH4FXoYpSKZys8z3eelrqpBcWXp6DLB0f7IBxGE+Q=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=OF0ZNiv3tLH00ZJAPPB4iPiKdIQfqS43zwYIL1sMw0zXDbTHDt8gzvwVsKESkBrTl 4EB1ZfLJibIVxSZwOLnpIK94ArH/GmpWNC/413AvCvvh7bFbDPwqJtjGRdyCmEvuKw SY0BivCvvxc1o4051FfpUi2+D5HK/dIrFHqVe5Js= Feedback-ID: mattiase@acm.or Received: from stanniol.lan (c-4e4ae655.032-75-73746f71.bbcust.telenor.se [85.230.74.78]) (authenticated bits=0) by mail56c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05MFYwNg019931; Mon, 22 Jun 2020 15:35:00 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: master 8ef8463: Accept lexical lambda in auto-insert-alist From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <875zbjyyw6.fsf@tcd.ie> Date: Mon, 22 Jun 2020 17:34:58 +0200 Cc: emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <6CD3045E-2843-4905-A5B0-E68E0D60C5E2@acm.org> References: <20200622111631.31420.48804@vcs0.savannah.gnu.org> <20200622111633.AB9FA20A26@vcs0.savannah.gnu.org> <875zbjyyw6.fsf@tcd.ie> To: "Basil L. Contovounesios" X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F21.5EF0CF20.00A0:SCFSTAT68638221, ss=1, re=-4.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: -4.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=UqsdyN4B c=1 sm=1 tr=0 a=klNLuyVZdLUgl+K5Uafb2A==:117 a=klNLuyVZdLUgl+K5Uafb2A==:17 a=kj9zAlcOel0A:10 a=M51BFTxLslgA:10 a=N9yNoLYqFifmO-txnOsA:9 a=CjuIK1q_8ugA:10 Received-SPF: softfail client-ip=91.136.10.248; envelope-from=mattiase@acm.org; helo=mail56c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 11:35:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 15:35:14 -0000 22 juni 2020 kl. 16.10 skrev Basil L. Contovounesios : > I wonder why I didn't get any test failures > with 'make bootstrap && make check', though? Did you run the tests as > 'cd test; make autoinsert-tests' instead? Would that make a = difference? I don't remember, but maybe you ran the tests byte-compiled? A compiled = closure won't look like a list, and wouldn't trigger the bug. There may be more instances of the same bug (ie, not recognising lexical = closures correctly). I only had a quick look and didn't find anything = outright wrong, but could very well have missed something. From MAILER-DAEMON Mon Jun 22 12:16:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnP7y-0004jR-H4 for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 12:16:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnP7w-0004jB-5q for emacs-devel@gnu.org; Mon, 22 Jun 2020 12:16:56 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:35017) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnP7u-0002Zr-AI for emacs-devel@gnu.org; Mon, 22 Jun 2020 12:16:55 -0400 Received: by mail-wm1-x32a.google.com with SMTP id g21so163765wmg.0 for ; Mon, 22 Jun 2020 09:16:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=iDxOzgNj3s5D6pc97oqry8k2Kf8SdAaUDkB303wKylQ=; b=p/vjxMAFkEz0pOLmFyw+k+w7DaUgTJ3hYztTM1Qe2/+U5DClJAjR6hglNJomQKcCMi K+OQ7hapVngOKmfV/PkaFoKBB5OG06wxLfHY1OP5n99Aeg13G2GkHHYsQYDnUBX2ssnb vgXmkvUZucLSpFdh7MpkYNfAnDmRhGbk1kVmamgxGJd9zhweM8QXuh1VW6bykfm+2u8N uhiAeEpdixW7SuhVLgXO79s5abT07l9Sfa0z73UoWWs11mEXzq9VvHJbOtWYilnjT2tT MuIFdgC9srk/aMyMsaVALtjfzW8poVD4OsLTnuRrb+7FvoFLrEuL0WA+7UXwKWUVHVtg UIBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=iDxOzgNj3s5D6pc97oqry8k2Kf8SdAaUDkB303wKylQ=; b=Eu+ehNfFUTdviGlsYa7tPIy1tlGwW8idxBKdtYQ7ltIPwYmhKj54PhaK498tRwvU5f fucXpcEwjyGMP5vsWP6ama8w/l/W8owLzi0SQEAYZ/ewyE9+s/UKyY/Y8hUWDoL7nQm4 9oMvsRz6BW78DeyxDlDApYv9hySLoH4kyQIvSRmHivYgFlvuIHRIw80tR6nWoGUTvayB n5abW3UKksEvMOKU7JyI8WqxjTfQz46vIbY3FnxDXXGZ2VVagCL5nh3aEr5GSpq5sjkk S7mFX68Z8MyAj9tOT3yS2+q4OUaI6uF2s9iLUp5QO4O+aDXA2D+VWFurO/xNgfYKCajQ 39yg== X-Gm-Message-State: AOAM532O+NK6aOBiYT07CTTlundfDpAEA6XxI3lxZxed740V28yLSCEU VFyGlJj0sBGeLbdY5yN6sRRoFQ== X-Google-Smtp-Source: ABdhPJy6Zd8XJcjNb3DzFKGoo1mIAGzL1yq4rR3o24k89k9U8qcT8huNSJMjAB1qMcD+6yQ7S7KJBA== X-Received: by 2002:a1c:dd86:: with SMTP id u128mr16901885wmg.123.1592842611969; Mon, 22 Jun 2020 09:16:51 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id o10sm18502513wrj.37.2020.06.22.09.16.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2020 09:16:51 -0700 (PDT) From: "Basil L. Contovounesios" To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Cc: emacs-devel@gnu.org Subject: Re: master 8ef8463: Accept lexical lambda in auto-insert-alist References: <20200622111631.31420.48804@vcs0.savannah.gnu.org> <20200622111633.AB9FA20A26@vcs0.savannah.gnu.org> <875zbjyyw6.fsf@tcd.ie> <6CD3045E-2843-4905-A5B0-E68E0D60C5E2@acm.org> Date: Mon, 22 Jun 2020 17:16:50 +0100 In-Reply-To: <6CD3045E-2843-4905-A5B0-E68E0D60C5E2@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Mon, 22 Jun 2020 17:34:58 +0200") Message-ID: <87wo3zaxe5.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=2a00:1450:4864:20::32a; envelope-from=contovob@tcd.ie; helo=mail-wm1-x32a.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 16:16:56 -0000 Mattias Engdeg=C3=A5rd writes: > 22 juni 2020 kl. 16.10 skrev Basil L. Contovounesios : > >> I wonder why I didn't get any test failures >> with 'make bootstrap && make check', though? Did you run the tests as >> 'cd test; make autoinsert-tests' instead? Would that make a difference? > > I don't remember, but maybe you ran the tests byte-compiled? A compiled c= losure > won't look like a list, and wouldn't trigger the bug. Makes sense. > There may be more instances of the same bug (ie, not recognising lexical > closures correctly). I only had a quick look and didn't find anything out= right > wrong, but could very well have missed something. Thanks. I'm sure we'll find out eventually. ;) --=20 Basil From MAILER-DAEMON Mon Jun 22 14:22:45 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnR5h-0003IA-3U for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 14:22:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnR5g-0003HF-5e for emacs-devel@gnu.org; Mon, 22 Jun 2020 14:22:44 -0400 Received: from mail-qk1-x735.google.com ([2607:f8b0:4864:20::735]:40969) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnR5e-0006Uc-EK for emacs-devel@gnu.org; Mon, 22 Jun 2020 14:22:43 -0400 Received: by mail-qk1-x735.google.com with SMTP id z63so4366422qkb.8 for ; Mon, 22 Jun 2020 11:22:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=CxBcbSq5YK5ybJ5hPlIP7f/Gga7XIYGmsXKBhHoPWtE=; b=TNw0ITXZudybqgA/LXVjLm6KSxRqgyYmtkKnxi7s2LI7zRsu0stO6OIQppLygO/qo1 klIeDzl0CgclhluSdid1F+YiWEt6/BpbtNE9JO6KuhVgz3QMobWFZ+GMMQvGz8GUEYXT RPP7fNubQapjUYOgydv/y9Nolqe1bs/Ak6t+o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=CxBcbSq5YK5ybJ5hPlIP7f/Gga7XIYGmsXKBhHoPWtE=; b=I6BIu4EtbWrzU97sMNwZkIUJAFKsG6BVITy23jlp56gw+XJou19Gl9sT7m8DAO+UdZ lf9+VzVYtE6+SxZohgVVtdjwtEceeH83sO7xo9VbnSYYLiZoJqZsLbTgQPrzeS8PJDSb pfHZcGxOogJ4Up0dIy+oIj2kM1d/SePRWGt2kyQDRwL5LSy0+pKfpa0kAkKqqXoBtVOD aaQXqeHt/MZg3xOSBNdaVDFP/gejyzpvfF6rRnPadWIJBRuUAa0WIFtY/d+dZkO1M6Du P7kBCiTexYzkPMbcxNo70QvHLiifCTZ13U0mTmGKMLNvZj9mSMmS9POqns9mhmdOTmcx 9ZRw== X-Gm-Message-State: AOAM530gE4FTffVhOopoeOWPWbv25GJnHeD/ATAGlnExX7hbvrjGrWSZ bn+nAYp9ynPvECrKNZkIgji5Gw== X-Google-Smtp-Source: ABdhPJzg1zVASetXow9zrPVrXamqm59IU+ZaAKMSYQaqah1llS93bLplcBZs2NxMiYjunAfhKYLNLA== X-Received: by 2002:a37:b681:: with SMTP id g123mr16726590qkf.112.1592850160909; Mon, 22 Jun 2020 11:22:40 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id f203sm8681337qke.135.2020.06.22.11.22.39 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Jun 2020 11:22:39 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: Emacs Development , John Wiegley Subject: Re: RFC: omit some variables from custom-save-variables Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <4kr6525r.fsf@lifelogs.com> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Mon, 22 Jun 2020 18:22:38 +0000 In-Reply-To: (Stefan Monnier's message of "Fri, 19 Jun 2020 17:26:06 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::735; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x735.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 18:22:44 -0000 On Fri, 19 Jun 2020 17:26:06 -0400 Stefan Monnier wrote: SM> Hmm... my reflex would have been to make use-package use something like SM> (funcall (or (get variable 'custom-set) #'set-default) variable value) SM> instead of whichever other way it currently uses to set the variable. >> Does that omit the variable from the custom.el file? SM> Yes, as should be obvious at least in the case where it falls back on `set-default`. OK, it sounds like a better approach if it requires no core changes. I proposed the change in https://github.com/jwiegley/use-package/pull/850 and in my testing it behaved correctly. Ted From MAILER-DAEMON Mon Jun 22 15:18:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnRxq-00082O-50 for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 15:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51816) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnRxp-00081B-3Q for emacs-devel@gnu.org; Mon, 22 Jun 2020 15:18:41 -0400 Received: from mail-qk1-x729.google.com ([2607:f8b0:4864:20::729]:38610) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnRxm-0006hw-9c for emacs-devel@gnu.org; Mon, 22 Jun 2020 15:18:40 -0400 Received: by mail-qk1-x729.google.com with SMTP id w1so16606403qkw.5 for ; Mon, 22 Jun 2020 12:18:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=7bEO0mHwGKkXmPj1t9CvUUE5lgMVPfR8yz15i9qKJWI=; b=LBF5fJ/MJ/TuY365kurycwUG1jeXmy6C4229CwLHyCtNZ8RpHrEOmixcBHPkamRBmP JzLUgbXkfRjKLUkBxqg4LaLmrzdWCz0dy3ZiJVE81D0RYESB3goCPl4vcwayhvsemO6h UKJLbPl9naf8nN5o8WjEy0hv7mPqEbzgti12A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=7bEO0mHwGKkXmPj1t9CvUUE5lgMVPfR8yz15i9qKJWI=; b=PBh0rT/aOWQSwLG0w4qcmJEu6brei3Hlr0/htQrjde5B0Igy7fuGxgIjFC6MZ1P89E 910/JUazPw8oVdKJAj1J/fsGBhhgzxTIpexAaPx9QkyTM9/cnRm3psyDPHhAGc0IcNsG esy3FPNOSGWzmDiN6utxv3o1pYdorDDf1VFO8tl/wj1hLWnWyL35yk0J24u8f7ISAhuL Gj6tX5R4HUh1gj0vQPdS7I0psjTcTygCywcO4ph4rtV2iKMMenaMclXnYRbgHZBVwXok VYuWeW6gPQgEYdhhvgpXxR9K81Vxm/94EEcL0Ro74cXk050Wm1YmdKpcDCEAWBAOoYm5 QQGA== X-Gm-Message-State: AOAM530QeFDBWYSUIq3SWc/7s/DlmXRcaI73ULcl4p72MxzazzA1Oc3M WYPWIwgr5SjJS4AD1j2ksi7mM6aCi7fNlA== X-Google-Smtp-Source: ABdhPJxLblTbCV5xKnTvPii8mEl3l1822nvgQYmUhETQLkz3QErB8Z3VHumGpRTE8JPWkJmu9coiUQ== X-Received: by 2002:a37:bb42:: with SMTP id l63mr17310580qkf.237.1592853517009; Mon, 22 Jun 2020 12:18:37 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id v22sm15757024qka.122.2020.06.22.12.18.35 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Jun 2020 12:18:35 -0700 (PDT) From: Ted Zlatanov To: Richard Stallman Cc: contovob@tcd.ie, dgutov@yandex.ru, monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode dbe62dd: doc/misc/auth.texi: shorten use-package example Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <20200618212604.24524.71113@vcs0.savannah.gnu.org> <20200618212605.5FE6020A27@vcs0.savannah.gnu.org> <87d05w2af4.fsf@tcd.ie> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Mon, 22 Jun 2020 19:18:34 +0000 In-Reply-To: (Richard Stallman's message of "Fri, 19 Jun 2020 23:10:55 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::729; envelope-from=tzz@lifelogs.com; helo=mail-qk1-x729.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 19:18:41 -0000 On Fri, 19 Jun 2020 23:10:55 -0400 Richard Stallman wrote: >> If you feel this is better left out until after use-package gets the >> copyright assignments, I'll remove the example configuration. RS> Please write documentation to show how to use Emacs by itself, not RS> Emacs plus external add-ons. OK, I've removed that example. I've rebased and pushed the latest code to scratch/tzz/auth-source-reveal-mode and will merge it to master tomorrow if there are no further objections. Thank you Ted From MAILER-DAEMON Mon Jun 22 16:00:44 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnScW-0002xp-4V for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 16:00:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60372) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnScU-0002xd-C7 for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:00:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:54317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnScS-0005BF-8E for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:00:41 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id BF90B80A5E; Mon, 22 Jun 2020 16:00:38 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id B576C807F4; Mon, 22 Jun 2020 16:00:36 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592856036; bh=LH24PNsVuLF26N5/eV+lF2LhnMYBN9nXVu9aiqJ8LPw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Kr2NepHdroXqQ5uTDWJmlFQL602PZhH5MwCBxxhx3Yhk3Z7TrZTm31j+Mmpry3f+8 RqcsGKge1/KANOmHTklsaBKb632Efcqu6vsZN9S7jdHaScyrXn9b+c1uoFLL7dBwNl aKGdtcRRK/hMkpaeIM+CUGoa0K+QV2xUYbh9mywhMEXvETJne0UjwQ9jTq9ZW5fj/n DzmrqGd/HojcXD1T/74CwyRlBWdlQf+5XNHPH2eazZFk1q39tHdFluum6o51aJ9nFU 9i02/MF7EK0Van6PSueLDLV7JG776M3hp6VauVk4mmuvjirzzCnaFQo1m7BjOHQVwY /E3GLUOX7EJKQ== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 89827120795; Mon, 22 Jun 2020 16:00:36 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Cc: Ted Zlatanov Subject: Re: scratch/tzz/auth-source-reveal-mode f16a4c8 2/3: Support regular expressions and API for prettify-symbols-mode Message-ID: References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191655.E1C4E20A26@vcs0.savannah.gnu.org> Date: Mon, 22 Jun 2020 16:00:35 -0400 In-Reply-To: <20200622191655.E1C4E20A26@vcs0.savannah.gnu.org> (Teodor Zlatanov's message of "Mon, 22 Jun 2020 15:16:55 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.024 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 14:56:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 20:00:42 -0000 > +For example: \"abc[123]\" matching \"abc1\", \"abc2\", or > +\"abc3\" could be mapped to the Unicode WORLD MAP. Note again the > +IDENTIFIER is an arbitrary Lisp symbol. > + (my-worldmap \"abc[123]\" 128506) I think using ?\U0001f5fa might be "natural" for a unicode char. More importantly, I think we should accommodate cases where the regexp needs to match some of the context, i.e. where only some submatch needs to be prettified. E.g. we could say that the text affected is either submatch 1 or submatch 0 (where submatch 0 is used if there's (match-end 1) is nil). Stefan From MAILER-DAEMON Mon Jun 22 16:03:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnSfI-0004SU-W9 for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 16:03:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnSfI-0004SL-8T for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:03:36 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:52748) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnSfG-0005iv-DG for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:03:35 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B249B44072F; Mon, 22 Jun 2020 16:03:33 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 2AD62440712; Mon, 22 Jun 2020 16:03:32 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592856212; bh=rRabVmpR/fMe5NoUsvypgJEpLkjKOw61PIKYyX8vNs0=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=Hf/wfyxZH+VfReGskbO3Bnnnti2sdcsylj2xRJ/f/LsimfWOqAiUSs+MpPYcVzxdo VWNdZWjycLJU6on8V0MeOjtZFhQerzAgb4MyKCyschb4d0z4EKJPlCgY0tePXDeE5s GXG1nIPaeGCfcVW8Wl0bVT3pfueTRAu/Ma62Yp+R4noul16VmYsVk4TTnetZFe/xSQ wXhf+axMzt0jyldRGkQXTfnaRunS7edoZVkOHc/E7H3GVpVKgnUqwmv8WN7VBk3712 iUJO7Yp9PBW482gMJAu4xHVszxSTuYgmufgBz/pwBZt4tyuCMW4l75Fp0GWu4f8FmK hlPRJm8t6vVzQ== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id EAAA712029D; Mon, 22 Jun 2020 16:03:31 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Cc: Ted Zlatanov Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Message-ID: References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> Date: Mon, 22 Jun 2020 16:03:31 -0400 In-Reply-To: <20200622191656.2D20920A26@vcs0.savannah.gnu.org> (Teodor Zlatanov's message of "Mon, 22 Jun 2020 15:16:56 -0400 (EDT)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.139 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 14:56:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 20:03:36 -0000 > +(define-minor-mode auth-source-reveal-mode [...] > + (when auth-source-reveal-mode > + ;; Install the prettification magic. > + (prettify-symbols-add-prettification-rx > + 'auth-source-reveal-mode-prettify-regexp ; The identifier symbol. > + ;; regexp to hide/reveal > + (if (apply #'derived-mode-p auth-source-reveal-json-modes) > + (format "\"?password\"?[:[:blank:]]+\"\\([^\t\r\n\"]+\\)\"" auth-source-reveal-regex) > + (format "\\b%s\\b\\s-+\\([^ \t\r\n]+\\)" auth-source-reveal-regex)) > + auth-source-reveal-hider) > + > + (setq-local > + prettify-symbols-compose-predicate #'auth-source-reveal-compose-p) This erases any prior configuration of that variable, so it won't "play ball" with other users. > + (prettify-symbols-mode (if auth-source-reveal-mode 1 -1))) And here we forcefully enable/disable `prettify-symbols-mode` even if all the user wanted if to hide the passwords. I think we need to decouple the two user-level features. Stefan From MAILER-DAEMON Mon Jun 22 16:32:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnT73-0006bP-WB for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 16:32:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnT72-0006a0-Ha for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:32:16 -0400 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]:35575) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnT70-00029b-PF for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:32:16 -0400 Received: by mail-qt1-x82e.google.com with SMTP id z1so13737276qtn.2 for ; Mon, 22 Jun 2020 13:32:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=MLE9dTLnzaVUAuTuvxIz5g9xZD4KMqGOP9vKzINxbzw=; b=HIJNI0xHTwDb7AD2BhO7IQcLy39NN+ynbuPoZNzApmkRithz8DDW7MxPCriLVqxjcm s+phlh3cdiTOHW8uh+qEodj2RKH+tv1kq7yU3k+O+IIsXjn/v+agywbOAwpx6LqfdSMJ C13551y8TNqI8TeWC8hGv3+UYXcjBV+xpA2FY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=MLE9dTLnzaVUAuTuvxIz5g9xZD4KMqGOP9vKzINxbzw=; b=RM77G6y+GI7Ze/S7/gz58p7Adj5LNvzhYmKY5GjVQVZBf/nTHQDgpiDJuxVLl7SmQK kS/aQLe3MJy2xbO56N+T9C6tp1inJyY6jxVDScSSoV6jXog91ziLfZukauI5UQmwBLUJ NDAynziMg9VF5IZAVncA2i6n/acbMXrAWVl43/88ywh16wVpwOZDkYi5d7uJm6KgJUux 4Cu2d38tuaCqEcpVXYwi2TblGPj+yZLNVZK9ivt/2LTAFomCR64RDrL5KvxIIQn/7fhZ 8PIIGyd4TMYT7FtQjdLFX0pG2bk+FH0UVgT4/PLsaz2qKEBAs7ai1Cy3vUPz/gpOI2Pd k2oA== X-Gm-Message-State: AOAM531v3R2IBvGG917lUpGyDjjwiyVvRzuM9WTSYwoNVTDCXZbXsEWb XKm5XvKI9glU5IQ4V7cWB2ShbBeBo0QSiA== X-Google-Smtp-Source: ABdhPJzNIdLUKx2H6tn4TzYtTooIGtA8gIl6QstM++mCoaoQRG7Bg7OwWJ0Z761mWYpOMqw8BtkdOQ== X-Received: by 2002:ac8:7a90:: with SMTP id x16mr18265065qtr.233.1592857932953; Mon, 22 Jun 2020 13:32:12 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id o15sm876870qko.67.2020.06.22.13.32.12 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Jun 2020 13:32:12 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode f16a4c8 2/3: Support regular expressions and API for prettify-symbols-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191655.E1C4E20A26@vcs0.savannah.gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Mon, 22 Jun 2020 20:32:11 +0000 In-Reply-To: (Stefan Monnier's message of "Mon, 22 Jun 2020 16:00:35 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::82e; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x82e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 20:32:17 -0000 On Mon, 22 Jun 2020 16:00:35 -0400 Stefan Monnier wrote: >> +For example: \"abc[123]\" matching \"abc1\", \"abc2\", or >> +\"abc3\" could be mapped to the Unicode WORLD MAP. Note again the >> +IDENTIFIER is an arbitrary Lisp symbol. >> + (my-worldmap \"abc[123]\" 128506) SM> I think using ?\U0001f5fa might be "natural" for a unicode char. Got it, fixed. SM> More importantly, I think we should accommodate cases where the regexp SM> needs to match some of the context, i.e. where only some submatch needs SM> to be prettified. SM> E.g. we could say that the text affected is either submatch 1 or SM> submatch 0 (where submatch 0 is used if there's (match-end 1) is nil). Got it, adjusted docs and code. Both of the above are in a single commit on my branch now. Ted From MAILER-DAEMON Mon Jun 22 16:40:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnTEW-0003l7-8n for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 16:40:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47752) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnTEU-0003kx-Lb for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:39:58 -0400 Received: from ciao.gmane.io ([159.69.161.202]:42984) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnTET-00064r-1k for emacs-devel@gnu.org; Mon, 22 Jun 2020 16:39:58 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jnTEP-000Naa-F3 for emacs-devel@gnu.org; Mon, 22 Jun 2020 22:39:53 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org To: emacs-devel@gnu.org From: Ted Zlatanov Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Date: Mon, 22 Jun 2020 20:39:47 +0000 Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos Message-ID: References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:R9+rSWmJmuxfJeroZ6KXFUt+PwM= X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 15:50:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 20:39:58 -0000 On Mon, 22 Jun 2020 16:03:31 -0400 Stefan Monnier wrote: >> + (setq-local >> + prettify-symbols-compose-predicate #'auth-source-reveal-compose-p) SM> This erases any prior configuration of that variable, so it won't "play SM> ball" with other users. Is it better do what tex-mode.el does? (add-function :override (local 'prettify-symbols-compose-predicate) #'tex--prettify-symbols-compose-p) >> + (prettify-symbols-mode (if auth-source-reveal-mode 1 -1))) SM> And here we forcefully enable/disable `prettify-symbols-mode` even if SM> all the user wanted if to hide the passwords. SM> I think we need to decouple the two user-level features. The plan was to make `prettify-symbols-mode' a library that other modes like `auth-source-reveal-mode' can use. I went halfway, creating some API-like functions. Are you suggesting that library is needed now to avoid the tight coupling? Or something else? Thanks Ted From MAILER-DAEMON Mon Jun 22 17:09:15 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnTgp-0008Ku-Oq for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 17:09:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnTgp-0008Kn-5w for emacs-devel@gnu.org; Mon, 22 Jun 2020 17:09:15 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:2033) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnTgm-0003Ec-U6 for emacs-devel@gnu.org; Mon, 22 Jun 2020 17:09:14 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 7F6C644072E; Mon, 22 Jun 2020 17:09:11 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id D8FF9440218; Mon, 22 Jun 2020 17:09:09 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592860149; bh=LZj3mCGYjh/7c/3CszSuFud1ZmaGJGlxOQndYUAVwbY=; h=From:To:Subject:References:Date:In-Reply-To:From; b=QvB1y6yhqjcnW2dHNMBMFeVzYacQDTjQbqOC+pJuDTtCp3vKeWqIucwhUePTmM68d Knx1aBrwgne18FCYU5B1Vq+s5xuivMIuIpcdtkLHHBIJHToXlf8FeU39hxKCfU8dss N12hTzbp908zun54iqmDZfFAvJLg0VkiAZu0bONUt2ln9RPC4O93/EyPhDffxLROhE bMTcSX5hqv+PVncb/RcPaXfSHlvJVLQV1U6Eh0B9NcHmj5CQo0Xqq5GnRk7VXukTB1 4RXNpB1dqodHCUl1mrGutH/m4mpUFm+ta9jcQ1F+dZSBEh/EIIqqCZ8DYa0eaWfIk4 A/FB2YtglLwGg== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 985A112078C; Mon, 22 Jun 2020 17:09:09 -0400 (EDT) From: Stefan Monnier To: emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Message-ID: References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> Date: Mon, 22 Jun 2020 17:09:08 -0400 In-Reply-To: (Ted Zlatanov's message of "Mon, 22 Jun 2020 20:39:47 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.130 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 14:56:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2020 21:09:15 -0000 >>> + (setq-local >>> + prettify-symbols-compose-predicate #'auth-source-reveal-compose-p) > SM> This erases any prior configuration of that variable, so it won't "play > SM> ball" with other users. > Is it better do what tex-mode.el does? > (add-function :override (local 'prettify-symbols-compose-predicate) > #'tex--prettify-symbols-compose-p) Even better is to not :override but do something more respectful of the old value (which presumably is still useful for all the matches using the "other" mapping). >>> + (prettify-symbols-mode (if auth-source-reveal-mode 1 -1))) > SM> And here we forcefully enable/disable `prettify-symbols-mode` even if > SM> all the user wanted if to hide the passwords. > SM> I think we need to decouple the two user-level features. > The plan was to make `prettify-symbols-mode' a library that other modes > like `auth-source-reveal-mode' can use. I went halfway, creating some > API-like functions. Are you suggesting that library is needed now to > avoid the tight coupling? Or something else? Yes, it's needed first: in some modes, enabling `prettify-symbols-mode` can lead to really undesirable behavior (e.g. in Haskell it can lead to code being plain wrong since it can affect indentation and indentation is semantically significant like in Python). So you really can't impose it on the unsuspecting user. Stefan From MAILER-DAEMON Mon Jun 22 20:15:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnWbA-0006hI-Aj for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 20:15:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnWb8-0006gM-MO for emacs-devel@gnu.org; Mon, 22 Jun 2020 20:15:34 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:57285) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnWb6-0002Jd-6x for emacs-devel@gnu.org; Mon, 22 Jun 2020 20:15:34 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 16030FF803; Tue, 23 Jun 2020 00:15:26 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> Date: Tue, 23 Jun 2020 03:01:18 +0300 In-Reply-To: (Stefan Monnier's message of "Sun, 21 Jun 2020 23:38:10 -0400") Message-ID: <874kr24p5l.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.199; envelope-from=juri@linkov.net; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 20:15:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2020 00:15:34 -0000 >>>> Fix display-buffer-override-next-command to call action only once (bug#39722) >>> How do prefix commands using `display-buffer-override-next-command` >>> interact with other prefix commands such as `C-u`? >> They play nicely with all prefix commands, and even with the minibuffer: >> display-buffer-override-next-command comes into play only after exiting >> the minibuffer. > > I'm not sure how. I think `C-x 4 4` followed by `C-u` will work thanks > to the (eq this-command command) check (because > `prefix-command-preserve-state` does (setq this-command last-command)), > but I don't think the reverse will work. Could you give an example of a key sequence where this might not work? > Another problem I see in the code is that > `display-buffer-override-next-command` does > > (setq display-buffer-overriding-action > (delq action display-buffer-overriding-action)) > [...] > (push action display-buffer-overriding-action))) > > But `display-buffer-overriding-action` is not supposed to hold a list > of actions. display-buffer-overriding-action has exactly the same format as display-buffer-fallback-action, and display-buffer-fallback-action holds a list of actions: (defconst display-buffer-fallback-action '((display-buffer--maybe-same-window ;FIXME: why isn't this redundant? display-buffer-reuse-window display-buffer--maybe-pop-up-frame-or-window display-buffer-in-previous-window display-buffer-use-some-window ;; If all else fails, pop up a new frame. display-buffer-pop-up-frame)) "Default fallback action for `display-buffer'. This is the action used by `display-buffer' if no other actions have been specified, for example, by the user options `display-buffer-alist' or `display-buffer-base-action', or they all fail. It should never be set by programs or users. See `display-buffer'.") >>> Any chance this can be merged/unified with `other-frame-window` code? >> What features do you miss from other-frame-window? > > I'm not really worried about features but more about the code and about > what we've learned about the detailed interactions (i.e. trying to avoid > reinventing the same not-quite-circular wheel). In terms of features > (besides the extra transient keymap which allows the use of shorter `C-x > 4` and `C-x 5` prefixes and special bindings under those prefixes) > I suspect that there's the echo area feedback that's missing, tho I'm > not sure it works really well yet in `other-frame-window`. Incidentally, the echo area feedback and the extra transient keymap is exactly what is currently discussed for project-switch-project where `C-x p p` displays a short menu in the echo area and reads keys to run commands from the project.el prefix keymap. But I'm not sure if `C-x 4` and `C-x 5` should be bound to a command like that. From MAILER-DAEMON Mon Jun 22 23:59:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jna5a-0008CZ-42 for mharc-emacs-devel@gnu.org; Mon, 22 Jun 2020 23:59:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jna5Y-0008Bz-0W for emacs-devel@gnu.org; Mon, 22 Jun 2020 23:59:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54935) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jna5W-0001jS-88; Mon, 22 Jun 2020 23:59:10 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.82) (envelope-from ) id 1jna5T-0004eH-Ci; Mon, 22 Jun 2020 23:59:08 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Arthur Miller Cc: joaotavora@gmail.com, xristos@sdf.org, tomas@tuxteam.de, emacs-devel@gnu.org In-Reply-To: (message from Arthur Miller on Fri, 29 May 2020 14:59:44 +0200) Subject: Re: GNU Emacs raison d'etre Reply-To: rms@gnu.org References: <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <06bcddd4-6991-e4f7-e944-93de14af263d@yandex.ru> <87h7wjsd8o.fsf@red-bean.com> <20897f01-122d-7f91-eac2-70f5ad75796f@yandex.ru> <87d077qfmm.fsf@red-bean.com> <87y2pmw9ld.fsf@red-bean.com> <6e4190a4-765d-6abd-1ae2-8c1432c29d65@yandex.ru> <20200521080349.GC26656@tuxteam.de> <87mu5vudex.fsf@gmail.com> <87tv03q6c7.fsf@gmail.com> Message-Id: Date: Mon, 22 Jun 2020 23:59:07 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2020 03:59:12 -0000 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Please forgive me for taking so long to respond. I am backlogged 900 messages I have not yet seen. I just saw your message today. I think the Text Invaders idea leads to a wide space of possible interpretations -- if you write it, you will have lots of room to see what is fun. Now all we need is someone (or someones) to give it a try. Interested? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From MAILER-DAEMON Tue Jun 23 00:09:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnaFM-00045b-Si for mharc-emacs-devel@gnu.org; Tue, 23 Jun 2020 00:09:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnaFK-00045K-Lh for emacs-devel@gnu.org; Tue, 23 Jun 2020 00:09:18 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:11102) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnaFI-0004mV-Fm for emacs-devel@gnu.org; Tue, 23 Jun 2020 00:09:17 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0BB58440228; Tue, 23 Jun 2020 00:09:15 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A366B4405B9; Tue, 23 Jun 2020 00:09:13 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592885353; bh=1aqPMJ7iAbb7dwuEp6O9sLeBKARHDvO1ViWl2uqkJV4=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=PHi10qruOQRLr176uISQ9WF1lcc6zzCunD6vcpXFaRX/bFKlIA7mWnidj9//Uv5Qz hNWLBbUs8LYeZqIumeyM3Jqq4sfFPG7EUKmU4hFj252EFb52s1m0HVniQ+Ke/wVMQ0 pPf4xQ2qvvo+vriXcLLKLiaG1mrsdnJi/OzrVx4j8MkCjKDl5pgklvCdZIxQnysFTv +e7LG+y3p7SlqpV5wRLocuyGukdcJ8D5jJ4Zbg1489dRHvhyIkTgTujUoroWl8t8L+ unO57xI2QGcYyIw0NOsK3auL57tqHJ1T86LEPxDUdKnnkCBum5N4dnnKWOYJkDrNkv 0J8Y8EXt5ltag== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 65404120AB3; Tue, 23 Jun 2020 00:09:13 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> Date: Tue, 23 Jun 2020 00:09:06 -0400 In-Reply-To: <874kr24p5l.fsf@mail.linkov.net> (Juri Linkov's message of "Tue, 23 Jun 2020 03:01:18 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.126 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/23 00:09:15 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2020 04:09:18 -0000 >> I'm not sure how. I think `C-x 4 4` followed by `C-u` will work thanks >> to the (eq this-command command) check (because >> `prefix-command-preserve-state` does (setq this-command last-command)), >> but I don't think the reverse will work. > Could you give an example of a key sequence where this might not work? `C-u C-x 5 5 C-x =` won't display the extra info requested by the `C-u`. You can still get it with `C-x 5 5 C-u C-x =`, but the user shouldn't have to remember in which order prefix commands need to be entered. > display-buffer-overriding-action has exactly the same format as > display-buffer-fallback-action, and display-buffer-fallback-action > holds a list of actions: > > (defconst display-buffer-fallback-action > '((display-buffer--maybe-same-window ;FIXME: why isn't this redundant? > display-buffer-reuse-window > display-buffer--maybe-pop-up-frame-or-window > display-buffer-in-previous-window > display-buffer-use-some-window > ;; If all else fails, pop up a new frame. > display-buffer-pop-up-frame)) Look again! This is not a list of functions: it's a cons cell whose car is a list of functions. > Incidentally, the echo area feedback and the extra transient keymap > is exactly what is currently discussed for project-switch-project > where `C-x p p` displays a short menu in the echo area and reads keys > to run commands from the project.el prefix keymap. I was referring to the each area info also displayed by `C-u`, via `prefix-command-echo-keystrokes-functions`. Nothing fancy like a menu: just a brief mention to reflect the fact that a prefix command is "about to be applied". Stefan From MAILER-DAEMON Tue Jun 23 18:29:59 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnrQV-0000WL-7D for mharc-emacs-devel@gnu.org; Tue, 23 Jun 2020 18:29:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnrQS-0000W5-V4 for emacs-devel@gnu.org; Tue, 23 Jun 2020 18:29:57 -0400 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]:44324) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnrQR-0004j8-DA for emacs-devel@gnu.org; Tue, 23 Jun 2020 18:29:56 -0400 Received: by mail-qt1-x82b.google.com with SMTP id j10so147350qtq.11 for ; Tue, 23 Jun 2020 15:29:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=krtwdLGfMb26uO4yFHBEfS+m4YCKgfmvDe7G9tzUXfE=; b=CHiavI9bIC5zZ6RoctotWL4rLG1P7phMN/8djkhETB2+RTgcp2WTLraC4xnOvF4rq4 NKJGPBYGUWxgjQjFn22ujK8WBqehaDoD3h/GnzEZZEi0Ux/CN5uhNGuX4UicYw7oWASZ m9XnWn+2nzTZikqVF3WrMDvti34G9WZTuScmI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=krtwdLGfMb26uO4yFHBEfS+m4YCKgfmvDe7G9tzUXfE=; b=Uwz6jcqHUXK4KLaBhRACO5ZR7egaicC67wC/pfuXTSgieeIj4a4rti1ktsBdYyC/Pp p78B2Rud5Uxog46TqKtf2OSCDeNy194nmOaqd9Y+F6i8talZh83X0sHovX4pleYjztLq yUt6VPJatXKl5Qn8QK/A2+L9TB3nPWhAq1kA/ZEqqaJM2kRozcol7FXsib9+YGKTOy2w 4nHXrCwaOIt2wA4A+EF3QWJFj4QIeYPgEXO0P/VXd6ipy0W+hh/spFrqCYS4QxIZoZm9 8UWAlm9uYx5WVbHyF1ZPnTaMe59bRHt1HtzrUyjCcpp4R585Phct5EJGf5s1aL82Cf2G cOtg== X-Gm-Message-State: AOAM532UpVrDEZIc//aUcUv+YMEm9a/Gex0vbMW++wcThn+z4Su55GFM pXJcjE/GEdwcbO7V+9cNAZclVLwjJ5w56w== X-Google-Smtp-Source: ABdhPJy0WE3eWnhkCdFdmrH0XEyTJfASpUPE23277yaQLCRyIOt0uuWNXkS8ZBkFby1QQjp35M+Xxg== X-Received: by 2002:aed:3bb9:: with SMTP id r54mr19815320qte.13.1592951393594; Tue, 23 Jun 2020 15:29:53 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id 73sm1855068qkk.38.2020.06.23.15.29.52 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Jun 2020 15:29:52 -0700 (PDT) From: Ted Zlatanov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Tue, 23 Jun 2020 22:29:50 +0000 In-Reply-To: (Stefan Monnier's message of "Mon, 22 Jun 2020 17:09:08 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::82b; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x82b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2020 22:29:57 -0000 On Mon, 22 Jun 2020 17:09:08 -0400 Stefan Monnier wrote: SM> Yes, it's needed first: in some modes, enabling `prettify-symbols-mode` SM> can lead to really undesirable behavior (e.g. in Haskell it can lead to SM> code being plain wrong since it can affect indentation and indentation SM> is semantically significant like in Python). So you really can't impose SM> it on the unsuspecting user. Agreed. It was better to start with something cleaner. So, I created a whole new prettify-text API and reimplemented auth-source-reveal-mode on top of it. It worked well in my testing. The new branch is scratch/tzz/prettify-text-mode (I left scratch/tzz/auth-source-reveal-mode in place as a reference). The new code won't interfere with existing `prettify-symbols-mode' users. Eventually `prettify-symbols-mode' could be migrated to this new API to avoid the code duplication in the post-command-hook and elsewhere. If you have suggestions or comments, please let me know. I'll document the API before I push the branch out. Ted From MAILER-DAEMON Tue Jun 23 20:04:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnsu4-0002co-9Y for mharc-emacs-devel@gnu.org; Tue, 23 Jun 2020 20:04:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnsu3-0002bL-0p for emacs-devel@gnu.org; Tue, 23 Jun 2020 20:04:35 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:45307) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnsu0-0008Mq-JT for emacs-devel@gnu.org; Tue, 23 Jun 2020 20:04:34 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 5D443100008; Wed, 24 Jun 2020 00:04:26 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> Date: Wed, 24 Jun 2020 02:45:19 +0300 In-Reply-To: (Stefan Monnier's message of "Tue, 23 Jun 2020 00:09:06 -0400") Message-ID: <87zh8txsdc.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.178.231; envelope-from=juri@linkov.net; helo=relay11.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/23 20:04:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 00:04:35 -0000 >>> I'm not sure how. I think `C-x 4 4` followed by `C-u` will work thanks >>> to the (eq this-command command) check (because >>> `prefix-command-preserve-state` does (setq this-command last-command)), >>> but I don't think the reverse will work. >> Could you give an example of a key sequence where this might not work? > > `C-u C-x 5 5 C-x =` won't display the extra info requested by the `C-u`. > > You can still get it with `C-x 5 5 C-u C-x =`, but the user shouldn't > have to remember in which order prefix commands need to be entered. The feature was intentionally designed this way for several reasons: 1. it should be easier for the users to build the key sequence when the prefix is in front of the main command key sequence, not before the command that requests a new window/frame; 2. to allow adding arguments to the commands `C-x 4 4` and `C-x 5 5`. The design was based on the existing command `windmove-display-in-direction` where the prefix arg can be given to not select the displayed window. Similarly, the prefix arg could be added to `C-x 4 4` and `C-x 5 5` to request displaying the buffer in another window/frame, but not to select the displayed window. Then `C-u C-x 5 5 C-u C-x =` will display the Help buffer in another frame without selecting it. >> display-buffer-overriding-action has exactly the same format as >> display-buffer-fallback-action, and display-buffer-fallback-action >> holds a list of actions: >> >> (defconst display-buffer-fallback-action >> '((display-buffer--maybe-same-window ;FIXME: why isn't this redundant? >> display-buffer-reuse-window >> display-buffer--maybe-pop-up-frame-or-window >> display-buffer-in-previous-window >> display-buffer-use-some-window >> ;; If all else fails, pop up a new frame. >> display-buffer-pop-up-frame)) > > Look again! This is not a list of functions: it's a cons cell whose car > is a list of functions. It seems currently it works because no other code tries to modify display-buffer-overriding-action, but really functions should be added to the car of display-buffer-overriding-action, or maybe even better not to add but replace display-buffer-overriding-action with own value. >> Incidentally, the echo area feedback and the extra transient keymap >> is exactly what is currently discussed for project-switch-project >> where `C-x p p` displays a short menu in the echo area and reads keys >> to run commands from the project.el prefix keymap. > > I was referring to the each area info also displayed by `C-u`, via > `prefix-command-echo-keystrokes-functions`. Nothing fancy like a menu: > just a brief mention to reflect the fact that a prefix command is "about > to be applied". Currently `C-x 5 5` just displays the message before the next command: "Display next command buffer in a new frame..." but using `prefix-command-echo-keystrokes-functions` it could display "[other-frame]" like other-frame-window does for every following key press. From MAILER-DAEMON Wed Jun 24 01:14:17 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jnxjl-0000fn-4c for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 01:14:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnxjj-0000fH-BT for emacs-devel@gnu.org; Wed, 24 Jun 2020 01:14:15 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:26025) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnxjh-0003NR-22 for emacs-devel@gnu.org; Wed, 24 Jun 2020 01:14:14 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4D146100E03; Wed, 24 Jun 2020 01:14:10 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id ADCA9100ACD; Wed, 24 Jun 2020 01:14:07 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1592975647; bh=5+i16fm6jDgVtbUQdyT87uPugsrLIO/qss3Tq+xb6kU=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=l/5FU4mfAdwIZF1fjGhIRUKK6fy9MsLHrGtBoBXnCFkAwi2TBFRTBA5wSl9zSgSQi NslgDTHQS8S7gD6RaGdSugQ6staUNaS+9Hdg4heoj9hg55PqnmOnEKykD3keHDzAMA e9hEjY6sJVEQMw+YIbAvuCL6v1P3Bc76NNLNbAFU+KYQVzdIUFzZsiGZTJrNs/YEHA N3nzdrfrTcACotx+UxcuumuJRlUtPTQZr9VGWghD572cGP/DMFvHt48zzCsjrV7A9B GNQTsgeIY7mtLmS3Qlr27FN00ZFQnEcP8RGAa8Xr3L5oNB8w7Pea3RlEoTF27NIto5 iv+BBurCzlYhA== Received: from alfajor (unknown [108.175.228.207]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 7014012055F; Wed, 24 Jun 2020 01:14:07 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> Date: Wed, 24 Jun 2020 01:14:06 -0400 In-Reply-To: <87zh8txsdc.fsf@mail.linkov.net> (Juri Linkov's message of "Wed, 24 Jun 2020 02:45:19 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.037 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/24 01:14:10 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 05:14:15 -0000 > The feature was intentionally designed this way for several reasons: > 1. it should be easier for the users to build the key sequence > when the prefix is in front of the main command key sequence, > not before the command that requests a new window/frame; I don't think supporting only one of the two orders can be claimed to make things easier for the user. > 2. to allow adding arguments to the commands `C-x 4 4` and `C-x 5 5`. That's the problem, indeed. It introduces two different kinds of prefixes: those that only apply to "normal commands" and those that also apply to (some) prefixes. I'd rather try and avoid this complexity because I think it will become problematic as more prefix commands get written. E.g. the ordering problem doesn't only affect `C-u` but all other prefix commands, such as `C-x RET c` (there currently aren't others bundled with Emacs, but there are others out there). Stefan From MAILER-DAEMON Wed Jun 24 11:13:42 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jo75q-0002rm-A3 for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 11:13:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jo75n-0002q7-8u for emacs-devel@gnu.org; Wed, 24 Jun 2020 11:13:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51424) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jo75m-00030O-HU; Wed, 24 Jun 2020 11:13:38 -0400 Received: from [176.228.60.248] (port=3974 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jo75l-0003Fr-ML; Wed, 24 Jun 2020 11:13:38 -0400 Date: Wed, 24 Jun 2020 18:13:21 +0300 Message-Id: <83a70sts32.fsf@gnu.org> From: Eli Zaretskii To: Ted Zlatanov Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org In-Reply-To: (message from Ted Zlatanov on Tue, 23 Jun 2020 22:29:50 +0000) Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 15:13:40 -0000 > From: Ted Zlatanov > Date: Tue, 23 Jun 2020 22:29:50 +0000 > Cc: emacs-devel@gnu.org > > On Mon, 22 Jun 2020 17:09:08 -0400 Stefan Monnier wrote: > > SM> Yes, it's needed first: in some modes, enabling `prettify-symbols-mode` > SM> can lead to really undesirable behavior (e.g. in Haskell it can lead to > SM> code being plain wrong since it can affect indentation and indentation > SM> is semantically significant like in Python). So you really can't impose > SM> it on the unsuspecting user. > > Agreed. It was better to start with something cleaner. So, I created a > whole new prettify-text API and reimplemented auth-source-reveal-mode on > top of it. It worked well in my testing. > > The new branch is scratch/tzz/prettify-text-mode (I left > scratch/tzz/auth-source-reveal-mode in place as a reference). > > The new code won't interfere with existing `prettify-symbols-mode' > users. Eventually `prettify-symbols-mode' could be migrated to this new > API to avoid the code duplication in the post-command-hook and > elsewhere. > > If you have suggestions or comments, please let me know. I'll document > the API before I push the branch out. I looked at the branch today, and I'm sorry to say that I wasn't happy with what I saw there. I very much hope I'm missing something. I ask below some questions to make sure I understand the goal and the design; please bear with me. First, the branch seems to include changes that fall into two classes: a feature that allows to hide passwords in auth-related commands, and a "library of text prettification". Is this correct? If so, why are two almost unrelated features being developed on the same branch? Next, how is the "text prettification library" different from the prettify-symbols-mode we already have, and what is the purpose of introducing such a library? It sounds like "text prettification" actually is about the same job as prettify-symbols-mode, but if so, why do we need the additional code? Perhaps the intent is to let other features use the same technique as prettify-symbols-mode for purposes other than prettifying identifiers in programming-language buffers? But then why is, for example, prettify-text-alist talking about "identifiers"? And this actually brings me to the most important point: the use of static compositions. That feature is semi-deprecated: its implementation in the display engine and its Lisp APIs are not very clean, and in particular it doesn't support bidirectional text. Using it in prettify-symbols-mode is semi-okay, since PL symbols rarely if ever use characters from RTL scripts, but the presence of "text" in the additions on the branch makes me think that this is meant for general-purpose text as well. Passwords can definitely (and do) use bidirectional text, for example. So if this is meant to be a general-purpose feature for displaying some text as something else, I don't think we should do this via static compositions. It is unclean, to say the least, for Emacs to have text-processing features that don't support some of the languages and scripts in our repertory. What will we say to people who come complaining that their language doesn't work with this feature? "we didn't think you language was important enough to support it"? So if we want to expand our use of static compositions, let's first fix its support for bidirectional text, and only then add features which depend on that. We shouldn't introduce features with such incomplete support of scripts and languages; we never did that before, AFAIR. Alternatively, if the purpose is to display some text as something else, we already have display properties and overlays that can be (and are) used for implementing such features; why not use them instead? Once again, sorry for a negative commentary; I hope I'm really missing something simple and obvious. And thanks for working on this, Ted. From MAILER-DAEMON Wed Jun 24 11:37:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jo7T9-0004W4-Fj for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 11:37:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jo7T7-0004UE-OS for emacs-devel@gnu.org; Wed, 24 Jun 2020 11:37:45 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21335) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jo7T5-0002y7-9c for emacs-devel@gnu.org; Wed, 24 Jun 2020 11:37:45 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1593013057; cv=none; d=zohomail.com; s=zohoarc; b=ZZKXfoFUU3uF1XL4HPBNm5d+EGib85ZHss0dV8YDg9DV6RFCVcnJAY8Y8VELz7IQnuc0gt/f6RO8+Ra3BEP+nLMRJhxsJljkAp9tlbjsQwJRp1alKi6GbftklWXdjyqap9W6Bj046jw+Wpa9QqIycGPDx11An/0phz/a2OVvY6Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593013057; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=m/mpYjPuAvPtIseOiZ7yNWqLpxOU0lU1iK48+q2MOW8=; b=AmpHNdCiql1obTIJ+GfCjyvxXdh7tlDfCyPadBbGfj1c96IcOCttX0vcZnngl/I0kV0cyaKHgV84JjNs0onljK+6+h6v5YcifJUp5r4OhxyiKstPeHprJXMTm+Ss7RATF5XKr+SujqG0r88bOAJJ2iXMZvH4ooN2Zn9ybp7FXTk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1593013057; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Cc:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=m/mpYjPuAvPtIseOiZ7yNWqLpxOU0lU1iK48+q2MOW8=; b=BfD9pTv9o6ixYrLiVdu3n4qSFD4G4rTZXNDlBd9LQIse1IE4Nr/pEB67Vu1dgMt9 lkRacO11NV2b6ht76sFuQAj8Jp9ys2TXIwbwHLidax2L6TT4SBq5k/hCYeBAihMD8Uv JNriVIwfPS1dVOYTDeiSX1HqCZ5h9zYsYtW4LYKU= Received: from localhost (p54ad491e.dip0.t-ipconnect.de [84.173.73.30]) by mx.zohomail.com with SMTPS id 1593013033433208.86555868038647; Wed, 24 Jun 2020 08:37:13 -0700 (PDT) References: <5230692c-c665-a330-7a12-e59fa25d97dd@gmail.com> <70bb51fd-447d-928c-4d69-1c9673a44471@online.de> <871rnnvmdx.fsf@red-bean.com> <87pnb7sira.fsf@red-bean.com> <83zha8tluq.fsf@gnu.org> <87v9kwi6ta.fsf@osv.gnss.ru> <83wo5ccgg4.fsf@gnu.org> <87lflshxtq.fsf@osv.gnss.ru> <83mu68cbbb.fsf@gnu.org> <87h7wghxdz.fsf@osv.gnss.ru> <87eerkgey1.fsf@osv.gnss.ru> <112aecd7-8165-6cae-ef69-08d14d843841@yandex.ru> <87d073sj7o.fsf@emailmessageidheader.nil> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: Bob Newell Cc: emacs-devel@gnu.org Subject: Re: GNU Emacs raison d'etre In-reply-to: <87d073sj7o.fsf@emailmessageidheader.nil> X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Wed, 24 Jun 2020 17:37:10 +0200 Message-ID: <87h7v0qxuh.fsf@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.53; envelope-from=rekado@elephly.net; helo=sender4-of-o53.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/24 11:37:39 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 15:37:46 -0000 Bob Newell writes: > Finally, as a sort of illustrative footnote: there is a > terminal-based text editor called "Fe, the folding editor" > written long ago by Michael Haart (moria.de). It isn't well > know and isn't in any Gnu-Linux distros that I'm aware of. It=E2=80=99s available in GNU Guix. --=20 Ricardo From MAILER-DAEMON Wed Jun 24 14:15:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jo9vV-00042a-Af for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 14:15:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49334) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jo9vU-00041l-2p for emacs-devel@gnu.org; Wed, 24 Jun 2020 14:15:12 -0400 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]:37135) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jo9vS-0004c6-4i for emacs-devel@gnu.org; Wed, 24 Jun 2020 14:15:11 -0400 Received: by mail-qt1-x82a.google.com with SMTP id d27so2471069qtg.4 for ; Wed, 24 Jun 2020 11:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=S5lcPxhSwr5Vyz41N03+9yx1C0biVFmpaO4kLzLkYcA=; b=aKNeNejQ/pBhL3G+HK4oPzTYlzVtaTRmzIJodfXJ4WoNPMeu2q51Jwwx1ykYsVlcYZ spQbJZvhe74VovstixkghvCd2tZoT45oplqARzqY6ul39QltHkyCISjVnofURB8s/DOu qDmz1cBzGTxUeKzumRhNj6AF9spPSbj8rPvfI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=S5lcPxhSwr5Vyz41N03+9yx1C0biVFmpaO4kLzLkYcA=; b=uaDF2PCbjqKhqoPpkkk99QPzPNN6l21USDaRhfWGFRDkjir+U/b9Y8l5cA8QNbyGsm qceiLZrWIKtvxWa/0t240BE0fSB6UIg5lHzluayNDWhzuKKJosNQApb+jwekRvVRYLcG A6qxtoWZvxTSbgloWmvbQerMpjiCE+uj2TMNtUSXkDP5KBDXyfwjvH4wlNZkWsqAr/XN dRGy7blsUOyG7kbfA3h/G273JcFAwhjatd+ZK45GNCm/6/OJCXjCuFI97F8AUF4tkHKZ LHHulZR4jJRs05PS+b/1isc14rhirU5ikGucSxdmCzVVtAzFfm0RF65DsqVKyApn/2wB PdjQ== X-Gm-Message-State: AOAM5332c9ODAgGRPxXxnUhCfjiJw5k3Je0nz+emYO9/3IMWrmUNwygq THGkGpxRH8b0Mfj4GHdT0EQ7UyBul10+Zg== X-Google-Smtp-Source: ABdhPJy95TXNV/YPqpw0pOUI73gxRDfxCRYpyJe6lO5eahIL8XQNDTjqywFdTgChbDuixcLZqXAVkQ== X-Received: by 2002:aed:26e1:: with SMTP id q88mr12627931qtd.354.1593022508497; Wed, 24 Jun 2020 11:15:08 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id z4sm3647242qkj.131.2020.06.24.11.15.06 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Jun 2020 11:15:06 -0700 (PDT) From: Ted Zlatanov To: Eli Zaretskii Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Wed, 24 Jun 2020 18:15:05 +0000 In-Reply-To: <83a70sts32.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 24 Jun 2020 18:13:21 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::82a; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x82a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 18:15:12 -0000 On Wed, 24 Jun 2020 18:13:21 +0300 Eli Zaretskii wrote: EZ> First, the branch seems to include changes that fall into two classes: EZ> a feature that allows to hide passwords in auth-related commands, and EZ> a "library of text prettification". Is this correct? If so, why are EZ> two almost unrelated features being developed on the same branch? (For reference, the branch is scratch/tzz/prettify-text-mode) Hi Eli. The two features will be separate commits so their coexistence in the branch is just to make reviews and testing easier. But they are very much related: the prettification functions are in prettify-text-* and then `auth-source-reveal-mode' uses those functions. EZ> Next, how is the "text prettification library" different from the EZ> prettify-symbols-mode we already have, and what is the purpose of EZ> introducing such a library? It sounds like "text prettification" EZ> actually is about the same job as prettify-symbols-mode, but if so, EZ> why do we need the additional code? Perhaps the intent is to let EZ> other features use the same technique as prettify-symbols-mode for EZ> purposes other than prettifying identifiers in programming-language EZ> buffers? Earlier in scratch/tzz/auth-source-reveal-mode I implemented `auth-source-reveal-mode' on top of `prettify-symbols-mode' but Stefan commented and I agreed that it would be better refactored as a library. So as of now, the prettify-text-* functions are a way to implement text prettifications that works like `prettify-symbols-mode' but doesn't interfere with it. The prettify-text-* functions also support regular expressions, unlike `prettify-symbols-mode'. That's the major new feature because without it, `auth-source-reveal-mode' could not work. In addition, prettifications based on regular expressions have been requested many times in external forums, so I think this is a valid use case beyond `auth-source-reveal-mode'. EZ> But then why is, for example, prettify-text-alist talking EZ> about "identifiers"? The identifiers in `prettify-text-alist' are symbols that identify each entry's origin. For `auth-source-reveal-mode' the identifier is 'auth-source-reveal-regexp. That allows the prettify-text-* functions to list and remove related prettifications instead of anonymously mashing them together like `prettify-symbols-mode' does. EZ> And this actually brings me to the most important point: the use of EZ> static compositions. That feature is semi-deprecated: its EZ> implementation in the display engine and its Lisp APIs are not very EZ> clean, and in particular it doesn't support bidirectional text. Let's separate the library functions named prettify-text-* from the underlying implementation. 1) The library functions. Currently prettify-text-* functions can add or remove prettifications of a regexp to a single character or a composition list. That prettification can be hidden or revealed when point is inside or on the right edge of the prettification. (That's the functionality of `prettify-symbols-mode' as well, except it doesn't support regular expressions and users manipulate the alist directly.) The major problem you raise here is the limitation to a single character or a composition list, which in the prettify-text-* functions gets exposed in exactly one place: the docstring of `prettify-text-alist', which should not be directly manipulated by library users anyway. file:lisp/progmodes/prog-mode.el::95 In ~prettify-text-alist~: #+BEGIN_SRC emacs-lisp (defvar-local prettify-text-alist nil "Alist of text regexp prettifications. Each element must look like (IDENTIFIER REGEXP CHARACTER) ... CHARACTER can be a character, or it can be a list or vector, in which case it will be used to compose the new symbol as per the third argument of `compose-region'. #+END_SRC So I think we can easily move away from static compositions in the prettify-text-* library functions. 2) The underlying implementation. This is almost exactly like `prettify-symbols-mode' in its dependence on static compositions. I agree we should change it, the question is when (before merge or in a followup code fix) and to what, so the behavior is preserved. EZ> Alternatively, if the purpose is to display some text as something EZ> else, we already have display properties and overlays that can be (and EZ> are) used for implementing such features; why not use them instead? I would welcome help in implementing the prettify-text-* internals better (supporting bidirectional script and anything else you would consider required) and asked for help with it earlier. I'll need a hand from someone knowledgeable, or at least a pointer to code that provides the same functionality as `prettify-symbols-mode' in a way that's acceptable. I listed the functionality in (1) above. Ted From MAILER-DAEMON Wed Jun 24 14:36:54 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joAGU-000895-A9 for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 14:36:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joAGS-00088y-OG for emacs-devel@gnu.org; Wed, 24 Jun 2020 14:36:52 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53652) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1joAGR-0003o4-VC; Wed, 24 Jun 2020 14:36:51 -0400 Received: from [176.228.60.248] (port=4791 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1joAGR-0003io-9t; Wed, 24 Jun 2020 14:36:51 -0400 Date: Wed, 24 Jun 2020 21:36:34 +0300 Message-Id: <83v9jgs43x.fsf@gnu.org> From: Eli Zaretskii To: Ted Zlatanov Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org In-Reply-To: (message from Ted Zlatanov on Wed, 24 Jun 2020 18:15:05 +0000) Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 18:36:53 -0000 > From: Ted Zlatanov > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > Date: Wed, 24 Jun 2020 18:15:05 +0000 > > EZ> Alternatively, if the purpose is to display some text as something > EZ> else, we already have display properties and overlays that can be (and > EZ> are) used for implementing such features; why not use them instead? > > I would welcome help in implementing the prettify-text-* internals > better (supporting bidirectional script and anything else you would > consider required) and asked for help with it earlier. I'll need a hand > from someone knowledgeable, or at least a pointer to code that provides > the same functionality as `prettify-symbols-mode' in a way that's > acceptable. I listed the functionality in (1) above. I would like first to understand why you thought about using the prettify-symbols-mode technique for this. The natural features to use for displaying some text instead of what's in the buffer are 'display' text properties and overlay strings, and the natural feature for hiding some text is the 'invisible' text property. So why didn't you use these features to begin with? What am I missing? Thanks. From MAILER-DAEMON Wed Jun 24 15:04:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joAh4-0000nG-Ih for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 15:04:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35940) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joAh0-0000jq-6K for emacs-devel@gnu.org; Wed, 24 Jun 2020 15:04:19 -0400 Received: from mail-qv1-xf2f.google.com ([2607:f8b0:4864:20::f2f]:36804) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1joAgw-0005mn-C8 for emacs-devel@gnu.org; Wed, 24 Jun 2020 15:04:17 -0400 Received: by mail-qv1-xf2f.google.com with SMTP id h18so1578413qvl.3 for ; Wed, 24 Jun 2020 12:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=vUg+48I10j0Jgl5DP2JUX/D3HudJW/yn4JrQCIHA09k=; b=JWYdn7uDIIUFh/x4ZBuD1qPeED19ZiMfwPzaCBRjYw+NXuYRctkYJOX3cVE9smKmap 6ARpYURX/La/72h7bWTDixG6kEI2u/YxNY6/ewcdONkfqKQgBILgNaKg32l4FFN2WoXF 4QHRwLyzXu7HqExH5Hn8Blc9rRFM2YWJABwGM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=vUg+48I10j0Jgl5DP2JUX/D3HudJW/yn4JrQCIHA09k=; b=YdBbV7x+Nywdh7FXVKpwMZio5oqvTzD5yeSLdVUrwWu/V9SaGE4g0FOB/SNyU7EMms WdTL32NKaxcLI5j+NskTF81vLg0DFJAYk8bhK0hMnwsr5p5Ni4emocGC+ayZeB4H00qT VbHZWiVfN8HRKKe/Wxmdj6nkWIuUa5Q8+ZLjaScDz2t3ZtwpSnoVoQRuT70Ti2etU8XW c2+TCOI1u81Wg9uu1naI4PyvOFCwLjMHT6EtCwY+wN4XHamPN/B9bG+nTPll7lR+42a0 IHTxOMzxGK9MOo3wuwJwbvqkYKYFcl4j7rmdFI+EUEjxF8aOoLxkAN8qPKyKO5y8KX+y T87w== X-Gm-Message-State: AOAM5312JApQHjyLBrK+KkeBMxBm2ingFRah4/LY/5E4o1HkSXG+0OhO 8RiTAJZo0rAKbh/fQYc+zAtou29/vf9LMg== X-Google-Smtp-Source: ABdhPJw9stbj3L3tGjlx0Yr3bzXocturymo0ck8quehy7/TgrN5RbI2fRPiFNEWY604acQ+3rM5aKw== X-Received: by 2002:a0c:e311:: with SMTP id s17mr20903859qvl.172.1593025452276; Wed, 24 Jun 2020 12:04:12 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id u5sm4017964qke.32.2020.06.24.12.04.10 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Jun 2020 12:04:11 -0700 (PDT) From: Ted Zlatanov To: Eli Zaretskii Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> <83v9jgs43x.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Wed, 24 Jun 2020 19:04:10 +0000 In-Reply-To: <83v9jgs43x.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 24 Jun 2020 21:36:34 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::f2f; envelope-from=tzz@lifelogs.com; helo=mail-qv1-xf2f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 19:04:20 -0000 On Wed, 24 Jun 2020 21:36:34 +0300 Eli Zaretskii wrote: >> From: Ted Zlatanov >> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org >> Date: Wed, 24 Jun 2020 18:15:05 +0000 >> EZ> Alternatively, if the purpose is to display some text as something EZ> else, we already have display properties and overlays that can be (and EZ> are) used for implementing such features; why not use them instead? >> >> I would welcome help in implementing the prettify-text-* internals >> better (supporting bidirectional script and anything else you would >> consider required) and asked for help with it earlier. I'll need a hand >> from someone knowledgeable, or at least a pointer to code that provides >> the same functionality as `prettify-symbols-mode' in a way that's >> acceptable. I listed the functionality in (1) above. EZ> I would like first to understand why you thought about using the EZ> prettify-symbols-mode technique for this. Well, it did exactly what I needed and worked well in my testing. See thread "Re: questions about correct reveal-mode usage to hide passwords": On Thu, 11 Jun 2020 15:51:27 -0400 Stefan Monnier wrote: > Ted wrote: >> Is there an example using jit-lock that behaves like >> prettify-symbols-mode in the following cases? >> >> * transforms the text when outside it >> * temporarily shows the original text when inside it or on its right edge >> * updates when the user makes changes SM> Maybe if you look at the `csv-align-mode` in GNU ELPA's `csv-mode.el` SM> (tho it mixes the job of aligning columns and of truncating/hiding the SM> text of columns that are too wide). EZ> The natural features to use EZ> for displaying some text instead of what's in the buffer are 'display' EZ> text properties and overlay strings, and the natural feature for EZ> hiding some text is the 'invisible' text property. So why didn't you EZ> use these features to begin with? What am I missing? I spent several fruitless hours in that direction. Since I didn't have more hours to spend, I went with the working solution I could understand. This didn't happen in a vacuum, I posted my questions to emacs-devel in the thread above. Ted From MAILER-DAEMON Wed Jun 24 19:59:25 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joFIb-0007fn-O4 for mharc-emacs-devel@gnu.org; Wed, 24 Jun 2020 19:59:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joFIa-0007dx-8k for emacs-devel@gnu.org; Wed, 24 Jun 2020 19:59:24 -0400 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:58203) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joFIX-0006ov-Pu for emacs-devel@gnu.org; Wed, 24 Jun 2020 19:59:23 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id DDCFC60005; Wed, 24 Jun 2020 23:59:17 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> Date: Thu, 25 Jun 2020 02:58:36 +0300 In-Reply-To: (Stefan Monnier's message of "Wed, 24 Jun 2020 01:14:06 -0400") Message-ID: <87wo3w9ftf.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.195; envelope-from=juri@linkov.net; helo=relay3-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/24 19:59:19 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 23:59:24 -0000 >> 2. to allow adding arguments to the commands `C-x 4 4` and `C-x 5 5`. > > That's the problem, indeed. It introduces two different kinds of > prefixes: those that only apply to "normal commands" and those that also > apply to (some) prefixes. > > I'd rather try and avoid this complexity because I think it will become > problematic as more prefix commands get written. E.g. the ordering > problem doesn't only affect `C-u` but all other prefix commands, such as > `C-x RET c` (there currently aren't others bundled with Emacs, but there > are others out there). Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: `C-u C-x RET f`. From MAILER-DAEMON Thu Jun 25 05:21:36 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joO4e-00021T-3n for mharc-emacs-devel@gnu.org; Thu, 25 Jun 2020 05:21:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joO4b-00020b-Qt for emacs-devel@gnu.org; Thu, 25 Jun 2020 05:21:33 -0400 Received: from mail-io1-xd2a.google.com ([2607:f8b0:4864:20::d2a]:45948) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1joO4a-0002KM-8k for emacs-devel@gnu.org; Thu, 25 Jun 2020 05:21:33 -0400 Received: by mail-io1-xd2a.google.com with SMTP id e64so351418iof.12 for ; Thu, 25 Jun 2020 02:21:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=nT/O8Vsk9K57s19I1u2czNKQNw03Zauo7+udEAL4/wU=; b=o2D5ja7ZLwgo7BBvkDQHkEDdxMWw2UNdET4dR0+idZqoDc9ja+aNmIobLBrUfId9kK 2wu2sp0CnznxzOqGnDGJVZipog+Q5EcbNNK2HS6ZPvm7FsaWS8Ov71iyQJv9jwZ4WSJg 6u2M5ESgm3qDEGMjIObe/nbUewodL4LrY9AcOj+IS6zuOaz6JxDI3GLaFnMQR/odU9iP EpMhMCwVmvD5weRRbtycEbfkzbJOPaouL66OK/X7bjKGH7Uj0wyMmAIUaybaRkWvMObs x/r+O1S8+frlVum/JJETHuF7rOpaYPOkVIfFu9J8RE7pf23r+8H+WE0ZYMlAEH0fWGGe WAHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=nT/O8Vsk9K57s19I1u2czNKQNw03Zauo7+udEAL4/wU=; b=dG08lzTvbVg31hBMCYlesmAqrygZJPwQTjWNmyaJAVFzQag1YiiVAXY5XH0px+O2N3 26lJBaI4VmUrvON1RUuN3Zo8VyOEU9XoYoRxMaCUWAwoF3uZKmme7LtANtAuG7T7WXiP 0WUfAThZrSb+TqgYBjQbbAt+kZ9YGkwz4Ku6uQO19Lo66/OT4SRbKjdZ5Ga4PQuaEpD/ 5fVA+tF34WVhnoQ+1KlFfQwMIEwK9qiH4VTE50X6AozvtEnQYLD7OAEXwpSfXNXCn8xk L30wYP/0lTa9qWuMNbBwMsG2xSOAkYRuIrLl8fyawOPjSgBuJpV1MYXrCWbk5UhZkVb5 fOdw== X-Gm-Message-State: AOAM533A85awXYCRlT47J7oxTosIdirEQX5xnvp5up10xS3Vs06oJbyK BnDLktxIURdYq07rCfyEdF6dy6CshQZGyRDlgxQZlcDKmkE= X-Google-Smtp-Source: ABdhPJx/QgdDHZjEWpGKu3P9UZjVBqTHKhn8CeGThTQJMGRd0ERKJzJvl77sxmhDBk1Q8I0jx62s6tK1yJeJzUErlX0= X-Received: by 2002:a05:6638:236:: with SMTP id f22mr18940318jaq.18.1593076889893; Thu, 25 Jun 2020 02:21:29 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?Q?Aur=C3=A9lien_Aptel?= Date: Thu, 25 Jun 2020 11:21:18 +0200 Message-ID: Subject: SMIE examples and questions To: Emacs development discussions Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::d2a; envelope-from=aurelien.aptel@gmail.com; helo=mail-io1-xd2a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Jun 2020 09:21:34 -0000 Hi, Are there *simple* complete examples of SMIE out there? I find the manual not that helpful to get started and existing modes look pretty complex :( Is the forward lexer required or is the backward one enough? What are the assumptions of SMIE regarding the lexer? - What should it return when there is nothing to read (eg backward and begining of buffer)? - I assume if the point is in the middle of a token, it should return the complete current token (including text after point) and place the point at token start? - Does point position matter regarding spaces (assuming they have no meaning)? Is it ok if the lexer places the point sometime after and sometime before them? - Can I safely call it manually without involving SMIE? - I assume backward and forward lexer should always have the same behaviour, even for spaces? I understand there is no way to dump the AST after parsing, and that grammar errors not being reported is a feature. How am I supposed to debug parsing/indenting? If you have any tips or workflow, like the more practical order to implement things, or how to debug that would be greatly appreciated. Thanks! From MAILER-DAEMON Thu Jun 25 09:31:24 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joRyO-00089H-DC for mharc-emacs-devel@gnu.org; Thu, 25 Jun 2020 09:31:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joRyM-000876-RK for emacs-devel@gnu.org; Thu, 25 Jun 2020 09:31:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:39586) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1joRyM-0005iN-02; Thu, 25 Jun 2020 09:31:22 -0400 Received: from [176.228.60.248] (port=2350 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1joRyL-0007Zt-Bv; Thu, 25 Jun 2020 09:31:21 -0400 Date: Thu, 25 Jun 2020 16:31:02 +0300 Message-Id: <83sgejs25l.fsf@gnu.org> From: Eli Zaretskii To: Ted Zlatanov Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org In-Reply-To: (message from Ted Zlatanov on Wed, 24 Jun 2020 19:04:10 +0000) Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> <83v9jgs43x.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Jun 2020 13:31:23 -0000 > From: Ted Zlatanov > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > Date: Wed, 24 Jun 2020 19:04:10 +0000 > > EZ> The natural features to use > EZ> for displaying some text instead of what's in the buffer are 'display' > EZ> text properties and overlay strings, and the natural feature for > EZ> hiding some text is the 'invisible' text property. So why didn't you > EZ> use these features to begin with? What am I missing? > > I spent several fruitless hours in that direction. Since I didn't have > more hours to spend, I went with the working solution I could > understand. This didn't happen in a vacuum, I posted my questions to > emacs-devel in the thread above. I'm very sorry that I couldn't participate in that discussion. I did read its beginning, and at the time it looked to me that you were getting good advice from Stefan and Clément. I missed the point where you decided to switch to prettify-symbols-mode as your basis; I should have chimed in right there and then. Can you please tell in more detail what caused you problems when you tried using overlays and invisible text properties? It surprises me that you encountered such difficulties, as there are quite a few features which use those facilities for similar purposes. As a random example, hl-line-mode moves an overlay as result of user commands, which sounds similar to what you need to do. Perhaps if you describe the difficulties you bumped into in more detail, we could help you overcome them? AFAICT, you never actually described the specific problems you had. prettify-symbols-mode (and static compositions in general) just aren't the right tool for such jobs; we have much better tools for that, and they work well for many other features. I'd be very surprised if those tools couldn't support your use cases. Thanks. From MAILER-DAEMON Thu Jun 25 12:54:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joV97-0005rQ-Qx for mharc-emacs-devel@gnu.org; Thu, 25 Jun 2020 12:54:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35766) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joV96-0005po-HK for emacs-devel@gnu.org; Thu, 25 Jun 2020 12:54:40 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:18975) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joV94-0004P6-4a for emacs-devel@gnu.org; Thu, 25 Jun 2020 12:54:39 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id A9A581002D8; Thu, 25 Jun 2020 12:54:36 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 603D4100283; Thu, 25 Jun 2020 12:54:27 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593104067; bh=34LMoQ0rjlT9wtKrTIN5wB4rDcIA2oQJyPl8WPHLybw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=bTDZC+G9AafW/Ex5/RI87+OL51pgkMXQUYepTZxJ12YIv8lzJwcK6lKYJHsUqG3JE /LmlFD6jDk9GVxv3pblOhmS7Cnb6sY89F22Biif3QZ2xu39roVP9r4E9tpqWf36RCA 9QIZl0fgyxDZJA7aIx+s/EUDc1r1uXcBVGgXc0HkSZCiECGbCktBDSdvjcZDuLn/Sw TnKUpeTRdEHy0rP7apQGXeVBJGaVyBxRTxzbayUnYT4PN+d4maDY7J/kM+8yD9wK1F imKRBlh5D1rWIrsFJ/ipxAgQ5bncWmFgL998Be7iWolGiilZidorgXKVjrT34AXx2l gHAITZ8fkib7w== Received: from alfajor (65-110-220-255.cpe.pppoe.ca [65.110.220.255]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 0A18C120225; Thu, 25 Jun 2020 12:54:26 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?Aur=E9lien?= Aptel Cc: Emacs development discussions Subject: Re: SMIE examples and questions Message-ID: References: Date: Thu, 25 Jun 2020 12:54:21 -0400 In-Reply-To: (=?windows-1252?Q?=22Aur=E9lien?= Aptel"'s message of "Thu, 25 Jun 2020 11:21:18 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.077 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/25 12:54:36 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Jun 2020 16:54:40 -0000 > Are there *simple* complete examples of SMIE out there? I find the > manual not that helpful to get started and existing modes look pretty > complex :( The only simple and complete ones are for language that are probably too simple. Maybe the rnc-mode and dts-mode GNU ELPA packages? You might also want to look at my SMIE paper (https://programming-journal.org/2021/5/1/) which walks through a small part of the rnc-mode SMIE code. > Is the forward lexer required or is the backward one enough? Both are needed. > What are the assumptions of SMIE regarding the lexer? > - What should it return when there is nothing to read (eg backward and > begining of buffer)? nil, usually. > - I assume if point is in the middle of a token, it should return > the complete current token (including text after point) and place the > point at token start? The caller of the lexer should normally make sure it's never in the middle of a token. This doesn't work if you have tokens that can span multiple lines (e.g. when LF itself is significant, such as the implicit ; in Javascript). > - Does point position matter regarding spaces (assuming they have no > meaning)? Is it ok if the lexer places the point sometime after and > sometime before them? It should place point right "after" (in the direction of movement) the token it has read. > - Can I safely call it manually without involving SMIE? Yes. > - I assume backward and forward lexer should always have the same > behaviour, even for spaces? Yes and no, since one should stop to the left of the spaces and the other to the right. > I understand there is no way to dump the AST after parsing, and that > grammar errors not being reported is a feature. There's no AST, indeed, and there are no possible errors (IOW errors can't be detected). > How am I supposed to debug parsing/indenting? I mostly use M-C-f and M-C-b for parsing. For the indentation rules you can use `M-x smie-edebug`. > If you have any tips or workflow, like the more practical order to > implement things, or how to debug that would be greatly appreciated. Start with the simple cases and then work your way up. If you want more concrete help, don't hesitate to send me your current code along with some sample source showing how it should be indented and the problems you're facing. Stefan From MAILER-DAEMON Thu Jun 25 17:44:18 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joZfO-0006mA-LI for mharc-emacs-devel@gnu.org; Thu, 25 Jun 2020 17:44:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joZfM-0006ky-FW for emacs-devel@gnu.org; Thu, 25 Jun 2020 17:44:16 -0400 Received: from eidolon.muppetlabs.com ([207.66.255.52]:46024) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1joZfJ-0005UX-Hd for emacs-devel@gnu.org; Thu, 25 Jun 2020 17:44:15 -0400 Received: from mikeh by eidolon.muppetlabs.com with local (Exim 4.82) (envelope-from ) id 1joZfH-00077z-AH for emacs-devel@gnu.org; Thu, 25 Jun 2020 14:44:11 -0700 User-agent: mu4e 1.0; emacs 25.3.1 From: Mike Hamrick To: emacs-devel@gnu.org Subject: [PATCH] TTY Support for ECMA-48 strike-through graphic rendition Date: Thu, 25 Jun 2020 14:44:11 -0700 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: mikeh@muppetlabs.com X-SA-Exim-Scanned: No (on eidolon.muppetlabs.com); SAEximRunCond expanded to false Received-SPF: pass client-ip=207.66.255.52; envelope-from=mikeh@muppetlabs.com; helo=eidolon.muppetlabs.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/25 17:44:11 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Jun 2020 21:44:16 -0000 Hello, In 1984, the third edition of ECMA-48 "Control Functions for Coded Character Sets" was published. In section 8.3.117 under "Select Graphic Rendition" a new character attribute for "crossed-out" was added. As Thomas Dickey notes, many escape sequences in ECMA-48 were in fact created by a committee, and did not exist in hardware terminals of the time, but were rather a framework for proposed terminal implementations. Some 30 years on, many terminal programs such as xterm, gnome-terminal, termite, st, konsole, and others have implemented the ECMA-48 strike-through escape sequences, however there wasn't a terminfo(5) capability defined for the purpose until a few years ago. Here is my patch which adds Emacs TTY support for strike-through rendering, which I personally use in org-mode for done TODO items. In order for this to work for you, your terminfo database entry needs to have the "smxx" capability defined, which I believe more recent versions[0] of the xterm entry have. [0]: https://invisible-island.net/xterm/terminfo.html * term.c: Support strike-through in capable terminals. (no_color_bit): Replace unused NC_INVIS with NC_STRIKE_THROUGH. (turn_on_face): Output via TS_enter_strike_through_mode if available. (turn_off_face): Handle strike-through case. (tty_capable_p, init_tty): Support strike-through. * termchar.h (struct tty_display_info): Add field for strike-through. * xfaces.c (tty_supports_face_attributes_p, realize_tty_face): Handle strike-through case. * dispextern.h: Add TTY_CAP_STRIKE_THROUGH definition. (struct face): Add field tty_strike_through_p. --- src/dispextern.h | 2 ++ src/term.c | 34 ++++++++++++++++++++-------------- src/termchar.h | 1 + src/xfaces.c | 12 +++++++++++- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/dispextern.h b/src/dispextern.h index e1d6eddc41..082a345441 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1744,6 +1744,7 @@ #define FONT_TOO_HIGH(ft) \ bool_bf tty_italic_p : 1; bool_bf tty_underline_p : 1; bool_bf tty_reverse_p : 1; + bool_bf tty_strike_through_p : 1; /* True means that colors of this face may not be freed because they have been copied bitwise from a base face (see @@ -3290,6 +3291,7 @@ #define TTY_CAP_UNDERLINE 0x02 #define TTY_CAP_BOLD 0x04 #define TTY_CAP_DIM 0x08 #define TTY_CAP_ITALIC 0x10 +#define TTY_CAP_STRIKE_THROUGH 0x20 /*********************************************************************** diff --git a/src/term.c b/src/term.c index 5cbb092ad1..bf5e339d2f 100644 --- a/src/term.c +++ b/src/term.c @@ -105,14 +105,14 @@ #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } whil enum no_color_bit { - NC_STANDOUT = 1 << 0, - NC_UNDERLINE = 1 << 1, - NC_REVERSE = 1 << 2, - NC_ITALIC = 1 << 3, - NC_DIM = 1 << 4, - NC_BOLD = 1 << 5, - NC_INVIS = 1 << 6, - NC_PROTECT = 1 << 7 + NC_STANDOUT = 1 << 0, + NC_UNDERLINE = 1 << 1, + NC_REVERSE = 1 << 2, + NC_ITALIC = 1 << 3, + NC_DIM = 1 << 4, + NC_BOLD = 1 << 5, + NC_STRIKE_THROUGH = 1 << 6, + NC_PROTECT = 1 << 7 }; /* internal state */ @@ -1931,6 +1931,9 @@ turn_on_face (struct frame *f, int face_id) if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (tty, NC_UNDERLINE)) OUTPUT1_IF (tty, tty->TS_enter_underline_mode); + if (face->tty_strike_through_p && MAY_USE_WITH_COLORS_P (tty, NC_STRIKE_THROUGH)) + OUTPUT1_IF (tty, tty->TS_enter_strike_through_mode); + if (tty->TN_max_colors > 0) { const char *ts; @@ -1971,7 +1974,8 @@ turn_off_face (struct frame *f, int face_id) if (face->tty_bold_p || face->tty_italic_p || face->tty_reverse_p - || face->tty_underline_p) + || face->tty_underline_p + || face->tty_strike_through_p) { OUTPUT1_IF (tty, tty->TS_exit_attribute_mode); if (strcmp (tty->TS_exit_attribute_mode, tty->TS_end_standout_mode) == 0) @@ -2006,11 +2010,12 @@ #define TTY_CAPABLE_P_TRY(tty, cap, TS, NC_bit) \ if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(tty, NC_bit))) \ return 0; - TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode, NC_ITALIC); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode, NC_ITALIC); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_STRIKE_THROUGH, tty->TS_enter_strike_through_mode, NC_STRIKE_THROUGH); /* We can do it! */ return 1; @@ -4124,6 +4129,7 @@ init_tty (const char *name, const char *terminal_type, bool must_succeed) tty->TS_enter_alt_charset_mode = tgetstr ("as", address); tty->TS_exit_alt_charset_mode = tgetstr ("ae", address); tty->TS_exit_attribute_mode = tgetstr ("me", address); + tty->TS_enter_strike_through_mode = tgetstr ("smxx", address); MultiUp (tty) = tgetstr ("UP", address); MultiDown (tty) = tgetstr ("DO", address); diff --git a/src/termchar.h b/src/termchar.h index c96b81913b..a8b3051767 100644 --- a/src/termchar.h +++ b/src/termchar.h @@ -136,6 +136,7 @@ #define EMACS_TERMCHAR_H const char *TS_enter_reverse_mode; /* "mr" -- enter reverse video mode. */ const char *TS_exit_underline_mode; /* "us" -- start underlining. */ const char *TS_enter_underline_mode; /* "ue" -- end underlining. */ + const char *TS_enter_strike_through_mode; /* "smxx" -- turn on strike-through mode. */ /* "as"/"ae" -- start/end alternate character set. Not really supported, yet. */ diff --git a/src/xfaces.c b/src/xfaces.c index c4a4e1c94f..dc6ea5eacf 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -5207,7 +5207,6 @@ tty_supports_face_attributes_p (struct frame *f, || !UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) - || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])) return false; @@ -5272,6 +5271,15 @@ tty_supports_face_attributes_p (struct frame *f, test_caps |= TTY_CAP_INVERSE; } + /* strike through */ + val = attrs[LFACE_STRIKE_THROUGH_INDEX]; + if (!UNSPECIFIEDP (val)) + { + if (face_attr_equal_p (val, def_attrs[LFACE_STRIKE_THROUGH_INDEX])) + return false; /* same as default */ + else + test_caps |= TTY_CAP_STRIKE_THROUGH; + } /* Color testing. */ @@ -6234,6 +6242,8 @@ realize_tty_face (struct face_cache *cache, face->tty_underline_p = true; if (!NILP (attrs[LFACE_INVERSE_INDEX])) face->tty_reverse_p = true; + if (!NILP (attrs[LFACE_STRIKE_THROUGH_INDEX])) + face->tty_strike_through_p = true; /* Map color names to color indices. */ map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted); -- 2.24.0 From MAILER-DAEMON Fri Jun 26 05:08:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jokLY-0002nD-Uj for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 05:08:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51762) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jokLX-0002lY-9J for emacs-devel@gnu.org; Fri, 26 Jun 2020 05:08:31 -0400 Received: from quimby.gnus.org ([2a01:4f9:2b:f0f::2]:44648) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jokLV-0001jo-GK for emacs-devel@gnu.org; Fri, 26 Jun 2020 05:08:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=9XcUN2lN9sZoRt2slNIZ+Ln91uR0qCaunJ4DHvQ6jT4=; b=UQp4WeC8h4aCLeQOovOmwqCXJR lOojYAF6uzi7fN5z3E/gG5kA1A6MzVZNZpe1hZize/tu6UG756Y4lD0MNtsW2MGF223NsAL+Ek2oo JWfO3CLENXJOTSu3COhZd4SaHaLvr+fYf/DSXFkmgjjWwWR/iKK4ria3f3yVpqGmE1fM=; Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jokLN-0005aY-Nm; Fri, 26 Jun 2020 11:08:24 +0200 From: Lars Ingebrigtsen To: =?utf-8?Q?K=C3=A9vin?= Le Gouguec Cc: Karl Fogel , Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? References: <87r1ubfyq5.fsf@red-bean.com> <87o8pffqm2.fsf@gmail.com> Date: Fri, 26 Jun 2020 11:08:20 +0200 In-Reply-To: <87o8pffqm2.fsf@gmail.com> (=?utf-8?Q?=22K=C3=A9vin?= Le Gouguec"'s message of "Fri, 19 Jun 2020 09:43:01 +0200") Message-ID: <87y2oamby3.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a01:4f9:2b:f0f::2; envelope-from=larsi@gnus.org; helo=quimby.gnus.org 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 09:08:31 -0000 K=C3=A9vin Le Gouguec writes: > FWIW, back in December[1] Juri mentioned that read-multiple-choice > should probably be patched to use the minibuffer. Yup, I agree. --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From MAILER-DAEMON Fri Jun 26 06:47:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jolt2-0004Rl-By for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 06:47:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jolt0-0004Rd-N8 for emacs-devel@gnu.org; Fri, 26 Jun 2020 06:47:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60582) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jolt0-0001vx-15; Fri, 26 Jun 2020 06:47:10 -0400 Received: from [176.228.60.248] (port=1380 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jolsz-0001nn-BF; Fri, 26 Jun 2020 06:47:09 -0400 Date: Fri, 26 Jun 2020 13:46:52 +0300 Message-Id: <837dvurtnn.fsf@gnu.org> From: Eli Zaretskii To: Mike Hamrick Cc: emacs-devel@gnu.org In-Reply-To: (message from Mike Hamrick on Thu, 25 Jun 2020 14:44:11 -0700) Subject: Re: [PATCH] TTY Support for ECMA-48 strike-through graphic rendition References: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 10:47:10 -0000 > From: Mike Hamrick > Date: Thu, 25 Jun 2020 14:44:11 -0700 > > Here is my patch which adds Emacs TTY support for strike-through > rendering, which I personally use in org-mode for done TODO items. In > order for this to work for you, your terminfo database entry needs to have the > "smxx" capability defined, which I believe more recent versions[0] of the > xterm entry have. > > [0]: https://invisible-island.net/xterm/terminfo.html Thanks. The changes look good to me, but: . please add a NEWS item announcing the support for this face attribute . the changes are large enough to require you to sign a copyright assignment for them; if you agree to start your legal paperwork, I will send you the form to fill Thank you for your interest in Emacs. From MAILER-DAEMON Fri Jun 26 09:52:33 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1joomP-00015u-L9 for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 09:52:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39408) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1joomN-00015g-Pb for emacs-devel@gnu.org; Fri, 26 Jun 2020 09:52:31 -0400 Received: from mail-qt1-x82f.google.com ([2607:f8b0:4864:20::82f]:45722) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1joomM-0006sG-AK for emacs-devel@gnu.org; Fri, 26 Jun 2020 09:52:31 -0400 Received: by mail-qt1-x82f.google.com with SMTP id u12so7454477qth.12 for ; Fri, 26 Jun 2020 06:52:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=/tHBsdalkpyk8XjktuV0ixuAOGfLVANVNm0lDIAhouE=; b=EgvB9AydB5es0SV4hh+WwGCEJkgpWH+15tpFhgNjTs5Md9emw9+iCIgze/PeaQhufe z98BISHkxVpfIQn41IyLStwIfoZ2Oy+U7GSlbnmhketfIN25GAZRatbPaFGi2fxYFxl5 b1Cs9jVnNUoFkJ2PNKCYfU5xMSCJaCu3VJIFE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=/tHBsdalkpyk8XjktuV0ixuAOGfLVANVNm0lDIAhouE=; b=F2CC0A00B6Nc6qKOK6JTFckGSlofNhXtblECIZC6whJpcbMSLuXUXoOjvK07CrNQc9 7+GW5BPlJyleiaoVix24qAyBQYjYzzExJ+SUIUCoT7p0MM7hk9efCjBBSkd8enBZ+wlp WSxET3WC5jBpxNCMuvFoqvb06cG7Lm1+M44ypBOJpXQgWl7ZzUPA34xZPOupW0MkkTLb BOP/jYtPhlB5G9Vu2hyG3e6UgYXShMNUBYsOOHuy1JCX9wpHIiNcz+RyuJQRjJQYMdcX CFJ5aPjdqw0iJ8is6gZ6OTlynwN9PIc1f0Cv7kqLml3IgvSrO7Y4gRp/7nrQflY+adsy TBUw== X-Gm-Message-State: AOAM530dkb1s9uTS4LKND0Sden5SMh47gl62MAyhyBdfINcfkLFTFcf7 lGlsoPHkdhaT7okWtEcSl9SJCVIyeZ0BWQ== X-Google-Smtp-Source: ABdhPJxGgAAEbR6PxiySgFKfGuCeSdAMMpmjsf0B6mpaFirl8Wnb9OhQUsZkyGZhGGsgX2Sz510L/g== X-Received: by 2002:aed:2084:: with SMTP id 4mr2913741qtb.43.1593179548763; Fri, 26 Jun 2020 06:52:28 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id 195sm8366490qkl.37.2020.06.26.06.52.27 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Jun 2020 06:52:27 -0700 (PDT) From: Ted Zlatanov To: Eli Zaretskii Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> <83v9jgs43x.fsf@gnu.org> <83sgejs25l.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 26 Jun 2020 13:52:26 +0000 In-Reply-To: <83sgejs25l.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 25 Jun 2020 16:31:02 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::82f; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x82f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 13:52:32 -0000 On Thu, 25 Jun 2020 16:31:02 +0300 Eli Zaretskii wrote: EZ> Perhaps if you describe the difficulties you bumped into in more EZ> detail, we could help you overcome them? AFAICT, you never actually EZ> described the specific problems you had. No, I didn't. I spent several hours investigating and the lack of existing code that did this, plus the complexity of Emacs' display internals, were discouraging. I didn't keep the attempts I made. EZ> prettify-symbols-mode (and static compositions in general) just aren't EZ> the right tool for such jobs; we have much better tools for that, and EZ> they work well for many other features. I'd be very surprised if EZ> those tools couldn't support your use cases. Again, let's consider what I've done as two things: 1) the new minor auth-source-reveal-mode and the prettify-text library/API: that won't change and has no hard dependency on static compositions. 2) the internal implementation of the prettify-text library/API: that's almost exactly like `prettify-symbols-mode', a part of the core. Your major concern there (accessibility and internationalization) is valid but it's equally valid against that existing part of the core. So again, I propose merging as is, and then spending time on a proper reimplementation for both `prettify-symbols-mode' and the prettify-text code. I can work on that reimplementation with guidance from this mailing list. That will help me keep the changes smaller (the branch is getting hard to maintain) and more targeted. Thanks Ted From MAILER-DAEMON Fri Jun 26 10:24:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jopHa-0007kI-54 for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 10:24:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49270) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jopHY-0007ie-MO for emacs-devel@gnu.org; Fri, 26 Jun 2020 10:24:44 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40108) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jopHX-0000ff-U7; Fri, 26 Jun 2020 10:24:43 -0400 Received: from [176.228.60.248] (port=2724 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jopHX-0006LK-7f; Fri, 26 Jun 2020 10:24:43 -0400 Date: Fri, 26 Jun 2020 17:24:26 +0300 Message-Id: <83366hsy5h.fsf@gnu.org> From: Eli Zaretskii To: Ted Zlatanov Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org In-Reply-To: (message from Ted Zlatanov on Fri, 26 Jun 2020 13:52:26 +0000) Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> <83v9jgs43x.fsf@gnu.org> <83sgejs25l.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 14:24:44 -0000 > From: Ted Zlatanov > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > Date: Fri, 26 Jun 2020 13:52:26 +0000 > > EZ> Perhaps if you describe the difficulties you bumped into in more > EZ> detail, we could help you overcome them? AFAICT, you never actually > EZ> described the specific problems you had. > > No, I didn't. I spent several hours investigating and the lack of > existing code that did this, plus the complexity of Emacs' display > internals, were discouraging. I'm not sure what is meant by "did this", but if you are talking about hiding some text and displaying something else in its stead, then Emacs is fill of examples of that. So I'm quite sure it should be possible to do what you want, if you show the code that you tried to use. > 1) the new minor auth-source-reveal-mode and the prettify-text > library/API: that won't change and has no hard dependency on static > compositions. > > 2) the internal implementation of the prettify-text library/API: that's > almost exactly like `prettify-symbols-mode', a part of the core. Your > major concern there (accessibility and internationalization) is valid > but it's equally valid against that existing part of the core. > > So again, I propose merging as is, and then spending time on a proper > reimplementation for both `prettify-symbols-mode' and the prettify-text > code. I can work on that reimplementation with guidance from this > mailing list. That will help me keep the changes smaller (the branch is > getting hard to maintain) and more targeted. I don't mind when will the dependency on static compositions replaced by more appropriate features, as long as we agree that it should be replaced. (OTOH, I don't see why we should rush towards merging.) Also, let's not call the library "prettify-text" or anything to that effect, because that's not what it is supposed to do, it's supposed to hide text by displaying something else in its stead. Thanks. From MAILER-DAEMON Fri Jun 26 10:35:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jopRi-0008FT-Gm for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 10:35:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52446) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jopRe-0008E9-3u for emacs-devel@gnu.org; Fri, 26 Jun 2020 10:35:10 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:41261) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jopRc-0005eZ-Dy for emacs-devel@gnu.org; Fri, 26 Jun 2020 10:35:09 -0400 Received: by mail-pf1-x430.google.com with SMTP id q17so4723778pfu.8 for ; Fri, 26 Jun 2020 07:35:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=gw6N51fHpXIoVEut2m5b0RjOAte56Nn8sXXogWiTPds=; b=t7UYwAZimB708oT+C2/cg6vtScm5lCCuY93RXT0G+4X5sBiejFiSHJ7kGgolHHTXv7 5InxUnDT0yIviH8jWOcEtslHZoUDkqf+TwqUPalXaIk2L4w/32sf76bK6d83E9GtyB4v 10OOuZLYrG5oJ9OKCWpAdFqvjavtanQo9eoIRezjIO7Rffp0EGQOQWRWkuphDYR89Y1i nb0Z0MrTVjLm2WoDVvzzKoTWdXo2Pt1EnDobZFinujFgIu/3aVWXAx0whJaGLP8Hioyc 6Zh+mGG5hyVkohNRBodHd5p1b6TjYnUEh2czdvhX2UMhn3aINMfaGlgI8eixvrDNrgEa gLrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=gw6N51fHpXIoVEut2m5b0RjOAte56Nn8sXXogWiTPds=; b=fwLc6mTWY7PcITfm+j8PMrPgK9R2S+n0u0qaWQelLJJCohHEtVBfEcntU9AXt77UhJ gKD8o4gmVDX2fpZbS8zUocPhPTR661vuMpR5pOkzvgAPzETvW1PHFCbhYC+nPX1LImmD iHNwQQQ26KidxzHmJvRdSSz7I51SXsMDUth2vUfuyBuI6lT2Upgy/DrlWrlM7DvYAA+4 M/oTt7L1c9vnRagWcG5ImHYe33pxFtNit8djMVN8OP/XBUp76L6fOtGT2v8fEJ9yEzI2 MVGrJkybOaLCP1k5Juv7mXt3EhY/3otJn5HBaJ9HB0SbMAUdGXMvGR/U2tUyBcThtvzP z/UA== X-Gm-Message-State: AOAM531MFgeCPuVpQV11CyKgN8ShUh9+DGeZ2VlNdj8gZMZbi9EcAb9Q oUhsrbMtJSD764SCSkx42JYvRQ== X-Google-Smtp-Source: ABdhPJxrVJhx+75uAiGqkhD6lA4G1fJKrwn87b+e/fspg7zjGkkE/j0AytThVhb2Gei+2TgR6rVIkA== X-Received: by 2002:a05:6a00:84e:: with SMTP id q14mr3065728pfk.309.1593182104458; Fri, 26 Jun 2020 07:35:04 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id c207sm7810218pfb.159.2020.06.26.07.35.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jun 2020 07:35:03 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id 9CE0FC2229D; Fri, 26 Jun 2020 07:35:01 -0700 (PDT) From: "T.V Raman" To: Lars Ingebrigtsen Cc: =?gb2312?B?S6imdmlu?= Le Gouguec , Karl Fogel , Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? References: <87r1ubfyq5.fsf@red-bean.com> <87o8pffqm2.fsf@gmail.com> <87y2oamby3.fsf@gnus.org> Date: Fri, 26 Jun 2020 07:35:01 -0700 In-Reply-To: <87y2oamby3.fsf@gnus.org> (Lars Ingebrigtsen's message of "Fri, 26 Jun 2020 11:08:20 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=gb2312 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=raman@google.com; helo=mail-pf1-x430.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: -185 X-Spam_score: -18.6 X-Spam_bar: ------------------ X-Spam_report: (-18.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 14:35:11 -0000 Lars Ingebrigtsen writes: The other function that demonstrates the same issue is read-char-choice and clients that use it --e.g. magit et al then are forced to put up hard to parse prompts of the form [u]rl, [n]ame, ... as an example. Another good example of a hard to use client UI is org's export wizard. Note: If you can see the screen, prompts like the above work once you're familiar with them, with spoken output, they're a complete usability disast= er. -- > K=A8=A6vin Le Gouguec writes: > >> FWIW, back in December[1] Juri mentioned that read-multiple-choice >> should probably be patched to use the minibuffer. > > Yup, I agree. --=20 From MAILER-DAEMON Fri Jun 26 10:39:08 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jopVU-0005Md-9P for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 10:39:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jopVS-0005KS-8u for emacs-devel@gnu.org; Fri, 26 Jun 2020 10:39:06 -0400 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]:38869) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jopVQ-0007ot-LB for emacs-devel@gnu.org; Fri, 26 Jun 2020 10:39:05 -0400 Received: by mail-qt1-x836.google.com with SMTP id z2so7620740qts.5 for ; Fri, 26 Jun 2020 07:39:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lifelogs.com; s=google; h=from:to:cc:subject:organization:references:mail-copies-to:date :in-reply-to:message-id:user-agent:mime-version; bh=z//YDNC3aw7nmu7goh7rc2gPnFonBLLdTTPph3rhtho=; b=ZAEI+bkHl6TVby7Cf5Nvw8VonkfN3W7oQSNS78NureO38JqdZAIqPlTSQXpLkOAORs Dot2WpceuhxAaTVvfz4ytvbk4dRzbwYYaotqp7Os5pxEuPW7nWRZCnvkj+5bNy+7r6+5 x1xuESahUlNaahRplQDCnoHEZibZUQMtDxO0g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:references :mail-copies-to:date:in-reply-to:message-id:user-agent:mime-version; bh=z//YDNC3aw7nmu7goh7rc2gPnFonBLLdTTPph3rhtho=; b=TevBsUzlBRx7tR1I2Ap3Oh46I2L5iH6VXhJDzO6peLuZOfJTfMUM/jOQGLeW/KR/ms VVZMeo9VXIEuvFHR0pcuYhgkACfvj2RP8g7r1kFzCxcyCTXUAuUSsZBbtfPWPI+67cfJ 7nuQkLKQGnju6KmuNMMe0w8xXVUpN9H28qzD7r2bPeeHv5vF5GKpoaohs3+uUe/Eb6Y3 j1cMrTf2oULiJ0fLmk2QlhwUVj9H05tQtb9KBFtitzaC428CGax1Ynpi6yH7bPsTlDOn b+AvE94yDVBymoRX5wHYR2d1iumC2aPiVz4rR6JppqHgOHYeUGzge4QFpmdNk6/XzoqV HdJA== X-Gm-Message-State: AOAM5319AefRhR+WRJGZoqRNAYWSNQiEDKgkF4w0Cn7hyfuq1SaKSOeM abVIrNQCMNWvFp8XKKijF67ZnbaDqwBcPQ== X-Google-Smtp-Source: ABdhPJw6oAYGkL1oAgMRpCmTY/eRo3+m06g/r5Vp54Vn/7gBRXZFhk22X7XpVAFvSdWFOE/NsGkFOQ== X-Received: by 2002:ac8:6a11:: with SMTP id t17mr3235494qtr.272.1593182343359; Fri, 26 Jun 2020 07:39:03 -0700 (PDT) Received: from flea (c-76-28-41-155.hsd1.ma.comcast.net. [76.28.41.155]) by smtp.gmail.com with ESMTPSA id u20sm8514364qtj.39.2020.06.26.07.39.02 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Jun 2020 07:39:02 -0700 (PDT) From: Ted Zlatanov To: Eli Zaretskii Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org Subject: Re: scratch/tzz/auth-source-reveal-mode 4a7c98d 3/3: Create and document auth-source-reveal-mode Organization: =?utf-8?B?0KLQtdC+0LTQvtGAINCX0LvQsNGC0LDQvdC+0LI=?= @ Cienfuegos References: <20200622191653.26453.39420@vcs0.savannah.gnu.org> <20200622191656.2D20920A26@vcs0.savannah.gnu.org> <83a70sts32.fsf@gnu.org> <83v9jgs43x.fsf@gnu.org> <83sgejs25l.fsf@gnu.org> <83366hsy5h.fsf@gnu.org> X-Face: bd.DQ~'29fIs`T_%O%C\g%6jW)yi[zuz6; d4V0`@y-~$#3P_Ng{@m+e4o<4P'#(_GJQ%TT= D}[Ep*b!\e,fBZ'j_+#"Ps?s2!4H2-Y"sx" Mail-Copies-To: never Date: Fri, 26 Jun 2020 14:39:01 +0000 In-Reply-To: <83366hsy5h.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 26 Jun 2020 17:24:26 +0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2607:f8b0:4864:20::836; envelope-from=tzz@lifelogs.com; helo=mail-qt1-x836.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 14:39:06 -0000 On Fri, 26 Jun 2020 17:24:26 +0300 Eli Zaretskii wrote: >> From: Ted Zlatanov >> 1) the new minor auth-source-reveal-mode and the prettify-text >> library/API: that won't change and has no hard dependency on static >> compositions. >> >> 2) the internal implementation of the prettify-text library/API: that's >> almost exactly like `prettify-symbols-mode', a part of the core. Your >> major concern there (accessibility and internationalization) is valid >> but it's equally valid against that existing part of the core. >> >> So again, I propose merging as is, and then spending time on a proper >> reimplementation for both `prettify-symbols-mode' and the prettify-text >> code. I can work on that reimplementation with guidance from this >> mailing list. That will help me keep the changes smaller (the branch is >> getting hard to maintain) and more targeted. EZ> I don't mind when will the dependency on static compositions replaced EZ> by more appropriate features, as long as we agree that it should be EZ> replaced. (OTOH, I don't see why we should rush towards merging.) OK, terrific. That makes it much easier to manage for me. Outside of the internal implementation concerns you have, is there anything else needed? I assume it's too early to modify NEWS and the manual. EZ> Also, let's not call the library "prettify-text" or anything to that EZ> effect, because that's not what it is supposed to do, it's supposed to EZ> hide text by displaying something else in its stead. I can s/prettify-text/something/g, sure. I tried to think of a short expressive name... maybe text-coverup? Let me know what you think. Ted From MAILER-DAEMON Fri Jun 26 13:57:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1josbZ-0002cP-VK for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 13:57:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1josbY-0002cG-Gf for emacs-devel@gnu.org; Fri, 26 Jun 2020 13:57:36 -0400 Received: from newsp.red-bean.com ([45.79.25.59]:41942) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1josbW-0004wF-9x for emacs-devel@gnu.org; Fri, 26 Jun 2020 13:57:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=red-bean.com; s=202005newsp; h=Content-Transfer-Encoding:Content-Type: MIME-Version:Message-ID:In-Reply-To:Date:Reply-To:References:Subject:Cc:To: From:Sender:Content-ID:Content-Description; bh=rsUw3NRNiTnctcyHVhpPM/dty6N/TvTNk79a+oM3TLE=; t=1593194251; x=1594403851; b=HWReqTDOdwb2Trc6SfF8NWbcTXvrZkTdDQtWRhZty1JJQuP66lhaMaoxM/fbOEzN3vdG/EN6Be XwtFP5C0ske8Os6UxZ19UqHc2vjzqCZoEgF16C/pLT0r8mnOP4EJz5udyD9LN2utCM9YUcBFs+C5x jZhSJGDV3ZJZ3evV9Q5Nhp2nrXCVytQMzvKUVVFgcQBVFXbHTCgTxGnLrGIUUWCE/l4EklmUt8vCr wtSiKmtLVwXolZiZUpBNeOOGGyGJ3kzQa0ykwdAuBAYMvLRIDX3nXQJ9lhllcwzn5GQzbl+CSQKCv FTqd2mzIDHGw91WVSdFYndL8Az1tQbmr/EGkw==; Received: from 99-112-125-163.lightspeed.cicril.sbcglobal.net ([99.112.125.163]:40396 helo=floss) by newsp.red-bean.com with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1josbS-0007qf-Dz; Fri, 26 Jun 2020 17:57:30 +0000 From: Karl Fogel To: "T.V Raman" Cc: Lars Ingebrigtsen , =?utf-8?Q?K=C3=A9vin?= Le Gouguec , Emacs Development Subject: Re: Why does `read-multiple-choice' lock user into minbuffer? References: <87r1ubfyq5.fsf@red-bean.com> <87o8pffqm2.fsf@gmail.com> <87y2oamby3.fsf@gnus.org> Reply-To: Karl Fogel Date: Fri, 26 Jun 2020 12:57:28 -0500 In-Reply-To: (T. V. Raman's message of "Fri, 26 Jun 2020 07:35:01 -0700") Message-ID: <87eeq1n20n.fsf@red-bean.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=45.79.25.59; envelope-from=kfogel@red-bean.com; helo=newsp.red-bean.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/26 13:57:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 17:57:36 -0000 On 26 Jun 2020, T.V Raman wrote: >Lars Ingebrigtsen writes: > >The other function that demonstrates the same issue is read-char-choice >and clients that use it --e.g. magit et al then are forced to put up >hard to parse prompts of the form [u]rl, [n]ame, ... as an >example. Another good example of a hard to use client UI is org's export >wizard. > >Note: If you can see the screen, prompts like the above work once you're >familiar with them, with spoken output, they're a complete usability disas= ter. >-- >> K=C3=A9vin Le Gouguec writes: >> >>> FWIW, back in December[1] Juri mentioned that read-multiple-choice >>> should probably be patched to use the minibuffer. >> >> Yup, I agree. Thanks, everyone. I will try to find time to do something on this this wee= kend. I'll post a patch in this thread for review before committing anythi= ng, as (I suspect) this is an unfamiliar area of the code for me. Best regards, -Karl From MAILER-DAEMON Fri Jun 26 15:24:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jotxE-0002Sv-Th for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 15:24:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jotxD-0002Sg-7b for emacs-devel@gnu.org; Fri, 26 Jun 2020 15:24:03 -0400 Received: from eidolon.muppetlabs.com ([207.66.255.52]:48638) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jotxA-0000oV-9k; Fri, 26 Jun 2020 15:24:02 -0400 Received: from mikeh by eidolon.muppetlabs.com with local (Exim 4.82) (envelope-from ) id 1jotwy-0005kK-M2; Fri, 26 Jun 2020 12:23:48 -0700 References: <837dvurtnn.fsf@gnu.org> User-agent: mu4e 1.0; emacs 25.3.1 From: Mike Hamrick To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: [PATCH] TTY Support for ECMA-48 strike-through graphic rendition In-reply-to: <837dvurtnn.fsf@gnu.org> Date: Fri, 26 Jun 2020 12:23:48 -0700 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: mikeh@muppetlabs.com X-SA-Exim-Scanned: No (on eidolon.muppetlabs.com); SAEximRunCond expanded to false Received-SPF: pass client-ip=207.66.255.52; envelope-from=mikeh@muppetlabs.com; helo=eidolon.muppetlabs.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/26 15:23:49 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 19:24:03 -0000 Eli Zaretskii writes: > . please add a NEWS item announcing the support for this face > attribute I've updated my patch to include a NEWS item. I grepped through the manual looking for areas that might need updating, and did not find any. > . the changes are large enough to require you to sign a copyright > assignment for them; if you agree to start your legal paperwork, I > will send you the form to fill I'm ready to start on the forms as soon as I receive them. > Thank you for your interest in Emacs. I will be very pleased to have contributed something, however small, to one of my favorite programs. I hope to be of some use to the project in the future. * term.c: Support strike-through in capable terminals. (no_color_bit): Replace unused NC_INVIS with NC_STRIKE_THROUGH. (turn_on_face): Output via TS_enter_strike_through_mode if available. (turn_off_face): Handle strike-through case. (tty_capable_p, init_tty): Support strike-through. * termchar.h (struct tty_display_info): Add field for strike-through. * xfaces.c (tty_supports_face_attributes_p, realize_tty_face): Handle strike-through case. * dispextern.h: Add TTY_CAP_STRIKE_THROUGH definition. (struct face): Add field tty_strike_through_p. --- etc/NEWS | 7 +++++++ src/dispextern.h | 2 ++ src/term.c | 34 ++++++++++++++++++++-------------- src/termchar.h | 1 + src/xfaces.c | 12 +++++++++++- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index d58a61be21..3b080579ad 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -81,6 +81,13 @@ dimension. Added a new Mozhi scheme. The inapplicable ITRANS scheme is now deprecated. Errors in the Inscript method were corrected. +--- +** Support for the 'strike-through' face attribute on TTY frames. +If your terminal's termcap or terminfo database entry has the 'smxx' +capability defined, Emacs will now emit the prescribed escape +sequences necessary to render faces with the 'strike-through' +attribute on TTY frames. + * Editing Changes in Emacs 28.1 diff --git a/src/dispextern.h b/src/dispextern.h index e1d6eddc41..082a345441 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1744,6 +1744,7 @@ #define FONT_TOO_HIGH(ft) \ bool_bf tty_italic_p : 1; bool_bf tty_underline_p : 1; bool_bf tty_reverse_p : 1; + bool_bf tty_strike_through_p : 1; /* True means that colors of this face may not be freed because they have been copied bitwise from a base face (see @@ -3290,6 +3291,7 @@ #define TTY_CAP_UNDERLINE 0x02 #define TTY_CAP_BOLD 0x04 #define TTY_CAP_DIM 0x08 #define TTY_CAP_ITALIC 0x10 +#define TTY_CAP_STRIKE_THROUGH 0x20 /*********************************************************************** diff --git a/src/term.c b/src/term.c index 5cbb092ad1..bf5e339d2f 100644 --- a/src/term.c +++ b/src/term.c @@ -105,14 +105,14 @@ #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } whil enum no_color_bit { - NC_STANDOUT = 1 << 0, - NC_UNDERLINE = 1 << 1, - NC_REVERSE = 1 << 2, - NC_ITALIC = 1 << 3, - NC_DIM = 1 << 4, - NC_BOLD = 1 << 5, - NC_INVIS = 1 << 6, - NC_PROTECT = 1 << 7 + NC_STANDOUT = 1 << 0, + NC_UNDERLINE = 1 << 1, + NC_REVERSE = 1 << 2, + NC_ITALIC = 1 << 3, + NC_DIM = 1 << 4, + NC_BOLD = 1 << 5, + NC_STRIKE_THROUGH = 1 << 6, + NC_PROTECT = 1 << 7 }; /* internal state */ @@ -1931,6 +1931,9 @@ turn_on_face (struct frame *f, int face_id) if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (tty, NC_UNDERLINE)) OUTPUT1_IF (tty, tty->TS_enter_underline_mode); + if (face->tty_strike_through_p && MAY_USE_WITH_COLORS_P (tty, NC_STRIKE_THROUGH)) + OUTPUT1_IF (tty, tty->TS_enter_strike_through_mode); + if (tty->TN_max_colors > 0) { const char *ts; @@ -1971,7 +1974,8 @@ turn_off_face (struct frame *f, int face_id) if (face->tty_bold_p || face->tty_italic_p || face->tty_reverse_p - || face->tty_underline_p) + || face->tty_underline_p + || face->tty_strike_through_p) { OUTPUT1_IF (tty, tty->TS_exit_attribute_mode); if (strcmp (tty->TS_exit_attribute_mode, tty->TS_end_standout_mode) == 0) @@ -2006,11 +2010,12 @@ #define TTY_CAPABLE_P_TRY(tty, cap, TS, NC_bit) \ if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(tty, NC_bit))) \ return 0; - TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM); - TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode, NC_ITALIC); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode, NC_ITALIC); + TTY_CAPABLE_P_TRY (tty, TTY_CAP_STRIKE_THROUGH, tty->TS_enter_strike_through_mode, NC_STRIKE_THROUGH); /* We can do it! */ return 1; @@ -4124,6 +4129,7 @@ init_tty (const char *name, const char *terminal_type, bool must_succeed) tty->TS_enter_alt_charset_mode = tgetstr ("as", address); tty->TS_exit_alt_charset_mode = tgetstr ("ae", address); tty->TS_exit_attribute_mode = tgetstr ("me", address); + tty->TS_enter_strike_through_mode = tgetstr ("smxx", address); MultiUp (tty) = tgetstr ("UP", address); MultiDown (tty) = tgetstr ("DO", address); diff --git a/src/termchar.h b/src/termchar.h index c96b81913b..a8b3051767 100644 --- a/src/termchar.h +++ b/src/termchar.h @@ -136,6 +136,7 @@ #define EMACS_TERMCHAR_H const char *TS_enter_reverse_mode; /* "mr" -- enter reverse video mode. */ const char *TS_exit_underline_mode; /* "us" -- start underlining. */ const char *TS_enter_underline_mode; /* "ue" -- end underlining. */ + const char *TS_enter_strike_through_mode; /* "smxx" -- turn on strike-through mode. */ /* "as"/"ae" -- start/end alternate character set. Not really supported, yet. */ diff --git a/src/xfaces.c b/src/xfaces.c index c4a4e1c94f..dc6ea5eacf 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -5207,7 +5207,6 @@ tty_supports_face_attributes_p (struct frame *f, || !UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) - || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])) return false; @@ -5272,6 +5271,15 @@ tty_supports_face_attributes_p (struct frame *f, test_caps |= TTY_CAP_INVERSE; } + /* strike through */ + val = attrs[LFACE_STRIKE_THROUGH_INDEX]; + if (!UNSPECIFIEDP (val)) + { + if (face_attr_equal_p (val, def_attrs[LFACE_STRIKE_THROUGH_INDEX])) + return false; /* same as default */ + else + test_caps |= TTY_CAP_STRIKE_THROUGH; + } /* Color testing. */ @@ -6234,6 +6242,8 @@ realize_tty_face (struct face_cache *cache, face->tty_underline_p = true; if (!NILP (attrs[LFACE_INVERSE_INDEX])) face->tty_reverse_p = true; + if (!NILP (attrs[LFACE_STRIKE_THROUGH_INDEX])) + face->tty_strike_through_p = true; /* Map color names to color indices. */ map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted); -- 2.24.0 From MAILER-DAEMON Fri Jun 26 15:38:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jouBM-0005rg-Do for mharc-emacs-devel@gnu.org; Fri, 26 Jun 2020 15:38:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jouBK-0005pb-Se for emacs-devel@gnu.org; Fri, 26 Jun 2020 15:38:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44783) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jouBK-0007Xv-J6; Fri, 26 Jun 2020 15:38:38 -0400 Received: from [176.228.60.248] (port=2297 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jouBJ-00057V-Vq; Fri, 26 Jun 2020 15:38:38 -0400 Date: Fri, 26 Jun 2020 22:38:23 +0300 Message-Id: <83v9jdr51s.fsf@gnu.org> From: Eli Zaretskii To: Mike Hamrick Cc: emacs-devel@gnu.org In-Reply-To: (message from Mike Hamrick on Fri, 26 Jun 2020 12:23:48 -0700) Subject: Re: [PATCH] TTY Support for ECMA-48 strike-through graphic rendition References: <837dvurtnn.fsf@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2020 19:38:39 -0000 > From: Mike Hamrick > Cc: emacs-devel@gnu.org > Date: Fri, 26 Jun 2020 12:23:48 -0700 > > > . the changes are large enough to require you to sign a copyright > > assignment for them; if you agree to start your legal paperwork, I > > will send you the form to fill > > I'm ready to start on the forms as soon as I receive them. Thanks, form sent off-list. From MAILER-DAEMON Sat Jun 27 07:03:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jp8bu-00005x-Nt for mharc-emacs-devel@gnu.org; Sat, 27 Jun 2020 07:03:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jp8Ow-0006wH-IF for emacs-devel@gnu.org; Sat, 27 Jun 2020 06:49:38 -0400 Received: from wout3-smtp.messagingengine.com ([64.147.123.19]:39187) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jp8Os-0000xw-8j for emacs-devel@gnu.org; Sat, 27 Jun 2020 06:49:38 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id 3C24E934 for ; Sat, 27 Jun 2020 06:49:30 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Sat, 27 Jun 2020 06:49:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bittivirhe.fi; h=from:to:subject:date:message-id:mime-version:content-type; s= fm3; bh=0+Vqij68aIpsRPUnywLwb2LCW8MDbxaurp5/fmFtNec=; b=Mmqj15DB +ziR310878fShCiPGTq0rD14PCR01eYUWWL+5OX9yxET5ONHPcZvvkezC+FUjsx1 A5a+BsOZEUiQfHjpTq/c4zgJGfd9P4Xg5Fu7/laTKGTLXXYtwsyGWj/QZTCO+B4C NFWus7BINAsdfAYT5S9UrioFmQiCSmscscbFtjeJ/jfYJ3TZp4vW97i/TWk0OKCl K33lxW2Z/M5KgY3anTPPfoF08caIU7pd7SyhHG9KyRCGbyVeVAlfsGtswDodQlFd KNPx4X5rvXFbu40QcgLMW3z8nbfMmy+Tuf3rb9eGi6XbEsSJ99Gl+0ECTPrZh00P joRisqJ0W6eKng== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=0+Vqij68aIpsRPUnywLwb2LCW8MDb xaurp5/fmFtNec=; b=uI88CSmpSHOedHCjRuFW+PGETcj8Zkdu4oRWAfmzRbxTK /TdaYIVA/6K834ToIUt9qZLd+ZE29vaIvJl0g+yT0N5xwarKY2OBLnRsK/A8lnO9 EZbJYZcS2YxBBsuiBxKr084CDn+4u7glcGtWUJoT8isRknNE9wJJSiggXd7Ax5n1 ApRTj/N7AXHFpml9WyueZMo3N7ukFe5orpFVCwB9W421HUTETHkiVfOtZzNAyAXA ZvNsRRjRwSqM51//lIV5EE4otr2XKV7a8WWYHugeOdBbuEeXUsObwLi3D4imsZyR Mm+PNWd2X9CQ+pYAaoVqnzwTEyVGlW8uqTHOMv/gg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudelfedgfeegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkgggtsehttdertddttd ejnecuhfhrohhmpehtihhmohdrmhihhihrrgessghithhtihhvihhrhhgvrdhfihculdfv ihhmohcuofihhihrmodmnecuggftrfgrthhtvghrnhepgeefhefgffduvdfgtdeuudeutd ekvdejledtveehvdelhedukeegiedvtdegvdegnecukfhppeeluddrudehvddrjeehrddu keeknecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepth himhhordhmhiihrhgrsegsihhtthhivhhirhhhvgdrfhhi X-ME-Proxy: Received: from asteroid.bittivirhe.fi.bittivirhe.fi (91-152-75-188.elisa-laajakaista.fi [91.152.75.188]) by mail.messagingengine.com (Postfix) with ESMTPA id 104573067A1E for ; Sat, 27 Jun 2020 06:49:28 -0400 (EDT) From: timo.myyra@bittivirhe.fi (Timo =?utf-8?Q?Myyr=C3=A4?=) To: emacs-devel@gnu.org Subject: add pthread_set_name_np support Date: Sat, 27 Jun 2020 13:49:24 +0300 Message-ID: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=64.147.123.19; envelope-from=timo.myyra@bittivirhe.fi; helo=wout3-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/27 06:49:30 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Sat, 27 Jun 2020 07:03:01 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Jun 2020 10:49:38 -0000 Hi, While browsing the emacs code I noticed that pthread_set_name_np is not supported by emacs currently. Here's simple diff to add it. I'm not that well versed in autoconf, probably should check pthread_set_name_np within the pthread_setname_np block so both won't get enabled at the same time. Also I'm not sure if name should be padded, quickly looking OpenBSD sources didn't indicate that padding would be required. LLVM code base seems to pad name argument to max 16 chars on FreeBSD and 32 on OpenBSD. Thoughts? Timo diff --git a/configure.ac b/configure.ac index b1b8c846e1..cfc642f72e 100644 --- a/configure.ac +++ b/configure.ac @@ -4187,7 +4187,8 @@ AC_DEFUN sendto recvfrom getsockname getifaddrs freeifaddrs \ gai_strerror sync \ getpwent endpwent getgrent endgrent \ -cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np) +cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np \ +pthread_set_name_np) LIBS=$OLD_LIBS if test "$ac_cv_func_pthread_setname_np" = "yes"; then @@ -4222,6 +4223,23 @@ AC_DEFUN fi fi +if test "$ac_cv_func_pthread_set_name_np" = "yes"; then + AC_CACHE_CHECK( + [whether pthread_set_name_np is supported], + [emacs_cv_pthread_set_name_np], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ][#incule ]], + [[pthread_setname_np (1, "a");]])], + [emacs_cv_pthread_set_name_np=yes], + [emacs_cv_pthread_set_name_np=no])]) + if test "$emacs_cv_pthread_set_name_np" = "yes"; then + AC_DEFINE( + HAVE_PTHREAD_SET_NAME_NP, 1, + [Define to 1 if pthread_set_name_np is supported.]) + fi +fi + dnl No need to check for posix_memalign if aligned_alloc works. AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break]) AC_CHECK_DECLS([aligned_alloc], [], [], [[#include ]]) diff --git a/src/systhread.c b/src/systhread.c index 0d600d6895..3087f18d4c 100644 --- a/src/systhread.c +++ b/src/systhread.c @@ -26,6 +26,10 @@ Copyright (C) 2012-2020 Free Software Foundation, Inc. #include "nsterm.h" #endif +#ifdef HAVE_PTHREAD_SET_NAME_NP +#include "pthread_np.h" +#endif + #ifndef THREADS_ENABLED void @@ -222,6 +226,9 @@ #define TASK_COMM_LEN 16 pthread_setname_np (pthread_self (), p_name); # endif #endif +#ifdef HAVE_PTHREAD_SET_NAME_NP + pthread_set_name_np (pthread_self (), name); +#endif } bool From MAILER-DAEMON Sat Jun 27 07:10:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jp8j0-0001rM-MK for mharc-emacs-devel@gnu.org; Sat, 27 Jun 2020 07:10:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57278) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jp8iz-0001qj-KA for emacs-devel@gnu.org; Sat, 27 Jun 2020 07:10:21 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:55577) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jp8iz-0004P0-7H; Sat, 27 Jun 2020 07:10:21 -0400 Received: from [176.228.60.248] (port=4627 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jp8iy-0005pV-Er; Sat, 27 Jun 2020 07:10:20 -0400 Date: Sat, 27 Jun 2020 14:10:06 +0300 Message-Id: <83r1u03gtt.fsf@gnu.org> From: Eli Zaretskii To: timo.myyra@bittivirhe.fi (Timo =?iso-8859-1?Q?Myyr=E4?=) Cc: emacs-devel@gnu.org In-Reply-To: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> (timo.myyra@bittivirhe.fi) Subject: Re: add pthread_set_name_np support References: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Jun 2020 11:10:21 -0000 > From: timo.myyra@bittivirhe.fi (Timo Myyrä) > Date: Sat, 27 Jun 2020 13:49:24 +0300 > > While browsing the emacs code I noticed that pthread_set_name_np is not > supported by emacs currently. Here's simple diff to add it. > I'm not that well versed in autoconf, probably should check pthread_set_name_np > within the pthread_setname_np block so both won't get enabled at the same time. > > Also I'm not sure if name should be padded, quickly looking OpenBSD sources > didn't indicate that padding would be required. LLVM code base seems to pad name > argument to max 16 chars on FreeBSD and 32 on OpenBSD. > > Thoughts? Thanks, we already have support for pthread_setname_np in what is soon going to be released as Emacs 27.1. Please take a look at the emacs-27 branch of the Emacs Git repository. From MAILER-DAEMON Sat Jun 27 09:42:57 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpB6f-0003ub-Fz for mharc-emacs-devel@gnu.org; Sat, 27 Jun 2020 09:42:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpB6d-0003u1-C4 for emacs-devel@gnu.org; Sat, 27 Jun 2020 09:42:55 -0400 Received: from mail-ot1-x343.google.com ([2607:f8b0:4864:20::343]:47018) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpB6b-0007sX-OZ; Sat, 27 Jun 2020 09:42:55 -0400 Received: by mail-ot1-x343.google.com with SMTP id n24so9010206otr.13; Sat, 27 Jun 2020 06:42:52 -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 :cc:content-transfer-encoding; bh=zaBta/ttC7NKuqOOYZ9Vg8AKfQ0+Fwp6QK51EGCfz08=; b=pUyb9O92R3YnfA9XmwdFdQRbOqIsvaG91Ie03Hp/cKAUI8GmXA1/uiIqiQa+XEzmx0 sYDjMJMsufm9Uc684S1vX6T/2rlZOJNGiEqP4LQuJChTpr2E0R59EADfGbyQ5cZp0202 qWZlRstyUcGz/V5EpJNcEEa1cgXFGzslkOlfS0uIIovVU+xLiukLONU8oLKc0CR6H3kF C8xR9i3bUToZ45ERfVOy3hBv50K62BGvSV5F/NbzqPn4hXid9GS7Cps6y781Kh98+NCy 0yT9sTB1jDsAxTR3FGh1oYZO2joxigG7wF7Vocl5FCWiaC8lhCicWLJAhwOSbyCvJhp9 2rcw== 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:cc:content-transfer-encoding; bh=zaBta/ttC7NKuqOOYZ9Vg8AKfQ0+Fwp6QK51EGCfz08=; b=Zt0vNb89adJlXYQAl4rpcEg4/L1Y2Y+vFoj9w1K9nTY5TXJ1HOclhOpuwrY2WcRdPf a0O9+YJ63zkKYuoD/hnKLPPOXIUtHOe3Jy1XiAfceg7adiH1AA9BYE22PMAOvhXCnrqR 0lISTXfFjDjwQdABZ7JcaUGmcA5q8Z/2MRDKayDbCAmHUk4NdMlRoGdPCZF/GB4iLNLQ LxtEBygHAITXsjpbvdQAnQqFO2KanGExv6iOaVrf/TrfFUrP9UAvXwLj0rXBBZK7flsw aFzN7Lwz0nCVF5T41BOtlIh4L8loViM4JCoZZWmwzJU0xEsEQYKrM0+ljjJmlYDSTFTa DpmQ== X-Gm-Message-State: AOAM530fQLzKt2s2d4nWX2s80CQ7/tTFJN/UkEAb4jwZkWn6r/zSHiip nbKjN2zKwlaxDOTAiTMPjdOuIb5UeanwwkboER5H6y3RUm8= X-Google-Smtp-Source: ABdhPJwasQTglZwszR2SXi68d5nU05mA+b2waAnl5nNIgnTvYDTOhy7yzXoeUCmK/MRh+50jWrQRJAZt3e41MHyBIOA= X-Received: by 2002:a9d:665a:: with SMTP id q26mr6088798otm.174.1593265371322; Sat, 27 Jun 2020 06:42:51 -0700 (PDT) MIME-Version: 1.0 References: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> <83r1u03gtt.fsf@gnu.org> In-Reply-To: <83r1u03gtt.fsf@gnu.org> From: Philipp Stephani Date: Sat, 27 Jun 2020 15:42:40 +0200 Message-ID: Subject: Re: add pthread_set_name_np support To: Eli Zaretskii Cc: =?UTF-8?Q?Timo_Myyr=C3=A4?= , Emacs developers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::343; envelope-from=p.stephani2@gmail.com; helo=mail-ot1-x343.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: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Jun 2020 13:42:55 -0000 Am Sa., 27. Juni 2020 um 13:10 Uhr schrieb Eli Zaretskii : > > > From: timo.myyra@bittivirhe.fi (Timo Myyr=C3=A4) > > Date: Sat, 27 Jun 2020 13:49:24 +0300 > > > > While browsing the emacs code I noticed that pthread_set_name_np is not > > supported by emacs currently. Here's simple diff to add it. > > I'm not that well versed in autoconf, probably should check pthread_set= _name_np > > within the pthread_setname_np block so both won't get enabled at the sa= me time. > > > > Also I'm not sure if name should be padded, quickly looking OpenBSD sou= rces > > didn't indicate that padding would be required. LLVM code base seems to= pad name > > argument to max 16 chars on FreeBSD and 32 on OpenBSD. > > > > Thoughts? > > Thanks, we already have support for pthread_setname_np in what is soon > going to be released as Emacs 27.1. Please take a look at the > emacs-27 branch of the Emacs Git repository. > This is about pthread_set_name_np, not pthread_setname_np (note the undersc= ore). From MAILER-DAEMON Sat Jun 27 10:28:47 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpBp1-0001Hc-D0 for mharc-emacs-devel@gnu.org; Sat, 27 Jun 2020 10:28:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpAJK-0004Uq-Db for emacs-devel@gnu.org; Sat, 27 Jun 2020 08:51:58 -0400 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:55591) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpAJG-0001Eg-6K; Sat, 27 Jun 2020 08:51:58 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id ADF0A5C00C3; Sat, 27 Jun 2020 08:51:52 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Sat, 27 Jun 2020 08:51:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bittivirhe.fi; h=from:to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type:content-transfer-encoding; s=fm3; bh= sA+UaIb7Wt6hk5+/DrF/2BEaqpwGIGj1RuWiVXH3V24=; b=XyB5OpMUO3jKLbbx GVdzJ8+ZDnzaJBjA1wiAOGdgcR2spxRlPvZL1ylvWnuP5PO542sguGWULmGE+hcr fdMtCUMulXSVbmbrLFM1l/O1m8hYOzN3tmD+RzgvoZ8pKyWufdCWoCJwoEJVgLPK Nj7RbVlwKugL8wCTaR8Le8dDO60/35Aq2YeVbr/6vSDVQD0o/WhnEdIMxLdnveER 18isKbQ3n8mQ1IUDXqY+SdBpBWQJgRmgdNDxfkQfUQwFHXoN3LWlqpnoE68eCcSD 44LIlQPiKAuMtlvOf6MtRgyQt7U1XUq8PzJI3Mp8PKeljfRTP0JSw9LGPqnRKjaP SPoe1A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=sA+UaIb7Wt6hk5+/DrF/2BEaqpwGIGj1RuWiVXH3V 24=; b=JWpW6Oyx6SczIlfdBwtRFWosxmqOXmoT5yAuxAHo7ekl5saB9btF3c/JC no+lI5v+6/ClED1vtN5ZOzJCMJTi3cAiaxrR7tw86elubyiLRowPdxY6NwZTGkt6 LQDkaV/SifpckRDfCwhquXgp9Ogold80lrrejISQ3Ab0drn59vAchcqxJi0UznrB UfPnOTT+B+dR4M2igDn1mAYUjmGvHo/WUOkkoWd7IIe1Wq40AYGNG4USTL+OjOYs efgTt0UwTq3C6vyq2Fl4lgtwhhYeu2OglhexEG7c/rSl/L0Cmv5T69jjEvC2wLzB vWdfDv1Ldtcy2191H/uFjPONnZJZw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudelfedgheelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufhfffgjkfgfgggtgfesthhqredttderjeenucfhrhhomhepthhimhho rdhmhiihrhgrsegsihhtthhivhhirhhhvgdrfhhiucdlvfhimhhoucfohiihrhommdenuc ggtffrrghtthgvrhhnpeekleehgfevtddtjeduheetfeetgfekheeileejhfelvdevjedt jeetffethfdtfeenucfkphepledurdduhedvrdejhedrudekkeenucevlhhushhtvghruf hiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehtihhmohdrmhihhihrrgessghi thhtihhvihhrhhgvrdhfih X-ME-Proxy: Received: from asteroid.bittivirhe.fi.bittivirhe.fi (91-152-75-188.elisa-laajakaista.fi [91.152.75.188]) by mail.messagingengine.com (Postfix) with ESMTPA id CAD1F328005E; Sat, 27 Jun 2020 08:51:51 -0400 (EDT) From: timo.myyra@bittivirhe.fi (Timo =?utf-8?Q?Myyr=C3=A4?=) To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: add pthread_set_name_np support References: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> <83r1u03gtt.fsf@gnu.org> Date: Sat, 27 Jun 2020 15:51:50 +0300 In-Reply-To: <83r1u03gtt.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 27 Jun 2020 14:10:06 +0300") Message-ID: <87v9jcpt7d.fsf@asteroid.bittivirhe.fi> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=66.111.4.28; envelope-from=timo.myyra@bittivirhe.fi; helo=out4-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/27 08:51:52 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Sat, 27 Jun 2020 10:28:46 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Jun 2020 12:51:59 -0000 Eli Zaretskii writes: >> From: timo.myyra@bittivirhe.fi (Timo Myyr=C3=A4) >> Date: Sat, 27 Jun 2020 13:49:24 +0300 >>=20 >> While browsing the emacs code I noticed that pthread_set_name_np is not >> supported by emacs currently. Here's simple diff to add it. >> I'm not that well versed in autoconf, probably should check pthread_set_= name_np >> within the pthread_setname_np block so both won't get enabled at the sam= e time. >>=20 >> Also I'm not sure if name should be padded, quickly looking OpenBSD sour= ces >> didn't indicate that padding would be required. LLVM code base seems to = pad name >> argument to max 16 chars on FreeBSD and 32 on OpenBSD. >>=20 >> Thoughts? > > Thanks, we already have support for pthread_setname_np in what is soon > going to be released as Emacs 27.1. Please take a look at the > emacs-27 branch of the Emacs Git repository. Hi, OpenBSD and seems that FreeBSD don't have pthread_setname_np, they use pthread_set_name_np instead. But I got feedback that previous diff had typos so here is a better diff. I included the padding of max process name though it doesn't seem necessary= on OpenBSD. Timo diff --git a/configure.ac b/configure.ac index b1b8c846e1..f198894e02 100644 --- a/configure.ac +++ b/configure.ac @@ -4187,7 +4187,8 @@ AC_DEFUN sendto recvfrom getsockname getifaddrs freeifaddrs \ gai_strerror sync \ getpwent endpwent getgrent endgrent \ -cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np) +cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np \ +pthread_set_name_np) LIBS=3D$OLD_LIBS =20 if test "$ac_cv_func_pthread_setname_np" =3D "yes"; then @@ -4222,6 +4223,23 @@ AC_DEFUN fi fi =20 +if test "$ac_cv_func_pthread_set_name_np" =3D "yes"; then + AC_CACHE_CHECK( + [whether pthread_set_name_np is supported], + [emacs_cv_pthread_set_name_np], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ][#include ]], + [[pthread_setname_np (1, "a");]])], + [emacs_cv_pthread_set_name_np=3Dyes], + [emacs_cv_pthread_set_name_np=3Dno])]) + if test "$emacs_cv_pthread_set_name_np" =3D "yes"; then + AC_DEFINE( + HAVE_PTHREAD_SET_NAME_NP, 1, + [Define to 1 if pthread_set_name_np is supported.]) + fi +fi + dnl No need to check for posix_memalign if aligned_alloc works. AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break]) AC_CHECK_DECLS([aligned_alloc], [], [], [[#include ]]) diff --git a/src/systhread.c b/src/systhread.c index 0d600d6895..57005bacc3 100644 --- a/src/systhread.c +++ b/src/systhread.c @@ -26,6 +26,10 @@ Copyright (C) 2012-2020 Free Software Foundation, Inc. #include "nsterm.h" #endif =20 +#ifdef HAVE_PTHREAD_SET_NAME_NP +#include +#endif + #ifndef THREADS_ENABLED =20 void @@ -206,7 +210,7 @@ sys_thread_equal (sys_thread_t t, sys_thread_t u) void sys_thread_set_name (const char *name) { -#ifdef HAVE_PTHREAD_SETNAME_NP +#if defined HAVE_PTHREAD_SETNAME_NP || defined HAVE_PTHREAD_SET_NAME_NP /* We need to truncate here otherwise pthread_setname_np fails to set the name. TASK_COMM_LEN is what the length is called in the Linux kernel headers (Bug#38632). */ @@ -218,10 +222,13 @@ #define TASK_COMM_LEN 16 pthread_setname_np (p_name); # elif defined HAVE_PTHREAD_SETNAME_NP_3ARG pthread_setname_np (pthread_self (), "%s", p_name); +# elif HAVE_PTHREAD_SET_NAME_NP + pthread_set_name_np (pthread_self (), p_name); # else pthread_setname_np (pthread_self (), p_name); # endif #endif + } =20 bool From MAILER-DAEMON Sat Jun 27 20:56:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpLcc-0008At-Hc for mharc-emacs-devel@gnu.org; Sat, 27 Jun 2020 20:56:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52528) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpLcb-0008Al-Em for emacs-devel@gnu.org; Sat, 27 Jun 2020 20:56:37 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]:33560) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpLcZ-0004cX-8z; Sat, 27 Jun 2020 20:56:37 -0400 Received: by mail-ej1-x62e.google.com with SMTP id n24so12835985ejd.0; Sat, 27 Jun 2020 17:56:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=xyfTrrPCCP9gEYeInBx9MkUSmxiq19oDTxeVYqOXg1k=; b=q0rQ+Uhpr97jsk7LOyuO/V+7wmZGRXMfEf9LI9ywvvCg9S2r6JEHWM2zu6nQQJC8FI WNJWaud4A0HpjkXa4sEw/lKXYOi0W547xHS2cF4pnRWBZBAPznlNfBfu2yIS+E6NeNRv V2d+sPZSH4+bqB/3M/uXJgvMLT4hxwGDEzzLfLFcER02qS3a+1XFcgouWNUNBgXnYBYj mYE+ON23Gag4FLr1KMGIvnCalGoklMXoWw4hI+Npm3Q5qgXtq37pZO9RGCwCqErRiLDg +5Xv1G6CEA5o3haS5vZv6xzqS853wpebtggWThjbmyTIQrZSML3QpP1v7IZrwtMh4/9+ yckQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=xyfTrrPCCP9gEYeInBx9MkUSmxiq19oDTxeVYqOXg1k=; b=WTdteaakd6JwfOJcLtU/MFkVv6o9+eA3cIeka6aFMn/ZhLbX95Ee9ZSXMYGA4Y7hTv TymTeyMtxxyK3yY+iZuZUucpCR3XJp2rw1ANKyDKF913BQ93iqLavP+WYvWN+W6ppAJj ia5OnSL+uWC4KHwKKzgLkUSeGlxX2qRI5zLHfiXqYTyNtkXFEPzQUKaNgdnjY+DUzXij lev2XRoP+hSWO7O10AWKhTtUF7Pned4o9T6wC5t1j5peWg57TDsiPkuEc0Hl7KE5jTtj KeKP0etMf+RbQEriRNGdLvBvBIi5d22naKXLoMIREZnBy/EffSvhxFX/9yJbUhBhwEZS h0/A== X-Gm-Message-State: AOAM533+xpTJriNzr9GzgXJ4lLCSXBu0eoFw3gICRE2zDw1NLpMk9sej s8EY6DeH6WyudO44sZqIZRx1Lwt/ X-Google-Smtp-Source: ABdhPJy3rvw/8pgn0cvE7ZouWZ48cU+9VeXIuNvZ3u5uBn7izrkqdOste+hp1wbi9INiEF+3Ofz2jw== X-Received: by 2002:a17:906:398f:: with SMTP id h15mr743049eje.391.1593305792613; Sat, 27 Jun 2020 17:56:32 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id w8sm24528619eds.41.2020.06.27.17.56.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 27 Jun 2020 17:56:31 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> From: Dmitry Gutov Message-ID: <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> Date: Sun, 28 Jun 2020 03:56:29 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83a70wv4mj.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::62e; envelope-from=raaahh@gmail.com; helo=mail-ej1-x62e.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 00:56:37 -0000 Hi Eli, Thanks for these examples. Commends below. On 21.06.2020 18:08, Eli Zaretskii wrote: >> And project-switch-to-buffer should work with all kinds of projects. >> >> Yes. And one such kind is an ad-hoc collection of files and buffers, >> where only the user knows which ones he/she is interested in and which >> ones he/she isn't. Every IDE I saw supports something like that, so >> we should do that as well, IMO. >> >> I'm curious about those "every IDE". I don't recall such a feature in ones I tried. Perhaps I just didn't use it, of course. > Few examples below: > > Code::Blocks: > https://www.cs.odu.edu/~zeil/FAQs/Public/newIDEProject/index.html#creating-a-project-from-existing-code Going by "Navigate to the directory where you already have your code.", it seems to expect that all project code resides in the directory the user specifies. Although, for some reason or other, it decides to default to not listing existing source code in there in the "sources" section. Perhaps that has to do with build configuration. Note A: Being able to tell "source files" from the rest of the project files is a concern that we haven't looked into yet (nor into its applications). In the default backend, though, I would like to have it work automatically as well (probably by having a configurable list of globs/file extensions/etc). Note B: If you only meant this as an illustration of including certain files in the directory, this setup should be supportable when we add support for whitelisting entries (as opposed to just blacklisting ones, through in project-ignores). That would still require all files to be contained inside the directory that is designated as "project root directory". > Visual Studio: > https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects?view=vs-2019 > Look under "Create a project from existing code files", "Add files > to a solution", "Create empty solutions" "Create a project from existing code files" actually makes VS pick up all the source files in the chosen directory, from what I can tell. In that, it's closer to our project-vc backend than to Code::Blocks. "Add files to a solution" talks about having a file that "applies to multiple projects". Which talks about a case of spreading the current work contents across multiple root directories. Which is what its "solutions" are. As far as how to support a notion similar to solutions best, I'm not sure. Perhaps it indeed would be a separate thing (package/feature/etc), with a file-based configuration, that points at projects included in it. That way, project-vc backend (and others) could be reused for included projects. And we could have solution-level commands (e.g. solution-find-file, which scans across all included projects). I don't understand the level of demand for this among our users, and as such, the necessary features. We're not at the level of complexity that Visual Studio has (WRT build configurations support, etc), and most other text editors I know don't have this feature, so perhaps it's a bit premature. The good news here, however, is that implementing solutions as a separate feature on top of project.el should be relatively simple. And people are welcome to experiment. > QNX: > https://www.qnx.com/developers/docs/6.4.1/ide_en/user_guide/tutorials.html It seems to describe a situation similar to MS VS, except "solutions" are called "workspaces" here. Otherwise, you don't select individual files inside a project to be added. > Netbeans: > https://netbeans.apache.org/kb/docs/cnd/quickstart.html#_adding_existing_files_to_your_project "Creating a Project With Existing Sources" seems to import all source files within a project directory automatically. I wonder what "Adding Existing Files to Your Project" does. Perhaps it copies files from elsewhere into the project directory, if it's not there yet. > TI's Code Composer: > http://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html#adding-or-linking-source-files-to-project The "physically copied" case is obvious. Regarding "When you link a file/folder to a project ...", does it create a symlink, maybe? That wouldn't require a configuration change. To sum up, what I saw here is mostly what I'm already used to anyway: a project is basically a directory with some files in it (the set is generally based on the principle of exclusion, but some subviews can be based on inclusion/whitelist as well), and not an arbitrary set of files from random places on disk. Not to discourage alternative workflows, but this is the concept we should work on supporting well first. I should also note that these other editors have no concept of "buffers", and thus no way to configure their inclusion of exclusion. Thus, any entity that might correspond to our non-file-visiting buffers (such as a search window, or a compilation output window) is likely implicitly considered to just be part of the current project or solution. Please feel free to correct me here. (To be continued, to address the rest of the email.) From MAILER-DAEMON Sun Jun 28 05:38:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpTlm-00037z-LH for mharc-emacs-devel@gnu.org; Sun, 28 Jun 2020 05:38:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpTll-00037t-Ct for emacs-devel@gnu.org; Sun, 28 Jun 2020 05:38:37 -0400 Received: from mail1475c50.megamailservers.eu ([91.136.14.75]:33874 helo=mail118c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpTlj-0006Bb-23 for emacs-devel@gnu.org; Sun, 28 Jun 2020 05:38:37 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1593337096; bh=z5p7P7qoi7aMKESmDXnjnFqiTz3Hdm3FXXApPlcSXzg=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=B9J1lgAJHfmsBfxcm5vJwt1s9Um2anzjNgpshXwpgQKdtHAoPSw8wFwk1bGC+c2Pe n4JO85Ev16PwUHyxpRTK1rBp80N6OjHeWm+2OKWfF+gHpvbG/bloPSGxDWhftyissH EErgAWJi5Kakxfz0FLZ0ODydQlOjPmkUhnYfQOiA= Feedback-ID: mattiase@acm.or Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail118c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 05S9cD23006134; Sun, 28 Jun 2020 09:38:15 +0000 Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\)) Subject: Re: add pthread_set_name_np support From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87sgefdbhj.fsf@asteroid.bittivirhe.fi> Date: Sun, 28 Jun 2020 11:38:13 +0200 Cc: emacs-devel Content-Transfer-Encoding: quoted-printable Message-Id: <9D36A057-904A-470A-8BAD-1ADB62D9712D@acm.org> References: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> <83r1u03gtt.fsf@gnu.org> <87v9jcpt7d.fsf@asteroid.bittivirhe.fi> <87pn9kpenx.fsf@asteroid.bittivirhe.fi> <4992EBB9-BEA9-4629-BCA5-462A252C86DC@acm.org> <87lfk8p88e.fsf@asteroid.bittivirhe.fi> <0C52F7EC-B5D1-493A-97C2-0A94AC9550BC@acm.org> <87sgefdbhj.fsf@asteroid.bittivirhe.fi> To: =?utf-8?Q?Timo_Myyr=C3=A4?= X-Mailer: Apple Mail (2.3445.104.14) X-CTCH-RefID: str=0001.0A782F28.5EF86508.002C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=KaGsTjQD c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=eJNy7ejetlhKfVNSKDoA:9 a=QEXdDO2ut3YA:10 Received-SPF: softfail client-ip=91.136.14.75; envelope-from=mattiase@acm.org; helo=mail118c50.megamailservers.eu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/28 05:38:20 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 09:38:37 -0000 28 juni 2020 kl. 07.07 skrev Timo Myyr=C3=A4 : > OpenBSD removed /proc interface ages ago. I tried to look if htop / = top would > list thread names but I didn't succeed in them.=20 Very well -- I'm not sure if the thread name even makes it into the = kernel, but at that point it's no longer our problem. Thank you, pushed to master. Any serious error in the final patch is = mine. From MAILER-DAEMON Sun Jun 28 10:29:05 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpYIr-0005Mk-Do for mharc-emacs-devel@gnu.org; Sun, 28 Jun 2020 10:29:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpYIp-0005IJ-Nn for emacs-devel@gnu.org; Sun, 28 Jun 2020 10:29:03 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43294) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpYIo-0005TO-QU; Sun, 28 Jun 2020 10:29:02 -0400 Received: from [176.228.60.248] (port=1890 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jpYIm-0007uo-Tj; Sun, 28 Jun 2020 10:29:01 -0400 Date: Sun, 28 Jun 2020 17:28:49 +0300 Message-Id: <83ftaf2rj2.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> (message from Dmitry Gutov on Sun, 28 Jun 2020 03:56:29 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 14:29:04 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Sun, 28 Jun 2020 03:56:29 +0300 > > To sum up, what I saw here is mostly what I'm already used to anyway: a > project is basically a directory with some files in it (the set is > generally based on the principle of exclusion, but some subviews can be > based on inclusion/whitelist as well), and not an arbitrary set of files > from random places on disk. > > Not to discourage alternative workflows, but this is the concept we > should work on supporting well first. What do you mean "first"? why cannot we support both the workflow you are familiar with and the other kind? It isn't like adding such support is exceptionally hard, it just needs to find an alternative to making decisions based on the default-directory alone. And how is your summary above not a "discouragement"? > I should also note that these other editors have no concept of > "buffers", and thus no way to configure their inclusion of exclusion. > Thus, any entity that might correspond to our non-file-visiting buffers > (such as a search window, or a compilation output window) is likely > implicitly considered to just be part of the current project or > solution. Please feel free to correct me here. The problem I raised is twofold: . non file-visiting buffers could have a default-directory outside of the project's root, and still be relevant to the project (I provided a couple of examples) . file-visiting buffers can live in the same directory, but belong to different projects Thus, using default-directory as the sole or the main indicator of belonging to a project limits us in the use cases we can easily support. The examples I provided were in response to your request to show IDE capabilities to add existing files to an empty project, thereby creating a project from existing files and not from a directory. But I have said all this several times already, and at this point it sounds like whatever I say, whichever examples I show, you will still discard them and maintain that using default-directory is a good method, so it doesn't look like this discussion is going anywhere... From MAILER-DAEMON Sun Jun 28 18:14:46 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpfZW-0006e3-Au for mharc-emacs-devel@gnu.org; Sun, 28 Jun 2020 18:14:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpfZU-0006du-Fp for emacs-devel@gnu.org; Sun, 28 Jun 2020 18:14:44 -0400 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]:40512) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpfZS-0002YL-Eu; Sun, 28 Jun 2020 18:14:44 -0400 Received: by mail-ed1-x532.google.com with SMTP id b15so11267738edy.7; Sun, 28 Jun 2020 15:14:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=btgOvY1LPtfkA4nUFI1RRpr4x90fFK5AawyPpW4b6A0=; b=Hm6Tkz9OLkXt7+Osp7gtCUY3/U5r6yqQxC7zyxh+L9itaZzAxH/4XvTpwMh2aCDBw2 +fYVZaehkdi4MtsoJcDKbt/zzXUyl4SfIBRBaMStgYlt3/Zz6b/kG3f8nWtYJLsHQ7ux aYjTjem4KyNZSEyomzNVbf9Tn9d0kkMvX884/1GPoHxyhKO7RMOlrcL46aO2JdRhlD/t mcZ5AJz/1Zytl7azmp2m9tBncwyONdaXGjSOhh5OfGvOGOWpJYrWI3KjUXjS+3t6j7z6 gDtlOs4gJs2eMiEVMgoDyK67Z5kE0/YIyb+BAn2daeC4fMeFv131PeC1aUtOZKInN3v9 cZ8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=btgOvY1LPtfkA4nUFI1RRpr4x90fFK5AawyPpW4b6A0=; b=ZvblxpIn2b8cempGcjb6I6/lTMk58a9qe+p6zqOYihW4yLqXb+xL+PWmfeN1GN8ukK AkkPPJJVGsaipz4OHWNlcwWoUC+n15m2NUvxxKCp9jncAUYr96TEyPnDjKTZTXd/x2MO EXJtKRSM3e/S75+7qmd6a2Q9LfailbXfAd4vNv1keIN61+94zON2SY7TuYZJyrMIzjGq KAnEs0axyO0qEAEUYDHAzs2o9oxzGF6HZIG7R0aujmHpXuMaD+IyS5krNIJXEH5Enndd +YeciUfL3EXTgg6wpTXO45189B9IF4PQvCGoQ/xvUij9YEMMktkZN1d2KvgundMWER+c xwDQ== X-Gm-Message-State: AOAM531b+AIGv5s5LuFc9FmYFpz547y/ifh3YRBEs7nJsDN/LDY9fg0j HSmFMbRSfoBseUAFZlpvCMLCM0V+ X-Google-Smtp-Source: ABdhPJzUIUbQqkNe/5/7ev5PnE7HNOd70p18lxu+BAeqcBDTnIA9R62B50TtcSESceo1K5VlFAY5QA== X-Received: by 2002:aa7:c2c5:: with SMTP id m5mr14307465edp.214.1593382480046; Sun, 28 Jun 2020 15:14:40 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id s23sm18617482ejz.53.2020.06.28.15.14.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 28 Jun 2020 15:14:39 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> From: Dmitry Gutov Message-ID: <363e38af-9a1a-860c-0cb2-a498e8340a36@yandex.ru> Date: Mon, 29 Jun 2020 01:14:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83a70wv4mj.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::532; envelope-from=raaahh@gmail.com; helo=mail-ed1-x532.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 22:14:44 -0000 (Continuing from the previous email.) On 21.06.2020 18:08, Eli Zaretskii wrote: >> I don't want to dismiss the critique outright. Believe it or not, I really do want you, personally, to be happier and more productive as a result of things I do here. I spent several hours today just thinking about this discussion. But our workflows are different, and expectations are different as well, and it seems that your requests tend to conflict with some design choices I have originally made. >> >> >> One of them was to make the VC project a hands-off backend, one that immediately "just works" (or tries to), with a few possibilities for customization through local variables. > > This must be supported, of course. And the backend which treats an > entire directory with its subdirectories as a project must also be > supported. At this point I'm somewhat inclined to merge these two into one. > I'm not arguing for dropping any of these two. I'm arguing for adding > yet another possibility, whereby the files belonging to a project are > selected by the user, whether by marking in a Dired-like directory > display, or by explicitly naming each file to be added, or by > drag-n-drop. Acknowledged. It's a pretty alien UI paradigm for me (micromanaging project configuration like that). Similarly, I never got into using tags tables because that requires to both generate a file, re-generate it manually, and visit it manually as well. I have seen similar sentiments expressed by other users. (Having said that, I hope to return to adding a feature that auto-generates and regenerates tags tables for the current project using etags, one of these days.) As such, I'd rather let someone else implement the project backend with the features you outlined. And if someone decides to take it up, I have a number of thoughts on how it can be better integrated. OTOH, along the lines of Juri's opinion, perhaps your requirements could be satisfied by making use of whitelisting entries in VC project config. But if your projects indeed span multiple directories, the config couldn't reside in some particular root, then that calls for a separate backend. > Based on the discussion of non file-visiting buffers related to a > project, I think there should also be a command that would allow the > user to include/exclude such buffers from the project, because it > doesn't make sense to me to decide up front that any *shell* or *grep* > or whatever buffers are automatically considered to be part of the > project based on something as ephemeral as their default-directory. As I explained, with project-vc you don't "decide" anything like that up front, you just internalize the idea that any buffer with default-directory inside the project's root more or less "belongs" to that "project" (the meanings of both terms are apparently different from how you use that words). So, if you need to switch to said buffer, you make sure to use the appropriate command (either project-switch-buffer, or switch-buffer, or project-switch-project). >> You seem to think (and this is only my guess, of course) that a project is a unit of work. And that whatever files, or activities, are pertinent to your current goal, are a part of that project. Hence, if you do a search anywhere, in any directory, but in pursuit of that goal, the search results are certainly a part of the current project. It is certainly a valid viewpoint, but one that I have never considered before. > > I think it needs to be considered because it's a valid use case and > happens in practice. It would be useful to support it OOTB. I'd like to make this clear: it's not a "use case", it's a point of view. If one considers a project to roughly be a "directory with files in it", and their work spans several such directories, they will think that the work spans several projects, and that's it. > Even if > all the files belonging to a project are in the same directory, the > MO where _all_ (or a vast majority) of the files in a directory belong > to the project is a serious limitation, and we shouldn't impose it on > our users. Granted, one can produce a large enough exclude/ignore > list to leave only a handful of files, but if just 5% or 10% of files > in a directory should be part of a project, excluding the other 90% or > 95% is a nuisance and an unnatural thing to do. This sounds like a use case for whitelist entries. >> So I'm not sure where to go from here. If the latter viewpoint has more supporters, perhaps an new, alternative backend is the way to go. This would be a test of the API, how well it adapts to different goals. > > I'm not talking in terms of backends, I'm talking in terms of > user-facing features. I think we should decide whether a feature such > as the above should be part of what project.el supports, and then > consider how to implement it. I don't see why the implementation > should be very complicated, FWIW, so there's no need to bring the > implementation into the picture, not yet. A naive implementation should be pretty easy. What is difficult is fitting this starkly different kind of interaction and configuration in the current design. Having interactive commands affect project-vc's configuration is a murky idea, having two different ways to configure it. And it would have to add some new variables as well, that affect its behavior. Or some other configuration storage. So ultimately, if you really want this kind of interaction, it would be better to have a separate backend. It could also have a different author than myself, thereby validating the idea that it is, indeed, something that users want. From MAILER-DAEMON Sun Jun 28 18:22:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpfga-0008At-9B for mharc-emacs-devel@gnu.org; Sun, 28 Jun 2020 18:22:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36066) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpfgZ-0008Am-8B for emacs-devel@gnu.org; Sun, 28 Jun 2020 18:22:03 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:36589) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpfgX-0003na-JZ for emacs-devel@gnu.org; Sun, 28 Jun 2020 18:22:02 -0400 X-Originating-IP: 91.129.96.187 Received: from mail.gandi.net (m91-129-96-187.cust.tele2.ee [91.129.96.187]) (Authenticated sender: juri@linkov.net) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 964C5C0002; Sun, 28 Jun 2020 22:21:59 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> Date: Mon, 29 Jun 2020 01:14:34 +0300 In-Reply-To: <87wo3w9ftf.fsf@mail.linkov.net> (Juri Linkov's message of "Thu, 25 Jun 2020 02:58:36 +0300") Message-ID: <87h7uug7n9.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.198; envelope-from=juri@linkov.net; helo=relay6-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/28 18:21:52 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 22:22:03 -0000 >>> 2. to allow adding arguments to the commands `C-x 4 4` and `C-x 5 5`. >> >> That's the problem, indeed. It introduces two different kinds of >> prefixes: those that only apply to "normal commands" and those that also >> apply to (some) prefixes. >> >> I'd rather try and avoid this complexity because I think it will become >> problematic as more prefix commands get written. E.g. the ordering >> problem doesn't only affect `C-u` but all other prefix commands, such as >> `C-x RET c` (there currently aren't others bundled with Emacs, but there >> are others out there). > > Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: > `C-u C-x RET f`. BTW, there is also a new command 'same-window-prefix' to request displaying the next command's buffer in the same window to override the setting that would otherwise display the buffer in another window. But the problem is that currently it's not bound, and I can't find a good mnemonic keybinding. 'C-x 4 0' is already taken. 'C-x 4 1' could be reserved for another command that would delete other windows before displaying the next buffer in the remaining single window. Maybe 'C-x 4 s'? From MAILER-DAEMON Sun Jun 28 18:35:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpftY-00055L-Gu for mharc-emacs-devel@gnu.org; Sun, 28 Jun 2020 18:35:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpftW-000532-JC for emacs-devel@gnu.org; Sun, 28 Jun 2020 18:35:26 -0400 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]:37759) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpftU-0005jJ-Io; Sun, 28 Jun 2020 18:35:26 -0400 Received: by mail-ed1-x52c.google.com with SMTP id g20so11063053edm.4; Sun, 28 Jun 2020 15:35:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=VZcwwg5V4ba45jt8q+ZZreHEYhxVtUYbK83Of9RvaYw=; b=a+wfkaHtIHkjpLZ7fJjOlSOnsdSsmkCYkWqJ6qBKlmvYKzGic+NGAtL4NpXgTmhzge mW0PoTumIc3rG0N/8MYNn5ugPV/Op6el90G6gJFnMwja8vVs43WVsq2/uDH/ij9bFIA9 nf3Dr3xct8OrDrmMt90S5FnaiDAS3ymSSkjXuej6wL6zd/nimcxtZonC6lRVFEtWMVHo 8DOZqcikDt/7SgNlsNTCuceBHnPtxvXePLSOFMpZywVyx3TLL2pZMrIboHQAfd50SjF/ woiUMrOatgiIbJsHFTOZJEsjOi4V/1EPgp+3CVvLCNsYpkY7sZcrUISEoFGTTF9JsRMN ae7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=VZcwwg5V4ba45jt8q+ZZreHEYhxVtUYbK83Of9RvaYw=; b=lM9XeqwD/guibXdfS7y+GCgZspxE2yx/2BIK6KYnAWQ2Z9vprNIpE0/6rPasxj6mLd 4a4LbJbEf+1VOJqsXabIUwEx911sVE36Pl+xkKC1BpHW57j+x2hHpH9lIA8j1Pk8ldBF qkZP7MwF/wslkfYVOY6GEOsNM87470gzrGWKrQPrY+DkpHhOgtYiZShrBIPqr2ZluysF RBgPqTz/5bfFREcKKRKnUdy4RRXuir3ttqceED/mzZ1PiVYE0LviJc07JgN5TcgWROdj Rlf3I/IGhSyBZDGOtDLc9gv4RNKH8vhzjfsnPq01ir+634xWmZHpNguCGZbq/14c4Nhp tebw== X-Gm-Message-State: AOAM531FDB2riy0Pw3LUi2fE5PflnN1GswodHeL1hdQltL5JaDhNi2SA IYA+Q6rAIexrU4PnorW6XHGIIrv8 X-Google-Smtp-Source: ABdhPJwFhlDZAnapiiZ4oS+5D42qJURdOGks1Xf2UBgqkzNKnAtVbfPDdV+b2UogE7bp192tk4HP3g== X-Received: by 2002:aa7:da4c:: with SMTP id w12mr3189597eds.122.1593383722492; Sun, 28 Jun 2020 15:35:22 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id s7sm13453572edr.57.2020.06.28.15.35.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 28 Jun 2020 15:35:21 -0700 (PDT) Sender: DG Subject: Re: master 1e3b0f2: Improve doc strings of project.el To: Eli Zaretskii Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> <83ftaf2rj2.fsf@gnu.org> From: Dmitry Gutov Message-ID: <43a8f8d4-83fb-f012-8e1d-c1a618b0ef59@yandex.ru> Date: Mon, 29 Jun 2020 01:35:19 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83ftaf2rj2.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::52c; envelope-from=raaahh@gmail.com; helo=mail-ed1-x52c.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2020 22:35:26 -0000 On 28.06.2020 17:28, Eli Zaretskii wrote: >> To sum up, what I saw here is mostly what I'm already used to anyway: a >> project is basically a directory with some files in it (the set is >> generally based on the principle of exclusion, but some subviews can be >> based on inclusion/whitelist as well), and not an arbitrary set of files >> from random places on disk. >> >> Not to discourage alternative workflows, but this is the concept we >> should work on supporting well first. > > What do you mean "first"? Meaning, I have to prioritize the tasks in my personal queue. And there are other features I should get to as well. I hope you'll like them either way. > why cannot we support both the workflow you > are familiar with and the other kind? It isn't like adding such > support is exceptionally hard, it just needs to find an alternative to > making decisions based on the default-directory alone. > > And how is your summary above not a "discouragement"? I think it's an objective summary. Because you said that not having this capability keeps Emacs at a severe disadvantage to other editors. So it was clearly a subject that required analysis. On the other hand, I'm open to having another backend that works in a different way, and willing to provide guidance to anyone who wanted to write it. And to try to keep the API sufficiently un-opinionated that both kinds of backends can be used through it successfully, with workarounds kept to a minimum. >> I should also note that these other editors have no concept of >> "buffers", and thus no way to configure their inclusion of exclusion. >> Thus, any entity that might correspond to our non-file-visiting buffers >> (such as a search window, or a compilation output window) is likely >> implicitly considered to just be part of the current project or >> solution. Please feel free to correct me here. > > The problem I raised is twofold: > > . non file-visiting buffers could have a default-directory outside of > the project's root, and still be relevant to the project (I > provided a couple of examples) Buffers are unique to Emacs, so it's hard to take example from other editors. I have to ask, though. The model that other editors use, and the one I'm assuming you do as well (guessing mostly due to how tags' UI works), is that you work only on one "project" (in your sense of the word) at a time. Then, would I be correct to assume that if there exists a Grep buffer in the current session, then it mostly likely belongs to the current "project"? If so, would there be any particular advantage to using project-switch-to-buffer instead of plain switch-to-buffer? > . file-visiting buffers can live in the same directory, but belong to > different projects > > Thus, using default-directory as the sole or the main indicator of > belonging to a project limits us in the use cases we can easily > support. > > The examples I provided were in response to your request to show IDE > capabilities to add existing files to an empty project, thereby > creating a project from existing files and not from a directory. To the best of my understanding, in most of those examples, the files were either copied into said directory as a result of that action, or, if they had already been inside, their status had changed from "other files" to "sources files". The only example that I understood things to be different with any certainty, was Visual Studio's "solutions". > But I have said all this several times already, and at this point it > sounds like whatever I say, whichever examples I show, you will still > discard them and maintain that using default-directory is a good > method, so it doesn't look like this discussion is going anywhere... I never said that it's an ideal method. And I'm sure there can be problematic examples out there. But I wasn't convinced by the example you gave because the reason for why it was bad was based on your understanding on the word "project", and not on mine. Thus, it's hard for me to choose a good solution for the project backend which is based on my understanding of the word "project". From MAILER-DAEMON Mon Jun 29 04:27:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpp8A-0001Ni-1M for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 04:27:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52600) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpp87-0001Ml-LP for emacs-devel@gnu.org; Mon, 29 Jun 2020 04:27:07 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:34214) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpp84-0003sz-Bg; Mon, 29 Jun 2020 04:27:07 -0400 Received: by mail-wr1-x430.google.com with SMTP id f7so12611321wrw.1; Mon, 29 Jun 2020 01:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:gmane-reply-to-list:date:in-reply-to :message-id:mime-version:content-transfer-encoding; bh=7PkM5zuBtJd5HDdoI0SdfF2X9NK7/OmAfCTWdc1zsjQ=; b=OlphHj4PnjRfWWT3Du+ZxHIrzB+LVx/BUTSOgN/JbJgST4l6GUM8g3L4XKReUGMWjy NfyswOzEm3rVP3gyDAmayDnS5/iIc1JuNdFT6V3rdKPUJKwFDkicppxW93zR5Lcpczi1 8WpRmT0rkrGdR3kPrVzvvss+LG0BCUtMp0BBhss3HhOlds85VAZk/LjDdCgbrF8q+RsH Yg18HJOgvONdajR1lC/WfJcMd2UNH1LVwLDQTBLFlHOYjLphuKEdMx7YwoFqx84MutJ7 Whyf2a2QV7ikkdZJ13v69bmHSQPquXl1tdjGhMdb3VF5ErPH/3qwq7HR2PTAEDVvoMYQ YFwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references :gmane-reply-to-list:date:in-reply-to:message-id:mime-version :content-transfer-encoding; bh=7PkM5zuBtJd5HDdoI0SdfF2X9NK7/OmAfCTWdc1zsjQ=; b=B5/2Jn9F3BHWXgrhcVgEkSJiDV7PHzVIZ5foLS9A87/4iW8t6I/Sh2jNKMw9cZs37p fHrdeASaJLCwIXBfYLsFnEwzQdA4fTUCZVn1tIEMpTBk00XtrKzZ+YfyWlRUgAz2zl8z V/VoCs0DKaFMm/O3NbTTvX3YBdZ+nfZkYeXpUqEU8lDGnwdgeJ/4f8UNTevAGADpC6rK oCNgw9McJdAoFWEvxMWBiuz7bbS6e1VwHZD9Y5PuMMzb3O3x3LxMsmCPO+/KJsV5pJn4 cK9rBhxb/9rZbfus2Ztnyk5pKdKrS7rPLBp6cEXKWHNkvM3EP3L3SP42ooHrsjyES1UA WdHQ== X-Gm-Message-State: AOAM532GXxQDl93q0E80xNBPs4224KeakI+4zUJa/Gd4ka2f9RFUiU6S CAI206W4TwdW93xwoYb6G33nmTTI X-Google-Smtp-Source: ABdhPJyMkHqdSta5brt2KUhzYelMkYXqK7vzPPPPe6THVpnPOqBYK2HEWQMZU7JumEEW2tYSlJtWIw== X-Received: by 2002:a5d:4611:: with SMTP id t17mr15122102wrq.243.1593419221693; Mon, 29 Jun 2020 01:27:01 -0700 (PDT) Received: from rpluim-mac ([2a01:e34:ecfc:a860:9051:afee:9580:8319]) by smtp.gmail.com with ESMTPSA id e17sm12111801wrr.88.2020.06.29.01.27.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 01:27:00 -0700 (PDT) From: Robert Pluim To: timo.myyra@bittivirhe.fi (Timo =?utf-8?Q?Myyr=C3=A4?=) Cc: Eli Zaretskii , emacs-devel@gnu.org Subject: Re: add pthread_set_name_np support References: <875zbcrdfv.fsf@asteroid.bittivirhe.fi> <83r1u03gtt.fsf@gnu.org> <87v9jcpt7d.fsf@asteroid.bittivirhe.fi> Gmane-Reply-To-List: yes Date: Mon, 29 Jun 2020 10:26:59 +0200 In-Reply-To: <87v9jcpt7d.fsf@asteroid.bittivirhe.fi> ("Timo =?utf-8?Q?Myyr?= =?utf-8?Q?=C3=A4=22's?= message of "Sat, 27 Jun 2020 15:51:50 +0300") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=rpluim@gmail.com; helo=mail-wr1-x430.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 08:27:07 -0000 >>>>> On Sat, 27 Jun 2020 15:51:50 +0300, timo.myyra@bittivirhe.fi (Timo My= yr=C3=A4) said: Timo> diff --git a/configure.ac b/configure.ac Timo> index b1b8c846e1..f198894e02 100644 Timo> --- a/configure.ac Timo> +++ b/configure.ac Timo> @@ -4187,7 +4187,8 @@ AC_DEFUN Timo> sendto recvfrom getsockname getifaddrs freeifaddrs \ Timo> gai_strerror sync \ Timo> getpwent endpwent getgrent endgrent \ Timo> -cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np) Timo> +cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np \ Timo> +pthread_set_name_np) Timo> LIBS=3D$OLD_LIBS =20 Timo> if test "$ac_cv_func_pthread_setname_np" =3D "yes"; then Timo> @@ -4222,6 +4223,23 @@ AC_DEFUN Timo> fi Timo> fi I=CA=BCm confused; why do you need the explicit check for pthread_set_name_np when the AC_CHECK_FUNCS call above already checks for it (and sets HAVE_PTHREAD_SET_NAME_NP if successful). Timo> +if test "$ac_cv_func_pthread_set_name_np" =3D "yes"; then Timo> + AC_CACHE_CHECK( Timo> + [whether pthread_set_name_np is supported], Timo> + [emacs_cv_pthread_set_name_np], Timo> + [AC_COMPILE_IFELSE( Timo> + [AC_LANG_PROGRAM( Timo> + [[#include ][#include ]], Timo> + [[pthread_setname_np (1, "a");]])], Timo> + [emacs_cv_pthread_set_name_np=3Dyes], Timo> + [emacs_cv_pthread_set_name_np=3Dno])]) Timo> + if test "$emacs_cv_pthread_set_name_np" =3D "yes"; then Timo> + AC_DEFINE( Timo> + HAVE_PTHREAD_SET_NAME_NP, 1, Timo> + [Define to 1 if pthread_set_name_np is supported.]) Timo> + fi Timo> +fi Timo> + From MAILER-DAEMON Mon Jun 29 07:25:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpruW-0004Ir-Gg for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 07:25:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpruU-0004En-EC for emacs-devel@gnu.org; Mon, 29 Jun 2020 07:25:14 -0400 Received: from ciao.gmane.io ([159.69.161.202]:56522) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpruS-0002Yf-NC for emacs-devel@gnu.org; Mon, 29 Jun 2020 07:25:14 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1jpruO-000Tbn-Qi for emacs-devel@gnu.org; Mon, 29 Jun 2020 13:25:08 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-devel@gnu.org From: David Kastrup Subject: Emacs doesn't compile -- what am I missing? Date: Mon, 29 Jun 2020 13:25:03 +0200 Organization: Organization?!? Message-ID: <87o8p2qflc.fsf@fencepost.gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cancel-Lock: sha1:bGLEckZq9cgo4ZdC8EOyKKHaOkE= X-Face: 2FEFf>]>q>2iw=B6, xrUubRI>pR&Ml9=ao@P@i)L:\urd*t9M~y1^:+Y]'C0~{mAl`oQuAl \!3KEIp?*w`|bL5qr,H)LFO6Q=qx~iH4DN; i"; /yuIsqbLLCh/!U#X[S~(5eZ41to5f%E@'ELIi$t^ Vc\LWP@J5p^rst0+('>Er0=^1{]M9!p?&:\z]|;&=NP3AhB!B_bi^]Pfkw Received-SPF: pass client-ip=159.69.161.202; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 07:25:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 11:25:14 -0000 I get In file included from ../../emacs/src/xfaces.c:225: ../../emacs/src/xfaces.c:922:8: error: ‘Fcolor_values_from_color_spec’ undeclared here (not in a function); did you mean ‘Scolor_values_from_color_spec’? 922 | Fcolor_values_from_color_spec, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../emacs/src/lisp.h:3066:26: note: in definition of macro ‘DEFUN’ 3066 | { .a ## maxargs = fnname }, \ | ^~~~~~ ../../emacs/src/xfaces.c:922:8: warning: no previous prototype for ‘Fcolor_values_from_color_spec’ [-Wmissing-prototypes] 922 | Fcolor_values_from_color_spec, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../emacs/src/lisp.h:3068:16: note: in definition of macro ‘DEFUN’ 3068 | Lisp_Object fnname | ^~~~~~ Which would suggest a problem with commit 30ff2433b16dba2c4e36c6eda6f808c6f2cb46d1 Author: Eli Zaretskii Date: Mon Jun 22 18:32:01 2020 +0300 Minor improvements as followup to recent RGB string-parsing change * src/xfaces.c (Finternal_color_values_from_color_spec): Rename to... (Fcolor_values_from_color_spec): ...this. Callers changed. Rename the argument to SPEC and improve the doc string. (parse_color_spec, parse_float_color_comp, parse_hex_color_comp): Improve commentary. (parse_color_spec): Rename the argument S to SPEC. * etc/NEWS: Mention 'color-values-from-color-spec'. But it seems extremely unlikely that a problem causing compilation to fail would persist for a week. Ideas? -- David Kastrup From MAILER-DAEMON Mon Jun 29 07:39:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jps8S-0005Kg-Po for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 07:39:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jps8R-0005KT-ON for emacs-devel@gnu.org; Mon, 29 Jun 2020 07:39:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:57830) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jps8R-0004n7-EV for emacs-devel@gnu.org; Mon, 29 Jun 2020 07:39:39 -0400 Received: from [109.253.170.114] (port=42619 helo=[10.128.245.141]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jps8P-00014R-Gm; Mon, 29 Jun 2020 07:39:38 -0400 Date: Mon, 29 Jun 2020 14:39:33 +0300 User-Agent: K-9 Mail for Android In-Reply-To: <87o8p2qflc.fsf@fencepost.gnu.org> References: <87o8p2qflc.fsf@fencepost.gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: Emacs doesn't compile -- what am I missing? To: emacs-devel@gnu.org,David Kastrup From: Eli Zaretskii Message-ID: <3155E787-DB97-4884-938B-3922EE90BBDB@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 11:39:40 -0000 On June 29, 2020 2:25:03 PM GMT+03:00, David Kastrup wrote: >=20 > I get >=20 > In file included from =2E=2E/=2E=2E/emacs/src/xfaces=2Ec:225: > =2E=2E/=2E=2E/emacs/src/xfaces=2Ec:922:8: error: =E2=80=98Fcolor_values_= from_color_spec=E2=80=99 > undeclared here (not in a function); did you mean > =E2=80=98Scolor_values_from_color_spec=E2=80=99? > 922 | Fcolor_values_from_color_spec, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > =2E=2E/=2E=2E/emacs/src/lisp=2Eh:3066:26: note: in definition of macro = =E2=80=98DEFUN=E2=80=99 > 3066 | { =2Ea ## maxargs =3D fnname }, \ > | ^~~~~~ > =2E=2E/=2E=2E/emacs/src/xfaces=2Ec:922:8: warning: no previous prototype= for > =E2=80=98Fcolor_values_from_color_spec=E2=80=99 [-Wmissing-prototypes] > 922 | Fcolor_values_from_color_spec, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > =2E=2E/=2E=2E/emacs/src/lisp=2Eh:3068:16: note: in definition of macro = =E2=80=98DEFUN=E2=80=99 > 3068 | Lisp_Object fnname > | ^~~~~~ >=20 > Which would suggest a problem with >=20 > commit 30ff2433b16dba2c4e36c6eda6f808c6f2cb46d1 > Author: Eli Zaretskii > Date: Mon Jun 22 18:32:01 2020 +0300 >=20 > Minor improvements as followup to recent RGB string-parsing change > =20 > * src/xfaces=2Ec (Finternal_color_values_from_color_spec): Rename to=2E= =2E=2E > (Fcolor_values_from_color_spec): =2E=2E=2Ethis=2E Callers changed= =2E > Rename the argument to SPEC and improve the doc string=2E > (parse_color_spec, parse_float_color_comp, parse_hex_color_comp): > Improve commentary=2E > (parse_color_spec): Rename the argument S to SPEC=2E > =20 > * etc/NEWS: Mention 'color-values-from-color-spec'=2E >=20 > But it seems extremely unlikely that a problem causing compilation to > fail would persist for a week=2E >=20 > Ideas? Some snafu with globals=2Eh? From MAILER-DAEMON Mon Jun 29 08:06:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpsY2-0001ip-M5 for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 08:06:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpsY1-0001hZ-CV for emacs-devel@gnu.org; Mon, 29 Jun 2020 08:06:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58229) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpsY1-0000xZ-01 for emacs-devel@gnu.org; Mon, 29 Jun 2020 08:06:05 -0400 Received: from x2f30a8f.dyn.telefonica.de ([2.243.10.143]:60272 helo=lola) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jpsXp-0007g6-4L; Mon, 29 Jun 2020 08:05:56 -0400 From: David Kastrup To: Eli Zaretskii Cc: emacs-devel@gnu.org Subject: Re: Emacs doesn't compile -- what am I missing? References: <87o8p2qflc.fsf@fencepost.gnu.org> <3155E787-DB97-4884-938B-3922EE90BBDB@gnu.org> Date: Mon, 29 Jun 2020 14:05:50 +0200 In-Reply-To: <3155E787-DB97-4884-938B-3922EE90BBDB@gnu.org> (Eli Zaretskii's message of "Mon, 29 Jun 2020 14:39:33 +0300") Message-ID: <87h7uuqdpd.fsf@fencepost.gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 12:06:05 -0000 Eli Zaretskii writes: > On June 29, 2020 2:25:03 PM GMT+03:00, David Kastrup wrote: >>=20 >> I get >>=20 >> In file included from ../../emacs/src/xfaces.c:225: >> ../../emacs/src/xfaces.c:922:8: error: =E2=80=98Fcolor_values_from_color= _spec=E2=80=99 >> undeclared here (not in a function); did you mean >> =E2=80=98Scolor_values_from_color_spec=E2=80=99? >> 922 | Fcolor_values_from_color_spec, >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> ../../emacs/src/lisp.h:3066:26: note: in definition of macro =E2=80=98DE= FUN=E2=80=99 >> 3066 | { .a ## maxargs =3D fnname }, \ >> | ^~~~~~ >> ../../emacs/src/xfaces.c:922:8: warning: no previous prototype for >> =E2=80=98Fcolor_values_from_color_spec=E2=80=99 [-Wmissing-prototypes] >> 922 | Fcolor_values_from_color_spec, >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> ../../emacs/src/lisp.h:3068:16: note: in definition of macro =E2=80=98DE= FUN=E2=80=99 >> 3068 | Lisp_Object fnname >> | ^~~~~~ >>=20 >> Which would suggest a problem with >>=20 >> commit 30ff2433b16dba2c4e36c6eda6f808c6f2cb46d1 >> Author: Eli Zaretskii >> Date: Mon Jun 22 18:32:01 2020 +0300 >>=20 >> Minor improvements as followup to recent RGB string-parsing change >>=20=20=20=20=20 >> * src/xfaces.c (Finternal_color_values_from_color_spec): Rename to... >> (Fcolor_values_from_color_spec): ...this. Callers changed. >> Rename the argument to SPEC and improve the doc string. >> (parse_color_spec, parse_float_color_comp, parse_hex_color_comp): >> Improve commentary. >> (parse_color_spec): Rename the argument S to SPEC. >>=20=20=20=20=20 >> * etc/NEWS: Mention 'color-values-from-color-spec'. >>=20 >> But it seems extremely unlikely that a problem causing compilation to >> fail would persist for a week. >>=20 >> Ideas? > > Some snafu with globals.h? Looks like a mixture of configuration for in-place compilation and separate compilation directory. make distclean in the source directory finally got this cleaned up. Sorry for the noise, and thanks for the feedback. --=20 David Kastrup From MAILER-DAEMON Mon Jun 29 08:30:14 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpsvO-00061g-N4 for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 08:30:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40272) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpsvM-00060Z-Im for emacs-devel@gnu.org; Mon, 29 Jun 2020 08:30:12 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:45935) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpsvK-0005Dk-9j for emacs-devel@gnu.org; Mon, 29 Jun 2020 08:30:11 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 12A1B44097E; Mon, 29 Jun 2020 08:30:09 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id E7E1B44097C; Mon, 29 Jun 2020 08:30:06 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593433806; bh=9OAvYbuLn5HwDMTXHzR7FiImJRWBRbISaX0lCTT8l+k=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=GXQ5fM03mIyiVQyUgATVggqz0JBAlDIjbA/ro+rOBUEljuY8AxGyau0K5QQT8TiBa 63z/GZwKi7MIB+tnyAkSiCELMH6b/oAG2DHV89z6LSkQXcJiICj4bJzBtH6p4LeM5/ MlZRAeEOINzOSuKTGR2TtwoRq+dctwInoyvvf2dlWr5ZBB4MrMSFx8cC9f1S+iYTg5 /DBq6evJHe6S+7FZA4awHw5SwcReNh09Ou5eosJEY+EtfxNvBrqalhjnUDGQ3q3Yx6 RAV5IfawbyNl1bsSC5HZiNoLMSrduOI3yCVGHY6oe7UvfmJl9IvTIdSRh+ej9ClXwp S9fXrNGgBC+NQ== Received: from ceviche (xplr-96-63-48-187.xplornet.com [96.63.48.187]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F3EEF120783; Mon, 29 Jun 2020 08:30:02 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> <87h7uug7n9.fsf@mail.linkov.net> Date: Mon, 29 Jun 2020 08:29:53 -0400 In-Reply-To: <87h7uug7n9.fsf@mail.linkov.net> (Juri Linkov's message of "Mon, 29 Jun 2020 01:14:34 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.167 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 08:30:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 12:30:12 -0000 >>> I'd rather try and avoid this complexity because I think it will become >>> problematic as more prefix commands get written. E.g. the ordering >>> problem doesn't only affect `C-u` but all other prefix commands, such as >>> `C-x RET c` (there currently aren't others bundled with Emacs, but there >>> are others out there). >> >> Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: >> `C-u C-x RET f`. Not sure how that relates to the previous paragraph. > BTW, there is also a new command 'same-window-prefix' to request > displaying the next command's buffer in the same window to override > the setting that would otherwise display the buffer in another window. Yes, I like it (it's been on my todo list for other-frame-window). > But the problem is that currently it's not bound, and I can't find > a good mnemonic keybinding. Same problem here. It's part of the low motivation to work on that todo item ;-) > 'C-x 4 0' is already taken. > 'C-x 4 1' could be reserved for another command that would delete other windows > before displaying the next buffer in the remaining single window. > > Maybe 'C-x 4 s'? Since I use `C-x 4` instead of `C-x 4 4`, I'd say that `C-x 1` would be the "natural" choice, but that's also already taken :-( Stefan From MAILER-DAEMON Mon Jun 29 09:38:26 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jptzO-0008LT-91 for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 09:38:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59664) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jptzM-0008JI-FL for emacs-devel@gnu.org; Mon, 29 Jun 2020 09:38:24 -0400 Received: from smtprelay05.ispgateway.de ([80.67.18.28]:64976) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jptzJ-0008KU-JZ for emacs-devel@gnu.org; Mon, 29 Jun 2020 09:38:23 -0400 Received: from [46.244.198.48] (helo=condition-alpha.com) by smtprelay05.ispgateway.de with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) (envelope-from ) id 1jptzE-0003ry-5L; Mon, 29 Jun 2020 15:38:16 +0200 Message-Id: <3ca5fc3fc2b5dc202456688383a20a77@condition-alpha.com> From: Alexander Adolf To: Thomas Fitzsimmons Cc: Jean-Christophe Helary , emacs-devel@gnu.org Subject: Re: [Proposal] New EUDC backend for macOS address book In-Reply-To: <866ca4b62cf30015aa28bfb9a2566dff@condition-alpha.com> References: <8da7df5281e91d8a351f97c0837d79b7@condition-alpha.com> <298df6a619aa45393b0ae9250123faef@condition-alpha.com> <866ca4b62cf30015aa28bfb9a2566dff@condition-alpha.com> Date: Mon, 29 Jun 2020 15:38:15 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Df-Sender: YWxleGFuZGVyLmFkb2xmQGNvbmRpdGlvbi1hbHBoYS5jb20= Received-SPF: pass client-ip=80.67.18.28; envelope-from=alexander.adolf@condition-alpha.com; helo=smtprelay05.ispgateway.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 09:38:17 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 13:38:24 -0000 ping? Alexander Adolf writes: > Hello Thomas, Emacs Developers, > > Thomas Fitzsimmons writes: > >>>> [...] >>>> You can make the changes to eudc.texi, create a patch, then reply to >>>> this message with the patch attached. >>>> [...] > > Apologies for the delay! Please kindly find the patch attached. > > What I did: > > =E2=80=A2 Under "Overview", I added a new @section, paralleling what alre= ady > existed for BBDB. > > =E2=80=A2 Since the backend is not enabled by default, I have also added = a new > @section under "Installation". That new section, besides telling how > to enable the macOS Contacts backend, also describes the two available > backends, and how they differ. The text also deprecates the > pre-existing eudcb-mab.el, and recommends the new > eudcb-macos-contacts.el for new configurations. > > > Looking forward to your thoughts, > > --alexander > > diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi > index 66867cbc58..0cea3126a0 100644 > --- a/doc/misc/eudc.texi > +++ b/doc/misc/eudc.texi > @@ -85,6 +85,8 @@ LDAP, Lightweight Directory Access Protocol > CCSO PH/QI > @item > BBDB, Big Brother's Insidious Database > +@item > +macOS Contacts > @end itemize >=20=20 > The main features of the EUDC interface are: > @@ -110,6 +112,7 @@ Interface to BBDB to let you insert server records in= to your own BBDB database > * LDAP:: What is LDAP ? > * CCSO PH/QI:: What is CCSO, PH, QI ? > * BBDB:: What is BBDB ? > +* macOS Contacts:: What is macOS Contacts ? > @end menu >=20=20 >=20=20 > @@ -186,6 +189,31 @@ performing queries on multiple servers. > EUDC also offers a means to insert results from directory queries into > your own local BBDB (@pxref{Creating BBDB Records}) >=20=20 > + > +@node macOS Contacts > +@section macOS Contacts > + > +@url{https://support.apple.com/guide/contacts/welcome/mac,, macOS > +Contacts} is the rolodex-like application that ships with the macOS > +operating system@footnote{Apple have changed the names of their > +operating system and some applications over time. macOS used to be > +called Mac OS X in the past, and the Contacts application was > +previously called Address Book.}. It is tightly integrated with the > +other Apple applications (Mail, Calendar, etc.), and can synchronise > +contacts information between Apple devices via CardDAV servers (such > +as e.g. iCloud). > + > +EUDC considers macOS Contacts as a directory server back end just like > +LDAP or PH/QI servers, though the macOS Contacts application always > +resides locally on your machine. The point in this is not to offer an > +alternate way to query your macOS Contacts database (the macOS > +Contacts application itself provides much more flexible ways to do > +that), but rather to offer an interface to your local directory that > +is consistent with the interface to external directories (LDAP, > +PH/QI). This is particularly interesting when performing queries on > +multiple servers. > + > + > @node Installation > @chapter Installation >=20=20 > @@ -214,6 +242,7 @@ email composition buffers (@pxref{Inline Query Expans= ion}) >=20=20 > @menu > * LDAP Configuration:: EUDC needs external support for LDAP > +* macOS Contacts Configuration:: Enable the macOS Contacts backend > @end menu >=20=20 > @node LDAP Configuration > @@ -339,6 +368,42 @@ and the @file{.emacs} expressions become: > (customize-set-variable 'ldap-host-parameters-alist '(("" auth-source t)= )) > @end lisp >=20=20 > + > +@node macOS Contacts Configuration > +@section macOS Contacts Configuration > + > +macOS Contacts support is added by means of @file{eudcb-mab.el}, or > +@file{eudcb-macos-contacts.el} which are part of Emacs. > + > +@file{eudcb-mab.el} reverse engineers the format of the database file > +used by the macOS Contacts app, and accesses its contents directly. > +While this may promise some performance advantages, it comes at the > +cost of using an undocumented interface. Hence, users of > +@file{eudcb-mab.el} are recommended to double check the compatibility > +of @file{eudcb-mab.el} before upgrading to a new version of macOS. > +@file{eudcb-mab.el} is retained for backwards compatibility with > +existing configurations, and may be removed in a future release. > + > +@file{eudcb-macos-contacts.el} uses the public scripting interfaces > +offered by the Contacts app via the macOS > +@url{https://developer.apple.com/library/archive/documentation/AppleScri= pt/Conceptual/AppleScriptX/Concepts/osa.html,, > +Open Scripting Architecture (OSA)}. To accomplish this, > +@file{eudcb-macos-contacts.el} uses an external command line utility > +named > +@url{https://developer.apple.com/library/archive/documentation/OpenSourc= e/Conceptual/ShellScripting/AdvancedTechniques/AdvancedTechniques.html#//ap= ple_ref/doc/uid/TP40004268-TP40003521-SW44,, > +osascript}, which is included with all macOS versions since 10.0 > +(which was released 2001). @file{eudcb-macos-contacts.el} is hence > +recommended for all new configurations. > + > +To enable a macOS Contacts backend, first `require' the respective > +library to load it, and then set the `eudc-server' to localhost in > +your init file: > +@lisp > +(require 'eudcb-macos-contacts) > +(eudc-macos-contacts-set-server "localhost") > +@end lisp > + > + > @node Usage > @chapter Usage >=20=20 From MAILER-DAEMON Mon Jun 29 10:32:48 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpuq0-0004Fb-Gy for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 10:32:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpupy-0004DE-P1 for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:32:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60373) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpupx-0008Iy-AY; Mon, 29 Jun 2020 10:32:45 -0400 Received: from [176.228.60.248] (port=3538 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jpupn-0000ol-Nh; Mon, 29 Jun 2020 10:32:44 -0400 Date: Mon, 29 Jun 2020 17:32:24 +0300 Message-Id: <83pn9i0wp3.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <363e38af-9a1a-860c-0cb2-a498e8340a36@yandex.ru> (message from Dmitry Gutov on Mon, 29 Jun 2020 01:14:36 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <363e38af-9a1a-860c-0cb2-a498e8340a36@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 14:32:47 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Mon, 29 Jun 2020 01:14:36 +0300 > > As such, I'd rather let someone else implement the project backend with > the features you outlined. And if someone decides to take it up, I have > a number of thoughts on how it can be better integrated. Implementing this, and the priority assigned to doing so, is not the main issue that bothered me, and caused me to start this thread. This is a tangent; see below. > OTOH, along the lines of Juri's opinion, perhaps your requirements could > be satisfied by making use of whitelisting entries in VC project config. Whitelisting is a nuisance when you need to whitelist too many files; blacklisting is a nuisance when you need to blacklist too many files. Other than that, both are fine. But again, that's not the issue here. > > I'm not talking in terms of backends, I'm talking in terms of > > user-facing features. I think we should decide whether a feature such > > as the above should be part of what project.el supports, and then > > consider how to implement it. I don't see why the implementation > > should be very complicated, FWIW, so there's no need to bring the > > implementation into the picture, not yet. > > A naive implementation should be pretty easy. What is difficult is > fitting this starkly different kind of interaction and configuration in > the current design. If this use case doesn't fit the current design, IMO we should rethink the current design. We are just beginning to implement the user-level features of project.el, so we should make sure adding other reasonable use cases will be as easy as we can envision today. _That_ is the problem that bothers me the most: that we already have restrictions on which use cases can and cannot be supported, although we barely started. > So ultimately, if you really want this kind of interaction, it would be > better to have a separate backend. It could also have a different author > than myself, thereby validating the idea that it is, indeed, something > that users want. We are constantly losing focus in this discussion, at least from my POV. The main reason I started this is that I think using default-directory for the decision which files/buffers belong to a project is not the best idea. Everything else I said, every example I brought up, was to show why we should rethink that design decision, and do so soon, not in some uncertain future. This is the only issue that really bothers me. I didn't ask you to implement the "project from existing files" feature, let alone change your priorities, I didn't request any new commands or features, I just wanted to show how this single design decision limits our future options. This issue, which is the only one important for me in this discussion, gets lost time and again, because you take each my example and each my argument, and start arguing about each one of them separately, thus drowning the main issue in an ocean of related, but secondary aspects of the problem. Please, try re-reading or reconsidering all I said in that light, and let's please return to talk about that one issue. Assuming, that is, that you are open to discussing that issue, and could be convinced to change your mind; otherwise, let's agree to disagree and finish this. TIA From MAILER-DAEMON Mon Jun 29 10:40:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpuxT-0002VT-7u for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 10:40:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48170) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpuxS-0002V6-1a for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:40:30 -0400 Received: from sonic316-11.consmr.mail.bf2.yahoo.com ([74.6.130.121]:32841) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpuxP-0000yK-Ut for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:40:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1593441625; bh=s8i7AkaXv9QHwJwtYAU2LIA+32XQaTmt7jw3J0oo4A4=; h=Date:From:To:Subject:References:From:Subject; b=jKZNkFIFqV6BysvF0KQma8Jcv7zwOYjteicB4DdyzSuNvx0OTiIX61pEREAp0VXikowWkaso06sHRYExNjzEB2VTJdQ2aQUek4l5ES6d8UFokPjMKnQA6vZUVMskQqSPfusm9Rg0/77a9AAFvrrSNrhHt/lmy07/X9fBDl3X0dhCd0Uk7TTgXCPT1J7ZXIXHajUz3AH78a/fmSYWB0xpE24EgHj4WsiRjbu+rko/guYsRxuJ3c1V9HHKA4hHMjNB6r15E8TiP7kdjfj7nJ1cilSGbGKuGSKDrN7POF8geOObeHzN04YKlmhZMZ9ccumpJk4VTp8i5VDGSG5yrLfmXQ== X-YMail-OSG: qvFPnG8VM1kHCakW672QlQML2YZYjryjWYllq5IniqbPJRDS_m4Uh7Ajt416rt_ 8g41OMESocbZoaDbtBcPdY5KVRs04pvBma2d5FHKsj334gEsgA1acbWOFglIFr9Sio20APBdDaQ_ Jd.M4bjeXwGUvLsunkebTAjVKYTa96v_vSLsTue.vuAyLEkqbNKHHFg5DPKQYbW3Ky2yr7m2GInF .rdoK6EQZZE.duQv7MX_QzkcGPhUdkcMxrCp568YUhIpW1v7oiPk3ocIoWusMXc2pqbzpBshCTMU 62QOqJgMr7H1FxACJQhobda2E9BqMxOHJRezJWRD0WoFcMnO6n4lf4KvUOOxPHKxyczZ9BHShpne UslgHjIGM7h5CacIDH9ZDly9Gmqgny5Ildj67uyiG5KDnOW.aix7ue4zX.lDdpqt8bbPJk4pATta M23_c2oajAOjgyGDERp5GK40_94Z0aanKC9udQDPkhhI4XP7vvePNVyOzO2IQh5pxnx1mgCJDD_I pHifIJsnHVra4jGuezf9kYnRWHoDGKIRUwLp6Lq4KBtOIPxvc6du954mGnrBdIbmZ0sVrRYtZMdD 0aLhllDxx3cbmZ9QiCMK6DZYutS1U2Tkb28YFaFiwviDzgSXk3YMakIZsRWaY2gH6lWpGbOcDq_N hEAEoMeswr8RW6akIHonxpbFk6bLPFDjKlybm09CIwQTPka8ktfzz0hJQV2tT7pty4B3Ky9xESpE 1OhKPITyHdU2RI3Tp0SvN88VHZ_4BvMhQC0ResplL6AQE_fXjhBh8SQ3WfVo2vfPwugr6kzDxWBn FGVzzJd5yHjgqqrN8BkuxJ8tFTVRfli.MLFGH1tMF_WRRYNEwXzh1fH8uxV3UrBuQefeLBf9M3qK XEbv6.ZaY2Tt1p9Anj4KA3POvXZAUo9E.duYn.m75hrFRe.5j5BDpmm1AgLCcPkN7S5JeE.PQRLj cgBKInwF7wtJgxl2u2_sqCtPdiN9MKWUejnAAnvjmYB.0PohdX0aKLs3GprDZ6UnxTb_rJ0.Kt5Q mfCSMgRFMttx4_OFy70qXHf8bg9Zdlh1vIZFhzoXwLd3qD7S26M2ws8fiHYJ1bd4lpuuoocznaQD 3UzR0Be_XpfW9R8e3u.stoYKSpj2dzEFdOekBKgbqq8NQqqr.rIfVqLjtUgqF4IX1QGjkoCetNcs nIzDCvFhF3eY_EBxT4f3SJhlgGKtZiZ_WDD4AP2ovcysIP_JrGH1AcJ4OOw8JFm56Uj1fLif7SrG MxJYtjYZnYLCuk3B01jqXDnEbz0JZFfVYKUuADaVQbxUezFdNYQ0CrUexoX6.s_ZnOXgfNX0LYhQ mdUeToGfwr2s4SbkQZyLVDlX1Nu06kmRZbJxyBXb0bmUJGgEATrJvZByB1shmysjzRv66WJrEsqK nbg0XDc..QA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic316.consmr.mail.bf2.yahoo.com with HTTP; Mon, 29 Jun 2020 14:40:25 +0000 Received: by smtp414.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID a8f3c5de355e195944b68e78df19fe86; Mon, 29 Jun 2020 14:40:25 +0000 (UTC) Date: Mon, 29 Jun 2020 16:40:23 +0200 From: Ergus To: emacs-devel@gnu.org Subject: Quit and Close Emacs Special Windows Message-ID: <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline User-Agent: NeoMutt/20180716 References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> X-Mailer: WebService/1.1.16138 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.7) Content-Length: 747 Received-SPF: pass client-ip=74.6.130.121; envelope-from=spacibba@aol.com; helo=sonic316-11.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 09:05:09 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 14:40:30 -0000 Hi: I have been reading this site: https://christiantietze.de/posts/2019/10/emacs-quit-special-windows/ and I am wondering why we don't provide an option to enable this behaviour by default in some cases without needing the "hack" in the link. It doesn't seems to be too complex to implement right? I know it is just a detail, but in some cases (like when using man or compile mode, or reading a function documentation, or after executing magit commands) it doesn't make sense to keep the buffer in the buffer list after pressing q in 90% of the times. Could we consider to add this as (for example) an option to enable it by default OR add a customisable list with the modes where the user could desire to have this behaviour? Best, Ergus From MAILER-DAEMON Mon Jun 29 10:45:02 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpv1q-0006YK-QP for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 10:45:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49428) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpv1p-0006WS-70 for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:45:01 -0400 Received: from sonic313-13.consmr.mail.bf2.yahoo.com ([74.6.133.123]:38807) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpv1m-0001iz-RD for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:45:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1593441896; bh=9bnT28AvmNHvTKNHOUbMvq80IQERjzQwbZIdV7QcWTk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=VxVIuUoZnLam2RRuT5JWZgfvJvy5v7/aL9em2Cf3spgUDFCDP1rQza7r1H/p1LO+XcDN9N5jWuADHVWeH19CDmQExNEFWAniPUI9JY1108DjHCyo4wHO/MUpn0iE+NNJFgVkRpeFdjulCCmFAHy93QRkdgCpKjLKpv/F1ho6ZrpJkdXqKHLJd8WR9DXHVs9BHvTH4limsiF+TF9D3V8ClQmNV2/IUzPPY02nWk/uBOJZLz7jJHaJjxPWpJKXhE0Ky88pZ6HM9YaOyyEVsJQMm8pD9CiyVnE+T/MFh2u+BsylI2UR6Eg7XsCtwrSMUObPva7j52RJX7ephEdfkfMj9w== X-YMail-OSG: bHrkBRMVM1lLAoupb4b4xIbwaYPjZggNQ0wlShsnMZj4o5N0LxkrbIVG8CE01rB uSrbbLFrdhgLutOLsJKqJCe_YKx0n5BSUpCHWx3cGPdu0KNvaz9vYEVfjW9EPS3bF.r5A59JIpXJ 4wAR8SEkVjB1GDti8nStTav4dh7qe7e0VlAg6McxpwWw4t8Z51CTLr3.WoP9es2OaWUOOvZ2skVv MZitZO4RbyXH98Xo8hLy3GJ1Ul32QZCRuxx7WAcL5oQH4Gk082tV7yxWDrz1s7.ZduCqIhB18tuS PXAgm0NCSy_.7HJznOq.LOvG6E5W2Pxlm6H1w9CyGE2TCQGAa0MlxaZag6H89LxHbldPK3Y..T4x TnIoft45zg6SUtW15IPPDlUVOpJVRrB1.lq9dUNTuu7yfXWtKtcVkvM.2w6uPAGKdmMyTFwuLceS 5HN.WqVQGtWkHrVrFFhjo2e4ToJtOq3aTFCPwnJRkpSu_k.7MH1evH8gb4i3tM84Jtr8r_x4Vk.8 Q2W2R4qdy3nP5sh.oBLWMX.4YiGXTq82GVaSwd.2KuiJH3v_tIz6ruICFlCms6Mbo42JkQ1W5ior M3mXTAVv88LwMllYwP6u0N0s3BTkQ4LzNEAkCcp3WH6KclQfmo6O2ySg2lr5SvwNdBhuavIP5aQ8 4uNetKkCN9U7uZZmZzJaEybWXKb6pegBh12tXQvad1nUWCs8Gr40wHrBAF14au8WKIOuPJTCUYzz wjzTi7JsqaDQY4kRssYpKcR_.AHLhJ.tgkzDLxFzADCVI0DrSDjidCE.XKWnlaZ7u4.x7aJXWpkg u9m6blZAe9v7AcrEQeE_kWFvkJ5ZHqoigHgfRUuviojmz_RXrghmc9.k9YLb8msA6srzL0ZNLy1y ZIeOk_taQ93j4AOSx7n_zv5GYyONi4zicEQcS2YJYSKAc3hsD8XfUXaiPTeoIZ.DvjBcbgy4ZmBN xwFRDwtWSaxc2YNdWGMMiIT0G2fgKJ2Tf3zRo47aRPVw.IC7U3daoZZJF88S2SbtQ5gR.V6bN2j7 1njy7yL3uk_KnZMYabJ3czjg9Cq5wp3HWcymZQjyO4Sgnuy4pqBMEXelHqwryQ7WT6CuvB4rSOT6 BjjoXgDzx2Qcf4JrEdMtPNv971Rz4IMO6onpkYJty4j89iO2S4lDHO0HGKAIYGVuNLd6d3Jmqgzm x8lkYL9Wiv8XzSI_vWPOyZ8SZPMRiuwO_wB_WpZ2I6a25NtYT3d8gRW7yJnwU29YC_1bc9E1k3p9 SkY6EClypK0eMEb8N3ZsGkzehYCq3jdD5AwjqP3yGWlKy8mK2KEgupXi0JJNqXOyW9NSWemzZeZ7 my00I3_xJcu8N9KcDML0agEiM1qdsEYtx_qdR4Hz3c.rSlu5DWsWHhWkweEQihdXSANcidyJShyQ fcO4w Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.bf2.yahoo.com with HTTP; Mon, 29 Jun 2020 14:44:56 +0000 Received: by smtp421.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 77a5a7153b87070033a05070b5d7f723; Mon, 29 Jun 2020 14:44:55 +0000 (UTC) Date: Mon, 29 Jun 2020 16:44:54 +0200 From: Ergus To: Stefan Monnier Cc: Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , Omar =?utf-8?Q?Antol=C3=ADn?= Camarena , emacs-devel@gnu.org Subject: Re: vertical fido-mode Message-ID: <20200629144454.o3vnc3lfc5oesirh@ergus> References: <87a71apgk2.fsf@penguin> <20200611130341.zwxcpwtwaxrq2qwm@ergus> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16138 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.7) Content-Length: 517 Received-SPF: pass client-ip=74.6.133.123; envelope-from=spacibba@aol.com; helo=sonic313-13.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 08:16:04 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 14:45:01 -0000 Hi: Any progress on this? need some help? Best, Ergus On Thu, Jun 18, 2020 at 09:51:52AM -0400, Stefan Monnier wrote: >> Yes, I'd be happy to make the changes. What does that look like >> logistically? Sending patches to this mailing list asking for review? > >That works, yes. > >> I don't have a copyright assignment yet, but some kind folks are educating >> me about how to procure it over at the icomplete-vertical repo. > >Great. Let me know if you need any further help with that. > > > Stefan > > From MAILER-DAEMON Mon Jun 29 10:51:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpv7i-0002eR-Ei for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 10:51:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpv7g-0002eB-SQ for emacs-devel@gnu.org; Mon, 29 Jun 2020 10:51:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60818) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpv7g-0002y9-48; Mon, 29 Jun 2020 10:51:04 -0400 Received: from [176.228.60.248] (port=4676 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jpv7f-0000vi-5G; Mon, 29 Jun 2020 10:51:03 -0400 Date: Mon, 29 Jun 2020 17:50:52 +0300 Message-Id: <83mu4m0vub.fsf@gnu.org> From: Eli Zaretskii To: Dmitry Gutov Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org In-Reply-To: <43a8f8d4-83fb-f012-8e1d-c1a618b0ef59@yandex.ru> (message from Dmitry Gutov on Mon, 29 Jun 2020 01:35:19 +0300) Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> <83ftaf2rj2.fsf@gnu.org> <43a8f8d4-83fb-f012-8e1d-c1a618b0ef59@yandex.ru> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 14:51:05 -0000 > Cc: theo@thornhill.no, philip@warpmail.net, emacs-devel@gnu.org > From: Dmitry Gutov > Date: Mon, 29 Jun 2020 01:35:19 +0300 > > >> Not to discourage alternative workflows, but this is the concept we > >> should work on supporting well first. > > > > What do you mean "first"? > > Meaning, I have to prioritize the tasks in my personal queue. And there > are other features I should get to as well. I hope you'll like them > either way. I didn't mean to ask you to change your priorities. I was only talking about the design of deciding what buffers belong to which project, and the implications of that design. > I think it's an objective summary. Because you said that not having this > capability keeps Emacs at a severe disadvantage to other editors. So it > was clearly a subject that required analysis. Once again, my problem is not with the schedule of providing the support for the use case I described, but with the current design which AFAICT makes it hard to add such support in the future. We should modify the design to make such use cases easier to add. > The model that other editors use, and the one I'm assuming you do as > well (guessing mostly due to how tags' UI works), is that you work only > on one "project" (in your sense of the word) at a time. > > Then, would I be correct to assume that if there exists a Grep buffer in > the current session, then it mostly likely belongs to the current > "project"? If so, would there be any particular advantage to using > project-switch-to-buffer instead of plain switch-to-buffer? No and no. My Emacs sessions run for many days on end, and during that time I work on several projects. Sometimes I need to switch between them every few minutes (e.g., when I read my email and need to answer questions and request, or review code, related to several projects, in the order in which I read the incoming email). More often, I would work for several hours on one project, then switch to another, then to yet another or back to the first. When I do switch, I don't want to lose the "payload" of the project I switch from: its files, its Grep, XREF, and Compilation buffers, its documentation buffers, etc. -- because I know I will come back there in hours or days. This means each project should stay readily accessible, so that I could pick up where I left off. It is true that the last Grep buffer I created most probably belongs to the current project, but that doesn't mean I want to give up the previous Grep buffer -- I might need it shortly. > I never said that it's an ideal method. And I'm sure there can be > problematic examples out there. But I wasn't convinced by the example > you gave because the reason for why it was bad was based on your > understanding on the word "project", and not on mine. Thus, it's hard > for me to choose a good solution for the project backend which is based > on my understanding of the word "project". I'm not asking you to come up with a backend suitable for the use case I described. I'm asking you to take that use case into consideration when you design the means of deciding which buffer belongs to what project. If we design this decision in a way that cannot be easily extended to reasonable use cases we can envision, we will limit ourselves in the use cases we can usefully support, ever. Let's try to avoid producing such a restrictive design, if we can. I can understand why some design might not be conducive to supporting use cases we never thought could be relevant. But this use case we already envision, and unless you really think it's completely not relevant, the design should IMO be able to support it easily enough. From MAILER-DAEMON Mon Jun 29 11:08:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpvO8-0003lo-Og for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 11:08:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56444) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpvO7-0003kO-3u for emacs-devel@gnu.org; Mon, 29 Jun 2020 11:08:03 -0400 Received: from gateway31.websitewelcome.com ([192.185.143.46]:16467) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpvO4-0006Nb-5C for emacs-devel@gnu.org; Mon, 29 Jun 2020 11:08:02 -0400 Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway31.websitewelcome.com (Postfix) with ESMTP id 55F8B7D9C for ; Mon, 29 Jun 2020 10:07:56 -0500 (CDT) Received: from host2007.hostmonster.com ([67.20.76.71]) by cmsmtp with SMTP id pvNzjA87JzOaupvO0jPjtm; Mon, 29 Jun 2020 10:07:56 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=stephe-leake.org; s=default; h=Content-Type:MIME-Version:Message-ID: In-Reply-To:Date:References:Subject:To:From:Sender:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=q08BaYOiJblGdpSQakY/baskPG0jmCB6vSQ+qD8RNII=; b=RGplleKyr6Ci0aWl9m0ky85Xw tTHbxIMgFy238L90KTNrroIBjiRsJEX+z8RUV5/CF7qqvmRKCC+yG7zdDOlzvZEwqHqQj3NwNx7Gi Ek1+OCnwxdPW9zSPk+hFtJn6aFD0ifxRKIQ5bDBYlJRtESdpHWVWmvMfxZs9X05Uwy5hpVeixkq+2 RN+1Ea6TUPtaTpJ8/sHolQo42HMGlDfhAdqf5m1Cp4qqUaeX2RepOv6YWXm9o3C3+mJ/U8Mw05/R8 Lmu++qwI3ZGlBJ6xD6K0riphiu5lOaBS3zoT0dbi4pSoYyEm0SrY69XcA8O2r08D/XDCCrrHtK4Ei PrUvlOG6g==; Received: from [76.77.182.20] (port=63833 helo=Takver4) by host2007.hostmonster.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1jpvNz-002Vqv-Mv for emacs-devel@gnu.org; Mon, 29 Jun 2020 09:07:55 -0600 From: Stephen Leake To: emacs-devel Subject: Re: master 1e3b0f2: Improve doc strings of project.el References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> <83ftaf2rj2.fsf@gnu.org> <43a8f8d4-83fb-f012-8e1d-c1a618b0ef59@yandex.ru> <83mu4m0vub.fsf@gnu.org> Date: Mon, 29 Jun 2020 08:07:53 -0700 In-Reply-To: <83mu4m0vub.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 29 Jun 2020 17:50:52 +0300") Message-ID: <86pn9hoqpi.fsf@stephe-leake.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (windows-nt) MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host2007.hostmonster.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - stephe-leake.org X-BWhitelist: no X-Source-IP: 76.77.182.20 X-Source-L: No X-Exim-ID: 1jpvNz-002Vqv-Mv X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (Takver4) [76.77.182.20]:63833 X-Source-Auth: stephen_leake@stephe-leake.org X-Email-Count: 1 X-Source-Cap: c3RlcGhlbGU7c3RlcGhlbGU7aG9zdDIwMDcuaG9zdG1vbnN0ZXIuY29t X-Local-Domain: yes Received-SPF: neutral client-ip=192.185.143.46; envelope-from=stephen_leake@stephe-leake.org; helo=gateway31.websitewelcome.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 11:07:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_NEUTRAL=0.779, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 15:08:03 -0000 Eli Zaretskii writes: > No and no. My Emacs sessions run for many days on end, and during > that time I work on several projects. Sometimes I need to switch > between them every few minutes (e.g., when I read my email and need to > answer questions and request, or review code, related to several > projects, in the order in which I read the incoming email). More > often, I would work for several hours on one project, then switch to > another, then to yet another or back to the first. I have a similar work pattern. My solution to remembering project info is implemented in the 'wisi' GNU ELPA package; there is one active project; (project-current) returns that project, unless a buffer has overridden project-find-functions locally, which I do for elisp mode. There is a menu of known projects the user can choose from. In addition, running 'compile' in a Makefile sets the project to the one relevant to that makefile. I have not tried to integrate this with the new project menu in project.el yet. -- -- Stephe From MAILER-DAEMON Mon Jun 29 11:10:11 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpvQB-0006jM-BD for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 11:10:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpvQ9-0006et-L8 for emacs-devel@gnu.org; Mon, 29 Jun 2020 11:10:09 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:49432) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpvQ7-0006ia-8r for emacs-devel@gnu.org; Mon, 29 Jun 2020 11:10:09 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05TF8At9107674; Mon, 29 Jun 2020 15:10:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=Zqtrmj2t0M4lHW8XQQc2DZF9ATrSNTKSVUeKKYizmeI=; b=nN3yAMjWIrOu+9R33jFcafQWpTKrIW2mXynBiZHqQk6yS/TQ0dmSbsN1j0PWh3C2eyZE XPzxda7B7DUjYvrP1B3d9newg0dVu53B/oOt41dZELSy18gmVEp6phPQV4e67F0UgzJY k7ou/ZS50JWc8z6++dte8eI3ROv5SjonBWZgi327WAMyRkURkweeE13DuhLc3D4kDn98 cekwCfTL9plsh/JWvflXCTtOZithHgKPExkx6y4btWIsLt1iqNDtzYSMRNfHExRYy6r8 kqV6VP+cR7IF9LX/fkBZng5lvqlyJdkW2SR6DVPmlomaBjdzTV/FiIPWHtMOqr+maD2Z QQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 31xx1dkwcg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 29 Jun 2020 15:10:01 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05TF8emx006606; Mon, 29 Jun 2020 15:10:00 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 31xg10m0sy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 29 Jun 2020 15:10:00 +0000 Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 05TF9xrN005360; Mon, 29 Jun 2020 15:10:00 GMT MIME-Version: 1.0 Message-ID: <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> Date: Mon, 29 Jun 2020 15:09:59 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Ergus , emacs-devel@gnu.org Subject: RE: Quit and Close Emacs Special Windows References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> In-Reply-To: <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 mlxscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006290103 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 clxscore=1015 adultscore=0 suspectscore=0 mlxlogscore=999 cotscore=-2147483648 lowpriorityscore=0 malwarescore=0 phishscore=0 impostorscore=0 mlxscore=0 spamscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006290103 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 11:10:03 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 15:10:10 -0000 > I have been reading this site: >=20 > https://urldefense.com/v3/__https://christiantietze.de/posts/2019/10/emac= s- > quit-special- > windows/__;!!GqivPVa7Brio!MYwcdeIdWpFMGgsvTIkt5Vbrg69dFCUgHqpfuyAyObkHKL7= IAog > HWMmQFaH3DjBy$ >=20 > and I am wondering why we don't provide an option to enable this > behaviour by default in some cases without needing the "hack" in the > link. It doesn't seems to be too complex to implement right? >=20 > I know it is just a detail, but in some cases (like when using man or > compile mode, or reading a function documentation, or after executing > magit commands) it doesn't make sense to keep the buffer in the buffer > list after pressing q in 90% of the times. >=20 > Could we consider to add this as (for example) an option to enable it by > default OR add a customisable list with the modes where the user could > desire to have this behaviour? FWIW, I do this: (defun quit-window-delete (&optional kill window) "Quit WINDOW, deleting it, and bury its buffer. WINDOW must be a live window and defaults to the selected one. With prefix argument KILL non-nil, kill the buffer instead of burying it. This is similar to the version of `quit-window' that Emacs had before the introduction of `quit-restore-window'. It ignores the information stored in WINDOW's `quit-restore' window parameter. It deletes the WINDOW more often, rather than switching to another buffer in it. If WINDOW is alone in its frame then the frame is deleted or iconified, according to option `frame-auto-hide-function'." (interactive "P") (set-window-parameter window 'quit-restore `(frame frame nil ,(current-buffer))) (quit-restore-window window (if kill 'kill 'bury))) (global-set-key [remap quit-window] 'quit-window-delete) I also use dedicated windows for buffers with names `*...*', and I make frame "hiding" delete frames rather than iconify. (setq special-display-regexps '("[ ]?[*][^*]+[*]")) (setq frame-auto-hide-function 'delete-frame) From MAILER-DAEMON Mon Jun 29 12:13:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpwPm-0007lS-O8 for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 12:13:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwPk-0007ke-3w for emacs-devel@gnu.org; Mon, 29 Jun 2020 12:13:48 -0400 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]:44684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwPh-0002mn-4L for emacs-devel@gnu.org; Mon, 29 Jun 2020 12:13:47 -0400 Received: by mail-qt1-x834.google.com with SMTP id j10so13224796qtq.11 for ; Mon, 29 Jun 2020 09:13:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=4OUm1vjjLUKiya1OqPXCOy6iqlqfdWnTrBFsyYZz7aA=; b=J7HZ9e0Sqazh+I+yjcdkITXlx6mOwr+oQGG4ZKSCxK54352LroCnHHFowsvb12yGqZ ALNwwIwKNkGVMuYv8Ra70I3nArI3m9W2FCfJsraYg+pdlz5H3H34fdweLAq9Xqe8stf8 0XlDkNidO+N2kzRJaIvjZ9RILkTUc6iVyugQ86RjApStz2fUeJS3pDDIEX3I4Cm32Agn q7oNb4+yUk3FrdiLrcviwxnb5R1rVA0l1NKfOvNQ6fGfT9aXLvAvPsxOu+jvjsfApw6l 3vjodEWCGVZTYFDFIJRYeTGb0SXSwApqtzGicD2GZGMRfUpnzl1Ql46bdkp47CPHCOLu NOww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=4OUm1vjjLUKiya1OqPXCOy6iqlqfdWnTrBFsyYZz7aA=; b=HtPE/c7+joMuI3gnZT7m/4dD4FaGmYjY85h1j5XDLuLfIFDXIlAvBV/BJeQQEvd24i Gym0HnqaY8jikWZWiIM4SGOV3PJkQJd1banxKHDCbXD1bKTCj50qNQuX6XAP7yNHVXwZ NnWr72RTx5emkAl9pZBGcTUMZSEavXJiT7fER+3C8XINNKayKYIfx5BICndEQvH6Yj/2 zPUA9ox7YaSSsBx1fz4pBDdR/efC4REVcngqvSXBJmido/OBshjmnJb4ST/2N5BVYQ2l Lnxsq2OAASFQkLX3Bx36ijpZjsUDUUo5O6JndFCozJImviZAcJL5f/HW164KAChf7Mrc fX0w== X-Gm-Message-State: AOAM532SmDALznWVIVXiz5YOjZzhkB4yGijevDkaUsS/97m//x0CZ2Yl 6tjzEF/G20DCynihSH6zbFY= X-Google-Smtp-Source: ABdhPJyPT5otMiOCox7Mhtj/95mPebRy7qQiT3n2J67XpdCRQugdcC6hHu+4ej0l6L+h+E5rqUcSQA== X-Received: by 2002:ac8:1654:: with SMTP id x20mr4288935qtk.83.1593447223399; Mon, 29 Jun 2020 09:13:43 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:f1a7:5c4b:7360:abd7? ([2601:98a:4200:9210:f1a7:5c4b:7360:abd7]) by smtp.gmail.com with ESMTPSA id r2sm103481qtn.27.2020.06.29.09.13.42 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Jun 2020 09:13:43 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Quit and Close Emacs Special Windows From: Yuan Fu X-Priority: 3 In-Reply-To: <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> Date: Mon, 29 Jun 2020 12:13:41 -0400 Cc: Ergus , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: <4A9D5E27-D090-4F1B-88DA-34A30ADE54F7@gmail.com> References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> To: Drew Adams X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::834; envelope-from=casouri@gmail.com; helo=mail-qt1-x834.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 16:13:49 -0000 I use a similar =E2=80=9Csmart=E2=80=9D quit function. When a special = buffer pops up creating a new window, I want that window disappear when = quit; but if the special buffer reused a window, I want Emacs to keep = the window and restore the original buffer. Here is what I use: (defun ghelp-close () "Close ghelp buffer/window." (interactive) (cl-loop for buffer1 in (window-prev-buffers) for buffer =3D (car buffer1) for is-ghelp =3D (eq 'ghelp-page-mode (buffer-local-value 'major-mode buffer)) if (not is-ghelp) do (switch-to-buffer buffer) and return nil finally (delete-window))) Here, instead of looking for special-mode, I look for ghelp-page-mode, = but the idea is the same. I look at the buffer history of the window and = restore previous buffer if I can find one, if not, I delete the window. Yuan= From MAILER-DAEMON Mon Jun 29 12:45:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpwuV-0007jO-Ln for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 12:45:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwuT-0007gl-Hk for emacs-devel@gnu.org; Mon, 29 Jun 2020 12:45:33 -0400 Received: from sonic316-11.consmr.mail.bf2.yahoo.com ([74.6.130.121]:42648) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwuQ-0008J3-7D for emacs-devel@gnu.org; Mon, 29 Jun 2020 12:45:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1593449127; bh=zXV7jpO4Jw5m8nrPzUNUxFMf+JFb7EtinSp3LGjheVQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=kVI+no7mx5hm24ekoKug2d8jNMoOiOcN5fDsDDFG+R0TLqyUu12OW6PudqN3oxfpxLz4dBhKSw2CsfkSBaGXdvv52PTDNj3jaFB6a9dWK9dt8mjKxrtPEPfmaZJ7LE5quCwovO74KYeiBZpMTm7k2q9ckJ4WMN6DK/ZmTcpFN7x3sNG3cvUcHhtM5iSotzN14+LSq8lSb77zAYL3OcY6cMDuY46CwcV1uKFCxnfT4oTz7jR42J+5jt2ykjztqJViIgB2JZQ1eN66xd2iAcL+ttIaaQDpnEx79dbgQViqWdzkAA7xm1J2mOmMNPIlFvIFotH3T/VWxKGGUBMmTnS33A== X-YMail-OSG: 8cMmSRkVM1lqA5nCni36Q2BaZB45yYSgrIZeccHNbFr2q8VmrEVHqV7SKhHeRk. IG1QwGQKobAIoo.7NeO11Mqp3g6ufIvpsVHNJ3qPDamahj2a0plZVJxj0C9L9.UObpU8xv8y0vCk 6.TPkwYLgaBUC78d4.5Ccgn8QM3UjivbWdcvbC9LN4gaC_GkgxrSRqOkLECbvOr9xCyZpWIHDd9X pNqsPwVNPwCrvs8C1JybQfZ0UeHm8b9HXR6OvXORvbjPVPr6VWr_g4GOOrMeoPT50BGND1.ALG0F ceZK.6LAMVulCGMR3LizzqjM5s7HsjWm9cZZneyeneK9UPS39wp41ye1oOCEgLGjje1JhzR9Xhv7 wssp6ZrNjhy.1jQyQ_bmaSH9FbaA8DQA31KceGWn4bvAmPOHniFreVuVx8MauqyxRMnoTq83aC_k ENY_HCbvsqtOHDm7zso5k2lYWbPXZCt0kQI2TUnpLH2g7sDIIWksOmR915Osmo3mGka5DqBWZ3rm W_hrM7NZDSgpAfCvNbekab2tljoYLKfsHPeXF9EA9FqaRbvDnx_7CTucu.Jcbxn3IGnN7XMEFxJk 3fGqSQH9JMvF.iBn3U2aduYm2XyDtWPhUcSMToXPyu6FG2EoTToo_.bmTJtFLmpffb_2f9s__7OE yra6rodiICy8NIwQU4H2GhFR9cYzXETWRyFRKoNSb9sQXsAAG2zgcSL3xt6D9NGNJASenyAZjGpY InS.HdJ55P3XPfsST211h2C.NQWqaNc1pmA2RnQT24I7YMGSjD0WxXOMBdHMJAs4Du53pA0QT6tK WTJamfZJxtjKABRfNfm11KQqTM16eTy_sQhcW6N.ijFb7R9OMNpRPf0p33mhBxXk_SoYbyfM_etW .TfFVMyFmOHrH9f36IbHkWg1lPEHMrYpeSBG_3SDtztvaBzX1uDJOwSNbQDjkl.FxGb0AJlCPdoX WpbsLx1Uv1H5SDl5z_UfPhwDgggEKmBi53iqY9YTQftTDUJQ7weU_2bBbYGycFwLqV5Z79kqF1E4 E8flGsBa8xluy7f2TyCbf6F_.5N0ur3NWfzcwjTv2OybPD2vFkVW7i.1glNrvNA9C21m.pZ.Phth Bs68s8O6Inb0q9bbDgxFxusA8t6TXmb9iWNJCXDT1aiTKFsh1RpOi6s08gZHv3OuuFSm9.UXVRxM vfCRtoDYp9ZczMR3mavGZ203fQi7_YNeOyZ.CtGNRKKA6jtRGBT6QNIiizbEQ13B6oYZapaB1IFP OBpLvv6dhbie8MU7_QXYl_PH470_JmZQ0X2j_aflFFwWDFaR0HqefXnpcDqYSP_TfFI9Gzpr54bj w8kBr6CdTaiVXuogxS.05PfQK0Xe2SfRp8rPctcF7.ZFSwIcroyENFxwDokRl2bkcHlxN5W1c0Hx vzJ_uttcCnQkiVZq4EF_ILd5S.OlQu7GY5g-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic316.consmr.mail.bf2.yahoo.com with HTTP; Mon, 29 Jun 2020 16:45:27 +0000 Received: by smtp411.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 04cc0e57c80fe5da582ee94ab7f62590; Mon, 29 Jun 2020 16:45:26 +0000 (UTC) Date: Mon, 29 Jun 2020 18:45:24 +0200 From: Ergus To: Drew Adams Cc: emacs-devel@gnu.org Subject: Re: Quit and Close Emacs Special Windows Message-ID: <20200629164524.y74lx5xgdomfj25b@ergus> References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16138 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.7) Content-Length: 1643 Received-SPF: pass client-ip=74.6.130.121; envelope-from=spacibba@aol.com; helo=sonic316-11.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 12:45:27 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 16:45:33 -0000 On Mon, Jun 29, 2020 at 03:09:59PM +0000, Drew Adams wrote: Hi Drew: 1) Should we provide a custom variable to conditionally enable the set-window-parameter part of your code within quit-window? 2) I am not very trained in lisp, so I must ask if you think that this changes is general enough for all the buffers like: Help, man, Compile, magit etc?? and won't conflict with others? if 1 && 2): as this is your code, could you please add the changes if nobody has any concern about it? Best and thanks, Ergus > >FWIW, I do this: > >(defun quit-window-delete (&optional kill window) > "Quit WINDOW, deleting it, and bury its buffer. >WINDOW must be a live window and defaults to the selected one. >With prefix argument KILL non-nil, kill the buffer instead of >burying it. > >This is similar to the version of `quit-window' that Emacs had before >the introduction of `quit-restore-window'. It ignores the information >stored in WINDOW's `quit-restore' window parameter. > >It deletes the WINDOW more often, rather than switching to another >buffer in it. If WINDOW is alone in its frame then the frame is >deleted or iconified, according to option `frame-auto-hide-function'." > (interactive "P") > (set-window-parameter > window 'quit-restore `(frame frame nil ,(current-buffer))) > (quit-restore-window window (if kill 'kill 'bury))) > >(global-set-key [remap quit-window] 'quit-window-delete) > >I also use dedicated windows for buffers with names `*...*', >and I make frame "hiding" delete frames rather than iconify. > >(setq special-display-regexps '("[ ]?[*][^*]+[*]")) >(setq frame-auto-hide-function 'delete-frame) > > From MAILER-DAEMON Mon Jun 29 13:00:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpx8e-0007oB-5D for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 13:00:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpx8c-0007m6-H9 for emacs-devel@gnu.org; Mon, 29 Jun 2020 13:00:10 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:34818) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpx8a-0002FV-4K for emacs-devel@gnu.org; Mon, 29 Jun 2020 13:00:09 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05TGw63D088363; Mon, 29 Jun 2020 17:00:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=If7J9g8fyzLH7kMPZ2b4YoFpEKW8qO0pfSxcvijv/+s=; b=QsJIdXOYrSd87YJbKAu4tmmd1TNq7uu8B+G00JucPuBNDFTQKpiUo5anEWuOwgh8keDU tps2HN8kAufI7GBCtPLLlWId7eWZh72wrida8lJ1G2eyNbM6bGhHPv2Q0uqvVraRuHl1 6kt9ZYHiHvUneReTjcxOG+ULF/wSttXstoITNamhAS3LL/An1zF8tbaIWPl2yS0KtAD5 01ASVCuhT5vGCgteRXOs1K2XuEHxn4QiV1oaEB7I/c1Q5B2BBqS8j77mdK9he4PRa/HO QSnm4tvRKhKC3/2rosXg39SrnZ6aDHLQPYHA6EWBDZbliFBHEM+wYTPeKEDJmhxrc3X+ EQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2120.oracle.com with ESMTP id 31wxrmymhv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 29 Jun 2020 17:00:03 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05TGwUFb009041; Mon, 29 Jun 2020 17:00:03 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 31xfvr1q33-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 29 Jun 2020 17:00:03 +0000 Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05TH02wp016116; Mon, 29 Jun 2020 17:00:02 GMT MIME-Version: 1.0 Message-ID: Date: Mon, 29 Jun 2020 17:00:01 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Ergus Cc: emacs-devel@gnu.org Subject: RE: Quit and Close Emacs Special Windows References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> <20200629164524.y74lx5xgdomfj25b@ergus> In-Reply-To: <20200629164524.y74lx5xgdomfj25b@ergus> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006290109 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=999 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 cotscore=-2147483648 lowpriorityscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006290109 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 13:00:06 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 17:00:10 -0000 Hi Ergus > >FWIW, I do this: > > > >(defun quit-window-delete (&optional kill window) > > "Quit WINDOW, deleting it, and bury its buffer. > >WINDOW must be a live window and defaults to the selected one. > >With prefix argument KILL non-nil, kill the buffer instead of > >burying it. > > > >This is similar to the version of `quit-window' that Emacs had before > >the introduction of `quit-restore-window'. It ignores the information > >stored in WINDOW's `quit-restore' window parameter. > > > >It deletes the WINDOW more often, rather than switching to another > >buffer in it. If WINDOW is alone in its frame then the frame is > >deleted or iconified, according to option `frame-auto-hide-function'." > > (interactive "P") > > (set-window-parameter > > window 'quit-restore `(frame frame nil ,(current-buffer))) > > (quit-restore-window window (if kill 'kill 'bury))) > > > >(global-set-key [remap quit-window] 'quit-window-delete) > > > >I also use dedicated windows for buffers with names `*...*', > >and I make frame "hiding" delete frames rather than iconify. > > > >(setq special-display-regexps '("[ ]?[*][^*]+[*]")) > >(setq frame-auto-hide-function 'delete-frame) > > > 1) Should we provide a custom variable to conditionally enable the > set-window-parameter part of your code within quit-window? >=20 > 2) I am not very trained in lisp, so I must ask if you think that > this changes is general enough for all the buffers like: Help, > man, Compile, magit etc?? and won't conflict with others? >=20 > if 1 && 2): as this is your code, could you please add the > changes if nobody has any concern about it? No idea; sorry. I'm just saying what I do. The definition of `quit-window-delete' that I use has this comment: ;; Candidate as a replacement for `quit-window', ;; at least when used interactively. For example: ;; (define-key global-map [remap quit-window] 'quit-window-delete) ;; ;; Thanks to Martin Rudalics for suggestions. Someone else will need to make changes to Emacs, if such is decided. The things I mentioned don't necessarily belong together for others. For me they make sense together. For example, making buffers `*...*' special-display is unrelated to quitting help buffers with `q'. But for me it makes sense. I show all such buffers in their own dedicated window (frame, in fact), and when I use `q' to quit the buffer I want to delete the frame. I imagine that at least some others won't want such behavior. Do I think that it would be good to have a simple way to get `q' to delete the window? Yes. Do I think it would be good to have a simple way for `q' to delete a one-window frame? Yes. But someone else will need to think about and decide whether that's helpful in general and, if so, what's the best way to offer it. From MAILER-DAEMON Mon Jun 29 13:22:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jpxUg-0000Dv-6u for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 13:22:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpxUe-0000By-9t for emacs-devel@gnu.org; Mon, 29 Jun 2020 13:22:56 -0400 Received: from sonic315-13.consmr.mail.bf2.yahoo.com ([74.6.134.123]:34770) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpxUb-00062d-F0 for emacs-devel@gnu.org; Mon, 29 Jun 2020 13:22:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1593451371; bh=AifhLennxC3efD4+ZQ+lOII3K/+n3+++LZSB83Y9d34=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject; b=QACMJ3rQb+6E+I9f91AwlB35b/BAm4J/PpA57KYwNqNEbpKIInK/WiGwBthheR2B1qQgen4DFCAZH+nZ4xyguLQjumV8sjQyOp8JN6qY9BfD9+Tf3w+jpHotNrMN5rUBav5tAR35r4/sKQPTqIM8SHsv6vEcOASHk9CoYiWyWHC0LPI4k39V5NzicLhwO8Z+I4+24gX5dVxzplEn4lPG+eeH8YQZgadh+kAJtpQeNZw09DuFYGAmR21xfmmb63Gwvs3uNxsgT51L30Y4lylqTGOCi+spRHZT7t4bjlhhFRfw+z7hdS0WK4jGIAgawyguJzyHSHaMEbkIEUnbbU/Oow== X-YMail-OSG: 1CtajCAVM1mpD26kNrdbKqjzJeR_QwyaPVSA8xdu7dGlrvmopwAE6jzfyxfiQ7L jUO.35pco4rAnXl69VN4.nCJN1zlI7_hF258sd3JI2oFou0quGRPoMoX3cYV3REpfRi8NCi4nkdd x_RZWEC8AAksbTbAGKq.OeLneZHcUnAFaqR7DULYLCgljzk72Ll5Y_Fy5BEBF41xjIpXx.bO0u3Z wPqpBffPyXuIt.RJBAqR6QxqWp287C3NhmhZb9r55ON5LmoATubsaO1VUWS4OseFrxYIXKuu8at2 15NtWrsnwc9LiceRJDIcgxBTJCro0bOc5Z1_oyNFT485.jSiC5yeL.AAYkZmGCet9mhnTZwCEa3B U5WZYRm2H52fXmb9uoW_RJoXA9ewE4u5LyJWLJeGa3zVWIKGby26C34tB95sNls90wa_tbNcINus iiECuFi444hFkS56PkpQRSX_Gg2SGB_xvEPOArMG9D799Il4Bmcq9jg.HDvtaGzu902EepRGs.Lk k5v3Z8lrIjqq4qnvuJZm4G.tjiA0TFC.W9zfs4veWq1A028JprBl0gavqdkt7nLWbWRKE69YF2iG fDBYgheu._cckXrwlJBoSeqcqrwaPD8q2EF44BSi2HNfQDB8uY4yACBz5Ohei6FOnj1G2.k2TjDr za7j7xoiaqBH0KXylTqj2h1JutXGOndXelVGjV_mDd1vDVDv3MXMnsHD2yd3DkOG5MWlVod2DvhD 3w6_hO9PL517jRmfnTSfssfuzf_JTpTjTODQpspv62wTlvIvE_7PE9PNxXFWHP4ORJ2ylis_dzYc Fw0x.aKp46gmv7GG_vpWWI3RHE8EAnKBMPy.yAdrzP1M5gBxmfw1Dltpq7bxrYdP54x5PybYhDYE xUGeq_Y9ulFOfVAU4oiuygDMEE.oJyV_T76kkXvsXLJbLKYmp6AkTiKD_gKb4tep8VgTYpc1.iv6 aFuIesbDv5eghSZWDFeZEsijpgMoSbRz7yFRd13CccZKE7OOfRn4mGF9i4OLW5BCsKzLvuGWfrxr z5g_Oz6.WJM5Snw3bFkEvfYsw4rvhOUhnWkpnlSactwtvQEXHIjbPh1en7Veo6BbJggzpvoEeJpm AidY4WhWIPvTHReQYrBSxqk_fUxML_D5.JDM9tgjOiAF.xzt74lRnfyebpYewxkGl1sGEemu6nvo Vc_4AmXHQLtAhDAo7FGcgvCEbyA_VQ5ESX5S9b17sKFhiuyw7dBxDl1H35eCRzW_4hMADrTkfn2R kTdVWzaDLQV8XvQr7muEKwzd9FsnGlNmSsvXGyHE7KJjgO5_0m1hdIK1UtJlFH_HgzEM.OeNN.1J FxWdSdJWOfqLGscFKqWRfWYgPj2BjxVt_b6YUY2GFIUOml77r77QvGF37fdVCO1vX.hnyySpK3dF 4P7ndkP0uEe3LGeoJKbEFU9LFSPPkq8SM7A-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic315.consmr.mail.bf2.yahoo.com with HTTP; Mon, 29 Jun 2020 17:22:51 +0000 Received: by smtp425.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 013e49fe4bed0371275a97e5bd62cfd0; Mon, 29 Jun 2020 17:22:48 +0000 (UTC) Date: Mon, 29 Jun 2020 19:22:47 +0200 From: Ergus To: Drew Adams Cc: emacs-devel@gnu.org Subject: Re: Quit and Close Emacs Special Windows Message-ID: <20200629172230.mpm4ahvj2wm7ak5k@ergus> References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> <20200629164524.y74lx5xgdomfj25b@ergus> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180716 X-Mailer: WebService/1.1.16138 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.7) Content-Length: 1869 Received-SPF: pass client-ip=74.6.134.123; envelope-from=spacibba@aol.com; helo=sonic315-13.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 11:56:41 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 17:22:56 -0000 On Mon, Jun 29, 2020 at 05:00:01PM +0000, Drew Adams wrote: > >No idea; sorry. I'm just saying what I do. > >The definition of `quit-window-delete' that I use >has this comment: > > ;; Candidate as a replacement for `quit-window', > ;; at least when used interactively. For example: > ;; (define-key global-map [remap quit-window] 'quit-window-delete) > ;; > ;; Thanks to Martin Rudalics for suggestions. > >Someone else will need to make changes to Emacs, if >such is decided. > >The things I mentioned don't necessarily belong >together for others. For me they make sense together. > >For example, making buffers `*...*' special-display >is unrelated to quitting help buffers with `q'. > I tried your code for making buffers `*...*' special-display and as I only use -nw the behavior is not good. The first time I call commands like `man' nothing happens in the front but the buffer starts in the backend. In gui the behavior is fine as expected. >But for me it makes sense. I show all such buffers >in their own dedicated window (frame, in fact), and >when I use `q' to quit the buffer I want to delete >the frame. I imagine that at least some others won't >want such behavior. > >Do I think that it would be good to have a simple way >to get `q' to delete the window? Yes. Do I think it >would be good to have a simple way for `q' to delete >a one-window frame? Yes. But someone else will need >to think about and decide whether that's helpful in >general and, if so, what's the best way to offer it. I think that with a simple variable and an `or` in the condition will be good enough (something like quit-always-kill or so). The only corned case I can imagine so far is the case where quit-window is not called from `q' in not *...* buffers. But I don't know if that even happen. Hopefully someone will come with a better solution... Best, Ergus. From MAILER-DAEMON Mon Jun 29 19:04:37 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq2pJ-0003qp-4v for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq2pH-0003qb-HP for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:35 -0400 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:39723) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq2pF-0002dO-2v for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:35 -0400 X-Originating-IP: 91.129.96.187 Received: from mail.gandi.net (m91-129-96-187.cust.tele2.ee [91.129.96.187]) (Authenticated sender: juri@linkov.net) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 8741CFF804; Mon, 29 Jun 2020 23:04:27 +0000 (UTC) From: Juri Linkov To: Stephen Leake Cc: emacs-devel Subject: Re: master 1e3b0f2: Improve doc strings of project.el Organization: LINKOV.NET References: <87bllfqj82.fsf@warpmail.net> <83o8pfxhzq.fsf@gnu.org> <83imfnxgt3.fsf@gnu.org> <626efe11-0f9c-081b-11dd-0d61cee8168d@yandex.ru> <83h7v7xf7w.fsf@gnu.org> <831rmayj55.fsf@gnu.org> <6dc2c2ac-8e17-f044-dc78-8c109f936ad2@yandex.ru> <83wo42w83e.fsf@gnu.org> <6762abf5-71c1-aa54-1bac-d4c90c20870b@yandex.ru> <831rmavsuq.fsf@gnu.org> <83a70wv4mj.fsf@gnu.org> <5542db0c-cc0d-2743-87ae-7728a0cc94bb@yandex.ru> <83ftaf2rj2.fsf@gnu.org> <43a8f8d4-83fb-f012-8e1d-c1a618b0ef59@yandex.ru> <83mu4m0vub.fsf@gnu.org> <86pn9hoqpi.fsf@stephe-leake.org> Date: Tue, 30 Jun 2020 01:35:54 +0300 In-Reply-To: <86pn9hoqpi.fsf@stephe-leake.org> (Stephen Leake's message of "Mon, 29 Jun 2020 08:07:53 -0700") Message-ID: <87tuytmt91.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.199; envelope-from=juri@linkov.net; helo=relay9-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 19:04:28 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 23:04:35 -0000 > I have a similar work pattern. My solution to remembering project info > is implemented in the 'wisi' GNU ELPA package; there is one active > project; (project-current) returns that project, unless a buffer has > overridden project-find-functions locally, which I do for elisp mode. > There is a menu of known projects the user can choose from. In > addition, running 'compile' in a Makefile sets the project to the one > relevant to that makefile. This description reminds how next-error works in a similar way. By default, it uses the global value of the last navigation - in project.el it could use default-directory by default. But like a buffer can override next-error navigation, project.el should allow a buffer to set a buffer-local value to define its project like your project-find-functions. From MAILER-DAEMON Mon Jun 29 19:04:38 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq2pK-0003sN-Ky for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq2pJ-0003qr-5Q for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:37 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:45975) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq2pF-0002dg-QO for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:04:36 -0400 X-Originating-IP: 91.129.96.187 Received: from mail.gandi.net (m91-129-96-187.cust.tele2.ee [91.129.96.187]) (Authenticated sender: juri@linkov.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 9FB481BF204; Mon, 29 Jun 2020 23:04:30 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> <87h7uug7n9.fsf@mail.linkov.net> Date: Tue, 30 Jun 2020 01:43:03 +0300 In-Reply-To: (Stefan Monnier's message of "Mon, 29 Jun 2020 08:29:53 -0400") Message-ID: <87lfk5mrj4.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.201; envelope-from=juri@linkov.net; helo=relay8-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 19:04:31 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 23:04:37 -0000 >>>> I'd rather try and avoid this complexity because I think it will become >>>> problematic as more prefix commands get written. E.g. the ordering >>>> problem doesn't only affect `C-u` but all other prefix commands, such as >>>> `C-x RET c` (there currently aren't others bundled with Emacs, but there >>>> are others out there). >>> >>> Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: >>> `C-u C-x RET f`. > > Not sure how that relates to the previous paragraph. I just discovered a prefix command that supports a prefix arg. This doesn't mean of course that it should set a precedent for other commands to follow. >> BTW, there is also a new command 'same-window-prefix' to request >> displaying the next command's buffer in the same window to override >> the setting that would otherwise display the buffer in another window. > > Yes, I like it (it's been on my todo list for other-frame-window). > >> But the problem is that currently it's not bound, and I can't find >> a good mnemonic keybinding. > > Same problem here. It's part of the low motivation to work on that todo > item ;-) > >> 'C-x 4 0' is already taken. >> 'C-x 4 1' could be reserved for another command that would delete other windows >> before displaying the next buffer in the remaining single window. >> >> Maybe 'C-x 4 s'? > > Since I use `C-x 4` instead of `C-x 4 4`, I'd say that `C-x 1` would be > the "natural" choice, but that's also already taken :-( But you can still use `C-x 4 1` as a submap of your `C-x 4` map where commands of the submap will display the buffer in the same window. From MAILER-DAEMON Mon Jun 29 19:53:56 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq3b1-0006YI-TR for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 19:53:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56810) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq3b0-0006Y9-1T for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:53:54 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:35920) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jq3ay-0001Sw-JL for emacs-devel@gnu.org; Mon, 29 Jun 2020 19:53:53 -0400 Received: by mail-pl1-x62d.google.com with SMTP id j4so7726804plk.3 for ; Mon, 29 Jun 2020 16:53:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:subject:message-id:date; bh=U34fVC6t0dAPT1R3kAIMdq4Y7krSnFQ3wOsY9befYjs=; b=j52d+bMVTNe2sy8AxLjUDoe1FvjRxywTSYBUZY6kDBpdAgcNqmQWQ+/biq5Rkve/z4 LE5OfNbAh5+ECH6mUDN5i1nEcxCn7qrqe/VNFAuqSpnHSlAXPcFdZPVtUhPPUljcO5vv YmEhzfgbwIwhFAFzlC6aiB6zcwMpA4jgb5tUIF5VBppt/DYjhJkpr3G13VJhDK258AmM i9kQL5HIi5/ulxrohQotMIDPc9wKrOLQlqnOsbcAhR+eSX0UwvUa+EeQSRlwqNowqVqp XnNUifFInfCFgsG6YfDRFbfJGT4k3xpV14F6G8sXapyGSYtOmXuLMWXunkC8Sd1C9cUv adzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:message-id:date; bh=U34fVC6t0dAPT1R3kAIMdq4Y7krSnFQ3wOsY9befYjs=; b=mFXhqD1mTwcPY1Pe/9qjhCtEY9vGPIPwl1JWBbXWcTMO008GABudIbaDMG3WeaNAQl e+byB0d3JTUQvKmcUVXRbNuYuvHAe3ZVCokHihx3FZuDKplAe2tQbMC2719joJw/Kgkn d4IWrbaHRbi8a/C0duzfpt8I3KwBey7byDsXpUBa3bqhe+HHxmw0p09JfOXaDhZqvSja A19jauK4ZOxoLEyPLpFOPTft8bUnalw19nYNYT00tyVPDbgqCBL+WXPkpS0Nn1cfUDET cDuj6S+la+xSVNBejz1EYZ5IJLF9HYxFjbejOZqVlkrGFIVx3KdAyRZBuK+daiJ9W30i w3bw== X-Gm-Message-State: AOAM530s79Mky0ZIfKZyPFE/ZEJeNssgM3uVWxvAMwR7GRJkT6DQojFj rHQEzO/BM7kIp5TgWgBf3y5bsrNjg/aoEg== X-Google-Smtp-Source: ABdhPJyVwWa7YrfI4WG4YjXr/DwS5ffqvtSLjH35tbIMGXGlH2+wQTwQFqUWqCw4v/LIWkI/mVFo6Q== X-Received: by 2002:a17:902:ba8e:: with SMTP id k14mr6376903pls.199.1593474829048; Mon, 29 Jun 2020 16:53:49 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id e28sm656028pfm.177.2020.06.29.16.53.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 16:53:47 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id A4321C20E9A; Mon, 29 Jun 2020 16:53:45 -0700 (PDT) From: "T.V Raman" To: emacs-devel@gnu.org Subject: HowTo: Log a message without displaying it? Message-Id: <20200629235345.A4321C20E9A@raman-glaptop.localdomain> Date: Mon, 29 Jun 2020 16:53:45 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=raman@google.com; helo=mail-pl1-x62d.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: -185 X-Spam_score: -18.6 X-Spam_bar: ------------------ X-Spam_report: (-18.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2020 23:53:54 -0000 The elisp docs talk about how to display a message, and how to disable logging of that message. Is it possible to do the converse, ie log a message to *Messages* *without* displaying the message? I suppose I could directly access that buffer with (messages-buffer) and write to it -- but is there a builtin/blessed elisp call that does this? -- -- From MAILER-DAEMON Mon Jun 29 20:21:00 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq41E-00037w-CE for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 20:21:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq41C-00037j-Jp for emacs-devel@gnu.org; Mon, 29 Jun 2020 20:20:58 -0400 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]:45631) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jq41A-0005lJ-Nz; Mon, 29 Jun 2020 20:20:58 -0400 Received: by mail-qk1-x72a.google.com with SMTP id c139so17024748qkg.12; Mon, 29 Jun 2020 17:20:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=user-agent:from:to:cc:subject:date:message-id:mime-version; bh=Pz/diaK3lDHuQwDcSFe6YuCmfKyKfddb+EZpvhTPjjU=; b=qezFpDxGHYZaGfMMk50Jaeyw6a4vdjNmXequFwqofGIUKJdq283Cr+soK8b8joB1sw rS5+Xfxe31LVfLjYhmjdZZMlUscdxlx/CRbyI/AsalA73/ZclULwxLCu0c9gpfSc9ida yiOdirnXc5WOx4s97LCIF4PSApCwEa+rMCoG8INOYofPK7D+eLC89Hip1juNMjKvj46Z vC81VYu3ARLAie45Dwoj+EY5dhkhZ4alpdH10TnMv2rUTsg1Tu1xzBTfHF8nX6QNnIpZ CffawTASAJ+fHpYGGj1SesqEW+OOcQQUHEtS+od0JUmGLp+Z8Eoqty12j0N5PgubW1Ko qXtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:user-agent:from:to:cc:subject:date:message-id :mime-version; bh=Pz/diaK3lDHuQwDcSFe6YuCmfKyKfddb+EZpvhTPjjU=; b=hyswBu1DB2tJOhgSZr7xYFe+NeH39cOgjJKrWJN6UOyZo7Yz3bPzAyiArADtHUCxI5 czL2t+Af2f0uKZ+2dpOYkpd4OQN5iKwlBqhCqKxQkMBel3Cw2CZQwyYtZUUjZFEPM81O eD+p05BIJZlcXSsvFkoAqkcOLHg4qeP5jkGqUp3zqpOMGQWNVfFCj4rVfOE9rYlDe4CI icYM+CyraspYdcz+f8tWOxIijnMteyGFqUnjLRtvxZspV6+BjHzm72UbmvVq/XqxjfCW nEm2XD70DZ+zI3WMlYfUuJkYnUZwTagr1JT4NGOEu37iyu7PcWYpVXP7urYN6N6XQFno +pAQ== X-Gm-Message-State: AOAM533cmaELz6tKjLRYMJ5o2pgtcpqG2IwA0YpM+TAyqV3QEDJRA2Zf Gv3hCNTbTyKYRWpRLjRzaY4CyJxXUKU= X-Google-Smtp-Source: ABdhPJx0mArlVelnfdQg1+IxsK2az31uT9eKTl9rTUutIQZsUldwLlt5obeAKbOO1LWEkPmkVtnp3w== X-Received: by 2002:a37:f71e:: with SMTP id q30mr16939816qkj.68.1593476454733; Mon, 29 Jun 2020 17:20:54 -0700 (PDT) Received: from arch-thinkpad ([2604:2000:2f41:2d00::1]) by smtp.gmail.com with ESMTPSA id j16sm1349616qtp.92.2020.06.29.17.20.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 17:20:54 -0700 (PDT) User-agent: mu4e 1.4.10; emacs 28.0.50 From: Zach Shaftel To: emacs-devel@gnu.org Cc: Rocky Bernstein Subject: Storing Bytecode Offset Date: Mon, 29 Jun 2020 20:20:52 -0400 Message-ID: <87pn9h9zff.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::72a; envelope-from=zshaftel@gmail.com; helo=mail-qk1-x72a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 00:20:58 -0000 Hello all, Rocky Bernstein and I have been working on the bytecode interpreter to save the offset as functions are executed. The plan is to then map the new information to source code locations once that's in place, for more helpful backtrace information; but first the offset recording needs to be done right. We've tested[1] a number of different approaches and are still weighing the pros and cons of them, so we'd like to hear others' input. Rocky has pushed the code to Savannah. In the feature/zach-soc-funcall-from-bytecode branch, I made a crude transplant of code from Ffuncall and a few others into exec_byte_code, so that compiled function calls don't need to pass through Ffuncall. In the case of lexically scoped compiled functions, exec_byte_code is called directly. The benefit here is that the offset doesn't have to be made available in the thread struct (it can be passed as an argument to a record_in_backtrace_with_offset function), and cutting out the Ffuncall speeds up bytecode execution in general. According to tests, this version is faster than the existing byte code interpreter, while still storing the offset for every frame. But the code on that branch is just a rough proof-of-concept and isn't 100% accurate. Doing it right would require a lot of refactoring that could ultimately lead to a dead end. In the feature/zach-soc-bytecode-in-traceback branch, the offset is stored in the thread_state struct. Prior to the most recent commit, the offset was then stashed in the backtrace specbinding frame from record_in_backtrace, so each bytecode call in the backtrace buffer was annotated with the offset when the error occurred. This is the ultimate goal, but the current implementation is flawed and a significant source of slowdown. Even without that, the code is slow, which is why we hope there are other ideas or ways to improve. We've tried other changes, like storing the next backtrace frame in the thread_state to eliminate a loop to find the pertinent frame, but so far we haven't been able to achieve acceptable performance in this implementation. -Zach ------------------------------ [1] We've been testing with scripts at https://gitlab.com/Zach_S/bench-compare.el. We've collected some data in the `results` and `data` directories. The compare-benches.el script concurrently runs elisp-benchmarks.el on supplied Emacs executables and collects all the results into an org-mode file, like the ones in `results`. If you try it out, let me know what goes wrong, I'm sure there are bugs. From MAILER-DAEMON Mon Jun 29 20:42:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq4Lz-0007Bk-Rq for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 20:42:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36938) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq4Ly-00077t-77 for emacs-devel@gnu.org; Mon, 29 Jun 2020 20:42:26 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:45368) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jq4Lw-0000fp-Bu for emacs-devel@gnu.org; Mon, 29 Jun 2020 20:42:25 -0400 Received: by mail-pf1-x42b.google.com with SMTP id a127so8613605pfa.12 for ; Mon, 29 Jun 2020 17:42:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=HqEcRsBS1hBINoQOOtisapK3mNcWwRqjg+jg+qBdHxA=; b=iKjgvPASW+VTx+xigXztmwl7h9ZJqsUNXGa69zghne2wnq+Wpuf/onCWrZxzlt6Fcz KLKDk7RqcGWtRWfXgLsT4reQRHSTQfW/oDrfDeeA7eL+2QhRKwlXNjjjMdW0qebE8SyK CybwrJpvKbV5RAUx7lo2qNwPDFEU/r9YFbFZTtsSQtKJvWTZTHD0lBpQfFJEBgo2oKiS 7qzvMNODS0C+TIzhoggfVU5JeFvLgECzoQWc/Px2+ap0yZkTCsJYd/EPYM4DNQ5qydCM nc0rtodfqEMIdEij3fQr/SCh8FJrBM1HQq6ncQLk5D7sFLmrfoWbZXaSKEualtn4ANZG OARw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=HqEcRsBS1hBINoQOOtisapK3mNcWwRqjg+jg+qBdHxA=; b=TQ//lpBf5q7vPeWjTb0bf/UdWC7vo761EbzdDxUCEhN64JkWIMUmgjLjjqu/HT4yOI rtIUhJVw4U5Bi5JQT4npI3zHIwiWKr3lRHaXi/mc++OzmBFpuMdI722ovXrzF5g2txLj f/x7CIAoju63Y3zfNygbNEoxm917D4p1Xz0jU7F3/QwhLYWU3LyAiFL1rGjKc/9igxAo NbBHi3x4/HcIb+SXOX+I2qchMrBvL81Q8ezzPHAY1nDdqSeTyqUb0KrpLOP+XML82OUr 5ul6McTtNjlgdmFsF7PvkfsYv+PYMvfFRSlLegl7t/BukYaExMLZkCgMMMnIB5QWvLwD R2LA== X-Gm-Message-State: AOAM533uM2JmRYxNx9CeXS43lwNyx4ZX9m0CPwy/xVRI+tCKBCzpfc8z z0xaY+9cMFtL3cbl+s58IQfcr9+Ifbleuw== X-Google-Smtp-Source: ABdhPJzJ/7QZrUui5kryraay+oY2IbP1n8fa4Eb0CwUgQTa7rBVr5/VTSNvqS0hSGNZ5q1zRUljDwQ== X-Received: by 2002:a05:6a00:1490:: with SMTP id v16mr15970258pfu.173.1593477742195; Mon, 29 Jun 2020 17:42:22 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id m22sm741717pfk.216.2020.06.29.17.42.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 17:42:20 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id 5048EC237E1; Mon, 29 Jun 2020 17:42:19 -0700 (PDT) From: "T.V Raman" To: emacs-devel@gnu.org Subject: Re: HowTo: Log a message without displaying it? References: <20200629235345.A4321C20E9A@raman-glaptop.localdomain> Date: Mon, 29 Jun 2020 17:42:19 -0700 In-Reply-To: <20200629235345.A4321C20E9A@raman-glaptop.localdomain> (T. V. Raman's message of "Mon, 29 Jun 2020 16:53:45 -0700 (PDT)") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=raman@google.com; helo=mail-pf1-x42b.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: -185 X-Spam_score: -18.6 X-Spam_bar: ------------------ X-Spam_report: (-18.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 00:42:26 -0000 "T.V Raman" writes: Here is a simple implementation https://github.com/tvraman/emacspeak/blob/master/lisp/emacspeak-speak.el#L191-l97 > The elisp docs talk about how to display a message, and how to disable > logging of that message. Is it possible to do the converse, ie log a > message to *Messages* *without* displaying the message? I suppose I > could directly access that buffer with (messages-buffer) and write to > it -- but is there a builtin/blessed elisp call that does this? > > -- -- From MAILER-DAEMON Mon Jun 29 22:44:16 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq6Fs-00026o-Qi for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 22:44:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55922) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6Fq-00026P-Ln for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:44:14 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:39958) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6Fo-0001Nd-Ct for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:44:13 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4F1C880A93; Mon, 29 Jun 2020 22:44:11 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 125EC805E6; Mon, 29 Jun 2020 22:44:09 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593485049; bh=+LLuP0PLBHI+p78HyEOGgNIjkAS6Ue+0uholO2qCzG0=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=jx3NHas6jBhhZhxeD6FsmabtH4hJ/dUSVOT/+milq2ojQmohqW8K4tD5P2b3lBsIu x5sqM/pOzrKo/br9Ta9KVj6UJ+4rsbXwOmu1xYREw7hLMejZ/BsqWzZRif9KEMoJrb E2VJiRE3mLM08+Orr1TVGFvhrxKWHDTdt+n4PtK4S1Reh9o9j6Ql8Dpzpc2ptATgal xZxT9qDZQK9by+wBIBS+o6X1/3CNv6NaN8s98NCVQaXF3nhbL3kuJj77JLmDizR2x4 2ljCK9o4nN6Kws+7jC7FIbj02rlAWo3F+EgnfitwYizibd+PbM0NV2J8F3PZISVdMh 2uVGXyf088kPw== Received: from alfajor (unknown [157.52.0.200]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id BFE8A120848; Mon, 29 Jun 2020 22:44:08 -0400 (EDT) From: Stefan Monnier To: Drew Adams Cc: Ergus , emacs-devel@gnu.org Subject: Re: Quit and Close Emacs Special Windows Message-ID: References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> Date: Mon, 29 Jun 2020 22:44:07 -0400 In-Reply-To: <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> (Drew Adams's message of "Mon, 29 Jun 2020 15:09:59 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.008 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 22:35:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 02:44:14 -0000 Hi Drew, What does this have to do with Ergus's message? [ Except that they both mention windows and buffers. ] Stefan Drew Adams [2020-06-29 15:09:59] wrote: >> I have been reading this site: >> >> https://urldefense.com/v3/__https://christiantietze.de/posts/2019/10/emacs- >> quit-special- >> windows/__;!!GqivPVa7Brio!MYwcdeIdWpFMGgsvTIkt5Vbrg69dFCUgHqpfuyAyObkHKL7IAog >> HWMmQFaH3DjBy$ >> >> and I am wondering why we don't provide an option to enable this >> behaviour by default in some cases without needing the "hack" in the >> link. It doesn't seems to be too complex to implement right? >> >> I know it is just a detail, but in some cases (like when using man or >> compile mode, or reading a function documentation, or after executing >> magit commands) it doesn't make sense to keep the buffer in the buffer >> list after pressing q in 90% of the times. >> >> Could we consider to add this as (for example) an option to enable it by >> default OR add a customisable list with the modes where the user could >> desire to have this behaviour? > > FWIW, I do this: > > (defun quit-window-delete (&optional kill window) > "Quit WINDOW, deleting it, and bury its buffer. > WINDOW must be a live window and defaults to the selected one. > With prefix argument KILL non-nil, kill the buffer instead of > burying it. > > This is similar to the version of `quit-window' that Emacs had before > the introduction of `quit-restore-window'. It ignores the information > stored in WINDOW's `quit-restore' window parameter. > > It deletes the WINDOW more often, rather than switching to another > buffer in it. If WINDOW is alone in its frame then the frame is > deleted or iconified, according to option `frame-auto-hide-function'." > (interactive "P") > (set-window-parameter > window 'quit-restore `(frame frame nil ,(current-buffer))) > (quit-restore-window window (if kill 'kill 'bury))) > > (global-set-key [remap quit-window] 'quit-window-delete) > > I also use dedicated windows for buffers with names `*...*', > and I make frame "hiding" delete frames rather than iconify. > > (setq special-display-regexps '("[ ]?[*][^*]+[*]")) > (setq frame-auto-hide-function 'delete-frame) From MAILER-DAEMON Mon Jun 29 22:48:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq6KN-0003Wu-Ca for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 22:48:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6KL-0003Wb-Pa for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:48:53 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:2470) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6KJ-00029G-K8 for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:48:53 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id AE62A440B5F; Mon, 29 Jun 2020 22:48:50 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 1D833440A3E; Mon, 29 Jun 2020 22:48:49 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593485329; bh=e7Qbl+xNdGQ1V1HyXZKLhiHrEGvDtfLPFeCnEeTwn0w=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=DcN1vo4za+FkmKIaJtnBpRc4zlmI8Q913vgngFq70QjATlvgUNMQoPVm/Q5x7hCE3 9AzNChzyvgXeMx7Gncq77WRUKNncmQHHJiSmZPXXDGQ5XnkVoJepSQlYVp36A5njAu ym9Qc9QhtDqg80Y0mK5YpQrOrxWzyUUjbq6wL5fKkSJ0pek4q50iX+yPOjRnhDn2mW /rRohsRwH/JkwyzYL7FpSWd1tXeO30fddf1tszhibx4+QVVqgnhCCgBgQDdaLnDJ4a 2AOI8HdJE8e7PxzotDXuFaEyOtPC9p7g5mo0yauwkSKqDNXApnerbYgdG+kmTK0/UA SD1fefaVatzgw== Received: from alfajor (unknown [157.52.0.200]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D71EB12089B; Mon, 29 Jun 2020 22:48:48 -0400 (EDT) From: Stefan Monnier To: Juri Linkov Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Message-ID: References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> <87h7uug7n9.fsf@mail.linkov.net> <87lfk5mrj4.fsf@mail.linkov.net> Date: Mon, 29 Jun 2020 22:48:47 -0400 In-Reply-To: <87lfk5mrj4.fsf@mail.linkov.net> (Juri Linkov's message of "Tue, 30 Jun 2020 01:43:03 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 22:35:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 02:48:54 -0000 >>>>> I'd rather try and avoid this complexity because I think it will become >>>>> problematic as more prefix commands get written. E.g. the ordering >>>>> problem doesn't only affect `C-u` but all other prefix commands, such as >>>>> `C-x RET c` (there currently aren't others bundled with Emacs, but there >>>>> are others out there). >>>> Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: >>>> `C-u C-x RET f`. >> Not sure how that relates to the previous paragraph. > I just discovered a prefix command that supports a prefix arg. > This doesn't mean of course that it should set a precedent > for other commands to follow. AFAIK `C-x RET f` is not a prefix command. >> Since I use `C-x 4` instead of `C-x 4 4`, I'd say that `C-x 1` would be >> the "natural" choice, but that's also already taken :-( > But you can still use `C-x 4 1` as a submap of your `C-x 4` map where commands > of the submap will display the buffer in the same window. Hmm... maybe `C-x 4 1` is a good choice for `same-window-prefix`. Stefan From MAILER-DAEMON Mon Jun 29 23:25:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq6te-0000de-4z for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 23:25:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6Nw-0004ba-Om for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:52:36 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]:37838) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jq6Nv-0002rd-5d for emacs-devel@gnu.org; Mon, 29 Jun 2020 22:52:36 -0400 Received: by mail-oi1-x230.google.com with SMTP id 12so9696493oir.4 for ; Mon, 29 Jun 2020 19:52:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=H6/uJKh48QqOMXyrhGGPZq1bmR63OBWtbav4SyRxqV8=; b=fvpOgtXhYgNWZULsTm1sJGpoSrPH8IddYN7b6L2dnVbwfLcNALpPIvGEZVqrCQfI2i H2s6o7l6Np0hyZ3br57pwJoNCHaj5LNUl+41lrmviXUJyGg01G3FhciHjSZD2TIkqub5 gZKzjwlXTrTiTLzTTD6yNKr3XZOpXVJtl8oNk15OpucXzDh4YAZvoHenps5QtQLE+Dyu WDtxRWtKMS50hL68yD8+p7e9tZGcuw0RtwwO3SKcVW2vQaD7sxrNN6SjpKXAlCzyV8S5 BkE4ymVmOxdUFCNr8ritwH7sWDiuUNhbMVpVQEmqB49fOwVl8LzRmf5k3pPKSp0kQRvX 0hUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=H6/uJKh48QqOMXyrhGGPZq1bmR63OBWtbav4SyRxqV8=; b=OOt5hSYR2tjMWfb2fv6VuFYKAKRA0lLNPnO35q+41Uq+Axu9MBjszMRYe2FAc5T3DX yb5xfQSVDW46flH3Ail5xy8psqTfNxLtuaaK9PnnPFYTGfwgKc1cv0BGn4F/7IsYzXq5 qqXNK9NFnceNqRBXq/0MHecI9lBy2nBjpT5loMKANkhMSZNKnk+5knnzFuXONNPrXXui tdxa2w7f082G1MOlynsPW1ZOoL6wczy12MZI/XOyq899yD2Koa6hE9PzwjFM/L54TXWM 38eQQ5QHPifzoMuJ5KD49g749LAPUGYHNma0chpqWUNjdBim4nAhJx/aHqO70/LqodDT syuA== X-Gm-Message-State: AOAM532lBX21MctrVRNatjDJYstlnRRNF8d294sJheR2oFTQXjKPCu3M bywyPi4gAAOt7AePxhxeMmiKkzyIWhZmy2HAIWSK8w== X-Google-Smtp-Source: ABdhPJzk/Yp3/IXaoIoGKCIh1tzjxhJ7EsgnnaBUchNRXQSgaMfpSXMs5HatS5OfOQmonW7RmU9rJHfytY2HgS5k1zA= X-Received: by 2002:a05:6808:24e:: with SMTP id m14mr14920217oie.67.1593485553274; Mon, 29 Jun 2020 19:52:33 -0700 (PDT) MIME-Version: 1.0 From: Liwei Ma Date: Tue, 30 Jun 2020 10:52:21 +0800 Message-ID: Subject: When will emacs 27.1 be officially released? To: emacs-devel@gnu.org Content-Type: multipart/alternative; boundary="0000000000005b98b105a944449a" Received-SPF: pass client-ip=2607:f8b0:4864:20::230; envelope-from=liwei.ma@gmail.com; helo=mail-oi1-x230.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Mailman-Approved-At: Mon, 29 Jun 2020 23:25:20 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 02:52:37 -0000 --0000000000005b98b105a944449a Content-Type: text/plain; charset="UTF-8" We wait for a new version too long this year:) Liwei --0000000000005b98b105a944449a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
We wait=C2=A0for a new version=C2=A0too long this year:)
Liwei
--0000000000005b98b105a944449a-- From MAILER-DAEMON Mon Jun 29 23:26:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq6uT-0001WG-42 for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 23:26:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6uR-0001Ub-Oa for emacs-devel@gnu.org; Mon, 29 Jun 2020 23:26:11 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:40428) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq6uP-0000yx-Rg for emacs-devel@gnu.org; Mon, 29 Jun 2020 23:26:11 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05U3IF8e115216; Tue, 30 Jun 2020 03:26:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=sauQRoIVzT+ww0C/kh8ciouIESVTEOHhhWube7EKL4o=; b=WXhhXsshmDXjYkFQboQM3sTJylqeGdN84b73hFCiSkHgjOphRa6WQUJ3LNIIvStzDS3R i75T5og4MXYM0VjfZZ1uET7e/qA5uzCEUz3nHQ6shsOQkzg0kqjAWjxOeD1Gr3HWVpk3 wqxfdaxOe5rFWjdsX7Ie5awbygL4jEMqDQE8Lfyw6pFSlAv40YfNA2ZhhCESX5TL6s8Z ZS1DjaGnDwS2nkrJ2Bff+dwLVpv6xxWDEd+P7UTSTI+u61ExWtTn1HkB8rcLcYnr94Ew aOQ1q4jBoZPwVkSl/hadyR1pqqUOV5JDBMDYgIGf91stC/2hFLXIFOM+7DOZEaiWDKs5 ug== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 31xx1dpjs6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jun 2020 03:26:05 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05U3IVxd193827; Tue, 30 Jun 2020 03:24:05 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3030.oracle.com with ESMTP id 31y52h8jf2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 30 Jun 2020 03:24:05 +0000 Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05U3O3kR002409; Tue, 30 Jun 2020 03:24:03 GMT MIME-Version: 1.0 Message-ID: Date: Tue, 30 Jun 2020 03:24:02 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Stefan Monnier Cc: Ergus , emacs-devel@gnu.org Subject: RE: Quit and Close Emacs Special Windows References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 mlxscore=0 adultscore=0 suspectscore=0 bulkscore=0 malwarescore=0 mlxlogscore=948 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006300023 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 clxscore=1015 adultscore=0 suspectscore=0 mlxlogscore=970 cotscore=-2147483648 lowpriorityscore=0 malwarescore=0 phishscore=0 impostorscore=0 mlxscore=0 spamscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006300023 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 23:26:08 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 03:26:12 -0000 > What does this have to do with Ergus's message? > [ Except that they both mention windows and buffers. ] If it doesn't, please ignore. I thought it did (and I thought Ergus thought so too). Sorry if I was mistaken. I thought he was asking about having `q' in such buffers delete the window more often, instead of preferring to restore some other buffer in it. From MAILER-DAEMON Mon Jun 29 23:55:31 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq7Mp-00057p-OH for mharc-emacs-devel@gnu.org; Mon, 29 Jun 2020 23:55:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq7Mo-00057b-W3 for emacs-devel@gnu.org; Mon, 29 Jun 2020 23:55:31 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43194) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jq7Mo-0007TC-MF; Mon, 29 Jun 2020 23:55:30 -0400 Received: from [176.12.143.36] (port=32722 helo=[10.213.116.219]) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1jq7Mn-0001uR-SV; Mon, 29 Jun 2020 23:55:30 -0400 Date: Tue, 30 Jun 2020 06:55:26 +0300 User-Agent: K-9 Mail for Android In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: When will emacs 27.1 be officially released? To: emacs-devel@gnu.org,Liwei Ma From: Eli Zaretskii Message-ID: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 03:55:31 -0000 On June 30, 2020 5:52:21 AM GMT+03:00, Liwei Ma wr= ote: > We wait for a new version too long this year:) Indeed, I think the development team should be fired, starting from the he= ad maintainer, who is clearly incompetent=2E They cannot even make a simpl= e release on time=2E From MAILER-DAEMON Tue Jun 30 00:27:27 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq7rj-0005iZ-3w for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 00:27:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq7rh-0005iP-Ji for emacs-devel@gnu.org; Tue, 30 Jun 2020 00:27:25 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:32352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq7rf-0003pA-Fq for emacs-devel@gnu.org; Tue, 30 Jun 2020 00:27:24 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 0B62010033A; Tue, 30 Jun 2020 00:27:22 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4DF44100283; Tue, 30 Jun 2020 00:27:20 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593491240; bh=LjKPqmIj5ZsW8v4jxA64pdK6m2aiOfgAGbRcSFIuFiE=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=K2naX+lmBxYRTY2OnQ/vop5u41sM+QH/VVDgCWSCn/Hg1H1tU4lYoXcHS6ghHm1KD 0ORsm/1Do4vHYKxp36EXtTa43zoVUvlbFWP+yKFZC3k+MvqvP1/Sd7jqrKcvmiI4mf YO0miQ3o45LvGQBO3NomQnHm4lgjG61lwVMykL2DBRR3D1A08NZy4BqEDBeWqZg+4y 5Z613HgvrDtXApAatSOb01ORTAN53LU0eT3jHYspZIP1DLhUEjJ9AHNV5ivOwqEIaZ 8RUlwXCMJnGTDGo82zz1MgT6N4Qv4iwovjPWXPdQULRkVRurOt6ectoG15EDnIckAR f8vrMp/8i1Psw== Received: from alfajor (unknown [157.52.0.200]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E2FDF1203FD; Tue, 30 Jun 2020 00:27:19 -0400 (EDT) From: Stefan Monnier To: Drew Adams Cc: Ergus , emacs-devel@gnu.org Subject: Re: Quit and Close Emacs Special Windows Message-ID: References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> Date: Tue, 30 Jun 2020 00:27:18 -0400 In-Reply-To: (Drew Adams's message of "Tue, 30 Jun 2020 03:24:02 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.024 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/29 22:35:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 04:27:25 -0000 > If it doesn't, please ignore. I thought it did > (and I thought Ergus thought so too). Sorry if > I was mistaken. > > I thought he was asking about having `q' in such > buffers delete the window more often, instead of > preferring to restore some other buffer in it. Maybe it does have to do with it, I don't know. There's much too much implicit in those messages. Please clarify. E.g. Ergus says: I know it is just a detail, but in some cases (like when using man or compile mode, or reading a function documentation, or after executing magit commands) it doesn't make sense to keep the buffer in the buffer list after pressing q in 90% of the times. so to me it seems like this doesn't have to do with whether windows get deleted but with whether buffers are kept (maybe at all, or maybe only in the buffer lists). Stefan From MAILER-DAEMON Tue Jun 30 01:24:55 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jq8lL-0002nZ-40 for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 01:24:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq8lI-0002nS-S9 for emacs-devel@gnu.org; Tue, 30 Jun 2020 01:24:52 -0400 Received: from wout4-smtp.messagingengine.com ([64.147.123.20]:49663) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jq8lH-0003lV-0F for emacs-devel@gnu.org; Tue, 30 Jun 2020 01:24:52 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id F416A340; Tue, 30 Jun 2020 01:24:47 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 30 Jun 2020 01:24:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= medranocalvo.com; h=content-type:content-transfer-encoding:from :mime-version:subject:message-id:date:cc:to; s=fm3; bh=R3YhOueRh t7WceXJ+wnK2RctDRP9NB23YXWjap1QrkE=; b=g9naw3fwgf6YbuFYtfcj1Ggy7 BI/W81hSBRjgbqp/ax9daaNxgFFhd3jCVbmSYBycwl05UEYXrkDJWm9N6yaJqmrK VU3mDbzcQYoPp+mpBaTS2GPUyq6uhVA/XOKHWxdLGTiI9GCIbRNN/qCh/nmgp59G 5kcaFtVR/ScVyLZ9l6THk+63ohu7ZcnozUIfoSp+lCexlIjdZaqT93FHgTy0XsNr R1MEmrz2LSF8lfBRUyBAF56EZPKfhItvJXkPyjS93osJtRGJrcFUoiWAqi4QYwPy XxNu09x/TsMThu7FAAzj2XglG2R5a6IaQgUj8C31MEjU2p8LAuZ8d6Zs2d8Ag== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=R3YhOu eRht7WceXJ+wnK2RctDRP9NB23YXWjap1QrkE=; b=sAI49BbswlnJThaYw0rXSZ VvceKwYwqWxTmtq96AA9Zf4ZAkycDotQ0eWJQgEyJHS5cq62mZsr2qo8OtRIfJjI BT6BXBE98L/ABwr0kLMsGXxbvwM/tJz4Eb94AtzoHDfGlG+ADNF1nu5LmQelIfVL cDuha09HpET2Dxfl/XmGhC7pgzRzjlOOtaJ1C+D6LyPyMSVKu6Bv2lfQOZbH8PQz 87YasTi+4P148PJIMs0qUXbQ3WuZQorbl4IoS9t6m3uD64YDrvGvwj3AdGXb1HGL 0NeQP/9q0kgIDpRJUcNqcxUaXXtkzEAGG8fyBG/oFO59mCwuAm0adtCWj7v1yKvg == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrvddttddgleejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptgfghfgguffkfffvofesrgejmherhhdtjeenucfhrhhomheptegurhhijohn ucfovggurhgriphoucevrghlvhhouceorggurhhirghnsehmvggurhgrnhhotggrlhhvoh drtghomheqnecuggftrfgrthhtvghrnhepjeekudeuvdeihefguddutdfhtddugefhvdfg gfeigefghfdutddvledvgefggeejnecukfhppedukeekrddujedvrdduudehrddutddvne cuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheprggurhhi rghnsehmvggurhgrnhhotggrlhhvohdrtghomh X-ME-Proxy: Received: from [192.168.100.114] (unknown [188.172.115.102]) by mail.messagingengine.com (Postfix) with ESMTPA id 27BE73280059; Tue, 30 Jun 2020 01:24:47 -0400 (EDT) Content-Type: multipart/alternative; boundary=Apple-Mail-8D8CF346-CE6B-4562-B723-8466F27D462E Content-Transfer-Encoding: 7bit From: =?utf-8?Q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Mime-Version: 1.0 (1.0) Subject: Re: HowTo: Log a message without displaying it? Message-Id: Date: Tue, 30 Jun 2020 07:24:45 +0200 Cc: "emacs-devel@gnu.org" To: "T.V Raman" X-Mailer: iPhone Mail (17F80) Received-SPF: pass client-ip=64.147.123.20; envelope-from=adrian@medranocalvo.com; helo=wout4-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 01:24:48 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, HTML_MESSAGE=0.001, MIME_QP_LONG_LINE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 05:24:53 -0000 --Apple-Mail-8D8CF346-CE6B-4562-B723-8466F27D462E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > On 30. Jun 2020, at 01:53, T.V Raman wrote: >=20 > The elisp docs talk about how to display a message, and how to disable > logging of that message. Is it possible to do the converse, ie log a > message to *Messages* *without* displaying the message? I suppose I > could directly access that buffer with (messages-buffer) and write to > it -- but is there a builtin/blessed elisp call that does this? >=20 > --=20 >=20 > -- =EF=BB=BFDoes the following help? (let ((inhibit-message)) (message "Hellau!")) Regards, Adri=C3=A1n.= --Apple-Mail-8D8CF346-CE6B-4562-B723-8466F27D462E Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable

On 30. Jun 2020, at 01:53, T.V Raman <raman@google.com> wr= ote:

The elisp docs t= alk about how to display a message, and how to disable
logging= of that message. Is it possible to   do the converse, ie log amessage to *Messages* *without* displaying the message? I suppos= e I
could directly access that buffer with (messages-buffer) a= nd write to
it -- but is there a builtin/blessed elisp call th= at does this?

--

= --



=EF=BB=BFDoes the following help?

(let ((inhibit-message))
  (message "Hellau!"))

Regards,
Adri=C3=A1n.
= --Apple-Mail-8D8CF346-CE6B-4562-B723-8466F27D462E-- From MAILER-DAEMON Tue Jun 30 04:12:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqBNi-0000rQ-UA for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 04:12:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqBNd-0000pt-Up for emacs-devel@gnu.org; Tue, 30 Jun 2020 04:12:38 -0400 Received: from mail.tuxteam.de ([5.199.139.25]:44874) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.90_1) (envelope-from ) id 1jqBNb-00035G-RN for emacs-devel@gnu.org; Tue, 30 Jun 2020 04:12:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=From:In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject:To:Date; bh=85pH8SUrXhG3O1WQ/EItcHHegGJhVdzCQLQ5y6wJlGg=; b=FnI0PL4/3bawVMqyhYrNIHwu9YQu8iGc5sQuQ2PMCa3NAS4k2amPQYNTTQV0YUh+4kBcqeFgWIbgkmDEeZskd9glh2fGpzUdGjgjl7qKj6CeJJzaV7VtgQTrIdjMbzgiQ0rGmaIgvtRL8VyOsQCJG39NycM2pfYloir6rczK4BZkN2kB75LMzPPCefPh4e6526YMoXonYebU+Wpj0oXaBCsDgSrzAF94i7pvDAUjSVjiQxqM53xIVE72A9brHTG+dhwTx+Ghb1jVkvmBXcmFrbWLmDID7rk7jUyxX31zYj4W/mgP4Q1V5YSUDYezW6iAhHLtoVtdqeAs6KrnSgdDtA==; Received: from tomas by mail.tuxteam.de with local (Exim 4.80) (envelope-from ) id 1jqBNZ-00033b-3Q for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:12:33 +0200 Date: Tue, 30 Jun 2020 10:12:33 +0200 To: emacs-devel@gnu.org Subject: Re: When will emacs 27.1 be officially released? Message-ID: <20200630081233.GA10360@tuxteam.de> References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="5mCyUwZo2JvN/JJP" Content-Disposition: inline In-Reply-To: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> User-Agent: Mutt/1.5.21 (2010-09-15) From: Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 04:12:33 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 08:12:38 -0000 --5mCyUwZo2JvN/JJP Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jun 30, 2020 at 06:55:26AM +0300, Eli Zaretskii wrote: > On June 30, 2020 5:52:21 AM GMT+03:00, Liwei Ma wrot= e: > > We wait for a new version too long this year:) >=20 >=20 > Indeed, I think the development team should be fired, I object. As a non-shareholder I can :-) > starting from the head maintainer, who is clearly incompetent. They cann= ot even make a simple release on time. Veto :) Cheers -- t --5mCyUwZo2JvN/JJP Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAl768/EACgkQBcgs9XrR2kbucwCff0qy9jb/lLz0GdHNrFXhgfh5 LwcAn2qQbPDYAAIQMVR85zQNS9Y96yuQ =hdUA -----END PGP SIGNATURE----- --5mCyUwZo2JvN/JJP-- From MAILER-DAEMON Tue Jun 30 04:52:51 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqC0Z-0003kc-4A for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 04:52:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqC0W-0003fA-Jl for emacs-devel@gnu.org; Tue, 30 Jun 2020 04:52:48 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:38969) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqC0U-0000sg-UN for emacs-devel@gnu.org; Tue, 30 Jun 2020 04:52:48 -0400 Received: by mail-wm1-x32e.google.com with SMTP id w3so6320870wmi.4 for ; Tue, 30 Jun 2020 01:52:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=RoOMmTTK1U04vj9IxxLD+Dohr0iXB5ZsQpm6Ze/0cIs=; b=kmPDFZZiXJsarzopU2LPlzLAuK4U4KQAHuBW31mLVNwoRBwTV1kJbFlZ0sTb7W+ICy rtHILBvhAm/S05CZjcrNHAn8sIfJ6KLcF3MDAsr0S/howXtetWV4gcJKeTUyoxbszHrt pQujwFU23lPZmVeeJ3RSgsqvljTiNhoE+gWOn5cBxGFVLbfi2+IjzpoIFZhPOdaEwQHu cgD0G1RurQQ8nLNN5odWO/f+0PEmw/uMPZC0FHZFsqwrk1ccZP2CQ2nJJi6sZMgEeNIK QYJDw7UwRD3aAOf+T0gkqFJUpOhsnozfIQ0Um0KjNS96oyX5JeIsQZD8RhUqxOy/TVX6 8jvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=RoOMmTTK1U04vj9IxxLD+Dohr0iXB5ZsQpm6Ze/0cIs=; b=FZvQF63mW5wKtD4J1RQT9xk8IcylUianhCbS9t9TTwTyQQpwB/LnPAbCyQBr8wGsM+ 6mpHm+kI+BFZ+MRd4bU5RLuOoGy27iZcN59USoVTKiP6P+KFei6ejksKG+aQfYeTkcFe e9tnXKBBPmr+qAPRRCYz0Dezp6B3ykPSHI7RIaVx1IPYDGdl1LMfA549qOScnfnDNSFh GK4NzPaSxrIYk1krq3wv9VIlSk+IK5mhe9EOI0FvR6OXegDSc9L0EKRosUa2DEloBJnX 6RPtSal1tiJ7M1pKCpuWrm5OzBIaXK9KHOc1bQC3C8K5EenykTjV3lWqT8CvYqDxFRJL 76pw== X-Gm-Message-State: AOAM533HIiB+4D7ygZ3fif2XYS8oq0aMRJf5JiCt5qY+5ND+cNnGcr0G NGj9hoBwYy4YQWKrmn6NE/ezbNBmkhYOpg== X-Google-Smtp-Source: ABdhPJzW/KQ17Xdz2JytBi1XXjATEnZsHt0St3A9yTmBfk3kuWPw8s1dtbpKEL0Nzq4+jT6UEjeDjw== X-Received: by 2002:a1c:ed17:: with SMTP id l23mr21641251wmh.73.1593507165007; Tue, 30 Jun 2020 01:52:45 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id 30sm3001753wrm.74.2020.06.30.01.52.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 01:52:44 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Stefan Monnier Cc: Juri Linkov , emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> <87h7uug7n9.fsf@mail.linkov.net> <87lfk5mrj4.fsf@mail.linkov.net> Date: Tue, 30 Jun 2020 10:52:43 +0200 In-Reply-To: (Stefan Monnier's message of "Mon, 29 Jun 2020 22:48:47 -0400") Message-ID: <87tuyt5410.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x32e.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 08:52:49 -0000 Stefan Monnier writes: >>> Since I use `C-x 4` instead of `C-x 4 4`, I'd say that `C-x 1` would be >>> the "natural" choice, but that's also already taken :-( >> But you can still use `C-x 4 1` as a submap of your `C-x 4` map where commands >> of the submap will display the buffer in the same window. > > Hmm... maybe `C-x 4 1` is a good choice for `same-window-prefix`. As a random passerby who thinks C-x 4 4 and C-x 5 5 are the best thing since sliced bread: yes please. Thank you for these new commands. From MAILER-DAEMON Tue Jun 30 05:52:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqCvv-0003NZ-1O for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 05:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqCvs-0003Mp-Sw for emacs-devel@gnu.org; Tue, 30 Jun 2020 05:52:04 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:52047) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqCvq-0002mS-OZ; Tue, 30 Jun 2020 05:52:04 -0400 Received: by mail-wm1-x331.google.com with SMTP id 22so18184220wmg.1; Tue, 30 Jun 2020 02:52:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=seGjlG5asnyA17Qh7C8x7s9PUZbDb8EiwPZXi2TdqMc=; b=qaci0pe21lV33aOPiZuDLew2QZTheu6gLWbxFNnUGE6kf+BP7tb/xX7cXToTeIwxlq 9XxGu3wdEh/Xx1BIzyxXHjt/jbcXypDAJf7knetg1+oeIIhjiT3U39iAV8OAKsA/pG+8 NR2Z2qlEG3wMV5hq6VjIx2mJ4W0s4yb0HDgt6PcHJEz3xQQmZ3PLIKDIyYlPwYtU2ALB LoMx7yOC4kTCccr+Nf+tbJqIItXHR2nzJWK1vCTMolbIvunVMd4iFQ+v+XuAr7pazcNS ExlGVPfIw9risqJwY0qI1HO7S4vkXsPNZjHYqKPBhJfUzU7+7JSCLyc2oGHLw6oMFKds BWYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=seGjlG5asnyA17Qh7C8x7s9PUZbDb8EiwPZXi2TdqMc=; b=KhqV0zdLgF2e9nOgvetPbhbYMY65oM4jlwa4qi+CPOwNbzicUhT+s7z7K32modWhN+ N546dKoceoecsx7djiglAboAU6eP+arbRL0iksufXblOaj63Flzv0L3Ni6kTPeh0wK6H +Q0OLQu5teGBlUYtE25JNZ986PUQB4EOM2Q1c0Fy54WvR2zBdkuLC68+X9VHAqxabfXw JAtt0/Uiy3Yo1hO1ENl+qgzbsFX/5IWQGtky6uG+SmWSDWUqHL13Qlm6Dtn+gSjuUoHs ayNOLn5zxPHVaXseYjF0qUi6oO98daknUYVl4fqja3Xn/DcSAQlfuHWI4KIYBGJ7pk+i bQIw== X-Gm-Message-State: AOAM530VaxSNA2d8btI7S2AfNukcAfMCZa6Bx5zIJkwTl1VVupJ7d82K Sh91CBNrZ8R1tMhDpZiFqoKIx+tknG3zmQ== X-Google-Smtp-Source: ABdhPJzYSeoj8AF7NOM3zfsa+d2sNVWjULNcpyJ20ZFDlsE/e5lOrHDcDGqhD7GyhXfUNdc1WzhJ7A== X-Received: by 2002:a05:600c:2f17:: with SMTP id r23mr19804630wmn.167.1593510720945; Tue, 30 Jun 2020 02:52:00 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id d132sm2900019wmd.35.2020.06.30.02.51.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 02:52:00 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: emacs-devel@gnu.org, Liwei Ma Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> Date: Tue, 30 Jun 2020 11:51:59 +0200 In-Reply-To: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> (Eli Zaretskii's message of "Tue, 30 Jun 2020 06:55:26 +0300") Message-ID: <87pn9g6fuo.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x331.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 09:52:05 -0000 Eli Zaretskii writes: > Indeed, I think the development team should be fired, starting from > the head maintainer, who is clearly incompetent. They cannot even > make a simple release on time. This. I mean, Emacs's roadmap is pretty well-defined; the user stories are scheduled very precisely, and the develop^Wvalidation team does a stellar job at finding regressions before features are integrated into the mainline. Now if only maintainers would do their job instead of drowsing off=E2=80=A6 More seriously though. - Does bug#39200 come anywhere close to an exhaustive list of issues to address before the 27 branch is considered stable? (Also can debbugs.el display the "blocked-by" list in a human-readable format?) - I dimly remember a discussion on bug-gnu-emacs between Eli and Dmitry a couple of months back, about how thorough the team should be about fixing regressions before releasing x.1. My 2=C2=A2: As a user, I think I'd find it acceptable to have a slightly less stable x.1 if I had the promise of more frequent x.(n+1) releases (bugfixes). See e.g. how many people use MELPA (live untagged commits from master) vs. MELPA stable (only tagged versions): it seems to me that there are some people out there who are comfortable living on the /bleeding/ edge, with all the occasional discomfort that entails. If we assume x.1 releases will have more exposure than x.0.z (pre-tests, RCs) by virtue of being packaged by distros, it could help bring issues to our attention faster, which means regressions could be easier to fix because we wouldn't have doubled down on problematic design choices (this is a very abstract observation, I don't have a concrete example of a recent "problematic design choice" hindering a bugfix). And it's not like distros packaging "broken" x.1 releases will break every user's workflow. Take gcc on Ubuntu for example: the default "gcc" package on 20.04 is 9.3, but adventurous users can already try out version 10 by installing "gcc-10", thereby opting in explicitly and deliberately for new features, and potential breakage. I hope this doesn't come across as armchair commentary; apologies if it does. And many thanks to "the development team" :) From MAILER-DAEMON Tue Jun 30 09:01:28 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqFtA-0008L8-Nt for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 09:01:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53234) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqFt8-0008Ku-P4 for emacs-devel@gnu.org; Tue, 30 Jun 2020 09:01:26 -0400 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]:39164) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqFt7-0000TS-0z for emacs-devel@gnu.org; Tue, 30 Jun 2020 09:01:26 -0400 Received: by mail-ed1-x52d.google.com with SMTP id d18so10431053edv.6 for ; Tue, 30 Jun 2020 06:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=XgBtE/5SUDOdtcBAWPVrNOzmfgXogzhh4pElsQkL/mA=; b=Nw8Zm/8c2soW241lSR6MURm7P/MCxnboK29FAY8zBXX5xM9/VSwdtWoSgL/DaH/N53 FuuHCitJBqtUYKX+rqNkj56pI3hqQ4Eg+OVmkhovyTe4/coQyN0FIo84+ZtrlWUuhL0v kmWcTlpdqIxWKyTNWvsZvaVZLpK3Oys1orUiZ4KflbnHe/QoQRAdpH/KEyOUR+ySb927 H3d0VnTE8bZsEHi5rAa2l+tz5J7zSR+SiTK1EzSiRF61/pb/Vqp4DKICMPnWxFscnEUo 5YdaFvU0Cfr9IrjUc2xgMhUtcgpqZyEuWul1qy+yI7YlHhmBaVnPgFQjNTqlDd9P2AZ6 wxzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=XgBtE/5SUDOdtcBAWPVrNOzmfgXogzhh4pElsQkL/mA=; b=YP/vkXZkLeMaJcHkSBrjbV6nuyUU6BmdJPRr1iHFULAIT7+b3v/LAUnPqevui0Gkwn 34XpSx3vyQUHAcVatuGW5L/QtNVnSyp9hG/Q84ydNYULijkgFje2qHbHoZ8JGaFXXnIu qTfcUm5+GmdVcfru13lp3K4Q1/7yRqXQTdhu1NeLXOhmDalO8aNqax1qYpxzylIa5vHd B9CSQp21BRXoKLFrJ3VVn0V2ZxkoPRt0pQ8I18WmoA5CEoZ4Y4kjuaq3rb/mY+St39zj 7DPfQINWAOMDlr+acXKGU0FGq250Esykc+d36HfkHEmX3ZQAEKrbqlElIrnXAbPh3wSR ytbQ== X-Gm-Message-State: AOAM531nbXm8RXbQS5V2/SsVP10wlNzl9Vo9ixpHOtjpfBHme9W+6XRN EEJaf1a7eE563/8ROYAXsxFKWw== X-Google-Smtp-Source: ABdhPJySMU2PD6dIf9Q4oexBpfCYBb+r6HbOrskMoDM8BHl1D+Hn0q+VtSRS/To5kBT4CXEE0B0Qpg== X-Received: by 2002:aa7:d446:: with SMTP id q6mr23161494edr.218.1593522081702; Tue, 30 Jun 2020 06:01:21 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id q25sm1975981ejz.97.2020.06.30.06.01.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 06:01:20 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Cc: emacs-devel@gnu.org, Liwei Ma Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> Date: Tue, 30 Jun 2020 14:01:19 +0100 In-Reply-To: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> (Eli Zaretskii's message of "Tue, 30 Jun 2020 06:55:26 +0300") Message-ID: <87r1twyag0.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: none client-ip=2a00:1450:4864:20::52d; envelope-from=contovob@tcd.ie; helo=mail-ed1-x52d.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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 13:01:27 -0000 Eli Zaretskii writes: > On June 30, 2020 5:52:21 AM GMT+03:00, Liwei Ma wrote: >> We wait for a new version too long this year:) > > Indeed, I think the development team should be fired, starting from the head > maintainer, who is clearly incompetent. They cannot even make a simple release > on time. Does Emacs have its own trade union yet? -- Basil From MAILER-DAEMON Tue Jun 30 09:07:58 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqFzS-0004LG-Ar for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 09:07:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqFzQ-0004Jk-Uq; Tue, 30 Jun 2020 09:07:56 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]:51274) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from ) id 1jqFzO-0001bw-VJ; Tue, 30 Jun 2020 09:07:56 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:105:465:1:1:0]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 49x4Qs3b4LzQlK0; Tue, 30 Jun 2020 15:07:49 +0200 (CEST) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by hefe.heinlein-support.de (hefe.heinlein-support.de [91.198.250.172]) (amavisd-new, port 10030) with ESMTP id I9CjNsihbaZN; Tue, 30 Jun 2020 15:07:45 +0200 (CEST) Date: Tue, 30 Jun 2020 15:07:44 +0200 From: Vasilij Schneidermann To: Friedrich Beckmann Cc: emacs-devel@gnu.org, PSPP Development Mailing List Subject: Re: [ELPA] New package: pspp-mode.el for PSPP/SPSS syntax highlighting Message-ID: <20200630130744.GC451135@odonien.localdomain> Mail-Followup-To: Friedrich Beckmann , emacs-devel@gnu.org, PSPP Development Mailing List References: <136BE842-9BBB-4D69-A994-705993AF58EC@gmx.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="uxuisgdDHaNETlh8" Content-Disposition: inline In-Reply-To: <136BE842-9BBB-4D69-A994-705993AF58EC@gmx.de> X-MBO-SPAM-Probability: 0 X-Rspamd-Score: -5.55 / 15.00 / 15.00 X-Rspamd-Queue-Id: 0091617FE X-Rspamd-UID: f06334 Received-SPF: pass client-ip=80.241.56.172; envelope-from=mail@vasilij.de; helo=mout-p-202.mailbox.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 09:07:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] 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, 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, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 13:07:57 -0000 --uxuisgdDHaNETlh8 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello Friedrich, > The file is available here: >=20 > http://git.savannah.gnu.org/cgit/pspp.git/tree/pspp-mode.el >=20 > Can you integrate that in gnu elpa? The GNU ELPA Readme [1] explains the necessary steps for this. One prerequisite is following the coding style, there's a number of things stic= king out in your code: - Inconsistent paragraph spacing (sometimes the expected newline is missing, sometimes there's two or three of them, with no clear reason why). - Lone opening/closing parentheses are something to be avoided, please keep these together. - Indentation of comments is inconsistent and doesn't line up with code. - The major mode definition should use `define-derived-mode`, that way you = no longer need to manipulate major mode name/hooks/local variables/syntax tables/key maps. All but the last point are elaborated in further detail in Riastradh's Lisp Style Rules [2]. Vasilij [1]: http://git.savannah.gnu.org/cgit/emacs/elpa.git/plain/README [2]: https://mumble.net/~campbell/scheme/style.txt --uxuisgdDHaNETlh8 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE0dAcySl3bqM8O17WFmfJg6zCifoFAl77OSAACgkQFmfJg6zC ifrA7Qf+J6LvhDO83NcdjEkCwNW1OSUVNwiFjgPjWON6UJyQsLznif0ulLUnIiU9 Ri7WMPSBze9kuZAtAkLStyPeJhj7Xw/py41aqtj/LRwzX00HSI4t9Utzm2vtanAS G1zT7IhKXX7c2yqRfiit15Q+uHdpd/gGViD0twHpMDzkeCz/m2OQlriym3iGLM5X c1uZ17tSpEo2vLA5hhjvkw9d+An8LxYT+uKo5vz538C+adoHonEw6zuNbyY+JUEK bbtzUCiJ4sp68eAtXKpDIjCdAjFj/pIV4Nq6a4Ncn4TLq3eLi5SbXb+vtiOS6QCF hsHock8CEs++SYTYAHoKF1r/Av23fA== =Z+5J -----END PGP SIGNATURE----- --uxuisgdDHaNETlh8-- From MAILER-DAEMON Tue Jun 30 10:06:21 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqGtx-0003UW-6q for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 10:06:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqGtw-0003U1-12 for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:06:20 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:22470) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqGtt-0003BI-PH; Tue, 30 Jun 2020 10:06:19 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 2020E80B74; Tue, 30 Jun 2020 10:06:16 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 60DD9808BE; Tue, 30 Jun 2020 10:06:14 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593525974; bh=ZgxYi+Q/ZDiiOKX2uhHwgii23SGHZjCb4zxiNR3oCAw=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=aa8C9CHGoQbP1JPctRgRmIjMRIdM9fiapQDKPF8moea3mmQPSs4FayGEfxRX/ltUC WmqVvud8JSTEsOPP3pn3ieHhcgCc0vvEUvqWWxx1wzpycm/QH5KX468RTQiwoTlf/M 0roJtwTV3S5sx+ZxNtwvKwtnpWJe3+4gXSUxTqa/XZ2yMNI9/clWnTSk7LH0cI+1Z0 nJvRmClTCfCVPc36jwZ8ycAGVLa33/yzWLnmLL92Xy9E90DmTLwE9OtyqMPuEzyekt v55EqlkUShwPnS+vLWrrExKxYl4iFHk9MNop5hH0kmFCYZNBAO4G5N6im4Ispwip8h lN/VA43H0ZiKw== Received: from alfajor (unknown [157.52.0.200]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 1908F12083F; Tue, 30 Jun 2020 10:06:14 -0400 (EDT) From: Stefan Monnier To: "Basil L. Contovounesios" Cc: Eli Zaretskii , Liwei Ma , emacs-devel@gnu.org Subject: Re: When will emacs 27.1 be officially released? Message-ID: References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87r1twyag0.fsf@tcd.ie> Date: Tue, 30 Jun 2020 10:06:13 -0400 In-Reply-To: <87r1twyag0.fsf@tcd.ie> (Basil L. Contovounesios's message of "Tue, 30 Jun 2020 14:01:19 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.017 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 10:06:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 14:06:20 -0000 >>> We wait for a new version too long this year:) >> Indeed, I think the development team should be fired, starting from the head >> maintainer, who is clearly incompetent. They cannot even make a simple release >> on time. > Does Emacs have its own trade union yet? Of course, but the maintainer is an administrator position. Stefan From MAILER-DAEMON Tue Jun 30 10:28:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqHFS-0003j4-Vj for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 10:28:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqHFR-0003iy-W1 for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:28:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:50713) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jqHFR-0006zN-Di; Tue, 30 Jun 2020 10:28:33 -0400 Received: from [176.228.60.248] (port=4556 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jqHFQ-0003fL-3u; Tue, 30 Jun 2020 10:28:32 -0400 Date: Tue, 30 Jun 2020 17:28:25 +0300 Message-Id: <83pn9gzkza.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" Cc: emacs-devel@gnu.org, liwei.ma@gmail.com In-Reply-To: <87r1twyag0.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87r1twyag0.fsf@tcd.ie> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 14:28:34 -0000 > From: "Basil L. Contovounesios" > Cc: emacs-devel@gnu.org, Liwei Ma > Date: Tue, 30 Jun 2020 14:01:19 +0100 > > Does Emacs have its own trade union yet? No. Suggestions how to start that might be welcome. From MAILER-DAEMON Tue Jun 30 10:35:41 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqHML-00081D-7a for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 10:35:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqHMG-000810-HF for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:35:36 -0400 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]:42721) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqHME-0007zR-QX for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:35:36 -0400 Received: by mail-lj1-x231.google.com with SMTP id h22so15699570lji.9 for ; Tue, 30 Jun 2020 07:35:33 -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 :cc; bh=zzJ73832dQ3zTigwOgTnbwhalIjOJ+x5Nx4B9OFB/88=; b=SadfDI/GVVKvMwNCe7xyIu7rTWYAPR77RZ6f6VUOdU2Hcv/r7yGCgaW3vQFOGIda20 mUgtVl25+t7TKZMYTQOZ4HLyug4+WAyaRoy44EcXtoQ9XeOqWK1LQ+Pselsjea8mr4KY Z9IweNPWocEYh2smLhcd1TqHrPXjEosKuWDtZHMTxDfF4GP+6lHgtDk2zjEamLVDrJ4w aujtegOWARvKgCd2j7iniToxjguNQfr+liL8TOCnYFkkeJsZw0wvswQ/lKiR1TbbAUEa YLTG6JacD07mVfvjtXkzE6UFb4mwzq1VkQN/SRln2AgaGPK50vd70v0bqyI+TiuoSM6K bHIg== 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:cc; bh=zzJ73832dQ3zTigwOgTnbwhalIjOJ+x5Nx4B9OFB/88=; b=ZC/wEEhW35C41BjqbG8wbWLmreJNRXKzBRDp/ocp6mqokxf3ckdqYe6v2q6ZrJ3ut4 9xYqpc5zzCVT9WhMu737NPBTUSAlfYKUVE2lS6UENt2zCKXZJq9PUfKU/JFsINOivw08 c8oeDTsSgltC6NHzrao+jQza7Tw4lnIIr+eMeimytH5IXUj7qpamC1uEpnsCr96tGJ7M lazpAD4u9M3/TTJ1c/fjLmGuFok51u4XLj+YsELBF6QOgMd3/W7Jje91UyjIQAGTuUVp Bji5zqrAwKiQa6DGgdcCdUeu+74fKg9ikehz2WLh0yX49bqCG4sE8fyQJYS1ctb9M9fN BHWw== X-Gm-Message-State: AOAM532AFxlk0bBbWFEN7SpRmozJO4jS1VUHnZXyw/oz6VyQb23mK5vN FFtzI6x5h2EAfd3awZz0Fby+rDbhvgOblYYBNTs= X-Google-Smtp-Source: ABdhPJy6u+8po/o9zw9Bd37DABce+oD3IpyA9LqLSIyo3wP7X32tA6T0/xknYDbO2fsLufUKoG3e2CK9vdjg13shkiQ= X-Received: by 2002:a2e:860d:: with SMTP id a13mr2889388lji.128.1593527732546; Tue, 30 Jun 2020 07:35:32 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Rostislav Svoboda Date: Tue, 30 Jun 2020 16:34:56 +0200 Message-ID: Subject: Re: When will emacs 27.1 be officially released? To: Liwei Ma Cc: "emacs-devel@gnu.org Development" Content-Type: multipart/alternative; boundary="00000000000070311905a94e1647" Received-SPF: pass client-ip=2a00:1450:4864:20::231; envelope-from=rostislav.svoboda@gmail.com; helo=mail-lj1-x231.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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 14:35:36 -0000 --00000000000070311905a94e1647 Content-Type: text/plain; charset="UTF-8" > We wait for a new version too long this year:) I have a good experience with compiling and using emacs-NextRelNr branches. Since at least emacs-25 (~4 years). I made myself a fish-shell script https://github.com/Bost/dotfiles/blob/master/fish/functions/make-emacs.fish to compile the code and git-tag it, if there's a change in the code files since my last compilation. (The script doesn't proceed with compilation if only documentation changed.) I tag the repo just in case something's broken, so I can just checkout the previous tag and rerun my script. (The script is not 100% maintenance-free, but I don't bother editing it now and then.) I use spacemacs (daily), mostly for clojure development. And I update spacemacs, plus installed packages almost daily. Everything works fine and I don't encounter any problems more than once a year, including problems with packages. The only problem I have is with freezes when editing larger files (> ~1MB) especially with long lines. But that's a general and long standing issue. In such a case I just `killall emacs` and try to run `emacs --no-init-file`. It helps in about 50% of the situations. --00000000000070311905a94e1647 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
> We wait for a new version too long this year:)
I have a good experience with compiling and using emacs-Ne= xtRelNr branches. Since at least emacs-25 (~4 years). I made myself a fish-= shell script https://github.com/Bost/dotfiles/blob/master/fish= /functions/make-emacs.fish to compile the code and git-tag it, if there= 's a change in the code files since my last compilation. (The script do= esn't proceed with compilation if only documentation changed.) I tag th= e repo just in case something's broken, so I can just checkout the prev= ious tag and rerun my script. (The script is not 100% maintenance-free, but= I don't bother editing it now and then.)

= I use spacemacs (daily), mostly for clojure development. And I update space= macs, plus installed packages almost daily. Everything works fine and I don= 't encounter any problems more than once a year, including problems wit= h packages.

The only problem I have is with freeze= s when editing larger files (> ~1MB) especially with long lines. But tha= t's a general and long standing issue. In such a case I just `killall e= macs` and try to run `emacs --no-init-file`. It helps in about 50% of the s= ituations.
--00000000000070311905a94e1647-- From MAILER-DAEMON Tue Jun 30 10:37:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqHOP-00018n-V5 for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 10:37:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqHON-00017t-SB for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:37:47 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:40812) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqHOM-00006e-9a for emacs-devel@gnu.org; Tue, 30 Jun 2020 10:37:47 -0400 Received: by mail-pg1-x534.google.com with SMTP id e18so10038305pgn.7 for ; Tue, 30 Jun 2020 07:37:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=b3HfIts5kxGyoghUguOZZB2oFDUPbED/FVdMA/1OhUw=; b=VSx+sqpBeOUj07rsb1KWgn6e+/30tRXAg0wVGcT7cUJ61/FJXpm+Kkz185jSH1E9KV wpgU7jRddFmAzPeRjG3Esmjf7gxqnnrmQTVbtjctTnrptijCk8QlOWy2HFehg2b4TWar Ji32pnhn4XUgJAHBtDDN7PxDNreA5fEqHaFWHpIAOlo+7/0A78G7Hkp00v1OgZHj7ZrB s6SYQz3qydndidDtOWaghTvfO1hnDlcJZVRkeUzDHENFXwNlbedsF53ykbW8rNGfqB+L wgSMT0oeNsVcp7T92rjcld+iy9K4z3ngRMLMwTtCvu75sEQVJwGot8fN9fgAAN4yfUaa wshQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=b3HfIts5kxGyoghUguOZZB2oFDUPbED/FVdMA/1OhUw=; b=OecarRdA409Lk79YpPNi1bXFyNQ9dy/htkVShunzgozvGXnYsuVmki6JfdNRczvJN4 gWs/OiFLNKq49E4jOA3twAp6cPsF3kv8Ls4daTElqvgpcsRyqCWGU03EPx7/xxwVV7Rt 89A5koH1MNy630MhFrcWxp4fG4LrwqNB1aF45M/X238Oel6fo4h+YH9ch6RdYv39M2Dl h1Krng3sUbBr+KfGJo3Kt0trE0m/f69bIO8aEogmS/evWrA4aH1r2TzV1mYc3IBFpGG7 ZodPdKPL1mbIxqC0hy20weNYe9yY2b0WbM0byIEw15UIqlK6p7fEgw6PRnjQYtzXys8a JYaA== X-Gm-Message-State: AOAM530kw2w8lIPZOn9JYChmqmcniGRIGTCL2DWXHbNfd54JmHlBq9Vb QrS4mgo1Gvpyq+l+X4ttc6ou40V5/hvBBg== X-Google-Smtp-Source: ABdhPJwaR06vB/VcAKa0EEm6rQ1tmGqakGxpngIKfPUroivkLIhA2ScJ7t5y9INLRh7K8/eNcK4yBg== X-Received: by 2002:a63:7cf:: with SMTP id 198mr14871088pgh.309.1593527864184; Tue, 30 Jun 2020 07:37:44 -0700 (PDT) Received: from raman-glaptop.localdomain (c-24-4-174-65.hsd1.ca.comcast.net. [24.4.174.65]) by smtp.gmail.com with ESMTPSA id p189sm2937624pfb.217.2020.06.30.07.37.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 07:37:43 -0700 (PDT) Received: by raman-glaptop.localdomain (Postfix, from userid 13930) id 64FC9C23C86; Tue, 30 Jun 2020 07:37:42 -0700 (PDT) From: "T.V Raman" To: =?iso-8859-1?Q?Adri=E1n_Medra=F1o?= Calvo Cc: "emacs-devel@gnu.org" Subject: Re: HowTo: Log a message without displaying it? References: Date: Tue, 30 Jun 2020 07:37:42 -0700 In-Reply-To: (=?iso-8859-1?Q?=22Adri=E1n=09Medra=F1o?= Calvo"'s message of "Tue, 30 Jun 2020 07:24:45 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=raman@google.com; helo=mail-pg1-x534.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: -185 X-Spam_score: -18.6 X-Spam_bar: ------------------ X-Spam_report: (-18.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 14:37:48 -0000 Yes, that does work:-) -- From MAILER-DAEMON Tue Jun 30 11:39:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqIM4-0005Bh-U4 for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 11:39:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqIM3-000594-Oi for emacs-devel@gnu.org; Tue, 30 Jun 2020 11:39:27 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:45300) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqIM1-0003LR-Ma for emacs-devel@gnu.org; Tue, 30 Jun 2020 11:39:27 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05UFRHZ6175689; Tue, 30 Jun 2020 15:39:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=Ml3jwXhYuhX/MCtkSCWqzmaJ9pn6aprE76SXmbD599Y=; b=DBnxh0+EB5gvE4OesXjHTgkJNjFqmz5aQ/I6PD9Co5KI5L1UBO2Vd3hvPn5GnPmi6B+/ rQvfERK2cPfrltlhtbcWTUEkWQ4IA+Lz0yPjVhrOM9ruReA0dLUwV30d8MirHDn3W/n2 fZPW66aK5lnWMKz1mNP8T62OnhJnsmRMy0oxVDP1CJrlmD1sotZ74A07vogQk02rg7ML f/Tuw5MR9UyFVVhG3OXymwap0vZrabYwPrT1GTA8SZBT/fEvIVLg4vMapEAxbrOpLpFb nV9tbnpIeO0HbLv1WhOMkAuJcabBMbQqOiZ6QMv3YUl45llD4DlULDxrco47qzF7De0K LQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2120.oracle.com with ESMTP id 31wxrn596e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jun 2020 15:39:20 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 05UFMfMa098500; Tue, 30 Jun 2020 15:39:19 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3020.oracle.com with ESMTP id 31xg13qaj8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 30 Jun 2020 15:39:19 +0000 Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 05UFdHkH031413; Tue, 30 Jun 2020 15:39:18 GMT MIME-Version: 1.0 Message-ID: Date: Tue, 30 Jun 2020 15:39:16 +0000 (UTC) From: Drew Adams Sender: Drew Adams To: Stefan Monnier Cc: Ergus , emacs-devel@gnu.org Subject: RE: Quit and Close Emacs Special Windows References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <3c578050-2a23-411e-bad0-c26a7c7ed5ee@default> In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5017.0 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 mlxscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006300112 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9667 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=999 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 cotscore=-2147483648 lowpriorityscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006300112 Received-SPF: pass client-ip=156.151.31.85; envelope-from=drew.adams@oracle.com; helo=userp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 11:39:22 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -63 X-Spam_score: -6.4 X-Spam_bar: ------ X-Spam_report: (-6.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 15:39:28 -0000 > > If it doesn't, please ignore. I thought it did > > (and I thought Ergus thought so too). Sorry if > > I was mistaken. > > > > I thought he was asking about having `q' in such > > buffers delete the window more often, instead of > > preferring to restore some other buffer in it. >=20 > Maybe it does have to do with it, I don't know. > There's much too much implicit in those messages. > Please clarify. >=20 > E.g. Ergus says: >=20 > I know it is just a detail, but in some cases (like when using man or > compile mode, or reading a function documentation, or after executing > magit commands) it doesn't make sense to keep the buffer in the buffe= r > list after pressing q in 90% of the times. >=20 > so to me it seems like this doesn't have to do with whether windows get > deleted but with whether buffers are kept (maybe at all, or maybe only > in the buffer lists). Yes, I saw that too. But the overall question seemed to me to be about deleting the window. And that was the point of the blog he linked to, which he said does what he wants. The blog title is "Quit and Close Emacs Special Windows Like Help and Compilation Results". I agree that the original problem to be solved wasn't specified too clearly. I notice (in various places) that some users say "buffer" when they really mean "window" - it's pretty common on emacs.SE, for instance. Anyway, you understand my (mis?)interpretation of the question now, and thus my response. If my response was off-topic, sorry about that. From MAILER-DAEMON Tue Jun 30 12:58:12 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqJaG-000645-Bo for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 12:58:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqJaF-00063x-1k for emacs-devel@gnu.org; Tue, 30 Jun 2020 12:58:11 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52870) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jqJaE-0000tY-PQ; Tue, 30 Jun 2020 12:58:10 -0400 Received: from [176.228.60.248] (port=1941 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jqJaD-0002V0-Ps; Tue, 30 Jun 2020 12:58:10 -0400 Date: Tue, 30 Jun 2020 19:58:02 +0300 Message-Id: <83bll0ze1x.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?K=C3=A9vin?= Le Gouguec Cc: emacs-devel@gnu.org, liwei.ma@gmail.com In-Reply-To: <87pn9g6fuo.fsf@gmail.com> (message from =?utf-8?Q?K=C3=A9vin?= Le Gouguec on Tue, 30 Jun 2020 11:51:59 +0200) Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 16:58:11 -0000 > From: Kévin Le Gouguec > Cc: emacs-devel@gnu.org, Liwei Ma > Date: Tue, 30 Jun 2020 11:51:59 +0200 > > More seriously though. > > - Does bug#39200 come anywhere close to an exhaustive list of issues to > address before the 27 branch is considered stable? I tend to treat these "blocking" bug reports as advisory only. E.g., the bugs you see there now (a) don't sound too serious to me, and (b) don't seem to cause anyone to go out of their way fixing them. So if you think this is what prevents us from releasing Emacs 27.1, it's not. > (Also can debbugs.el display the "blocked-by" list in a human-readable > format?) What's wrong with the current display? > As a user, I think I'd find it acceptable to have a slightly less stable > x.1 if I had the promise of more frequent x.(n+1) releases (bugfixes). The main problem is how to translate "slightly less stable" and "more frequent" into actionable procedures that we can support given the resources. We all agree with these principles (well, at least I do), but Life™ is more complex than we'd like it to be. See below. > See e.g. how many people use MELPA (live untagged commits from master) > vs. MELPA stable (only tagged versions): it seems to me that there are > some people out there who are comfortable living on the /bleeding/ edge, > with all the occasional discomfort that entails. MELPA is a collection of Lisp packages. Lisp packages seldom cause catastrophic problems in a running session, like crashes, loss of edits, etc. Our job is more complex and the dangers from releasing a less-than-stable Emacs are higher. That's one reason why we cannot follow that example. Another reason is that each MELPA package is quite small and simple, certainly in comparison with Emacs. So the time and effort needed for the maintainer to put out a new version are much smaller than what we need. Even the most mundane aspect of an Emacs release, such as update of the documentation and NEWS, takes orders of magnitude more time for us than it takes for an elpa package. Would you agree to release Emacs with incorrect/inaccurate/outdated manuals? > If we assume x.1 releases will have more exposure than x.0.z (pre-tests, > RCs) by virtue of being packaged by distros, it could help bring issues > to our attention faster, which means regressions could be easier to fix > because we wouldn't have doubled down on problematic design choices > (this is a very abstract observation, I don't have a concrete example of > a recent "problematic design choice" hindering a bugfix). See, that's another factor that people tend to forget or ignore: it takes a long time for Emacs problems to be discovered and reported. A new Emacs release can take years to reach end users. We are routinely receiving bug reports about changes made two or more releases ago. If you are looking for a single most important reason why it takes so long to put out another pretest, it is this one: experience shows that it takes weeks if not months for enough people to try a pretest and report the problems they see. Once a problem is reported, it is usually fixed very quickly, but how do you know the important problems were all discovered, except by waiting? > And it's not like distros packaging "broken" x.1 releases will break > every user's workflow. That's true, but Emacs has a reputation of being very stable, even for the development snapshots. Breaking the workflow of even a single user causes that user grief and is not welcome. Especially since an emergency bugfix release is also not something we can do quickly enough, as one or two occurrences in the past have shown. > Take gcc on Ubuntu for example: the default "gcc" package on 20.04 > is 9.3, but adventurous users can already try out version 10 by > installing "gcc-10", thereby opting in explicitly and deliberately > for new features, and potential breakage. I don't think you can compare breakage of a compiler with breakage of Emacs. A broken compiler can fail to build a program, which is not a catastrophe; losing several hours of editing can well be a catastrophe. So once again, the practical issue here is what to do differently to make the releases more frequent, without losing too much of stability and other good qualities. I mean practical measures, not general considerations with which everyone will agree. E.g., let's start with a small step: how do we make the effort of preparing the manuals and NEWS for a release less time-consuming? From MAILER-DAEMON Tue Jun 30 13:05:06 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqJgw-0001kn-Ha for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 13:05:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37958) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqJgv-0001jF-4k for emacs-devel@gnu.org; Tue, 30 Jun 2020 13:05:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:44904) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqJgs-0002MU-Nh for emacs-devel@gnu.org; Tue, 30 Jun 2020 13:05:04 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 08B8280A02; Tue, 30 Jun 2020 13:05:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id C341D80207; Tue, 30 Jun 2020 13:04:58 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1593536698; bh=TcggewkWX33NcGYcoknIEAFc/7CSpSKWkyCoGwOtUd0=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=mTG7yV3ZWvrMMv3+MLddXBN45EpiVYGNmFydSNdQjbV+4MUI9G8hhD8w7H+YWmdt8 AuxRlJtfjv0giz8/NSD96QuHZp8NQs9GZKBpFL2TjqYrD9bC6yjUhezsYdphafFOdD o+keyQuuF6mhbYa4oxnj7+yfAODQHbTv9pkfe+sK4MadpEjjdn9WdnXb1pCL8DfIBO vPwaAcqj/J3CwAO+uJHlRFX4MIMYrYKm5LGV3f2eu3cXnxwBwdsh3TLGPSJeDyCbeL kicFqtgxlJCVEw7o8/uy4d972JDj8hoVDKYTU0B0C0ctjfXzjgw02V5BwkFygPmz8E plrqrfEQwf6WQ== Received: from alfajor (unknown [157.52.0.200]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9270E120AE8; Tue, 30 Jun 2020 13:04:58 -0400 (EDT) From: Stefan Monnier To: Ergus Cc: emacs-devel@gnu.org Subject: Re: Quit and Close Emacs Special Windows Message-ID: References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> Date: Tue, 30 Jun 2020 13:04:57 -0400 In-Reply-To: <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> (Ergus's message of "Mon, 29 Jun 2020 16:40:23 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.016 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 13:05:01 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 17:05:05 -0000 > I have been reading this site: > > https://christiantietze.de/posts/2019/10/emacs-quit-special-windows/ > > and I am wondering why we don't provide an option to enable this > behaviour by default in some cases without needing the "hack" in the > link. It doesn't seems to be too complex to implement right? What do you mean by "this behavior"? I just tried emacs -Q M-x compile ..select the compilation window... q and sure enough I was back to a single-window setup. So, IIUC we already provide "this behavior". > I know it is just a detail, but in some cases (like when using man or > compile mode, or reading a function documentation, or after executing > magit commands) it doesn't make sense to keep the buffer in the buffer > list after pressing q in 90% of the times. I don't understand the connection with the previous paragraph. Stefan From MAILER-DAEMON Tue Jun 30 14:52:34 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqLMw-0007wf-7N for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 14:52:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqLMt-0007wT-Sa for emacs-devel@gnu.org; Tue, 30 Jun 2020 14:52:32 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:38462) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqLMr-0002Dl-9q; Tue, 30 Jun 2020 14:52:30 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 6E89A1600B2; Tue, 30 Jun 2020 11:52:26 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Atf-aW4F8KVG; Tue, 30 Jun 2020 11:52:25 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id BAFDA1600B5; Tue, 30 Jun 2020 11:52:25 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id TiGpRBiR2BV7; Tue, 30 Jun 2020 11:52:25 -0700 (PDT) Received: from [192.168.1.9] (cpe-75-82-69-226.socal.res.rr.com [75.82.69.226]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 8B86A1600B2; Tue, 30 Jun 2020 11:52:25 -0700 (PDT) Subject: Re: When will emacs 27.1 be officially released? To: Eli Zaretskii , =?UTF-8?Q?K=c3=a9vin_Le_Gouguec?= Cc: liwei.ma@gmail.com, emacs-devel@gnu.org References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> Date: Tue, 30 Jun 2020 11:52:25 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83bll0ze1x.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 14:52:26 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 18:52:32 -0000 On 6/30/20 9:58 AM, Eli Zaretskii wrote: > A broken compiler can fail to build a program, which is not a > catastrophe It can also quietly build the wrong program, which can be catastrophic. > how do we make the effort of preparing the manuals and > NEWS for a release less time-consuming? A method that works reasonably well in other projects is to update manuals and NEWS as we go, not just before a release. For starters, I suggest removing the "+++/---" notation in NEWS, which encourages the bad practice of documentation not matching code. From MAILER-DAEMON Tue Jun 30 15:06:13 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqLa9-00047F-Gh for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 15:06:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqLa8-000478-C0 for emacs-devel@gnu.org; Tue, 30 Jun 2020 15:06:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:54496) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jqLa7-0004EF-AT; Tue, 30 Jun 2020 15:06:11 -0400 Received: from [176.228.60.248] (port=1993 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jqLa6-00040w-Ch; Tue, 30 Jun 2020 15:06:11 -0400 Date: Tue, 30 Jun 2020 22:06:03 +0300 Message-Id: <835zb8z84k.fsf@gnu.org> From: Eli Zaretskii To: Paul Eggert Cc: kevin.legouguec@gmail.com, liwei.ma@gmail.com, emacs-devel@gnu.org In-Reply-To: <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> (message from Paul Eggert on Tue, 30 Jun 2020 11:52:25 -0700) Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 19:06:12 -0000 > Cc: liwei.ma@gmail.com, emacs-devel@gnu.org > From: Paul Eggert > Date: Tue, 30 Jun 2020 11:52:25 -0700 > > On 6/30/20 9:58 AM, Eli Zaretskii wrote: > > A broken compiler can fail to build a program, which is not a > > catastrophe > > It can also quietly build the wrong program, which can be catastrophic. I hope that people who build such programs don't play with that particular kind of fire. > > how do we make the effort of preparing the manuals and > > NEWS for a release less time-consuming? > > A method that works reasonably well in other projects is to update manuals and > NEWS as we go, not just before a release. I started requesting that some time ago, with limited success. > For starters, I suggest removing the "+++/---" notation in NEWS, > which encourages the bad practice of documentation not matching > code. Not before we don't need to worry anymore about changes pushed without documentation. We aren't there yet. From MAILER-DAEMON Tue Jun 30 17:33:50 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqNt0-00077P-N0 for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 17:33:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqNsz-00077B-FG for emacs-devel@gnu.org; Tue, 30 Jun 2020 17:33:49 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:43779) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqNsx-0003E4-J1 for emacs-devel@gnu.org; Tue, 30 Jun 2020 17:33:49 -0400 X-Originating-IP: 91.129.96.187 Received: from mail.gandi.net (m91-129-96-187.cust.tele2.ee [91.129.96.187]) (Authenticated sender: juri@linkov.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 0347B40004; Tue, 30 Jun 2020 21:33:43 +0000 (UTC) From: Juri Linkov To: Stefan Monnier Cc: emacs-devel@gnu.org Subject: Re: master ce4ec17: Fix display-buffer-override-next-command to call action only once (bug#39722) Organization: LINKOV.NET References: <20200621233622.23590.68753@vcs0.savannah.gnu.org> <20200621233623.C811520A26@vcs0.savannah.gnu.org> <87lfkgj5tk.fsf@mail.linkov.net> <874kr24p5l.fsf@mail.linkov.net> <87zh8txsdc.fsf@mail.linkov.net> <87wo3w9ftf.fsf@mail.linkov.net> <87h7uug7n9.fsf@mail.linkov.net> <87lfk5mrj4.fsf@mail.linkov.net> Date: Wed, 01 Jul 2020 00:31:10 +0300 In-Reply-To: (Stefan Monnier's message of "Mon, 29 Jun 2020 22:48:47 -0400") Message-ID: <87mu4k2qch.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.194; envelope-from=juri@linkov.net; helo=relay2-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 17:05:20 X-ACL-Warn: Detected OS = Linux 3.11 and newer 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, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 21:33:49 -0000 >>>>>> I'd rather try and avoid this complexity because I think it will become >>>>>> problematic as more prefix commands get written. E.g. the ordering >>>>>> problem doesn't only affect `C-u` but all other prefix commands, such as >>>>>> `C-x RET c` (there currently aren't others bundled with Emacs, but there >>>>>> are others out there). >>>>> Hmm, I didn't know that set-buffer-file-coding-system supports a prefix arg: >>>>> `C-u C-x RET f`. >>> Not sure how that relates to the previous paragraph. >> I just discovered a prefix command that supports a prefix arg. >> This doesn't mean of course that it should set a precedent >> for other commands to follow. > > AFAIK `C-x RET f` is not a prefix command. Oops, sorry, I forgot it's not a prefix command. >>> Since I use `C-x 4` instead of `C-x 4 4`, I'd say that `C-x 1` would be >>> the "natural" choice, but that's also already taken :-( >> But you can still use `C-x 4 1` as a submap of your `C-x 4` map where commands >> of the submap will display the buffer in the same window. > > Hmm... maybe `C-x 4 1` is a good choice for `same-window-prefix`. So now `same-window-prefix` is bound to `C-x 4 1`. From MAILER-DAEMON Tue Jun 30 17:56:04 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqOEV-0008IP-2j for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 17:56:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqOEQ-0008FT-Fx; Tue, 30 Jun 2020 17:55:58 -0400 Received: from mout.gmx.net ([212.227.15.19]:50343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqOEM-0006tt-Uo; Tue, 30 Jun 2020 17:55:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1593554148; bh=6i8a/8Jfyw7qSODQIONC4QctMPkCIMiSVYswtoPtN3M=; h=X-UI-Sender-Class:From:Subject:Date:References:Cc:To; b=f9aV8M6iVk5+B18c3v6YyV45CHDVR7lUdlzOGiKwWt3ckZ1MqPGuwi9Rue2QO4s58 vTz2PmMhp1+4viKDFP8y1/dforqdufEshsBSYRChgRqsdScMK4YdCo+DDOTEeEkKJg gc1p2YGtb0cM6avCzGLqs4gK2TRsQUSFw9roeTK8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.75] ([95.117.43.122]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M6llE-1jkKUc1h1y-008LZM; Tue, 30 Jun 2020 23:55:48 +0200 From: Friedrich Beckmann Content-Type: multipart/alternative; boundary="Apple-Mail=_15B12285-B38F-444E-A87A-4DCA000BF4A0" Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.5\)) Subject: Fwd: [ELPA] New package: pspp-mode.el for PSPP/SPSS syntax highlighting Date: Tue, 30 Jun 2020 23:55:46 +0200 References: Cc: PSPP Development Mailing List , emacs-devel@gnu.org To: Stefan Monnier , mail@vasilij.de Message-Id: <4836167B-33A9-46A3-B586-20768E333E1D@gmx.de> X-Mailer: Apple Mail (2.3445.9.5) X-Provags-ID: V03:K1:CxOgGgxkOQJ6kusPhQKFUrGNJfvRYYQMwKky/3HIxzhzspLOxJr +Gk8neKX3zJJ57NZpjmTIYFtaxvFjqZlSoXy/joZgAB/D+dw/DkrfAVnIsKvTvv7kNAETXN slaLl+2s6CewBniaXDtgRX4ZjaGHgAfIb08bmFypC0M6oQRUU8wHFer5ppIExq9no4c5WJ4 XxCxA2CUE2Nmr00kw3vDA== X-UI-Out-Filterresults: notjunk:1;V03:K0:CWErRvo5rPA=:Kofvgq8YaJxpf98pPuPQJV +tenxDOXS2SWip5i6Ig/wByUqj3fQZBVLHu2N7ALRfKe+83CqjrW0PkZmOSz3RtCnAWSfNEW/ EdDbt7ZxGwOJTRcs7U0JVTLLWvWplaWEi4znhmccDq5Foprsn6grRy1IkRW9L2V+zCB763TmL pB5DBr8dMUXRue65A1ib9ReBiqi25oTjLfdNX98G/pcYxC6PlhN28Dnwlqa2RLd5YugMxHhvh 9+Imy2whQDP/55zmDkZOZtJwq0Mjog7TgCdVW92hpvfqXkBU0FJaw0nO6Z3qQ6NbNmKTRM5o+ JIMXQ8FgUOMWShB9tincqaeMV+FmHxmYxDaF1yozKFwD0ppFDF1S5s/ZCCNyVm2uT+7NSdWUS a9kXxMB5M5sO+rWMY1QgZUl7EhIhPj7kklfmtlQaqGp2L/VXsVbFgCeTusYqEmulCKO7KwNPt Gwamd6962ukn3CUXtlBOhJ9dZl3xrQ38ih+wbdbH/SPrY4jSJHK4Y4cFFCzr6fOmM9QjqCzFZ kXfJTelAsdtyjed5gKnGD1888KId7zMGP/MNYcNiOhvmJCoKpDOWKpepJNPKDCAS+KIt257dQ W8oe5PicCNNRYMIVPuqj6xgC+O2+37hgJaaIZ+xT7PFo4xBTUj/LZXJYO0FmZXdKVkMDA1lKu sl4hltXcw32Jf3kR4hu2oSOwTLKlDQGQ906QlPHXG8ciyuZaYkgb2pb0D8SaNe0cykQx40hFd D2XUjEHKVOBCz5RNvyyWLL1O5/LSepoabRHHFoRor2rV7O+XcqN5KNyJsLXt/o3Gus9tgwtX6 jCS3PVQM8J3wNUAEP7Iq+K/VHEj2tNqaHIYtNLBZsjijITJ5ipGneff2lEU32ZK/ksdWw8pSH 99S3riZC6J42pLGk6/MH+anIpOftl5aU4G1vJ1PLcGyqDfcRU+CaWw6bQYDNQES84y9IvpnXV KvYiL+pOzGuS7eSs3CG+QQRYvMDjdly211tplrBJrBd2p84phCGbOMOHZsa7moYdouB2N1gqd 8Uj3dNuXsW/x+y77hDkinGZCF15M+VYkkbUSkouhADCa5xSgBFzNy6iiQde4rWJ9YlFqloBJn OyR080oyDIzEAUyx4XZWwm4OXxuOLV7l3S1ks8pBZBCw89Ts/iXEduyfsJUO4jS4RAnMjI1BE BOluv9BxZ3kLzaqpQWannMIDuNmJuEuVtZPd7B8iY/DphurVlsDyU4Bqz9s4fnpMgkugoAOUx cJAZrduyuut3QwSJqUQzUAMQxOequGjTfC4EbVA== Received-SPF: pass client-ip=212.227.15.19; envelope-from=friedrich.beckmann@gmx.de; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 17:55:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 21:55:58 -0000 --Apple-Mail=_15B12285-B38F-444E-A87A-4DCA000BF4A0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi Stefan, hi Vasilij, thanks for your response regarding PSPP mode for emacs in GNU Elpa. I = think we can simply copy pspp-mode.el to elpa.git and do the necessary = modifications there. The keyword list comes from the SPSS command syntax = which is also described here: = https://www.gnu.org/software/pspp/manual/html_node/Command-Index.html#Comm= and-Index = SPSS is a commercial statistics software from IBM and PSPP is a GNU free = software replacement for SPSS. Regards Friedrich > Anfang der weitergeleiteten Nachricht: >=20 > Von: Stefan Monnier > Betreff: Aw: [ELPA] New package: pspp-mode.el for PSPP/SPSS syntax = highlighting > Datum: 30. Juni 2020 um 16:16:21 MESZ > An: Friedrich Beckmann >=20 > Sorry for not answering earlier, your mail sneaked through my net. >=20 > IIUC the package's copyright is already assigned to the FSF, so we can > add it to GNU ELPA, indeed. >=20 > Would you be interested in moving it to live in elpa.git instead of > pspp.git (that would make things a bit easier, avoiding the need to > merge pspp-mode.el changes from pspp.git to elpa.git every once in > a while). >=20 > Also, do you happen to know where the long list of identifiers in > `pspp-font-lock-keywords` come from? It would be good to add a = comment > describing how they were generated and from which dataset, so as to = know > how/when to update them. >=20 >=20 > Stefan >=20 >=20 > Friedrich Beckmann [2020-06-20 21:53:25] wrote: >=20 >> Hi, >>=20 >> I contribute to the GNU PSPP software and maintain the pspp debian >> package. The package contains a pspp-mode.el file which provides >> the pspp-mode for syntax highlighting spss syntax files. Currently >> the file is installed via dh-elpa in the debian package but I think >> it should be in the normal gnu elpa distribution. >>=20 >> The file is available here: >>=20 >> http://git.savannah.gnu.org/cgit/pspp.git/tree/pspp-mode.el >>=20 >> Can you integrate that in gnu elpa? >>=20 >> Regards >>=20 >> Friedrich >=20 --Apple-Mail=_15B12285-B38F-444E-A87A-4DCA000BF4A0 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii Hi = Stefan, hi Vasilij,

thanks for your response regarding PSPP mode for emacs in GNU = Elpa. I think we can simply copy pspp-mode.el to elpa.git and do the = necessary modifications there. The keyword list comes from the SPSS = command syntax which is also described here:


SPSS is a commercial statistics software from IBM and PSPP is = a GNU free software replacement for SPSS.

Regards

Friedrich

Anfang der weitergeleiteten Nachricht:

Von: = Stefan Monnier <monnier@iro.umontreal.ca>
Betreff: = Aw: [ELPA] New = package: pspp-mode.el for PSPP/SPSS syntax highlighting
Datum: = 30. Juni 2020 um 16:16:21 = MESZ
An: = Friedrich Beckmann <friedrich.beckmann@gmx.de>

Sorry for not answering earlier, your mail sneaked through my = net.

IIUC the package's copyright is = already assigned to the FSF, so we can
add it to GNU ELPA, = indeed.

Would you be interested in moving = it to live in elpa.git instead of
pspp.git (that would = make things a bit easier, avoiding the need to
merge = pspp-mode.el changes from pspp.git to elpa.git every once in
a while).

Also, do you happen to = know where the long list of identifiers in
`pspp-font-lock-keywords` come from?  It would be good = to add a comment
describing how they were generated and = from which dataset, so as to know
how/when to update = them.


=        Stefan


Friedrich Beckmann [2020-06-20 21:53:25] = wrote:

Hi,

I contribute to the GNU PSPP = software and maintain the pspp debian
package. The package = contains a pspp-mode.el file which provides
the pspp-mode = for syntax highlighting spss syntax files. Currently
the = file is installed via dh-elpa in the debian package but I think
it should be in the normal gnu elpa distribution.

The file is available here:

http://git.savannah.gnu.org/cgit/pspp.git/tree/pspp-mode.el=

Can you integrate that in gnu elpa?

Regards

Friedrich


= --Apple-Mail=_15B12285-B38F-444E-A87A-4DCA000BF4A0-- From MAILER-DAEMON Tue Jun 30 18:09:40 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqORg-00042F-9j for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 18:09:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqORd-00041A-T9 for emacs-devel@gnu.org; Tue, 30 Jun 2020 18:09:37 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:50411) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqORc-0000kr-2Y; Tue, 30 Jun 2020 18:09:37 -0400 Received: by mail-wm1-x334.google.com with SMTP id l17so20268581wmj.0; Tue, 30 Jun 2020 15:09:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=gpoEI+EIHXFAnK7kMKBhKnRbxShgA/ehEmcYsqyb/x8=; b=P/BXwZ1q312o0FBAEeuyq0bgihR9Kj3TBbb9NZvuGXt5xu90yLNIqy7ymTCycuvciX vv5267HTu5vzAaIhGG0c8PWBl/5cR9EaJ6g1SlJxO1+q49ijksDIio+aGtNmrS5XCbwo FsNj6ZEpqN1lgAWtNWyHLC05hty3A7JpJfjtvG/BrXbdUT2Ddicw4s2shng60W6kBlOK FdNltyxMIyNVchW8bpZCkl+krdu1ULwGDeWKXMdpA7CBFls4wUQmgVdQIMnpgQV0nwWE jcLvjvd5l9NEujPza7A4AZSuGTeTPb3mboOqLbDdSP8YtM8DvzK+pI4o+de3heTSh4ew Gf9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=gpoEI+EIHXFAnK7kMKBhKnRbxShgA/ehEmcYsqyb/x8=; b=W3Ov5q332vh6ebGciKHahjcQuO4qIQXgRceiMxeSL6Px2T33L0kw26DlubQmt9BNMN lzk7/1zeV5u8QjBJgelJQRQPTu+VpSpK7as31eFm1IBCLJZHPCv60fRabeIeBTlVeP5j kNxNzGaWJieJ6EXrTAZOyPOqMccS3oOm7KdHKAnXGkBO9ilgujX82TafjIx8qAcZ/meK a+7JsBPQ8Z4YF8YVq2LkZU9Sj/ZjHpnu1Q5UqKtpBnSRSU8yeI2z9XyPz0h8eyIzxKCQ hm2v9DNfMMeW3gVi4XKqQ2jEe4yJRYPoqS8t2sgCDiktW15amTumbqlhHxF2Tq9xTT5g NOtw== X-Gm-Message-State: AOAM533MIapJesuNCta2Z0Hd4aIxGci6g75pjPLe1XrBgNIBK1xGSxKx vviPQUUeLB+oDHzHNCtcpjc= X-Google-Smtp-Source: ABdhPJxGUPlFsKgibsI2H3GJdpBq1XFZen4i33FWvrWRbW2L96C75mGqwmXl7r5Qr0NTO6WrGTY13A== X-Received: by 2002:a1c:7c19:: with SMTP id x25mr13618136wmc.176.1593554972279; Tue, 30 Jun 2020 15:09:32 -0700 (PDT) Received: from my-little-tumbleweed (200.143.13.109.rev.sfr.net. [109.13.143.200]) by smtp.gmail.com with ESMTPSA id l14sm4929019wrn.18.2020.06.30.15.09.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 15:09:31 -0700 (PDT) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Eli Zaretskii Cc: emacs-devel@gnu.org, liwei.ma@gmail.com Subject: Re: When will emacs 27.1 be officially released? References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> Date: Wed, 01 Jul 2020 00:09:30 +0200 In-Reply-To: <83bll0ze1x.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 30 Jun 2020 19:58:02 +0300") Message-ID: <87a70kw6hx.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=kevin.legouguec@gmail.com; helo=mail-wm1-x334.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 22:09:38 -0000 Thank you for this thoughtful answer. Eli Zaretskii writes: >> - Does bug#39200 come anywhere close to an exhaustive list of issues to >> address before the 27 branch is considered stable? > > I tend to treat these "blocking" bug reports as advisory only. E.g., > the bugs you see there now (a) don't sound too serious to me, and > (b) don't seem to cause anyone to go out of their way fixing them. > > So if you think this is what prevents us from releasing Emacs 27.1, > it's not. OK. I'm sure each maintainer has their own ways of prioritizing bugs and keeping track of those he considers serious; from the POV of curious users who watch the development process, knowing what's holding the release is not obvious. Point (b) taken, though. >> (Also can debbugs.el display the "blocked-by" list in a human-readable >> format?) > > What's wrong with the current display? Nothing, actually, I hadn't taken the time to check what bindings were available; now I see that "b" (debbugs-gnu-show-blocked-by-reports) does exactly what I was looking for (bar hiding resolved issues, but I'm sure there's a knob somewhere for that). > Even the most mundane aspect of an Emacs release, such as > update of the documentation and NEWS, takes orders of magnitude more > time for us than it takes for an elpa package. Would you agree to > release Emacs with incorrect/inaccurate/outdated manuals? Mmm, I guess in the specific case of documentation, a very naive answer would be "let's gate pushes to master until commits/branches include the documentation for the changes they bring". That would make the master branch "always release-ready", as far as documentation is concerned. No idea how to enforce that of course (more on that below). > See, that's another factor that people tend to forget or ignore: it > takes a long time for Emacs problems to be discovered and reported. A > new Emacs release can take years to reach end users. We are routinely > receiving bug reports about changes made two or more releases ago. If > you are looking for a single most important reason why it takes so > long to put out another pretest, it is this one: experience shows that > it takes weeks if not months for enough people to try a pretest and > report the problems they see. Once a problem is reported, it is > usually fixed very quickly, but how do you know the important problems > were all discovered, except by waiting? It sounds like a vicious cycle; the more we wait for feedback on pretests, the more disruptive things happen on master, and the more unstability the next release cycle will face=E2=80=A6 I admit I don't see an easy way out of this situation. I suspect some users (the kind who use Debian Sid, Ubuntu PPAs, or any rolling release distro) would flock to "nightly" tarballs and would not get overly fussed about incomplete documentation, but that's just a guess. > Especially since an > emergency bugfix release is also not something we can do quickly > enough, as one or two occurrences in the past have shown. I dimly remember that 25.3 sparked some debate regarding the difficulty of putting out "targeted bugfix" releases as quickly as we'd like. I don't remember the conclusions; is there anything specific to Emacs that prevents us from getting better? > So once again, the practical issue here is what to do differently to > make the releases more frequent, without losing too much of stability > and other good qualities. I mean practical measures, not general > considerations with which everyone will agree. "One bug =E2=87=92 one test" is a pretty concrete measure. Although there = are a lot of areas in Emacs where writing automated tests is as daunting as fixing the bug, if not more=E2=80=A6 > E.g., let's start with > a small step: how do we make the effort of preparing the manuals and > NEWS for a release less time-consuming? Off the top of my head, I don't have a better answer than "restrict pushes to master to fully documented commits/branches". I don't expect this to make editing manuals and NEWS less time-consuming, but it *should* help ensure that "things landing on master" does not lead to "slow buildup of undocumented stuff/obsolete documentation to catch up with on the release branch". Of course, (1) I have no idea how this could possibly be enforced. (2) Assuming it could be enforced, I'm not sure how well-received the idea would be: "drive-by" contributors comply when they are told that their changes need manual/NEWS updates, but AFAICT the master branch is also used for developers with push access to iterate and get some feedback on features they are working on; I'm not sure they would get as much visibility if they kept to feature branches=E2=80=A6 From MAILER-DAEMON Tue Jun 30 18:18:07 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqOZr-0006Jz-Oo for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 18:18:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32774) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqOZp-0006Jn-7Y for emacs-devel@gnu.org; Tue, 30 Jun 2020 18:18:05 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:55480) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqOZm-0002Bo-TO; Tue, 30 Jun 2020 18:18:04 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 280841600B2; Tue, 30 Jun 2020 15:17:59 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id SF1vY1YsM5Pj; Tue, 30 Jun 2020 15:17:58 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 746081600C4; Tue, 30 Jun 2020 15:17:58 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id OqNG7jO_Xvst; Tue, 30 Jun 2020 15:17:58 -0700 (PDT) Received: from [192.168.1.9] (cpe-75-82-69-226.socal.res.rr.com [75.82.69.226]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 463131600B2; Tue, 30 Jun 2020 15:17:58 -0700 (PDT) Subject: Re: When will emacs 27.1 be officially released? To: Eli Zaretskii Cc: kevin.legouguec@gmail.com, liwei.ma@gmail.com, emacs-devel@gnu.org References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> <835zb8z84k.fsf@gnu.org> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <93bffae8-e8e5-2eea-7087-5a894cbfea0c@cs.ucla.edu> Date: Tue, 30 Jun 2020 15:17:58 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <835zb8z84k.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 18:17:59 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 22:18:05 -0000 On 6/30/20 12:06 PM, Eli Zaretskii wrote: >> A method that works reasonably well in other projects is to update manuals and >> NEWS as we go, not just before a release. > I started requesting that some time ago, with limited success. Is there some way we could step that up? E.g., perhaps start by reminding people who commit code changes but not changes to the corresponding documentation that they need to do the documenation ASAP. Eventually, we could defer or even revert changes until they're documented. The idea would be to change the culture of coding-without-documenting. From MAILER-DAEMON Tue Jun 30 18:31:22 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqOmg-0001xo-Ow for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 18:31:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35812) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqOmf-0001xi-Ot for emacs-devel@gnu.org; Tue, 30 Jun 2020 18:31:21 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:40879) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqOmd-000470-If; Tue, 30 Jun 2020 18:31:21 -0400 Received: by mail-wr1-x432.google.com with SMTP id h5so21708012wrc.7; Tue, 30 Jun 2020 15:31:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/LR9jSG+ZLrm8kcNMZ1+hBzz8m0W22mNoIl6i7i9B/E=; b=f4OSwkQQMs/jLjjCFbFAEdpfMZNUngiZF355tQdAtAR6NVE0KuI9aY/MKKD523RYrU OiJQ6HONTqhx+a9h1B1mIUU6MylOwBt5GuCJ9ihBvjfgri+hcT+VMFKBicp3p5f5xB6L FBm6shDmUPWNsOv2KDnkktoJfmCHQ6BXw+g+Nk1ZqHMEXfLJN6WwgVConqEhBmAx4VWe 6/60y5AZk0J0Z64vtEhd2+jFyeCrG49+ZEtJCm5MVuP0PXeMW5a+3egmLmKFJnpigB7T 0OeohVn6VE6NKZmotM7Ep7lQFv9LxwW0bAipoj89PG14Q6qc7J6JarWw/V1u9iqcHysi nsFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/LR9jSG+ZLrm8kcNMZ1+hBzz8m0W22mNoIl6i7i9B/E=; b=HzKSu2KGheFNXhycoEBqEHXJpIaiNEQ1dcQAYmbLsadyannO5x+l4wwkekHawh9xkG DWF+0EOZltgrSV0fHZ8rPyfKtdPEa9NnsYvIl51+RJjyNJhV8ujgVM4SvZgtkZOv4Wz6 KH9IZZUqhHP8b0PBobUig/DZfSOwg09+Nwd8qFolJhjiv9ZPl8VUJxsserg5572OUXzy kCMr+1ZB8TabF2RHYSYCMdUG1NqryvPRp7heLXJn7yBsO7CTe9Ep3DgDkGZ09YqG7+oA J0d1szDnLOYqudSoWxDkXZTySYxANzFemc7sZcExJMgeCb7wy+wYtCj3XPpYgTyzDuUZ FIzA== X-Gm-Message-State: AOAM532SjW5g/h3kB5AMvaE/hJ/jjImz/q0xKWidBTR7KrbDTpqDb5lr eyyg6YWDprbR7Ol9XOitcoI= X-Google-Smtp-Source: ABdhPJxuEXcubwJhymYX2TBQcugo2QJsVPZOGIrMr2CFG3s4A7XfEOExO9degEj4UJVrxmhiDua/kg== X-Received: by 2002:adf:e811:: with SMTP id o17mr25284978wrm.53.1593556276632; Tue, 30 Jun 2020 15:31:16 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id v11sm41917835wmb.3.2020.06.30.15.31.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 30 Jun 2020 15:31:15 -0700 (PDT) Sender: DG Subject: Re: When will emacs 27.1 be officially released? To: Paul Eggert , Eli Zaretskii Cc: liwei.ma@gmail.com, emacs-devel@gnu.org, kevin.legouguec@gmail.com References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> <835zb8z84k.fsf@gnu.org> <93bffae8-e8e5-2eea-7087-5a894cbfea0c@cs.ucla.edu> From: Dmitry Gutov Message-ID: <4d2cff85-3a3d-c26e-504a-027734bfe36c@yandex.ru> Date: Wed, 1 Jul 2020 01:31:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <93bffae8-e8e5-2eea-7087-5a894cbfea0c@cs.ucla.edu> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=raaahh@gmail.com; helo=mail-wr1-x432.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: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2020 22:31:22 -0000 On 01.07.2020 01:17, Paul Eggert wrote: > Is there some way we could step that up? E.g., perhaps start by reminding people > who commit code changes but not changes to the corresponding documentation that > they need to do the documenation ASAP. Eventually, we could defer or even revert > changes until they're documented. The idea would be to change the culture of > coding-without-documenting. What will those of us do who find the current way the manual is written suboptimal? And who generally don't read it anyway. I've had multiple discussions with Eli on how things should be described and structured, after which my contributions ended us essentially fully rewritten. I'm not bitter about those occurrences, but it seems to me that adding to the manual wouldn't be very productive for me in many cases (unless it's a minor fix of an existing entry) if someone is going to rewrite all of it. Likewise, you yourself didn't accept my version of another change that we discussed most recently. Also, if we're considering patches from minor contributors, this can be an extra barrier for entry (make sure to get the commit message right, and NEWS, *and* the manual), which is higher than the other two. From MAILER-DAEMON Tue Jun 30 20:03:43 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqQE3-0001Yv-Js for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 20:03:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqQE1-0001Y3-L0 for emacs-devel@gnu.org; Tue, 30 Jun 2020 20:03:41 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:46420) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqQDz-0001eJ-Dg; Tue, 30 Jun 2020 20:03:41 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9EF191600C4; Tue, 30 Jun 2020 17:03:35 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id eh3GPytFWIAz; Tue, 30 Jun 2020 17:03:34 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id D88F61600CD; Tue, 30 Jun 2020 17:03:34 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Xpkn43iF2sTI; Tue, 30 Jun 2020 17:03:34 -0700 (PDT) Received: from [192.168.1.9] (cpe-75-82-69-226.socal.res.rr.com [75.82.69.226]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id A5EB51600B2; Tue, 30 Jun 2020 17:03:34 -0700 (PDT) Subject: Re: When will emacs 27.1 be officially released? To: Dmitry Gutov , Eli Zaretskii Cc: liwei.ma@gmail.com, emacs-devel@gnu.org, kevin.legouguec@gmail.com References: <28BB39D5-074F-4450-A747-C2BFB37AA482@gnu.org> <87pn9g6fuo.fsf@gmail.com> <83bll0ze1x.fsf@gnu.org> <03c328d0-b446-9806-5b7b-1cda10a50eb7@cs.ucla.edu> <835zb8z84k.fsf@gnu.org> <93bffae8-e8e5-2eea-7087-5a894cbfea0c@cs.ucla.edu> <4d2cff85-3a3d-c26e-504a-027734bfe36c@yandex.ru> From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <863a34cb-3014-e199-2c1e-9a9e8f2dfb95@cs.ucla.edu> Date: Tue, 30 Jun 2020 17:03:34 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <4d2cff85-3a3d-c26e-504a-027734bfe36c@yandex.ru> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 18:17:59 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2020 00:03:41 -0000 On 6/30/20 3:31 PM, Dmitry Gutov wrote: > On 01.07.2020 01:17, Paul Eggert wrote: > What will those of us do who find the current way the manual is written > suboptimal? And who generally don't read it anyway. Well, we could drop the manual entirely :-). But until we do, we should maintain it. > Likewise, you yourself didn't accept my version of another change that we > discussed most recently. Sure, but that's not normally the issue here, as that sort of disagreement happens with code as well as with documentation. In other words, the issue is rarely about areas where multiple people might work on documentation and disagree about what should go into it; it's more commonly about areas where nobody updated the documentation even though it obviously became out of date. > this can be an extra > barrier for entry (make sure to get the commit message right, and NEWS, *and* > the manual) Yes, that's a price we'd have to pay. I hope it wouldn't be much of a problem in practice. From MAILER-DAEMON Tue Jun 30 21:31:29 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqRay-00044Q-TJ for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 21:31:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqRaw-00044D-7P for emacs-devel@gnu.org; Tue, 30 Jun 2020 21:31:26 -0400 Received: from sonic314-14.consmr.mail.bf2.yahoo.com ([74.6.132.124]:46301) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqRas-0006ce-AQ for emacs-devel@gnu.org; Tue, 30 Jun 2020 21:31:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1593567079; bh=nK/1rIS45uIxjMZ7MqQNB7sFTQfCt/j3JWk/KOdPO0g=; h=Date:In-Reply-To:References:Subject:To:From:From:Subject; b=Thm9aQMzk0FpJ1gFBqhGSWFzPzFq1sDA0ZEqX6uqamgrDoDS3vZmLOVwybQkJFyDrvXNB9NxSgl0Po/mj128/VKwN2Gk0dSQe2OcbMIrnSbLcimoxJui6NL9oiflO/EY4zqfKi0hr4qKN8Eau3/edATDfRN0ZE63ECVkPZxPpmEkQ4bediQAozXo5ufVxBMzMbV+X73ehTgD7BCU65tpwS48jq0sYQzdEbXsikTYOOU7dqGsHV7fr++DXAIKayagyCeaYjjMHMCQes5+Zs9lfCkDKMT9pONufjaCKcqPgEnQm7r0XuQgF0/RXmzDG6bkLtZGViGnvoMBKatm/0Qwaw== X-YMail-OSG: W9LmJ6cVM1l8Q9ENo9._38tygqLtsm3fZKO5SKnkR2xHS008sZWE3vxsYAcKqDl KGMSw.IUG3lpkramfXNugOMisOIWrY6eD4PRH7BFWnkUULF2mSbE5.zNkdTg3YJqD57ycpPQZ0yO MjZiHCGAR7pq.uQ8KXmrcwdaFdzWKyymHsarprUGBsF22Xz7sOmu9hguNQFMP_S9v2JThuZYXl1e zi0ybsOkHI3mbiYAA5XoD27LkJEnJhnx0YWcotYCZKeWJjZqF7nVKn1YwhQduDvcUw8knW2eaWl8 bFXmh65NzykHfMn2vC4DJ9FP0Zlofhmx1V8MhXEo3j2sVW_jn9eq.3tWlrISGPVJ4xi9pmHENk9V ShRR4PqWi.4cIOhcGsaUZLjS5nTFCC48vAsZGwKDMJnRyHV3xjE8yxwbo15hCqFPLvWhT40prT_3 k7q30_9MZzJVSs1fDh04Y3VCARUe_SyGOndngDUUX86NRYoj8ybLY1hM0w_L5zudoasAvZ10Jgje Ksa.O0y5DRj6hOrkWr7kbgRtDNKDs2ytFyUnq50fBGya3GdTz8Ni6NHDt7puKJzC56q9sg2Yi1De iIeJ1nfrDXy3NHWuBTEty0h3T3oddTectp9HvGpl9dBlZ356Cu52Rv6n.GUIJV6KrD7._Qp_oMDR 3FA0A.bf3InRUCX3KPX_vMTe6P1ACf.KmoLHQOGRSL.TyNnlHVz4xA.4LOdpDL7PFbRHMGS6vhPq IMsgC6IQpNTjsFzRwdSMP5mgYiApw_5H72JiBcGdZuoFHIKned0Pck89oVMzAkQ.OrtTkioHGOl9 QigddI.AOE99QfMO_dZmjCbEoYeTzRwQ8NBhD6Q.igGhdFliGcJV3EefvMTOhE.1BSQBhqHm4xfp Xx1uM9KvhJy8Tlpy2.kER8bG0LtWKtP8OxLrAba5UC5otXn7tfQnV7i0zfKKEdeLPWFrLGFCPYOj KMTj9_PloXIUZSAb.qrCxpZou7CUETHcNOCRnyCwlOuRc2QBx1tnBfMfoLVJP.NK_0ExMTsrWFPF 7nHGBLu_LMsO34blt_nJEw0iZQqxklj7SepEVY78NTDqrJawNSWb0sRDjKOgQ9lhKbMLE6.jaCTO 5AfAr4nfJi8Dq6b6_yl7fwV8la65gM46TlLh8B7YyvRQdED7IPCrP1bLS1Ywi4z1LCRH5us3nmOK 0CMH.TxDu3gd_qMHudkv11DnYYvg.YWX7wICf4M8YivDFVZ0KrB.fIu63BYvHJhPbjq6fkzFaMcj .r7_PzpYgTplNZCBaZS1ErXrUi.ByZ_g8WcxqkADUfQA6SCd9AVJBBaOIU_vdkfMf4LTdioWWg0d Y3llawZqUI91Nro2kCIxd_iWj8uD5GdkZ69kC3yI1aAA3dzLxhUSv7jkC6wuvubsORJ.XqF3RwLB Jng-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.bf2.yahoo.com with HTTP; Wed, 1 Jul 2020 01:31:19 +0000 Received: by smtp427.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID cf7986362a7795e80b6b9e2dbcb1158f; Wed, 01 Jul 2020 01:31:18 +0000 (UTC) Date: Wed, 01 Jul 2020 03:31:10 +0200 User-Agent: K-9 Mail for Android In-Reply-To: References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----M8D5P00EY447S49PQI4D8BJ0MYNUBC" Content-Transfer-Encoding: 7bit Subject: Re: Quit and Close Emacs Special Windows To: Stefan Monnier CC: emacs-devel@gnu.org From: Ergus Message-ID: <6612E345-621D-4453-AE61-01E757B08765@aol.com> X-Mailer: WebService/1.1.16197 hermes_aol Apache-HttpAsyncClient/4.1.4 (Java/11.0.7) Content-Length: 4377 Received-SPF: pass client-ip=74.6.132.124; envelope-from=spacibba@aol.com; helo=sonic314-14.consmr.mail.bf2.yahoo.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/30 21:31:19 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.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, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2020 01:31:26 -0000 ------M8D5P00EY447S49PQI4D8BJ0MYNUBC Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Stefan: As "this behavior" I mean that pressing q effectively closes the buffer in= stead of keeping it around in the buffer list=2E When working in big projec= ts with too many files usually there are too many *-=2E=2E=2E-* buffers (ma= git, compile, man, logs=2E=2E=2E)=2E And the user needs to keep closing the= m constantly (with C-u q or explicitly) This is not only annoying some times (for example for rotating buffers wit= h C-x right) but also is somehow unnatural for term users who are used to c= all ex=2E man from the terminal and quit quickly to continue=2E On June 30, 2020 7:04:57 PM GMT+02:00, Stefan Monnier wrote: >> I have been reading this site: >> >> https://christiantietze=2Ede/posts/2019/10/emacs-quit-special-windows/ >> >> and I am wondering why we don't provide an option to enable this >> behaviour by default in some cases without needing the "hack" in the >> link=2E It doesn't seems to be too complex to implement right? > >What do you mean by "this behavior"? > >I just tried > > emacs -Q > M-x compile > =2E=2Eselect the compilation window=2E=2E=2E > q > >and sure enough I was back to a single-window setup=2E >So, IIUC we already provide "this behavior"=2E > >> I know it is just a detail, but in some cases (like when using man or >> compile mode, or reading a function documentation, or after executing >> magit commands) it doesn't make sense to keep the buffer in the >buffer >> list after pressing q in 90% of the times=2E > >I don't understand the connection with the previous paragraph=2E > > > Stefan --=20 Sent from my Android device with K-9 Mail=2E Please excuse my brevity=2E ------M8D5P00EY447S49PQI4D8BJ0MYNUBC Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Stefan:

As "this behavior" I mean that p= ressing q effectively closes the buffer instead of keeping it around in the= buffer list=2E When working in big projects with too many files usually th= ere are too many *-=2E=2E=2E-* buffers (magit, compile, man, logs=2E=2E=2E)= =2E And the user needs to keep closing them constantly (with C-u q or expli= citly)
This is not only annoying some times (for example for rotating bu= ffers with C-x right) but also is somehow unnatural for term users who are = used to call ex=2E man from the terminal and quit quickly to continue=2E
On June 30, 2020 7:04:57 PM GMT+02:00, Stef= an Monnier <monnier@iro=2Eumontreal=2Eca> wrote:
I = have been reading this site:

https://christiantietze=2Ede/p= osts/2019/10/emacs-quit-special-windows/

and I am wondering why= we don't provide an option to enable this
behaviour by default in some= cases without needing the "hack" in the
link=2E It doesn't seems to b= e too complex to implement right?

What do you mean by "= this behavior"?

I just tried

emacs -Q
M-x compile<= br> =2E=2Eselect the compilation window=2E=2E=2E
q

and sur= e enough I was back to a single-window setup=2E
So, IIUC we already prov= ide "this behavior"=2E

I know it is just a detail, but in some cases (like when using man orcompile mode, or reading a function documentation, or after executing
= magit commands) it doesn't make sense to keep the buffer in the buffer
l= ist after pressing q in 90% of the times=2E

I don't und= erstand the connection with the previous paragraph=2E


St= efan


--
Sent from my Android device= with K-9 Mail=2E Please excuse my brevity=2E ------M8D5P00EY447S49PQI4D8BJ0MYNUBC-- From MAILER-DAEMON Tue Jun 30 23:47:35 2020 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1jqTih-0001bP-Lw for mharc-emacs-devel@gnu.org; Tue, 30 Jun 2020 23:47:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqTig-0001bI-9b for emacs-devel@gnu.org; Tue, 30 Jun 2020 23:47:34 -0400 Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]:37504) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqTid-0003oB-N8 for emacs-devel@gnu.org; Tue, 30 Jun 2020 23:47:34 -0400 Received: by mail-qk1-x734.google.com with SMTP id k18so20916532qke.4 for ; Tue, 30 Jun 2020 20:47:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=07T2kCWlc7wVQzuYATzFoee2Db1xSwPH22Jr1QiEt4c=; b=j95IOl8M6B7EBAPqXg8H5tIiFY3NnN8EnVtOtKCEqtfXbvCljzDasB8HgYiL+4XV8S 9SXOzDL9c1QO1qivhpGh18NrqBpyMolEYsVHrFjgTytI9gcirnBxaOI99tybwSkQYZPa F6RqP/krD/uIRWYGpt2kMkjcJ1luZnG9D893jYCVWibwbMuKx5x9t6Z/8aXIusk3R2ZN DdQ+c4sH1dEhg3IAGO5afNxCFI4mExElDNkTAZ2T1knInemJr0QK2EOQhvGwCc1HEQO/ rbuxefF9sZJ/dsgabDGeJnNB/hxtZEOqxLC4KPYIVE89wIAvDGP4CSOhN/MpJ52P57so QNiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=07T2kCWlc7wVQzuYATzFoee2Db1xSwPH22Jr1QiEt4c=; b=KiV5UpuZUFw8BzMuTdNnaGiUFYOBpPsOisnrcJ00LfhT6Ky2fGFWVrbrnEB6usi8i9 0fPMVNAzvJK0ED1+/BBxgt7Ula6lHFZOtpQJx1Usfar7gcZVJCEOM4pXVFk0s/SSUZVR sg/tHCX6vFm+LlCq9gFlQxysC+kjCz76ApQ86ESt18dEITyrEonodl0YxaxTfp8//GLd CyQAWwCSztd0q+T8Ymq+DwrDLFZvVaQgz5Kxpf4aBn38njE5234mUDKOIiVktUKK9RaB eOmLK+UCPQDk+2HxoCf/7KgSrXgiHmMhEFnS+8Ts2+VTmer0NcXcKnX0pcD+ubdeYcS6 pOIg== X-Gm-Message-State: AOAM532tkAzAOmZP7aafITG3FWLEXL8S1KRBwPiGucloNORii6ZkGO6P eTwT0fl/SzLAH4CO54+KMV0= X-Google-Smtp-Source: ABdhPJxnFQVfJ1mDmVUjA/Xbnklnbl3RI/c+RAJQdamQ7GlKDFdJzq7H5D9ISvRlQf/C97fU80Rqgg== X-Received: by 2002:a37:9b8b:: with SMTP id d133mr23501115qke.276.1593575250170; Tue, 30 Jun 2020 20:47:30 -0700 (PDT) Received: from ?IPv6:2601:98a:4200:9210:1ae:d610:3727:7fb3? ([2601:98a:4200:9210:1ae:d610:3727:7fb3]) by smtp.gmail.com with ESMTPSA id k18sm4379512qki.30.2020.06.30.20.47.29 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 Jun 2020 20:47:29 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: Quit and Close Emacs Special Windows From: Yuan Fu In-Reply-To: <6612E345-621D-4453-AE61-01E757B08765@aol.com> Date: Tue, 30 Jun 2020 23:47:28 -0400 Cc: Stefan Monnier , emacs-devel@gnu.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <87ftaej5pp.fsf.ref@ergus.i-did-not-set--mail-host-address--so-tickle-me> <87ftaej5pp.fsf@ergus.i-did-not-set--mail-host-address--so-tickle-me> <6612E345-621D-4453-AE61-01E757B08765@aol.com> To: Ergus X-Mailer: Apple Mail (2.3608.80.23.2.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::734; envelope-from=casouri@gmail.com; helo=mail-qk1-x734.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2020 03:47:34 -0000 > On Jun 30, 2020, at 9:31 PM, Ergus wrote: >=20 > Hi Stefan: >=20 > As "this behavior" I mean that pressing q effectively closes the = buffer instead of keeping it around in the buffer list. When working in = big projects with too many files usually there are too many *-...-* = buffers (magit, compile, man, logs...). And the user needs to keep = closing them constantly (with C-u q or explicitly) > This is not only annoying some times (for example for rotating buffers = with C-x right) but also is somehow unnatural for term users who are = used to call ex. man from the terminal and quit quickly to continue. For that you might want to consider M-x clean-buffer-list. Yuan=