File: server.el.patch

package info (click to toggle)
lilypond 2.8.7-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 13,932 kB
  • ctags: 9,802
  • sloc: cpp: 57,785; lisp: 18,180; python: 11,665; sh: 3,195; yacc: 2,392; lex: 982; perl: 373; ansic: 316; makefile: 131
file content (165 lines) | stat: -rw-r--r-- 6,374 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
From: Jan Nieuwenhuizen <janneke@gnu.org>
Subject: Bugfix and feature for server.el
To: emacs-devel@gnu.org
cc: Han-Wen <hanwen@cs.uu.nl>
Date: Sat, 10 Aug 2002 17:46:22 +0200
Organization: Jan at Peder


Find the following fix attached.  We had a problem with our
application that uses `emacslient --no-wait' to edit input files.

Emacs-21.2 (unlike previous versions), when invoked through
`emacsclient --no-wait', wants to revert buffers whenever they have
been edited, and does allow any editing, which is annoying.  When
invoking with --no-wait, we are typically `moving around' and editing
the same file all the time; and do not want to revert.

When it does revert the buffer, it does not use the column argument of
emacsclient; this is now fixed.

Greetings,
Han-Wen and Jan.


Btw: this message was sent to bug-gnu-emacs about three weeks ago, but
     that list seems to be slightly foobarred?  We both have current
     disclaimers with GNU.


ChangeLog:
2002-07-21  Jan Nieuwenhuizen  <janneke@gnu.org>

	* server.el (server-process-filter): Cleanup stray if.  Add
	'no-revert to file list entry when emacsclient was invoked with
	'--no-wait'.
	(server-visit-files): New function goto-line-column.  Accept
	'no-revert option.  Bugfix: also goto column when reverting
	buffer.

--- server.el.~1.78.~	2001-12-18 17:42:38.000000000 +0100
+++ server.el	2002-08-10 17:32:10.000000000 +0200
@@ -251,40 +251,43 @@ Prefix arg means just kill any existing 
 		       (substring request (match-beginning 0) (1- (match-end 0))))
 		      (pos 0))
 		  (setq request (substring request (match-end 0)))
-		  (if (string-match "\\`-nowait" arg)
-		      (setq nowait t)
-		    (cond
-    			;; ARG is a line number option.
-		     ((string-match "\\`\\+[0-9]+\\'" arg)
+		  (cond
+		   ((string-match "\\`-nowait" arg)
+		    (setq nowait t))
+		   ;; ARG is a line number option.
+		   ((string-match "\\`\\+[0-9]+\\'" arg)
 		      (setq lineno (string-to-int (substring arg 1))))
-		     ;; ARG is line number:column option. 
-		     ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
-		      (setq lineno (string-to-int (match-string 1 arg))
-			    columnno (string-to-int (match-string 2 arg))))
-		     (t
-		      ;; ARG is a file name.
-		      ;; Collapse multiple slashes to single slashes.
-		      (setq arg (command-line-normalize-file-name arg))
-		      ;; Undo the quoting that emacsclient does
-		      ;; for certain special characters.
-		      (while (string-match "&." arg pos)
-			(setq pos (1+ (match-beginning 0)))
-			(let ((nextchar (aref arg pos)))
-			  (cond ((= nextchar ?&)
-				 (setq arg (replace-match "&" t t arg)))
-				((= nextchar ?-)
-				 (setq arg (replace-match "-" t t arg)))
-				(t
-				 (setq arg (replace-match " " t t arg))))))
-		      ;; Now decode the file name if necessary.
-		      (if coding-system
-			  (setq arg (decode-coding-string arg coding-system)))
-		      (setq files
-			    (cons (list arg lineno columnno)
-				  files))
-		      (setq lineno 1)
-		      (setq columnno 0))))))
-	      (run-hooks 'pre-command-hook)
+		   ;; ARG is line number:column option. 
+		   ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
+		    (setq lineno (string-to-int (match-string 1 arg))
+			  columnno (string-to-int (match-string 2 arg))))
+		   (t
+		    ;; ARG is a file name.
+		    ;; Collapse multiple slashes to single slashes.
+		    (setq arg (command-line-normalize-file-name arg))
+		    ;; Undo the quoting that emacsclient does
+		    ;; for certain special characters.
+		    (while (string-match "&." arg pos)
+		      (setq pos (1+ (match-beginning 0)))
+		      (let ((nextchar (aref arg pos)))
+			(cond ((= nextchar ?&)
+			       (setq arg (replace-match "&" t t arg)))
+			      ((= nextchar ?-)
+			       (setq arg (replace-match "-" t t arg)))
+			      (t
+			       (setq arg (replace-match " " t t arg))))))
+		    ;; Now decode the file name if necessary.
+		    (if coding-system
+			(setq arg (decode-coding-string arg coding-system)))
+		    (setq files
+			  ;; When invoking emacsclient with --no-wait, we are
+			  ;; typically `moving around' and editing the same file;
+			  ;; and do not want to revert.  Should make --no-revert
+			  ;; option for emacsclient?
+			  (cons (list arg lineno columnno (if nowait 'no-revert nil))
+				files))
+		    (setq lineno 1)
+		    (setq columnno 0)))))
 	      (server-visit-files files client nowait)
 	      (run-hooks 'post-command-hook)
 	      ;; CLIENT is now a list (CLIENTNUM BUFFERS...)
@@ -309,6 +312,13 @@ Prefix arg means just kill any existing 
 FILES is an alist whose elements are (FILENAME LINENUMBER COLUMNNUMBER).
 NOWAIT non-nil means this client is not waiting for the results,
 so don't mark these buffers specially, just visit them normally."
+
+  (defun goto-line-column (file-line-col)
+    (goto-line (nth 1 file-line-col))
+    (let ((column-number (nth 2 file-line-col)))
+      (if (> column-number 0)
+	  (move-to-column (1- column-number)))))
+  
   ;; Bind last-nonmenu-event to force use of keyboard, not mouse, for queries.
   (let (client-record (last-nonmenu-event t) (obuf (current-buffer)))
     ;; Restore the current buffer afterward, but not using save-excursion,
@@ -322,7 +332,8 @@ so don't mark these buffers specially, j
 	  (let* ((filen (car (car files)))
 		 (obuf (get-file-buffer filen)))
 	    (push filen file-name-history)
-	    (if (and obuf (set-buffer obuf))
+	    (if (and obuf (set-buffer obuf)
+		     (not (memq 'no-revert (car files))))
 		(progn
 		  (cond ((file-exists-p filen)
 			 (if (or (not (verify-visited-file-modtime obuf))
@@ -335,12 +346,9 @@ so don't mark these buffers specially, j
 				      ", write buffer to file? "))
 			     (write-file filen))))
 		  (setq server-existing-buffer t)
-		  (goto-line (nth 1 (car files))))
+		  (goto-line-column (car files)))
 	      (set-buffer (find-file-noselect filen))
-	      (goto-line (nth 1 (car files)))
-	      (let ((column-number (nth 2 (car files))))
-		(when (> column-number 0)
-		  (move-to-column (1- column-number))))
+	      (goto-line-column (car files))
 	      (run-hooks 'server-visit-hook)))
 	  (if (not nowait)
 	      (setq server-buffer-clients

-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond - The music typesetter
http://www.xs4all.nl/~jantien       | http://www.lilypond.org