                 buf)))
 	(error "Did not find %s in the ros package list." package-name)))))
 
+(defun ros-launch-current ()
+  (interactive)
+  (let ((path (buffer-file-name)))
+    (assert (and path (string-match ".*\\/\\([^\\/]*\.launch\\)" path)))
+    (let ((pkg (ros-package-for-path path))
+          (filename (match-string 1 path)))
+      (assert (and pkg filename))
+      (let ((name (format "roslaunch:%s/%s" pkg filename)))
+        (if (rosemacs/contains-running-process name)
+            (switch-to-buffer (get-buffer name))
+          (let ((buf (get-buffer-create name)))
+            (switch-to-buffer buf)
+            (comint-mode)
+            (setq ros-launch-path path
+                  ros-launch-filename filename)
+            (ros-launch-mode 1)
+            (rosemacs/relaunch (current-buffer))))))))
+
 (defun rosemacs/open-launch-file ()
   (interactive)
   (unless ros-launch-path

(define-key ros-keymap "T" 'ros-topic-info)
(define-key ros-keymap "g" 'ros-rgrep-package)
(define-key ros-keymap "\C-l" 'ros-launch)
(define-key ros-keymap "\C-e" 'rosemacs/display-event-buffer)
(define-key ros-keymap "\C-n" 'rosemacs/display-nodes)
(define-key ros-keymap "c" 'ros-make)

      (save-excursion
        (set-buffer buf)
        (erase-buffer)
        (let ((proc (start-process (buffer-name buf) buf "roslaunch" ros-launch-path)))
          (set-process-filter proc 'comint-output-filter))
        (rosemacs/add-event (format "Ros launch of %s" ros-launch-path))))))

(defun rosemacs/kill-and-relaunch ()
  "Interrupt the current roslaunch process, and when it has terminated, relaunch."
