2022-01-15 03:03:36 +00:00
|
|
|
;;; +orderless.el --- Mostly from minad -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;; See https://github.com/minad/consult/wiki#minads-orderless-configuration
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'orderless)
|
|
|
|
|
|
|
|
;;; Dispataching
|
|
|
|
|
|
|
|
(defvar +orderless-dispatch-alist '((?% . char-fold-to-regexp)
|
|
|
|
(?! . orderless-without-literal)
|
|
|
|
(?` . orderless-initialism)
|
|
|
|
(?= . orderless-literal)
|
|
|
|
(?~ . orderless-flex))
|
|
|
|
"Charcters to dispatch styles on orderless segments.")
|
|
|
|
|
|
|
|
(defun +orderless-dispatch (pattern index _total)
|
|
|
|
"Dispatch orderless segments of a search string.
|
|
|
|
Dispatchers are taken from `+orderless-dispatch-alist', and added
|
|
|
|
to the following defaults:
|
|
|
|
|
|
|
|
- regexp$ :: matches REGEXP at the end of the pattern.
|
|
|
|
- .ext :: matches EXT (at end of pattern)
|
|
|
|
|
|
|
|
Dispatch characters can be added at the beginning or ending of a
|
|
|
|
segment to make that segment match accordingly."
|
|
|
|
(cond
|
|
|
|
;; Ensure that $ works with Consult commands, which add disambiguation
|
|
|
|
;; suffixes
|
|
|
|
((string-suffix-p "$" pattern)
|
|
|
|
(cons 'orderless-regexp
|
|
|
|
(concat (substring pattern 0 -1) "[\x100000-\x10FFFD]*$")))
|
|
|
|
;; File extensions
|
|
|
|
((and
|
|
|
|
;; Completing filename or eshell
|
|
|
|
(or minibuffer-completing-file-name
|
|
|
|
(derived-mode-p 'eshell-mode))
|
|
|
|
;; File extension
|
|
|
|
(string-match-p "\\`\\.." pattern))
|
2022-01-16 21:53:44 +00:00
|
|
|
(cons 'orderless-regexp
|
2022-01-15 03:03:36 +00:00
|
|
|
(concat "\\." (substring pattern 1) "[\x100000-\x10FFFD]*$")))
|
|
|
|
;; Ignore single !
|
|
|
|
((string= "!" pattern) `(orderless-literal . ""))
|
|
|
|
;; Prefix and suffix
|
|
|
|
((if-let (x (assq (aref pattern 0) +orderless-dispatch-alist))
|
|
|
|
(cons (cdr x) (substring pattern 1))
|
|
|
|
(when-let (x (assq (aref pattern (1- (length pattern)))
|
|
|
|
+orderless-dispatch-alist))
|
|
|
|
(cons (cdr x) (substring pattern 0 -1)))))))
|
|
|
|
|
|
|
|
(orderless-define-completion-style +orderless-with-initialism
|
|
|
|
(orderless-matching-styles '(orderless-initialism
|
|
|
|
orderless-literal
|
|
|
|
orderless-regexp)))
|
|
|
|
|
|
|
|
(provide '+orderless)
|
|
|
|
;;; +orderless.el ends here
|