emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-gambit 186b74c 10/34: completion now working and ta


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-gambit 186b74c 10/34: completion now working and taking account of user's defined functions
Date: Sun, 1 Aug 2021 18:27:16 -0400 (EDT)

branch: elpa/geiser-gambit
commit 186b74c5237a43387cf71d8b9069f9710f4a160f
Author: mathieu2em <math.per@hotmail.com>
Commit: mathieu2em <math.per@hotmail.com>

    completion now working and taking account of user's defined functions
---
 scheme/gambit/geiser/gambit.scm | 39 ++++++++++++++++++++++++++++++++-------
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/scheme/gambit/geiser/gambit.scm b/scheme/gambit/geiser/gambit.scm
index d8cae00..b13d5e3 100644
--- a/scheme/gambit/geiser/gambit.scm
+++ b/scheme/gambit/geiser/gambit.scm
@@ -117,20 +117,45 @@
         (list (##procedure-search method-name)))))
 
 (define (geiser:module-completions prefix . rest)
+
   (define (environment-symbols)
-    (map car ##gambit-procedures))
-  (##sort-list (filter (lambda (el)
-                         (##string-prefix? prefix el))
-                       (map symbol->string (environment-symbols)))
-               string-ci<?))
+    (let* ((sym-tab (##symbol-table))
+           (sym-len (vector-length sym-tab)))
+      (let loop ((i 1)
+                 (symbols-list '()))
+        (if (< i sym-len)
+            (let ((sym (vector-ref sym-tab i)))
+              (loop (+ i 1)
+                    (if (symbol? sym)
+                        (let loop2 ((sym-list (if (##string-prefix? prefix sym)
+                                                  (cons (symbol->string sym) 
symbols-list)
+                                                  symbols-list))
+                                    (vect sym))
+                          (let ((sym2 (##vector-ref vect 2)))
+                            (if (symbol? sym2)
+                                (if (##string-prefix? prefix sym2)
+                                    (loop2 (cons (symbol->string sym2) 
sym-list) sym2)
+                                    (loop2 sym-list sym2))
+                                sym-list)))
+                        symbols-list)))
+            symbols-list))))
+  
+  (##sort-list (environment-symbols) string-ci<?))
+
+ ;; (##sort-list (filter (lambda (el)
+ ;;                        (##string-prefix? prefix el)) ;; eviter le map -> 
symbol->string externe
+ ;;                      (map symbol->string (environment-symbols)))
+ ;;              string-ci<?))
 
 (define (geiser:completions prefix . rest)
   rest)
 
 ;; string-prefix function
 (define (##string-prefix? pref str)
-  (let ((str-len (string-length str))
-        (pref-len (string-length pref)))
+  (let* ((str (if (string? str) str (symbol->string str)))
+         (str-len (string-length str))
+         (pref (if (string? pref) pref (symbol->string pref)))
+         (pref-len (string-length pref)))
     (and (string? pref)
          (string? str)
          (<= pref-len str-len)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]