diff options
| author | Karoly Lorentey | 2006-12-03 15:12:18 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-12-03 15:12:18 +0000 |
| commit | 8c778e28bcf16b4baef6400a124ec2403941e940 (patch) | |
| tree | d6cba55fc1847c794cf08b3f0fd8571bbac0717d | |
| parent | 974b73e83842d63b14512aa225cc53983a9b5d14 (diff) | |
| download | emacs-8c778e28bcf16b4baef6400a124ec2403941e940.tar.gz emacs-8c778e28bcf16b4baef6400a124ec2403941e940.zip | |
Fix crash in window.c.
* src/window.c (set_window_buffer): Don't call clear_mouse_face on tty frames.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-589
| -rw-r--r-- | s.diff | 184 | ||||
| -rw-r--r-- | src/window.c | 2 |
2 files changed, 1 insertions, 185 deletions
diff --git a/s.diff b/s.diff deleted file mode 100644 index 5fc53faa16b..00000000000 --- a/s.diff +++ /dev/null | |||
| @@ -1,184 +0,0 @@ | |||
| 1 | --- orig/lisp/server.el | ||
| 2 | +++ mod/lisp/server.el | ||
| 3 | @@ -83,18 +83,54 @@ | ||
| 4 | "Emacs running as a server process." | ||
| 5 | :group 'external) | ||
| 6 | |||
| 7 | +(defcustom server-use-tcp nil | ||
| 8 | + "If non-nil, use TCP sockets instead of local sockets." | ||
| 9 | + :set #'(lambda (sym val) | ||
| 10 | + (unless (featurep 'make-network-process '(:family local)) | ||
| 11 | + (setq val t) | ||
| 12 | + (unless load-in-progress | ||
| 13 | + (message "Local sockets unsupported, using TCP sockets"))) | ||
| 14 | + (when val (random t)) | ||
| 15 | + (set-default sym val)) | ||
| 16 | + :group 'server | ||
| 17 | + :type 'boolean | ||
| 18 | + :version "22.1") | ||
| 19 | + | ||
| 20 | +(defcustom server-host nil | ||
| 21 | + "The name or IP address to use as host address of the server process. | ||
| 22 | +If set, the server accepts remote connections; otherwise it is local." | ||
| 23 | + :group 'server | ||
| 24 | + :type '(choice | ||
| 25 | + (string :tag "Name or IP address") | ||
| 26 | + (const :tag "Local" nil)) | ||
| 27 | + :version "22.1") | ||
| 28 | +(put 'server-host 'risky-local-variable t) | ||
| 29 | + | ||
| 30 | +(defcustom server-auth-dir "~/.emacs.d/server/" | ||
| 31 | + "Directory for server authentication files." | ||
| 32 | + :group 'server | ||
| 33 | + :type 'directory | ||
| 34 | + :version "22.1") | ||
| 35 | +(put 'server-auth-dir 'risky-local-variable t) | ||
| 36 | + | ||
| 37 | +(defcustom server-raise-frame t | ||
| 38 | + "If non-nil, raise frame when switching to a buffer." | ||
| 39 | + :group 'server | ||
| 40 | + :type 'boolean | ||
| 41 | + :version "22.1") | ||
| 42 | + | ||
| 43 | (defcustom server-visit-hook nil | ||
| 44 | - "*Hook run when visiting a file for the Emacs server." | ||
| 45 | + "Hook run when visiting a file for the Emacs server." | ||
| 46 | :group 'server | ||
| 47 | :type 'hook) | ||
| 48 | |||
| 49 | (defcustom server-switch-hook nil | ||
| 50 | - "*Hook run when switching to a buffer for the Emacs server." | ||
| 51 | + "Hook run when switching to a buffer for the Emacs server." | ||
| 52 | :group 'server | ||
| 53 | :type 'hook) | ||
| 54 | |||
| 55 | (defcustom server-done-hook nil | ||
| 56 | - "*Hook run when done editing a buffer for the Emacs server." | ||
| 57 | + "Hook run when done editing a buffer for the Emacs server." | ||
| 58 | :group 'server | ||
| 59 | :type 'hook) | ||
| 60 | |||
| 61 | @@ -113,7 +149,7 @@ | ||
| 62 | (put 'server-buffer-clients 'permanent-local t) | ||
| 63 | |||
| 64 | (defcustom server-window nil | ||
| 65 | - "*Specification of the window to use for selecting Emacs server buffers. | ||
| 66 | + "Specification of the window to use for selecting Emacs server buffers. | ||
| 67 | If nil, use the selected window. | ||
| 68 | If it is a function, it should take one argument (a buffer) and | ||
| 69 | display and select it. A common value is `pop-to-buffer'. | ||
| 70 | @@ -132,14 +168,14 @@ | ||
| 71 | (function :tag "Other function"))) | ||
| 72 | |||
| 73 | (defcustom server-temp-file-regexp "^/tmp/Re\\|/draft$" | ||
| 74 | - "*Regexp matching names of temporary files. | ||
| 75 | + "Regexp matching names of temporary files. | ||
| 76 | These are deleted and reused after each edit by the programs that | ||
| 77 | invoke the Emacs server." | ||
| 78 | :group 'server | ||
| 79 | :type 'regexp) | ||
| 80 | |||
| 81 | (defcustom server-kill-new-buffers t | ||
| 82 | - "*Whether to kill buffers when done with them. | ||
| 83 | + "Whether to kill buffers when done with them. | ||
| 84 | If non-nil, kill a buffer unless it already existed before editing | ||
| 85 | it with Emacs server. If nil, kill only buffers as specified by | ||
| 86 | `server-temp-file-regexp'. | ||
| 87 | @@ -151,7 +187,7 @@ | ||
| 88 | :version "21.1") | ||
| 89 | |||
| 90 | (or (assq 'server-buffer-clients minor-mode-alist) | ||
| 91 | - (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) | ||
| 92 | + (push '(server-buffer-clients " Server") minor-mode-alist)) | ||
| 93 | |||
| 94 | (defvar server-existing-buffer nil | ||
| 95 | "Non-nil means the buffer existed before the server was asked to visit it. | ||
| 96 | @@ -390,11 +426,12 @@ | ||
| 97 | (setq dir (directory-file-name dir)) | ||
| 98 | (let ((attrs (file-attributes dir))) | ||
| 99 | (unless attrs | ||
| 100 | - (letf (((default-file-modes) ?\700)) (make-directory dir)) | ||
| 101 | + (letf (((default-file-modes) ?\700)) (make-directory dir t)) | ||
| 102 | (setq attrs (file-attributes dir))) | ||
| 103 | ;; Check that it's safe for use. | ||
| 104 | (unless (and (eq t (car attrs)) (eq (nth 2 attrs) (user-uid)) | ||
| 105 | - (zerop (logand ?\077 (file-modes dir)))) | ||
| 106 | + (or (eq system-type 'windows-nt) | ||
| 107 | + (zerop (logand ?\077 (file-modes dir))))) | ||
| 108 | (error "The directory %s is unsafe" dir)))) | ||
| 109 | |||
| 110 | ;;;###autoload | ||
| 111 | @@ -966,10 +1003,10 @@ | ||
| 112 | (let ((version-control nil) | ||
| 113 | (buffer-backed-up nil)) | ||
| 114 | (save-buffer)) | ||
| 115 | - (if (and (buffer-modified-p) | ||
| 116 | - buffer-file-name | ||
| 117 | - (y-or-n-p (concat "Save file " buffer-file-name "? "))) | ||
| 118 | - (save-buffer))) | ||
| 119 | + (when (and (buffer-modified-p) | ||
| 120 | + buffer-file-name | ||
| 121 | + (y-or-n-p (concat "Save file " buffer-file-name "? "))) | ||
| 122 | + (save-buffer))) | ||
| 123 | (server-buffer-done (current-buffer)))) | ||
| 124 | |||
| 125 | ;; Ask before killing a server buffer. | ||
| 126 | @@ -1027,12 +1064,12 @@ | ||
| 127 | starts server process and that is all. Invoked by \\[server-edit]." | ||
| 128 | (interactive "P") | ||
| 129 | (cond | ||
| 130 | - ((or arg | ||
| 131 | - (not server-process) | ||
| 132 | - (memq (process-status server-process) '(signal exit))) | ||
| 133 | - (server-mode 1)) | ||
| 134 | - (server-clients (apply 'server-switch-buffer (server-done))) | ||
| 135 | - (t (message "No server editing buffers exist")))) | ||
| 136 | + ((or arg | ||
| 137 | + (not server-process) | ||
| 138 | + (memq (process-status server-process) '(signal exit))) | ||
| 139 | + (server-mode 1)) | ||
| 140 | + (server-clients (apply 'server-switch-buffer (server-done))) | ||
| 141 | + (t (message "No server editing buffers exist")))) | ||
| 142 | |||
| 143 | (defun server-switch-buffer (&optional next-buffer killed-one) | ||
| 144 | "Switch to another buffer, preferably one that has a client. | ||
| 145 | @@ -1065,21 +1102,19 @@ | ||
| 146 | (let ((win (get-buffer-window next-buffer 0))) | ||
| 147 | (if (and win (not server-window)) | ||
| 148 | ;; The buffer is already displayed: just reuse the window. | ||
| 149 | - (let ((frame (window-frame win))) | ||
| 150 | - (if (eq (frame-visible-p frame) 'icon) | ||
| 151 | - (raise-frame frame)) | ||
| 152 | - (select-window win) | ||
| 153 | - (set-buffer next-buffer)) | ||
| 154 | + (progn | ||
| 155 | + (select-window win) | ||
| 156 | + (set-buffer next-buffer)) | ||
| 157 | ;; Otherwise, let's find an appropriate window. | ||
| 158 | (cond ((and (windowp server-window) | ||
| 159 | (window-live-p server-window)) | ||
| 160 | (select-window server-window)) | ||
| 161 | ((framep server-window) | ||
| 162 | - (if (not (frame-live-p server-window)) | ||
| 163 | - (setq server-window (make-frame))) | ||
| 164 | + (unless (frame-live-p server-window) | ||
| 165 | + (setq server-window (make-frame))) | ||
| 166 | (select-window (frame-selected-window server-window)))) | ||
| 167 | - (if (window-minibuffer-p (selected-window)) | ||
| 168 | - (select-window (next-window nil 'nomini 0))) | ||
| 169 | + (when (window-minibuffer-p (selected-window)) | ||
| 170 | + (select-window (next-window nil 'nomini 0))) | ||
| 171 | ;; Move to a non-dedicated window, if we have one. | ||
| 172 | (when (window-dedicated-p (selected-window)) | ||
| 173 | (select-window | ||
| 174 | @@ -1093,7 +1128,9 @@ | ||
| 175 | (switch-to-buffer next-buffer) | ||
| 176 | ;; After all the above, we might still have ended up with | ||
| 177 | ;; a minibuffer/dedicated-window (if there's no other). | ||
| 178 | - (error (pop-to-buffer next-buffer))))))))) | ||
| 179 | + (error (pop-to-buffer next-buffer))))))) | ||
| 180 | + (when server-raise-frame | ||
| 181 | + (select-frame-set-input-focus (window-frame (selected-window)))))) | ||
| 182 | |||
| 183 | ;;;###autoload | ||
| 184 | (defun server-save-buffers-kill-terminal (proc &optional arg) | ||
diff --git a/src/window.c b/src/window.c index c46df0ef04d..1576ed16c8f 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -3353,7 +3353,7 @@ set_window_buffer (window, buffer, run_hooks_p, keep_margins_p) | |||
| 3353 | 3353 | ||
| 3354 | #ifdef HAVE_WINDOW_SYSTEM | 3354 | #ifdef HAVE_WINDOW_SYSTEM |
| 3355 | BLOCK_INPUT; | 3355 | BLOCK_INPUT; |
| 3356 | if (f && FRAME_X_OUTPUT (f) | 3356 | if (f && FRAME_WINDOW_P (f) && FRAME_X_OUTPUT (f) |
| 3357 | && (dpyinfo = FRAME_X_DISPLAY_INFO (f)) | 3357 | && (dpyinfo = FRAME_X_DISPLAY_INFO (f)) |
| 3358 | && EQ (window, dpyinfo->mouse_face_window)) | 3358 | && EQ (window, dpyinfo->mouse_face_window)) |
| 3359 | clear_mouse_face (dpyinfo); | 3359 | clear_mouse_face (dpyinfo); |