help-gnu-emacs
[Top][All Lists]
Advanced

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

Converting string to symbol


From: excalamus
Subject: Converting string to symbol
Date: Sun, 3 Jan 2021 21:54:32 +0100 (CET)

Hi, 

I want to define a global abbrev with case-fixed property t.  I want this 
abbrev to appear in the define-abbrev-table definition created by 
write-abbrev-file.

To my knowledge, there is no native option to do this.  So, I have defined a 
function which wraps define-abbrev and reads in the table, abbrev name, and 
expansion from the user.

(defun my-add-case-fixed-abbrev (name expansion &optional table)
  "Add abbrev with case-fixed t property."
  (interactive
   (let ((table (intern-soft (completing-read
          "Abbrev table (global-abbrev-table): "
          abbrev-table-name-list nil t nil nil "global-abbrev-table" )))
         (name (read-string "Abbrev name: "))
         (expansion (read-string "Expansion: ")))
     (list name expansion table)))
  (let ((table (or table global-abbrev-table)))
    (define-abbrev table name expansion nil :case-fixed t)))

Since completing-read returns a string, I convert the string representing the 
abbrev table to the corresponding symbol using intern-soft.  

However, this causes the error "Wrong-type-argument vectorp 
global-abbrev-table" when calling explicitly or interactively.

 (my-add-case-fixed-abbrev "my-abbrev" "my-expansion" "global-abbrev-table") ;; 
causes error

The error doesn't appear when the default argument is used

(my-add-case-fixed-abbrev "my-abbrev" "my-expansion")  ;; uses default arg, no 
error

I can see that (eq 'global-abbrev-table (intern-soft "global-abbrev-table")) 
returns t.  How does the symbol created by intern-soft differ from the symbol 
'global-abbrev-table' used as the default within let?

I can see that (vectorp (intern-soft "global-abbrev-table")) is nil, so fair 
enough, table is not a vector.  

If I convert table to a vector using

   (let ((table (vector (intern-soft (completing-read
          "Abbrev table (global-abbrev-table): "
          abbrev-table-name-list nil t nil nil "global-abbrev-table" ))))

I get the error "Wrong type argument: number-or-marker-p, nil".

I have run each of these with debug-on-error set, but I'm not sure how to 
interpret the error message.   

Any hint on what's going on here?



reply via email to

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