IDEA: Create an Emacs package to handle software projects.
Wishlist / Requirements:
- File template selection per lanaguage
- Project template selection
- Project metadata search
- Integrate to build system
- Provide higher order functions
- Close and Open a set of files
Features:
- [X] switch between project buffers
- [ ] switch between project dired buffers
- [ ] switch between project buffers associated to files
- [ ] Command to close all buffers not related to current project
- [ ] Python backend for metadata
- [X] find files in project sub-directories
- [X] find files in project sub-directories matching a regex
- [X] find files in project sub-directories with a given extension
- [X] close all project files
- [X] open a project in a new frame dedicated to the project. The commands C-x right (M-x next-buffer) and C-x left (M-x previous-buffer) switches only between project buffer files.
- [X] Run compilation commands and make specific commands at project root directory.
Todolist:
- [X] Add package header
- [ ] Add documentation
- [X] Add summary
- [ ] Add development documentation and notes.
- [ ] Add examples
- [ ] Add gifs
This package provides commands to open, close, manipulate, find files, run compilation commands in projects.
Features:
- Commands to find-files in project directory and in within its subdirectories.
- Quick navigation between project.
- Open projects in frames exclusive to the project. M-x left or M-x right switches only between project buffers.
- Commands to open projects and close/kill project buffers.
- Commands to run compilation commands and Makefile commands.
A project is just a directory in pjx-root-directory
where is the
path where all projects are stored.
Example:
$ tree -L 2 ~/Documents/projects
/home/archbox/Documents/projects
├── boleto.fsharp
│ ├── #boleto.fsx#
│ └── boleto.fsx
├── bookmarklet-maker.web
│ ├── dist
│ ├── index.html
│ ├── LICENSE
│ ├── Makefile
│ ├── README.html
│ ├── README.org
│ ├── scratch.js
│ └── scripts
... ... ... ...
└── zhserver.haskell
├── assets
├── copylibs.sh
├── database
├── dist
├── Documentation.org
├── images
├── lib
├── LICENSE
├── Makefile
├── my-zhserver2.conf
├── my-zhserver.conf
├── README.org
├── src
├── stack.yaml
├── test
├── testdb
├── test-scripts
├── zhclient.bin
├── zhclient.sh
├── zhserver.bin
├── zhserver.cabal
└── zhserver.sh
M-x [command] | Description |
---|---|
Misc Commands | |
pjx/help | Show pjx commands help |
pjx/customize | Open customization pjx panel. Customize pjx settings. |
Project Commands | |
pjx/new-project | Ask the user the project name and open its directory. |
pjx/new-project-frame | Ask the user the project name and opens in a new frame. |
pjx/open | Show a helm menu where the user can select the project to open. |
pjx/open-frame | Like pjx/open-frame, but open the project in a new frame. This frame is exclusive to project. |
pjx/close | Close current project, killing all buffers related to it. |
pjx/close-files | Close all files (only buffere bound to files) belonging to current project. |
pjx/close-frame | Close current project nad close its frame. |
pjx/close-all | Close all projects. |
pjx/project-switch | Switch between opened projects. |
pjx/project-switch-window | Switch between opened projects in a new window. |
pjx/project-switch-frame | Switch between opened projects in a new frame. |
pjx/github | Open https github Url. It supposes that origin remote Url is the Github https Url. |
Directory Commands | |
pjx/root-dired | Go to pjx-root-directory directory where all projects are stored. |
pjx/root-dired-frame | Go to pjx-root-directory directory where all projects are stored in a new frame., |
pjx/top | Go to project root directory. |
File Commands | |
pjx/switch | Switch between project buffers. |
pjx/switch-file | Switch between project buffers associated with files. |
pjx/switch-file-frame | Switch to project file in a new frame. |
pjx/find-file | Provides a helm-menu where the user can select file to open at all directories and sub directories. |
pjx/find-file-frame | Like pjx/find-file, but open file in a new frame. |
pjx/find-file-ext | Show all files ending with extensions provided by the user where he can select the file to open. |
pjx/find-files-open | Open all project files with given extensions. Use pjx/switch-file to switch between those files. |
pjx/find-files-regex | Open all files with names matching a given regex. |
pjx/find-dired | Run M-x find-dired at project root directory showing all files and subdirectories. |
Build Commands | |
pjx/compile | Run compilation command at current project directory |
pjx/make | Run $ make at project root directory and execute Makefile main rule. |
pjx/make-cmd | Run $ make at project root directory asking the user the make command to run. |
pjx/make-clean | Run ‘$ make clean’ at project root directory and execute Makefile clean rule. |
pjx/make-again | Run ‘$ make clean && make’ at project root directory and execute Makefile main rule. |
Copy Commands | |
pjx/copy-file-path | Copy buffer absolute file name to clipboard. |
pjx/copy-project-path | Copy current project root directory to clipboard. |
pjx/copy-dir-path | Copy absolute path to buffer current directory. |