abo-abo / swiper

Ivy - a generic completion frontend for Emacs, Swiper - isearch with an overview, and more. Oh, man!
https://oremacs.com/swiper/
2.31k stars 338 forks source link

Ivy is broken with a minibuffer-only frame. #380

Closed zhenya1007 closed 8 years ago

zhenya1007 commented 8 years ago

I have my Emacs set up with a minibuffer-only-frame. I have just installed swiper following the recommendations from the wiki, and, when I try to get any of the swiper commands, I get the error which reads "Cannot resize the root window of a frame." The net effect is that the package is completely unusable with a minibuffer-only-frame. I am happy to experiment a bit more, and help you debug this, if you are not able to reproduce it with your set-up.

abo-abo commented 8 years ago

minibuffer-only-frame

How do you set it up?

zhenya1007 commented 8 years ago

Thank you for a quick response, and apologies for not providing sufficient detail upfront!

I am able to repro using the following steps ($ is the prototypical shell prompt)

$ emacs -Q -l ivy-separate-minibuffer.el # ivy-separate-minibuffer.el.zip is attached

You will see that the error message "Cannot resize the root window of a frame." is displayed in the echo area (which is in the same -- smaller -- frame as the minibuffer).

For comparison, you can evaluate

(define-key ctl-x-map [(control ?f)] 'find-file)

in the scratch buffer, and type C-x C-f again.

For reference, my emacs-version is 25.1.50.1

ivy-separate-minibuffer.el.zip

abo-abo commented 8 years ago

Thanks for the details to reproduce.

Your setup feels very strange. The error is gone, but you'll have to resize the minibuffer frame manually.

zhenya1007 commented 8 years ago

Thank you for a lightning-fast turn-around on the fix! I am very impressed with your responsiveness and follow-through. I can handle resizing the minibuffer frame (the definition of window--resize-mini-window looks promising as an inspiration).

I agree that my set-up is not for everyone. It was inspired by OneOnOneEmacs, except that my actual set-up uses display-buffer-base-action and friends. I just found that I really buy into the basic premise of OneOnOneEmacs that, "windows are a work-around for not having better support for frames in terminals."

pjones commented 6 years ago

@zhenya1007 How did you end up resolving this? I'm working through the same issue with a minibuffer frame via EXWM ch11ng/exwm#489. Thanks.

zhenya1007 commented 6 years ago

@pjones I ended up going with the competition, namely Helm; it does not (as far as I can tell) expect to be able to resize the minibuffer, so I never explored the window--resize-mini-window and friends. I realize this probably isn't the answer you were looking for, however.

pjones commented 6 years ago

@zhenya1007, @abo-abo:

I got Ivy working with a dedicated minibuffer:

(custom-set-variables
 '(ivy-fixed-height-minibuffer nil)
 '(ivy-add-newline-after-prompt nil))

If either of these two variables are set Ivy will try to set the window height which throws an error. It would be nice if Ivy was a bit smarter about calling set-window-text-height since Emacs fully supports and even documents how to have a dedicated minibuffer.

See also ch11ng/exwm#489