emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r100480: Add --parent-id argument to


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100480: Add --parent-id argument to emacsclient.
Date: Sat, 29 May 2010 19:50:47 -0400
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100480
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Sat 2010-05-29 19:50:47 -0400
message:
  Add --parent-id argument to emacsclient.
  
  * lib-src/emacsclient.c (longopts, decode_options, print_help_and_exit):
  New arg `-parent-id'.
  (main): Send parent-id to Emacs.
  
  * lisp/server.el (server-process-filter): Receive parent-id argument
  from emacsclient.
  (server-create-window-system-frame): New arg.  Pass parent-id as
  frame parameter.
modified:
  etc/NEWS
  lib-src/ChangeLog
  lib-src/emacsclient.c
  lisp/ChangeLog
  lisp/server.el
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2010-05-27 23:30:11 +0000
+++ b/etc/NEWS  2010-05-29 23:50:47 +0000
@@ -43,6 +43,10 @@
 
 * Changes in Emacs 24.1
 
+** New emacsclient argument --parent-id ID can be used to open a
+client frame in parent X window ID, via XEmbed.  This works like the
+--parent-id argument to Emacs.
+
 ** Completion can cycle, depending on completion-cycle-threshold.
 
 ** auto-mode-case-fold is now enabled by default.

=== modified file 'lib-src/ChangeLog'
--- a/lib-src/ChangeLog 2010-05-27 05:43:27 +0000
+++ b/lib-src/ChangeLog 2010-05-29 23:50:47 +0000
@@ -1,3 +1,9 @@
+2010-05-29  Chong Yidong  <address@hidden>
+
+       * emacsclient.c (longopts, decode_options, print_help_and_exit):
+       New arg `-parent-id'.
+       (main): Send parent-id to Emacs.
+
 2010-05-27  Glenn Morris  <address@hidden>
 
        * Makefile.in (distclean): No more Makefile.c.

=== modified file 'lib-src/emacsclient.c'
--- a/lib-src/emacsclient.c     2010-04-02 03:10:33 +0000
+++ b/lib-src/emacsclient.c     2010-05-29 23:50:47 +0000
@@ -138,6 +138,9 @@
 /* The display on which Emacs should work.  --display.  */
 char *display = NULL;
 
+/* The parent window ID, if we are opening a frame via XEmbed.  */
+char *parent_id = NULL;
+
 /* Nonzero means open a new Emacs frame on the current terminal. */
 int tty = 0;
 
@@ -173,6 +176,7 @@
 #ifndef WINDOWSNT
   { "display", required_argument, NULL, 'd' },
 #endif
+  { "parent-id", required_argument, NULL, 'p' },
   { 0, 0, 0, 0 }
 };
 
@@ -583,6 +587,11 @@
           current_frame = 0;
           break;
 
+       case 'p':
+         parent_id = optarg;
+          current_frame = 0;
+         break;
+
        case 'H':
          print_help_and_exit ();
          break;
@@ -656,7 +665,8 @@
 -e, --eval             Evaluate the FILE arguments as ELisp expressions\n\
 -n, --no-wait          Don't wait for the server to return\n\
 -d DISPLAY, --display=DISPLAY\n\
-                       Visit the file in the given display\n"
+                       Visit the file in the given display\n\
+--parent-id=ID          Open in parent window ID, via XEmbed\n"
 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
 "-s SOCKET, --socket-name=SOCKET\n\
                        Set filename of the UNIX socket for communication\n"
@@ -1620,6 +1630,13 @@
       send_to_emacs (emacs_socket, " ");
     }
 
+  if (parent_id)
+    {
+      send_to_emacs (emacs_socket, "-parent-id ");
+      quote_argument (emacs_socket, parent_id);
+      send_to_emacs (emacs_socket, " ");
+    }
+
   /* If using the current frame, send tty information to Emacs anyway.
      In daemon mode, Emacs may need to occupy this tty if no other
      frame is available.  */

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-05-29 18:25:00 +0000
+++ b/lisp/ChangeLog    2010-05-29 23:50:47 +0000
@@ -1,5 +1,12 @@
 2010-05-29  Chong Yidong  <address@hidden>
 
+       * server.el (server-process-filter): Receive parent-id argument
+       from emacsclient.
+       (server-create-window-system-frame): New arg.  Pass parent-id as
+       frame parameter.
+
+2010-05-29  Chong Yidong  <address@hidden>
+
        * ansi-color.el: Delete unused escape sequences (Bug#6085).
        (ansi-color-drop-regexp): New constant.
        (ansi-color-apply, ansi-color-filter-region)

=== modified file 'lisp/server.el'
--- a/lisp/server.el    2010-05-27 23:30:11 +0000
+++ b/lisp/server.el    2010-05-29 23:50:47 +0000
@@ -711,7 +711,7 @@
                                      (number-to-string (emacs-pid)) "\n"))
     frame))
 
-(defun server-create-window-system-frame (display nowait proc)
+(defun server-create-window-system-frame (display nowait proc parent-id)
   (add-to-list 'frame-inherited-parameters 'client)
   (if (not (fboundp 'make-frame-on-display))
       (progn
@@ -727,12 +727,14 @@
     (let* ((params `((client . ,(if nowait 'nowait proc))
                      ;; This is a leftover, see above.
                      (environment . ,(process-get proc 'env))))
-           (frame (make-frame-on-display
-                   (or display
-                       (frame-parameter nil 'display)
-                       (getenv "DISPLAY")
-                       (error "Please specify display"))
-                   params)))
+          (display (or display
+                       (frame-parameter nil 'display)
+                       (getenv "DISPLAY")
+                       (error "Please specify display")))
+          frame)
+      (if parent-id
+         (push (cons 'parent-id (string-to-number parent-id)) params))
+      (setq frame (make-frame-on-display display params))
       (server-log (format "%s created" frame) proc)
       (select-frame frame)
       (process-put proc 'frame frame)
@@ -900,15 +902,16 @@
                (coding-system (and (default-value 'enable-multibyte-characters)
                                    (or file-name-coding-system
                                        default-file-name-coding-system)))
-               nowait ; t if emacsclient does not want to wait for us.
-               frame ; The frame that was opened for the client (if any).
-               display              ; Open the frame on this display.
-               dontkill       ; t if the client should not be killed.
+               nowait     ; t if emacsclient does not want to wait for us.
+               frame      ; Frame opened for the client (if any).
+               display    ; Open frame on this display.
+               parent-id  ; Window ID for XEmbed
+               dontkill   ; t if client should not be killed.
                commands
                dir
                use-current-frame
-               tty-name       ;nil, `window-system', or the tty name.
-               tty-type             ;string.
+               tty-name   ; nil, `window-system', or the tty name.
+               tty-type   ; string.
                files
                filepos
                command-line-args-left
@@ -935,6 +938,12 @@
                  (setq display (pop command-line-args-left))
                   (if (zerop (length display)) (setq display nil)))
 
+                ;; -parent-id ID:
+                ;; Open X frame within window ID, via XEmbed.
+                ((and (equal "-parent-id" arg) command-line-args-left)
+                 (setq parent-id (pop command-line-args-left))
+                  (if (zerop (length parent-id)) (setq parent-id nil)))
+
                 ;; -window-system:  Open a new X frame.
                 ((equal "-window-system" arg)
                   (setq dontkill t)
@@ -1039,7 +1048,8 @@
                    (setq tty-name nil tty-type nil)
                    (if display (server-select-display display)))
                   ((eq tty-name 'window-system)
-                   (server-create-window-system-frame display nowait proc))
+                   (server-create-window-system-frame display nowait proc
+                                                      parent-id))
                   ;; When resuming on a tty, tty-name is nil.
                   (tty-name
                    (server-create-tty-frame tty-name tty-type proc))))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]