anchor.diff:  (defun rpc-buffer-make (&key title default-modes dead-buffer)
     "Make buffer with title TITLE and modes DEFAULT-MODES.
   Run `*interface*'s `buffer-make-hook' over the created buffer before returning it.
  -If DEAD-BUFFER is a dead buffer, recreate its web view and give it a new ID.
  -Return nil on error."
  +If DEAD-BUFFER is a dead buffer, recreate its web view and give it a new ID."
     (let* ((buffer (if dead-buffer
                        (progn (setf (id dead-buffer) (get-unique-buffer-identifier))
                               dead-buffer)
  
positive.code: 
  (declaim (ftype (function (string &rest t)) %rpc-send))
  (defun %rpc-send (method &rest args)
    "Call RPC method METHOD over ARGS.
  Return nil on error."
    ;; TODO: Make %rpc-send asynchronous?
    ;; If the platform port ever hangs, the next %rpc-send will hang the Lisp core too.
    (handler-case
        (dbus:with-open-bus (bus (session-server-addresses))
          (dbus:with-introspected-object (platform-port bus +platform-port-object-path+ +platform-port-name+)
            (apply #'platform-port +platform-port-interface+ method args)))
      (error (c)
        (log:error "RPC connection failed: ~a" c)
        nil)))
  
  ;; TODO: Move to separate packages:
  ;; - next-rpc
  
negative.code: (defun open-urls (urls &key no-focus)
    "Create new buffers from URLs.
  First URL is focused if NO-FOCUS is nil."
    (let ((first-buffer (first (mapcar
                                (lambda (url)
                                  (let ((buffer (make-buffer)))
                                    (set-url url :buffer buffer)
                                    buffer))
                                urls))))
      (unless no-focus
        (if (open-external-link-in-new-window-p *interface*)
            (let ((window (rpc-window-make)))
              (window-set-active-buffer window first-buffer))
  