Subject: Re: bug#49877: [Emacs 28.0.50 Trunk] *ERROR*: No applicable method: frame-creation-function

From: Jacob Faibussowitsch <[email-masked]>
Date: Fri, 6 Aug 2021 08:55:42 -0400

> I'm still not able to reproduce the problem, but a different user
> reported exactly the same problem...  which then went away.  So
> something's definitely going on here.

Ok so on a whim I went and started bisecting my init file, and lo and behold it turns out there is some sort of subtle interaction with doom mode-line. Specifically, I configure it via:

(use-package-select doom-modeline
  :after all-the-icons
  :hook (after-init . doom-modeline-mode)
  :config
  (column-number-mode 1)
  :custom
  (doom-modeline-icon t)
  (doom-modeline-project-detection ‘project) <——— commenting out this line fixes the problem
  (doom-modeline-major-mode-icon t)
  (doom-modeline-major-mode-color-icon t)
  (doom-modeline-buffer-state-icon t)
  (doom-modeline-buffer-modification-icon t)
  (doom-modeline-unicode-fallback nil)
  (doom-modeline-modal-icon t)
  (doom-modeline-minor-modes nil)
  (doom-modeline-indent-info nil)
  (doom-modeline-lsp t))

So somehow this new eql change is related to the project root detection? I tried byte-compiling doom modeling again to see if perhaps there is an additional warning triggered, but the only warning emitted was

In doom-modeline--project-root:
doom-modeline-core.el:1193:26: Warning: ‘project-roots’ is an obsolete function (as of 0.3.0); use ‘project-root’ instead.

From this function:

(defun doom-modeline--project-root ()
  "Get the path to the root of your project.
Return nil if no project was found."
  (or doom-modeline--project-root
      (setq doom-modeline--project-root
            (pcase doom-modeline-project-detection
              ('ffip
               (when (fboundp 'ffip-get-project-root-directory)
                 (let ((inhibit-message t))
                   (ffip-get-project-root-directory))))
              ('projectile
               (when (fboundp 'projectile-project-root)
                 (projectile-project-root)))
              ('project
               (when (fboundp 'project-current)
                 (when-let ((project (project-current)))
                   (car (project-roots project))))))))) <——————— here

Best regards,

Jacob Faibussowitsch
(Jacob Fai - booss - oh - vitch)

> On Aug 6, 2021, at 05:45, Lars Ingebrigtsen <[email-masked]> wrote:
> 
> Jacob Faibussowitsch <[email-masked]> writes:
> 
>> Is this with a fresh
>> checkout (or "make bootstrap")?
>> 
>> I’m not sure I follow, what is the difference?
> 
> Sorry, that was unclear.  I meant that as an inclusive or, and as
> opposed to doing an incremental build.
> 
>> I am able to reproduce/build emacs via:
>> 
>> 1. git checkout master
>> 2. make clean
>> 3. ./reconfigure.sh (attached)
>> 3. make all
> 
> I'm still not able to reproduce the problem, but a different user
> reported exactly the same problem...  which then went away.  So
> something's definitely going on here.
> 
> So I've added Stefan to the CCs -- could you take a look at this?  It
> looks like a possible problem with the recent eql changes, but is
> weirdly difficult to reproduce.  
> 
> diff --git a/lisp/frame.el b/lisp/frame.el
> index 9b3d120598..8c05ad2fe5 100644
> --- a/lisp/frame.el
> +++ b/lisp/frame.el
> @@ -36,7 +36,11 @@ as its argument.")
> (cl-generic-define-context-rewriter window-system (value)
> ;; If `value' is a `consp', it's probably an old-style specializer,
> ;; so just use it, and anyway `eql' isn't very useful on cons cells.
> - `(window-system ,(if (consp value) value `(eql ,value))))
> + `(window-system ,(if (consp value) value
> + ;; WARNING: unsure whether this eql expression
> + ;; is actually an eql specializer.
> + ;; Bug #47327
> + `(eql ',value))))
> 
> 
> -- 
> (domestic pets only, the antidote for overdose, milk.)
>   bloggy blog: http://lars.ingebrigtsen.no