* Converting string to symbol
@ 2021-01-03 20:54 excalamus--- via Users list for the GNU Emacs text editor
2021-01-03 21:25 ` Thien-Thi Nguyen
2021-01-04 6:25 ` Andreas Röhler
0 siblings, 2 replies; 7+ messages in thread
From: excalamus--- via Users list for the GNU Emacs text editor @ 2021-01-03 20:54 UTC (permalink / raw)
To: Help Gnu Emacs
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?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-03 20:54 Converting string to symbol excalamus--- via Users list for the GNU Emacs text editor
@ 2021-01-03 21:25 ` Thien-Thi Nguyen
2021-01-05 4:04 ` excalamus--- via Users list for the GNU Emacs text editor
2021-01-04 6:25 ` Andreas Röhler
1 sibling, 1 reply; 7+ messages in thread
From: Thien-Thi Nguyen @ 2021-01-03 21:25 UTC (permalink / raw)
To: help-gnu-emacs; +Cc: excalamus
[-- Attachment #1: Type: text/plain, Size: 706 bytes --]
() excalamus--- via <help-gnu-emacs@gnu.org>
() Sun, 3 Jan 2021 21:54:32 +0100 (CET)
Any hint on what's going on here?
The name of the thing is not the thing. You don't want the
symbol ‘global-abbrev-table’, you want the object that that
symbol references. See ‘interactive’ form, specifically ‘X’.
--
Thien-Thi Nguyen -----------------------------------------------
(defun responsep (query) ; (2021) Software Libero
(pcase (context query) ; = Dissenso Etico
(`(technical ,ml) (correctp ml))
...)) 748E A0E8 1CB8 A748 9BFA
--------------------------------------- 6CE4 6703 2224 4C80 7502
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 215 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-03 20:54 Converting string to symbol excalamus--- via Users list for the GNU Emacs text editor
2021-01-03 21:25 ` Thien-Thi Nguyen
@ 2021-01-04 6:25 ` Andreas Röhler
2021-01-04 6:32 ` Stefan Monnier
1 sibling, 1 reply; 7+ messages in thread
From: Andreas Röhler @ 2021-01-04 6:25 UTC (permalink / raw)
To: help-gnu-emacs
On 03.01.21 21:54, excalamus--- via Users list for the GNU Emacs text
editor wrote:
> Hi,
>
> I want to define a global abbrev with case-fixed property t.
AFAIK Emacs never was able to store and use case-fixed abbreviations.
For example function add-abbrev closes with the following:
(define-abbrev table (downcase name) exp)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-04 6:25 ` Andreas Röhler
@ 2021-01-04 6:32 ` Stefan Monnier
0 siblings, 0 replies; 7+ messages in thread
From: Stefan Monnier @ 2021-01-04 6:32 UTC (permalink / raw)
To: help-gnu-emacs
> AFAIK Emacs never was able to store and use case-fixed abbreviations.
Where "never" means "not before Emacs-24"?
Stefan
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-03 21:25 ` Thien-Thi Nguyen
@ 2021-01-05 4:04 ` excalamus--- via Users list for the GNU Emacs text editor
2021-01-05 4:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-01-06 2:51 ` excalamus--- via Users list for the GNU Emacs text editor
0 siblings, 2 replies; 7+ messages in thread
From: excalamus--- via Users list for the GNU Emacs text editor @ 2021-01-05 4:04 UTC (permalink / raw)
To: Thien-Thi Nguyen; +Cc: Help Gnu Emacs
I see, thank you very much.
Ideally, I would like global-abbrev-table to be the default. With (interactive X...) I don't see how to do that.
When I run M-x my-test <RET>, I get read--expression: End of file during parsing. The function halts immediately and doesn't evaluate the body. I'm not sure how I could catch that.
(defun my-test (expr)
"test interactive X behavior."
(interactive "XLisp expression: ")
(message "before compare") (if expr
(message "%s" expr)
(message "is nil"))
(message "after compare"))
I assume read--expression is being used within (interactive X...). It's not documented and I didn't have much luck trying to use it (not detailing those efforts here since it's really not meant for "public" use).
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-05 4:04 ` excalamus--- via Users list for the GNU Emacs text editor
@ 2021-01-05 4:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-01-06 2:51 ` excalamus--- via Users list for the GNU Emacs text editor
1 sibling, 0 replies; 7+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-01-05 4:44 UTC (permalink / raw)
To: help-gnu-emacs
excalamus wrote:
> When I run M-x my-test <RET>, I get read--expression: End of
> file during parsing. The function halts immediately and
> doesn't evaluate the body. I'm not sure how I could
> catch that.
>
> (defun my-test (expr)
> "test interactive X behavior."
> (interactive "XLisp expression: ")
> (message "before compare") (if expr
> (message "%s" expr)
> (message "is nil"))
> (message "after compare"))
>
> I assume read--expression is being used within (interactive
> X...). It's not documented and I didn't have much luck
> trying to use it (not detailing those efforts here since
> it's really not meant for "public" use).
I don't understand a lot but
(defun print-lisp (expr)
(interactive "xlisp: ")
(message "lisp: %s" expr) )
M-x print-lisp RET (+ 1 1) RET
"lisp: (+ 1 1)"
--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Converting string to symbol
2021-01-05 4:04 ` excalamus--- via Users list for the GNU Emacs text editor
2021-01-05 4:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-01-06 2:51 ` excalamus--- via Users list for the GNU Emacs text editor
1 sibling, 0 replies; 7+ messages in thread
From: excalamus--- via Users list for the GNU Emacs text editor @ 2021-01-06 2:51 UTC (permalink / raw)
To: Thien-Thi Nguyen; +Cc: Help Gnu Emacs
I got it. Simply grab the symbol's value once it's been interned. Thanks again for your help :)
(defun my-add-case-fixed-abbrev (name expansion &optional table)
"Add fixed case abbrev with NAME and EXPANSION into TABLE.
TABLE is optional; defaults to `global-abbrev-table'."
(interactive
(let ((table (symbol-value (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)))
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-01-06 2:51 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-03 20:54 Converting string to symbol excalamus--- via Users list for the GNU Emacs text editor
2021-01-03 21:25 ` Thien-Thi Nguyen
2021-01-05 4:04 ` excalamus--- via Users list for the GNU Emacs text editor
2021-01-05 4:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-01-06 2:51 ` excalamus--- via Users list for the GNU Emacs text editor
2021-01-04 6:25 ` Andreas Röhler
2021-01-04 6:32 ` Stefan Monnier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).