Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"purpose-change-buffer: Wrong number of arguments: (3 . 4), 5" on Emacs 27 #137

Closed
Miciah opened this issue Jan 13, 2019 · 12 comments
Closed
Labels

Comments

@Miciah
Copy link
Contributor

Miciah commented Jan 13, 2019

purpose-change-buffer uses window--display-buffer from window.el, which is an internal function from window.el. GNU Emacs commit f646675c changes the signature of window--display-buffer:

(window--display-buffer): Remove fifth argument DEDICATED and
either directly use a 'dedicated' entry in ALIST or the value
of 'display-buffer-mark-dedicated' instead.

After updating and rebuilding GNU Emacs, I now get the following error for various operations that change the window configuration:

purpose-change-buffer: Wrong number of arguments: (3 . 4), 5

To reproduce, build Emacs from master and run it as follows:

emacs -Q --eval "(push \"$HOME/.emacs.d/elpa/27.0/develop/window-purpose-20180926.1047\" load-path)" --eval '(progn (toggle-debug-on-error) (require ''window-purpose) (purpose-mode))'

Then press C-x b RET. I get the following backtrace:

Debugger entered--Lisp error: (wrong-number-of-arguments (3 . 4) 5)
  window--display-buffer(#<buffer *Messages*> #<window 3 on *scratch*> reuse ((action-order . switch-to-buffer)) nil)
  purpose-change-buffer(#<buffer *Messages*> #<window 3 on *scratch*> reuse ((action-order . switch-to-buffer)))
  purpose-display-same-window(#<buffer *Messages*> ((action-order . switch-to-buffer)))
  purpose-display-maybe-same-window(#<buffer *Messages*> ((action-order . switch-to-buffer)))
  purpose--action-function(#<buffer *Messages*> nil)
  #f(compiled-function (buffer-or-name &optional action frame) "Display BUFFER-OR-NAME in some window, without selecting it.\nBUFFER-OR-NAME must be a buffer or a string naming a live buffer.\nReturn the window chosen for displaying that buffer, or nil if no\nsuch window is found.\n\nOptional argument ACTION, if non-nil, should specify a buffer\ndisplay action of the form (FUNCTIONS . ALIST).  FUNCTIONS is\neither an \"action function\" or a possibly empty list of action\nfunctions.  ALIST is a possibly empty \"action alist\".\n\nAn action function is a function that accepts two arguments: the\nbuffer to display and an action alist.  Based on those arguments,\nit should try to display the buffer in a window and return that\nwindow.  An action alist is an association list mapping symbols\nto values.  Action functions use the action alist passed to them\nto fine-tune their behaviors.\n\n`display-buffer' builds a list of action functions and an action\nalist by combining any action functions and alists specified by\n`display-buffer-overriding-action', `display-buffer-alist', the\nACTION argument, `display-buffer-base-action', and\n`display-buffer-fallback-action' (in order).  Then it calls each\nfunction in the combined function list in turn, passing the\nbuffer as the first argument and the combined action alist as the\nsecond argument, until one of the functions returns non-nil.\n\nAction functions and the action they try to perform are:\n `display-buffer-same-window' -- Use the selected window.\n `display-buffer-reuse-window' -- Use a window already showing\n    the buffer.\n `display-buffer-in-previous-window' -- Use a window that did\n    show the buffer before.\n `display-buffer-use-some-window' -- Use some existing window.\n `display-buffer-pop-up-window' -- Pop up a new window.\n `display-buffer-below-selected' -- Use or pop up a window below\n    the selected one.\n `display-buffer-at-bottom' -- Use or pop up a window at the\n    bottom of the selected frame.\n `display-buffer-pop-up-frame' -- Show the buffer on a new frame.\n `display-buffer-in-child-frame' -- Show the buffer in a\n    child frame.\n `display-buffer-no-window' -- Do not display the buffer and\n    have `display-buffer' return nil immediately.\n\nAction alist entries are:\n 'inhibit-same-window' -- A non-nil value prevents the same\n    window from being used for display.\n 'inhibit-switch-frame' -- A non-nil value prevents any frame\n    used for showing the buffer from being raised or selected.\n 'reusable-frames' -- The value specifies the set of frames to\n    search for a window that already displays the buffer.\n    Possible values are nil (the selected frame), t (any live\n    frame), visible (any visible frame), 0 (any visible or\n    iconified frame) or an existing live frame.\n 'pop-up-frame-parameters' -- The value specifies an alist of\n    frame parameters to give a new frame, if one is created.\n 'window-height' -- The value specifies the desired height of the\n    window chosen and is either an integer (the total height of\n    the window), a floating point number (the fraction of its\n    total height with respect to the total height of the frame's\n    root window) or a function to be called with one argument -\n    the chosen window.  The function is supposed to adjust the\n    height of the window; its return value is ignored.  Suitable\n    functions are `shrink-window-if-larger-than-buffer' and\n    `fit-window-to-buffer'.\n 'window-width' -- The value specifies the desired width of the\n    window chosen and is either an integer (the total width of\n    the window), a floating point number (the fraction of its\n    total width with respect to the width of the frame's root\n    window) or a function to be called with one argument - the\n    chosen window.  The function is supposed to adjust the width\n    of the window; its return value is ignored.\n 'preserve-size' -- The value should be either (t . nil) to\n    preserve the width of the chosen window, (nil . t) to\n    preserve its height or (t . t) to preserve its height and\n    width in future changes of the window configuration.\n 'window-parameters' -- The value specifies an alist of window\n    parameters to give the chosen window.\n 'allow-no-window' -- A non-nil value means that `display-buffer'\n    may not display the buffer and return nil immediately.\n\nThe entries 'window-height', 'window-width' and 'preserve-size'\nare applied only when the window used for displaying the buffer\nnever showed another buffer before.\n\nThe ACTION argument can also have a non-nil and non-list value.\nThis means to display the buffer in a window other than the\nselected one, even if it is already displayed in the selected\nwindow.  If called interactively with a prefix argument, ACTION\nis t.  Non-interactive calls should always supply a list or nil.\n\nThe optional third argument FRAME, if non-nil, acts like a\n(reusable-frames . FRAME) entry appended to the action alist\nspecified by the ACTION argument." (interactive #f(compiled-function () #<bytecode 0x396dc9>)) #<bytecode 0x228719>)(#<buffer *Messages*> nil nil)
  purpose-display-buffer-advice(#f(compiled-function (buffer-or-name &optional action frame) "Display BUFFER-OR-NAME in some window, without selecting it.\nBUFFER-OR-NAME must be a buffer or a string naming a live buffer.\nReturn the window chosen for displaying that buffer, or nil if no\nsuch window is found.\n\nOptional argument ACTION, if non-nil, should specify a buffer\ndisplay action of the form (FUNCTIONS . ALIST).  FUNCTIONS is\neither an \"action function\" or a possibly empty list of action\nfunctions.  ALIST is a possibly empty \"action alist\".\n\nAn action function is a function that accepts two arguments: the\nbuffer to display and an action alist.  Based on those arguments,\nit should try to display the buffer in a window and return that\nwindow.  An action alist is an association list mapping symbols\nto values.  Action functions use the action alist passed to them\nto fine-tune their behaviors.\n\n`display-buffer' builds a list of action functions and an action\nalist by combining any action functions and alists specified by\n`display-buffer-overriding-action', `display-buffer-alist', the\nACTION argument, `display-buffer-base-action', and\n`display-buffer-fallback-action' (in order).  Then it calls each\nfunction in the combined function list in turn, passing the\nbuffer as the first argument and the combined action alist as the\nsecond argument, until one of the functions returns non-nil.\n\nAction functions and the action they try to perform are:\n `display-buffer-same-window' -- Use the selected window.\n `display-buffer-reuse-window' -- Use a window already showing\n    the buffer.\n `display-buffer-in-previous-window' -- Use a window that did\n    show the buffer before.\n `display-buffer-use-some-window' -- Use some existing window.\n `display-buffer-pop-up-window' -- Pop up a new window.\n `display-buffer-below-selected' -- Use or pop up a window below\n    the selected one.\n `display-buffer-at-bottom' -- Use or pop up a window at the\n    bottom of the selected frame.\n `display-buffer-pop-up-frame' -- Show the buffer on a new frame.\n `display-buffer-in-child-frame' -- Show the buffer in a\n    child frame.\n `display-buffer-no-window' -- Do not display the buffer and\n    have `display-buffer' return nil immediately.\n\nAction alist entries are:\n 'inhibit-same-window' -- A non-nil value prevents the same\n    window from being used for display.\n 'inhibit-switch-frame' -- A non-nil value prevents any frame\n    used for showing the buffer from being raised or selected.\n 'reusable-frames' -- The value specifies the set of frames to\n    search for a window that already displays the buffer.\n    Possible values are nil (the selected frame), t (any live\n    frame), visible (any visible frame), 0 (any visible or\n    iconified frame) or an existing live frame.\n 'pop-up-frame-parameters' -- The value specifies an alist of\n    frame parameters to give a new frame, if one is created.\n 'window-height' -- The value specifies the desired height of the\n    window chosen and is either an integer (the total height of\n    the window), a floating point number (the fraction of its\n    total height with respect to the total height of the frame's\n    root window) or a function to be called with one argument -\n    the chosen window.  The function is supposed to adjust the\n    height of the window; its return value is ignored.  Suitable\n    functions are `shrink-window-if-larger-than-buffer' and\n    `fit-window-to-buffer'.\n 'window-width' -- The value specifies the desired width of the\n    window chosen and is either an integer (the total width of\n    the window), a floating point number (the fraction of its\n    total width with respect to the width of the frame's root\n    window) or a function to be called with one argument - the\n    chosen window.  The function is supposed to adjust the width\n    of the window; its return value is ignored.\n 'preserve-size' -- The value should be either (t . nil) to\n    preserve the width of the chosen window, (nil . t) to\n    preserve its height or (t . t) to preserve its height and\n    width in future changes of the window configuration.\n 'window-parameters' -- The value specifies an alist of window\n    parameters to give the chosen window.\n 'allow-no-window' -- A non-nil value means that `display-buffer'\n    may not display the buffer and return nil immediately.\n\nThe entries 'window-height', 'window-width' and 'preserve-size'\nare applied only when the window used for displaying the buffer\nnever showed another buffer before.\n\nThe ACTION argument can also have a non-nil and non-list value.\nThis means to display the buffer in a window other than the\nselected one, even if it is already displayed in the selected\nwindow.  If called interactively with a prefix argument, ACTION\nis t.  Non-interactive calls should always supply a list or nil.\n\nThe optional third argument FRAME, if non-nil, acts like a\n(reusable-frames . FRAME) entry appended to the action alist\nspecified by the ACTION argument." ... #<bytecode 0x228719>) #<buffer *Messages*>)
  apply(purpose-display-buffer-advice #f(compiled-function (buffer-or-name &optional action frame) "Display BUFFER-OR-NAME in some window, without selecting it.\nBUFFER-OR-NAME must be a buffer or a string naming a live buffer.\nReturn the window chosen for displaying that buffer, or nil if no\nsuch window is found.\n\nOptional argument ACTION, if non-nil, should specify a buffer\ndisplay action of the form (FUNCTIONS . ALIST).  FUNCTIONS is\neither an \"action function\" or a possibly empty list of action\nfunctions.  ALIST is a possibly empty \"action alist\".\n\nAn action function is a function that accepts two arguments: the\nbuffer to display and an action alist.  Based on those arguments,\nit should try to display the buffer in a window and return that\nwindow.  An action alist is an association list mapping symbols\nto values.  Action functions use the action alist passed to them\nto fine-tune their behaviors.\n\n`display-buffer' builds a list of action functions and an action\nalist by combining any action functions and alists specified by\n`display-buffer-overriding-action', `display-buffer-alist', the\nACTION argument, `display-buffer-base-action', and\n`display-buffer-fallback-action' (in order).  Then it calls each\nfunction in the combined function list in turn, passing the\nbuffer as the first argument and the combined action alist as the\nsecond argument, until one of the functions returns non-nil.\n\nAction functions and the action they try to perform are:\n `display-buffer-same-window' -- Use the selected window.\n `display-buffer-reuse-window' -- Use a window already showing\n    the buffer.\n `display-buffer-in-previous-window' -- Use a window that did\n    show the buffer before.\n `display-buffer-use-some-window' -- Use some existing window.\n `display-buffer-pop-up-window' -- Pop up a new window.\n `display-buffer-below-selected' -- Use or pop up a window below\n    the selected one.\n `display-buffer-at-bottom' -- Use or pop up a window at the\n    bottom of the selected frame.\n `display-buffer-pop-up-frame' -- Show the buffer on a new frame.\n `display-buffer-in-child-frame' -- Show the buffer in a\n    child frame.\n `display-buffer-no-window' -- Do not display the buffer and\n    have `display-buffer' return nil immediately.\n\nAction alist entries are:\n 'inhibit-same-window' -- A non-nil value prevents the same\n    window from being used for display.\n 'inhibit-switch-frame' -- A non-nil value prevents any frame\n    used for showing the buffer from being raised or selected.\n 'reusable-frames' -- The value specifies the set of frames to\n    search for a window that already displays the buffer.\n    Possible values are nil (the selected frame), t (any live\n    frame), visible (any visible frame), 0 (any visible or\n    iconified frame) or an existing live frame.\n 'pop-up-frame-parameters' -- The value specifies an alist of\n    frame parameters to give a new frame, if one is created.\n 'window-height' -- The value specifies the desired height of the\n    window chosen and is either an integer (the total height of\n    the window), a floating point number (the fraction of its\n    total height with respect to the total height of the frame's\n    root window) or a function to be called with one argument -\n    the chosen window.  The function is supposed to adjust the\n    height of the window; its return value is ignored.  Suitable\n    functions are `shrink-window-if-larger-than-buffer' and\n    `fit-window-to-buffer'.\n 'window-width' -- The value specifies the desired width of the\n    window chosen and is either an integer (the total width of\n    the window), a floating point number (the fraction of its\n    total width with respect to the width of the frame's root\n    window) or a function to be called with one argument - the\n    chosen window.  The function is supposed to adjust the width\n    of the window; its return value is ignored.\n 'preserve-size' -- The value should be either (t . nil) to\n    preserve the width of the chosen window, (nil . t) to\n    preserve its height or (t . t) to preserve its height and\n    width in future changes of the window configuration.\n 'window-parameters' -- The value specifies an alist of window\n    parameters to give the chosen window.\n 'allow-no-window' -- A non-nil value means that `display-buffer'\n    may not display the buffer and return nil immediately.\n\nThe entries 'window-height', 'window-width' and 'preserve-size'\nare applied only when the window used for displaying the buffer\nnever showed another buffer before.\n\nThe ACTION argument can also have a non-nil and non-list value.\nThis means to display the buffer in a window other than the\nselected one, even if it is already displayed in the selected\nwindow.  If called interactively with a prefix argument, ACTION\nis t.  Non-interactive calls should always supply a list or nil.\n\nThe optional third argument FRAME, if non-nil, acts like a\n(reusable-frames . FRAME) entry appended to the action alist\nspecified by the ACTION argument." ... #<bytecode 0x228719>) #<buffer *Messages*>)
  display-buffer(#<buffer *Messages*>)
  purpose-select-buffer(#<buffer *Messages*> switch-to-buffer nil)
  purpose-switch-buffer("*Messages*" nil nil)
  purpose-switch-to-buffer-advice(#f(compiled-function (buffer-or-name &optional norecord force-same-window) "Display buffer BUFFER-OR-NAME in the selected window.\n\nWARNING: This is NOT the way to work on another buffer temporarily\nwithin a Lisp program!  Use `set-buffer' instead.  That avoids\nmessing with the window-buffer correspondences.\n\nIf the selected window cannot display the specified buffer\nbecause it is a minibuffer window or strongly dedicated to\nanother buffer, call `pop-to-buffer' to select the buffer in\nanother window.  In interactive use, if the selected window is\nstrongly dedicated to its buffer, the value of the option\n`switch-to-buffer-in-dedicated-window' specifies how to proceed.\n\nIf called interactively, read the buffer name using `read-buffer'.\nThe variable `confirm-nonexistent-file-or-buffer' determines\nwhether to request confirmation before creating a new buffer.\nSee `read-buffer' for features related to input and completion\nof buffer names.\n\nBUFFER-OR-NAME may be a buffer, a string (a buffer name), or nil.\nIf BUFFER-OR-NAME is a string that does not identify an existing\nbuffer, create a buffer with that name.  If BUFFER-OR-NAME is\nnil, switch to the buffer returned by `other-buffer'.\n\nIf optional argument NORECORD is non-nil, do not put the buffer\nat the front of the buffer list, and do not make the window\ndisplaying it the most recently selected one.\n\nIf optional argument FORCE-SAME-WINDOW is non-nil, the buffer\nmust be displayed in the selected window when called\nnon-interactively; if that is impossible, signal an error rather\nthan calling `pop-to-buffer'.  It has no effect when the option\n`switch-to-buffer-obey-display-actions' is non-nil.\n\nThe option `switch-to-buffer-preserve-window-point' can be used\nto make the buffer appear at its last position in the selected\nwindow.\n\nIf the option `switch-to-buffer-obey-display-actions' is non-nil,\nrun the function `pop-to-buffer-same-window' instead.\nThis may display the buffer in another window as specified by\n`display-buffer-overriding-action', `display-buffer-alist' and\nother display related variables.  If this results in displaying\nthe buffer in the selected window, window start and point are adjusted\nas prescribed by the option `switch-to-buffer-preserve-window-point'.\nOtherwise, these are left alone.\n\nReturn the buffer switched to." (interactive #f(compiled-function () #<bytecode 0x4f2a01>)) #<bytecode 0x228d75>) "*Messages*" nil force-same-window)
  apply(purpose-switch-to-buffer-advice #f(compiled-function (buffer-or-name &optional norecord force-same-window) "Display buffer BUFFER-OR-NAME in the selected window.\n\nWARNING: This is NOT the way to work on another buffer temporarily\nwithin a Lisp program!  Use `set-buffer' instead.  That avoids\nmessing with the window-buffer correspondences.\n\nIf the selected window cannot display the specified buffer\nbecause it is a minibuffer window or strongly dedicated to\nanother buffer, call `pop-to-buffer' to select the buffer in\nanother window.  In interactive use, if the selected window is\nstrongly dedicated to its buffer, the value of the option\n`switch-to-buffer-in-dedicated-window' specifies how to proceed.\n\nIf called interactively, read the buffer name using `read-buffer'.\nThe variable `confirm-nonexistent-file-or-buffer' determines\nwhether to request confirmation before creating a new buffer.\nSee `read-buffer' for features related to input and completion\nof buffer names.\n\nBUFFER-OR-NAME may be a buffer, a string (a buffer name), or nil.\nIf BUFFER-OR-NAME is a string that does not identify an existing\nbuffer, create a buffer with that name.  If BUFFER-OR-NAME is\nnil, switch to the buffer returned by `other-buffer'.\n\nIf optional argument NORECORD is non-nil, do not put the buffer\nat the front of the buffer list, and do not make the window\ndisplaying it the most recently selected one.\n\nIf optional argument FORCE-SAME-WINDOW is non-nil, the buffer\nmust be displayed in the selected window when called\nnon-interactively; if that is impossible, signal an error rather\nthan calling `pop-to-buffer'.  It has no effect when the option\n`switch-to-buffer-obey-display-actions' is non-nil.\n\nThe option `switch-to-buffer-preserve-window-point' can be used\nto make the buffer appear at its last position in the selected\nwindow.\n\nIf the option `switch-to-buffer-obey-display-actions' is non-nil,\nrun the function `pop-to-buffer-same-window' instead.\nThis may display the buffer in another window as specified by\n`display-buffer-overriding-action', `display-buffer-alist' and\nother display related variables.  If this results in displaying\nthe buffer in the selected window, window start and point are adjusted\nas prescribed by the option `switch-to-buffer-preserve-window-point'.\nOtherwise, these are left alone.\n\nReturn the buffer switched to." (interactive #f(compiled-function () #<bytecode 0x4f3661>)) #<bytecode 0x228d75>) ("*Messages*" nil force-same-window))
  switch-to-buffer("*Messages*" nil force-same-window)
  funcall-interactively(switch-to-buffer "*Messages*" nil force-same-window)
  call-interactively(switch-to-buffer)
  purpose-friendly-switch-buffer()
  funcall-interactively(purpose-friendly-switch-buffer)
  call-interactively(purpose-friendly-switch-buffer)
  purpose-switch-buffer-overload(nil)
  funcall-interactively(purpose-switch-buffer-overload nil)
  call-interactively(purpose-switch-buffer-overload nil nil)
  command-execute(purpose-switch-buffer-overload)
jsmestad added a commit to jsmestad/emacs-purpose that referenced this issue Jan 14, 2019
@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

Thanks! Yeah, I did something similar (deleting the dedicated parameter from the window--display-buffer call in my local copy of window-purpose-switch.el). Unfortunately, the semantics of display-buffer-record-window and the display action alist are far enough beyond my current understanding that I cannot suggest a fix without a lot of study though.

@jsmestad
Copy link

@Miciah yeah I am in a similar boat  🥶

@jsmestad
Copy link

@Miciah looks like you are using spacemacs (a guess given you forked it). Mind showing me how you patched it? I cannot seem to get spacemacs to not load the MELPA version.

@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

I am indeed using Spacemacs. I had been directly editing ~/.emacs.d/elpa/27.0/develop/window-purpose-20180926.1047/window-purpose-switch.el, but I usually patch things like this by redefining them in dotspacemacs/user-config, and your question prompted me to add the following to my .spacemacs file:

  (if (version<=
       "20180926.1047"
       (configuration-layer//get-package-version-string 'window-purpose))
      (spacemacs|use-package-add-hook window-purpose
        :post-config
        (defun purpose-change-buffer (buffer window type &optional alist _dedicated)
          "Display BUFFER in WINDOW, but don't select it.
BUFFER, WINDOW, TYPE and ALIST have the same meaning as
`window--display-buffer'.'"
          (window--display-buffer buffer window type alist)))
    (message "window-purpose updated; check whether patch still needed"))

@jsmestad
Copy link

@Miciah this worked better for me than my snippet. Well done :)

@bmag
Copy link
Owner

bmag commented Jan 14, 2019

Can any of the Emacs 27 users post the value of the variable emacs-version please? I expect it to be "27.0.something...", but I'd like to confirm it.

Also, can you confirm that evaluating the following fixes the issue?

(with-eval-after-load 'window-purpose
  (defun purpose-change-buffer (buffer window type &optional alist dedicated)
    "Display BUFFER in WINDOW, but don't select it.
BUFFER, WINDOW, TYPE, ALIST and DEDICATED have the same meaning
as in `window--display-buffer'.

DEDICATED is ignored for Emacs versions in which
`window--display-buffer' doesn't support a DEDICATED
argument (i.e. version 27)."
    (if (version< emacs-version "27")
        (window--display-buffer buffer window type alist dedicated)
      ;; optional argument `dedicated' was removed in emacs 27 development branch
      ;; (as of 2019-01-14). This is a temporary fix to be re-evaluated once emacs
      ;; 27 development reaches the pretest phase. (docstring to be re-evaluated
      ;; as well)
      (window--display-buffer buffer window type alist))))

@bmag bmag added the bug label Jan 14, 2019
@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

emacs-version is "27.0.50" for me, using Emacs built from Git master this past weekend.

@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

The patched function makes Emacs usable, but it is not a complete solution. One problem with the patched purpose-change-buffer is that kill-buffer-and-window (SPC b x or SPC w x in Spacemacs) only kills the buffer now, and leaves the window configuration unchanged.

@bmag
Copy link
Owner

bmag commented Jan 14, 2019

kill-buffer-and-window only kills the buffer now, and leaves the window configuration unchanged

That's probably an unrelated issue, I don't see how purpose-change-buffer can cause that. The only possible difference from Emacs 26 is that a window won't be dedicated when it originally should be dedicated, but dedication shouldn't affect kill-buffer-and-window (at least in Emacs 26). I assume your patch above has the same issue?

@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

I assume your patch above has the same issue?

Right, I was describing the behavior I saw with my patched purpose-change-buffer. However, I was testing in Spacemacs, and I see that kill-buffer-and-window (C-x 4 0) works properly when I use emacs -Q --eval "(push \"$HOME/.emacs.d/elpa/27.0/develop/window-purpose-20180926.1047\" load-path)" --eval '(progn (toggle-debug-on-error) (require ''window-purpose) (purpose-mode))' with the patched purpose-change-buffer. Sorry for the noise!

@Miciah
Copy link
Contributor Author

Miciah commented Jan 14, 2019

Apologies again, I missed the second part of your first comment. The code you posted does resolve the problem for me (using emacs -Q ...).

@bmag
Copy link
Owner

bmag commented Jan 14, 2019

Ok, the issue should be fixed by da08c9d, and the updated version should be available from Melpa soon.

Thank you all for the reports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants