diff options
| author | yonirabkin <yonirabkin> | 2006-01-09 08:38:00 +0000 | 
|---|---|---|
| committer | yonirabkin <mwolson@gnu.org> | 2006-01-09 08:38:00 +0000 | 
| commit | 1de710aba20ad287c7e39d9b0b3804b339e6823a (patch) | |
| tree | 96913e6d1744cbc101cc2868def00a2d4c0f26ec | |
| parent | cf246d4690f5e776604f250547c96e51599c1020 (diff) | |
add two macros, one to emms.el and the other to emms-playlist-mode.el. The former fixes a bug in which the software attempts to access a completely narrowed buffer and the latter because it looks nicer.
darcs-hash:20060109083856-be80e-475149a8911856cab9d2dd6f5143381c53afdcae.gz
| -rw-r--r-- | emms-playlist-mode.el | 136 | ||||
| -rw-r--r-- | emms.el | 20 | 
2 files changed, 87 insertions, 69 deletions
| diff --git a/emms-playlist-mode.el b/emms-playlist-mode.el index de53c45..8ad3311 100644 --- a/emms-playlist-mode.el +++ b/emms-playlist-mode.el @@ -74,6 +74,7 @@      (define-key emms-playlist-mode-map (kbd "C-y") 'emms-playlist-mode-yank)      (define-key emms-playlist-mode-map (kbd "C-k") 'emms-playlist-mode-kill-track)      (define-key emms-playlist-mode-map (kbd "C-w") 'emms-playlist-mode-kill) +    (define-key emms-playlist-mode-map (kbd "C-_") 'emms-playlist-mode-undo)      (define-key emms-playlist-mode-map (kbd "C-n") 'next-line)      (define-key emms-playlist-mode-map (kbd "C-p") 'previous-line)      (define-key emms-playlist-mode-map (kbd "C-j") 'emms-playlist-mode-insert-newline) @@ -150,11 +151,22 @@ function switches back to the remembered buffer."      (setq emms-playlist-mode-switched-buffer (current-buffer))      (switch-to-buffer emms-playlist-buffer))) +(defmacro with-inhibit-read-only-t (&rest body) +  "Simple wrapper around `inhibit-read-only'." +  `(let ((inhibit-read-only t)) +     ,@body)) +  (defun emms-playlist-mode-insert-newline ()    "Insert a newline at point."    (interactive) -  (let ((inhibit-read-only t)) -    (newline))) +  (with-inhibit-read-only-t +   (newline))) + +(defun emms-playlist-mode-undo () +  "Wrapper around `undo'." +  (interactive) +  (with-inhibit-read-only-t +   (undo)))  ;;; --------------------------------------------------------  ;;; Overlay compatability @@ -212,48 +224,48 @@ function switches back to the remembered buffer."  (defun emms-playlist-mode-kill-track ()    "Kill track at point."    (interactive) -  (let ((track (emms-playlist-track-at)) -	(inhibit-read-only t)) -    (if track -	(let ((track-region (emms-property-region (point) -						  'emms-track))) -	  (when (and emms-player-playing-p -		     (equal (emms-playlist-selected-track) track)) -	    (emms-stop)) -	  (remove-all-overlays (point-at-bol) (point-at-eol)) -	  (kill-region (car track-region) (cdr track-region))) -      (kill-line)))) +  (with-inhibit-read-only-t +   (let ((track (emms-playlist-track-at))) +     (if track +	 (let ((track-region (emms-property-region (point) +						   'emms-track))) +	   (when (and emms-player-playing-p +		      (equal (emms-playlist-selected-track) track)) +	     (emms-stop)) +	   (remove-all-overlays (point-at-bol) (point-at-eol)) +	   (kill-region (car track-region) (cdr track-region))) +       (kill-line)))))  ;; C-w  (defun emms-playlist-mode-kill ()    "Kill from mark to point."    (interactive) -  (let ((inhibit-read-only t) -	(m (mark))			; throw error if no mark -	(p (point)) -	(sm emms-playlist-selected-marker)) -    ;; Are we killing the playing/selected track? -    (when (emms-playlist-mode-between-p -	   (marker-position sm) m p) -      (setq emms-playlist-selected-marker nil) -      (setq emms-playlist-mode-selected-overlay-marker nil) -      (emms-stop)) -    (kill-region p m))) +  (with-inhibit-read-only-t +   (let ((m (mark))			; throw error if no mark +	 (p (point)) +	 (sm emms-playlist-selected-marker)) +     ;; Are we killing the playing/selected track? +     (when (emms-playlist-mode-between-p +	    (marker-position sm) m p) +       (setq emms-playlist-selected-marker nil) +       (setq emms-playlist-mode-selected-overlay-marker nil) +       (emms-stop)) +     (kill-region p m))))  ;; C-y  (defun emms-playlist-mode-yank ()    "Yank into the playlist buffer."    (interactive) -  (let ((inhibit-read-only t)) -    (yank)) +  (with-inhibit-read-only-t +   (yank))    (emms-playlist-mode-overlay-refresh))  ;; M-y  (defun emms-playlist-mode-yank-pop ()    "Cycle through the kill-ring."    (interactive) -  (let ((inhibit-read-only t)) -    (yank-pop))) +  (with-inhibit-read-only-t +   (yank-pop)))  ;;; --------------------------------------------------------  ;;; Overlay @@ -346,17 +358,17 @@ of the saved playlist inside."        (setq s (read (buffer-string))))      (kill-buffer buffer)      (with-current-buffer (emms-playlist-new name) -      (let ((inhibit-read-only t)) -	(insert s) -	(condition-case nil -	    (progn -	      (emms-playlist-first) -	      (emms-playlist-update-track) -	      (while t -		(emms-playlist-next) -		(emms-playlist-update-track))) -	  (error -	   nil))) +      (with-inhibit-read-only-t +       (insert s) +       (condition-case nil +	   (progn +	     (emms-playlist-first) +	     (emms-playlist-update-track) +	     (while t +	       (emms-playlist-next) +	       (emms-playlist-update-track))) +	 (error +	  nil)))        (emms-playlist-first)        (emms-playlist-select (point))        (switch-to-buffer (current-buffer))))) @@ -373,33 +385,33 @@ of the saved playlist inside."  (defun emms-playlist-mode-insert-track (track)    "Insert the description of TRACK at point."    (emms-playlist-ensure-playlist-buffer) -  (let ((inhibit-read-only t)) -    (insert (propertize (emms-track-description track) -			'emms-track track)) -    (save-restriction -      (widen) -      (let ((p (emms-property-region (point-at-bol) 'emms-track)) -	    (c (if (equal (emms-playlist-current-selected-track) -			  (get-text-property (point-at-bol) 'emms-track)) -		   (cons 'emms-playlist-selected-face 2) -		 (cons 'emms-playlist-track-face 1)))) -	(emms-playlist-mode-overlay-track (car p) (cdr p) -					  (car c) (cdr c)))) -    (insert "\n"))) +  (with-inhibit-read-only-t +   (insert (propertize (emms-track-description track) +		       'emms-track track)) +   (save-restriction +     (widen) +     (let ((p (emms-property-region (point-at-bol) 'emms-track)) +	   (c (if (equal (emms-playlist-current-selected-track) +			 (get-text-property (point-at-bol) 'emms-track)) +		  (cons 'emms-playlist-selected-face 2) +		(cons 'emms-playlist-track-face 1)))) +       (emms-playlist-mode-overlay-track (car p) (cdr p) +					 (car c) (cdr c)))) +   (insert "\n")))  (defun emms-playlist-mode-update-track-function ()    "Update the track display at point."    (emms-playlist-ensure-playlist-buffer) -  (let ((inhibit-read-only t)) -    (let ((track-region (emms-property-region (point) -					      'emms-track)) -	  (track (get-text-property (point) -				    'emms-track))) -      (save-excursion -	(delete-region (car track-region) -		       ;; 1+ For the \n -		       (1+ (cdr track-region))) -	(emms-playlist-mode-insert-track track))))) +  (with-inhibit-read-only-t +   (let ((track-region (emms-property-region (point) +					     'emms-track)) +	 (track (get-text-property (point) +				   'emms-track))) +     (save-excursion +       (delete-region (car track-region) +		      ;; 1+ For the \n +		      (1+ (cdr track-region))) +       (emms-playlist-mode-insert-track track)))))  ;;; --------------------------------------------------------  ;;; Entry @@ -493,17 +493,23 @@ If no playlist exists, a new one is generated."    (interactive)    (emms-playlist-ensure-playlist-buffer)    (let ((inhibit-read-only t)) -        (widen) -        (delete-region (point-min) -                       (point-max))) -      (run-hooks 'emms-playlist-cleared-hook)) +    (widen) +    (delete-region (point-min) +		   (point-max))) +  (run-hooks 'emms-playlist-cleared-hook)) + +(defmacro with-widened-buffer (&rest body) +  `(save-restriction +     (widen) +     ,@body))  ;;; Point movement within the playlist buffer.  (defun emms-playlist-track-at (&optional pos)    "Return the track at POS (point if not given), or nil if none."    (emms-playlist-ensure-playlist-buffer) -  (get-text-property (or pos (point)) -                     'emms-track)) +  (with-widened-buffer +   (get-text-property (or pos (point)) +		      'emms-track)))  (defun emms-playlist-next ()    "Move to the next track in the current buffer." @@ -757,7 +763,7 @@ This is supplying ARGS as arguments to the source."                      (emms-playlist-update-track)                      (setq pos (text-property-any                                 (next-single-property-change (point) -                                                           'emms-track) +							    'emms-track)                                 (point-max)                                 'emms-track                                 track)))))))) | 
