branch: master commit 5eaf78780e70e9328c8802ebb4c94841f9c8c500 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
doc/ivy.org: Improve the Texinfo/HTML export structure * doc/ivy-ox.el: Store the settings for org-mode export to HTML and Texinfo. * doc/ivy.texi: Update. * doc/style.css: Remove. Rely on theme-readtheorg.setup instead. The HTML file shouldn't be in this repository to avoid bloat, instead it's in the gh-pages branch at https://github.com/abo-abo/swiper/tree/gh-pages. --- doc/ivy-ox.el | 147 ++++++++++++++++++++++++++++++++++++++++++++ doc/ivy.org | 189 +++++++++++++++++++++++++++++++++++---------------------- doc/ivy.texi | 108 ++++++++++++++------------------- doc/style.css | 107 -------------------------------- 4 files changed, 311 insertions(+), 240 deletions(-) diff --git a/doc/ivy-ox.el b/doc/ivy-ox.el new file mode 100644 index 0000000..cb0d2fc --- /dev/null +++ b/doc/ivy-ox.el @@ -0,0 +1,147 @@ +;;; ivy-ox.el --- org-export settings for Ivy + +;; Copyright (C) 2015 Free Software Foundation, Inc. + +;; Author: Oleh Krehel + +;; This file is part of GNU Emacs. + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; For a full copy of the GNU General Public License +;; see <http://www.gnu.org/licenses/>. + +;;* ox-texinfo +(require 'ox-texinfo) +(org-export-define-backend 'texinfo + '((bold . org-texinfo-bold) + (center-block . org-texinfo-center-block) + (clock . org-texinfo-clock) + (code . org-texinfo-kbd) + (drawer . org-texinfo-drawer) + (dynamic-block . org-texinfo-dynamic-block) + (entity . org-texinfo-entity) + (example-block . org-texinfo-example-block) + (export-block . org-texinfo-export-block) + (export-snippet . org-texinfo-export-snippet) + (fixed-width . org-texinfo-fixed-width) + (footnote-definition . org-texinfo-footnote-definition) + (footnote-reference . org-texinfo-footnote-reference) + (headline . org-texinfo-headline) + (inline-src-block . org-texinfo-inline-src-block) + (inlinetask . org-texinfo-inlinetask) + (italic . org-texinfo-italic) + (item . org-texinfo-item) + (keyword . org-texinfo-keyword) + (line-break . org-texinfo-line-break) + (link . org-texinfo-link) + (node-property . org-texinfo-node-property) + (paragraph . org-texinfo-paragraph) + (plain-list . org-texinfo-plain-list) + (plain-text . org-texinfo-plain-text) + (planning . org-texinfo-planning) + (property-drawer . org-texinfo-property-drawer) + (quote-block . org-texinfo-quote-block) + (radio-target . org-texinfo-radio-target) + (section . org-texinfo-section) + (special-block . org-texinfo-special-block) + (src-block . org-texinfo-src-block) + (statistics-cookie . org-texinfo-statistics-cookie) + (subscript . org-texinfo-subscript) + (superscript . org-texinfo-superscript) + (table . org-texinfo-table) + (table-cell . org-texinfo-table-cell) + (table-row . org-texinfo-table-row) + (target . org-texinfo-target) + (template . org-texinfo-template) + (timestamp . org-texinfo-timestamp) + (verbatim . org-texinfo-code) + (verse-block . org-texinfo-verse-block)) + :filters-alist + '((:filter-headline . org-texinfo--filter-section-blank-lines) + (:filter-parse-tree . org-texinfo--normalize-headlines) + (:filter-section . org-texinfo--filter-section-blank-lines)) + :menu-entry + '(?i "Export to Texinfo" + ((?t "As TEXI file" org-texinfo-export-to-texinfo) + (?i "As INFO file" org-texinfo-export-to-info) + (?o "As INFO file and open" + (lambda (a s v b) + (if a (org-texinfo-export-to-info t s v b) + (org-open-file (org-texinfo-export-to-info nil s v b))))))) + :options-alist + '((:texinfo-filename "TEXINFO_FILENAME" nil nil t) + (:texinfo-class "TEXINFO_CLASS" nil org-texinfo-default-class t) + (:texinfo-header "TEXINFO_HEADER" nil nil newline) + (:texinfo-post-header "TEXINFO_POST_HEADER" nil nil newline) + (:subtitle "SUBTITLE" nil nil parse) + (:subauthor "SUBAUTHOR" nil nil newline) + (:texinfo-dircat "TEXINFO_DIR_CATEGORY" nil nil t) + (:texinfo-dirtitle "TEXINFO_DIR_TITLE" nil nil t) + (:texinfo-dirdesc "TEXINFO_DIR_DESC" nil nil t) + (:texinfo-printed-title "TEXINFO_PRINTED_TITLE" nil nil t) + ;; Other variables. + (:texinfo-classes nil nil org-texinfo-classes) + (:texinfo-format-headline-function nil nil org-texinfo-format-headline-function) + (:texinfo-node-description-column nil nil org-texinfo-node-description-column) + (:texinfo-active-timestamp-format nil nil org-texinfo-active-timestamp-format) + (:texinfo-inactive-timestamp-format nil nil org-texinfo-inactive-timestamp-format) + (:texinfo-diary-timestamp-format nil nil org-texinfo-diary-timestamp-format) + (:texinfo-link-with-unknown-path-format nil nil org-texinfo-link-with-unknown-path-format) + (:texinfo-tables-verbatim nil nil org-texinfo-tables-verbatim) + (:texinfo-table-scientific-notation nil nil org-texinfo-table-scientific-notation) + (:texinfo-def-table-markup nil nil org-texinfo-def-table-markup) + (:texinfo-text-markup-alist nil nil org-texinfo-text-markup-alist) + (:texinfo-format-drawer-function nil nil org-texinfo-format-drawer-function) + (:texinfo-format-inlinetask-function nil nil org-texinfo-format-inlinetask-function))) + +(defun org-texinfo-kbd (code _contents _info) + "Transcode a CODE object from Org to Texinfo." + (format "@kbd{%s}" (org-element-property :value code))) + +(defun org-texinfo-plain-list (plain-list contents info) + "Transcode a PLAIN-LIST element from Org to Texinfo. +CONTENTS is the contents of the list. INFO is a plist holding +contextual information." + (let* ((attr (org-export-read-attribute :attr_texinfo plain-list)) + (indic (or (plist-get attr :indic) + (plist-get info :texinfo-def-table-markup))) + (table-type (plist-get attr :table-type)) + (type (org-element-property :type plain-list)) + (list-type (cond + ((eq type 'ordered) "enumerate") + ((eq type 'unordered) "itemize") + ((member table-type '("ftable" "vtable")) table-type) + (t "table")))) + (if (equal list-type "table") + (mapconcat (lambda (s) + (concat "@subsubheading" s)) + (split-string (substring-no-properties contents) "^@item" t) + "\n") + (format "@%s\n%s@end %s" + (if (eq type 'descriptive) (concat list-type " " indic) list-type) + contents + list-type)))) + +;;* ox-html +(require 'ox-html) +(setq org-html-validation-link nil) +(setq org-html-postamble nil) +(setq org-html-text-markup-alist + '((bold . "<b>%s</b>") + (code . "<kbd>%s</kbd>") + (italic . "<i>%s</i>") + (strike-through . "<del>%s</del>") + (underline . "<span class=\"underline\">%s</span>") + (verbatim . "<code>%s</code>"))) +(setq org-html-style-default nil) + +(provide 'ivy-ox) diff --git a/doc/ivy.org b/doc/ivy.org index 68c045e..b2d5203 100644 --- a/doc/ivy.org +++ b/doc/ivy.org @@ -1,40 +1,46 @@ #+TITLE: Ivy User Manual #+AUTHOR: Oleh Krehel #+EMAIL: ohwoeo...@gmail.com -#+DATE: 2015 #+LANGUAGE: en #+TEXINFO_DIR_CATEGORY: Emacs #+TEXINFO_DIR_TITLE: Ivy: (ivy). #+TEXINFO_DIR_DESC: Using Ivy for completion. -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="style.css"/> +#+SETUPFILE: ~/git/org-html-themes/setup/theme-readtheorg.setup +#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="kbd-style.css"/> +#+EXPORT_FILE_NAME: index.html #+OPTIONS: H:6 num:6 toc:4 #+STARTUP: indent * Macros :noexport: #+MACRO: defopt #+TEXINFO: @defopt $1 #+MACRO: endopt #+TEXINFO: @end defopt +* Setup :noexport: +#+BEGIN_SRC elisp :exports results :results silent +(add-to-list 'load-path default-directory) +(require 'ivy-ox) +#+END_SRC * Copying :PROPERTIES: :COPYING: t +:CUSTOM_ID: copying :END: - -#+BEGIN_TEXINFO -@ifnottex +#+TEXINFO: @ifnottex Ivy manual, version 0.7.0 Ivy is an interactive interface for completion in Emacs. Emacs uses completion mechanism in a variety of contexts: code, menus, commands, variables, functions, etc. Completion entails listing, sorting, filtering, previewing, and applying actions on selected items. When -active, @code{ivy-mode} completes the selection process by narrowing +active, =ivy-mode= completes the selection process by narrowing available choices while previewing in the minibuffer. Selecting the final candidate is either through simple keyboard character inputs or -through powerful regular expressions. @end ifnottex +through powerful regular expressions. +#+TEXINFO: @end ifnottex -Copyright @copyright{} 2015 Free Software Foundation, Inc. +Copyright (C) 2015 Free Software Foundation, Inc. -@quotation +#+BEGIN_QUOTE Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no @@ -44,10 +50,13 @@ is included in the section entitled ``GNU Free Documentation License.'' (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and modify this GNU manual.'' -@end quotation -#+END_TEXINFO +#+END_QUOTE +#+HTML: <a href="https://github.com/abo-abo/swiper/blob/master/doc/ivy.org">This manual source</a> * Introduction +:PROPERTIES: +:CUSTOM_ID: introduction +:END: Ivy is for quick and easy selection from a list. When Emacs prompts for a string from a list of several possible choices, Ivy springs into action to assist in narrowing and picking the right string from a vast @@ -56,17 +65,13 @@ number of choices. Ivy strives for minimalism, simplicity, customizability and discoverability. -#+BEGIN_TEXINFO -@subsubheading Minimalism -#+END_TEXINFO +- Minimalism :: Uncluttered minibuffer is minimalism. Ivy shows the completion defaults, the number of matches, and 10 candidate matches below the input line. Customize =ivy-length= to adjust the number of candidate matches displayed in the minibuffer. -#+BEGIN_TEXINFO -@subsubheading Simplicity -#+END_TEXINFO +- Simplicity :: Simplicity is about Ivy's behavior in the minibuffer. It is also about the code interface to extend Ivy's functionality. The minibuffer area behaves as close to =fundamental-mode= as possible. ~SPC~ inserts a @@ -75,9 +80,7 @@ space, for example, instead of being bound to the more complex variables; avoids needless complications with branch-introducing custom macros. -#+BEGIN_TEXINFO -@subsubheading Customizability -#+END_TEXINFO +- Customizability :: Customizability is about being able to use different methods and interfaces of completion to tailor the selection process. For example, adding a custom display function that points to a selected candidate @@ -88,9 +91,7 @@ after the candidate function is selected. ~RET~ uses jumps to that function's definition in the code. The ~M-o~ prefix can be uniformly used with characters like ~d~ to group similar actions. -#+BEGIN_TEXINFO -@subsubheading Discoverability -#+END_TEXINFO +- Discoverability :: Ivy displays easily discoverable commands through the hydra facility. ~C-o~ in the minibuffer displays a hydra menu. It opens up within an expanded minibuffer area. Each menu item comes with short @@ -101,11 +102,17 @@ discoverability minimizes exiting Ivy interface for documentation look-ups. * Installation +:PROPERTIES: +:CUSTOM_ID: installation +:END: Install Ivy automatically through Emacs's package manager, or manually from Ivy's development repository. ** Installing from Emacs Package Manager +:PROPERTIES: +:CUSTOM_ID: installing-from-emacs-package-manager +:END: ~M-x~ =package-install= ~RET~ =swiper= ~RET~ @@ -129,6 +136,9 @@ After this do ~M-x~ =package-refresh-contents= ~RET~, followed by For package manager details, see [[info:emacs#Packages]]. ** Installing from the Git repository +:PROPERTIES: +:CUSTOM_ID: installing-from-the-git-repository +:END: Why install from Git? @@ -157,8 +167,10 @@ make #+end_src * Getting started - -First enable Ivy completion everywhere: +:PROPERTIES: +:CUSTOM_ID: getting-started +:END: +First, enable Ivy completion everywhere: #+begin_src elisp (ivy-mode 1) @@ -166,6 +178,9 @@ First enable Ivy completion everywhere: Note: =ivy-mode= can be toggled on and off with ~M-x~ =ivy-mode=. ** Basic customization +:PROPERTIES: +:CUSTOM_ID: basic-customization +:END: Here are some basic settings particularly useful for new Ivy users: #+begin_src elisp @@ -179,12 +194,16 @@ For additional customizations, refer to =M-x describe-variable= documentation. * Key bindings +:PROPERTIES: +:CUSTOM_ID: key-bindings +:END: ** Global key bindings +:PROPERTIES: +:CUSTOM_ID: global-key-bindings +:END: +The recommended key bindings are: -Recommended key bindings are: -#+BEGIN_TEXINFO -@subsubheading Ivy-based interface to standard commands -#+END_TEXINFO +- Ivy-based interface to standard commands :: #+begin_src elisp (global-set-key (kbd "C-s") 'swiper) (global-set-key (kbd "M-x") 'counsel-M-x) @@ -195,9 +214,8 @@ Recommended key bindings are: (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol) (global-set-key (kbd "<f2> u") 'counsel-unicode-char) #+end_src -#+BEGIN_TEXINFO -@subsubheading Ivy-based interface to shell and system tools -#+END_TEXINFO + +- Ivy-based interface to shell and system tools :: #+begin_src elisp (global-set-key (kbd "C-c g") 'counsel-git) (global-set-key (kbd "C-c j") 'counsel-git-grep) @@ -205,15 +223,17 @@ Recommended key bindings are: (global-set-key (kbd "C-x l") 'counsel-locate) (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) #+end_src -#+BEGIN_TEXINFO -@subsubheading Ivy-resume and other commands -#+END_TEXINFO + +- Ivy-resume and other commands :: =ivy-resume= resumes the last Ivy-based completion. #+begin_src elisp (global-set-key (kbd "C-c C-r") 'ivy-resume) #+end_src ** Minibuffer key bindings +:PROPERTIES: +:CUSTOM_ID: minibuffer-key-bindings +:END: Ivy includes several minibuffer bindings, which are defined in the =ivy-minibuffer-map= keymap variable. The most frequently used ones @@ -224,6 +244,9 @@ are described here. under their respective commands. *** Key bindings for navigation +:PROPERTIES: +:CUSTOM_ID: key-bindings-for-navigation +:END: - ~C-n~ (=ivy-next-line=) selects the next candidate - ~C-p~ (=ivy-previous-line=) selects the previous candidate @@ -246,6 +269,9 @@ scroll size for ~C-v~ and ~M-v~. {{{endopt}}} *** Key bindings for single selection, action, then exit minibuffer +:PROPERTIES: +:CUSTOM_ID: key-bindings-for-single-selection-action-then-exit-minibuffer +:END: Ivy can offer several actions from which to choose which action to run. This "calling an action" operates on the selected candidate. For @@ -285,14 +311,14 @@ current input to create a new directory with =dired-create-directory=. an action on the /currently selected/ candidate and calling an action on the /current input/. -#+BEGIN_TEXINFO -Invoking avy completion with @kbd{C-'} (@code{ivy-avy}). -#+END_TEXINFO -~C-'~ uses avy's visible jump mechanism, which can further reduce -Ivy's line-by-line scrolling that requires multiple ~C-n~ or ~C-p~ -keystrokes. +~C-'~ (=ivy-avy=) uses avy's visible jump mechanism, which can further +reduce Ivy's line-by-line scrolling that requires multiple ~C-n~ or +~C-p~ keystrokes. *** Key bindings for multiple selections and actions, keep minibuffer open +:PROPERTIES: +:CUSTOM_ID: key-bindings-for-multiple-selections-and-actions-keep-minibuffer-open +:END: For repeatedly applying multiple actions or acting on multiple candidates, Ivy does not close the minibuffer between commands. It @@ -329,6 +355,9 @@ the same as above except that it moves through the list in the other direction. *** Key bindings that alter the minibuffer input +:PROPERTIES: +:CUSTOM_ID: key-bindings-that-alter-the-minibuffer-input +:END: ~M-n~ (=ivy-next-history-element=) and ~M-p~ (=ivy-previous-history-element=) cycle through the Ivy command @@ -355,11 +384,17 @@ completion, the selected candidate string is inserted into the minibuffer. *** Other key bindings +:PROPERTIES: +:CUSTOM_ID: other-key-bindings +:END: ~M-w~ (=ivy-kill-ring-save=) copies selected candidates to the kill ring; when the region is active, copies active region. *** Hydra in the minibuffer +:PROPERTIES: +:CUSTOM_ID: hydra-in-the-minibuffer +:END: ~C-o~ (=hydra-ivy/body=) invokes Hydra menus with key shortcuts. @@ -375,6 +410,9 @@ bindings: Minibuffer editing is disabled when Hydra is active. *** Saving the current completion session to a buffer +:PROPERTIES: +:CUSTOM_ID: saving-the-current-completion-session-to-a-buffer +:END: ~C-c C-o~ (=ivy-occur=) saves the current candidates to a new buffer; the list is active in the new buffer. @@ -389,6 +427,9 @@ descriptive names, for example: =*ivy-occur counsel-describe-variable "function$*=. * Completion styles +:PROPERTIES: +:CUSTOM_ID: completion-styles +:END: Ivy's completion functions rely on the highly configurable regex builder. @@ -414,6 +455,9 @@ flexibility, Ivy operates within a consistent and uniform interface. The main regex-builders currently in Ivy are: ** ivy--regex-plus +:PROPERTIES: +:CUSTOM_ID: ivy--regex-plus +:END: =ivy--regex-plus= is Ivy's default completion method. @@ -421,54 +465,57 @@ The main regex-builders currently in Ivy are: rebuilding it into a regex. As the search string is typed in Ivy's minibuffer, it is transformed -into proper regex syntax. If the string is "for example", it is +into proper regex syntax. If the string is ="for example"=, it is transformed into -#+BEGIN_EXAMPLE +#+begin_src elisp "\\(for\\).*\\(example\\)" -#+END_EXAMPLE +#+end_src -which in regex terminology matches "for" followed by a wild card and -then "example". Note how Ivy uses the space character to build -wild cards. For literal white space matching in Ivy, use an extra space: -to match one space type two spaces, to match two spaces type three +which in regex terminology matches ="for"= followed by a wild card and +then ="example"=. Note how Ivy uses the space character to build wild +cards. For literal white space matching in Ivy, use an extra space: to +match one space type two spaces, to match two spaces type three spaces, and so on. As Ivy transforms typed characters into regex strings, it provides an intuitive feedback through font highlights. -Ivy supports regexp negation with "!". For example, "define key ! ivy -quit" first selects everything matching "define.*key", then removes -everything matching "ivy", and finally removes everything matching -"quit". What remains is the final result set of the negation regexp. - -#+BEGIN_EXAMPLE -Standard regexp identifiers work: +Ivy supports regexp negation with ="!"=. +For example, ="define key ! ivy quit"= first selects everything +matching ="define.*key"=, then removes everything matching ="ivy"=, +and finally removes everything matching ="quit"=. What remains is the +final result set of the negation regexp. -"^", "$", "\b" or "[a-z]" -#+END_EXAMPLE - -Since Ivy treats minibuffer input as a regexp, standard regexp -identifiers work as usual. The exceptions are spaces, which -translate to ".*", and "!" that signal the beginning of a negation -group. +Since Ivy treats minibuffer input as a regexp, the standard regexp +identifiers work: ="^"=, ="$"=, ="\b"= or ="[a-z]"=. The exceptions +are spaces, which translate to =".*"=, and ="!"= that signal the +beginning of a negation group. ** ivy--regex-ignore-order +:PROPERTIES: +:CUSTOM_ID: ivy--regex-ignore-order +:END: =ivy--regex-ignore-order= ignores the order of regexp tokens when -searching for matching candidates. For instance, the input "for -example" will match "example test for". Otherwise =ivy--regex-plus= -normal behavior is to honor the order of regexp tokens. +searching for matching candidates. For instance, the input +="for example"= will match ="example test for"=. ** ivy--regex-fuzzy +:PROPERTIES: +:CUSTOM_ID: ivy--regex-fuzzy +:END: =ivy--regex-fuzzy= splits each character with a wild card. Searching -for "for" returns all "f.*o.*r" matches, resulting in a large number -of hits. Yet some searches need these extra hits. Ivy sorts such -large lists using =flx= package's scoring mechanism, if it's +for ="for"= returns all ="f.*o.*r"= matches, resulting in a large +number of hits. Yet some searches need these extra hits. Ivy sorts +such large lists using =flx= package's scoring mechanism, if it's installed. * Variable Index -#+BEGIN_TEXINFO -@printindex vr -#+END_TEXINFO +:PROPERTIES: +:INDEX: vr +:CUSTOM_ID: variable-index +:END: + + diff --git a/doc/ivy.texi b/doc/ivy.texi index b06c68c..42b8a91 100644 --- a/doc/ivy.texi +++ b/doc/ivy.texi @@ -17,9 +17,10 @@ filtering, previewing, and applying actions on selected items. When active, @code{ivy-mode} completes the selection process by narrowing available choices while previewing in the minibuffer. Selecting the final candidate is either through simple keyboard character inputs or -through powerful regular expressions. @end ifnottex +through powerful regular expressions. +@end ifnottex -Copyright @copyright{} 2015 Free Software Foundation, Inc. +Copyright (C) 2015 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -84,9 +85,9 @@ Key bindings Minibuffer key bindings * Key bindings for navigation:: -* Key bindings for single selection, action, then exit minibuffer: Key bindings for single selection action then exit minibuffer. -* Key bindings for multiple selections and actions, keep minibuffer open: Key bindings for multiple selections and actions keep minibuffer open. -* Key bindings that alter minibuffer input:: +* Key bindings for single selection, action, then exit minibuffer: Key bindings for single selection action then exit minibuffer. +* Key bindings for multiple selections and actions, keep minibuffer open: Key bindings for multiple selections and actions keep minibuffer open. +* Key bindings that alter the minibuffer input:: * Other key bindings:: * Hydra in the minibuffer:: * Saving the current completion session to a buffer:: @@ -168,7 +169,6 @@ command. For current hourly builds, use the MELPA archives. See the code below for adding MELPA to the list of package archives: - @lisp (require 'package) (add-to-list 'package-archives @@ -197,21 +197,18 @@ Contribute to Ivy's development; send patches; pull requests @strong{Configuration steps} First clone the Swiper repository: - @example cd ~/git && git clone https://github.com/abo-abo/swiper cd swiper && make compile @end example Then add this to Emacs init: - @lisp (add-to-list 'load-path "~/git/swiper/") (require 'ivy) @end lisp To update the code: - @example git pull make @@ -220,8 +217,7 @@ make @node Getting started @chapter Getting started -First enable Ivy completion everywhere: - +First, enable Ivy completion everywhere: @lisp (ivy-mode 1) @@ -237,7 +233,6 @@ Note: @code{ivy-mode} can be toggled on and off with @kbd{M-x} @code{ivy-mode}. Here are some basic settings particularly useful for new Ivy users: - @lisp (setq ivy-use-virtual-buffers t) (setq ivy-height 10) @@ -259,9 +254,9 @@ documentation. @node Global key bindings @section Global key bindings -Recommended key bindings are: -@subsubheading Ivy-based interface to standard commands +The recommended key bindings are: +@subsubheading Ivy-based interface to standard commands @lisp (global-set-key (kbd "C-s") 'swiper) (global-set-key (kbd "M-x") 'counsel-M-x) @@ -272,8 +267,8 @@ Recommended key bindings are: (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol) (global-set-key (kbd "<f2> u") 'counsel-unicode-char) @end lisp -@subsubheading Ivy-based interface to shell and system tools +@subsubheading Ivy-based interface to shell and system tools @lisp (global-set-key (kbd "C-c g") 'counsel-git) (global-set-key (kbd "C-c j") 'counsel-git-grep) @@ -281,9 +276,9 @@ Recommended key bindings are: (global-set-key (kbd "C-x l") 'counsel-locate) (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) @end lisp + @subsubheading Ivy-resume and other commands @code{ivy-resume} resumes the last Ivy-based completion. - @lisp (global-set-key (kbd "C-c C-r") 'ivy-resume) @end lisp @@ -300,9 +295,9 @@ are described here. under their respective commands. @menu * Key bindings for navigation:: -* Key bindings for single selection, action, then exit minibuffer: Key bindings for single selection action then exit minibuffer. -* Key bindings for multiple selections and actions, keep minibuffer open: Key bindings for multiple selections and actions keep minibuffer open. -* Key bindings that alter minibuffer input:: +* Key bindings for single selection, action, then exit minibuffer: Key bindings for single selection action then exit minibuffer. +* Key bindings for multiple selections and actions, keep minibuffer open: Key bindings for multiple selections and actions keep minibuffer open. +* Key bindings that alter the minibuffer input:: * Other key bindings:: * Hydra in the minibuffer:: * Saving the current completion session to a buffer:: @@ -369,9 +364,7 @@ when applying multiple actions. Multiple actions and multiple selections as covered in the next section of this manual. @kbd{TAB} (@code{ivy-partial-or-done}) attempts partial completion, extending -current input as much as possible. - -@kbd{TAB TAB} is the same as @kbd{C-j}. +current input as much as possible. @kbd{TAB TAB} is the same as @kbd{C-j}. @kbd{C-M-j} (@code{ivy-immediate-done}) is useful when there is no match for the given input. Or there is an incorrect partial match. @kbd{C-M-j} with @@ -382,10 +375,9 @@ current input to create a new directory with @code{dired-create-directory}. an action on the @emph{currently selected} candidate and calling an action on the @emph{current input}. -Invoking avy completion with @kbd{C-'} (@code{ivy-avy}). -@kbd{C-`} uses avy's visible jump mechanism, which can further reduce -Ivy's line-by-line scrolling that requires multiple @kbd{C-n} or @kbd{C-p} -keystrokes. +@kbd{C-'} (@code{ivy-avy}) uses avy's visible jump mechanism, which can further +reduce Ivy's line-by-line scrolling that requires multiple @kbd{C-n} or +@kbd{C-p} keystrokes. @node Key bindings for multiple selections and actions keep minibuffer open @subsection Key bindings for multiple selections and actions, keep minibuffer open @@ -424,8 +416,8 @@ action on each successive element of the list. the same as above except that it moves through the list in the other direction. -@node Key bindings that alter minibuffer input -@subsection Key bindings that alter minibuffer input +@node Key bindings that alter the minibuffer input +@subsection Key bindings that alter the minibuffer input @kbd{M-n} (@code{ivy-next-history-element}) and @kbd{M-p} (@code{ivy-previous-history-element}) cycle through the Ivy command @@ -438,9 +430,9 @@ minibuffer. Useful for copying and renaming files, for example: @kbd{M-i} to insert the original file name string, edit it, and then @kbd{C-m} to complete the renaming. -@kbd{M-j} (@code{ivy-yank-word}) inserts sub-word at point into minibuffer. This -is similar to @kbd{C-s C-w} with @code{isearch}. Ivy reserves @kbd{C-w} for -@code{kill-region}. +@kbd{M-j} (@code{ivy-yank-word}) inserts the sub-word at point into the +minibuffer. This is similar to @kbd{C-s C-w} with @code{isearch}. Ivy reserves +@kbd{C-w} for @code{kill-region}. @kbd{S-SPC} (@code{ivy-restrict-to-matches}) deletes the current input, and resets the candidates list to the currently restricted matches. This @@ -499,7 +491,6 @@ Ivy's completion functions rely on the highly configurable regex builder. The default is: - @lisp (setq ivy-re-builders-alist '((t . ivy--regex-plus))) @@ -508,7 +499,6 @@ The default is: The default @code{ivy--regex-plus} narrowing is always invoked unless specified otherwise. For example, file name completion may have a custom completion function: - @lisp (setq ivy-re-builders-alist '((read-file-name-internal . ivy--regex-fuzzy) @@ -534,58 +524,52 @@ The main regex-builders currently in Ivy are: rebuilding it into a regex. As the search string is typed in Ivy's minibuffer, it is transformed -into proper regex syntax. If the string is "for example", it is +into proper regex syntax. If the string is @code{"for example"}, it is transformed into -@verbatim +@lisp "\\(for\\).*\\(example\\)" -@end verbatim +@end lisp -which in regex terminology matches "for" followed by a wild card and -then "example". Note how Ivy uses the space character to build -wild cards. For literal white space matching in Ivy, use an extra space: -to match one space type two spaces, to match two spaces type three +which in regex terminology matches @code{"for"} followed by a wild card and +then @code{"example"}. Note how Ivy uses the space character to build wild +cards. For literal white space matching in Ivy, use an extra space: to +match one space type two spaces, to match two spaces type three spaces, and so on. As Ivy transforms typed characters into regex strings, it provides an intuitive feedback through font highlights. -Ivy supports regexp negation with "!". For example, "define key ! ivy -quit" first selects everything matching "define.*key", then removes -everything matching "ivy", and finally removes everything matching -"quit". What remains is the final result set of the negation regexp. - -@verbatim -Standard regexp identifiers work: - -"^", "$", "\b" or "[a-z]" -@end verbatim +Ivy supports regexp negation with @code{"!"}. +For example, @code{"define key ! ivy quit"} first selects everything +matching @code{"define.*key"}, then removes everything matching @code{"ivy"}, +and finally removes everything matching @code{"quit"}. What remains is the +final result set of the negation regexp. -Since Ivy treats minibuffer input as a regexp, standard regexp -identifiers work as usual. The exceptions are spaces, which -translate to ".*", and "!" that signal the beginning of a negation -group. +Since Ivy treats minibuffer input as a regexp, the standard regexp +identifiers work: @code{"^"}, @code{"$"}, @code{"\b"} or @code{"[a-z]"}. The exceptions +are spaces, which translate to @code{".*"}, and @code{"!"} that signal the +beginning of a negation group. @node ivy--regex-ignore-order @section ivy--regex-ignore-order @code{ivy--regex-ignore-order} ignores the order of regexp tokens when -searching for matching candidates. For instance, the input "for -example" will match "example test for". Otherwise @code{ivy--regex-plus} -normal behavior is to honor the order of regexp tokens. +searching for matching candidates. For instance, the input +@code{"for example"} will match @code{"example test for"}. @node ivy--regex-fuzzy @section ivy--regex-fuzzy @code{ivy--regex-fuzzy} splits each character with a wild card. Searching -for "for" returns all "f.*o.*r" matches, resulting in a large number -of hits. Yet some searches need these extra hits. Ivy sorts such -large lists using @code{flx} package's scoring mechanism, if it's +for @code{"for"} returns all @code{"f.*o.*r"} matches, resulting in a large +number of hits. Yet some searches need these extra hits. Ivy sorts +such large lists using @code{flx} package's scoring mechanism, if it's installed. @node Variable Index -@chapter Variable Index +@unnumbered Variable Index @printindex vr -@bye +@bye \ No newline at end of file diff --git a/doc/style.css b/doc/style.css deleted file mode 100644 index 547b4f0..0000000 --- a/doc/style.css +++ /dev/null @@ -1,107 +0,0 @@ -body { - color: #333; - background-color: #ffffff; - margin-left: 1em; - margin-right: auto; - font-family: 'Ubuntu Mono', sans-serif; - max-width: 50em; -} - -body a { - color: blue; -} - -h2 { - font-weight: normal; - text-indent: 0; - border-radius: 15px; - background-color: #d6d8ec; - text-align: left; - padding: 3px 3px 3px 3px; -} - -h2 a[id^="unnumbered"] { - background-color: #d6d8ec; -} - -h2 a { - color: white; - background-color:#777777; - font-size:18px; - border-radius:3px; - padding: 0px 5px 0px 5px; -} - -kbd { - padding:0.1em 0.6em; - border:1px solid #ccc; - font-size:13px; - font-weight:bold; - font-family:monospace; - background-color:#d6d8ec; - color:#333; - -moz-box-shadow:0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; - -webkit-box-shadow:0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; - box-shadow:0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; - -moz-border-radius:3px; - -webkit-border-radius:3px; - border-radius:3px; - display:inline-block; - margin:0 0.1em; - text-shadow:0 1px 0 #fff; - line-height:1.4; - white-space:nowrap; -} - -body a code { - color: black; - border: 1px solid Blue; - border-radius:3px; -} - -code { - font-size:13px; - border: 1px solid Silver; - background-color: #e3e4ec; -} - -pre { - border: 1px solid Silver; - background-color: #eeeeee; - padding: 3px; - margin-left: 1em; -} - -cursor { - color: #fff; - background-color: #000; - overflow: hidden; -} - -h3 { - counter-reset: chapter; -} - -h4 { - margin-left: auto; -} - -table, td, th { - border: 0px; -} - -th { - background-color:#d6d8ec; -} - -tr:nth-child(odd) { - background-color:#fff; -} -tr:nth-child(even) { - background-color:#d6d8ec; -} - -.region { - color: #ffffff; - background-color: #f9b593; -}