Created: 2008-08-25 07:46
Updated: 2019-02-24 15:49

gist.el -- Emacs integration for

Uses your local GitHub config if it can find it.

Go to your GitHub Settings and generate a personal access token with at least gist scope. If you intend to use more of the underlying gh.el library, it's recommended you also add the user and repo scopes.

Next run:

git config --global github.user <your-github-user-name>
git config --global github.oauth-token <your-personal-access-token-with-gist-scope>


What's new in 1.4.0 ?

  • support #tags in gist description
  • support limiting display by tags, visibility

What's new in 1.3.0 ?

  • support listing another user's gists
  • more keybindings for (un)starring, forking gists
  • optionally ask for description at gist creation time

What's new in 1.2.0 ?

  • make gist list appearance customizable
  • more robust mode detection
  • add ability to open gist without changing focus
  • add ability to open current gist in browser

What's new in 1.1.0 ?

  • support for multiple profiles (e.g. and Github Enterprise instance)
  • remove calls to deprecated gh.el APIs
  • support for background-reloading of gist list

What's new in 1.0 ?

  • gist.el now maintains a local cache so as to not go to the gist server every now and then.
  • multi-files gist support (indicated by a '+' in the gist list)
  • improved gist-list buffer, based on tabulated-list.el (same codebase as package.el) New keybindings:
    • g : reload the gist list from server
    • e : edit current gist description
    • k : delete current gist
    • + : add a file to the current gist
    • - : remove a file from the current gist
    • y : print current gist url
    • b : browse current gist
    • * : star gist
    • ^ : unstar gist
    • f : fork gist
  • in-place edition. While viewing a gist file buffer, you can:
    • C-x C-s : save a new version of the gist
    • C-x C-w : rename some file
  • dired integration. From a dired buffer, you can:
    • @ : make a gist out of marked files (with a prefix, make it private)



gist.el depends on a number of other modules, that you'll need to install, either manually or by way of Emacs package manager

Install gist.el from marmalade (recommended)

In that scenario, you don't have to deal with the above dependencies yourself.

For emacs 24, first make sure is properly configured. Then

M-x package-install RET gist RET

For emacs 23, you'll need to install a version of package.el first. Some bootstrap code is available there: Then proceed as for emacs 24. You might get some compilation errors, but the package should be operational in the end.

Install gist.el from git

After installing the required dependencies, proceed with:

$ cd ~/.emacs.d/vendor
$ git clone git://

In your emacs config:

(add-to-list 'load-path "~/.emacs.d/vendor/gist.el")
(require 'gist)

Getting started

When you first run a gist.el operation, you might be asked for your GitHub username and password. The username will be stored for future use, and a OAuth token will be stored in place of your password.

To make gist.el forget about those information, just remove them from your ~/.gitconfig file


gist-list - Lists your gists in a new buffer. Use arrow keys
to browse, RET to open one in the other buffer.

gist-region - Copies Gist URL into the kill ring.
With a prefix argument, makes a private gist.

gist-region-private - Explicitly create a private gist.

gist-buffer - Copies Gist URL into the kill ring.
With a prefix argument, makes a private gist.

gist-buffer-private - Explicitly create a private gist.

gist-region-or-buffer - Post either the current region, or if mark
is not set, the current buffer as a new paste at .
Copies the URL into the kill ring.
With a prefix argument, makes a private paste.

gist-region-or-buffer-private - Explicitly create a gist from the
region or buffer.


Set gist-view-gist to non-nil if you want to view your Gist using browse-url after it is created.


Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more