2011-07-28

emacs lisp. looking for rassoc-default

2011-07-13

emacs lisp. Is there a rassoc-default for getting ALL elements matching a VALUE?

emas lisp. Is there a rassoc-default function? i.e. similar to assoc-default but get all items of a alist of a give value.

i want to be able to properly setup cperl-mode to load instead of perl-mode. Here's detail.

easy way is just
(defalias 'perl-mode 'cperl-mode)

but the problem with that is you can't call perl-mode anymore, if you still want it on occasion.

So, i went to set the auto-mode-alist. Like this:

(setq auto-mode-alist (rassq-delete-all 'perl-mode auto-mode-alist))
(add-to-list 'auto-mode-alist '("\\.\\([pP]\\([Llm]\\|erl\\|od\\)\\|al\\)\\'" . cperl-mode))

but that's not all, because there's also interpreter-mode-alist. So i wrote:

(when
(rassoc 'perl-mode interpreter-mode-alist)
(let ((mykey (car (rassoc 'perl-mode interpreter-mode-alist)) ))
(setq interpreter-mode-alist (rassq-delete-all 'perl-mode interpreter-mode-alist))
(add-to-list 'interpreter-mode-alist (mykey . 'cperl-mode))
)
)

but i discovered there are actually several elements for perl in that alist:

("perl" . perl-mode)
("perl5" . perl-mode)
("miniperl" . perl-mode)

So my code above won't work. One slightly sloppy way to do it is simply do this:

(setq interpreter-mode-alist (rassq-delete-all 'perl-mode interpreter-mode-alist))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))

but a more proper way is to query for the value 'perl-mode, get *ALL* results, then remove them all, then add them all back with 'cperl-mode.

Ι found the function “assoc-default”, which gets all elements by KEY, not value.

so, my question is, is there a “rassoc-default” that gets by value? Or, is there any simpler proper way to setup cperl-mode instead of perl-mode?

Thanks.

Xah

No comments:

Post a Comment