2020-11-29 Oleh Krehel Rename swiper -> ivy 2015-12-07 Oleh Krehel doc/ivy.org: Add "Variable Index" node 2015-12-07 Oleh Krehel doc/ivy.texi: Re-export using adjusted texinfo exporter * doc/ivy.org: Add defopt/endopt macros. Change `ivy-wrap' and `ivy-height' to defopt. 2015-12-07 Oleh Krehel swiper.el: Bump version to 0.7.0 2015-12-07 Oleh Krehel doc/Changelog.org: Update up to 706349f 2015-12-07 Oleh Krehel ivy.el (ivy-completing-read): Use completing-read-default for tmm Fixes #316 2015-12-07 Oleh Krehel counsel.el (counsel-tmm): New command * counsel.el (counsel-tmm-prompt): New defun. (tmm-km-list): Define this variable here, since `tmm-get-keymap' modifies a global variable (yuck!). Re #316 2015-12-07 Oleh Krehel swiper.el (swiper-font-lock-ensure): Add vc-dir-mode Re #19 2015-12-04 Oleh Krehel Use :caller for ivy-re-builders-alist * counsel.el (counsel-M-x): Add :caller. * ivy.el (ivy--reset-state): Use :caller. 2015-12-04 Oleh Krehel swiper.el (swiper--update-input-ivy): Add a work-around for "M-j" When `ivy-yank-word' is called, don't move to the line of the current candidate. We're already there anyway. And not moving helps when there are multiple occurrences of the current input on the current line. Fixes #314 2015-12-02 Oleh Krehel ivy.el: Structure all faces into ivy-faces custom group 2015-11-29 Oleh Krehel Fix due to visual-line-mode weirdness * swiper.el (swiper--candidates): Under a specific random condition, (line-move 1) from the beginning of line doesn't move to the beginning of the next visual line. This change fixes it, but will result in an even slower startup when `visual-line-mode' is active. Fixes #313 2015-11-29 Oleh Krehel swiper.el: Use show-all if outline-show-all isn't there Fixes #312 2015-11-29 Oleh Krehel Fix ivy-resume issue caused by the recursive calls change * ivy.el (ivy-read): recursive-ivy-last is only set if there's an active minibuffer window. If this check isn't made, it causes the previous `ivy-last' to be reset after the current one, so `ivy-resume' would resume not the last command. 2015-11-29 Oleh Krehel Fix the preselect for (swiper "one") again * ivy.el (ivy--reset-state): Take into account :preselect being integer. This means that it's void once the candidates are filtered over :initial-input. Fixes #292 2015-11-27 Oleh Krehel Fix the issue caused by recursive swiper calls * swiper.el (swiper--ivy): Look at the return result of `ivy-read'; looking at `ivy-exit' no longer works. Fixes #311 2015-11-27 Oleh Krehel Remove 'field text property for twittering-mode * swiper.el (swiper--candidates): Update. (swiper-font-lock-ensure): Add `twittering-mode'. Fixes #310 2015-11-27 Oleh Krehel Enable recursive swiper calls * ivy.el (ivy-read): Don't need to be in the minibuffer to do a recursive store/restore. (ivy--reset-state): Avoid nil string while testing. Fixes #309 2015-11-27 Oleh Krehel doc/Changelog.org: Update up to 2bec99d 2015-11-27 Oleh Krehel Fixes on the previous docstring edits 2015-11-27 sjLambda Edit documentation strings in ivy.el Fixes #308 2015-11-26 Oleh Krehel Ease production of functions like ivy-format-function-default * ivy.el (ivy--format-function-generic): New defun. (ivy-format-function-default): (ivy-format-function-arrow): (ivy-format-function-line): Use `ivy--format-function-generic'. * counsel.el (counsel--M-x-transformer): Add an extra space to simplify the logic. Re #307 2015-11-26 Stephen Whipple Convert ivy formatting functions to dotted pairs. `ivy-format-function' now expects to operate on dotted pairs representing (stub . extra), where `stub' is the original candidate and `extra' is any extra information that has been added by counsel or other libraries. The format function can differentiate between the original stub and extra information and choose how to display the result to the user. 2015-11-25 Stephen Whipple Update ivy format functions. `ivy-format-function' now accessible via Customize system. `ivy-format-function-default' and `ivy-format-function-arrow' simplified. New format `ivy-format-function-line' added. `counsel-M-x' restores `ivy-format-function' before executing command. Fixes #306 2015-11-25 Oleh Krehel Add counsel-grep * ivy.el (ivy--reset-state): Don't push preselect onto collection for :dynamic-collection. (ivy-recompute-index-swiper-async): New defun. It's useful for re-anchoring on collections produced async processes. The major difference from `ivy-recompute-index-swiper' is using `equal' instead of `eq'. * counsel.el (counsel--async-sentinel): Add index recomputing logic. When `ivy--old-cands' are null, recompute the index according to :preselect, otherwise try `ivy--recompute-index'. (counsel-grep): New command. Very similar to `swiper', except calls an external process for each key update. Should be much faster for very large files, both for startup and for matching. For smaller files, it's less convenient. (counsel-grep-function): New defun. (counsel-grep-action): New defun. Fixes #299 2015-11-24 Oleh Krehel Ivy-resume should restore the buffer for swiper * ivy.el (ivy-resume): Update. Fixes #302 2015-11-24 Oleh Krehel Fix broken candidate index in ivy-resume * ivy.el (ivy--reset-state): When given initial-input, call `ivy--preselect-index' on candidates filtered by initial-input. This is important for `ivy-resume'. 2015-11-24 Samuel Loury Warn the user about the behavior of ivy--regex-ignore-order Fixes #296 Fixes #305 2015-11-24 Oleh Krehel Minor fixes to ivy.org and export to ivy.texi Fixes #304 2015-11-24 sjLambda ivy.org manual edits 2015-11-24 kovrik Fix `counsel-ag` on Windows 2015-11-22 Oleh Krehel swiper.el (swiper--action): push-mark only if exited the minibuffer "C-M-n" and "C-M-p" will no longer push mark and annoy with messages. 2015-11-22 Oleh Krehel Perform string-match in the original buffer * ivy.el (ivy--exhibit): Wrap in `with-current-buffer' `ivy-state-buffer'. (ivy-recompute-index-swiper): Reset to the candidate at the current line number, in case the previous regex resulted in 0 candidates. Fixes #298 2015-11-21 Oleh Krehel swiper.el (swiper--candidates): Require outline Fixes #297 2015-11-20 Oleh Krehel Fix the preselect for (swiper "one") * ivy.el (ivy--reset-state): Ignore INITIAL-INPUT on the first step. Then all `ivy--filter' on the second step. (ivy--preselect-index): Change arglist. No longer takes INITIAL-INPUT. (ivy--recompute-index): Update the call to `ivy--preselect-index'. Fixes #292 2015-11-19 Oleh Krehel ivy.el (ivy-alt-done): Split into smaller defuns * ivy.el (ivy--directory-done): New defun. (ivy-alt-done): Forward to `ivy--directory-done'. 2015-11-19 Oleh Krehel ivy.el (ivy-alt-done): Refactor Collect all `ivy--directory' branches into a single `cond'. 2015-11-19 Oleh Krehel Allow access to TRAMP from "// C-j" * ivy.el (ivy-alt-done): Match not only `ivy-text' but also `ivy--current' for TRAMP regex. Re #285 2015-11-18 Stephen Whipple Improve ivy TRAMP support 2015-11-18 Oleh Krehel ivy.el (ivy-completing-read): Fix off by one Re #295 2015-11-18 Oleh Krehel Switch to using ivy-exit-with-action * ivy.el (ivy-exit-with-action): Add a missing quote. (ivy--cd-maybe): Use `ivy-exit-with-action'. * counsel.el (counsel-find-symbol): (counsel--info-lookup-symbol): (counsel-git-grep-query-replace): Use `ivy-exit-with-action'. * swiper.el (swiper-query-replace): (swiper-mc): Use `ivy-exit-with-action'. The previous approach was overwriting the action list, so when `ivy-resume' was called, only a single action was present. The new approach doesn't have this bug. So now it's possible to e.g. `counsel-describe-function' -> "M-o d" -> `ivy-resume' -> "M-o o" -> `ivy-resume' -> "M-o i". 2015-11-18 Samuel Loury Make ivy-completing-read handle history as cons The ivy-read function assumes that history is a symbol, hence ivy-completing-read now makes sure that a symbol is given to ivy-read. Moreover, it makes sure that the value of initial-input is coherent with the value of the HISTPOS part of the history variable if it exists. Fixes #295 2015-11-17 Oleh Krehel swiper.el: Modify the behavior with org-mode and visual-line-mode * swiper.el (swiper--candidates): Set `swiper-use-visual-line' even for `org-mode'. In that case, reveal all text to prevent `line-move' weirdness. (swiper--ivy): Use `swiper-use-visual-line'. Re #291 Re #227 2015-11-16 Oleh Krehel README.md: Add more bindings 2015-11-16 Oleh Krehel Add precise preselect for swiper with visual-line-mode * swiper.el (swiper--ivy): Use `count-screen-lines' to calculate the visual line number. Fixes #291 2015-11-16 Oleh Krehel Intermediate fix for :preselect with visual-line-mode * swiper.el (swiper--ivy): Use `beginning-of-visual-line' and `end-of-visual-line'. This should fix the preselect problem for non-duplicate buffer lines. For duplicate buffer lines, a `visual-line-number-at-pos' function is necessary. I don't currently know how to implement such a function in an efficient way. The naive implementation could be pretty inefficient, comparable to doubling `swiper' startup time with `visual-line-mode'. Re #291 2015-11-15 Oleh Krehel Fix swiper preselect issue with similar or identical lines * ivy.el (ivy--preselect-index): Allow PRESELECT to be an integer. * swiper.el (swiper--anchor): (swiper--len): Remove unused defvar. (swiper--init): Update. (swiper--ivy): Set PRESELECT to `line-number-at-pos'. Fixes #290 2015-11-14 Oleh Krehel swiper.el (swiper-all): New command to swiper all file buffers * swiper.el (swiper--candidates): Add NUMBERS-WIDTH arg. It could be done better by calculating the line count of each buffer and then getting the max of that, but this way is faster, since the collections are traversed only once. (swiper-multi): Update. (swiper-all): New command. This is like `swiper-multi' where the buffer list is pre-selected to be all file visiting buffers. (swiper--multi-candidates): New defun. (swiper-multi-action-1): Use `swiper--multi-candidates'. (swiper-multi-action-2): Update - the line number is in the 'display property of the first char. Re #234 2015-11-14 Oleh Krehel swiper.el (swiper--candidates): Replace "\t" with " " This will allow the minibuffer strings to align nicer for `swiper-multi'. 2015-11-14 Oleh Krehel ivy.el (ivy--truncate-string): New defun * ivy.el (ivy-format-function-default): Use `ivy--truncate-string'. 2015-11-14 Oleh Krehel counsel.el (counsel-locate): Add INTIAL-INPUT arg Fixes #289 2015-11-13 Oleh Krehel ivy.el (ivy--sort-files-by-date): Fix due to destructive cl-sort 2015-11-13 Oleh Krehel Allow to sort files by last modification time. * ivy.el (ivy--sort-files-by-date): New defun. Example of use: (add-to-list 'ivy-sort-matches-functions-alist '(read-file-name-internal . ivy--sort-files-by-date)) This will result in e.g. `find-file' or `counsel-find-file' sorting files by last modification time. Fixes #213 2015-11-13 Oleh Krehel Allow user-specified matched candidate sorting * ivy.el (ivy-prefix-sort): Remove defcustom. (ivy--filter): Forward sorting of matched candidates to `ivy--sort'. (ivy-sort-matches-functions-alist): New defcustom. (ivy--sort): New defun. Fixes #269 Fixes #265 2015-11-13 Oleh Krehel ivy.el (ivy-prefix-sort): New defcustom, off by default for now * ivy.el (ivy--filter): When `ivy-prefix-sort' is non-nil, additionally sort the matching candidates with `ivy--prefix-sort'. (ivy--prefix-sort): New defun. Fixes #265 2015-11-13 Oleh Krehel ivy.el (ivy-sort-functions-alist): Update doc Mention `ivy-sort-max-size'. 2015-11-13 Oleh Krehel swiper.el: Add support for evil-jumper/backward * swiper.el (evil-jumper--set-jump): Declare. (swiper--init): When `evil-jumper-mode' is on, call `evil-jumper--set-jump'. * ivy.el (counsel-git-grep-cmd): Declare to silence the byte compiler. Fixes #268 2015-11-13 Oleh Krehel swiper.el (swiper-font-lock-ensure): Add eww-mode 2015-11-12 Oleh Krehel swiper.el (swiper-font-lock-ensure): Add occur-mode 2015-11-11 Oleh Krehel ivy.el (ivy-occur): Give full counsel-git-grep cands This means that the " | head -n 200" speed-up isn't used and full candidates are returned. 2015-11-11 Oleh Krehel ivy.el (ivy-occur-mode-map): Bind "q" to quit-window 2015-11-11 Oleh Krehel Allow counsel-git-grep -> ivy-occur -> wgrep * ivy.el (ivy-exit-with-action): New defun. (ivy-occur-action): Remove defvar. It's part of `ivy-occur-last' now. (ivy-occur-last): Update doc. (ivy-occur-map): Rename to `ivy-occur-mode-map'. (ivy-occur-mode): New major mode. (ivy-occur): When the caller is `counsel-git-grep', enter `grep-mode'; otherwise enter the new `ivy-occur-mode'. For `wgrep' to work, two things are changed: candidates need to start on the 5th line, and candidates need to be prefixed with "./". (ivy-occur-read-action): New command, bound to "a". (ivy-occur-dispatch): New command, bound to "o". (ivy-occur-press): Update to work with `grep-mode'. (ivy-occur-grep-mode-map): New defvar. (ivy-occur-grep-mode): New major mode. Basically, it's grep-mode with "C-x C-q" bound to `wgrep-change-to-wgrep-mode'. 2015-11-11 Oleh Krehel ivy.el (ivy-dispatching-done): Don't set action permanently 2015-11-11 Oleh Krehel counsel.el (counsel--find-symbol): Silence byte compiler 2015-11-11 Oleh Krehel swiper.el (swiper-toggle-face-matching): Add and bind to "C-c C-f" * swiper.el (swiper-map): Bind `swiper-toggle-face-matching' to "C-c C-f". (swiper-invocation-face): New defvar. (swiper--ivy): Set `swiper-invocation-face'. (swiper-toggle-face-matching): Toggle `ivy-state-matcher' between nil (the initial value) and 'swiper--face-matcher. (swiper--face-matcher): New defun. In addition to filtering CANDIDATES by having them match REGEXP, also ensure that every match has `swiper-invocation-face'. Example of usage: 1. Move point to a variable with e.g. `font-lock-keyword-face' and "C-s" . 2. Use "C-c C-f" to filter the candidates further by selecting only the ones that have `font-lock-keyword-face'. Note that "M-q" (`swiper-query-replace') is also affected by the filtering. 3. Use "C-c C-f" to toggle the filtering off. Fixes #288 2015-11-10 Oleh Krehel ivy.el (ivy-alt-done): Ensure the trailing slash for directories * ivy.el (ivy-alt-done): Update. 2015-11-06 Oleh Krehel counsel.el (counsel-M-x): Show current-prefix-arg in the prompt * counsel.el (counsel--M-x-prompt): New defun. (counsel-M-x): Update. Fixes #287 2015-11-06 Oleh Krehel doc/ivy.org: Start writing a manual 2015-11-05 Stephen Whipple Fix directory validity check Directory validity check should be based on `ivy-text` and `ivy--directory` rather than only `ivy-text`. Fixes #283 Fixes #284 2015-11-05 Oleh Krehel Add a better ivy-occur pulse to swiper and counsel-git-grep * ivy.el (ivy-occur-press): Bind `ivy-exit' to 'done, so that `swiper--add-overlays' called by ACTION don't do anything. Call another `swiper--add-overlays' for swiper and counsel-git-grep, limited to the current line. Call `swiper--cleanup' with a delay of 1 second. 2015-11-05 Oleh Krehel swiper.el (swiper--add-overlays): Take extra WND arg 2015-11-05 Oleh Krehel counsel.el (counsel-git-grep-query-replace): Should exit minibuffer 2015-11-05 Oleh Krehel Input "/sudo::" goes to current directory instead of root's home * ivy.el (ivy-alt-done): Update. Re #283 2015-11-05 Oleh Krehel Fix /ssh: and /sudo:: broken in 71695df * ivy.el (ivy-alt-done): `file-directory-p' errors when given "/ssh:" or "/sudo::". Re #283 2015-11-05 Oleh Krehel Rebind ivy-occur to "C-c C-o" and "C-o u" * ivy.el (ivy-minibuffer-map): Update. * ivy-hydra.el (hydra-ivy): Update. Wouldn't want to violate the "C-c LETTER" convention. 2015-11-04 Oleh Krehel counsel.el (counsel-M-x): Add "definition" action 2015-11-04 Oleh Krehel ivy.el (ivy-occur-press): Extend with-ivy-window ivy-occur-action should be called in (ivy--get-window ivy-last). This means, for purposes of e.g. `counsel-find-symbol' or `lispy--action-jump` that if *ivy-occur* is the only window, it will be re-used. But if the user wants *ivy-occur* not to get buried, then having at least 2 windows solves that problem. 2015-11-04 Oleh Krehel ivy.el (ivy-minibuffer-map): Bind "C-M-a" to ivy-read-action 2015-11-04 Oleh Krehel counsel.el (counsel-rhythmbox): Add :caller This results in more descriptive *ivy-occur* buffers. 2015-11-04 Oleh Krehel ivy.el (ivy-occur-press): Work with counsel-rhythmbox > (cdr (assoc str coll)) Special behavior for `counsel-rhythmbox'. Maybe not taking `cdr' is the right thing, but that's how Helm and `helm-rhythmbox-play-song' works. 2015-11-04 mike fix 1-too-far scrolling issue Functions `ivy-scroll-up-command' and `ivy-scroll-down-command' would scroll 1 unit too far. So one item in the list would be skipped and never seen for each scroll. 2015-11-04 Oleh Krehel Pulse after ivy-occur-press * ivy.el (ivy-state): New field TEXT. (ivy-occur): Add `ivy-text' to the name of the buffer. Also store `ivy-text' in `ivy-occur-last'. Might be needed in the future for a more specific pulse. (ivy-occur-press): Pulse the selected line. 2015-11-03 Oleh Krehel Make ivy work with enable-recursive-minibuffers * ivy.el (ivy-read): Fix the doc of DYNAMIC-COLLECTION. Store the old `ivy-last' in case `ivy-read' is called while inside the minibuffer. Restore it after `ivy-call'. 2015-11-03 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude debbugs-gnu-mode 2015-11-03 Oleh Krehel ivy.el (ivy-occur): Add and bind to "C-c o" * ivy.el (ivy-minibuffer-map): Update. (ivy-occur-action): (ivy-occur-last): (ivy-occur-map): New defvar. (ivy-occur): New command. (ivy-occur-click): New command bound to mouse click. (ivy-occur-press): New command bound to "RET" press. `ivy-occur' allows to store the current completion session for further use. An unlimited amount of these sessions can be used, each in its own buffer. 2015-11-03 Oleh Krehel ivy.el (with-ivy-window): Ensure window is live * ivy.el (ivy--get-window): New defun. 2015-11-03 Oleh Krehel ivy.el (ivy-state): Add a new field BUFFER * ivy.el (ivy-resume): Update. (ivy-read): Update. * swiper.el (swiper--action): Use `ivy-state-buffer'. 2015-11-03 Oleh Krehel swiper.el (swiper-mc): Update 2015-11-02 Oleh Krehel Highlight modified file buffers with 'ivy-modified-buffer face * ivy.el (ivy-modified-buffer): New face, blank by default. (ivy--format): When the collection is 'internal-complete-buffer, highlight unsaved file visiting buffers with 'ivy-modified-buffer. Fixes #280 Example custom setting for 'ivy-modified-buffer: (custom-set-faces '(ivy-modified-buffer ((t (:background "#ff7777"))))) 2015-11-01 Oleh Krehel ivy.el (ffap): Move require 2015-10-31 Oleh Krehel counsel.el (counsel-git-grep-query-replace): Add and bind to "M-q" * counsel.el (counsel-git-grep-map): Bind "M-q" to `counsel-git-grep-query-replace'. (counsel-git-grep-query-replace): New command. Perform `query-replace' on all matches of git-grep in all buffers. 2015-10-31 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude eems-stream-mode Re #19 2015-10-30 Oleh Krehel "C-x C-f M-n" can call ffap-url-fetcher when at URL * ivy.el (ivy--cd-maybe): Check if the input is a valid URL. If so, exit immediately by calling (funcall ffap-url-fetcher url). Otherwise, do the usual `ivy--cd' thing. 2015-10-30 Oleh Krehel ivy.el: "M-n" should prefer url at point to symbol at point * ivy.el (ivy--reset-state): Update. 2015-10-30 Oleh Krehel counsel.el (counsel--find-symbol): Resolve name clash better * counsel.el (counsel--find-symbol): When the symbol is both bound and fbound, prefer the fbound one, unless the :caller is `counsel-describe-variable'. (counsel-describe-variable): Declare :caller. (counsel-describe-function): Declare :caller. One example is going to the definition of `isearch-forward' (also with `counsel-M-x'). 2015-10-30 Oleh Krehel Improve the preselect index in ivy-resume * ivy.el (ivy--recompute-index): Don't change the ivy--index that was set in `ivy--reset-state' by `ivy-resume'. With this, it's possible to e.g. " f", enter "for", navigate to "format" and press "C-g". Calling `ivy-resume' will point to "format" still. 2015-10-30 Oleh Krehel Use a specific blending method for dark themes * colir.el (colir-blend): Use 'colir-compose-soft-light for dark themes. Fixes #278 2015-10-28 Oleh Krehel Rename and move the minibuffer faces * swiper.el (swiper-minibuffer-match-face-1): (swiper-minibuffer-match-face-2): (swiper-minibuffer-match-face-3): (swiper-minibuffer-match-face-4): Transform into obsolete aliases. * ivy.el (ivy-minibuffer-match-face-1): (ivy-minibuffer-match-face-2): (ivy-minibuffer-match-face-3): (ivy-minibuffer-match-face-4): New renamed faces. (ivy-minibuffer-faces): Rename from `swiper-minibuffer-faces'. Fixes #276 2015-10-24 Oleh Krehel counsel.el (counsel-git): Update default-directory 2015-10-23 Oleh Krehel ivy-immediate-done should use ivy--directory * ivy.el (ivy-immediate-done): When completing file names, expand the file name properly. Fixes #275 2015-10-23 Oleh Krehel swiper.el (swiper-font-lock-ensure): Amend exception list Re #19 2015-10-22 Oleh Krehel ivy.el (ivy-alt-done): Fix up last commit 2015-10-22 Oleh Krehel "C-j" should not stop completion for a pasted file path * ivy.el (ivy-alt-done): If you paste a file path, it won't match anything in the current directory. Previously, "C-j" would open dired for that path. Now, "C-j" will switch to the pasted directory and continue completion. This behavior conforms to `ido-find-file'. 2015-10-22 Oleh Krehel Fix pasting file paths on Windows * ivy.el (ivy--exhibit): Update. Fixes #272 2015-10-22 Stephen Whipple Fix Custom menus Custom menus for `ivy-virtual-abbreviate' and `ivy-sort-functions-alist' now display a better user interface. Fixes #274 2015-10-20 Oleh Krehel Add a test for the perfect match logic Re #270 2015-10-20 Oleh Krehel Bring back the lost perfect match logic * ivy.el (ivy--recompute-index): Don't defer the perfect match logic to `ivy-index-functions-alist'. (ivy-recompute-index-swiper): Simplify. Once again, if the minibuffer text becomes `equal' to one of the candidates, that candidate will be selected. Fixes #270 2015-10-20 Oleh Krehel ivy.el (ivy-resume): Pass caller Fixes #245 2015-10-19 Oleh Krehel ivy.el (ivy-partial): Fix for fuzzy completion Postfix doesn't always work if the completion is fuzzy, so check if `string-match' succeeds. Fixes #266 2015-10-19 Oleh Krehel Fix the count in user-specified counsel-git-grep * counsel.el (counsel--gg-count): Generate the count command from `counsel-git-grep-cmd' by replacing "--full-name" with "-c". Re #244 2015-10-18 Oleh Krehel ivy.el (ivy-sort-functions-alist): Upgrade to defcustom Add the proper :type. 2015-10-17 Oleh Krehel ivy.el (ivy-extra-directories): Improve :type 2015-10-16 Jon Miller counsel.el (counsel-ag): Add initial-directory Support alternative initial directory which helps other packages call this function with their unique starting directory. 2015-10-16 Oleh Krehel Don't re-anchor to matching old candidate if flx is on * ivy.el (ivy--recompute-index): If `flx' is in position to select the "best" candidate, don't re-anchor to the still-matching previous candidate. Fixes #263 2015-10-15 Oleh Krehel Add feedback for long-running async processes * counsel.el (counsel--async-time): New defvar. (counsel--async-filter): New defun. (counsel--async-command): Use `counsel--async-filter'. Each time 0.5s pass after the last input, if the external process hasn't finished yet, update minibuffer with the amount of candidates collected so far. This is useful to see that long running commands like `counsel-locate' or `counsel-ag' (when in a very large directory) aren't stuck. 2015-10-14 Oleh Krehel ivy-test.el (swiper--re-builder): Update Due to last commit 2015-10-14 Oleh Krehel swiper.el (swiper--re-builder): Fix "^a" -> "^" case Fixes #262 2015-10-14 Oleh Krehel Adjust the swiper regexp builder for the display change * swiper.el (swiper--re-builder): Update. The old re-builder was for when the line numbers were part of the candidates. Now the line numbers are the text properties of the candidates. Fixes #262 2015-10-14 Oleh Krehel Try to fix the previous commit * ivy.el (ivy--exhibit): Update. Sometimes the cursor randomly moves to the start of the read-only prompt and it's impossible to move it. 2015-10-14 Oleh Krehel Fix "C-x h" selection and "C-b" bug * ivy.el (ivy--exhibit): Add another `constrain-to-field'. This ensures that the point doesn't cross into the prompt text. Previously, there was a bug that pressing "C-b" once more when already at the start of the input set `ivy-text' to "", i.e. ignoring the minibuffer input. 2015-10-14 Oleh Krehel Fix window selection in counsel-locate * counsel.el (counsel-locate): Use `with-ivy-window'. 2015-10-14 Oleh Krehel swiper.el (swiper-mc): Add and bind to "C-7" * swiper.el (swiper-map): Update. (swiper-mc): New command. (swiper--ivy): Use :action. (swiper--action): Update arglist. 2015-10-10 Oleh Krehel ivy.el (ivy-case-fold-search): New defvar * ivy.el (ivy--reset-state): Set `ivy-case-fold-search' to 'auto. (ivy-toggle-case-fold): New command. (ivy--filter): Use `ivy-case-fold-search' to determine `case-fold-search'. * ivy-hydra.el (hydra-ivy): Bind "C" to `ivy-toggle-case-fold'. Fixes #259 2015-10-10 Oleh Krehel ivy-count-format must be an empty string instead of nil Using an empty string is easier. No longer needed to check for nil when using `string-match', `concat' etc. * doc/Changelog.org: Update. * ivy.el (ivy-count-format): Update doc and customize type. (ivy--reset-state): Error if `ivy-count-format' nil is encountered. Fixes #257 Re #188 2015-10-09 Oleh Krehel Fix the count when git-grep for "->foo" * counsel.el: For some reason, "-" gets interpreted in a bad way. Escaping it as "\-" makes it work fine. 2015-10-09 Oleh Krehel ivy.el (ivy--recompute-index): Fixup Fixes #258 2015-10-09 Oleh Krehel Don't reset the match to first if the current one still works * ivy.el (ivy--recompute-index): If the old match is still located in the current matches after the change in input, keep it selected. * ivy-test.el (ivy-read): Add test. Fixes #258 2015-10-09 Oleh Krehel ivy.el (ivy-virtual-abbreviate): New defcustom * ivy.el (ivy--virtual-buffers): Update. Fixes #255 2015-10-08 Oleh Krehel ivy-hydra.el (hydra-ivy): Make the docstring a rectangle 2015-10-08 Oleh Krehel Move setq ivy--index to ivy--recompute-index * ivy.el (ivy--recompute-index): Move the setq statement here, so that the customization functions have less internal variables to deal with. (ivy-recompute-index-swiper): Update. (ivy-recompute-index-zero): Update. Re #253 2015-10-08 Oleh Krehel ivy.el (ivy-index-functions-alist): New variable * ivy.el (ivy-state): Add `caller' field. (ivy-read): Add `caller' keyword arg; update docstring. Use `ivy--recompute-index'. (ivy--recompute-index): New defun, dispatch according to `caller' and `ivy-index-functions-alist'. (ivy-recompute-index-swiper): New defun. (ivy-recompute-index-zero): New defun. Fixes #253 2015-10-08 Oleh Krehel swiper.el: Add a lot of avy declares 2015-10-08 Oleh Krehel ivy.el (ivy-dispatching-call): Add and bind to "C-M-o" * ivy.el (ivy-minibuffer-map): Update. (ivy-read-action): New command. (ivy-dispatching-done): Update. * ivy-hydra.el (hydra-ivy): Bind `ivy-read-action' to "a". Re #254 2015-10-07 Oleh Krehel Fix preselect for input "^" * ivy.el (ivy--filter): Update. Notably, e.g. `counsel-describe-variable' should properly preselect variable at point. 2015-10-07 Oleh Krehel ivy.el (ivy-last): Update docstring 2015-10-07 Oleh Krehel ivy.el (ivy-use-virtual-buffers): Update docstring 2015-10-07 Oleh Krehel Default ivy-display-style to 'fancy for Emacs>=24.5 * ivy.el (ivy-display-style): Update. 2015-10-07 Oleh Krehel ivy.el (ivy-count-format): Extend customize choices 2015-10-07 Oleh Krehel Fix ivy-state-preselect for file name completion * ivy.el (ivy--preselect-index): Add a check for null preselect. (ivy--filter): Use `ivy--preselect-index' instead of `cl-position'. The reason is that the collection contains e.g "foo/" while the preselect is "foo". 2015-10-07 Oleh Krehel Fix "M-o k" when switching buffers * ivy.el (ivy-call): Check if (active-minibuffer-window) is non-nil before switching. 2015-10-07 Oleh Krehel Adjust ivy-state-preselect for file name completion * ivy.el (ivy--reset-state): Since `ivy--index' is now recomputed more, `ivy-state-preselect' needs to be in the collection properly, so that `ivy--index' is set to preselect whenever the input is empty. 2015-10-07 Oleh Krehel ivy.el (ivy--filter): Fix typo Re #253 2015-10-06 Oleh Krehel ivy.el (ivy--filter): Anchor only for swiper * ivy-test.el (ivy-read): Add tests. Except for `swiper', when the input changes `ivy-index' should usually be 0. Fixes #231 2015-10-06 Oleh Krehel ivy.el (ivy--insert-prompt): Use newlines instead of truncation When the prompt string is longer than window-width, insert newlines appropriately so that the whole prompt fits in the window without scrolling. Finally, when prompt+entered text would be larger than window-width, reformat the prompt so that entered text starts on a newline. When completing file names, move the whole path to a new line in that case. Fixes #252 2015-10-06 Oleh Krehel Support hash tables in ivy-read * ivy.el (ivy--reset-state): `all-completions' also works fine for hash tables, so start using it. Hash tables as collections are rare. One example is "C-c C-w" in *rcirc* (`rcirc-cmd-whois'). 2015-10-06 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude help-mode Fixes #248 2015-10-05 Oleh Krehel Fix up visual-line-mode limitation logic * swiper.el (swiper-use-visual-line): New defvar. (swiper--candidates): (swiper--update-input-ivy): (swiper--action): Update. Re #227 2015-10-04 Oleh Krehel swiper.el (swiper--candidates): Avoid line-move for large buffers Re #227 2015-10-04 PythonNut swiper-avy: show avy hints in minibuffer as well 2015-10-03 Oleh Krehel Fix "End of buffer" for swiper and visual-line-mode Fixes #247 2015-10-03 Oleh Krehel Customize ivy-avy and fix compile warnings * ivy.el (ivy-avy): Require avy. Allow the user to customize `avy-keys', `avy-background' and `avy-style' (but prefer 'pre to 'at-full, since it doesn't obscure any letters). Don't issue an extra `ivy-call'. Fixes #246 2015-10-03 PythonNut Implement ivy-avy 2015-10-02 Oleh Krehel counsel.el (counsel--gg-count): Fix for "'" in query Since "'" is used for quoting in bash, it needs to be replaced with "''" . 2015-10-02 Oleh Krehel Use forward-line instead of line-move if possible * swiper.el (swiper--candidates): (swiper--update-input-ivy): (swiper--action): `line-move' is much slower than `forward-line'. Use it only if `visual-line-mode' is on. 2015-10-02 Oleh Krehel counsel.el (counsel--gg-candidates): Use counsel-git-grep-cmd 2015-10-02 Oleh Krehel Fix counsel-git-grep not updating to 0 candidates * counsel.el (counsel--gg-candidates): `ivy--all-candidates' should not be nil in order for `ivy--exhibit' to update the minibuffer. 2015-10-02 Oleh Krehel Make swiper compatible with visual-line-mode * swiper.el (swiper--candidates): Use `end-of-visual-line' and `line-move' appropriately. (swiper--update-input-ivy): (swiper--action): Use `line-move' instead of `forward-line'. (swiper--add-overlays): Update. Fixes #227 2015-10-02 Oleh Krehel ivy.el (ivy-resume): Don't regexp-quote preselect `ivy--preselect-index' uses `cl-position' before trying to match regex, so the string needs to be as is. Fixes #245 2015-10-02 Oleh Krehel ivy-hydra.el: Bind "t" to toggle-truncate-lines * ivy.el (ivy-format-function-default): When `truncate-lines' is non-nil don't truncate with "...". Use "C-o t" when you complete very long lines and want to see them whole. Fixes #214 2015-10-02 Oleh Krehel ivy.el (ivy--reset-state): Less strict on :preselect 2015-10-02 Oleh Krehel Specify shell command for counsel-git-grep with prefix arg * counsel.el (counsel-git-grep-cmd): New defvar. (counsel-git-grep-function): Use `counsel-git-grep-cmd'. (counsel-git-grep-cmd-history): New defvar. (counsel-git-grep): Update signature. When called with a prefix arg, prompt for a command reading from and recording to `counsel-git-grep-cmd-history'. Remember to use "M-i" to insert the current candidate into the minibuffer. Fixes #244 2015-09-30 Oleh Krehel ivy.el (ivy-yank-word): Add only one space each time The previous behavior got in trouble with consecutive spaces. 2015-09-30 Oleh Krehel ivy.el (ivy--regex-fuzzy): Add minibuffer highlighting * ivy-test.el (ivy--regex-fuzzy): Update test. Re #207 2015-09-30 Oleh Krehel Add flx sorting * ivy.el (ivy--flx-cache): New defvar. (ivy--filter): Since flx is costly, move the caching to an earlier point. This means immediate return for when the input hasn't changed, i.e. for "C-n" or "C-p". When flx is installed, and (eq ivy--regex-function 'ivy--regex-fuzzy) for current function (through `ivy-re-builders-alist'), then sort the final candidates with `ivy--flx-sort'. (ivy--flx-sort): New defun. In the worst case when some error pops up return the same list. In the best case sort the `cands' that all match `name' by closeness to `name'. How to use: 1. Have flx installed - (require 'flx) should succeed. 2. Configure `ivy-re-builders-alist' appropriately to use `ivy--regex-fuzzy', for example: (setq ivy-re-builders-alist '((t . ivy--regex-fuzzy))) Fixes #207 2015-09-30 Oleh Krehel ivy.el (ivy-call): "C-M-n" should not leave the minibuffer Make sure that the minibuffer window remains selected as long as the completion hasn't finished. For example, " f" to call `counsel-describe-function' input "forward" and spam "C-M-n" to read the doc for each function that starts with "forward". The *Help* window popup would move the window focus, but this change moves it back to the minibuffer. 2015-09-30 Oleh Krehel Improve "C-g" out of a long-running async process * counsel.el (counsel-delete-process): New defun. (counsel-locate): (counsel-ag): Use `counsel-delete-process' as :unwind. 2015-09-30 Oleh Krehel ivy.el (ivy--insert-prompt): Improve truncation Re #240 2015-09-29 Oleh Krehel counsel.el (counsel-M-x): Don't rely on package-installed-p * counsel.el (counsel-M-x): Use `require' instead. `package-installed-p' may fail if package wasn't initialized. 2015-09-29 Oleh Krehel counsel.el (counsel-ag-function): Improve for fancy faces Set `ivy--old-re' in order for fancy `ivy-display-style' to work. 2015-09-29 Oleh Krehel counsel.el (counsel--find-symbol): Allow to jump back with pop-tag-mark Using "C-." in: - counsel-describe-function - counsel-describe-variable - counsel-load-library will change the current buffer. The buffer and point can be restored with "M-*" (`pop-tag-mark'). I also recommend this binding: (global-set-key (kbd "M-,") 'pop-tag-mark) 2015-09-29 Oleh Krehel swiper.el (swiper-font-lock-ensure): Add mu4e Re #19 2015-09-26 Oleh Krehel ivy.el (ivy--insert-prompt): Avoid negative length error 2015-09-26 Oleh Krehel Truncate minibuffer prompts longer than window-width * ivy.el (ivy--insert-prompt): When the prompt string is longer than the window width, truncate it to window width minus 26 chars. Fixes #240 2015-09-26 Oleh Krehel Make ivy-display-style more compatible with 24.3 * ivy.el (ivy--format-minibuffer-line): Use `font-lock-append-text-property' instead of `add-face-text-property'. It's not optimal, since the new face needs to be put in front, but at least it doesn't error out. 2015-09-26 Oleh Krehel ivy.el (ivy--resize-minibuffer-to-fit): Make compatible with 24.3 Fixes #220 2015-09-25 Oleh Krehel swiper.el (swiper--ivy): Remove obsolete version check 2015-09-22 Julien Wietrich Fix minibuffer collapse in text mode emacs In graphic mode : resize-mini-windows is temporarily set to nil, the only value which does not collapse the minibuffer. In text mode : if resize-mini-windows is nil, it is temporarily set to 'grow-only (default emacs value). This prevent the minibuffer collapse in both graphic and text mode. In text mode it respects the user settings if it is already set to 'grow-only or t. Fix #237 in text mode emacs too. 2015-09-22 Oleh Krehel swiper.el (swiper--ivy): Use minibuffer-allow-text-properties Using `minibuffer-allow-text-properties' makes Emacs not strip the text properties from the result of `read-from-minibuffer'. This is better because a function call result is used instead of a global var to pass this info. 2015-09-19 Julien Wietrich Revert multiple frames workaround Since SHA:d8d7ed45f07b52ab63eca444f0e6fa03747fab9e workaround SHA:435f2b6edfe3ab517c9eda56c6351f0bcfdf3845 is no longer required. 2015-09-19 Julien Wietrich Fix minibuffer collapses to one line It happens since commit SHA:d374afea36df19b5d6b654adc6018b25d6c1d8f2 when resize-mini-windows is set to true. It also happens when resize-mini-windows is set to 'grow-only (default) and multiple frames are open. (Although SHA:435f2b6edfe3ab517c9eda56c6351f0bcfdf3845 work around it) Temporarily bind `resize-mini-windows' to nil before calling `read-from-minibuffer'. Fix #237 and #229 It might fix #77 although this need to be checked as I cannot reproduce it. 2015-09-18 PythonNut Add autoloads to some important functions 2015-09-18 Oleh Krehel ivy.el (ivy-switch-buffer): Make "M-o r" rename buffer * ivy.el (ivy--rename-buffer-action): New defun. Fixes #233 2015-09-18 Oleh Krehel Make "" and "" behave as in fundamental-mode Fixes #232 2015-09-15 Oleh Krehel Add work-around for minibuffer not re-sizing for many frames * ivy.el (ivy--minibuffer-setup): When `truncate-lines' is set, it works fine for one graphic frame, but not for two (unknown why); add a work-around. Fixes #229 2015-09-13 Oleh Krehel counsel.el (counsel-yank-pop): Add autoload 2015-09-12 Oleh Krehel ivy.el (ivy-format-function-default): Fix boundp bug Fixes #225 2015-09-12 Oleh Krehel counsel.el (counsel-yank-pop-truncate): Add group 2015-09-12 Oleh Krehel swiper.el (swiper--ivy): Fix compiler warning 2015-09-11 Oleh Krehel counsel.el (counsel-yank-pop): New command * counsel.el (counsel-yank-pop-truncate): New defcustom. Choose whether to truncate strings over 4 lines. (counsel-yank-pop-action): New defun. Fixes #218 2015-09-11 Oleh Krehel Make line numbers in swiper into display properties * swiper.el (swiper--candidates): Each candidate is now a single space plus the original string. The display property of the single space holds the line number. This means that it's no longer possible to match line numbers in queries. Also, the preselect of the current line is slightly worse (in case there are two identical lines in a buffer). (swiper--ivy): Update the preselect to not include the line number. Also, call `ivy--action' on `ivy-current' instead of `res', because `res' doesn't have the string property that points to the line number. (swiper--update-input-ivy): Update. (swiper--action): Update. Fixes #224 2015-09-11 Oleh Krehel Set truncate-lines in the minibuffer * ivy.el (ivy--minibuffer-setup): Update. (ivy-format-function-default): Check `truncate-lines'. Check if `fringe-mode' is bound. Fixes #223 2015-09-10 Oleh Krehel ivy.el (ivy--resize-minibuffer-to-fit): Make compatible with 24.3 Re #220 2015-09-10 Oleh Krehel ivy.el (ivy-format-function-default): Handle fringe-mode 0 Fixes #219 2015-09-09 Oleh Krehel counsel.el (counsel-unicode-char): Add own history Also make "C-M-n", "C-M-p", and `ivy-resume' work properly. 2015-09-08 Oleh Krehel Fix up the "foo ! bar" matching and highlighting * ivy.el (ivy--filter): When regex returned is a list, use only the first string part. * swiper.el (swiper--update-input-ivy): When regex returned is a list, use only the first string part. 2015-09-08 Oleh Krehel Move swiper-minibuffer-faces to ivy.el Fixes #217 2015-09-07 Oleh Krehel Declare some SLIME functions * counsel.el (slime-symbol-start-pos): (slime-symbol-end-pos): (slime-contextual-completions): Declare. 2015-09-07 Oleh Krehel counsel.el (counsel-git-grep-function): Fix up Set `ivy--old-re' for the benefit of fancy minibuffer faces. 2015-09-07 Oleh Krehel Make the minibuffer faces look nicer * ivy.el (ivy-current-match): Update background and add white foreground for light themes. Update background and add black foreground for dark themes. (ivy--add-face): If a face has an explicit foreground, add it ahead, with no blending. Blend the background as usual. * swiper.el (swiper-minibuffer-match-face-1): (swiper-minibuffer-match-face-2): Update the background for light themes. (swiper-minibuffer-match-face-4): Update the background for dark themes. 2015-09-06 Oleh Krehel Add default values for minibuffer faces * swiper.el (swiper-minibuffer-match-face-1): (swiper-minibuffer-match-face-2): (swiper-minibuffer-match-face-3): (swiper-minibuffer-match-face-4): Update. Re #215 2015-09-04 Oleh Krehel ivy.el (ivy--format-minibuffer-line): Fix nil regexp 2015-09-04 Oleh Krehel Make ivy-current blend correctly for fancy minibuffer * ivy.el (ivy--format-minibuffer-line): Stop setting :height - it messes with blending. Also, the minibuffer height issue was fixed in an earlier pull request. (ivy--format): Call `ivy--add-face' on modified string, not on the original one. 2015-09-04 Oleh Krehel ivy.el (ivy--format-minibuffer-line): Use add-face-text-property 2015-09-04 Oleh Krehel Add extra faces for minibuffer highlighting * swiper.el (swiper-minibuffer-match-face-1): (swiper-minibuffer-match-face-2): (swiper-minibuffer-match-face-3): (swiper-minibuffer-match-face-4): New defface. (swiper-minibuffer-faces): New defvar. * ivy.el (ivy--format-minibuffer-line): New defun. (ivy--format): Use `ivy--format-minibuffer-line'. 2015-09-03 Oleh Krehel ivy.el (ivy-display-style): New defcustom * ivy.el (ivy--format): Add additional highlighting for the minibuffer, similar to `swiper', when `ivy-display-style' is set to 'fancy. Fixes #212 2015-08-31 Oleh Krehel counsel.el (counsel-cl): New command * counsel.el (counsel--el-action): Add `with-ivy-window' wrapper. 2015-08-25 Oleh Krehel counsel.el (counsel--py-action): Work with "C-M-n" * counsel.el (counsel--py-action): Include the inserted parens in to bounds, so that "C-M-n", "C-M-p" and `ivy-resume' work. 2015-08-25 Oleh Krehel counsel.el (counsel-jedi): New command * counsel.el (counsel--py-action): New defun. Add a few declares as well. 2015-08-21 Oleh Krehel Add swiper-multi command * swiper.el (swiper-multi-buffers): New defvar. (swiper-multi-candidates): New defvar. (swiper-multi-prompt): New defun. (swiper-multi-action-1): New defun. (swiper-multi-action-2): New defun. Fixes #182. Basic usage tips for selecting multiple buffers: - Use "C-M-m" (`ivy-call') to add or remove one more buffer without exiting. - Use "C-m" (`ivy-done') to add one last buffer. - Or use "C-M-j" (`ivy-immediate-done') to finish without adding more buffers. - Hold "C-M-n" (`ivy-next-line-and-call') to add a lot of buffers at once. 2015-08-20 Oleh Krehel counsel.el (counsel-org-tag): Now works in agenda * counsel.el (counsel-org--set-tags): New defun. (counsel-org-tag-action): Update. When on an agenda item, add/remove tags for that item. When any agenda items are marked with "m", add selected tags to all items, with no duplicates. Fixed the bug of setting tags to "::" sometimes. Fixed "C-M-j" not exiting. Fixes #200 2015-08-18 Felix Lange ivy: enlarge the minibuffer window if the candiate list doesn't fit Fixes #161 Fixes #198 2015-08-18 Oleh Krehel Set line-spacing to 0 in the minibuffer * ivy.el (ivy--minibuffer-setup): Update. Fixes #198 2015-08-14 Oleh Krehel ivy.el (ivy-kill-ring-save): Add and bind to "M-w" Fixes #197 2015-08-12 Oleh Krehel ivy.el (ivy-completing-read): Fix up last commit Check if string before using `string-match'. 2015-08-12 Oleh Krehel When initial input contains a plus, escape it * ivy.el (ivy-completing-read): Escape the plus in the initial input, for it to not be interpreted like a regex. Fixes #195 2015-08-12 Tassilo Horn Fix #126 again. After #126 has been solved, the regexp has been changed to "\\`[`']?\\(.*\\)'?\\'" where the trailing ' is optional ("'?"). However, the preceeding "\\(.*\\)" group will already capture the trailing ' because .* is greedy. Now I've replaced it with the non-greedy .*? which makes it work again. 2015-08-07 Oleh Krehel Fix :dynamic-collection not being sorted * ivy.el (ivy--sort-maybe): New defun. If the current completion has sorting enabled, try to find the sorting function either in :sort or `ivy-sort-functions-alist'. (ivy--exhibit): Use `ivy--sort-maybe'. * counsel.el (counsel--async-sentinel): Use `ivy--sort-maybe'. 2015-08-07 Oleh Krehel counsel-locate should use '' for the regex * counsel.el (counsel-unquote-regex-parens): New defun. (counsel-locate-function): Update. (counsel-ag-function): Update. Fixes #194 2015-08-07 Chunyang Xu (counsel-locate): Support OS X - OS X "open" is the equivalent to "xdg-open" - OS X "locate" doesn't support "--regex" 2015-08-06 Tassilo Horn (counsel-locate): Allow customizing locate options 2015-08-05 Oleh Krehel Fix up ivy-recentf and ivy-switch-buffer window-wise * ivy.el (ivy--switch-buffer-action): (ivy-recentf): Use `with-ivy-window'. 2015-08-05 Oleh Krehel doc/Changelog.org: Add 2015-08-05 Oleh Krehel counsel.el (counsel-find-file): Fix window focus issue "C-M-n" should work fine now. 2015-08-03 Oleh Krehel Preselect perfect matches with a leading ^ * ivy.el (ivy--filter): When e.g. "filter" is in the collection, "^filter" input should always select it, even if other candidates match. 2015-08-01 Chunyang Xu Allow ivy-count-format to be set as nil 2015-07-30 Oleh Krehel Add with-ivy-window macro * ivy.el (with-ivy-window): New macro. (ivy-yank-word): Update. * swiper.el (swiper--window): Remove defvar. (swiper-query-replace): (swiper-avy): (swiper-recenter-top-bottom): (swiper--init): (swiper--update-input-ivy): (swiper--add-overlays): Update. * counsel.el (counsel-git-grep-recenter): (counsel-git-grep-action): (counsel-M-x): Update. (org-agenda-set-tags): Add a declare. 2015-07-30 Oleh Krehel Bind "C-M-j" to ivy-immediate-done * ivy.el (ivy-minibuffer-map): Update. `ivy-immediate-done' will return with the current minibuffer input, even if the input matches a candidate. It was possible so far to call it with "C-u C-j". Fixes #183 2015-07-28 Oleh Krehel counsel.el (counsel-org-tag-agenda): New command * counsel.el (counsel-org-tag-agenda): It's just a flet wrapper around `org-agenda-set-tags', changing `org-set-tags' to `counsel-org-tag'. (counsel-org-tag-action): Don't use `with-selected-window', since `org-agenda-set-tags' will change the buffer for us. Re #177 2015-07-28 Oleh Krehel counsel.el (org-bound-and-true-p): Use bound-and-true-p 2015-07-28 Oleh Krehel Add a few more Org declarations Re #179 2015-07-28 Oleh Krehel counsel.el (org-last-tags-completion-table): Declare Re #179 2015-07-28 Oleh Krehel counsel.el (org-setting-tags): Declare dynamic var Re #179 2015-07-28 Oleh Krehel swiper.el (swiper-from-isearch): New command Fixes #180 2015-07-28 Oleh Krehel counsel.el (org-bound-and-true-p): Update declare 2015-07-27 Erik Hetzner Use recoll -t instead of recollq 2015-07-27 Oleh Krehel counsel.el (counsel-org-tag): Delete dups The issue of duplicates arises from this setting (off by default): (setq org-complete-tags-always-offer-all-agenda-tags t) Re #177 2015-07-27 Oleh Krehel counsel.el (counsel-recoll): Simplify 2015-07-27 Oleh Krehel counsel.el (counsel-org-tag): No need to be at heading * counsel.el (counsel-org-tag): When not at heading, move there. Save excursion. 2015-07-27 Oleh Krehel counsel.el (counsel-recoll): New command * counsel.el (counsel-recoll-function): New function. 2015-07-27 Oleh Krehel counsel.el (counsel-ag): New command * counsel.el (counsel-ag-function): New defun. (counsel-git-grep): Update prompt. Going from sync to async now is as simple as: - add :dynamic-collection t - replace `shell-command-to-string' with `counsel--async-command' 2015-07-27 Oleh Krehel Update :dynamic-collection to be a boolean * ivy.el (ivy--exhibit): Always use `ivy-state-collection', instead of possibly `ivy-state-dynamic-collection'. The collection function may return nil if it's async and doesn't want to update the minibuffer on exit (to update it later in the sentinel). * counsel.el (counsel-more-chars): New defun. (counsel-git-grep-function): Use `counsel-more-chars'; in the async case, return nil. (counsel-git-grep): Update :dynamic-collection to a boolean. (counsel--gg-sentinel): (counsel--async-sentinel): Update to set the candidates to "Error" instead of message "Error" - a lot less distracting this way. (counsel-locate-function): Use `counsel-more-chars'; return "Working", since it takes a few seconds to complete a single locate query. (counsel-locate): Update. 2015-07-27 Oleh Krehel ivy.el (ivy--exhibit): Check if in post-command-hook * ivy.el (ivy--exhibit): A situation can occur when an async command calls `ivy--exhibit' in the sentinel. It causes problems when the minibuffer has already exited with "C-g". 2015-07-27 Oleh Krehel Simplify counsel-git-grep logic * ivy.el (ivy--exhibit): Remove the condition on (eq ivy--full-length -1). * counsel.el (counsel-git-grep-function): Simplify. (counsel-gg-state): New defvar. Use this instead of (setq ivy--full-length -1). (counsel--gg-candidates): Set `counsel-gg-state' to -2. There are two async processes to wait for until `ivy--exhibit' can be called: - get the candidate count - get the candidates Each of the async processes will increase the number, and call `ivy--exhibit' if the number reaches 0. (counsel--gg-sentinel): Update. (counsel--gg-count): Update. 2015-07-27 Oleh Krehel Fix "DEL" generating a "Quit" sometimes for counsel-git-grep * ivy.el (ivy-backward-kill-word): It seems that `backward-kill-word' is too elaborate; falling back to something simpler fixed the problem. 2015-07-26 Oleh Krehel Allow "M-o j" to switch to virtual buffers in other window * ivy.el (ivy--switch-buffer-other-window-action): New defun. (ivy-set-actions): Use `ivy--switch-buffer-other-window-action' instead of `switch-to-buffer-other-window'. 2015-07-24 Oleh Krehel counsel.el (counsel-org-change-tags): Improve removing tags 2015-07-24 Oleh Krehel Fixup counsel-org-tag * counsel.el (counsel-org-tag-action): Add :: (counsel-org-tag): Set `org-last-tags-completion-table', otherwise `org-tags-completion-function' doesn't work. 2015-07-24 Oleh Krehel counsel.el (counsel-org-tag): Replace org-set-tags * counsel.el (counsel-org-tags): New defvar. (counsel-org-change-tags): New defun, adapted from part of `org-set-tags'. (counsel-org-tag-action): New defun. (counsel-org-tag-prompt): New defun. (counsel-org-tag): New command. **Using counsel-org-tag** - The prompt is auto-updated to the currently selected tags. - Selecting one of the already selected tags removes it from selection. The best shortcut for selecting/removing multiple tags is "C-M-m" (or "g" when the "C-o" hydra is active). Re #177 Re #91 2015-07-24 Oleh Krehel ivy.el (ivy-call): Remove with-selected-window * counsel.el (counsel-git-grep-action): Add with-selected-window. * ivy.el (ivy-dispatching-done): Remove trailing ": ". (ivy-switch-buffer): Add extra action "j" calls `switch-to-buffer-other-window'. The change `ivy-dispatching-done' had to be done because of this. 2015-07-24 Oleh Krehel Add actions for counsel-describe-function 2015-07-24 Oleh Krehel Add actions for counsel-describe-variable 2015-07-23 Oleh Krehel ivy.el (ivy-dispatching-done): Add a trailing newline 2015-07-23 Oleh Krehel ivy.el (ivy-dispatching-done): Display the candidate 2015-07-23 Oleh Krehel Allow "C-g" to interrupt ivy-dispatching-done * ivy.el (ivy-dispatching-done): Update. 2015-07-23 Oleh Krehel ivy.el (ivy--preselect-index): Add matcher to arglist * ivy.el (ivy--reset-state): Call `ivy--preselect-index' with matcher. (ivy--preselect-index): In case there's a special matcher set, it affects the candidate list, therefore it affects the preselect index. Fixes #165 2015-07-23 Oleh Krehel ivy.el (ivy-dispatching-done): New command on "M-o" * ivy.el (ivy-minibuffer-map): Bind "M-o" to `ivy-dispatching-done'. (ivy-action-name): Update, all actions are now in hydra's format - key binding, command, hint. (ivy-read): The default action is bound to "o" in the dispatch. (ivy-switch-buffer): Update to new action format. * counsel.el (counsel-locate): (counsel-rhythmbox): Update to new action format. The new interface allows to do whatever you want with the selected candidate with a very short key binding. The old interface with "C-o w/s" still works, but: - it gives a lot more info than necessary for only selecting action - doesn't scale well with the number of actions: for 10 actions you would cycle "w/s" a lot. Example with `ivy-switch-buffer': - switch to selected buffer: "C-m" - kill selected buffer: "M-o k"; you get a hint right after "M-o". When there is only one action, "M-o" will forward to "C-m". 2015-07-22 Oleh Krehel ivy.el (ivy-call): Add selected-window work-around for M-x * ivy.el (ivy-call): For some commands that depend on the buffer, like `counsel-git-grep' the action needs to be performed in `ivy-state-window'. However, this results in wrong window for M-x calc. Add a workaround until I figure out why this happens. Fixes #176 2015-07-21 Oleh Krehel ivy-hydra.el: Add featurep for hydra Fixes #174 2015-07-21 Oleh Krehel counsel.el (counsel-variable-list): Add * counsel.el (counsel-describe-variable): Use `counsel-variable-list'. 2015-07-21 Oleh Krehel swiper.el: Update avy--goto -> avy-action-goto 2015-07-14 Oleh Krehel swiper.el (swiper-font-lock-ensure): Ignore Man-mode 2015-07-13 Oleh Krehel ivy.el (ivy-call): Bind to "C-M-m" or "M-RET" "C-M-m" is close to "C-M-n" and "C-M-p", just as "M-RET" is close to "RET". Previously, the only binding was "C-o g". 2015-07-13 Oleh Krehel ivy.el (ivy-count-format): Improve docstring * ivy.el (ivy-minibuffer-grow): (ivy-toggle-calling): (ivy-sort-functions-alist): Checkdoc. 2015-07-11 Erik Hetzner Allow % in prompt string - quote % when passing prompt from ivy-completing-read to ivy-read - add documentation in ivy-read that all % should be quoted 2015-07-10 Oleh Krehel counsel.el (counsel-rhythmbox-history): Add * counsel.el (counsel-rhythmbox): Update. 2015-07-09 Oleh Krehel ivy.el (ivy-read): Improve ivy-set-actions interaction * ivy.el (ivy-read): When the base action is already a list, merge it with the one obtained from `ivy-set-actions'. 2015-07-09 Oleh Krehel Add counsel-rhythmbox * counsel.el (counsel-completion-beg): (counsel-completion-end): Move declarations before first use. (dired-jump): Declare. (counsel-rhythmbox-enqueue-song): New defun. (counsel-rhythmbox): New command. Requires `helm-rhythmbox' package, and Rhythmbox, obviously. * ivy.el (ivy-call): Make interactive. Add special handling for the case when the collection is an alist. In that case, call the action not with the collection item, but with the cdr of said item. A bit weird, but that's the way Helm does it, and doing it in the same way means the action functions are cross-compatible. * ivy-hydra.el (hydra-ivy): Bind "g" to call the current action on current candidate without exiting. Now it's possible to make a query to Rhythmbox, "C-o" and navigate to a song with "j" and "k". Try the song with "g". Or use "s" once and then enqueue different songs with e.g. "jjgjjjgjgkkg". 2015-07-07 Oleh Krehel ivy.el (ivy--regex): Improve for trailing backslash When there's a single trailing backslash, which would result in a bad regex, ignore it. 2015-07-06 Oleh Krehel Add a new interface to customize additional exit points * ivy.el (ivy--actions-list): New defvar. Store the exit points per command. (ivy-set-actions): New defun. Use this to set the extra exit points for each command. (ivy-read): Account for `ivy--actions-list'. (ivy-switch-buffer): Set extra action to kill the buffer. Update the call to `ivy-read'. * counsel.el (counsel-locate): Use the single action in the function and customize the rest via `ivy-set-actions'. Re #164 2015-07-06 Oleh Krehel counsel.el (counsel-locate-history): Add 2015-07-02 Oleh Krehel Update index formatting logic * ivy.el (ivy--reset-state): Update. (ivy--insert-prompt): Simplify. If you want to see both the index and the length of the candidates, instead of just the length, it can be done like this: (setq ivy-count-format "%d/%d ") Each "%d" is replaced appropriately due to the total length of the candidates. For instance, this one can result in "%4d/%-4d M-x ". Re #167 2015-07-01 Oleh Krehel Allow to see the candidate index via ivy-count-format * ivy.el (ivy--insert-prompt): Update. To use this feature, use something like this: (setq ivy-count-format "(%d/%d)") Basically two number specifiers instead of the usual one. The problem with this approach is that the prompt length will change as you scroll e.g. from 9 to 10, which is uncomfortable. Fixes #167 2015-07-01 Oleh Krehel ivy.el (ivy--reset-state): Fixup Re #165 2015-07-01 Oleh Krehel ivy.el (ivy-read): Don't put empty string on history 2015-07-01 Oleh Krehel Bind case-fold-search to t when the input is all lower-case * ivy.el (ivy--filter): Update. * ivy-test.el (ivy--filter): Add test. - input "the" matches both "the" and "The". - input "The" matches only "The". Fixes #166 2015-07-01 Oleh Krehel ivy.el (ivy--reset-state): Fixup 2015-07-01 Oleh Krehel Make ffap work again * ivy.el (ivy--reset-state): When completing files, consider the case when the directory of PRESELECT isn't `default-directory'. Fixes #165 2015-06-30 Oleh Krehel ivy.el (ivy-switch-buffer): Add a multi-action interface While in "C-o": - Use "s" to make "C-m", "C-j", "C-M-n" and "C-M-p" kill - Use "w" to switch back to normal. Re #164 2015-06-30 Oleh Krehel Add a multi-action interface for counsel-locate * ivy-hydra.el (hydra-ivy): Display the current action and allow to scroll the action list with "w" and "s". * ivy.el (ivy--get-action): New defun, a getter for the action function, since it can also be a list now. (ivy--actionp): New defun, checks for the action list. (ivy-next-action): New command, scrolls to the next action in the list. (ivy-prev-action): New command, scrolls to the previous action in the list. (ivy-action-name): New defun. (ivy-call): Use `ivy--get-action'. (ivy-read): Use `ivy--get-action'. 2015-06-30 Oleh Krehel Fixup the last two commits * counsel.el (counsel-find-file): Update. * ivy.el (ivy--buffer-list): Update. Re #164 2015-06-30 Oleh Krehel Add a custom keymap for counsel-find-file * counsel.el (counsel-find-file-map): New defvar. Re #164 2015-06-30 Oleh Krehel Add a custom keymap for ivy-switch-buffer * ivy.el (ivy-switch-buffer-map): New defvar. Re #164 2015-06-30 Oleh Krehel ivy.el (ivy-restrict-to-matches): Add and bind to "S-SPC" 2015-06-30 Oleh Krehel Make counsel-locate use a process * counsel.el (counsel-locate-function): Update. (counsel--async-command): New defun. (counsel--async-sentinel): New defun. (counsel-locate): Switch to :action, thus allowing "C-M-n" and `ivy-resume'. * swiper.el: Bump version. 2015-06-29 Oleh Krehel ivy-hydra.el (hydra-ivy): Bind "C-o" to be a toggle It makes sense for "C-o" to be a toggle, instead of just going one way. 2015-06-29 Oleh Krehel Make counsel-el work with "C-M-n" and "C-M-p" * counsel.el (counsel-el): Use the whole obarray if no initial input is given. Filter out only function when appropriate. (counsel-completion-beg): New defvar. (counsel-completion-end): New defvar. (counsel--el-action): New defun. * ivy.el (ivy--reset-state): Set `ivy--full-length' to nil. 2015-06-26 Oleh Krehel Fix the initial input bug introduced with "C-r" * ivy.el (ivy-read): Use (ivy-state-initial-input ivy-last). (ivy--reset-state): Set (ivy-state-initial-input ivy-last). Fixes #162 2015-06-25 Oleh Krehel counsel.el (counsel-find-file): Use `file-name-history' * counsel.el (package-installed-p): Declare. 2015-06-25 Oleh Krehel counsel.el (counsel-git-grep-history): New defvar * counsel.el (counsel-git-grep): Use `counsel-git-grep-history'. 2015-06-25 Oleh Krehel swiper.el (swiper-history): New defvar * swiper.el (swiper--ivy): Use `swiper-history'. Allows to get more use of "M-p", "M-n" and "C-r". 2015-06-25 Oleh Krehel Allow to recursively match history with "C-r" * ivy.el (ivy-minibuffer-map): Rebind "C-r" from `ivy-previous-line-or-history' to `ivy-reverse-i-search'. "C-r" binding was redundant, since "C-p" does almost the same. (ivy-read): Separate the functionality that sets the global state based on `ivy-last'. (ivy--reset-state): New defun. Move all the global state setup here. (ivy-reverse-i-search): New command. This is very similar to "C-r" in bash - allows to match for history elements, instead of just scrolling through them with "M-p" and "M-n". 2015-06-25 Oleh Krehel Fixup compilation warnings related to smex 2015-06-23 Oleh Krehel counsel.el (counsel-unicode-char): Use action-style call Fixes #160 2015-06-23 Oleh Krehel counsel.el (counsel-load-theme): New command 2015-06-23 Oleh Krehel counsel.el (counsel-M-x): Avoid compilation warning * counsel.el (counsel-M-x): Use `command-execute' instead of `execute-extended-command'. 2015-06-23 Oleh Krehel Fix last commit being incompatible with older Emacs * ivy.el (ivy--format): Use `add-face-text-property' only when it's bound. 2015-06-23 Oleh Krehel Fix color blending for composite faces colir.el (colir-blend-face-background): Try to find the face among the properties. Re #151 2015-06-23 Oleh Krehel Re-scale the text height to default in the minibuffer * ivy.el (ivy--format): Set the string height to default and turn off overline, so that exactly `ivy-height' lines are visible, not less. Fixes #151 2015-06-22 Oleh Krehel ivy-hydra.el (hydra-ivy): Bind "C-g" To make sure that "C-g" really exits the hydra. 2015-06-22 Oleh Krehel ivy.el (ivy-initial-inputs-alist): Add some Org commands * ivy.el (ivy-initial-inputs-alist): Add `org-agenda-refile' and `org-capture-refile'. Fixes #156 2015-06-19 Kaushal Modi Fix the case where file name can contain ~ - The fix make opening files like init.el~ now possible. Earlier, hitting that last ~ char switch the dir to ~/ - This commit will now make that cd to ~/ only if ~ is the first char in the search term 2015-06-19 Greg Lucas Match drive letter at start of current directory When looking for the root of the current drive, make sure we only match a drive letter at the beginning of the path. 2015-06-19 Greg Lucas Add support for Windows drive letters 2015-06-19 Oleh Krehel Improve performance for "^" initial input ivy.el (ivy--filter): There's no need to anchor when the previous regex is "^" (matches everything). The result will be index 0 anyway, but without this optimization it can be slow for ~30k candidates. 2015-06-19 Oleh Krehel ivy.el (ivy-alt-done): Enable recursive minibuffers Re #145 2015-06-19 Oleh Krehel ivy.el (ivy-alt-done): Find file if given a full tramp path * ivy.el (ivy-alt-done): Add another cond branch for `ivy-text' matching a full remote file path. Re #145 2015-06-19 Oleh Krehel Don't cut off "/ssh:foo" input * ivy.el (ivy-alt-done): With the example input, offer a completion for known remotes with the initial input "foo". Re #145 2015-06-19 Oleh Krehel Add better positioning to counsel-git-grep finalizer counsel.el (counsel-git-grep-action): Use a regex instead of just splitting the string on ":". Additionally, goto match, not just the line of the match. Fixes #153 2015-06-19 Oleh Krehel Make counsel-M-x respect ivy-format-function * counsel.el (counsel--format-function-M-x): Remove defun. (counsel--M-x-transformer): New defun. (counsel-M-x): Temporarily bind `ivy-format-function' to apply `counsel--M-x-transformer' beforehand. * ivy.el (ivy-format-function-arrow): Update style. Fixes #150 2015-06-19 Oleh Krehel Fix non-file completions ability to enter tramp completion * ivy.el (ivy-alt-done): Update. Re #145 2015-06-19 Oleh Krehel "M-i" should not switch directories ivy.el (ivy-insert-current): When the current candidate is a directory, just insert its name without the last "/". The user can insert "/" to switch to that directory if necessary. Re #141 2015-06-19 Oleh Krehel Add "^" as initial input to "C-h f" and "C-h v" * ivy.el (ivy-initial-inputs-alist): Add entries for `counsel-describe-function' and `counsel-describe-variable'. 2015-06-19 Oleh Krehel ivy.el (ivy-kill-line): Add and bind to "C-k" The only difference to `kill-line' is that it will kill the whole input when at the end of the minibuffer. In that case, the regular `kill-line' was extending into the second line of the minibuffer, which is unacceptable. 2015-06-19 Oleh Krehel Add a set of commands for resizing minibuffer height * ivy.el (ivy-minibuffer-grow): New command. (ivy-minibuffer-shrink): New command. * ivy-hydra.el (hydra-ivy): Bind "<" and ">". Use "C-o >>>>>" to grow the minibuffer, and "C-o <<<<<" to shrink it. Re #151 2015-06-18 Oleh Krehel Put the file instead of partial input on history * ivy.el (ivy-read): When completing file names, put the whole file name on history, not just the partial input that lead to that name. This is important in order for `ivy--cd-maybe' to work. Re #152 2015-06-18 Oleh Krehel "M-n", "M-p", "M-i" should switch directories when needed * ivy.el (ivy-previous-history-element): (ivy-next-history-element): (ivy-switch-buffer): Call `ivy--cd-maybe'. (ivy--cd-maybe): New defun. Check if the current input points to a different directory than `ivy--directory'. If so, `ivy--cd' there. Fixes #152 2015-06-17 Oleh Krehel counsel.el (counsel-M-x): Fixup smex interaction * counsel.el (counsel-M-x): Use `smex-rank' only if smex is installed. Fixes #147 2015-06-16 Oleh Krehel counsel.el (counsel-M-x): Fixup Re #136 2015-06-16 Oleh Krehel ivy-hydra.el (defhydra): Wrap in eval-when-compile 2015-06-16 Oleh Krehel Swiper should not deactivate-mark * swiper.el (swiper--init): Update to make it the same as `isearch'. "C-SPC" + `swiper' should work to mark a region. 2015-06-16 Oleh Krehel ivy-hydra.el: Improve for hydra not installed * ivy-hydra.el (hydra): No error on require. (package-installed-p): Enable recursive minibuffers. (hydra-ivy): Use ASCII char instead of Unicode, since the char width may cause misalignment. 2015-06-16 Oleh Krehel swiper.el (swiper-query-replace): Don't miss the first * swiper.el (swiper-query-replace): Since the point is always after the matching thing in swiper, it's necessary to move it before it in order for `perform-replace' not to skip it. Fixes #144 2015-06-16 Oleh Krehel Require TRAMP in time * ivy.el (ivy-alt-done): Require tramp before use. Store `ivy-last' before calling `ivy-read', since each `ivy-read' overwrites `ivy-last', and this one overwrites `counsel-find-file' action. Fixes #145 2015-06-16 Oleh Krehel counsel.el (counsel-M-x): Call smex-rank Re #136 2015-06-15 Oleh Krehel ivy-hydra.el (hydra-ivy): Add "C-j" and "C-m" exit points Just to make sure that the hydra exits. 2015-06-15 Oleh Krehel Allow to toggle matching mode with "C-o m" * ivy.el (ivy-toggle-fuzzy): New command. * ivy-hydra.el (hydra-ivy): Bind `ivy-toggle-fuzzy' to "m". Fixes #142. 2015-06-15 Oleh Krehel ivy.el (ivy-sort-functions-alist): Work for commands as well * ivy.el (ivy-sort-functions-alist): Examine `this-command' in addition to the COLLECTION arg of `completing-read'. Add `Man-goto-section' and `org-refile' to the list, since these commands collect the candidates in the order in which they are in the buffer => the candidates must not be sorted. Mention this in the doc. 2015-06-15 Oleh Krehel ivy.el (ivy-initial-inputs-alist): Add man and woman 2015-06-15 Oleh Krehel Fix the minibuffer being too small with enough candidates * ivy.el (ivy--format): Fix the bug of getting the minibuffer height less than `ivy-height' when `ivy--index' was between `ivy--length' and (- ivy--length (/ ivy--height 2)). * ivy-test.el (ivy--format): Add test. 2015-06-15 Oleh Krehel ivy.el (ivy-insert-current): Add and bind to "M-i" Use "M-i" if you want something close to the current candidate. You can follow up with an edit and select. Fixes #141 2015-06-15 Oleh Krehel Fix yank/undo bug * ivy.el (ivy--insert-minibuffer): Bind `buffer-undo-list' later. Previously, "C-y C-u" would result in the first char of yanked text not being undone. 2015-06-15 Oleh Krehel Allow to customize the initial input for all commands * ivy.el (ivy-initial-inputs-alist): New defvar. Customize this to get an initial input in any command. (ivy-read): Unless INTIAL-INPUT is given, look it up in `ivy-initial-inputs-alist' based on `this-command'. * counsel.el (counsel-M-x-initial-input): Remove defcustom. It's superseded by `ivy-initial-inputs-alist'. (counsel-M-x): Update. Fixes #140 2015-06-12 Oleh Krehel ivy.el (ivy--regex-fuzzy): Improve for "^" and "$" * ivy.el (ivy--regex-fuzzy): Don't insert .* after ^ and before $. * ivy-test.el (ivy--regex-fuzzy): Add test. Fixes #139 2015-06-12 Oleh Krehel ivy.el (hydra-ivy/body): Autoload 2015-06-12 Oleh Krehel counsel.el (counsel-M-x): Call smex-initialize Otherwise, smex-cache isn't defined. 2015-06-12 Oleh Krehel Bind "C-o" to hydra-ivy/body * ivy.el (ivy-minibuffer-map): Update. * ivy-hydra.el (hydra-ivy): New defhydra. Add shortcuts: "C-n" -> "j" "C-p" -> "k" "M-<" -> "h" "M->" -> "l" "C-j" -> "f" "C-m" -> "d" "C-g" -> "o" cancel "C-o" -> "i" toggle calling -> "c" The hydra doesn't inhibit other bindings, so "C-v" and "M-v" also work when you toggle calling on with "c". 2015-06-12 Oleh Krehel ivy-toggle-calling: Toggle calling "RET" action for current candidate * ivy.el (ivy-calling): New defvar. (ivy-set-index): New defun - a setter for `ivy--index' that can call the current action when `ivy-calling' isn't nil. (ivy-beginning-of-buffer): (ivy-end-of-buffer): (ivy-scroll-up-command): (ivy-scroll-down-command): (ivy-next-line): (ivy-previous-line): Use `ivy-set-index' instead of a plain `setq'. (ivy-toggle-calling): New defun - toggle `ivy-calling'. (ivy-call): New defun - call the current action. (ivy-next-line-and-call): Use `ivy-call'. (ivy-previous-line-and-call): Use `ivy-call'. (ivy-read): Reset `ivy-calling' to nil. To make use of this functionality, bind `ivy-toggle-calling' in `ivy-minibuffer-map'. After this, "C-n" will behave like "C-M-n" etc. 2015-06-12 Oleh Krehel Replace "C-x 6" with "" in counsel-M-x counsel.el (counsel--format-function-M-x): Update. 2015-06-12 Oleh Krehel counsel.el (counsel-find-file-ignore-regexp): Default to nil * counsel.el (counsel--find-file-matcher): Update. Make the default behavior more similar to `find-file'. Move the previous value to the docstring. 2015-06-12 Oleh Krehel counsel.el: Add a bunch of autoload cookies 2015-06-12 Oleh Krehel counsel.el (counsel-M-x-initial-input): New defcustom * counsel.el (counsel-M-x): Use `counsel-M-x-initial-input'. Re #138 2015-06-12 Oleh Krehel Allow "TAB" to complete when input starts with "^" * ivy.el (ivy-partial): Strip "^" when forwarding to `try-completion'. Afterwards, put it back. Fixes #138 2015-06-10 Oleh Krehel Fixup ivy-resume for file completion * ivy.el (ivy-resume): No longer add the preselect. (ivy-read): Don't add initial-input "". 2015-06-10 Oleh Krehel Add fuzzy matching function ivy.el (ivy--regex-fuzzy): New defun. To enable fuzzy matching, set your `ivy-re-builders-alist' accordingly: (setq ivy-re-builders-alist '((t . ivy--regex-fuzzy))) Re #136 2015-06-10 Oleh Krehel counsel.el (counsel-M-x): Piggyback on smex for sorting * counsel.el (counsel-M-x): When smex is present, use it for sorting the candidates. Also use `counsel-describe-map', so that "C-." and "C-," work for commands. Re #136 2015-06-10 Oleh Krehel counsel.el (counsel-M-x): New command * counsel.el (counsel--format-function-M-x): New defun. Re #136. 2015-06-10 Oleh Krehel counsel.el (counsel-symbol-at-point): Improve Fixes #137 2015-06-09 Oleh Krehel Add a hack for kill-buffer and invisible buffer * ivy.el (ivy-read): When COLLECTION is 'internal-complete-buffer, ignore the fact that REQUIRE-MATCH was set to t. Normally, when REQUIRE-MATCH is t, the COLLECTION should not be extended with PRESELECT. Fixes #135 2015-06-09 Oleh Krehel Account for minibuffer-depth-indication-mode * ivy.el (ivy--insert-prompt): When `minibuffer-depth-indication-mode' is on, and `minibuffer-depth' is more than 1, prepend it to prompt. Fixes #134 2015-06-09 Oleh Krehel ivy.el (ivy--switch-buffer-action): Add work-around If BUFFER is live, and can also be virtual, don't open the virtual one. This work-around should be disabled once uniquify is added to buffer list. 2015-06-09 Oleh Krehel counsel-git-grep should quote strings better * counsel.el (counsel-git-grep-function): (counsel--gg-candidates): Update. Fixes an errror when the input has a " in it. 2015-06-08 Oleh Krehel ivy.el (ivy-minibuffer-map): Bind ivy-yank-word to "M-j" Re #133 2015-06-04 Oleh Krehel Make counsel-git-grep fully async * counsel.el (counsel-git-grep-count): Rename to `counsel--gg-count' and make it async. (counsel-git-grep-function): Set `ivy--full-length' to -1. It means that `ivy--exhibit' should do nothing until the length is re-computed. (counsel-git-grep): Use the sync version of `counsel-git-grep-count' for the initial repo line count. (counsel--gg-candidates): New defun. When called, kill the previous git grep process and start a new one. The sentinel will insert the candidates, bypassing the `ivy--exhibit'. (counsel--gg-sentinel): New defun. (counsel--gg-count): Rename from `counsel-git-grep-count'. When finished computing, redisplay. * ivy.el (ivy--exhibit): Don't expect dynamic collection to return the candidates as before. Just call it and expect it to redisplay the minibuffer. 2015-06-04 Oleh Krehel Fixup compilation warnings 2015-06-04 Tassilo Horn Regexp-quote name of candidate buffer to be preselected Fixes #128 2015-06-04 Oleh Krehel ivy.el (ivy-virtual): New defface * ivy.el (ivy--virtual-buffers): Use `ivy-virtual'. No need for `ido-use-faces' approach, the user can just customize `ivy-virtual' to look like `default' if needed. Fixes #129 2015-06-02 Oleh Krehel ivy.el (ivy--done): Set ivy--current Fixes a bug of using :action for completing file names. 2015-06-02 Oleh Krehel Handle symbol-at-point better in non-Elisp buffers * counsel.el (counsel-symbol-at-point): New defun. (counsel-describe-variable): Update. (counsel-describe-function): Update. Fixes #126 2015-06-01 Oleh Krehel Swiper should preserve column for empty input swiper.el (swiper--update-input-ivy): When there's no input yet, don't move point. Re #125 2015-06-01 Oleh Krehel ivy.el (ivy-yank-word): New command * swiper.el (swiper--update-input-ivy): Move point to current regex, not just current line. Gives a behavior similar to "C-w" of `isearch'. Possible binding: (define-key ivy-minibuffer-map (kbd "C-w") 'ivy-yank-word) Fixes #125 2015-06-01 Oleh Krehel ivy.el (ivy-recentf): New command Fixes #124 2015-05-30 Oleh Krehel counsel.el (counsel-find-file-at-point): New defcustom * counsel.el (counsel-find-file): When `counsel-find-file-at-point' is non-nil, add the file at point to the list of candidates. Fixes #123 2015-05-30 Oleh Krehel counsel.el (counsel-find-file): Extend `find-file' * counsel.el (counsel-find-file): Forward to `find-file', with Ivy completion. `ivy-next-line-and-call' as well as `ivy-resume' should work. (counsel--find-file-matcher): New defun. (counsel-find-file-ignore-regexp): Regexp of files to ignore. Fixes #122 Recommended binding: (global-set-key (kbd "C-x C-f") 'counsel-find-file) Peek at files with "C-M-n" and "C-M-p". Input a leading dot to see all files. 2015-05-28 Oleh Krehel counsel.el (counsel-info-lookup-symbol): Add a require In case it's called non-interactively. 2015-05-28 Tassilo Horn Add info lookup binding to counsel-describe-map * counsel.el (counsel-describe-map): Bind C-, to counsel--info-lookup-symbol. (counsel--info-lookup-symbol): New command. Just sets the ivy action to counsel-info-lookup-symbol. 2015-05-28 Oleh Krehel Change the :matcher interface * ivy.el (ivy--filter): The matcher is now a function that takes a regexp and candidates and returns the filtered candidates. * counsel.el (counsel-git-grep-matcher): Cache matched candidates. This is very important for "C-n" / "C-p", especially near the threshold where a switch to :dynamic-collection is made. 2015-05-28 Oleh Krehel Avoid ensuring font lock when magit-blame-mode is active swiper.el (swiper-font-lock-ensure): Update. 2015-05-26 Oleh Krehel Allow to open an Info file on the file system * ivy.el (ivy-alt-done): Update. When in Info-mode, press "g" and select either "(./)" or "(../)" to switch to file name completion. That file will be opened with Info. 2015-05-25 Oleh Krehel swiper.el (swiper--ivy): Don't double-quote preselect The :preselect is already quoted in `ivy--preselect-index'. 2015-05-25 Oleh Krehel swiper.el (swiper-avy): Don't start on empty input Fixes abo-abo/avy#50 2015-05-24 Ingo Lohmar ivy.el (ivy-next-line): Fix wraparound at end of candidates 2015-05-23 Oleh Krehel swiper.el (swiper-avy): Use only the current window Fixes #117 2015-05-23 Oleh Krehel swiper.el: Bump version 2015-05-23 Oleh Krehel README.md: Add a secion on Ivy 2015-05-23 Oleh Krehel The :action parameter to ivy-read should take one arg * ivy.el (ivy-next-line-and-call): Update. (ivy-previous-line-and-call): Update. (ivy-read): Update. (ivy--switch-buffer-action): Update. * swiper.el (swiper-query-replace): Update. * counsel.el (counsel--find-symbol): Update. (counsel-describe-variable): Update. (counsel-describe-function): Update. (counsel-git): Update. (counsel-git-grep-action): Update. 2015-05-23 Oleh Krehel Fixup "C-u C-j" for `ivy-switch-buffer' ivy.el (ivy-immediate-done): Since action-style call is used now, `ivy--current' must be set to `ivy-test', since it's `ivy--current' that will count as completion result. 2015-05-23 Oleh Krehel counsel.el (counsel-git): Switch to action-style call This allows "C-M-n" and "C-M-p" to be used. Re #114 2015-05-23 Oleh Krehel ivy.el (ivy-completing-read): Check for a cons initial-input 2015-05-23 Stefan Monnier * swiper/ivy.el: Clean up regexps and pseudo-closures Don't require cl-lib twice. (ivy-read, ivy--filter): Use closures instead of `(lambda ...). (ivy--format, ivy--filter, ivy--exhibit, ivy--insert-prompt) (ivy--regex-ignore-order, ivy--regex, ivy--sorted-files) (ivy-partial-or-done, ivy-alt-done): Don't use ^/$ to match string bounds. 2015-05-19 Oleh Krehel Fixup compilation warnings 2015-05-19 Oleh Krehel When building a regex, consider ^ only at start swiper.el (swiper--re-builder): Update. 2015-05-19 Oleh Krehel counsel.el (counsel-info-lookup-symbol): Turn on sorting 2015-05-17 Oleh Krehel Don't try to call permanent action if there's none * ivy.el (ivy-next-line-and-call): Update. (ivy-previous-line-and-call): Update. Fixes #114. 2015-05-17 Oleh Krehel ivy.el (ivy-forward-char): Add and bind to "C-f" This is to avoid problems for the ido-related "C-x C-f C-f" reflex. 2015-05-16 Oleh Krehel Don't error on incomplete bad regexp in counsel-git-grep counsel.el (counsel-git-grep-matcher): Update. 2015-05-16 Oleh Krehel counsel.el (counsel-git-grep): Warn if not in a repository 2015-05-16 Oleh Krehel ivy.el (ivy-kill-word): Add and bind to "M-d" Fixes #94 2015-05-15 Oleh Krehel README.md: Add sample init Fixes #112 2015-05-15 __rompy Fixed ivy--preselect-index on windows where the drives folders ends with a backslash (C:\, D:\) 2015-05-14 Oleh Krehel Update the way spaces are quoted using ivy * ivy.el (ivy--split): Split only on single spaces. From all other space groups, remove one space. * ivy-test.el (ivy--split): Add test. Fixes #109 2015-05-13 Oleh Krehel ivy.el (ivy-partial-or-done): More predictability * ivy.el (ivy-partial-or-done): Forward to `ivy-alt-done' only if `ivy-partial' did nothing new, and either previous command was `ivy-partial-or-done', or there's exactly one matching candidate. Fixes #107 2015-05-13 Oleh Krehel Allow to recenter with "C-l" during counsel-git-grep * counsel.el (counsel-git-grep-map): New defvar. (counsel-git-grep-recenter): New command. (counsel-git-grep-action): New defun. (counsel-git-grep): Update. Fixes #103 2015-05-13 Oleh Krehel ivy.el (ivy-partial-or-done): Update doc Re #105 2015-05-13 Oleh Krehel ivy.el (ivy-partial-or-done): Always forward to `ivy-alt-done' Fixes #105 2015-05-12 Oleh Krehel ivy.el (ivy-delete-char): Add and bind to "C-d" `delete-char' must not be called when at end of line, since that would bring the first candidate into the input. Fixes #94 2015-05-12 Oleh Krehel ivy.el (ivy-switch-buffer): Preselect other-buffer * ivy.el (ivy-switch-buffer): Preselect other buffer, just like `switch-to-buffer' does it. 2015-05-12 Oleh Krehel ivy.el (ivy-read): Keep the last ivy--index for :dynamic-collection 2015-05-12 Oleh Krehel counsel-git-grep now works with ivy-resume * ivy.el (ivy-state): New field DYNAMIC-COLLECTION. (ivy-resume): Update. (ivy-read): New argument DYNAMIC-COLLECTION. When this is non-nil, ignore collection and matchers etc, and just obtain the filtered candidates by calling DYNAMIC-COLLECTION each time the input changes. Fixes #100 2015-05-12 Oleh Krehel Introduce :matcher for counsel-git-grep * ivy.el (ivy-state): Add MATCHER field. (ivy-resume): Update. (ivy-read): Add MATCHER argument. To make things faster, MATCHER can reuse `ivy--old-re', but it's not required. MATCHER is a function that takes a candidate and returns non-nil if it matches. * counsel.el (counsel-git-grep): Use :matcher. (counsel-git-grep-matcher): New defun. Skip the file name and line number, then match as usual. Fixes #99 2015-05-12 Oleh Krehel Forward to minibuffer-complete for filenames only if "^/" * ivy.el (ivy-partial-or-done): Update. Fixes #102 2015-05-12 Oleh Krehel Properly update virtual buffers for "^ " interaction * ivy.el (ivy-read): Use `ivy--buffer-list'. (ivy--exhibit): Use `ivy--buffer-list'. (ivy-add-virtual-buffers): Remove. (ivy--buffer-list): New defun. Re #68 2015-05-12 Oleh Krehel Fix the error switching to non-existent buffers * ivy.el (ivy-read): Use `ivy-add-virtual-buffers'. (ivy-buffer-list): Remove. (ivy-add-virtual-buffers): New defun. (ivy--switch-buffer-action): New defun, consider `ivy--current' being zero length. (ivy-switch-buffer): Use `ivy--switch-buffer-action'. Fixes #101 2015-05-11 Oleh Krehel ivy.el (ivy-partial-or-done): Fixup * ivy.el (ivy-partial-or-done): Switch `default-directory' so that `minibuffer-complete' is aware of it. Select a directory only if there is only one. 2015-05-11 Oleh Krehel ivy.el (ivy-partial-or-done): Fixup 2015-05-11 Oleh Krehel When completing file names, defer to `minibuffer-complete' for "TAB" * ivy.el (ivy-partial-or-done): Call `minibuffer-complete'. If the resulting text is a valid directory, move there. (ivy-read): Setup `minibuffer-completion-table' and `minibuffer-completion-predicate'. This makes `minibuffer-complete' work. Fixes #92 2015-05-11 Oleh Krehel swiper.el (swiper-font-lock-ensure): Ignore fundamental-mode ELP uses this. 2015-05-11 Oleh Krehel Allow to customize the minibuffer formatter * ivy.el (ivy-format-function): New defvar. (ivy-format-function-default): New defun. (ivy-format-function-arrow): New defun, alternative for `ivy-format-function'. Fixes #87 2015-05-11 Oleh Krehel Update test ivy-test.el (swiper--re-builder): Rename from `ivy--transform-re'. 2015-05-11 Oleh Krehel Swiper should use the :re-builder argument * ivy.el (ivy--transform-re): Remove defun, :re-builder should be used for this logic. (ivy--filter): Update. * swiper.el (swiper-avy): Use `ivy--regex'. (swiper--init): Don't set `ivy--regex-function' - it will be set by :re-builder. (swiper--re-builder): New defun. (swiper--ivy): Use :re-builder in call to `ivy-read'. (swiper--update-input-ivy): Use `ivy--regex'. (swiper--action): Use `ivy--regex'. Fixes #90 2015-05-11 Oleh Krehel ivy.el (ivy-read): Add a re-builder argument * ivy.el (ivy-state): Add a RE-BUILDER field. (ivy-resume): Use RE-BUILDER field. (ivy-read): Set `ivy--regex-function' to RE-BUILDER if it's given. 2015-05-11 Oleh Krehel ivy.el (ivy-backward-kill-word): Add and bind to "M-DEL" Fixes #94 2015-05-09 Oleh Krehel Fix the transition from a bad regex to good one * ivy.el (ivy--filter): Update. Fixes #93 2015-05-08 Oleh Krehel Declare swiper-map Fixes #90 2015-05-08 Oleh Krehel Rename avy-swiper to swiper-avy * swiper.el (swiper-avy): Rename and fix the regex. 2015-05-08 Oleh Krehel ivy.el (ivy-use-virtual-buffers): New defcustom Re #84 2015-05-08 Oleh Krehel Add support for virtual buffers * ivy.el (ivy-mode-map): New defvar. Remap `switch-to-buffer' to `ivy-switch-buffer'. (ivy-mode): Use `ivy-mode-map'. (ivy--virtual-buffers): New devar. (ivy--virtual-buffers): New defun. (ivy-buffer-list): Return a list of buffers, taking `ido-use-virtual-buffers' into account. (ivy-switch-buffer): New command. Fixes #84 2015-05-08 Tassilo Horn Simplify ivy-partial-or-done 2015-05-08 Oleh Krehel Add swiper -> avy finalizer * ivy.el (ivy-quit-and-run): New defmacro. (tramp-get-completion-function): Add declare. * swiper.el (swiper-map): Bind `avy-swiper' to "C-'". (avy-swiper): New defun - jump to one of the currently visible swiper candidates using avy. 2015-05-08 Oleh Krehel Allow to use "^" in swiper * swiper.el (swiper--width): New defvar. (swiper--candidates): Set `swiper--width'. * ivy.el (ivy--transform-re): New defun - transform the regex specifically for `swiper'. (ivy--filter): Call `ivy--transform-re'. * ivy-test.el (ivy--transform-re): Add test. Fixes #82 2015-05-08 Oleh Krehel Add ivy-partial: partial complete without exiting * ivy.el (ivy-partial-or-done): Forward to `ivy-partial'. (ivy-partial): New defun. If you want a different style of completion for "TAB", do this in your config: (define-key ivy-minibuffer-map (kbd "TAB") 'ivy-partial) Fixes #85 Fixes #86 2015-05-06 Oleh Krehel Try to prevent the resize of minibuffer window * ivy.el (ivy--insert-minibuffer): Temporarily bind `resize-mini-windows' to nil. From its doc: A value of `grow-only', the default, means let mini-windows grow only; they return to their normal size when the minibuffer is closed, or the echo area becomes empty. It could be that an update catches this minibuffer empty during `ivy--insert-minibuffer'. Re #77 2015-05-06 Oleh Krehel Merge ivy--update-fn into ivy-last * ivy.el (ivy--update-fn): Remove defvar. (ivy-read): Update. (ivy--insert-minibuffer): Update. 2015-05-06 Oleh Krehel Add parents using 'display for `counsel-load-library' * counsel.el (counsel--find-symbol): The argument string may have a 'full-name property. (counsel-string-compose): New defun. (counsel-load-library): Make libraries unique through text properties. Re #79 2015-05-06 Oleh Krehel Add counsel-load-library * counsel.el (counsel-directory-parent): New defun. (counsel-load-library): New command. Improve on `load-library': - don't consider .*elc or .*pkg.elc?, they're usually useless - resolve duplicates in a similar way to uniquify (prepend parent directory) - allow to jump-to-library with "C-." (see `counsel-describe-map') 2015-05-06 Oleh Krehel Work around grep-read-files * ivy.el (ivy--done): If history is `grep-files-history', the caller is `grep-read-files'. Don't expand the file name, since it's probably a glob, and `find' doesn't work with expanded globs. It should now be possible to simply "M-x" rgrep "RET" "RET" "RET". Fixes #72 2015-05-06 Oleh Krehel ivy.el (ivy-partial-or-done): Handle empty input Fixes #81 2015-05-05 Oleh Krehel Improve "TAB" interaction with `confirm-nonexistent-file-or-buffer' * ivy.el (ivy-partial-or-done): When `confirm-nonexistent-file-or-buffer' is t, and there are no candidates, modify the prompt to "(confirm)" right after the first "TAB". Re #76 2015-05-05 Oleh Krehel ivy.el (ivy-done): Simplify and improve * ivy.el (ivy--done): New defun. (ivy-done): Consider `confirm-nonexistent-file-or-buffer' for buffers as well. Fixes #76 2015-05-05 Oleh Krehel Merge ivy--collection into ivy-last * ivy.el (ivy--collection): Delete defvar. (ivy-read): Update. (ivy--exhibit): Update. 2015-05-05 Oleh Krehel Require dired when completing file names * ivy.el (ivy-read): Update. Fixes #78 2015-05-04 Oleh Krehel Make "TAB" switch directories properly * ivy.el (ivy-partial-or-done): Forward to `ivy-alt-done'. Fixes #75 2015-05-04 Oleh Krehel "TAB" shouldn't delete input when no candidate ivy.el (ivy-partial-or-done): Update. Fixes #74 2015-05-04 Oleh Krehel Ignore case for "TAB" * ivy.el (ivy-partial-or-done): Update. Now, e.g. "pub" can expand to "Public License". 2015-05-04 Oleh Krehel ivy.el (ivy-tab-space): New defcustom * ivy.el (ivy-partial-or-done): Insert an extra space when `ivy-tab-space' is non-nil. This is useful to complete partially and start a new group at once. Fixes #73 2015-05-03 Oleh Krehel Add an option for out-of-order matching * ivy.el (ivy--regex-ignore-order): New defun. * swiper.el (swiper--init): Set `ivy--regex-function'. (swiper--update-input-ivy): Use `ivy--regex-function'. (swiper--action): Use `ivy--regex-function'. Example of use: (setq ivy-re-builders-alist '((t . ivy--regex-ignore-order))) With this, e.g. swiper will match "bar foo" from input "foo bar". 2015-05-03 Oleh Krehel swiper.el: Bump version 2015-05-03 Oleh Krehel ivy.el (ivy-resume): Quote the preselect 2015-05-02 Oleh Krehel Fix the candidate index for `ivy-resume' * ivy.el (ivy--preselect-index): The the regex, not the plain text. 2015-05-02 Oleh Krehel Add unwind argument to ivy-read * ivy.el (ivy-state): Add `unwind' field. (ivy-resume): Update. (ivy-read): Call the `unwind' argument in the unwind form. * swiper.el (swiper--ivy): Use `unwind' for `ivy-read'. 2015-05-01 Oleh Krehel Merge ivy--persistent-action into ivy-state-action * counsel.el (counsel-git-grep): Update. * ivy.el (ivy--persistent-action): Remove defvar. (ivy-next-line-and-call): Update. (ivy-previous-line-and-call): Update. 2015-05-01 Oleh Krehel ivy-resume now works for functions that supply action ivy.el (ivy-resume): Use action Functions like `counsel-describe-funtion' and `counsel-describe-varible' are now resume-able: after finishing with "RET" or breaking out with "C-g" it's possible to resume the query in the same state as it was (same collection, input, index). With: (global-set-key (kbd "C-c C-r") 'ivy-resume) it's possible to e.g.: - "F1 f" info read "RET" to describe Info-breadcrumbs - "C-c C-r" "C-n" to describe Info-read-node-name - "C-c C-r" "C-n" to describe Info-read-node-name-1 ... 2015-05-01 Oleh Krehel Merge ivy--action into ivy-last * ivy.el (ivy-state): Add action field. (ivy-set-action): New defun. Just a shortcut to set action. (ivy--action): Remove defvar. (ivy-read): Add action argument. Check (ivy-state-action ivy-last) in the end and call it, since the action can change during the completion. (ivy--insert-prompt): Add `counsel-find-symbol' to the list. (ivy--format): If there are no matches, set `ivy--current' to "". 2015-05-01 Oleh Krehel Merge ivy-window into ivy-last * ivy.el (ivy-state): Add a window field. (ivy-window): Remove defvar. (ivy-next-line-and-call): Update. (ivy-previous-line-and-call): Update. (ivy-read): Update. 2015-05-01 Oleh Krehel Merge ivy-def into ivy-last * ivy.el (ivy-def): Remove defvar. (ivy-read): Update. (ivy--filter): Update. 2015-05-01 Oleh Krehel Allow to quote spaces while matching * ivy.el (ivy--split): New defun. Use (ivy--split str) in place of (split-string str " +" t). Allows to "quote" N spaces by inputting N+1 spaces. 2015-05-01 Oleh Krehel Add ivy-state struct * ivy.el (ivy-state): New defstruct. (ivy-last): A single global to store an `ivy-state' struct. (ivy-require-match): Move into `ivy-last'. (ivy-done): Update. (ivy-resume): New defun. Initial draft, kind of works for swiper. Need to add a callback of what to do with the result as an argument. (ivy-read): Store all arguments into `ivy-last'. (ivy-completing-read): Update doc. 2015-04-30 Oleh Krehel Allow for "/ssh:user@" as well as for "/ssh:" * ivy.el (ivy-alt-done): Update. Re #59 2015-04-30 Oleh Krehel Improve TRAMP completion for ivy-mode * ivy.el (ivy-build-tramp-name): New defun. (ivy-alt-done): Use arcane TRAMP stuff to complete host names. Re #59 2015-04-30 Oleh Krehel ivy.el (ivy-read): Reset `ivy-text' earlier Related to `counsel-git-grep' "-3 chars more". 2015-04-30 Oleh Krehel ivy.el (ivy--regex): Fixup Fixes #62 2015-04-30 Oleh Krehel Don't error on bad regex * ivy.el (ivy--filter): When on bad regex, just set the result to nil. Fixes #70 2015-04-29 Oleh Krehel Update and improve faces * ivy.el (ivy-subdir): Inherit from dired-directory. * swiper.el (swiper-match-face-1): Update doc. (swiper-match-face-2): Update doc. (swiper-match-face-3): Update doc. (swiper-match-face-4): Inherit from isearch-fail. (swiper--add-overlays): Fix the faces order swapping on the second match. Now it finally works as planned: face-1 is the background (re group 0), next it cycles: face-2, face-3, face-4, face-2, face-3, face-4. 2015-04-29 Oleh Krehel Add gamma-correction to alpha-blending * colir.el (colir-compose-method): Make 'colir-compose-alpha default. (colir-compose-alpha): Add gamma-correction. 2015-04-29 Oleh Krehel colir.el: Add two additional blend algorithms * colir.el (colir-join): Remove. (color): Require. (colir-compose-method): New defcustom. (colir-compose-soft-light): New defun. (colir-compose-overlay): New defun. (colir-compose-alpha): New defun. (colir-blend): Update. (colir-blend-face-background): Update. 2015-04-29 Oleh Krehel ivy.el (ivy--exhibit): Fixup last commit * ivy.el (ivy--old-text): Should always be a string. (ivy-read): Update. (ivy--exhibit): Recompute candidates on flip, always set `ivy--old-re' to nil. 2015-04-29 Oleh Krehel Improve hidden buffer completion further * ivy.el (ivy--exhibit): Update. Fixes #68 Fixes #69 2015-04-29 Oleh Krehel Improve the completion of hidden buffers * ivy.el (ivy--collection): New defvar. (ivy-read): Update. (ivy--exhibit): Update. Re #68. 2015-04-29 Oleh Krehel Bind "TAB" to do partial completion * ivy.el (ivy-minibuffer-map): Update. (ivy-alt-done): New defun. (ivy--old-text): Update. Re #63. 2015-04-28 Oleh Krehel counsel.el (counsel-git-grep): Add optional initial-input * counsel.el (counsel-git-grep): Update. Fixes #66 2015-04-28 Oleh Krehel ivy.el (ivy-re-builders-alist): Improve doc Re #62 2015-04-28 Oleh Krehel ivy.el: Fixup docstrings * ivy.el (ivy-require-match): Update. (ivy-def): Update. (ivy--prompt-extra): Update. (ivy--maybe-scroll-history): Update. (ivy-completing-read): Update. (ivy--insert-minibuffer): Update. (ivy--filter): Update. 2015-04-28 Oleh Krehel Add an option for multi-tier regex matching * ivy.el (ivy--regex-plus): New defun. This is an example for the multi-tier interface. (ivy--filter): Update. To use it, add e.g.: (setq ivy-re-builders-alist '((t . ivy--regex-plus))) Example using boost_1_58_0 and `find-file-in-project`: * "utility" - 234 matches * "utility hpp" - 139 matches * "utility !hpp" - 95 matches Fixes #62 2015-04-28 Oleh Krehel Makefile: Update 2015-04-28 Oleh Krehel Use alpha compositing to add ivy-current-match face * ivy.el (ivy--exhibit): Use `colir-blend-face-background'. In case it fails, try `font-lock-append-text-property', which was used before. * colir.el (colir-join): New defun. (colir-blend): New defun. (colir-blend-face-background): New defun. 2015-04-28 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude `elfeed-search-mode' 2015-04-28 Oleh Krehel ivy.el (ivy--filter): Fixup Fixes #65 2015-04-28 Oleh Krehel ivy.el (ivy-alt-done): Treat `ivy-text' with ":" verbatim * ivy.el (ivy-alt-done): Should work better now for ssh: stuff. It should be possible to type in any directory: `/ssh:user@domain.com:` C-j and get completion. Re #59 2015-04-28 Oleh Krehel Store the preselect and use it for empty ivy-text * ivy.el (ivy-def): New defvar. (ivy-read): Store `ivy-def'. (ivy-completing-read): Update. (ivy--filter): When the input is empty, set `ivy--index' to select `ivy-def'. Fixes #64 2015-04-25 Oleh Krehel Improve completion history using the propertize trick * ivy.el (ivy-previous-history-element): Update. (ivy-next-history-element): Update. (ivy--maybe-scroll-history): New defun. When the history element string has ivy-index property, set `ivy--index' to that. Fixes #46 2015-04-24 Oleh Krehel Minibuffer faces should inherit minibuffer-prompt * ivy.el (ivy-confirm-face): Update. (ivy-match-required-face): Update. Re #60 2015-04-24 Oleh Krehel Improve the match confirm while completing files * ivy.el (ivy-confirm-face): New face. (ivy-match-required-face): New face. (ivy--prompt-extra): New defvar, the prompt is concatenaded with this. (ivy--extend-prompt): Remove. (ivy-done): Update. (ivy--insert-prompt): Use `ivy--prompt-extra'. Reset it unless the `this-command' is appropriate. (ivy--set-match-props): New defun. Fixes #60 2015-04-24 Oleh Krehel Reset to the first candidate when switching directories * ivy.el (ivy--cd): Update. 2015-04-24 Oleh Krehel Propertize remote buffers with ivy-remote face * ivy.el (ivy-remote): New face. (ivy-read): Update. Fixes #61 2015-04-23 Oleh Krehel Respect `confirm-nonexistent-file-or-buffer' * ivy.el (ivy--extend-prompt): New defun. (ivy-done): Ask for a confirmation if no candidates match and `confirm-nonexistent-file-or-buffer' is t. Re #60 2015-04-23 Oleh Krehel ivy.el (ivy-read): Fixup preselect addition It was unnecessarily inserting `preselect' when completing tags. 2015-04-23 Oleh Krehel ivy.el (ivy--cd): Reset `ivy--old-re' * ivy.el (ivy--cd): Switching directory switches the candidates, so `ivy--old-re' must be invalidated. Fixes #58 2015-04-23 Oleh Krehel ivy.el (Info-current-file): Declare 2015-04-23 Oleh Krehel Use "//" to move to root instead of "/" as before ivy.el (ivy--exhibit): Update. This improves the situation with tramp and generally avoids losing the current directory by pressing "/" by accident. Fixes #59 2015-04-23 Oleh Krehel Avoid sorting org refile candidates * ivy.el (ivy-read): Update. 2015-04-23 Oleh Krehel Exclude jabber-chat-mode from font-lock * swiper.el (swiper-font-lock-ensure): Update. 2015-04-23 Oleh Krehel Remove globbing heuristics for file name completion * ivy.el (ivy-done): Simplify. (ivy-alt-done): Simplify. If you want to exit with the current text, ignoring candidates, use `ivy-immediate-done' instead. Works for globs as well. Fixes #55 2015-04-23 Oleh Krehel counsel.el (counsel-git-grep): Fixup 2015-04-23 Oleh Krehel ivy.el (ivy-backward-delete-char): Expand `ivy--directory' This avoids the situation of getting a nil for "~/". Re #57 2015-04-23 Oleh Krehel ivy.el (ivy-done): Update wrt globs Re #55 2015-04-23 Oleh Krehel swiper.el (swiper-query-replace): Fix 2015-04-23 Oleh Krehel swiper.el (swiper--ivy): Check for stand-alone ivy Re #54 2015-04-23 Oleh Krehel ivy.el (ivy-done): Don't expand globs Re #55 2015-04-22 Oleh Krehel README.md: Update video link 2015-04-22 Oleh Krehel Fixup `swiper-query-replace' * swiper.el (swiper-query-replace): Make sure to use `swiper--window'. * ivy.el (ivy--minibuffer-setup): Remove the `use-local-map' statement, the map is already set in `read-from-minibuffer'. 2015-04-22 Oleh Krehel ivy-test.el (ivy-read): Update test. REQUIRE-MATCH is nil by default. 2015-04-22 Oleh Krehel ivy.el (ivy-read): Fix preselect logic * ivy.el (ivy-read): Update. Fixes e.g. `ert' passing "t" as the default, which isn't in collection, but `all-completions' doesn't return nil. 2015-04-22 Oleh Krehel ivy.el (ivy-done): Fixup 2015-04-22 Oleh Krehel ivy.el (ivy--add-face): Don't fail for weird str Fixes #44 2015-04-22 Oleh Krehel swiper.el (swiper--ivy): Fix preselect being added 2015-04-22 Oleh Krehel ivy.el (ivy--exhibit): Wrap in `while-no-input' * ivy.el (ivy--exhibit): `ivy--dynamic-function' will sometimes use `call-process'. Adding `while-no-input' speeds up things a lot, at the cost of a small message interrupting the minibuffer when `call-process' takes too long or the user types too fast. This message is not an issue for emacs-snapshot. 2015-04-22 Oleh Krehel Bind "M-q" to `ivy-toggle-regexp-quote' * ivy.el (ivy-minibuffer-map): Update. (ivy--regexp-quote): New defvar. (ivy-toggle-regexp-quote): New command, toggle `ivy--regex-function' between the value selected in `ivy-read' and `ivy--regexp-quote'. (ivy-read): Reset `ivy--regexp-quote' to 'regexp-quote. Fixes #48 2015-04-22 Oleh Krehel Allow to customize the regex matching per-collection * ivy.el (ivy--regex-function): New defvar. (ivy-re-builders-alist): New defvar, use this to customize. (ivy-read): Update. (ivy--filter): Update. Currently, it only works for function collections. Example: (setq ivy-re-builders-alist '((read-file-name-internal . regexp-quote) (t . ivy--regex))) Re #48 2015-04-22 Oleh Krehel ivy.el (ivy-done): Be more strict for `require-match' When `require-match' isn't in (nil confirm confirm-after-completion), don't allow to exit if there isn't a match. Instead, amend the prompt with "(match required)". 2015-04-22 Oleh Krehel Change `ivy-read' to a cl-defun * ivy.el (ivy-read): All args but PROMPT and COLLECTION are now keys. The existing basic calls to `ivy-read' should still work, the others need to be updated. It's best to try to use `ivy-completing-read' if possible, since it conforms to the `completing-read' arguments. New arguments: REQUIRE-MATCH and HISTORY. If HISTORY is nil, `ivy-history' is used. (ivy--sorted-files): Don't try to extend the collection. (ivy-completing-read): Update. * swiper.el (swiper--ivy): Update. * counsel.el (counsel-describe-symbol-history): New defvar. (counsel-describe-variable): Update the call, require match, use `counsel-describe-symbol-history'. (counsel-describe-function): Update the call, require match, use `counsel-describe-symbol-history'. * ivy-test.el: Update tests, since zero and one length input doesn't return immediately any more. Re #46 2015-04-22 Oleh Krehel ivy.el (ivy--filter): Update prefix optimization * ivy.el (ivy--filter): Don't use prefix optimization when the input contains "\". 2015-04-22 Oleh Krehel README.md: Add a note on outdated ivy package Fixes #51 2015-04-21 Oleh Krehel ivy.el (ivy--filter): Try directory expansion with "/" * ivy.el (ivy--filter): If candidate is "x" and completing file names, check if "x/" is among the candidates, and if so, set `ivy--index' accordingly. Re #50 2015-04-21 Oleh Krehel Fix the default-directory for `counsel-git-grep' * counsel.el (counsel--git-grep-dir): New defvar. (counsel-git-grep-count): Update. (counsel-git-grep-function): Update. (counsel-git-grep): Update. 2015-04-21 Oleh Krehel Add a way to exit ignoring the candidates * ivy.el (ivy-immediate-done): New commad, currently unbound. Exit the minibuffer, ignoring the candidates. Solves the same problem as "C-f" in `ido-mode'. (ivy-alt-done): With a prefix arg, e.g. "C-u C-j", forward to `ivy-immediate-done'. Re #50 2015-04-21 Oleh Krehel ivy.el (ivy-read): Don't add the `default-directory' 2015-04-21 Oleh Krehel ivy.el (ivy-read): Use initial-input when completing files * ivy.el (ivy-read): Unless `require-match', add `initial-input' to the collection. This is important e.g. for `dired-dwim-target'. 2015-04-21 Oleh Krehel swiper.el (swiper--add-overlays): Make bounds optional 2015-04-21 Oleh Krehel counsel.el (counsel-git-grep-count): Ignore case 2015-04-21 Oleh Krehel Fix describe-function / -variable "C-." interaction * counsel.el (counsel-describe-variable): Don't describe variable if jump-to-symbol action was chosen. (counsel-describe-function): Don't describe variable if jump-to-symbol action was chosen. I should handle this more gracefully if multiple actions become a pattern. 2015-04-21 Oleh Krehel counsel.el: Add awesome swiper highlighting to git grep * counsel.el (swiper): Require. (counsel-git-grep-function): Use `swiper--add-overlays'. Remember to set `swiper--window', and call `swiper--cleanup'. Use `ivy--regex' in all cases to build the regex. 2015-04-21 Oleh Krehel ivy.el (ivy--regex): Add optional greedy arg * ivy.el (ivy--regex): When optional greedy arg is t, be greedy. Don't wrap a sub-expr in a group if it's already a group, for instance "forward \(char\|list\)". Greedy is needed, for instance, for "git grep", which doesn't work great with non-greedy regex. Re #47 2015-04-21 Oleh Krehel swiper.el (swiper--add-overlays): Update arglist * swiper.el (swiper--update-input-ivy): Update. (swiper--add-overlays): Take only the regexp as the argument. Figure out the bounds by itself. 2015-04-21 Oleh Krehel ivy.el (ivy-done): Don't directory-expand glob filename * ivy.el (ivy-done): Don't directory-expand if there's a star in the file name. This change fixes the behavior of `rgrep`. It can't handle the case of e.g. /foo/bar/\*.el, but handles \*.el fine. Re #45 2015-04-21 Oleh Krehel Add an option to call the completion action without exiting * ivy.el (ivy--persistent-action): New defvar. This is a lambda that the caller sets if the caller has a plan for persistent actions. (ivy-next-line-and-call): Add and bind to "C-M-n". Identical to "C-n", except calls `ivy--persistent-action' when it's not nil. Add and bind to "C-M-p". Identical to "C-p", except calls `ivy--persistent-action' when it's not nil. (ivy-window): New defvar. (ivy-read): Store `ivy-window'. * counsel.el (counsel-git-grep): Use `ivy--persistent-action'. For `counsel-git-grep', as an example, it's possible to move to the matched place without exiting the completion with "C-M-n" and "C-M-p". This is a nice advantage, since it gives a full context to each one-line git grep match. 2015-04-21 Oleh Krehel Fix double-sorting for file names * ivy.el (ivy--sorted-files): Update. (ivy-read): Update. 2015-04-21 Oleh Krehel ivy.el (ivy--sorted-files): Avoid returning an empty list Fixes #49 2015-04-21 Oleh Krehel Allow to customize the sorting methods * ivy.el (ivy-sort-functions-alist): New defvar, stores sorting functions for various function collection types. (ivy-sort-file-function): Remove, merge into `ivy-sort-functions-alist'. (ivy-sort-max-size): Don't sort candidate lists larger than this size. (ivy--sorted-files): Update. (ivy-read): Add an argument SORT. When it's t, sort the candidates according to `ivy-sort-functions-alist'. It's assumed that if COLLECTION is a function it's OK to `cl-sort' it without making a copy. (ivy-completing-read): Call with SORT t. * counsel.el (counsel-describe-variable): Call with SORT t. (counsel-describe-function): Call with SORT t. 2015-04-21 Oleh Krehel ivy.el (ivy--regex): Switch to non-greedy ".*?" joiner Fixes #47 2015-04-21 Oleh Krehel ivy.el (ivy-done): Expand file name for empty text Fixes #45 2015-04-20 Oleh Krehel `counsel-git-grep' can now handle huge git repos * counsel.el (counsel-git-grep-count): Return a number instead of a string. Apply `ivy--regex' on the input. (counsel--git-grep-count): New defvar. (counsel-git-grep-function): If the repo has >20000 lines, use `head' 5000 instead, but still display the true amount of matches. (counsel-git-grep): Set `ivy--dynamic-function'. (counsel-locate-function): Update. * ivy.el (ivy--dynamic-function): New defvar. When this isn't nil, it will be called to get a new batch of candidates in case the `ivy-text' was changed. (ivy--full-length): The true candidates length in case of `head' shenanigans. (ivy--old-text): Store the old text for when `ivy--dynamic-function' was called last. (ivy--insert-prompt): Update. (ivy--exhibit): Don't do filtering for non-nil `ivy--dynamic-function' - let the caller (usually a shell tool) do the filtering. (ivy--insert-minibuffer): New defun, created from a part of `ivy--exhibit'. 2015-04-20 Oleh Krehel Use cl-plusp instead of plusp * ivy.el (cl-lib): Add require. (ivy-alt-done): Update. Re #43 2015-04-20 Oleh Krehel Add a dynamic counsel-locate * counsel.el (counsel-locate-function): New defun. (counsel-locate): New defun. * ivy.el (ivy--dynamic-function): New defvar. (ivy--exhibit): Re-compute candidates use `ivy--dynamic-function' if it's non-nil. 2015-04-20 Oleh Krehel Split `ivy-completions' into `ivy--filter' and `ivy--format' * ivy.el (ivy--exhibit): Update. (ivy-completions): Remove. (ivy--filter): New defun. (ivy--format): New defun. 2015-04-20 Oleh Krehel counsel.el (counsel-git-grep-count): Add defun 2015-04-20 Oleh Krehel swiper.el: Fix compilation warnings 2015-04-20 Oleh Krehel Bind arrows * ivy.el (ivy-minibuffer-map): Update. Re #40 2015-04-20 Oleh Krehel Add an optimization to speed up matching * ivy.el (ivy-completions): Update. 2015-04-20 Oleh Krehel swiper.el: Bump version 2015-04-20 Oleh Krehel ivy.el (ivy-done): Still expand "./" though 2015-04-20 Oleh Krehel Don't expand the default when completing file names * ivy.el (ivy-done): Update. This affects e.g. `rgrep': "\*.el" as the default will work, but "foo/\*.el" won't. 2015-04-20 Oleh Krehel Propertize directories with ivy-subdir face * ivy.el (ivy-subdir): New defface. (ivy-completions): Update. 2015-04-20 Oleh Krehel Speed up the default file sorting even more * ivy.el (ivy--sorted-files): Use `string-match-p' instead of `file-directory-p'. 2015-04-20 Oleh Krehel Speed up the default file sorting * ivy.el (ivy-sort-file-function-default): Update. (ivy--sorted-files): Update. Turns out that calling `file-directory-p' in `cl-sort' is too expensive. So when `ivy-sort-file-function' is `ivy-sort-file-function-default', propertize all strings with whether they are directories or not. When `ivy-sort-file-function' is something different, e.g. `string-lessp', don't do propertizing since it also can be slow. 2015-04-20 Oleh Krehel ivy.el (ivy--preselect-index): Give priority to perfect match 2015-04-20 Oleh Krehel Allow "C-." to jump to current symbol definition * counsel.el (counsel-describe-map): New defvar. (counsel-find-symbol): New defun. (counsel--find-symbol): New defun - jump to definition of function or symbol or library. (counsel-describe-variable): Use `counsel-describe-map'. (counsel-describe-function): Use `counsel-describe-map'. 2015-04-20 Oleh Krehel Allow to customize the file sorting order * ivy.el (ivy-sort-file-function-default): New defun. (ivy-sort-file-function): New defvar. Set this to your preference. (ivy--sorted-files): Update. Fixes #38 2015-04-19 Oleh Krehel ivy.el (ivy-done): Update for non-matching file names * ivy.el (ivy-done): When `ivy--directory' is non-nil, accept input anyway. Fixes #39 2015-04-19 Oleh Krehel ivy.el (ivy-completions): Fix an optimization 2015-04-19 Oleh Krehel Add a matching optimization * ivy.el (ivy-completions): When the new regex `re' is a contains the old regex `ivy--old-re', it must be true that all candidates that match `re' are contained inside all candidates that match `ivy--old-re', i.e. the pre-computed in the last step `ivy--old-cands'. This should speed up completion for large (~100k) amount of candidates, for the particular case of regex simply being extended. 2015-04-19 Oleh Krehel counsel.el (counsel-git-grep): Fix the default-directory 2015-04-19 Oleh Krehel Add a command to grep the current git repo * counsel.el (counsel-git-grep-function): New defun. (counsel-git-grep): New command. 2015-04-19 Oleh Krehel Add "C-v" and "M-v" scrolling * ivy.el (ivy-minibuffer-map): Update. (ivy-scroll-up-command): New defun. (ivy-scroll-down-command): New defun. 2015-04-18 Oleh Krehel ivy.el (ivy-alt-done): Update for 0 candidates 2015-04-18 Oleh Krehel swiper.el: Add a work-around for window-start not being current * swiper.el (swiper--update-input-ivy): Update. This results in double the window-height amount of lines being heightlighted, instead of just window-height. But at least it doesn't happen that some candidates within the current window aren't highlighted since they're beyond the outdated window-start and window-end. An alternative would be to use `redisplay' to update `window-start' and `window-end', but that causes excessive blinking. * ivy-test.el: Add a require. 2015-04-18 Oleh Krehel ivy.el: Move all defvar before their first use 2015-04-18 Oleh Krehel Add ivy key bindings to "C-h m" * ivy.el (ivy-mode): Update. Re #37 2015-04-18 Oleh Krehel Allow to customize the dotted directories * ivy.el (ivy-extra-directories): New defcustom. (ivy--sorted-files): Update. Re #38 2015-04-18 Oleh Krehel Add a work-around for completing topics in the info dir * ivy.el (ivy-read): Weirdly, the topic names need to be wrapped in "(...)". Also, `all-completions' returns nothing for "", but returns stuff for "(". Also, `all-completions' for "(" returns plenty of duplicates. 2015-04-18 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude dired-mode 2015-04-18 Oleh Krehel counsel.el: Switch from `with-no-warnings' to `declare-function' 2015-04-17 Oleh Krehel Allow to complete dir with "/" if it's a perfect match * ivy.el (ivy--exhibit): Update. 2015-04-17 Oleh Krehel Add sorting for file completion * ivy.el (ivy-alt-done): Exit with current directory when on first element, which is always "./", thanks to sorting. (ivy--cd): Update. (ivy--sorted-files): New defun for sorting file names. "./" and "../" are always the first, then come the directories, then the files. (ivy-read): Update. 2015-04-17 Oleh Krehel Add "/" and "~" shortcuts while finding files * ivy.el (ivy--cd): New defun. (ivy-backward-delete-char): Use `ivy--cd'. (ivy--exhibit): When the file completion text ends in "/" or "~", move to those dirs. 2015-04-17 Oleh Krehel Add work-around for DEF not being in COLLECTION for `completing-read' * ivy.el (ivy-read): Update. 2015-04-17 Oleh Krehel swiper.el: Remove dependency on ivy ivy.el now comes together with swiper. Re #36. 2015-04-16 Oleh Krehel Ivy-mode now works better with `find-file' * ivy.el (ivy-minibuffer-map): Bind "C-j" to visit a directory without exiting the minibuffer. (ivy--directory): New defvar. (ivy-done): Expand file names. (ivy-alt-done): New defun. (ivy-backward-delete-char): When completing file names, visit the parent dir. (ivy-read): Add the predicate argument, similar to `completing-read'. All code that uses `ivy-read' needs to be updated. Move the collection/predicate stuff here. (ivy-completing-read): Update. (ivy--insert-prompt): Display the current directory when completing file names. 2015-04-16 Oleh Krehel ivy.el (ivy-completing-read): Rely more on `all-completions' 2015-04-16 Oleh Krehel Add require-match functionality * ivy.el (ivy-require-match): New defvar. (ivy-done): When nothing matches, and `ivy-require-match' isn't t, use the current text anyway. (ivy-completing-read): Update. 2015-04-16 Oleh Krehel Add function as collection support for ivy-mode * ivy.el (ivy-completing-read): Update. Ignore initial input for function collection type. 2015-04-16 Oleh Krehel Don't try to fontify huge buffers * swiper.el (swiper-font-lock-ensure): Update. 2015-04-16 Oleh Krehel Remove ido-mode shenanigans Combining `ido-mode' and `ivy-read' seemed to cause a problem at some stage. Can't reproduce now, so I'll just remove this for a while. 2015-04-16 Oleh Krehel swiper.el: Bump version 2015-04-13 Oleh Krehel Fix thing-at-point in describe-function and -variable * counsel.el (counsel-describe-variable): Update. (counsel-describe-function): Update. 2015-04-10 Oleh Krehel Update sorting order, make sure that perfect match is selected ivy.el (ivy-completions): Update. When the regex matches perfectly, select it. 2015-04-09 Oleh Krehel Add ivy-mode * ivy.el (ivy-completing-read): New defun. (ivy-mode): New global minor mode. 2015-04-09 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude org-agenda-mode Re #19 2015-04-09 Oleh Krehel Add four more commands * counsel.el (counsel-describe-variable): New defun. (counsel-describe-function): New defun. (counsel-info-lookup-symbol): New defun. (counsel-unicode-char): New defun. * Makefile: Compile counsel.el as well. 2015-04-03 Steve Purcell Fix invalid package header line 2015-04-03 Oleh Krehel counsel.el: Fixup prefixes 2015-04-03 Oleh Krehel counsel.el (couns-clj): Add with-no-warnings 2015-04-02 Oleh Krehel counsel.el: Update comments 2015-03-31 Oleh Krehel Fix `ivy-backward-delete-char-function' * ivy.el (ivy-on-del-error-function): Rename from `ivy-backward-delete-char-function'. (ivy-backward-delete-char): Don't use eval. 2015-03-30 Kevin Add defcustom for ivy-backward-delete-char 2015-03-30 Oleh Krehel Allow duplicate candidates in `ivy-read' * ivy.el (ivy-completions): Use `eq' instead of `equal' in `cl-position'. 2015-03-27 Oleh Krehel swiper.el (swiper-map): Bind "C-l" to recenter * swiper.el (swiper-map): Update. (swiper-recenter-top-bottom): New defun. (swiper--update-input-ivy): Use `<=' in order for `recenter-top-bottom' to work. 2015-03-26 Oleh Krehel swiper.el (swiper-query-replace): Enable recursive minibuffers * swiper.el (swiper-query-replace): Update. Fixes #31. 2015-03-26 Oleh Krehel Default ARG to 1 for arrows * ivy.el (ivy-next-line): Update. (ivy-previous-line): Update. 2015-03-26 Oleh Krehel Add numeric arguments to arrows * ivy.el (ivy-next-line): Update. (ivy-next-line-or-history): Update. (ivy-previous-line): Update. (ivy-previous-line-or-history): Update. (ivy-read): Update doc. 2015-03-26 Oleh Krehel "C-s" should forward to "C-n" etc * ivy.el (ivy-next-line-or-history): Update. (ivy-previous-line-or-history): Update. 2015-03-25 Oleh Krehel Allow to cancel "M-q" with "C-g" swiper.el (swiper-query-replace): If the TO argument to `perform-replace' isn't read, don't exit minibuffer. If the user called `swiper-query-replace' and isn't happy with the current input being the FROM arg of `perform-replace', it's possible to cancel with "C-g", and edit the input once again. 2015-03-25 Oleh Krehel swiper.el (swiper-query-replace): Call only in minibuffer 2015-03-25 Oleh Krehel Add swiper-query-replace * ivy.el (ivy-read): Update signature - a keymap is also accepted and the argument order has changed. The keymap is composed with `ivy-minibuffer-map'. Update for `ivy--action'. (ivy--action): New defvar. If a function sets it, `ivy-read' will call it. * swiper.el (swiper-map): New defvar. (swiper-query-replace): New defun. (swiper--ivy): Use swiper-map in the call to `ivy-read'. * counsel.el (couns-git): Fix one empty candidate. 2015-03-25 Oleh Krehel swiper.el (swiper-font-lock-ensure): Ignore gnus modes 2015-03-23 Oleh Krehel Ensure that inserted candidates don't have read-only property * ivy.el (ivy-completions): Update. Fixes #28. The issue was that the whole text of erc buffer has (read-only t) property. That means if I copy some of those strings and insert them into the minibuffer, I can't delete them unless I set `inhibit-read-only' to t. Instead, I set the read-only to nil for the string that I insert. It doesn't affect the original buffer string. 2015-03-23 Oleh Krehel swiper.el (swiper-font-lock-ensure): Omit erc-mode Re #28 2015-03-22 Oleh Krehel Update Copyright 2015-03-22 Oleh Krehel Move swiper-helm to another repo 2015-03-22 John Mastro ivy.el (ivy-wrap): New defcustom (ivy-next-line): Wrap around if `ivy-wrap' is non-nil (ivy-next-line-or-history): Wrap around if `ivy-wrap' is non-nil (ivy-previous-line): Wrap around if `ivy-wrap' is non-nil (ivy-previous-line-or-history): Wrap around if `ivy-wrap' is non-nil 2015-03-22 John Mastro swiper.el (swiper-min-highlight): New defcustom (swiper--add-overlays): Use `swiper-min-highlight' 2015-03-22 John Mastro swiper.el (swiper--init): Set `swiper--opoint' (swiper): Don't set `swiper--opoint' 2015-03-21 Oleh Krehel Update "C-n" and "C-p" bindings * ivy.el (ivy-next-line): Don't touch history. (ivy-next-line-or-history): Select previous history element if there's no input. (ivy-previous-line): Don't touch history. (ivy-previous-line-or-history): Select previous history element if there's no input. Re #23 2015-03-21 Oleh Krehel Use `font-lock-append-text-property' to non-destructively modify a string * ivy.el (ivy--add-face): Improve. `font-lock-append-text-property' non-destructively changes properties in a string, which means if a string was copied from another and modified, the original will not be changed. In this way, it's better than `add-face-text-property'; and still better than `propertize' that simply erases all properties before applying. Fixes #22 2015-03-21 Steve Purcell Fix invalid package header line 2015-03-21 Oleh Krehel Add a custom `ivy-count-format' * ivy.el (ivy-count-format): New defcustom. (ivy-read): Use `ivy-count-format', unless PROMPT already has a %d spec. Set `ivy-count-format' to nil or "" if you don't want to see an auto-updating match count in the minibuffer. Re #23. 2015-03-21 Oleh Krehel swiper-helm.el: Fix typo 2015-03-21 Oleh Krehel swiper.el: Remove the helm bits They are now in swiper-helm.el. Available for install separately from MELPA. 2015-03-20 Oleh Krehel swiper-helm.el: Copy all helm stuff here 2015-03-20 Oleh Krehel ivy.el (ivy-completions): Simplify 2015-03-19 Oleh Krehel ivy.el: Remove while-no-input This will speed up the updates. But it might slow down somewhere else. The issue was that "M-DEL" did not cause an update. 2015-03-19 Oleh Krehel README.md: Add build status 2015-03-19 Oleh Krehel ivy.el (ivy-read): Allow for format-style PROMPT * ivy.el (ivy-read): When given a prompt of e.g. "%d pattern: ", update the number of candidates in the prompt. (ivy--prompt): New defvar. (ivy--insert-prompt): New defun. (ivy--exhibit): Call `ivy--insert-prompt'. (ivy-completions): Fix a bug of `ivy--index' becoming -1 when the number of matches becomes zero. * swiper.el (swiper--format-spec): New defvar. (swiper--candidates): Update. (swiper--ivy): Use `swiper--format-spec' to make the prompt. 2015-03-19 Oleh Krehel ivy.el (ivy-read): Change index to preselect * ivy.el (ivy-read): Update signature. Instead of giving the integer index of what to preselect, give a string to preselect. (ivy--preselect-index): New defun. * swiper.el (swiper--index-at-point): Rename to `ivy--preselect-index'. (swiper--ivy): Simplify. 2015-03-19 Oleh Krehel ivy-test.el: Add testing * Makefile: Add a test and compile target. 2015-03-19 Oleh Krehel ivy.el: Return nil when there is no match * ivy.el (ivy-done): Update. (ivy-read): Update. 2015-03-19 Oleh Krehel swiper.el: Silence a few compilation warnings 2015-03-18 Oleh Krehel swiper.el: Fix non-matching lines issue with initial-input * swiper.el (swiper--index-at-point): New defun. (swiper--ivy): Update. Fixes #20. 2015-03-18 Oleh Krehel Add isearch-like history behavior * ivy.el (ivy-next-line): Select previous history element for empty input. (ivy-previous-line): Select previous history element for empty input. (ivy-previous-history-element): New defun. (ivy-next-history-element): New defun. Re #21 2015-03-18 Oleh Krehel ivy.el (ivy-read): Bring last history candidate to front 2015-03-18 Oleh Krehel counsel.el: Add git file completion * counsel.el (couns-git): Add. 2015-03-18 Oleh Krehel swiper.el (swiper--helm): Require helm-match-plugin This seems to be necessary after a recent helm update. 2015-03-18 Oleh Krehel ivy.el: Fix ivy-history recording the full text instead of input * ivy.el (ivy-read): Update. Fixes #21 2015-03-18 Oleh Krehel swiper.el (swiper-font-lock-ensure): Exclude a few modes Re #19 2015-03-17 Oleh Krehel Work around magit highlighting problem * swiper.el (swiper-font-lock-ensure): Update. Re #19 2015-03-17 Oleh Krehel swiper.el (swiper--opoint): Fix bad defvar 2015-03-17 Oleh Krehel counsel.el: Add Clojure completion at point 2015-03-17 Oleh Krehel swiper.el: Fix error for empty buffer * swiper.el (swiper--candidates): Update. (swiper--action): Update. Fixes #17. 2015-03-16 killdash9 Need to check value of variable 2015-03-16 Oleh Krehel swiper.el: Clean up overlays better on "C-g" * swiper.el (swiper--cleanup): Improve. Fixes #11. 2015-03-16 Oleh Krehel Open invisible overlays using isearch * swiper.el (swiper--update-input-ivy): Improve. Fixes #11. 2015-03-16 Oleh Krehel ivy.el (ivy-read): Return immediately for less than 2 candidates 2015-03-16 Oleh Krehel counsel.el: Add 2015-03-15 Oleh Krehel Truncate candidates to window width in the minibuffer * ivy.el (ivy-completions): Update. 2015-03-15 Oleh Krehel Add some rudimentary history handling * ivy.el (ivy-minibuffer-map): Bind "M-n", "M-p", and "C-g". (ivy-history): New defvar. (ivy-read): Update. (ivy--minibuffer-setup): Offer thing-at-point for "M-n". (ivy--default): New defvar. Re #16. 2015-03-15 Oleh Krehel ivy.el (ivy-previous-line): Change to `cl-decf' Re #15 2015-03-15 Oleh Krehel swiper.el: Make ivy the default back end 2015-03-15 Oleh Krehel Don't recenter unless necessary * swiper.el (swiper--update-input-ivy): Update. 2015-03-15 Oleh Krehel Add anchoring * ivy.el (ivy-read): Add optional argument INDEX. It's the index of initally selected entry. (ivy-completions): Update. * swiper.el (swiper--ivy): Call `ivy-read' with `line-number-at-pos'. Fixes #16 2015-03-15 Xavier Garrido Fix use of cl-incf * ivy.el (ivy-next-line): Update. Fixes #15 2015-03-14 Oleh Krehel Require delsel for `minibuffer-keyboard-quit' * ivy.el (ivy-backward-delete-char): Update. Fixes #14. 2015-03-14 Oleh Krehel swiper.el: Save position before last search * swiper.el (swiper--ivy): Forward to `swiper--action'. (swiper--helm): Use `swiper--action-helm'. (swiper--action-helm): New defun. (swiper--action): Generalize, use push-mark, similarly to `isearch'. Fixes #12. 2015-03-14 Oleh Krehel Reveal invisible overlays * swiper.el (swiper--ivy): Update. (swiper--ensure-visible): New defun. (swiper--action): Update. Fixes #11. 2015-03-14 Steve Purcell Inherit standard faces by default Every time a new custom face definition is created, it breaks every existing theme. Better, then, to inherit standard faces by default. This commit has the side benefit of making the faces defined here legible in themes with dark backgrounds. 2015-03-14 Oleh Krehel swiper.el: Restore original point on canceling * swiper.el (swiper--opoint): New defvar. (swiper): Update. (swiper--ivy): Update. Fixes #9. 2015-03-14 Oleh Krehel ivy.el: Add `ivy-exit' * ivy.el (ivy-done): Update. (ivy-read): Update. (ivy-exit): New defvar. 2015-03-14 Oleh Krehel Add initial-input optional argument * swiper.el (swiper): Update. (swiper--ivy): Update. (swiper--helm): Update. * ivy.el (ivy-read): Update. Fixes #8. 2015-03-13 Oleh Krehel Account for zero-length regex matches * swiper.el (swiper--add-overlays): Update. Fixes #6. 2015-03-13 Oleh Krehel swiper.el: Use `with-selected-window' instead of `with-current-buffer' * swiper.el (swiper--buffer): Remove. (swiper--init): Update. (swiper--update-input-helm): Update. (swiper--update-input-ivy): Update. (swiper--update-sel): Update. 2015-03-13 Oleh Krehel ivy.el: Improve the highlighting in the minibuffer * ivy.el (ivy--add-face): Use `add-face-text-property' if it's available. You need to upgrade to Emacs 24.4 to get this feature. (ivy-completions): Use `ivy--add-face'. 2015-03-13 Oleh Krehel README.md: Update 2015-03-13 Oleh Krehel Update dependencies. * ivy.el: Depend on emacs "24.1". * swiper.el: Depend on ivy "0.1.0". 2015-03-13 Oleh Krehel Add `ivy' back end * ivy.el: New completion back end. * swiper.el: Package doesn't depend on `helm'. (ivy): Depend on `ivy'. (swiper-completion-method): New defcustom. (swiper--window): New var. (swiper--helm-keymap): Rename from `swiper--keymap'. (swiper): Change to a dispatch. (swiper--init): New defun. (swiper--ivy): New command. (swiper--helm): New command. (swiper--cleanup): New defun. (swiper--update-input-helm): Rename from `swiper--update-input'. (swiper--update-input-ivy): New defun. (swiper--add-overlays): New defun. (swiper--update-sel): Update. (swiper--subexps): (swiper--regex-hash): (swiper--regex): Move to ivy. (swiper--action): Update. 2015-03-11 killdash9 familiar isearch key bindings while helm is active 2015-03-11 Oleh Krehel swiper.el (swiper--regex): Update signature 2015-03-11 Syohei YOSHIDA Use cl-lib macros instead of cl.el 2015-03-11 Syohei YOSHIDA add autoload cookie for lazy loading 2015-03-11 Oleh Krehel Add dependency on emacs 24.1 2015-03-10 Oleh Krehel Add compatibility alias for `font-lock-ensure' * swiper.el (swiper-font-lock-ensure): Add. Fixes #1. 2015-03-10 Oleh Krehel README.md: Add 2015-03-10 Oleh Krehel swiper.el (swiper--regex): Zero groups without space * swiper.el (swiper--update-input): Update the face order accordingly. 2015-03-10 Oleh Krehel Update call to `font-lock-ensure' * swiper.el (swiper--candidates): `font-lock-ensure' takes no arguments in 24.4.1. 2015-03-09 Oleh Krehel Initial import