diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/frame.el | 18 | ||||
| -rw-r--r-- | lisp/server.el | 15 |
2 files changed, 27 insertions, 6 deletions
diff --git a/lisp/frame.el b/lisp/frame.el index 367f40d6f8e..1dbf8321bf3 100644 --- a/lisp/frame.el +++ b/lisp/frame.el | |||
| @@ -558,6 +558,24 @@ The optional second argument PARAMETERS specifies additional frame parameters." | |||
| 558 | (error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN")) | 558 | (error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN")) |
| 559 | (make-frame (cons (cons 'display display) parameters))) | 559 | (make-frame (cons (cons 'display display) parameters))) |
| 560 | 560 | ||
| 561 | ;;;###autoload | ||
| 562 | (defun make-frame-on-tty (device type &optional parameters) | ||
| 563 | "Make a frame on terminal DEVICE which is of type TYPE (e.g., \"xterm\"). | ||
| 564 | The optional third argument PARAMETERS specifies additional frame parameters. | ||
| 565 | |||
| 566 | DEVICE must be a proxy psudo terminal created by emacsclient, | ||
| 567 | otherwise there will be problems with terminal input and window | ||
| 568 | resizes. (The kernel notifies processes about pending input or | ||
| 569 | terminal resizes only on the controlling terminal, so we need | ||
| 570 | emacsclient to sit on the real terminal device, create SIGIO | ||
| 571 | signals upon terminal input, and forward SIGWINCH signals to | ||
| 572 | us.)" | ||
| 573 | (unless device | ||
| 574 | (error "Invalid terminal device")) | ||
| 575 | (unless type | ||
| 576 | (error "Invalid terminal type")) | ||
| 577 | (make-frame `((tty . ,device) (tty-type . ,type) . ,parameters))) | ||
| 578 | |||
| 561 | (defun make-frame-command () | 579 | (defun make-frame-command () |
| 562 | "Make a new frame, and select it if the terminal displays only one frame." | 580 | "Make a new frame, and select it if the terminal displays only one frame." |
| 563 | (interactive) | 581 | (interactive) |
diff --git a/lisp/server.el b/lisp/server.el index f2c1fc9ce2a..9721dbc4a41 100644 --- a/lisp/server.el +++ b/lisp/server.el | |||
| @@ -345,12 +345,15 @@ PROC is the server process. Format of STRING is \"PATH PATH PATH... \\n\"." | |||
| 345 | (if coding-system | 345 | (if coding-system |
| 346 | (setq arg (decode-coding-string arg coding-system))) | 346 | (setq arg (decode-coding-string arg coding-system))) |
| 347 | (if eval | 347 | (if eval |
| 348 | (let ((v (eval (car (read-from-string arg))))) | 348 | (condition-case err |
| 349 | (when v | 349 | (let ((v (eval (car (read-from-string arg))))) |
| 350 | (with-temp-buffer | 350 | (when v |
| 351 | (let ((standard-output (current-buffer))) | 351 | (with-temp-buffer |
| 352 | (pp v) | 352 | (let ((standard-output (current-buffer))) |
| 353 | (process-send-region proc (point-min) (point-max)))))) | 353 | (pp v) |
| 354 | (process-send-region proc (point-min) (point-max)))))) | ||
| 355 | (error (process-send-string proc (concat "*Error* " (error-message-string err))))) | ||
| 356 | |||
| 354 | ;; ARG is a file name. | 357 | ;; ARG is a file name. |
| 355 | ;; Collapse multiple slashes to single slashes. | 358 | ;; Collapse multiple slashes to single slashes. |
| 356 | (setq arg (command-line-normalize-file-name arg)) | 359 | (setq arg (command-line-normalize-file-name arg)) |