emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] Changes to emacs/lisp/recentf.el


From: David Ponce
Subject: [Emacs-diffs] Changes to emacs/lisp/recentf.el
Date: Fri, 07 Oct 2005 03:52:31 -0400

Index: emacs/lisp/recentf.el
diff -c emacs/lisp/recentf.el:1.46 emacs/lisp/recentf.el:1.47
*** emacs/lisp/recentf.el:1.46  Fri Sep 30 06:18:55 2005
--- emacs/lisp/recentf.el       Fri Oct  7 07:52:31 2005
***************
*** 206,211 ****
--- 206,218 ----
                  function)
    :set 'recentf-menu-customization-changed)
  
+ (defcustom recentf-menu-open-all-flag nil
+   "*Non-nil means to show an \"All...\" item in the menu.
+ This item will replace the \"More...\" item."
+   :group 'recentf
+   :type 'boolean
+   :set 'recentf-menu-customization-changed)
+ 
  (defcustom recentf-menu-append-commands-flag t
    "*Non-nil means to append command items to the menu."
    :group 'recentf
***************
*** 278,284 ****
  used as shortcuts to open the Nth file."
    :group 'recentf
    :type 'boolean)
- 
  
  ;;; Utilities
  ;;
--- 285,290 ----
***************
*** 448,453 ****
--- 454,478 ----
  
  ;;; Menu building
  ;;
+ (defsubst recentf-digit-shortcut-command-name (n)
+   "Return a command name to open the Nth most recent file.
+ See also the command `recentf-open-most-recent-file'."
+   (intern (format "recentf-open-most-recent-file-%d" n)))
+ 
+ (defvar recentf--shortcuts-keymap
+   (let ((km (make-sparse-keymap)))
+     (dolist (k '(0 9 8 7 6 5 4 3 2 1))
+       (let ((cmd (recentf-digit-shortcut-command-name k)))
+         ;; Define a shortcut command.
+         (defalias cmd
+           `(lambda ()
+              (interactive)
+              (recentf-open-most-recent-file ,k)))
+         ;; Bind it to a digit key.
+         (define-key km (vector (+ k ?0)) cmd)))
+     km)
+   "Digit shortcuts keymap.")
+ 
  (defvar recentf-menu-items-for-commands
    (list
     ["Cleanup list"
***************
*** 548,568 ****
          (nconc l others))
      l))
  
  (defun recentf-make-menu-items ()
    "Make menu items from the recent list."
    (setq recentf-menu-filter-commands nil)
!   (let ((file-items
!          (mapcar 'recentf-make-menu-item
!                  (recentf-apply-menu-filter
!                   recentf-menu-filter
!                   (recentf-menu-elements recentf-max-menu-items)))))
      (append (or file-items (list ["No files" t
                                    :help "No recent file to open"
                                    :active nil]))
!             (and (< recentf-max-menu-items (length recentf-list))
!                  (list ["More..." recentf-open-more-files
!                         :help "Open files that are not in the menu"
!                         :active t]))
              (and recentf-menu-filter-commands
                   (cons "---"
                         recentf-menu-filter-commands))
--- 573,601 ----
          (nconc l others))
      l))
  
+ ;; Count the number of assigned menu shortcuts.
+ (defvar recentf-menu-shortcuts)
+ 
  (defun recentf-make-menu-items ()
    "Make menu items from the recent list."
    (setq recentf-menu-filter-commands nil)
!   (let* ((recentf-menu-shortcuts 0)
!          (file-items
!           (mapcar 'recentf-make-menu-item
!                   (recentf-apply-menu-filter
!                    recentf-menu-filter
!                    (recentf-menu-elements recentf-max-menu-items)))))
      (append (or file-items (list ["No files" t
                                    :help "No recent file to open"
                                    :active nil]))
!             (if recentf-menu-open-all-flag
!                 (list ["All..." recentf-open-files
!                        :help "Open recent files through a dialog"
!                        :active t])
!               (and (< recentf-max-menu-items (length recentf-list))
!                    (list ["More..." recentf-open-more-files
!                           :help "Open files not in the menu through a dialog"
!                           :active t])))
              (and recentf-menu-filter-commands
                   (cons "---"
                         recentf-menu-filter-commands))
***************
*** 570,584 ****
                   (cons "---"
                         recentf-menu-items-for-commands)))))
  
! (defsubst recentf-make-menu-item (elt)
    "Make a menu item from menu element ELT."
    (let ((item  (recentf-menu-element-item  elt))
          (value (recentf-menu-element-value elt)))
      (if (recentf-sub-menu-element-p elt)
          (cons item (mapcar 'recentf-make-menu-item value))
!       (vector item (list recentf-menu-action value)
!               :help (concat "Open " value)
!               :active t))))
  
  (defsubst recentf-menu-bar ()
    "Return the keymap of the global menu bar."
--- 603,639 ----
                   (cons "---"
                         recentf-menu-items-for-commands)))))
  
