]> git.donarmstrong.com Git - lilypond.git/commitdiff
move emacs patches.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 28 Oct 2006 20:55:17 +0000 (22:55 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 28 Oct 2006 20:55:17 +0000 (22:55 +0200)
elisp/server.el.patch [new file with mode: 0644]

diff --git a/elisp/server.el.patch b/elisp/server.el.patch
new file mode 100644 (file)
index 0000000..fb3c59f
--- /dev/null
@@ -0,0 +1,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
+
+
+
+