[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/vertico f0a2577 1/6: Add horizontico extension
From: |
ELPA Syncer |
Subject: |
[elpa] externals/vertico f0a2577 1/6: Add horizontico extension |
Date: |
Fri, 9 Jul 2021 10:57:17 -0400 (EDT) |
branch: externals/vertico
commit f0a2577ea221cb3adb3bc48de4205030700fc738
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Add horizontico extension
---
README.org | 14 ++++----
extensions/horizontico.el | 82 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 7 deletions(-)
diff --git a/README.org b/README.org
index 5f3edf6..3c17959 100644
--- a/README.org
+++ b/README.org
@@ -152,6 +152,7 @@
We maintain a few small extension packages to Vertico in this repository
in the subdirectory
[[https://github.com/minad/vertico/tree/main/extensions][extensions/]].
Currently these extensions are available:
+ -
[[https://github.com/minad/vertico/blob/main/extensions/horizontico.el][horizontico.el]]:
HORIZONTal Interactive COmpletion
-
[[https://github.com/minad/vertico/blob/main/extensions/vertico-buffer.el][vertico-buffer.el]]:
Offers =vertico-buffer-mode= to display Vertico in a separate buffer
-
[[https://github.com/minad/vertico/blob/main/extensions/vertico-ido.el][vertico-ido.el]]:
Commands for Ido-like directory navigation
-
[[https://github.com/minad/vertico/blob/main/extensions/vertico-repeat.el][vertico-repeat.el]]:
The command =vertico-repeate= repeats the last completion session
@@ -212,13 +213,12 @@
with Emacs. There are at least two other interactive completion UIs, which
follow a similar philosophy:
- - [[https://github.com/raxod502/selectrum][Selectrum]]: Selectrum has a
similar UI as Vertico. Vertico additionally has
- the ability to cycle over candidates and offers more commands for grouping
- support. On the other hand, Selectrum supports Avy-style quick keys and a
- horizontal display. Furthermore Selectrum is significantly more complex and
- not fully compatible with every Emacs completion command
([[https://github.com/raxod502/selectrum/issues/481][Issue #481]]), since
- it uses its own filtering infrastructure, which deviates from the standard
- Emacs completion facilities.
+ - [[https://github.com/raxod502/selectrum][Selectrum]]: Selectrum has a
similar UI as Vertico. Selectrum is significantly
+ more complex and not fully compatible with every Emacs completion command
+ ([[https://github.com/raxod502/selectrum/issues/481][Issue #481]]), since
it uses its own filtering infrastructure, which deviates
+ from the standard Emacs completion facilities. Selectrum supports
additional
+ Avy-style quick keys. Vertico additionally has the ability to cycle over
+ candidates and offers more commands for grouping support.
- [[https://github.com/oantolin/icomplete-vertical][Icomplete-vertical]]:
This package enhances the Emacs builtin Icomplete with a
vertical display. In contrast to Vertico, the candidates are rotated such
that
the current candidate always appears at the top. From my perspective,
diff --git a/extensions/horizontico.el b/extensions/horizontico.el
new file mode 100644
index 0000000..856d186
--- /dev/null
+++ b/extensions/horizontico.el
@@ -0,0 +1,82 @@
+;;; horizontico.el --- HORIZONTal Interactive COmpletion -*- lexical-binding:
t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; Version: 0.1
+
+;; This file is part of GNU Emacs.
+
+;; This program 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.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package is a Vertico extension providing a horizontal display.
+
+;;; Code:
+
+(require 'vertico)
+
+(defvar horizontico--orig-group-format nil)
+(defvar horizontico--orig-count nil)
+
+(defun horizontico--display (candidates)
+ "Display CANDIDATES horizontally."
+ (move-overlay vertico--candidates-ov (point-max) (point-max))
+ (when (>= vertico--index 0)
+ (setq candidates
+ (seq-drop-while (lambda (cand)
+ (let ((face (get-text-property 0 'face cand)))
+ (not (if (listp face)
+ (memq 'vertico-current face)
+ (eq 'vertico-current face)))))
+ candidates)))
+ (setq candidates
+ (seq-map-indexed (lambda (cand idx)
+ (replace-regexp-in-string
+ "\\` +" ""
+ (replace-regexp-in-string
+ "[ \t]+" (if (= idx 0) #(" " 0 1 (face
vertico-current)) " ")
+ (substring cand 0 -1))))
+ candidates))
+ (overlay-put
+ vertico--candidates-ov 'after-string
+ (concat #(" " 0 1 (cursor t))
+ (if candidates
+ (concat "{" (string-join candidates " | ") "}")
+ "[No match]"))))
+
+(defun horizontico--disable-annotations (_ candidates)
+ "Return CANDIDATES without adding annotations."
+ candidates)
+
+;;;###autoload
+(define-minor-mode horizontico-mode
+ "HORIZONTal Interactive COmpletion."
+ :global t
+ (cond
+ (horizontico-mode
+ (setq horizontico--orig-group-format vertico-group-format
+ horizontico--orig-count vertico-count
+ vertico-group-format nil
+ vertico-count 20)
+ (advice-add #'vertico--affixate :override
#'horizontico--disable-annotations)
+ (advice-add #'vertico--display-candidates :override
#'horizontico--display))
+ (t
+ (setq vertico-group-format horizontico--orig-group-format
+ vertico-count horizontico--orig-count)
+ (advice-remove #'vertico--affixate #'horizontico--disable-annotations)
+ (advice-remove #'vertico--display-candidates #'horizontico--display))))
+
+(provide 'horizontico)
+;;; horizontico.el ends here
- [elpa] externals/vertico updated (9f6cd5d -> 9efad2e), ELPA Syncer, 2021/07/09
- [elpa] externals/vertico f0a2577 1/6: Add horizontico extension,
ELPA Syncer <=
- [elpa] externals/vertico d4a97ef 2/6: Rename vertico-ido to vertico-directory, ELPA Syncer, 2021/07/09
- [elpa] externals/vertico 7e43dd6 5/6: extensions: Update package header, ELPA Syncer, 2021/07/09
- [elpa] externals/vertico 420fefe 3/6: Rename horizontico to vertico-flat, ELPA Syncer, 2021/07/09
- [elpa] externals/vertico 7e04897 4/6: Rename function, ELPA Syncer, 2021/07/09
- [elpa] externals/vertico 9efad2e 6/6: Update readme, ELPA Syncer, 2021/07/09