Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
93289e14
Commit
93289e14
authored
Jul 01, 1997
by
Richard M. Stallman
Browse files
(shrink-window-if-larger-than-buffer):
Use compute-motion, instead of inserting newlines.
parent
c55db078
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
51 deletions
+38
-51
lisp/window.el
lisp/window.el
+38
-51
No files found.
lisp/window.el
View file @
93289e14
...
...
@@ -239,57 +239,44 @@ or if the window is not the full width of the frame,
or if the window is the only window of its frame."
(
interactive
)
(
or
window
(
setq
window
(
selected-window
)))
(
save-excursion
(
set-buffer
(
window-buffer
window
))
(
let*
((
w
(
selected-window
))
;save-window-excursion can't win
(
buffer-file-name
buffer-file-name
)
(
p
(
point
))
(
n
0
)
(
ignore-final-newline
;; If buffer ends with a newline, ignore it when counting height
;; unless point is after it.
(
and
(
not
(
eobp
))
(
eq
?\n
(
char-after
(
1-
(
point-max
))))))
(
buffer-read-only
nil
)
(
modified
(
buffer-modified-p
))
(
buffer
(
current-buffer
))
(
params
(
frame-parameters
(
window-frame
window
)))
(
mini
(
cdr
(
assq
'minibuffer
params
)))
(
edges
(
window-edges
(
selected-window
))))
(
if
(
and
(
<
1
(
let
((
frame
(
selected-frame
)))
(
select-frame
(
window-frame
window
))
(
unwind-protect
(
count-windows
)
(
select-frame
frame
))))
(
=
(
window-width
window
)
(
frame-width
(
window-frame
window
)))
(
pos-visible-in-window-p
(
point-min
)
window
)
(
not
(
eq
mini
'only
))
(
or
(
not
mini
)
(
<
(
nth
3
edges
)
(
nth
1
(
window-edges
mini
)))
(
>
(
nth
1
edges
)
(
cdr
(
assq
'menu-bar-lines
params
)))))
(
unwind-protect
(
progn
(
select-window
(
or
window
w
))
(
goto-char
(
point-min
))
(
while
(
pos-visible-in-window-p
(
-
(
point-max
)
(
if
ignore-final-newline
1
0
)))
;; defeat file locking... don't try this at home, kids!
(
setq
buffer-file-name
nil
)
(
insert
?\n
)
(
setq
n
(
1+
n
)))
(
if
(
>
n
0
)
(
shrink-window
(
min
(
1-
n
)
(
-
(
window-height
)
window-min-height
)))))
(
delete-region
(
point-min
)
(
point
))
(
set-buffer-modified-p
modified
)
(
goto-char
p
)
(
select-window
w
)
;; Make sure we unbind buffer-read-only
;; with the proper current buffer.
(
set-buffer
buffer
))))))
(
let*
((
ignore-final-newline
;; If buffer ends with a newline, ignore it when counting height
;; unless point is after it.
(
and
(
not
(
eobp
))
(
eq
?\n
(
char-after
(
1-
(
point-max
))))))
(
params
(
frame-parameters
(
window-frame
window
)))
(
mini
(
cdr
(
assq
'minibuffer
params
)))
(
edges
(
window-edges
(
selected-window
))))
(
if
(
and
(
<
1
(
save-selected-window
(
select-window
window
)
(
count-windows
)))
(
=
(
window-width
window
)
(
frame-width
(
window-frame
window
)))
(
pos-visible-in-window-p
(
point-min
)
window
)
(
not
(
eq
mini
'only
))
(
or
(
not
mini
)
(
<
(
nth
3
edges
)
(
nth
1
(
window-edges
mini
)))
(
>
(
nth
1
edges
)
(
cdr
(
assq
'menu-bar-lines
params
)))))
(
save-selected-window
(
select-window
window
)
(
let
(
result
height
)
(
save-excursion
(
set-buffer
(
window-buffer
window
))
(
goto-char
(
point-min
))
(
setq
result
(
compute-motion
(
point-min
)
'
(
0
.
0
)
(
-
(
point-max
)
(
if
ignore-final-newline
1
0
))
(
cons
0
(
window-height
))
(
window-width
)
nil
window
))
;; Get number of screen lines that the text needs.
(
setq
text-height
(
+
1
(
nth
2
result
)))
;; Shrink down to that, or as far as we can go.
(
if
(
>
(
window-height
)
(
1+
text-height
))
(
shrink-window
(
-
(
window-height
)
(
max
(
1+
text-height
)
window-min-height
))))))))))
(
defun
kill-buffer-and-window
()
"Kill the current buffer and delete the selected window."
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment