unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Cédric Chépied" <cedric.chepied@gmail.com>
To: emacs-devel@gnu.org
Subject: Re: ampc back on elpa?
Date: Mon, 20 Jun 2016 13:47:17 +0200	[thread overview]
Message-ID: <5767d7d0.cf2d1c0a.1c4a7.38a5@mx.google.com> (raw)
In-Reply-To: <jwvwpln78po.fsf-monnier+gmane.emacs.devel@gnu.org>

On Sat, 18 Jun 2016 00:28:23 +0200,
Stefan Monnier wrote:
> I suggest you lobby you local representative to move the post office closer to
> your home.

So I need money to corrupt him/her...

Here is my latest patch. I also added a progress bar (in another commit) in the
status window. I did it from scratch so I don't use Christopher Schmidt's
code. I need to test before sending it and I'll probably create a new thread,
the patch here is only for the search view.

-- 
Cédric Chépied
<cedric.chepied@gmail.com>


From c3870da8fcf453bf603ce339fbb08320af9d844d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Ch=C3=A9pied?= <cedric.chepied@gmail.com>
Date: Wed, 15 Jun 2016 11:36:52 +0200
Subject: [PATCH 1/2] ampc: add search function

---
 packages/ampc/ampc.el | 72 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 67 insertions(+), 5 deletions(-)

diff --git a/packages/ampc/ampc.el b/packages/ampc/ampc.el
index 7a28bc7..c09323b 100644
--- a/packages/ampc/ampc.el
+++ b/packages/ampc/ampc.el
@@ -76,11 +76,11 @@
 ;; selected window for its window setup, customise `ampc-use-full-frame' to a
 ;; non-nil value.
 ;;
-;; ampc offers three independent views which expose different parts of the user
+;; ampc offers independent views which expose different parts of the user
 ;; interface.  The current playlist view, the default view at startup, may be
 ;; accessed using the `J' key (that is `S-j').  The playlist view may be
 ;; accessed using the `K' key.  The outputs view may be accessed by pressing
-;; `L'.
+;; `L'. The search view may be accessed using the `F' key (find).
 
 ;;; *** current playlist view
 ;; The playlist view looks like this:
@@ -161,6 +161,11 @@
 ;; MPD.  To toggle the enabled property of the selected outputs, press `a'
 ;; (ampc-toggle-output-enabled) or `<mouse-3>'.
 
+;;; *** search view
+;; The search view contains the result of the last performed search. You can
+;; start a new search with the `s' key while in the search view or use M-x
+;; ampc-start-search. Use the `a' key to add a song displayed in result list.
+
 ;;; ** tagger
 ;; To start the tagging subsystem, press `I' (ampc-tagger).  This key binding
 ;; works in every buffer associated with ampc.  First, the command tries to
@@ -521,7 +526,11 @@ modified."
          (pl-prop '(:properties (("Title" :min 15 :max 40)
                                  ("Artist" :min 15 :max 40)
                                  ("Album" :min 15 :max 40)
-                                 ("Time" :width 6)))))
+                                 ("Time" :width 6))))
+         (search-view '(1.0 search :properties (("Track" :title "#" :width 4)
+                                                ("Title" :min 15 :max 40)
+                                                ("Artist" :min 15 :max 40)
+                                                ("Album" :min 15 :max 40)))))
     `((tagger
        horizontal
        (0.65 files-list
@@ -569,6 +578,13 @@ modified."
                  (0.4 playlist ,@pl-prop)
                  (1.0 playlists)))
        ,rs_b)
+      ("Search view"
+       ,(kbd "F")
+       horizontal
+       (0.4 vertical
+            (6 status)
+            (1.0 current-playlist ,@pl-prop))
+       ,search-view)
       ("Outputs view"
        ,(kbd "L")
        outputs :properties (("outputname" :title "Name" :min 10 :max 30)
@@ -602,6 +618,7 @@ modified."
 
 (defconst ampc-tagger-version "0.1")
 (defconst ampc-tagger-tags '(Title Artist Album Comment Genre Year Track))
+(defconst ampc-buffer-name " *ampc*")
 
 ;;; *** mode maps
 (defvar ampc-mode-map
@@ -696,6 +713,16 @@ modified."
     (define-key map (kbd "<mouse-3>") 'ampc-mouse-align-point)
     map))
 
+(defvar ampc-search-mode-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map)
+    (define-key map (kbd "a") 'ampc-add)
+    (define-key map (kbd "s") 'ampc-start-search)
+    (define-key map (kbd "<down-mouse-3>") 'ampc-mouse-add)
+    (define-key map (kbd "<mouse-3>") 'ampc-mouse-align-point)
+    map)
+  "Key map for search view")
+
 (defvar ampc-outputs-mode-map
   (let ((map (make-sparse-keymap)))
     (suppress-keymap map)
@@ -732,6 +759,10 @@ modified."
     (define-key map (kbd "C-c C-t") 'ampc-tagger-dired)
     map))
 
+(defvar ampc-search-keywords
+  nil
+  "Ampc last performed search")
+
 ;;; **** menu
 (easy-menu-define nil ampc-mode-map nil
   `("ampc"
@@ -952,6 +983,7 @@ modified."
                do (goto-char next)))))
 
 (defmacro ampc-iterate-source-output (delimiter bindings pad-data &rest body)
+  "DELIMITER is the field that delimit command results in mpd response"
   (declare (indent 2) (debug t))
   `(let ((output-buffer (current-buffer))
          (tags (cl-loop for (tag . props) in
@@ -985,6 +1017,8 @@ modified."
 
 (define-derived-mode ampc-tag-song-mode ampc-item-mode "ampc-ts")
 
+(define-derived-mode ampc-search-mode ampc-item-mode "ampc-search")
+
 (define-derived-mode ampc-current-playlist-mode ampc-playlist-mode "ampc-cpl"
   (setq font-lock-defaults `(((ampc-find-current-song
                                (1 'ampc-current-song-mark-face)
@@ -1311,6 +1345,8 @@ modified."
     ((current-playlist playlist outputs))
     (playlists
      (ampc-update-playlist))
+    (search
+     (message "Don't know what to do here"))
     ((song tag)
      (cl-loop
       for w in
@@ -1507,6 +1543,10 @@ modified."
                          (ampc-send-command 'currentsong))
                         (playlists
                          (ampc-send-command 'listplaylists))
+                        (search
+                         (when ampc-search-keywords
+                           (ampc-send-command 'search nil "any"
+                                              (ampc-quote ampc-search-keywords))))
                         (current-playlist
                          (ampc-send-command 'playlistinfo))))))
     (ampc-send-command 'status)
@@ -1983,6 +2023,26 @@ modified."
 (defun ampc-handle-update ()
   (message "Database update started"))
 
+(defun ampc-handle-search ()
+  "Uses mpd search result to fill search view"
+  (ampc-fill-skeleton 'search
+    (ampc-iterate-source-output
+        "file"
+        (file)
+      (cl-loop for (tag . tag-regexp) in tags
+               collect (ampc-clean-tag tag (ampc-extract tag-regexp)))
+      `(,file)
+      )))
+
+(defun ampc-start-search (search)
+  "Ask mpd to search for songs matching keywords"
+  (interactive "sKeywords: ")
+  (cl-assert (ampc-in-ampc-p))
+  (setq ampc-search-keywords (unless (string= "" search) search))
+  (when ampc-search-keywords
+    (ampc-send-command 'search nil "any"
+                       (ampc-quote ampc-search-keywords))))
+
 (defun ampc-handle-command (status)
   (cond
    ((eq status 'error)
@@ -2018,7 +2078,9 @@ modified."
         (listallinfo
          (ampc-handle-listallinfo))
         (outputs
-         (ampc-fill-outputs))))
+         (ampc-fill-outputs))
+        (search
+         (ampc-handle-search))))
     (unless ampc-outstanding-commands
       (ampc-update)))))
 
@@ -3082,7 +3144,7 @@ default to the ones specified in `ampc-default-server'."
   (unless ampc-connection
     (let ((connection (open-network-stream "ampc"
                                            (with-current-buffer
-                                               (get-buffer-create " *ampc*")
+                                               (get-buffer-create ampc-buffer-name)
                                              (erase-buffer)
                                              (current-buffer))
                                            host
-- 
2.8.3




  reply	other threads:[~2016-06-20 11:47 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-14 16:31 ampc back on elpa? Cédric Chépied
2016-05-14 14:48 ` Stefan Monnier
2016-05-25  6:07   ` Cédric Chépied
2016-05-25  8:32     ` Stefan Monnier
2016-06-10 13:25       ` Cédric Chépied
2016-06-10 15:52         ` Stefan Monnier
2016-06-13  7:23           ` Cédric Chépied
2016-06-13 12:45         ` Stefan Monnier
2016-06-15  9:53           ` Cédric Chépied
2016-06-15 13:35             ` Stefan Monnier
2016-06-17 16:43               ` Cédric Chépied
2016-06-17 22:28                 ` Stefan Monnier
2016-06-20 11:47                   ` Cédric Chépied [this message]
2016-07-01 11:25                     ` Cédric Chépied
2016-07-27 13:58                       ` Cédric Chépied
2016-07-27 14:40                         ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5767d7d0.cf2d1c0a.1c4a7.38a5@mx.google.com \
    --to=cedric.chepied@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).