1

GNU Emacs 26.3

I updated all the packages and started to face with following error, I am not sure what is causing it, it wasn't happening before the update:

./icicles/icicles-cmd1.el :512:(eval-when-compile (require 'yow nil t)) ;; (no error if not found)

Debugger entered: nil
  (progn (debug))
  (if (equal (car (last (split-string filename "[/\\]") 2)) "obsolete") (progn (debug)))
  debug-on-load-obsolete("/usr/share/emacs/26.3/lisp/obsolete/yow.elc")
  run-hook-with-args(debug-on-load-obsolete "/usr/share/emacs/26.3/lisp/obsolete/yow.elc")
  do-after-load-evaluation("/usr/share/emacs/26.3/lisp/obsolete/yow.elc")
  require(yow nil t)
  (progn (require (quote yow) nil t))
  eval((progn (require (quote yow) nil t)) nil)
  #f(compiled-function (&rest body) "Like `progn', but evaluates the body at compile time if you're compiling.\nThus, the result of the body appears to the compiler as a quoted\nconstant.  In interpreted code, this is entirely equivalent to\n`progn', except that the value of the expression may be (but is\nnot necessarily) computed at load time if eager macro expansion\nis enabled." #<bytecode 0x1a5c47>)((require (quote yow) nil t))
  macroexpand((eval-when-compile (require (quote yow) nil t)))
  internal-macroexpand-for-load((eval-when-compile (require (quote yow) nil t)) nil)
  eval-buffer(#<buffer  *load*-881575> nil "/home/alper/.emacs.d/lisp/icicles/icicles-cmd1.el" nil t)  ; Reading at buffer position 24864
  load-with-code-conversion("/home/alper/.emacs.d/lisp/icicles/icicles-cmd1.el" "/home/alper/.emacs.d/lisp/icicles/icicles-cmd1.el" nil t)
  require(icicles-cmd1)
  eval-buffer(#<buffer  *load*-925687> nil "/home/alper/.emacs.d/lisp/icicles/icicles.el" nil t)  ; Reading at buffer position 84684
  load-with-code-conversion("/home/alper/.emacs.d/lisp/icicles/icicles.el" "/home/alper/.emacs.d/lisp/icicles/icicles.el" nil t)
  require(icicles)
  eval-buffer(#<buffer  *load*> nil "/home/alper/.emacs" nil t)  ; Reading at buffer position 56616
  load-with-code-conversion("/home/alper/.emacs" "/home/alper/.emacs" t t)
  load("~/.emacs" t t)
  #f(compiled-function () #<bytecode 0x1e0f5d>)()
  command-line()
  normal-top-level()
alper
  • 1,238
  • 11
  • 30
  • Where is `debug-on-load-obsolete` defined? yow.el has been marked as obsolete since 2013, so your only problem is that something in your config has been told to make really loud noises when an obsolete library is loaded. – phils Jul 14 '20 at 03:20
  • FWIW you almost certainly don't need to have `yow` loaded, and if you do then you would need to obtain a traditional `yow.lines` file from somewhere to make it in any way useful, as there's only a placeholder by default nowadays (which is why the library is obsolete). If you *do* restore `yow.lines` then `M-x psychoanalyze-pinhead` might be somewhat amusing. – phils Jul 14 '20 at 03:25

1 Answers1

3

It's not an error. It's just a silly message from Emacs. You can ignore it.

For reasons of copyright, Emacs removed all of the guts from yow.el (the Zippy quotes) several years back. But it didn't remove library yow.el.

That means:

  1. You can provide and use your own such guts - Zippyisms, and still take advantage of what yow.el does. To provide your own Zippy quotes, put them in the file that's the value of option yow-file.

    Icicles provides a command, icicle-apropos-zippy, that, like the more rudimentary command apropos-zippy, shows the Zippy quotes that match an apropos pattern you enter.

    And Icicles soft-requires yow.el[c]: (require 'yow nil t), meaning that if the library is available then it gets loaded. If it's not available then nothing happens (no error).

  2. (require 'yow nil t) will still load file yow.el[c] even now, since it's still provided. As long as Emacs provides it, it will be loaded.

  3. When it gets loaded (;-)), Emacs makes it send you that silly message.

You can think of that message as a kind of Zippyism, or meta-Zippyism, if you like. As if Emacs had Zippy's sense of humor. Alas...


However, it seems that you're getting that message as an error, because you have a function called debug-on-load-obsolete that's apparently on hook after-load-functions. Apparently debug-on-load-obsolete raises an error whenever you load an obsolete library.

IMO that's a misfeature - obsolete does not mean unsupported. It means it's the thing is no longer in active development.

If you want to keep raising an error for loading obsolete libraries, but you don't want to raise an error in this case, then just comment out the (require 'yow nil t) in icicles-cmd1.el. And then thank Zippy for the lesson.


For more about Zippy, see Zippy the Pinhead. Yow!


P.S. Emacs now calls Yow a "package". Shame. Shame. Such a step backward...

Drew
  • 75,699
  • 9
  • 109
  • 225
  • Sorry I forget to add into my question, due to this warning message `emacsclient` does not open and hangs on the warning message. Also `emacsclient -e "(kill-emacs)"` hangs and does not kill the emacs daemon. // I just want use `emacs` with `icicles` again :-) – alper Jul 14 '20 at 09:57
  • You are a life safe, I commented out: `(eval-when-compile (require 'yow nil t))` and it works – alper Jul 14 '20 at 11:58