[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/cape 9b97dbbc76: Add cape-capf-inside-string and cape-c
From: |
ELPA Syncer |
Subject: |
[elpa] externals/cape 9b97dbbc76: Add cape-capf-inside-string and cape-capf-inside-comment |
Date: |
Fri, 23 Dec 2022 13:57:21 -0500 (EST) |
branch: externals/cape
commit 9b97dbbc7624415ee25f79de9ea357feb1e2e547
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Add cape-capf-inside-string and cape-capf-inside-comment
These utilties can be used to tie a Capf to a certain context. There exist
multiple ways you can organize your `completion-at-point-functions'.
The main programming mode Capf can come first in the list. Then subsequent
auxiliary Capfs will only take over if the main Capf bails out. Sometimes
the
main Capf is exclusive and never bails out. You could then turn it
non-exclusive
with `cape-capf-nonexclusive'.
Alternatively you could move the auxiliary Capfs before the main Capf. Then
you
could use the `cape-capf-inside-*' helpers to make the auxiliary Capfs less
aggressive, such that they trigger only inside comments or strings.
There is no silver bullet here and the setup depends highly on the mode.
These
Capf transformers are just meant to give you flexible tools at hand such
that
you can build the completion pipeline which works best for you.
(There has been some prior discussion about context dependent Capfs and
predicates a long time ago in #9 and #11, but the addition of this feature
got
actually inspired by @LuigiPiucco's Doom PR.)
---
README.org | 9 +++++----
cape.el | 14 ++++++++++++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/README.org b/README.org
index c6d6474527..aa853aa480 100644
--- a/README.org
+++ b/README.org
@@ -100,7 +100,7 @@ could be upstreamed into Emacs itself.
)
#+end_src
-* Experimental features
+* CAPF adapters and transformers
** Company adapter
/Wrap your Company backend in a Cape and turn it into a Capf!/
@@ -219,7 +219,7 @@ achieve a similarly refreshing strategy.
(list (cape-capf-buster #'some-caching-capf)))
#+end_src
-** Other Capf transformers
+** Capf transformers
Cape provides a set of additional Capf transformation functions, which are
mostly meant to used by experts to fine tune the Capf behavior and Capf
@@ -236,8 +236,9 @@ the Capf transformers with =defalias= to a function symbol.
- ~cape-wrap-case-fold~, ~cape-capf-case-fold~: Create a Capf which is case
insensitive.
- ~cape-wrap-properties~, ~cape-capf-properties~: Add completion properties to
a Capf.
- ~cape-wrap-predicate~, ~cape-capf-predicate~: Add candidate predicate to a
Capf.
-- ~cape-wrap-prefix-length~, ~cape-capf-prefix-length~: Enforce a minimal
prefix
- length.
+- ~cape-wrap-prefix-length~, ~cape-capf-prefix-length~: Enforce a minimal
prefix length.
+- ~cape-wrap-inside-comment~, ~cape-capf-inside-comment~: Ensure that Capf
triggers only inside comment.
+- ~cape-wrap-inside-string~, ~cape-capf-inside-string~: Ensure that Capf
triggers only inside a string literal.
In the following we show a few example configurations, which have come up on
the
[[https://github.com/minad/cape/issues][Cape]] or
[[https://github.com/minad/corfu/issues][Corfu issue tracker]] or the
[[https://github.com/minad/corfu/wiki][Corfu wiki.]] I use some of these tweaks
in my
diff --git a/cape.el b/cape.el
index 575dc902a6..cc1a93b786 100644
--- a/cape.el
+++ b/cape.el
@@ -832,6 +832,16 @@ If the prefix is long enough, enforce auto completion."
:company-prefix-length t
,@plist)))))
+;;;###autoload
+(defun cape-wrap-inside-comment (capf)
+ "Call CAPF only if inside comment."
+ (and (nth 4 (syntax-ppss)) (funcall capf)))
+
+;;;###autoload
+(defun cape-wrap-inside-string (capf)
+ "Call CAPF only if inside string."
+ (and (nth 3 (syntax-ppss)) (funcall capf)))
+
;;;###autoload
(defun cape-wrap-purify (capf)
"Call CAPF and ensure that it does not modify the buffer."
@@ -868,6 +878,10 @@ If the prefix is long enough, enforce auto completion."
(cape--capf-wrapper buster)
;;;###autoload (autoload 'cape-capf-case-fold "cape")
(cape--capf-wrapper case-fold)
+;;;###autoload (autoload 'cape-capf-inside-comment "cape")
+(cape--capf-wrapper inside-comment)
+;;;###autoload (autoload 'cape-capf-inside-string "cape")
+(cape--capf-wrapper inside-string)
;;;###autoload (autoload 'cape-capf-noninterruptible "cape")
(cape--capf-wrapper noninterruptible)
;;;###autoload (autoload 'cape-capf-nonexclusive "cape")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/cape 9b97dbbc76: Add cape-capf-inside-string and cape-capf-inside-comment,
ELPA Syncer <=