Commit 158a703e authored by David Byers's avatar David Byers
Browse files

Fixed bug 708, problem wth re-joining conferences. Sped up text lists. Fixed...

Fixed bug 708, problem wth re-joining conferences. Sped up text lists. Fixed problems with fix for bug 409. Improve error reporting from callbacks.

Detailed changes:
> 2003-07-21  David Byers  <byers@lysator.liu.se>
>
> 	Fix bug 708:
> 	* flags.el (lyskom-flag-global-variable-from-common): New function.
> 	(lyskom-flag-global-variable-from-elisp): New function.
> 	(lyskom-flag-write-boolean): New function.
> 	(lyskom-flag-read-boolean): New function.
> 	(lyskom-flag-write-symbol-list): New function.
> 	(lyskom-flag-read-symbol-list): New function.
> 	(lyskom-flag-read-from-string): New function.
>
2a14,69
> 	Fix bug 708:
> 	* language.el (lyskom-first-available-language): New function.
> 	(lyskom-set-language): Use it to support setting language from a
> 	list.
>
> 	* startup.el (kom-start-anew): Use lyskom-first-available-language
> 	when dealing with kom-default-language.
>
> 	* defvar.el (def-kom-var): Added support for common flag. Use
> 	lyskom-global-variables instead of the old stuff. Added support
> 	for transition flag.
> 	(lyskom-global-variables): New variable.
> 	(lyskom-transition-variables): New variable.
>
> 	* check-strings.el (lcs-check-customize-variables): Handle new
> 	lyskom-global-variables.
>
> 	* flags.el (lyskom-set-var-from-string): Added type parameter.
> 	(lyskom-maybe-set-var-from-string): Ditto.
> 	(lyskom-save-options): Use lyskom-global-variables, not the old
> 	stuff.
> 	(lyskom-maybe-set-var-from-string): Require that variable is a
> 	symbol, not a string.
> 	(lyskom-set-var-from-string): Ditto.
>
> 	* vars.el.in (lyskom-global-boolean-variables): Removed.
> 	(lyskom-global-non-boolean-variables): Removed.
> 	(lyskom-global-variable-types): New variable.
>
> 	Fix bugs adding self to conferences:
> 	* commands1.el (kom-add-self): Handle re-joining passive
> 	conferences and conferences with invitations (how did this slip
> 	through).
>
> 	Make text-list operations more constant-time:
> 	* komtypes.el (text-list->append): Use the tail field to make this
> 	a constant time operation.
> 	(text-list->delq): Support the tail field.
> 	(text-list->trim-head): Ditto.
> 	(set-text-list->texts): Ditto.
> 	(text-list): Added tail field.
> 	(text-list): Added length-internal field.
> 	(text-list->length): Wrapper for length-internal.
> 	(text-list->delq): Handle length-internal.
> 	(text-list->append): Ditto.
> 	(text-list->trim-head): Ditto.
>
> 	Fix for fix of bug 409:
> 	* komtypes.el (text-mapping->remove-local): Fixed bug that made
> 	clearing local no in a dense map impossible.
>
> 	Better error reporting:
> 	* parse.el (lyskom-parse-unparsed): Do not catch non-protocol
> 	errors. This finally allows us to get decent backtraces even for
> 	errors in callbacks.
>
parent 376b5225
2003-07-21 David Byers <byers@lysator.liu.se>
Fix bug 708:
* flags.el (lyskom-flag-global-variable-from-common): New function.
(lyskom-flag-global-variable-from-elisp): New function.
(lyskom-flag-write-boolean): New function.
(lyskom-flag-read-boolean): New function.
(lyskom-flag-write-symbol-list): New function.
(lyskom-flag-read-symbol-list): New function.
(lyskom-flag-read-from-string): New function.
2003-07-20 David Byers <byers@lysator.liu.se>
Fix bug 708:
* language.el (lyskom-first-available-language): New function.
(lyskom-set-language): Use it to support setting language from a
list.
* startup.el (kom-start-anew): Use lyskom-first-available-language
when dealing with kom-default-language.
* defvar.el (def-kom-var): Added support for common flag. Use
lyskom-global-variables instead of the old stuff. Added support
for transition flag.
(lyskom-global-variables): New variable.
(lyskom-transition-variables): New variable.
* check-strings.el (lcs-check-customize-variables): Handle new
lyskom-global-variables.
* flags.el (lyskom-set-var-from-string): Added type parameter.
(lyskom-maybe-set-var-from-string): Ditto.
(lyskom-save-options): Use lyskom-global-variables, not the old
stuff.
(lyskom-maybe-set-var-from-string): Require that variable is a
symbol, not a string.
(lyskom-set-var-from-string): Ditto.
* vars.el.in (lyskom-global-boolean-variables): Removed.
(lyskom-global-non-boolean-variables): Removed.
(lyskom-global-variable-types): New variable.
Fix bugs adding self to conferences:
* commands1.el (kom-add-self): Handle re-joining passive
conferences and conferences with invitations (how did this slip
through).
Make text-list operations more constant-time:
* komtypes.el (text-list->append): Use the tail field to make this
a constant time operation.
(text-list->delq): Support the tail field.
(text-list->trim-head): Ditto.
(set-text-list->texts): Ditto.
(text-list): Added tail field.
(text-list): Added length-internal field.
(text-list->length): Wrapper for length-internal.
(text-list->delq): Handle length-internal.
(text-list->append): Ditto.
(text-list->trim-head): Ditto.
Fix for fix of bug 409:
* komtypes.el (text-mapping->remove-local): Fixed bug that made
clearing local no in a dense map impossible.
Better error reporting:
* parse.el (lyskom-parse-unparsed): Do not catch non-protocol
errors. This finally allows us to get decent backtraces even for
errors in callbacks.
Fix bug 409 (use local-to-global):
* prefetch.el (lyskom-fetch-start-of-map): Use text-mapping
instead of map.
......@@ -559,7 +626,6 @@
2003-02-09 David Byers <byers@lysator.liu.se>
* lyskom-buttons.el (lyskom-generate-button): Use
kom-highlight-conferences instead of kom-friends and kom-morons.
......
......@@ -264,8 +264,8 @@ Check that all server-stored variables are customizeable."
lyskom-customize-buffer-format)))
(cust-vars-widgets (mapcar 'car lyskom-custom-variables))
(cust-vars-all (append lyskom-elisp-variables
lyskom-global-boolean-variables
lyskom-global-non-boolean-variables)))
(mapcar (lambda (x) (elt x 1))
lyskom-global-variables))))
;; Check that variables have widget definitions and are in the
;; customize buffer, or are declared missing and really *are*
......
......@@ -552,38 +552,53 @@ See `kom-membership-default-priority' and
(let* ((whereto (if conf (blocking-do 'get-conf-stat conf)
(lyskom-read-conf-stat
(lyskom-get-string 'where-to-add-self)
'(all) nil "" t))))
(if (lyskom-is-member (conf-stat->conf-no whereto)
lyskom-pers-no)
(lyskom-format-insert 'you-already-member whereto)
(let* ((who (blocking-do 'get-conf-stat lyskom-pers-no))
(pers-stat (blocking-do 'get-pers-stat lyskom-pers-no))
(mship (lyskom-get-membership (conf-stat->conf-no whereto) t))
(no-of-unread
(unless (and mship (not (membership-type->passive
(membership->type mship))))
(lyskom-read-num-range-or-date
0
(conf-stat->no-of-texts whereto)
(lyskom-format 'initial-unread)
nil
t
nil)))
(kom-membership-default-priority
(if (and mship (membership-type->passive (membership->type mship)))
(membership->priority mship)
kom-membership-default-priority)))
(lyskom-add-member-answer (lyskom-try-add-member whereto
who
pers-stat
nil
nil
t
nil
no-of-unread)
whereto who
no-of-unread)))))
'(all) nil "" t)))
(mship (lyskom-is-member (conf-stat->conf-no whereto)
lyskom-pers-no)))
(cond ((and mship (membership-type->passive
(membership->type mship)))
(set-membership-type->passive (membership->type mship) nil)
(blocking-do 'set-membership-type
lyskom-pers-no
(conf-stat->conf-no whereto)
(membership->type mship))
(lyskom-format-insert 'activate-mship-done whereto)
(lyskom-fetch-start-of-map whereto mship))
((and mship (not (membership-type->invitation
(membership->type mship))))
(lyskom-format-insert 'you-already-member whereto))
(t
(let* ((who (blocking-do 'get-conf-stat lyskom-pers-no))
(pers-stat (blocking-do 'get-pers-stat lyskom-pers-no))
(mship (lyskom-get-membership (conf-stat->conf-no whereto) t))
(no-of-unread
(unless (and mship (not (membership-type->passive
(membership->type mship))))
(lyskom-read-num-range-or-date
0
(conf-stat->no-of-texts whereto)
(lyskom-format 'initial-unread)
nil
t
nil)))
(kom-membership-default-priority
(if (and mship (membership-type->passive (membership->type mship)))
(membership->priority mship)
kom-membership-default-priority)))
(lyskom-add-member-answer (lyskom-try-add-member whereto
who
pers-stat
nil
nil
t
nil
no-of-unread)
whereto who
no-of-unread))))))
(def-kom-command kom-change-priority (&optional conf)
......
......@@ -59,6 +59,10 @@
"Tells the client what flags and hooks that are to be saved in the server.
These are the flags that are saved in the elisp-client part of the server.")
(defvar lyskom-transition-variables nil
"Tells the client what variables are not to be saved in the server, but
are to be read from the server. This is for transitioning.")
(defvar lyskom-minibuffer-variables nil
"These are variables that should be set in the minibuffer by
lyskom-with-lyskom-minibuffer.")
......@@ -66,6 +70,11 @@ lyskom-with-lyskom-minibuffer.")
(defvar lyskom-minibuffer-values nil
"Dynamic binding of values that minibuffer variables are to take on")
(defvar lyskom-global-variables nil
"List of flags that are to be saved as booleans in the common block.
Don't change these. They are defined by the protocol.")
(defmacro lyskom-save-variables (var-list &rest forms)
"Save the values and property list of symbols in VAR-LIST and execute FORMS
......@@ -143,6 +152,7 @@ language-force A language-variable whose value is to be forced."
(let ((inherited nil)
(protected nil)
(elisp-block nil)
(transition-block nil)
(buffer-local nil)
(widget-spec nil)
(doc-string nil)
......@@ -165,14 +175,27 @@ language-force A language-variable whose value is to be forced."
(cond ((eq (car arglist) 'server)
(setq local-var-doc t server-doc t)
(setq elisp-block
(` ((if (and (not (memq (quote (, name))
lyskom-global-boolean-variables))
(not (memq (quote (, name))
lyskom-global-non-boolean-variables)))
(add-to-list 'lyskom-elisp-variables
(quote (, name))))
(add-to-list 'lyskom-local-variables
(quote (, name)))))))
`((add-to-list 'lyskom-elisp-variables ', name)
(add-to-list 'lyskom-local-variables ', name))))
((eq (car arglist) 'common)
(setq local-var-doc t server-doc t)
(let ((common-name (car (cdr arglist)))
(type (car (cdr (cdr arglist)))))
(setq arglist (cdr (cdr arglist)))
(setq elisp-block
`((add-to-list 'lyskom-local-variables ',name)
(add-to-list 'lyskom-global-variables
(vector ',common-name ',name ',type))))))
((eq (car arglist) 'transition)
(let ((converter (car (cdr arglist))))
(setq arglist (cdr arglist))
(setq local-var-doc t server-doc t)
(setq transition-block
`((add-to-list 'lyskom-transition-variables
'(,name . ,converter))
(add-to-list 'lyskom-local-variables ',name)))))
((eq (car arglist) 'server-hook)
(setq local-hook-doc t server-doc t)
......@@ -260,6 +283,7 @@ it using setq or defvar.")))
(list inherited
protected
elisp-block
transition-block
buffer-local
minibuffer
widget-spec
......
......@@ -477,6 +477,7 @@ and you have finished reading. Please come back later.
(exclude-from . "Removing %#1P from %#2M...")
(unsubscribe-failed . "\nDidn't work. Perhaps %#1P isn't a member of %#2M?\n")
(activate-mship-done . "Activated passive membership of %#1M.\n")
(passivate-done . "You are now a passive member of %#1M.
Leave the conference again to unsubscribe completely.\n")
......@@ -2932,6 +2933,7 @@ Select whether to execute command or keyboard macro.")
(highlight-conflist . "Conference list")
(yes-dont-pop . "Yes, but don't uniconify frames")
(language . "Language")
;;
;; Misc doc strings
......@@ -3594,7 +3596,8 @@ up menus.")
(kom-default-language-doc . "\
Default language to use in LysKOM. If you change this setting the new
language will not be applied to the current setting. Use the Change
language command to do that.")
language command to do that. The first langauge in the list will be used
in all clients that support this function.")
(kom-ispell-dictionary-doc . "\
This specifies the dictionary ispell is to use for spell checking. If set
......@@ -4098,7 +4101,7 @@ up menus.")
(kom-remote-controllers-tag . "People allowed to use remove commands:")
(kom-customize-format-tag . "Show documentation for all settings:")
(kom-default-language-tag . "Default language:")
(kom-default-language-tag . "Language list:")
(kom-show-namedays-tag . "Show today's names:")
(kom-ispell-dictionary-tag . "Spelling dictionary:")
......
......@@ -117,20 +117,18 @@ settings and save them to your emacs init file."
(let* ((print-readably t)
(common-block
(concat
(mapconcat (function
(lambda (var)
(lyskom-format-objects
(substring (symbol-name var) 4)
(if (symbol-value var) "1" "0"))))
lyskom-global-boolean-variables
"\n")
"\n"
(mapconcat (function
(lambda (var)
(lyskom-format-objects
(substring (symbol-name var) 4)
(lyskom-flag-value-to-string var))))
lyskom-global-non-boolean-variables
(mapconcat (lambda (var)
(let ((common-name (elt var 0))
(elisp-name (elt var 1))
(type (elt var 2)))
(lyskom-format-objects
(symbol-name common-name)
(funcall
(cdr (assq 'write
(cdr (assq (or type t)
lyskom-global-variable-types))))
(symbol-value elisp-name)))))
lyskom-global-variables
"\n")
))
(elisp-block
......@@ -281,35 +279,36 @@ Returns a list of variables that were ignored."
;; cannot be performed with '=.
((equal r common-no)
(let ((lyskom-options-text working)
name gname value)
spec name value)
(while (> (length lyskom-options-text) 2)
(setq gname (lyskom-read-options-eval-get-holerith))
(setq name (intern (lyskom-read-options-eval-get-holerith)))
(setq value (lyskom-read-options-eval-get-holerith))
(setq name (concat "kom-" gname))
(if (memq (intern-soft name) lyskom-global-boolean-variables)
(if (string= value "1")
(setq value "t")
(setq value "nil"))
(if (memq (intern-soft name)
lyskom-global-non-boolean-variables)
nil
(setq name (concat "UNK-" gname))
(setq lyskom-global-non-boolean-variables
(cons name lyskom-global-non-boolean-variables))))
(unless (lyskom-maybe-set-var-from-string name value)
(setq spec
(cond ((lyskom-flag-global-variable-from-common name))
(t (let ((tmp (vector name
(intern (format "lyskom-UNK-%S" name))
nil)))
(setq lyskom-global-variables
(cons tmp lyskom-global-variables))
tmp))))
(unless (lyskom-maybe-set-var-from-string (elt spec 1) value (elt spec 2))
(setq ignored-user-area-vars
(cons (intern gname) ignored-user-area-vars))))))
(cons (elt spec 1) ignored-user-area-vars))))))
;; Note that elisp-no may be nil here, so the comparison
;; cannot be performed with '=.
((equal r elisp-no)
(let ((lyskom-options-text working)
name value)
(while (> (length lyskom-options-text) 2)
(setq name (lyskom-read-options-eval-get-holerith))
(setq name (intern (lyskom-read-options-eval-get-holerith)))
(setq value (lyskom-read-options-eval-get-holerith))
(unless (lyskom-maybe-set-var-from-string name value)
(if (lyskom-maybe-set-var-from-string name value)
(when (functionp (cdr (assq name lyskom-transition-variables)))
(set name (funcall (cdr (assq name lyskom-transition-variables))
(symbol-value name))))
(setq ignored-user-area-vars
(cons (intern name) ignored-user-area-vars))))))
(cons name ignored-user-area-vars))))))
(t
(let ((pos lyskom-other-clients-user-areas))
(while (and pos
......@@ -401,29 +400,31 @@ If optional NO-CODING is set, assume the string has internal coding."
(cons (decode-coding-string name coding) string)
(error (cons name string)))))))
(defun lyskom-maybe-set-var-from-string (var string)
(defun lyskom-maybe-set-var-from-string (var string &optional type)
"This is a wrapper around lyskom-set-var-from-string that does nothing
if the variable is in kom-dont-read-saved-variables.
Return non-nil if the variable shouldn't have been set in the first place."
(cond ((eq kom-dont-read-saved-variables t) t)
((memq (intern var) kom-dont-read-saved-variables) t)
((not (or (memq (intern var) lyskom-elisp-variables)
(memq (intern var) lyskom-global-non-boolean-variables)
(memq (intern var) lyskom-global-boolean-variables))) nil)
(t (lyskom-set-var-from-string var string) t)))
((memq var kom-dont-read-saved-variables) t)
((not (or (memq var lyskom-elisp-variables)
(assq var lyskom-transition-variables)
(lyskom-flag-global-variable-from-elisp var))) nil)
(t (lyskom-set-var-from-string var string type) t)))
(defun lyskom-set-var-from-string (var string)
(defun lyskom-set-var-from-string (var string &optional type)
"This is a wrapper aroud read-from-string.
It returns nil, and writes a message when an error occurs."
(set (intern var)
(car
(condition-case nil
(read-from-string string)
(invalid-read-syntax
(lyskom-format-insert (lyskom-get-string 'error-in-options)
var string)
nil)))))
(set var (condition-case nil
(funcall
(cdr (assq 'read
(cdr (assq (or type t)
lyskom-global-variable-types))))
string)
(error
(lyskom-format-insert (lyskom-get-string 'error-in-options)
var string)
nil))))
(defun lyskom-flag-value-to-string (symbol)
......@@ -436,3 +437,34 @@ It returns nil, and writes a message when an error occurs."
nil))
kom-permanent-filter-list)))
(t (prin1-to-string (symbol-value symbol)))))
(defun lyskom-flag-global-variable-from-common (var)
"Return the element from lyskom-global-variables corresponding to VAR."
(lyskom-traverse el lyskom-global-variables
(when (eq (aref el 0) var)
(lyskom-traverse-break el))))
(defun lyskom-flag-global-variable-from-elisp (var)
"Return the element from lyskom-global-variables corresponding to
elisp variable VAR."
(lyskom-traverse el lyskom-global-variables
(when (eq (aref el 1) var)
(lyskom-traverse-break el))))
(defun lyskom-flag-write-boolean (val)
(if val "1" "0"))
(defun lyskom-flag-read-boolean (str)
(string= "1" str))
(defun lyskom-flag-write-symbol-list (val)
(cond ((symbolp val)
(lyskom-format-objects (symbol-name val)))
(t (mapcar (lambda (x) (lyskom-format-objects (symbol-name x))) val))))
(defun lyskom-flag-read-symbol-list (str)
(mapcar 'intern (lyskom-get-holerith-list str)))
(defun lyskom-flag-read-from-string (str)
(car (read-from-string str)))
......@@ -68,7 +68,7 @@ Optional FLAGS are additional modifiers.
If :nil-safe is included, then calling accessors on nil object will
return nil and not signal an error.
If :constructor-hook HOOK is included, HOOK will be inserted into the
If :create-hook HOOK is included, HOOK will be inserted into the
constructor function. When HOOK is evaluated, OBJECT (uppercase) is
bound to the newly created object. It may be modified.
"
......@@ -79,13 +79,13 @@ bound to the newly created object. It may be modified.
(access-method 'aref)
(type-sym (intern (upcase (symbol-name type))))
(constructor-body nil)
(constructor-hook nil))
(create-hook nil))
(while flags
(cond ((eq (car flags) ':nil-safe) (setq access-method 'elt))
((eq (car flags) ':constructor-hook)
((eq (car flags) ':create-hook)
(setq flags (cdr flags))
(setq constructor-hook (car flags))))
(setq create-hook (car flags))))
(setq flags (cdr flags)))
;; Create constructor
......@@ -106,10 +106,10 @@ bound to the newly created object. It may be modified.
))
args)))))
(when constructor-hook
(when create-hook
(setq constructor-body
`(let ((OBJECT ,constructor-body))
,constructor-hook
,create-hook
OBJECT)))
(setq constructor
......@@ -606,7 +606,7 @@ The MAPS must be consecutive. No gaps or overlaps are currently allowed."
(setq local (- local (text-mapping->range-begin map)))
(when (and (>= local 0)
(< local (text-mapping->block-size map)))
(aset local (map->text-nos (text-mapping->block map)) 0)))
(aset (map->text-nos (text-mapping->block map)) local 0)))
((eq (text-mapping->type map) 'sparse)
(let ((el (assq local (text-mapping->block map))))
......@@ -618,7 +618,7 @@ The MAPS must be consecutive. No gaps or overlaps are currently allowed."
((map :read-only t)
(next-value :automatic nil)
(state :automatic nil))
:constructor-hook (text-mapping-iterator->init OBJECT))
:create-hook (text-mapping-iterator->init OBJECT))
(defun text-mapping->iterator (map)
(lyskom-create-text-mapping-iterator map))
......@@ -708,33 +708,64 @@ The MAPS must be consecutive. No gaps or overlaps are currently allowed."
;;; Constructor:
(def-komtype text-list (texts)
(def-komtype text-list
(texts-internal
(tail :automatic (last texts-internal))
(length-internal :automatic (length texts-internal)))
:nil-safe)
(defsubst text-list->texts (text-list)
(text-list->texts-internal text-list))
(defsubst set-text-list->texts (text-list texts)
(set-text-list->texts-internal text-list texts)
(set-text-list->tail text-list (last texts))
(set-text-list->length-internal text-list (length texts)))
(defsubst text-list->empty (text-list)
"Return t if TEXT-LIST is empty."
(null (text-list->texts text-list)))
(defsubst text-list->length (text-list)
"Return the length of TEXT-LIST."
(length (text-list->texts text-list)))
(unless (text-list->length-internal text-list)
(set-text-list->length-internal text-list
(length (text-list->texts text-list))))
(text-list->length-internal text-list))
(defsubst text-list->delq (text-list no)
"Remove text NO from TEXT-LIST."
(set-text-list->texts text-list
(delq no (text-list->texts text-list))))
(set-text-list->texts-internal text-list (delq no (text-list->texts text-list)))
(when (eq no (car (text-list->tail text-list)))
(set-text-list->tail text-list (last (text-list->texts text-list))))
(set-text-list->length-internal text-list nil))
(defsubst text-list->append (text-list texts)
"Destructively append TEXTS to the end of TEXT-LIST."
(set-text-list->texts text-list
(nconc (text-list->texts text-list)
texts)))
(if (text-list->texts text-list)
(progn
(nconc (or (text-list->tail text-list)
(text-list->texts-internal text-list))
texts)
(when (text-list->length-internal text-list)
(set-text-list->length-internal
text-list
(+ (text-list->length-internal text-list)
(length texts)))))
(set-text-list->texts-internal text-list texts)
(set-text-list->length-internal text-list nil))
(set-text-list->tail text-list (last texts)))
(defun text-list->trim-head (tlist n)
"Destructively remove all but the N last elements from TLIST.
Do nothing if the TLIST is less than N elements long."
(set-text-list->texts tlist (nthcdr (max (- (text-list->length tlist) n) 0)
(text-list->texts tlist))))
(set-text-list->texts-internal tlist (nthcdr (max (- (text-list->length tlist) n) 0)
(text-list->texts tlist)))
(when (text-list->length-internal tlist)
(set-text-list->length-internal tlist (- (text-list->length-internal tlist) n)))
(unless (text-list->texts tlist)
(set-text-list->length-internal tlist 0)
(set-text-list->tail tlist nil)))
;;; ================================================================
......
......@@ -280,6 +280,8 @@ if 'lyskom-menu is not found."
(defun lyskom-set-language (language scope)
"Set the current language to LANGUAGE.
Returns non-nil on success and nil on failure."
(when (listp language)
(setq language (lyskom-first-available-language language)))
(cond ((not (assq language lyskom-languages))
(lyskom-format-insert-before-prompt 'language-not-loaded
(lyskom-language-name language))
......@@ -296,6 +298,13 @@ Returns non-nil on success and nil on failure."
(lyskom-update-command-completion)
t)))
(defun lyskom-first-available-language (langs)
"Return the first language in LANGS that is supported."
(or (lyskom-traverse el (if (listp langs) langs (list langs))
(when (assq el lyskom-languages)
(lyskom-traverse-break el)))
(car (car lyskom-languages))))
(eval-and-compile (provide 'lyskom-language))
;;; language.el ends here
......@@ -326,8 +326,7 @@ customize buffer but do not save them to the server."
(set-default (car (car tmp)) (widget-value (cdr (car tmp))))
(when (and (listp kom-dont-read-saved-variables)
(or (memq (car (car tmp)) lyskom-elisp-variables)
(memq (car (car tmp)) lyskom-global-boolean-variables)
(memq (car (car tmp)) lyskom-global-non-boolean-variables)))
(lyskom-flag-global-variable-from-elisp (car (car tmp)))))
(setq kom-dont-read-saved-variables
(cons (car (car tmp)) kom-dont-read-saved-variables))))
(setq tmp (cdr tmp))))))
......@@ -350,8 +349,7 @@ customize buffer but do not save them to the server."