[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?
- Converting string to symbol,
excalamus <=