[elpa] externals/ivy-explorer be8008b 7/7: Version bump

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit be8008ba1c8b21d39b18b1307d97434e6139cc88
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Version bump
---
 ivy-explorer.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index 2ae1d43..5bf57e7 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -4,7 +4,7 @@
 
 ;; Author: Clemens Radermacher 
 ;; URL: https://github.com/clemera/ivy-explorer
-;; Version: 0.1.3
+;; Version: 0.2.0
 ;; Package-Requires: ((emacs "25") (ivy "0.10.0"))
 ;; Keywords: convenience, files, matching
 



[elpa] externals/ivy-explorer c8c6485 1/7: Let ivy-explorer-avy continue when entering directories

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit c8c6485bd87593d738f5adb56fdc689dd94d2335
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Let ivy-explorer-avy continue when entering directories
---
 ivy-explorer.el | 113 +---
 1 file changed, 59 insertions(+), 54 deletions(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index fd3077d..607222b 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -207,61 +207,66 @@ Even for the same string.")
 (defun ivy-explorer-avy (&optional action)
   "Jump to one of the current candidates using `avy'.
 
-If called from code ACTION is the action to trigger afterwards."
+Files are opened and directories will be entered. When entering a
+directory `avy' is invoked again. Users can exit this navigation
+style with C-g.
+
+If called from code ACTION is the action to trigger afterwards,
+in this case `avy' is not invoked again."
   (interactive)
-  (with-selected-window (ivy-explorer--lv)
-(unless (require 'avy nil 'noerror)
-(error "Package avy isn't installed"))
-  (let* ((avy-all-windows nil)
- (avy-keys (or (cdr (assq 'ivy-avy avy-keys-alist))
-   avy-keys))
- (avy-style (or (cdr (assq 'ivy-avy
-   avy-styles-alist))
-avy-style))
- (count 0)
- (candidate
-  (let ((candidates))
-(save-excursion
-  (save-restriction
-(narrow-to-region
- (window-start)
- (window-end))
-(goto-char (point-min))
-;; ignore the first candidate if at ./
-;; this command is meant to be used for navigation
-;; navigate to same folder you are in makes no sense
-(unless (looking-at "./")
-  (push (cons (point)
-  (selected-window))
-candidates)
-  (put-text-property
-   (point) (1+ (point)) 'ivy-explorer-count count))
-(goto-char
- (or (next-single-property-change
-  (point) 'mouse-face)
- (point-max)))
-(while (< (point) (point-max))
-  (unless (looking-at "[[:blank:]\r\n]\\|\\'")
-(cl-incf count)
-(put-text-property
- (point) (1+ (point)) 'ivy-explorer-count count)
-(push
- (cons (point)
-   (selected-window))
- candidates))
-  (goto-char
-   (or (next-single-property-change
-(point)
-'mouse-face)
-   (point-max))
-(setq avy-action #'identity)
-(avy--process
- (nreverse candidates)
- (avy--style-fn avy-style)
-(when (number-or-marker-p candidate)
-  (ivy-set-index
-   (get-text-property candidate 'ivy-explorer-count))
-  (run-at-time 0 nil (or action 'ivy-alt-done))
+  (when (with-selected-window (ivy-explorer--lv)
+  (unless (require 'avy nil 'noerror)
+(error "Package avy isn't installed"))
+  (let* ((avy-all-windows nil)
+ (avy-keys (or (cdr (assq 'ivy-avy avy-keys-alist))
+   avy-keys))
+ (avy-style (or (cdr (assq 'ivy-avy
+   avy-styles-alist))
+avy-style))
+ (count 0)
+ (candidate
+  (let ((candidates))
+(save-excursion
+  (goto-char (point-min))
+  ;; ignore the first candidate if at ./
+  ;; this command is meant to be used for navigation
+  ;; navigate to same folder you are in makes no sense
+  (unless (looking-at "./")
+(push (cons (point)
+(selected-window))
+  candidates)
+(put-text-property
+ (point) (1+ (point)) 'ivy-explorer-count count))
+  (goto-char
+   (or (next-single-property-change
+(point) 'mouse-face)
+   (point-max)))
+  (while (< (point) (point-max))
+(unless (looking-at "[[:blank:]\r\n]\\|\\'")
+  (cl-incf count)
+  (put-text-property
+   (point) (1+ (point)) 'ivy-explorer-count count)
+  (push
+   (cons (point)
+ (selected-window))
+   candidates))
+

[elpa] externals/ivy-explorer 7114ebe 2/7: Move to candidate which was current on exit when entering dired

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit 7114ebe5ffe55afc3a58bfc25d4405dbc327695b
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Move to candidate which was current on exit when entering dired
---
 ivy-explorer.el | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index 607222b..ae02151 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -317,11 +317,16 @@ in this case `avy' is not invoked again."
(ivy-done)))
 
 (defun ivy-explorer-dired ()
-  "Open current directory in `dired'."
+  "Open current directory in `dired'.
+
+Move to file which was current on exit."
   (interactive)
-  (ivy--cd ivy--directory)
-  (ivy--exhibit)
-  (ivy-done))
+  (let ((curr (ivy-state-current ivy-last)))
+(ivy--cd ivy--directory)
+(ivy--exhibit)
+(run-at-time 0 nil #'dired-goto-file
+ (expand-file-name curr ivy--directory))
+(ivy-done)))
 
 (defun ivy-explorer-next (arg)
   "Move cursor vertically down ARG candidates."



[elpa] externals/ivy-explorer a09eb44 4/7: Add binding to switch to explorer window

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit a09eb44d425ee70c4e3a539895b399a13d003e2d
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Add binding to switch to explorer window
---
 ivy-explorer.el | 18 +++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index 736016b..e948765 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -148,9 +148,14 @@ Even for the same string.")
(call-interactively ',cmd)
(ivy--exhibit
 
+(defun ivy-explorer-select-mini ()
+  (interactive)
+  (select-window (minibuffer-window)))
+
 (defvar ivy-explorer-lv-mode-map
   (let ((map (make-sparse-keymap)))
 (prog1 map
+  (suppress-keymap map)
   (define-key map (kbd "C-g") (defun ivy-explorer-lv-quit ()
 (interactive)
 (with-selected-window (minibuffer-window)
@@ -162,9 +167,8 @@ Even for the same string.")
   (define-key map (kbd "RET") (ivy-explorer--lv-command ivy-alt-done))
   (define-key map (kbd "DEL") (ivy-explorer--lv-command 
ivy-backward-delete-char))
   (define-key map "," (ivy-explorer--lv-command ivy-explorer-avy))
-  (define-key map (kbd "C-x o") (defun ivy-explorer-select-mini ()
-  (interactive)
-  (select-window (minibuffer-window)))
+  (define-key map (kbd "C-x o") 'ivy-explorer-select-mini)
+  (define-key map (kbd "'") 'ivy-explorer-select-mini
 
 (define-minor-mode ivy-explorer-lv-mode
   "Mode for buffer showing the grid.")
@@ -418,10 +422,18 @@ Call the permanent action if possible.")
 
 ;; * Ivy explorer mode
 
+(defun ivy-explorer-select-lv ()
+  (interactive)
+  (select-window (get-buffer-window " *ivy-explorer*")))
+
 (defvar ivy-explorer-map
   (let ((map (make-sparse-keymap)))
 (prog1 map
   (define-key map (kbd "C-x d") 'ivy-explorer-dired)
+
+  (define-key map (kbd "C-x o") 'ivy-explorer-select-lv)
+  (define-key map (kbd "'") 'ivy-explorer-select-lv)
+
   (define-key map (kbd "M-o") 'ivy-explorer-dispatching-done)
   (define-key map (kbd "C-'") 'ivy-explorer-avy)
   (define-key map (kbd ",") 'ivy-explorer-avy)



[elpa] externals/ivy-explorer 863391e 3/7: Allow switching to lv-window and allow modal navigation in it

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit 863391ee64271a6589372dd3d0df87651c917188
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Allow switching to lv-window and allow modal navigation in it
---
 ivy-explorer.el | 43 ++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index ae02151..736016b 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -140,6 +140,35 @@ menu string as `cdr'."
   "When non-nil, `ivy-explorer--lv-message' will refresh.
 Even for the same string.")
 
+
+(defmacro ivy-explorer--lv-command (cmd)
+  `(defun ,(intern (format "%s-lv" (symbol-name cmd))) ()
+ (interactive)
+ (with-selected-window (minibuffer-window)
+   (call-interactively ',cmd)
+   (ivy--exhibit
+
+(defvar ivy-explorer-lv-mode-map
+  (let ((map (make-sparse-keymap)))
+(prog1 map
+  (define-key map (kbd "C-g") (defun ivy-explorer-lv-quit ()
+(interactive)
+(with-selected-window (minibuffer-window)
+  (minibuffer-keyboard-quit
+  (define-key map "n" (ivy-explorer--lv-command ivy-explorer-next))
+  (define-key map "p" (ivy-explorer--lv-command ivy-explorer-previous))
+  (define-key map "f" (ivy-explorer--lv-command ivy-explorer-forward))
+  (define-key map "b" (ivy-explorer--lv-command ivy-explorer-backward))
+  (define-key map (kbd "RET") (ivy-explorer--lv-command ivy-alt-done))
+  (define-key map (kbd "DEL") (ivy-explorer--lv-command 
ivy-backward-delete-char))
+  (define-key map "," (ivy-explorer--lv-command ivy-explorer-avy))
+  (define-key map (kbd "C-x o") (defun ivy-explorer-select-mini ()
+  (interactive)
+  (select-window (minibuffer-window)))
+
+(define-minor-mode ivy-explorer-lv-mode
+  "Mode for buffer showing the grid.")
+
 (defun ivy-explorer--lv ()
   "Ensure that ivy explorer window is live and return it."
   (if (window-live-p ivy-explorer--window)
@@ -155,6 +184,7 @@ Even for the same string.")
 (switch-to-buffer buf)
   (switch-to-buffer " *ivy-explorer*")
   (set-window-hscroll ivy-explorer--window 0)
+  (ivy-explorer-lv-mode 1)
   (setq window-size-fixed t)
   (setq mode-line-format nil)
   (setq cursor-type nil)
@@ -392,7 +422,7 @@ Call the permanent action if possible.")
   (let ((map (make-sparse-keymap)))
 (prog1 map
   (define-key map (kbd "C-x d") 'ivy-explorer-dired)
-
+  (define-key map (kbd "M-o") 'ivy-explorer-dispatching-done)
   (define-key map (kbd "C-'") 'ivy-explorer-avy)
   (define-key map (kbd ",") 'ivy-explorer-avy)
   (define-key map (kbd ";") 'ivy-explorer-avy-dispatch)
@@ -434,6 +464,17 @@ Call the permanent action if possible.")
 (apply f args)))
 
 
+(defun ivy-explorer-dispatching-done ()
+  "Select one of the available actions and call `ivy-done'."
+  (interactive)
+  (let ((window (selected-window)))
+(unwind-protect
+(when (ivy-read-action)
+  (ivy-done))
+  (when (window-live-p window)
+(window-resize nil (- 1 (window-height)))
+
+
 (defun ivy-explorer (&rest args)
   "Function to be used as `read-file-name-function'.
 



[elpa] externals/ivy-explorer updated (0b1d286 -> be8008b)

2019-01-16 Thread Clemens Radermacher
clemera pushed a change to branch externals/ivy-explorer.

  from  0b1d286   Version bump
   new  c8c6485   Let ivy-explorer-avy continue when entering directories
   new  7114ebe   Move to candidate which was current on exit when entering 
dired
   new  863391e   Allow switching to lv-window and allow modal navigation 
in it
   new  a09eb44   Add binding to switch to explorer window
   new  92abbe8   Don't read dispatch action twice
   new  7a622c4   Add dispatch binding for explorer window
   new  be8008b   Version bump


Summary of changes:
 ivy-explorer.el | 184 ++--
 1 file changed, 124 insertions(+), 60 deletions(-)



[elpa] externals/ivy-explorer 7a622c4 6/7: Add dispatch binding for explorer window

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit 7a622c41a7c966ce4923b454be60b2d337beba22
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Add dispatch binding for explorer window
---
 ivy-explorer.el | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index ab2d45b..2ae1d43 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -166,6 +166,7 @@ Even for the same string.")
   (define-key map "b" (ivy-explorer--lv-command ivy-explorer-backward))
   (define-key map (kbd "RET") (ivy-explorer--lv-command ivy-alt-done))
   (define-key map (kbd "DEL") (ivy-explorer--lv-command 
ivy-backward-delete-char))
+  (define-key map (kbd "M-o") (ivy-explorer--lv-command 
ivy-explorer-dispatching-done))
   (define-key map "," (ivy-explorer--lv-command ivy-explorer-avy))
   (define-key map (kbd "C-x o") 'ivy-explorer-select-mini)
   (define-key map (kbd "'") 'ivy-explorer-select-mini



[elpa] externals/ivy-explorer 92abbe8 5/7: Don't read dispatch action twice

2019-01-16 Thread Clemens Radermacher
branch: externals/ivy-explorer
commit 92abbe82e982e0b2cfd3ba517fd8e052da5bb677
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Don't read dispatch action twice
---
 ivy-explorer.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ivy-explorer.el b/ivy-explorer.el
index e948765..ab2d45b 100644
--- a/ivy-explorer.el
+++ b/ivy-explorer.el
@@ -347,7 +347,7 @@ in this case `avy' is not invoked again."
  (lambda ()
(let ((action (ivy-read-action)))
  (when action
-   (ivy-set-action (ivy-read-action))
+   (ivy-set-action action)
(ivy-done)))
 
 (defun ivy-explorer-dired ()



[elpa] master facd92f: Update copyrights of some packages

2019-01-16 Thread Michael Heerdegen
branch: master
commit facd92f4c026525706a48b96b4e0b24543ce1d94
Author: Michael Heerdegen 
Commit: Michael Heerdegen 

Update copyrights of some packages

Update copyrights of el-search, iterators, on-screen, smart-yank and
stream-x.
---
 packages/el-search/el-search-x.el | 2 +-
 packages/el-search/el-search.el   | 2 +-
 packages/iterators/iterators.el   | 2 +-
 packages/on-screen/on-screen.el   | 2 +-
 packages/smart-yank/smart-yank.el | 2 +-
 packages/stream/stream-x.el   | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/el-search/el-search-x.el 
b/packages/el-search/el-search-x.el
index 58b5251..06ebd78 100644
--- a/packages/el-search/el-search-x.el
+++ b/packages/el-search/el-search-x.el
@@ -1,6 +1,6 @@
 ;;; el-search-x.el --- Additional pattern definitions for el-search-*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2016-2018 Free Software Foundation, Inc
+;; Copyright (C) 2016-2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index 9f4893d..c85197c 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -1,6 +1,6 @@
 ;;; el-search.el --- Expression based interactive search for Emacs Lisp   -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 
diff --git a/packages/iterators/iterators.el b/packages/iterators/iterators.el
index b333ff8..f75dc90 100644
--- a/packages/iterators/iterators.el
+++ b/packages/iterators/iterators.el
@@ -1,6 +1,6 @@
 ;;; iterators.el --- Functions for working with iterators  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 
diff --git a/packages/on-screen/on-screen.el b/packages/on-screen/on-screen.el
index 6e9df0b..954591a 100644
--- a/packages/on-screen/on-screen.el
+++ b/packages/on-screen/on-screen.el
@@ -1,6 +1,6 @@
 ;;; on-screen.el --- guide your eyes while scrolling   -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2013-2018 Free Software Foundation, Inc
+;; Copyright (C) 2013-2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 
diff --git a/packages/smart-yank/smart-yank.el 
b/packages/smart-yank/smart-yank.el
index 0c64c08..ceb7428 100644
--- a/packages/smart-yank/smart-yank.el
+++ b/packages/smart-yank/smart-yank.el
@@ -1,6 +1,6 @@
 ;;; smart-yank.el --- A different approach of yank pointer handling  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2016-2018 Free Software Foundation, Inc
+;; Copyright (C) 2016-2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 
diff --git a/packages/stream/stream-x.el b/packages/stream/stream-x.el
index f916caf..9a4ede1 100644
--- a/packages/stream/stream-x.el
+++ b/packages/stream/stream-x.el
@@ -1,6 +1,6 @@
 ;;; stream-x.el --- Additional functions for working with streams  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2017 - 2018 Free Software Foundation, Inc
+;; Copyright (C) 2017 - 2019 Free Software Foundation, Inc
 
 ;; Author: Michael Heerdegen 
 ;; Maintainer: Michael Heerdegen 



[elpa] master updated (facd92f -> 4d339f7)

2019-01-16 Thread Stephen Leake
stephen_leake pushed a change to branch master.

  from  facd92f   Update copyrights of some packages
   new  99e418d   Add package path-iterator, version 0
   new  de19c24   Merge commit 'facd92f4c026525706a48b96b4e0b24543ce1d94'
   new  4d339f7   Add package uniquify-files


Summary of changes:
 packages/path-iterator/path-iterator.el   | 248 +++
 packages/uniquify-files/uniquify-files.el | 711 ++
 2 files changed, 959 insertions(+)
 create mode 100644 packages/path-iterator/path-iterator.el
 create mode 100644 packages/uniquify-files/uniquify-files.el



[elpa] master 4d339f7 3/3: Add package uniquify-files

2019-01-16 Thread Stephen Leake
branch: master
commit 4d339f789d6e3ce76f12c9354744d11edec44f33
Author: Stephen Leake 
Commit: Stephen Leake 

Add package uniquify-files
---
 packages/uniquify-files/uniquify-files.el | 711 ++
 1 file changed, 711 insertions(+)

diff --git a/packages/uniquify-files/uniquify-files.el 
b/packages/uniquify-files/uniquify-files.el
new file mode 100644
index 000..ee2ef25
--- /dev/null
+++ b/packages/uniquify-files/uniquify-files.el
@@ -0,0 +1,711 @@
+;; uniquify-files.el --- Completion style for files in a path  -*- 
lexical-binding:t -*-
+;;
+;; Copyright (C) 2017, 2019  Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake 
+;; Maintainer: Stephen Leake 
+;; Keywords: completion table
+;;   uniquify
+;; Version: 0
+;; package-requires: ((emacs "25.0"))
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see .
+
+
+;;; Discussion
+;;;
+;; These are the driving requirements for this completion style:
+;;
+;; - Allow the strings entered by the user and displayed in the
+;;   completion list to be rearranged abbreviations of the absolute
+;;   file name returned by `completing-read'.
+;;
+;; - Allow partial completion on the directory and filename portions
+;;   of the abbreviated strings.
+;;
+;;   "partial completion" means file names are partitioned at "_-/"
+;;   characters, so "fo-ba" completes to "foo-bar".
+;;
+;; - There should be no style-dependent code in the completion table
+;;   function; all code that deals with converting between the
+;;   abbreviated strings and the absolute strings should be in
+;;   higher-level functions, under the control of
+;;   `completion-styles-alist'.
+
+;; The first requirement has the most effect on the design. There are
+;; two common ways to select the result of a completion:
+;;
+;; - `minibuffer-complete-and-exit' - by default bound to  in the
+;;   minibuffer when `icomplete-mode' is enabled.
+;;
+;; - `minibuffer-force-complete-and-exit' - some users bind this to
+;; or other keys, so that it is easier to select the first
+;;completion.
+;;
+;; One possible design is to have `completion-try-completion' return
+;; an absolute file name (rather than an abbreviated file name) when
+;; the completed string is a valid completion. That sometimes works
+;; with `minibuffer-complete-and-exit', but it does not work with
+;; `minibuffer-force-complete-and-exit'; details follow.
+
+;; The nominal path thru `minibuffer-complete-and-exit' in effect
+;; calls `test-completion'. If that returns nil, it calls
+;; `completion-try-completion' with the same string, and then
+;; `test-completion' on that result. If that returns non-nil, the
+;; completed string is returned as the result of
+;; `completing-read'. Thus `test-completion' could return nil for user
+;; format strings, and t for data format strings; and `try-completion'
+;; could convert user format strings that are valid completions to data
+;; format strings. However, the full logic is complex (see the code in
+;; minibuffer.el for more details), and often ends up not converting
+;; the user string to a data string.
+;;
+;; `minibuffer-force-complete-and-exit' calls
+;; `minibuffer-force-complete', which replaces the buffer text with
+;; the first completion. Then it calls `test-completion', but _not_
+;; `try-completion' if that fails. So there is no opportunity to
+;; convert the user string to a data string.
+;;
+;; Thus the design we use here adds an explicit conversion from user
+;; to data format, via advice on completing-read.
+;;
+;; We did not meet the third requirement; the completion table
+;; implements part of the completion style.
+
+;;; Design
+;;
+;; There are three string formats involved in completion. For most
+;; styles, they are all the same; the following table describes them
+;; for the uniquify-file style.
+;;
+;; - user
+;;
+;;   The format typed by the user in the minibuffer, and shown in the
+;;   displayed completion list.
+;;
+;;   The user input is passed to `completion-try-completion', so it must
+;;   accept this format.
+;;
+;;   The string returned by `completion-try-completion' when it extends
+;;   the string replaces the string typed by the user, so it must be
+;;   in this format.
+;;
+;;   The displayed completion list consists of the strings returned by
+;;   `completion-all-completions' with the common pref

[elpa] master de19c24 2/3: Merge commit 'facd92f4c026525706a48b96b4e0b24543ce1d94'

2019-01-16 Thread Stephen Leake
branch: master
commit de19c24465f304c440157971fcf34c8072b057ce
Merge: 99e418d facd92f
Author: Stephen Leake 
Commit: Stephen Leake 

Merge commit 'facd92f4c026525706a48b96b4e0b24543ce1d94'
---
 .gitignore|   8 +
 GNUmakefile   |   8 +-
 README|   2 +-
 admin/archive-contents.el |  22 ++-
 externals-list|   4 +
 packages/counsel-ebdb/counsel-ebdb.el |  66 ---
 packages/el-search/NEWS   |   5 +
 packages/el-search/el-search-x.el |   2 +-
 packages/el-search/el-search.el   | 335 +-
 packages/helm-ebdb/helm-ebdb.el   |  83 -
 packages/iterators/iterators.el   |   2 +-
 packages/on-screen/on-screen.el   |   2 +-
 packages/smart-yank/smart-yank.el |   2 +-
 packages/stream/stream-x.el   |   2 +-
 14 files changed, 332 insertions(+), 211 deletions(-)

diff --git a/.gitignore b/.gitignore
index 363f7e4..7fcb315 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,27 +14,35 @@ packages/auctex/
 packages/bbdb/
 packages/chess/
 packages/cl-print/
+packages/clipboard-collector/
 packages/dash/
 packages/dismal/
 packages/ebdb/
 packages/eglot/
 packages/ergoemacs-mode/
 packages/exwm/
+packages/flymake/
 packages/fountain-mode/
+packages/gpastel/
 packages/hyperbole/
+packages/ivy-explorer/
 packages/jsonrpc/
 packages/let-alist/
+packages/map/
 packages/mmm-mode/
 packages/ntlm/
+packages/objed/
 packages/omn-mode/
 packages/orgalist/
 packages/pabbrev/
+packages/posframe/
 packages/psgml/
 packages/python/
 packages/rudel/
 packages/soap-client/
 packages/sql-indent/
 packages/ssh-deploy/
+packages/system-packages/
 packages/w3/
 packages/xelb/
 packages/zones/
diff --git a/GNUmakefile b/GNUmakefile
index 79e252f..8bfd49b 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -171,9 +171,11 @@ elcs := $(call SET-diff, $(naive_elcs), $(patsubst %.el, 
%.elc, $(nbc_els)))
 # '(dolist (al (quote ($(patsubst %, "%", $(autoloads) (load 
(expand-file-name al) nil t))'
 %.elc: %.el
@echo 'Byte compiling $<'
-   @$(EMACS) \
-   --eval "(setq package-directory-list nil package-user-dir 
\"$(abspath packages)\")" \
-   -f package-initialize \
+   @$(EMACS)\
+   --eval "(setq package-directory-list nil \
+ load-prefer-newer t\
+  package-user-dir \"$(abspath packages)\")" \
+   -f package-initialize\
-L $(dir $@) -f batch-byte-compile $<
 
 .PHONY: elcs
diff --git a/README b/README
index b827780..e0c9faf 100644
--- a/README
+++ b/README
@@ -229,7 +229,7 @@ In the `external' case, the copy of the code is not kept in 
`master` but in the
 
 To add a new externals package, first add this `elpa.git' repository as a
 new remote in your existing repository.  Then push a local branch to a
-new remote branch in `elpa.git', named externals/.  For example:
+new remote branch in `elpa.git', named `externals/`.  For example:
 
git push elpa :externals/
 
diff --git a/admin/archive-contents.el b/admin/archive-contents.el
index 17909b9..32f5285 100644
--- a/admin/archive-contents.el
+++ b/admin/archive-contents.el
@@ -1,6 +1,6 @@
 ;;; archive-contents.el --- Auto-generate an Emacs Lisp package archive.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2018  Free Software Foundation, Inc
+;; Copyright (C) 2011-2019  Free Software Foundation, Inc
 
 ;; Author: Stefan Monnier 
 
@@ -626,14 +626,20 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
 (message "Running git pull in %S" default-directory)
 (archive-call t "git" "pull"))
((file-exists-p ".git")
-(message "Updating worktree in %S" default-directory)
-(archive-call t "git" "merge"))
+(unless (with-temp-buffer
+  (archive-call t "git" "status" "--branch" "--porcelain=2")
+  (goto-char (point-min))
+  ;; Nothing to pull (nor push, actually).
+  (search-forward "\n# branch.ab +0 -0" nil t))
+  (message "Updating worktree in %S" default-directory)
+  (archive-call t "git" "merge")))
(t (error "No .git in %S" default-directory)))
-  (message "Updated %s:%s%s" dirname
-   (if (and (eobp) (bolp)
-(eq (line-beginning-position 0) (point-min)))
-   " " "\n")
-   (buffer-string)
+  (unless (and (eobp) (bobp))
+(message "Updated %s:%s%s" dirname
+ (if (and (eobp) (bolp)
+  (eq (line-beginning-position 0) (point-min)))
+ " " "\n")
+ (buffer-string))
 
 ;;; Maintain external packages.
 
diff --git a/externals-list b/externals-list
index 411c431..2098587 100644

[elpa] master 99e418d 1/3: Add package path-iterator, version 0

2019-01-16 Thread Stephen Leake
branch: master
commit 99e418d23913c865215ddcde2944906be30f533b
Author: Stephen Leake 
Commit: Stephen Leake 

Add package path-iterator, version 0
---
 packages/path-iterator/path-iterator.el | 248 
 1 file changed, 248 insertions(+)

diff --git a/packages/path-iterator/path-iterator.el 
b/packages/path-iterator/path-iterator.el
new file mode 100644
index 000..abfdff1
--- /dev/null
+++ b/packages/path-iterator/path-iterator.el
@@ -0,0 +1,248 @@
+;; path-iterator.el --- An iterator for traversing a directory path.  
-*-lexical-binding:t-*-
+
+;; Copyright (C) 2015 - 2017 Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake 
+;; Maintainer: Stephen Leake 
+;; Version: 0
+;; package-requires: ((emacs "25.0"))
+;;
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see .
+
+;;; Code:
+
+(require 'cl-generic)
+
+(cl-defstruct
+(path-iterator
+ (:conc-name path-iter-)
+ (:copier nil)
+ (:constructor nil)
+ (:constructor make-path-iterator
+  (&key
+   user-path-non-recursive
+   user-path-recursive
+   ignore-function
+   &aux
+   (path-non-recursive-init (path-iter-to-truename 
user-path-non-recursive))
+   (path-non-recursive path-non-recursive-init)
+   (path-recursive-init (path-iter-to-truename 
user-path-recursive))
+   (path-recursive path-recursive-init)
+   (visited nil)
+   (current nil)
+   (state nil))
+  ))
+
+  path-non-recursive-init ;; absolute directory file truenames, no recursion
+  path-recursive-init ;; absolute directory file truenames, recurse into 
subdirectories
+
+  path-non-recursive ;; temp storage while iterating
+  path-recursive ;; "
+
+  ignore-function
+  ;; Function called with absolute directory name; return non-nil
+  ;; if it should be ignored.
+
+  visited
+  ;; During first iteration - list of directories already visited.
+  ;; During subsequent iterations - vector of directories to visit
+  ;;
+  ;; We have to populate the visited list during the first iteration
+  ;; in order to avoid visiting a directory twice, so we might as well
+  ;; use it for subsequent iterations.
+
+  current ;; index into `visited' during subsequent iterations
+
+  state ;; one of nil, 'started, 'complete. Allows detecting interrupted 
computation.
+  )
+
+(cl-defmethod path-iter-contains-root ((iter path-iterator) root)
+  "Return non-nil if ITER roots contain ROOT."
+  (or (member root (path-iter-path-recursive-init iter))
+  (member root (path-iter-path-non-recursive-init iter))
+  ))
+
+(defun path-iter-to-truename (path)
+  "Convert each existing element of PATH to an absolute directory file 
truename,
+return the resulting list.  Elements of PATH are either absolute or
+relative to `default-directory'.
+
+If an element of PATH is nil, `default-directory' is used."
+  ;; The nil handling is as defined by the `load-path' doc string.
+  (let (result)
+(cl-mapc
+ (lambda (name)
+   (let ((absname (if name
+ (expand-file-name name)
+   default-directory)))
+(when (file-directory-p absname)
+  (push (file-truename absname) result))
+))
+ path)
+(nreverse result)))
+
+(cl-defmethod path-iter-done ((iter path-iterator))
+"Return non-nil if ITER is done."
+  (cond
+   ((listp (path-iter-visited iter))
+;; First iteration
+(and (null (car (path-iter-path-non-recursive iter)))
+(null (car (path-iter-path-recursive iter)
+
+   (t
+;; Subsequent iterations
+(= (1+ (path-iter-current iter)) (length (path-iter-visited iter
+   ))
+
+(cl-defmethod path-iter-next ((iter path-iterator))
+  "Return the next directory to visit, or nil if there are no more.
+
+The iterator will first visit all elements of the non-recursive
+path, then all elements of the recursive path, and visit all
+subdirectories of the recursive path for which `ignore-function'
+returns nil, in depth-first order (parent directories are visited
+before their subdirectories; sibling directories are visited
+after subdirectories), but will not visit any directory more than
+once. The order of subdirectories within a directory is

[elpa] master 5511be7: Add new files in ada-mode; package version not bumped

2019-01-16 Thread Stephen Leake
branch: master
commit 5511be7a40e4c02c1ea38f24c6ce92c5aee32a11
Author: Stephen Leake 
Commit: Stephen Leake 

Add new files in ada-mode; package version not bumped

* packages/ada-mode/ada-project.el: New file.
* packages/ada-mode/env-project.el: New file.
---
 packages/ada-mode/ada-project.el | 81 
 packages/ada-mode/env-project.el | 70 ++
 2 files changed, 151 insertions(+)

diff --git a/packages/ada-mode/ada-project.el b/packages/ada-mode/ada-project.el
new file mode 100644
index 000..e917ec3
--- /dev/null
+++ b/packages/ada-mode/ada-project.el
@@ -0,0 +1,81 @@
+;; ada-project.el - project.el backend for ada-mode projects -*- 
lexical-binding: t =*-
+;;
+;; Copyright (C) 2017, 2018, 2019  Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake 
+;; Maintainer: Stephen Leake 
+;; Keywords: projects
+;; Version: 1.0.0
+;; package-requires: ((emacs "25.0"))
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see .
+
+(require 'ada-mode)
+(require 'project-patches)
+(require 'env-project)
+(require 'uniquify-files)
+
+(cl-defstruct (ada-project
+  (:include env-project)
+  (:constructor nil) ;; no default
+  (:constructor make-ada-project
+(&key
+ env-vars
+ ada-prj-file
+ &aux
+ (ada-prj (expand-file-name ada-prj-file
+  )
+  ada-prj
+  ;; The ada-mode project file name (absolute).
+  )
+
+(cl-defmethod project-id ((prj ada-project))
+  ;; project-id is experimental
+  (ada-project-ada-prj prj))
+
+(cl-defmethod project-library-roots ((prj ada-project))
+  ;; Called from project-find-file; result is passed to
+  ;; project--file-completion-table, where it is ignored.
+  nil)
+
+(cl-defmethod project-roots ((prj ada-project))
+  ;; Called from project-find-file; result is passed to
+  ;; project--file-completion-table, where it is ignored.
+  nil)
+
+(cl-defmethod project-file-completion-table ((prj ada-project) _dirs)
+  ;; (ada-prj-get 'src_dir) is more accurate than project-*roots
+  (let ((iter (make-path-iterator
+  :user-path-non-recursive (ada-prj-get 'src_dir)
+  :user-path-recursive nil
+  :ignore-function nil)))
+(apply-partially #'uniq-file-completion-table iter)
+))
+
+(cl-defmethod project-select :after ((prj ada-project))
+  ;; :after ensures env-project project-select is run first, setting env vars.
+  (ada-select-prj-file (ada-project-ada-prj prj)))
+
+(cl-defmethod project-deselect :before ((prj ada-project))
+  ;; :before ensures env vars are not erased before we are done with them.
+  (ada-deselect-prj (ada-project-ada-prj prj)))
+
+(cl-defmethod project-refresh ((_prj ada-project))
+  ;; assume prj is current
+  (ada-refresh-prj-file))
+(provide 'ada-project)
+
+;; end of file
diff --git a/packages/ada-mode/env-project.el b/packages/ada-mode/env-project.el
new file mode 100644
index 000..53dc99b
--- /dev/null
+++ b/packages/ada-mode/env-project.el
@@ -0,0 +1,70 @@
+;;; env-project.el --- provide a root project type that holds a list of env 
vars  -*- lexical-binding:t -*-
+;;
+;; Copyright (C) 2017, 2019  Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake 
+;; Maintainer: Stephen Leake 
+;; Keywords: projects
+;; Version: 0
+;; package-requires: ((emacs "25.0"))
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see .
+
+(require 'cl-lib)
+(require 'cl-generic)
+(require 'project)
+
+(eval-and-compile
+  (unless (fboundp 'refresh-project)
+  ;; In emacs 27
+
+  (cl-defgeneric project-refresh (prj)
+