This page contains the full documentation for hg-prompt.
The hg prompt command takes a single string as an argument and outputs it.
Here's a simple (and useless) example:
$ hg prompt "test" test
Keywords in curly braces can be used to output repository information:
$ hg prompt "currently on {branch}"
currently on default
Keywords also have an extended form:
{optional text{branch}more optional text}
This form will output the text and the expanded keyword only if the keyword successfully expands. This can be useful for displaying extra text only if it's applicable:
$ hg prompt "currently on {branch} and at {bookmark}" currently on branch default and at $ hg prompt "currently on {branch} {and at {bookmark}}" currently on branch default $ hg bookmark my-book $ hg prompt "currently on {branch} {and at {bookmark}}" currently on branch default and at my-book
You can give the --angle-brackets option to use angle brackets for keywords
instead of curly brackets. This can come in handy when combining a simple
prompt string with more complicated shell functionality (like color
variables):
$ hg prompt "{currently on {branch}}" currently on default $ hg prompt --angle-brackets "<currently on <branch>>" currently on default
There a number of keywords available. Some of the keywords support filters. These filters can be combined when it makes sense. If in doubt, try it!
bookmarkDisplay the current bookmark (requires the bookmarks extension).
branchDisplay the current branch.
|quiet: Display the current branch only if it is not the default branch.closedDisplay X if working on a closed branch (i.e. if committing now would reopen
the branch).
countDisplay the number of revisions in the given revset (the revset all() will be
used if none is given).
See hg help revsets for more information.
|REVSET: The revset to count.incomingDisplay nothing, but if the default path contains incoming changesets the extra text will be expanded.
For example: {incoming changes{incoming}} will expand to incoming changes if
there are changes, otherwise nothing.
Checking for incoming changesets is an expensive operation, so hg-prompt will
cache the results in .hg/prompt/cache/ and refresh them every 15 minutes.
|count: Display the number of incoming changesets (if greater than 0).nodeDisplay the (full) changeset hash of the current parent.
|short: Display the hash as the short, 12-character form.|merge: Display the hash of the changeset you're merging with.outgoingDisplay nothing, but if the current repository contains outgoing changesets (to default) the extra text will be expanded.
For example: {outgoing changes{outgoing}} will expand to outgoing changes if
there are changes, otherwise nothing.
Checking for outgoing changesets is an expensive operation, so hg-prompt will
cache the results in .hg/prompt/cache/ and refresh them every 15 minutes.
|count: Display the number of outgoing changesets (if greater than 0).patchDisplay the topmost currently-applied patch (requires the mq extension).
|count: Display the number of patches in the queue.|applied: Display the number of currently applied patches in the queue.|unapplied: Display the number of currently unapplied patches in the queue.|quiet: Display a number only if there are any patches in the queue.patchesDisplay a list of the current patches in the queue. It will look like this:
$ hg prompt '{patches}'
bottom-patch -> middle-patch -> top-patch
|reverse: Display the patches in reverse order (i.e. topmost first).|hide_applied: Do not display applied patches.|hide_unapplied: Do not display unapplied patches.|join(SEP): Display SEP between each patch, instead of the default ->.|pre_applied(STRING): Display STRING immediately before each applied patch. Useful for adding color codes.|post_applied(STRING): Display STRING immediately after each applied patch. Useful for resetting color codes.|pre_unapplied(STRING): Display STRING immediately before each unapplied patch. Useful for adding color codes.|post_unapplied(STRING): Display STRING immediately after each unapplied patch. Useful for resetting color codes.queueDisplay the name of the current MQ queue.
revDisplay the repository-local changeset number of the current parent.
|merge: Display the repository-local changeset number of the changeset you're merging with.rootDisplay the full path to the root of the current repository, without a trailing slash.
|basename: Display the directory name of the root of the current repository. For example, if the repository is in /home/u/myrepo then this keyword would expand to myrepo.statusDisplay ! if the repository has any changed/added/removed files, otherwise ?
if it has any untracked (but not ignored) files, otherwise nothing.
|modified: Display ! if the current repository contains files that have been modified, added, removed, or deleted, otherwise nothing.|unknown: Display ? if the current repository contains untracked files, otherwise nothing.tagsDisplay the tags of the current parent, separated by a space.
|quiet: Display the tags of the current parent, excluding the tag tip.|SEP: Display the tags of the current parent, separated by SEP.taskDisplay the current task (requires the tasks extension).
tipDisplay the repository-local changeset number of the current tip.
|node: Display the (full) changeset hash of the current tip.|short: Display a short form of the changeset hash of the current tip (must be used with the |node filter)updateDisplay ^ if the current parent is not the tip of the current branch,
otherwise nothing. In effect, this lets you see if running hg update would do
something.
hg-prompt supports many keywords, but you probably don't want to use them all
at once. Which keywords you'll find useful depends on the workflow(s) you
commonly use.
Here are some example prompts to get you started.
A very simple prompt could tell you:
hg update
would do something).To get a prompt like this you could add this to your ~/.bashrc file:
export PS1='\u in \w`hg prompt "{on {branch}}{status}{update}" 2>/dev/null` $'
The result would look something like this:
username in ~/src $ cd project username in ~/src/project on feature-branch $ touch sample username in ~/src/project on feature-branch? $ hg add sample username in ~/src/project on feature-branch! $ hg commit -m 'Add a file.' username in ~/src/project on feature-branch $ hg update default username in ~/src/project on default $ hg update 0 username in ~/src/project on default^ $
The 2>/dev/null part of the prompt command prevents errors from showing when
you're not currently in a Mercurial repository.
The keywords ({branch}, {status} and {update}) display the relevant
information.
The extra text in the {branch} keyword will only display if a branch exists,
so you won't see the word "on" if you're not in a repository.
Some people prefer a smaller, less obtrusive prompt. To get that kind of prompt you can omit some of the less important text:
export PS1='\w`hg prompt "[{branch}{status}{update}]" 2>/dev/null` $'
That will give you something like this:
~/src $ cd project ~/src/project[feature-branch] $ touch sample ~/src/project[feature-branch?] $ hg add sample ~/src/project[feature-branch!] $ hg commit -m 'Add a file.' ~/src/project[feature-branch] $ hg update default ~/src/project[default] $ hg update 0 ~/src/project[default^] $