dired.el 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. ;;; ede/dired.el --- EDE extensions to dired.
  2. ;; Copyright (C) 1998-2000, 2003, 2009-2012 Free Software Foundation, Inc.
  3. ;; Author: Eric M. Ludlam <zappo@gnu.org>
  4. ;; Version: 0.4
  5. ;; Keywords: project, make
  6. ;; This file is part of GNU Emacs.
  7. ;; GNU Emacs is free software: you can redistribute it and/or modify
  8. ;; it under the terms of the GNU General Public License as published by
  9. ;; the Free Software Foundation, either version 3 of the License, or
  10. ;; (at your option) any later version.
  11. ;; GNU Emacs is distributed in the hope that it will be useful,
  12. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. ;; GNU General Public License for more details.
  15. ;; You should have received a copy of the GNU General Public License
  16. ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
  17. ;;; Commentary:
  18. ;;
  19. ;; This provides a dired interface to EDE, allowing users to modify
  20. ;; their project file by adding files (or whatever) directly from a
  21. ;; dired buffer.
  22. (eval-when-compile (require 'cl))
  23. (require 'easymenu)
  24. (require 'dired)
  25. (require 'ede)
  26. ;;; Code:
  27. (defvar ede-dired-keymap
  28. (let ((map (make-sparse-keymap)))
  29. (define-key map ".a" 'ede-dired-add-to-target)
  30. (define-key map ".t" 'ede-new-target)
  31. (define-key map ".s" 'ede-speedbar)
  32. (define-key map ".C" 'ede-compile-project)
  33. (define-key map ".d" 'ede-make-dist)
  34. (easy-menu-define
  35. ede-dired-menu map "EDE Dired Minor Mode Menu"
  36. '("Project"
  37. [ "Add files to target" ede-dired-add-to-target (ede-current-project) ]
  38. ( "Build" :filter ede-build-forms-menu)
  39. "-"
  40. [ "Create Project" ede-new (not (ede-current-project)) ]
  41. [ "Create Target" ede-new-target (ede-current-project) ]
  42. "-"
  43. ( "Customize Project" :filter ede-customize-forms-menu )
  44. [ "View Project Tree" ede-speedbar (ede-current-project) ]
  45. ))
  46. map)
  47. "Keymap used for ede dired minor mode.")
  48. (define-minor-mode ede-dired-minor-mode
  49. "A minor mode that should only be activated in DIRED buffers.
  50. If ARG is nil or a positive number, force on, if
  51. negative, force off."
  52. :lighter " EDE" :keymap ede-dired-keymap
  53. (unless (derived-mode-p 'dired-mode)
  54. (setq ede-dired-minor-mode nil)
  55. (error "Not in DIRED mode"))
  56. (unless (or (ede-directory-project-p default-directory)
  57. (interactive-p))
  58. (setq ede-dired-minor-mode nil)))
  59. (defun ede-dired-add-to-target (target)
  60. "Add a file, or all marked files into a TARGET."
  61. (interactive (list
  62. (let ((ede-object (ede-current-project)))
  63. (ede-invoke-method 'project-interactive-select-target
  64. "Add files to Target: "))))
  65. (dolist (file (dired-get-marked-files t))
  66. (project-add-file target file)
  67. ;; Find the buffer for this files, and set its ede-object
  68. (if (get-file-buffer file)
  69. (with-current-buffer (get-file-buffer file)
  70. (setq ede-object nil)
  71. (setq ede-object (ede-buffer-object (current-buffer)))))))
  72. (provide 'ede/dired)
  73. ;;; ede/dired.el ends here