comparison lisp/simple.el @ 32203:f10445ddce32

(display-message-or-buffer): New function. (shell-command-on-region): Use `display-message-or-buffer'.
author Miles Bader <miles@gnu.org>
date Fri, 06 Oct 2000 11:34:34 +0000
parents 2d44e29be6fa
children ae7e7e548bf3
comparison
equal deleted inserted replaced
32202:20426fa61992 32203:f10445ddce32
1213 (set-process-sentinel proc 'shell-command-sentinel) 1213 (set-process-sentinel proc 'shell-command-sentinel)
1214 )) 1214 ))
1215 (shell-command-on-region (point) (point) command 1215 (shell-command-on-region (point) (point) command
1216 output-buffer nil error-buffer))))))) 1216 output-buffer nil error-buffer)))))))
1217 1217
1218 (defun display-message-or-buffer (message
1219 &optional buffer-name not-this-window frame)
1220 "Display MESSAGE in the echo area if possible, otherwise in a pop-up buffer.
1221 MESSAGE may be either a string or a buffer.
1222
1223 A buffer is displayed using `display-buffer' if MESSAGE is too long for
1224 the maximum height of the echo area, as defined by `max-mini-window-height'.
1225
1226 If MESSAGE is a string, then the optional argument BUFFER-NAME is the
1227 name of the buffer used to display it in the case where a pop-up buffer
1228 is used, defaulting to `*Message*'. In the case where MESSAGE is a
1229 string and it is displayed in the echo area, it is not specified whether
1230 the contents are inserted into the buffer anyway.
1231
1232 Optional arguments NOT-THIS-WINDOW and FRAME are as for `display-buffer',
1233 and only used if a buffer is displayed."
1234 (cond ((and (stringp message) (not (string-match "\n" message)))
1235 ;; Trivial case where we can use the echo area
1236 (message "%s" message))
1237 ((and (stringp message)
1238 (= (string-match "\n" message) (1- (length message))))
1239 ;; Trivial case where we can just remove single trailing newline
1240 (message "%s" (substring message 0 (1- (length message)))))
1241 (t
1242 ;; General case
1243 (with-current-buffer
1244 (if (bufferp message)
1245 message
1246 (get-buffer-create (or buffer-name "*Message*")))
1247
1248 (unless (bufferp message)
1249 (erase-buffer)
1250 (insert message))
1251
1252 (let ((lines
1253 (if (= (buffer-size) 0)
1254 0
1255 (count-lines (point-min) (point-max)))))
1256 (cond ((or (<= lines 1)
1257 (<= lines
1258 (cond ((floatp max-mini-window-height)
1259 (* (frame-height) max-mini-window-height))
1260 ((integerp max-mini-window-height)
1261 max-mini-window-height)
1262 (t
1263 1))))
1264 ;; Echo area
1265 (goto-char (point-max))
1266 (when (bolp)
1267 (backward-char 1))
1268 (message "%s" (buffer-substring (point-min) (point))))
1269 (t
1270 ;; Buffer
1271 (goto-char (point-min))
1272 (display-buffer message not-this-window frame))))))))
1273
1274
1218 ;; We have a sentinel to prevent insertion of a termination message 1275 ;; We have a sentinel to prevent insertion of a termination message
1219 ;; in the buffer itself. 1276 ;; in the buffer itself.
1220 (defun shell-command-sentinel (process signal) 1277 (defun shell-command-sentinel (process signal)
1221 (if (memq (process-status process) '(exit signal)) 1278 (if (memq (process-status process) '(exit signal))
1222 (message "%s: %s." 1279 (message "%s: %s."
1343 (list buffer error-file) 1400 (list buffer error-file)
1344 buffer) 1401 buffer)
1345 nil shell-command-switch command))) 1402 nil shell-command-switch command)))
1346 (setq success (and exit-status (equal 0 exit-status))) 1403 (setq success (and exit-status (equal 0 exit-status)))
1347 ;; Report the amount of output. 1404 ;; Report the amount of output.
1348 (let ((lines (save-excursion 1405 (if (with-current-buffer buffer (> (point-max) (point-min)))
1349 (set-buffer buffer) 1406 ;; There's some output, display it
1350 (if (= (buffer-size) 0) 1407 (display-message-or-buffer buffer)
1351 0 1408 ;; No output; error?
1352 (count-lines (point-min) (point-max)))))) 1409 (message (if (and error-file
1353 (cond ((= lines 0) 1410 (< 0 (nth 7 (file-attributes error-file))))
1354 (if (and error-file 1411 "(Shell command %sed with some error output)"
1355 (< 0 (nth 7 (file-attributes error-file)))) 1412 "(Shell command %sed with no output)")
1356 (message "(Shell command %sed with some error output)" 1413 (if (equal 0 exit-status) "succeed" "fail"))
1357 (if (equal 0 exit-status) 1414 (kill-buffer buffer)))))
1358 "succeed" 1415
1359 "fail"))
1360 (message "(Shell command %sed with no output)"
1361 (if (equal 0 exit-status)
1362 "succeed"
1363 "fail")))
1364 (kill-buffer buffer))
1365 ((or (= lines 1)
1366 (<= lines
1367 (cond ((floatp max-mini-window-height)
1368 (* (frame-height) max-mini-window-height))
1369 ((integerp max-mini-window-height)
1370 max-mini-window-height)
1371 (t
1372 1))))
1373 (message "%s"
1374 (with-current-buffer buffer
1375 (goto-char (point-max))
1376 (when (bolp)
1377 (backward-char 1))
1378 (buffer-substring (point-min) (point)))))
1379 (t
1380 (save-excursion
1381 (set-buffer buffer)
1382 (goto-char (point-min)))
1383 (display-buffer buffer)))))))
1384 (when (and error-file (file-exists-p error-file)) 1416 (when (and error-file (file-exists-p error-file))
1385 (if (< 0 (nth 7 (file-attributes error-file))) 1417 (if (< 0 (nth 7 (file-attributes error-file)))
1386 (with-current-buffer (get-buffer-create error-buffer) 1418 (with-current-buffer (get-buffer-create error-buffer)
1387 (let ((pos-from-end (- (point-max) (point)))) 1419 (let ((pos-from-end (- (point-max) (point))))
1388 (or (bobp) 1420 (or (bobp)