81

GitHub - Malabarba/spinner.el: Emacs mode-line spinner for operations in progres...

 5 years ago
source link: https://github.com/Malabarba/spinner.el
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.org

spinner.el

Add spinners and progress-bars to the mode-line for ongoing operations.

some-spinners.gif

all-spinners.gif

Usage

First of all, don’t forget to add (spinner "VERSION") to your package’s dependencies.

Major-modes

  1. Just call (spinner-start) and a spinner will be added to the mode-line.
  2. Call (spinner-stop) on the same buffer when you want to remove it.

The default spinner is a line drawing that rotates. You can pass an argument to spinner-start to specify which spinner you want. All possibilities are listed in the spinner-types variable, but here are a few examples for you to try:

  • (spinner-start 'vertical-breathing 10)
  • (spinner-start 'minibox)
  • (spinner-start 'moon)
  • (spinner-start 'triangle)

You can also define your own as a vector of strings (see the examples in spinner-types).

Minor-modes

Minor-modes can create a spinner with spinner-create and then add it to their mode-line lighter. They can then start the spinner by setting a variable and calling spinner-start-timer. Finally, they can stop the spinner (and the timer) by just setting the same variable to nil.

Here’s an example for a minor-mode named foo. Assuming that foo--lighter is used as the mode-line lighter, the following code will add an inactive global spinner to the mode-line.

(defvar foo--spinner (spinner-create 'rotating-line))
(defconst foo--lighter
  '(" foo" (:eval (spinner-print foo--spinner))))
  1. To activate the spinner, just call (spinner-start foo--spinner). It will show up on the mode-line and start animating.
  2. To get rid of it, call (spinner-stop foo--spinner). It will then disappear again.

Some minor-modes will need spinners to be buffer-local. To achieve that, just make the foo--spinner variable buffer-local and use the third argument of the spinner-create function. The snippet below is an example.

(defvar-local foo--spinner nil)
(defconst foo--lighter
  '(" foo" (:eval (spinner-print foo--spinner))))
(defun foo--start-spinner ()
  "Create and start a spinner on this buffer."
  (unless foo--spinner
    (setq foo--spinner (spinner-create 'moon t)))
  (spinner-start foo--spinner))
  1. To activate the spinner, just call (foo--start-spinner).
  2. To get rid of it, call (spinner-stop foo--spinner).

This will use the moon spinner, but you can use any of the names defined in the spinner-types variable or even define your own.

Extra options

Both spinner-start and spinner-create take extra options to configure the spinner, these are:

  • FPS: The number of frames to display per second. Defaults to spinner-frames-per-second.
  • DELAY: After startin a spinner, it still won’t be displayed for this many seconds.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK