[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: COMPLETING-READ Problem
From: |
Drew Adams |
Subject: |
RE: COMPLETING-READ Problem |
Date: |
Sun, 9 Mar 2008 11:05:32 -0800 |
> While trying to implement a family of SQL identifier search functions,
> I want to offer tab completion to previously searched SQL identifiers
> -- besides builtin history functionality binded to M-p. For this
> purpose, I try to use COMPLETING-READ. Here's the related code
> snippet:
>
> (defvar searched-sql-items nil
> "Association list of previously searched SQL items.")
>
> (defun make-local-searched-sql-items ()
> "Creates per-buffer SEARCHED-SQL-ITEMS association list."
> (make-local-variable 'searched-sql-items))
>
> (add-hook 'sql-mode-hook 'make-local-searched-sql-items)
>
> (defun search-sql-table (table-name)
> "Search for specified TABLE-NAME in the current buffer."
> (interactive
> (let ((previously-searched-tables (assoc 'table searched-sql-
> items)))
> (list
> (completing-read
> (if previously-searched-tables
> (format "Table name (default: %s): "
> (first previously-searched-tables))
> "Table name: ")
> previously-searched-tables)))
> ;; Insert specified TABLE-NAME to SEARCHED-SQL-ITEMS.
> (let ((previously-searched-tables (assoc 'table searched-sql-
> items)))
> (setf (assoc 'table searched-sql-items)
> ;; Move TABLE-NAME to top.
> (cons table-name (remove table-name previously-searched-
> tables))))
> ;; Search table.
> (search-forward (format "CREATE TABLE %s" table-name))))
>
> But for some reason, function doesn't work. (Does nothing during
> execution.) I tried to place a (warn "TABLE-NAME: %s" table-name) just
> after (interactive ...) block, but there doesn't appear anything in
> the *Messages* buffer. Any ideas?
You pass `completing-read' an empty TABLE argument: you never fill
`previously-searched-tables', so it is nil.
And you never add any alist entry (table . <something) to
`searched-sql-items'. See
http://www.groupsrv.com/computers/about240758.html.
You need to think about or debug your code piece by piece.