Function: erc--assemble-toggle

erc--assemble-toggle is a byte-compiled function defined in erc-common.el.gz.

Signature

(erc--assemble-toggle LOCALP NAME ABLSYM MODE VAL BODY)

Source Code

;; Defined in /usr/src/emacs/lisp/erc/erc-common.el.gz
(defun erc--assemble-toggle (localp name ablsym mode val body)
  (let ((arg (make-symbol "arg")))
    `(defun ,ablsym ,(if localp `(&optional ,arg) '())
       ,(erc--fill-module-docstring
         (if val "Enable" "Disable")
         " ERC " (symbol-name name) " mode" (and localp " locally") "."
         (when localp
           (concat "\nWhen called interactively,"
                   " do so in all buffers for the current connection.")))
       (interactive ,@(when localp '("p")))
       ,@(if localp
             `((when (derived-mode-p 'erc-mode)
                 (if ,arg
                     (erc-with-all-buffers-of-server erc-server-process nil
                       (,ablsym))
                   (setq ,mode ,val)
                   ,@body)))
           ;; No need for `default-value', etc. because a buffer-local
           ;; `erc-modules' only influences the next session and
           ;; doesn't survive the major-mode reset that soon follows.
           `((unless
                 (or erc--inside-mode-toggle-p
                     ,@(let ((v `(memq ',(erc--normalize-module-symbol name)
                                       erc-modules)))
                         `(,(if val v `(not ,v)))))
               (let ((erc--inside-mode-toggle-p t))
                 (erc--favor-changed-reverted-modules-state
                  ',name #',(if val 'cons 'delq))))
             (setq ,mode ,val)
             ,@body)))))