Makefile targets
Every Makefile target under your projects, one Enter from running.
palv0.1.0Developerbundled
Ships inside pal. Installing puts an editable copy ahead of the bundled one.




What it does
Makefile targets
Every target of every Makefile under the projects folders, one section
per project. A folder is scanned two levels deep for a Makefile,
makefile or GNUmakefile (GNU make's own order when several are there);
dot folders and node_modules, target, vendor, dist, build are not
entered. Targets are read from the file's text, not from make -pn: a
line beginning with one or more names and a colon (:= assignments,
pattern rules and $(VAR) targets are not targets), .PHONY names
included even when their rule is not literal, in file order. A
description is the ## text on the rule's line, else the comment line
right above it (a .PHONY: line in between is skipped).
The palette
The row is the target, the project folder the subtitle (with the
description after a colon), the project's name a keyword (so pal test
finds it from the root); a phony target has phony as one too. The
palette is indexed: listed once, searched from the index, refreshed with
cmd+r after a Makefile changes. The detail pane (cmd+i, asked when the
cursor rests on a row) shows the recipe as a code block and, in its
metadata, the project, the Makefile's name, the description and whether it
is phony.
Run opens a terminal in the project folder running make <target>; the
window stays open until Enter is pressed, so a quick target's output is
not gone with it, and the HUD names the target. With terminal = "background" make runs unseen instead: a toast carries the exit status
and the output's last line, and a failure opens the whole output in the
panel too; a run still going after 8 s is left to finish on its own and
the toast says so.
Keyboard
| keys | action |
|---|---|
enter |
Run: make <target> in a terminal in the project folder, or in the background |
cmd+c |
Copy command: make -C <dir> <target> |
cmd+o |
Open project: the folder in the file manager |
cmd+l |
Show Makefile: the whole file in the panel, esc goes back |
cmd+i |
The detail pane with the recipe |
cmd+r |
Refresh: scan the folders again |
Setup
make on PATH for Run; the listing needs nothing (it reads the files).
Point projects at the folders that hold your checkouts; a folder that is
not there lists nothing.
Which terminal Run opens: on macOS the terminal setting (auto takes
the first installed of kitty, Ghostty, Alacritty, iTerm2, Terminal);
Terminal and iTerm2 are driven through AppleScript, so the first Run into
one of them asks for the Automation permission once. On Linux $TERMINAL,
else the first of kitty, foot, alacritty, xterm on PATH. background
needs no terminal at all.
Settings, [extensions.make]:
| key | type | default | what |
|---|---|---|---|
projects |
list of paths | ["~/proj"] |
Folders to scan, two levels deep. ~ is expanded. |
terminal |
auto, background, kitty, Terminal, iTerm2, Ghostty, Alacritty |
auto |
Where Run puts make. |
What it does not do
- Evaluate the Makefile: targets built from variables (
$(BIN):) or pattern rules (%.o: %.c) are not rows, and an included file's targets are not read. - Arguments:
make <target>runs as is; forVAR=value, copy the command and add to it in the terminal. - Watch for changes: a new target shows after
cmd+r, and a listing is kept across restarts until then. - Other build tools (
just,task, npm scripts): Makefiles only.
Platforms
macOS and Linux. The terminal is chosen per platform as above; the scan and the parser are the same on both.
Palettes 1
-
Make
makelistEvery target of every Makefile in the project folders, one section per project.
- ↵Run the target
- ⌘CCopy the make command
- ⌘LShow the Makefile
- ⌘IThe recipe in the detail pane
Actions
- Runmake <target> in a terminal in the project folder, or in the background per the setting.↵
- Copy commandmake -C <dir> <target>.⌘C
- Open projectThe project folder in the file manager.⌘O
- Show MakefileThe whole file in the panel.⌘L
Settings
Extension, [extensions.make]
projectsFolders scanned two levels deep for a Makefile, makefile or GNUmakefile. ~ is expanded.
terminalWhere Run puts make. A terminal keeps its window open until you press Enter; background runs it unseen and toasts the exit status (the output opens in the panel when it failed; a run past 8 s is left to finish on its own). On Linux the terminal is $TERMINAL, else kitty, foot, alacritty, xterm. One of auto, background, kitty, Terminal, iTerm2, Ghostty, Alacritty.
Defaults shown. Change them in pal's settings window or in the config file.