From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Question: loading code when two packages are load? Date: Wed, 08 Sep 2021 23:31:50 -0400 Message-ID: References: <174C424B-3A6E-46E9-B8B5-FCC7C756F22B@mit.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="38185"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: "emacs-devel@gnu.org" , Karl Fogel To: Qiantan Hong Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Sep 09 05:33:00 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mOAo8-0009iS-7h for ged-emacs-devel@m.gmane-mx.org; Thu, 09 Sep 2021 05:33:00 +0200 Original-Received: from localhost ([::1]:50160 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOAo6-0003Qy-TS for ged-emacs-devel@m.gmane-mx.org; Wed, 08 Sep 2021 23:32:58 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOAn8-0002jy-Pw for emacs-devel@gnu.org; Wed, 08 Sep 2021 23:31:58 -0400 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:17677) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOAn5-0004Fa-Cy for emacs-devel@gnu.org; Wed, 08 Sep 2021 23:31:57 -0400 Original-Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id D3EEA100142; Wed, 8 Sep 2021 23:31:56 -0400 (EDT) Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 6666A10012C; Wed, 8 Sep 2021 23:31:55 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1631158315; bh=0YCZIJA4c1PseDs267Nk9l0Gm4lEXJRgF0GVZJHiZME=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=je7ouCNDxcl9CQXKLPiJ2E0IZLQzD9pPEV22Iha5+JuQ7yihFCoM7aGzGLF//RNXa nMiVjpm6gfnH1Lq25ODI5RIQejlLXhQmM58hpQ/l849sBMYxXigMa3feHTcDsukmk+ eeSjF3hjHGLBj519gtJyE2r0HNwb5JWGvd9MKdGVR1gUEKwmBLfTprzSKDrR1LmauS mSsUN1i4AktrKmv1JHouR7nzUIF7HxQEEhnROS1wobcXy7C8YTr7SpGolltRtSYelv IyhtHq9IV7gQMzKIPYy16mIyj2a/i9EWF4pnLiUWqCgnmJ+bTxdUxX6MnrsnjkiSrF sP75eaYJ3Vs4w== Original-Received: from pastel (unknown [104.247.244.135]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id EBED0120494; Wed, 8 Sep 2021 23:31:50 -0400 (EDT) In-Reply-To: <174C424B-3A6E-46E9-B8B5-FCC7C756F22B@mit.edu> (Qiantan Hong's message of "Thu, 9 Sep 2021 02:05:50 +0000") Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca 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=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:274418 Archived-At: > Thanks! This looks like exactly what I need. > I don=E2=80=99t understand why the manual says > "well-designed Lisp programs should not use with-eval-after-load=E2=80=9D > and advocate for using require though. > Isn=E2=80=99t with-eval-after-load exactly the lazy counterpart of requir= e? Experience shows that `with-eval-after-load` (and its brother `after-load-functions`) can make debugging more difficult (typically when you aren't aware that such and such package you're using uses `with-eval-after-load` on the file you're trying to debug), which is why we recommend to use alternatives when possible. For example often you can replace use of `with-eval-after-load` by using the hook of the (major or minor) mode defined in that file. > It sounds like after-load-functions (although eval-after-load works as we= ll > because we just need to target some specific packages), > but somehow manual says it=E2=80=99s an =E2=80=9Cabnormal hook=E2=80=9D w= hich I don=E2=80=99t really understand. Normal hooks have a specific calling convention (no arguments, no return value). Any hook which uses a different calling convention is hence an abnormal hook (and this is reflected in its name ending in `functions` rather than `-hook`). "Abnormal" does not mean "bad". > The Hooks for Loading info section seems to try very hard to > talk people out of using itself. Emacs is full of tools to shoot oneself (and others) in the foot, because we feel it's important to make sure users can do that when they feel the need. But yes we do try and discourage them from using those tools ;-) Stefan