! (defun recentf-menu-value-shortcut (name)
!   "Return a shorcut digit for file NAME.
! Return nil if file NAME is not one of the ten more recent."
!   (let ((i 0) k)
!     (while (and (not k) (< i 10))
!       (if (string-equal name (nth i recentf-list))
!           (progn
!             (setq recentf-menu-shortcuts (1+ recentf-menu-shortcuts))
!             (setq k (% (1+ i) 10)))
!         (setq i (1+ i))))
!     k))
! 
! (defun recentf-make-menu-item (elt)
    "Make a menu item from menu element ELT."
    (let ((item  (recentf-menu-element-item  elt))
          (value (recentf-menu-element-value elt)))
      (if (recentf-sub-menu-element-p elt)
          (cons item (mapcar 'recentf-make-menu-item value))
!       (let ((k (and (< recentf-menu-shortcuts 10)
!                     (recentf-menu-value-shortcut value))))
!         (vector item
!                 ;; If the file name is one of the ten more recent, use
!                 ;; a digit shortcut command to open it, else use an
!                 ;; anonymous command.
!                 (if k
!                     (recentf-digit-shortcut-command-name k)
!                   `(lambda ()
!                      (interactive)
!                      (,recentf-menu-action ,value)))
!                 :help (concat "Open " value)
!                 :active t)))))
  
  (defsubst recentf-menu-bar ()
    "Return the keymap of the global menu bar."
***************
*** 953,965 ****
      (goto-char (point-min))))
  
  (defvar recentf-dialog-mode-map
!   (let ((km (make-sparse-keymap)))
      (set-keymap-parent km widget-keymap)
      (define-key km "q" 'recentf-cancel-dialog)
      (define-key km [down-mouse-1] 'widget-button-click)
-     ;; Keys in reverse order of appearence in help.
-     (dolist (k '("0" "9" "8" "7" "6" "5" "4" "3" "2" "1"))
-       (define-key km k 'recentf-open-file-with-key))
      km)
    "Keymap used in recentf dialogs.")
  
--- 1008,1017 ----
      (goto-char (point-min))))
  
  (defvar recentf-dialog-mode-map
!   (let ((km (copy-keymap recentf--shortcuts-keymap)))
      (set-keymap-parent km widget-keymap)
      (define-key km "q" 'recentf-cancel-dialog)
      (define-key km [down-mouse-1] 'widget-button-click)
      km)
    "Keymap used in recentf dialogs.")
  
***************
*** 1081,1087 ****
       'push-button
       :notify 'recentf-edit-list-validate
       :help-echo "Delete selected files from the recent list"
!       "Ok")
      (widget-insert " ")
      (widget-create
       'push-button
--- 1133,1139 ----
       'push-button
       :notify 'recentf-edit-list-validate
       :help-echo "Delete selected files from the recent list"
!      "Ok")
      (widget-insert " ")
      (widget-create
       'push-button
***************
*** 1178,1207 ****
       "Cancel")
      (recentf-dialog-goto-first 'link)))
  
- (defun recentf-open-file-with-key (n)
-   "Open the recent file with the shortcut numeric key N.
- N must be a valid digit.
- `1' opens the first file, `2' the second file, ... `9' the ninth file.
- `0' opens the tenth file."
-   (interactive
-    (list
-     (let ((n (string-to-number (this-command-keys))))
-       (cond
-        ((zerop n) 10)
-        ((and (> n 0) (< n 10)) n)
-        ((error "Invalid digit key %d" n))))))
-   (when recentf--files-with-key
-     (let ((file (nth (1- n) recentf--files-with-key)))
-       (unless file (error "Not that many recent files"))
-       (kill-buffer (current-buffer))
-       (funcall recentf-menu-action file))))
- 
  (defun recentf-open-more-files ()
    "Show a dialog to open a recent file that is not in the menu."
    (interactive)
    (recentf-open-files (nthcdr recentf-max-menu-items recentf-list)
                        (format "*%s - More*" recentf-menu-title)))
  
  ;;; Save/load/cleanup the recent list
  ;;
  (defconst recentf-save-file-header
--- 1230,1258 ----
       "Cancel")
      (recentf-dialog-goto-first 'link)))
  
  (defun recentf-open-more-files ()
    "Show a dialog to open a recent file that is not in the menu."
    (interactive)
    (recentf-open-files (nthcdr recentf-max-menu-items recentf-list)
                        (format "*%s - More*" recentf-menu-title)))
  
+ (defun recentf-open-most-recent-file (&optional n)
+   "Open the Nth most recent file.
+ Optional argument N must be a valid digit number.  It defaults to 1.
+ 1 opens the most recent file, 2 the second most recent one, etc..
+ 0 opens the tenth most recent file."
+   (interactive "p")
+   (cond
+    ((zerop n) (setq n 10))
+    ((and (> n 0) (< n 10)))
+    ((error "Recent file number out of range [0-9], %d" n)))
+   (let ((file (nth (1- n) (or recentf--files-with-key recentf-list))))
+     (unless file (error "Not that many recent files"))
+     ;; Close the open files dialog.
+     (when recentf--files-with-key
+       (kill-buffer (current-buffer)))
+     (funcall recentf-menu-action file)))
+ 
  ;;; Save/load/cleanup the recent list
  ;;
  (defconst recentf-save-file-header
***************
*** 1266,1271 ****
--- 1317,1325 ----
      (message "Cleaning up the recentf list...done (%d removed)" n)
      (setq recentf-list (nreverse newlist))))
  
+ (defvar recentf-mode-map (make-sparse-keymap)
+   "Keymap to use in recentf mode.")
+ 
  ;;;###autoload
  (define-minor-mode recentf-mode
    "Toggle recentf mode.
***************
*** 1273,1281 ****
  Returns non-nil if the new state is enabled.
  
  When recentf mode is enabled, it maintains a menu for visiting files
! that were operated on recently."
    :global t
    :group 'recentf
    (unless (and recentf-mode (recentf-enabled-p))
      (if recentf-mode
          (recentf-load-list)
--- 1327,1338 ----
  Returns non-nil if the new state is enabled.
  
  When recentf mode is enabled, it maintains a menu for visiting files
! that were operated on recently.
! 
! \\{recentf-mode-map}"
    :global t
    :group 'recentf
+   :keymap recentf-mode-map
    (unless (and recentf-mode (recentf-enabled-p))
      (if recentf-mode
          (recentf-load-list)




reply via email to

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