: [[image:iciclesimage]]


|| *Previous:* '''[[Icicles]]''' || IciclesIndex || *Next:* [[Icicles - Screenshots]] ||

----

== Icicles Libraries ==

"'''Icicles'''" refers to a set of libraries that enhance [[minibuffer]] input, providing [[Icicles - Cycling Completions|cycling]] among completion candidates and more powerful [[completion]]. It is composed of the following '''''required''''' libraries:



[:Required]
=== Required ===
* '''<tt>[[icicles.el]]</tt>''' -- main library
* <tt>[[icicles-chg.el]]</tt> -- change logs (no code)
* <tt>[[icicles-cmd1.el]]</tt> -- top-level [[command]]s, part 1
* <tt>[[icicles-cmd2.el]]</tt> -- top-level commands, part 2
* <tt>[[icicles-doc1.el]]</tt> -- first part of the doc (##Commentary##, no code)
* <tt>[[icicles-doc2.el]]</tt> -- second part of the doc (##Commentary##, no code)
* <tt>[[icicles-face.el]]</tt> -- [[face]]s (customizable)
* <tt>[[icicles-fn.el]]</tt> -- non-interactive functions
* <tt>[[icicles-mac.el]]</tt> -- macros
* <tt>[[icicles-mcmd.el]]</tt> -- minibuffer commands
* <tt>[[icicles-mode.el]]</tt> -- ''Icicle'' mode definition
* <tt>[[icicles-opt.el]]</tt> -- [[user option]]s (customizable [[variable]]s)
* <tt>[[icicles-var.el]]</tt> -- internal variables

When you load (e.g. `load-library' or `require') the driver library, '''<tt>[[icicles.el]]</tt>''', the others are all loaded automatically, except for ##icicles-chg.el##, ##icicles-doc1.el## and ##icicles-doc2.el##, which need not be loaded (they contain only a change log and documentation, as comments).





[:Optional]
=== Optional, But Recommended ===
The following libraries are recommended but '''''optional''''' (loaded by <tt>[[icicles.el]]</tt> if
in your `load-path', otherwise ignored).  They are enhanced by '''Icicles''', or '''Icicles''' is enhanced by them, or both.


||<tt>[[apropos-fn+var.el]]</tt> ||Apropos enhancements for functions and [[variable]]s. ||
||<tt>[[bookmark+.el]]</tt> etc.||Many bookmark enhancements. See '''[[Bookmark+]]''' and [[Icicles - Bookmark Enhancements]].||
||<tt>[[col-highlight.el]]</tt> ||Required by ##crosshairs.el## (Emacs 22+). See HighlightCurrentColumn.||
||<tt>[[crosshairs.el]]</tt> ||Highlight target positions -- see CrosshairHighlighting.||
||<tt>[[doremi.el]]</tt>, <tt>[[doremi-frm.el]]</tt> ||Incremental changes -- see [[Icicles - Completions Display]], [[Icicles - Completion Methods and Styles#SwankCompletion|Icicles - Fuzzy Symbol Completion]], and [[option]] <tt>[[Icicles - Customization and General Tips#icicle-max-candidates|icicle-max-candidates]]</tt>.||
||<tt>[[frame-cmds.el]]</tt> ||[[FrameModes#frame-cmds.el|Frame and window commands]].||
||<tt>[[fuzzy-match.el]]</tt> ||See [[Icicles - Completion Methods and Styles]].||
||<tt>[[hexrgb.el]]</tt> ||Color manipulation.  I strongly recommend that you include this library.||
||<tt>[[hl-line+.el]]</tt> ||Required by ##crosshairs.el## (Emacs 22+). See HighlightCurrentLine.||
||<tt>[[icomplete+.el]]</tt> ||See [[Icicles - Icompletion]] and '''[[IcompleteMode#IcompleteModePlus|Icomplete+]]'''.||
||<tt>[[info+.el]]</tt> ||See [[Icicles - Info Enhancements]] and '''[[Info+]]'''.||
||<tt>[[lacarte.el]]</tt> ||Keyboard access to the [[menu bar]] menus -- see '''LaCarte'''.  Used with '''Icicles''', you can type a substring or a [[regexp]] that matches any part of a [[menu bar]] menu tree, and you can cycle among [[completion]] candidates to easily navigate menus and choose a menu item.||
||<tt>[[mb-depth+.el]]</tt> ||MinibufferDepthIndicator, for recursive [[minibuffer]]s (Emacs 22 and later).||
||<tt>[[pp+.el]]</tt> ||Pretty-printing for `##M-:##'.  See '''[[EvaluatingExpressions#PpPlus|Pp+]]'''.||
||<tt>[[synonyms.el]]</tt> ||A hypertext thesaurus.  See '''[[Synonyms]]'''.||
||<tt>[[thingatpt+.el]]</tt> ||Better defaults when using commands; better possibilities for `##M-.##'. See '''[[ThingAtPoint+]]''' and [[Icicles - Inserting Text from Cursor]].||
||<tt>[[vline.el]]</tt> ||Required by ##crosshairs.el## (Emacs 22+). See VlineMode.||

Be aware that some of these libraries in turn require other libraries.  For example, library ##frame-cmds.el## requires library <tt>[[frame-fns.el]]</tt>

Depending on your platform, if you use '''Icicles''' in a text
terminal (that is, without a window system/manager), then you
might need to change some of the key bindings, if some of the
default bindings are not available to you.

If on your platform, for example, Emacs in a text terminal does
not recognize a key such as `S-TAB' (as something different from
`TAB'), then you will want to change that key binding.  To
customize '''Icicles''' key bindings, see [[Icicles - Customizing Key Bindings]].  You
might also want to customize some of the '''Icicles''' faces, since a
text terminal is sometimes limited in the colors it can handle.

[:byte-compile]
It is of course best to byte-compile all of the libraries (except ##icicles-chg.el##, ##icicles-doc1.el##, and ##icicles-doc2.el##).  You
will likely get some byte-compiler warning messages.  These are
probably benign -- ignore them.  '''Icicles''' is designed to work with
multiple versions of Emacs, and that fact provokes compiler
warnings.  If you get byte-compiler errors (not warnings), then
please report a bug, using `M-x icicle-send-bug-report'.

=== Updating ===

Whenever you update '''Icicles''' (i.e., download new versions of
'''Icicle''' source files), I recommend that you do the following:

# Delete all existing byte-compiled '''Icicles''' files (##icicles*.elc##).
# Load '''Icicles''' (`load-library' or `require').
# Byte-compile the source files.

In particular, always load ##icicles-mac.el## (''not'' ##icicles-mac.el##<u>##c##</u>)
before you byte-compile new versions of the files, in case there
have been any changes to Lisp macros (in ##icicles-mac.el##).

After startup, you can turn ''Icicle'' mode on or off at any time
interactively, using command '''`icy-mode'''' (aka `icicle-mode' --
prefix `icy' is unique to this command, so it is easier to
complete).

'''Note:''' If you turn on ''Icicle'' mode in your [[init file]], it's generally best to do so as late as possible -- after you or any libraries that you
load do any key binding.  This is because '''Icicles''' uses the
current global key bindings to determine which keys to bind for
minibuffer completion and cycling.  To pick up the latest
bindings at any time, you can of course enter ''Icicle'' mode
interactively using command `icy-mode' (if necessary, exit, then
re-enter).

'''Note:''' '''Icicles''' redefines some functions when you are in ''Icicle''
mode (it restores them when you leave ''Icicle'' mode).  It
generally does not use `defadvice' to alter the functions; it
redefines them instead.  Because of this, there can be
incompatibilities with other libraries that also change the same
functions (using `defadvice' or otherwise).  An example is ViperMode.  If you load Viper before '''Icicles''', then you will run into
problems with function `read-file-name' because it is tweaked by
both Viper and Icicles.  If you load '''Icicles''' before Viper, you
should not encounter this problem (but you might encounter other
problems: both '''Icicles''' and Viper try to control the minibuffer).



== Checking What Has Changed ==

Here's one way to check which '''Icicles''' libraries have changed recently: '''[https://www.emacswiki.org/emacs?action=rc;match=%5Cicicles.*.el?$;days=28;all=1;showedit=1 Latest Icicles Changes]'''












[:BulkIciclesDownload]
== Downloading Icicles Libraries ==

[new:DrewAdams:2017-10-14 22:52 UTC]
'''NOTE:''' 


'''Icicles''', as well as my other libraries that are on %%EmacsWiki%%, used to be obtainable also from [[MELPA]].  You may still find some of them there, but they are likely ''not up-to-date''. 

As of 2017-10, [[MELPA]] has decided to no longer accept Lisp libraries from %%EmacsWiki%%. This includes my libraries, even though these libraries are read-only (administrator lock on the wiki pages). Too bad. This means that you must download '''Icicles''' and my other libraries only from Emacs Wiki. Sorry about that. I upload '''Icicles''' files only to the wiki.


[new]


'''1.''' '''Download Files Individually'''

You can download the '''Icicles''' files individually from ElispArea, by clicking the link for each and then right-clicking its `Download' link, and choosing `Save As' in your browser.  You will need to do that on ''each'' file page.

'''2.''' '''Bulk Download From Within Emacs'''

Two alternative methods:

* Use library <tt>[[icicles-install.el]]</tt>. See the simple instructions in the file header, and read the docstring for [[user option]] `icicle-files-to-download-list', defined there. This method is based on the [[ELPA]] initialization code. It uses [[UrlPackage]], if available; otherwise it uses `wget'. Thanks to AnupamSengupta for this.


* Use library <tt>[[auto-install.el]]</tt>. Set it up like this: ##(setq auto-install-save-confirm nil)##. Do `M-x auto-install-batch', then enter `icicles'.  -- Thanks to AndyStewart for this.


'''3.''' '''Bulk Download Using a Shell Script Outside Emacs:''' (UNIX, GNU/Linux) 

Use `wget': <tt>[[get-icicles.sh]]</tt>. Thanks to LeWang for that. Thanks to MishaGorodnitzky for tweaking it to get around an EmacsWiki limit on how many files you can download per second.


'''4'''. '''Bulk Download Using a Python script''': <tt>[[icicles_dler.py]]</tt>.

Runs under python2.5.2.  Thanks to DarrenYin.  (The script is still "somewhat
sketchy". -- DarrenYin) This downloads only Icicles files, not any of its dependencies or recommended libraries.


'''5.''' '''Bulk Download Using `wget' Directly''' 
* Required libraries:

        wget https://www.emacswiki.org/emacs/download/icicles{,-chg,-cmd1,-cmd2,-doc1,-doc2,-face,-fn,-mac,-mcmd,-mode,-opt,-var}.el

July 26th 2019, Error 400 - bad request

* Optional libraries:

        wget https://www.emacswiki.org/emacs/download/{apropos-fn%2bvar,bookmark%2b,col-highlight,crosshairs,doremi,doremi-frm,frame-cmds,fuzzy-match,hexrgb,hl-line%2b,icomplete%2b,info%2b,lacarte,mb-depth%2b,pp%2b,synonyms,thingatpt%2b,vline}.el

-- JoniDiMontago



[new:DrewAdams:2009-04-17 07:54 UTC Updated by BoruchBaum 2018-04-03]
'''Note:''' The remaining methods perform downloads from the GitHubMirror, and so have in common two disadvantages: 1) They download only the Icicles files themselves, not any of their dependencies or recommended related libraries. Those related libraries are also available on the GitHubMirror, but in ''separate'' git repositories; 2) They might not always have the absolute most up-to-date version because the GitHubMirror is updated  only periodically (e.g. once a week).

(Note too that repository names on
GitHub cannot contain a plus character (`##+##').  So, for example, '''[[Bookmark+]]''' files are available from repository
https://github.com/emacsmirror/bookmark-plus, not ##https://github.com/emacsmirror/bookmark+##.)
[new]


'''6.''' '''Manual Download Using `git''''

The GitHubMirror contains a git repository that includes the '''[[https://github.com/emacsmirror/icicles Icicles files]]''' (https://github.com/emacsmirror/icicles), as well as other repositories. Note that if you do not need the entire git history of each '''Icicles''' file, you can clone a subset using the options <tt>--depth=1 --branch=master</tt>


[:ZipFileDownload]
'''7.''' '''Manual GitHub Download Using a Zip File'''

You can download an automatically generated zip file of '''Icicles''' files from the '''[[https://github.com/emacsmirror/icicles Icicles repository]]''' on the GitHubMirror.

'''8.''' '''Download and update all the libraries using a `bash' script written by the creator of the '''[[https://www.youtube.com/channel/UCEqYjPJdmEcUVfHmQwJVM9A Emacs Elements]] Channel'''

Watch the '''[[https://youtu.be/UEa8boIqKcg Video]]''' and get the '''[[https://github.com/emacs-elements/public_elements/blob/main/drew-adams-packages.sh Script]]'''.


----

|| *Previous:* '''[[Icicles]]''' || IciclesIndex || *Next:* [[Icicles - Screenshots]] ||

DrewsElispLibraries referenced here: Lisp:lacarte.el, Lisp:icicles.el, Lisp:icicles-chg.el, Lisp:icicles-cmd1.el, Lisp:icicles-cmd2.el, Lisp:icicles-face.el, Lisp:icicles-fn.el, Lisp:icicles-mac.el, Lisp:icicles-mode.el, Lisp:icicles-opt.el, Lisp:icicles-var.el, Lisp:icomplete+.el 

----


CategoryCommands 
CategoryCompletion
CategoryRegexp
