emacs-devel
[Top][All Lists]
Advanced

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

Add support for MPC password


From: Michal Nazarewicz
Subject: Add support for MPC password
Date: Fri, 03 Aug 2012 06:08:43 +0200
User-agent: Opera Mail/12.00 (Linux)

Hi guys,

Below is a patch for mpc.el that adds support for login password.

I'm not entirely sure how to send patches, but I hope that you can make
use from the attached patch.

As for copyright, it goes to Google, which has already signed the agreement,
so there should be no problem on that front.

------------------ >8 -----------------------------------------------------
Add support for MPC password

The MPD_HOST environment variable may contain a password used to connect
to MPD.  With this change, mpc.el accepts this format and sends password
when connecting.

* lisp/mpc.el (mpc--proc-connect): Support password in host argument, and
set mpc-proc variable instead of returning process.  This is required so
that the function can call mpc-proc-cmd.  Without that, mpc-proc-cmd
would call mpc-proc, which would call mpc--proc-connect ad infinitum.
(mpc-proc): Refactor since mpc-proc variable is set by mpc--proc-connect.

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: da3759cf2d6fb972905b652eee11b8975d360e3d
# timestamp: 2012-08-03 05:55:28 +0200
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'lisp/mpc.el'
--- lisp/mpc.el 2012-07-10 11:51:54 +0000
+++ lisp/mpc.el 2012-08-03 03:53:48 +0000
@@ -199,9 +199,10 @@
 (defcustom mpc-host
   (concat (or (getenv "MPD_HOST") "localhost")
           (if (getenv "MPD_PORT") (concat ":" (getenv "MPD_PORT"))))
-  "Host (and port) where the Music Player Daemon is running.
-The format is \"HOST\" or \"HOST:PORT\" where PORT defaults to 6600
-and HOST defaults to localhost."
+  "Host (and port) where the Music Player Daemon is running.  The
+format is \"HOST\", \"HOST:PORT\", \"address@hidden" or
+\"address@hidden:PORT\" where PASSWORD defaults to no password, PORT
+defaults to 6600 and HOST defaults to localhost."
   :type 'string)

 (defvar mpc-proc nil)
@@ -252,20 +253,30 @@
                 (funcall callback)))))))))

 (defun mpc--proc-connect (host)
-  (mpc--debug "Connecting to %s..." host)
-  (with-current-buffer (get-buffer-create (format " *mpc-%s*" host))
-    ;; (pop-to-buffer (current-buffer))
-    (let (proc)
-      (while (and (setq proc (get-buffer-process (current-buffer)))
-                  (progn ;; (debug)
-                         (delete-process proc)))))
-    (erase-buffer)
-    (let ((port 6600))
-      (when (string-match ":[^.]+\\'" host)
-        (setq port (substring host (1+ (match-beginning 0))))
-        (setq host (substring host 0 (match-beginning 0)))
-        (unless (string-match "[^[:digit:]]" port)
-          (setq port (string-to-number port))))
+  (let ((port 6600)
+        pass)
+
+    (when (string-match "\\`\\(?:\\(.*\\)@\\)?\\(.*?\\)\\(?::\\(.*\\)\\)?\\'"
+                        host)
+      (let ((v (match-string 1 host)))
+        (when (and (stringp v) (not (string= "" v)))
+          (setq pass v)))
+      (let ((v (match-string 3 host)))
+        (setq host (match-string 2 host))
+        (when (and (stringp v) (not (string= "" v)))
+          (setq port
+                (if (string-match "[^[:digit:]]" v)
+                    (string-to-number v)
+                  v)))))
+
+    (mpc--debug "Connecting to %s:%s..." host port)
+    (with-current-buffer (get-buffer-create (format " *mpc-%s:%s*" host port))
+      ;; (pop-to-buffer (current-buffer))
+      (let (proc)
+        (while (and (setq proc (get-buffer-process (current-buffer)))
+                    (progn ;; (debug)
+                      (delete-process proc)))))
+      (erase-buffer)
       (let* ((coding-system-for-read 'utf-8-unix)
              (coding-system-for-write 'utf-8-unix)
              (proc (open-network-stream "MPC" (current-buffer) host port)))
@@ -282,7 +293,9 @@
         (set-process-query-on-exit-flag proc nil)
         ;; This may be called within a process filter ;-(
         (with-local-quit (mpc-proc-sync proc))
-        proc))))
+        (setq mpc-proc proc)
+        (when pass
+          (mpc-proc-cmd (list "password" pass) nil))))))

 (defun mpc--proc-quote-string (s)
   (if (numberp s) (number-to-string s)
@@ -306,11 +319,11 @@
     (nreverse alists)))

 (defun mpc-proc ()
-  (or (and mpc-proc
-           (buffer-live-p (process-buffer mpc-proc))
-           (not (memq (process-status mpc-proc) '(closed)))
-           mpc-proc)
-      (setq mpc-proc (mpc--proc-connect mpc-host))))
+  (unless (and mpc-proc
+               (buffer-live-p (process-buffer mpc-proc))
+               (not (memq (process-status mpc-proc) '(closed))))
+    (mpc--proc-connect mpc-host))
+  mpc-proc)

 (defun mpc-proc-check (proc)
   (let ((error-text (process-get proc 'mpc-proc-error)))

# Begin bundle
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



reply via email to

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