diff options
| author | Lars Ingebrigtsen | 2021-07-22 00:21:34 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2021-07-22 00:21:34 +0200 |
| commit | a82855732019622ebe1cfac9055d84366f3608f2 (patch) | |
| tree | a9b361d10d57fbb4874b69851aa348b1918f5671 | |
| parent | 38a62efc15ddd849219ef1bdc98da933b5b1c33c (diff) | |
| download | emacs-a82855732019622ebe1cfac9055d84366f3608f2.tar.gz emacs-a82855732019622ebe1cfac9055d84366f3608f2.zip | |
Move generalized variable specs from cl-lib.el to gv.el
* lisp/emacs-lisp/cl-lib.el: Move all the generalized variable
specifications from cl-lib.el...
* lisp/emacs-lisp/gv.el: ... to gv.el. This will make things like
`(setf (getenv "FOO") "BAR")' work without requiring anything,
since `setf' lives in gv.el (bug#49651).
| -rw-r--r-- | lisp/emacs-lisp/cl-lib.el | 105 | ||||
| -rw-r--r-- | lisp/emacs-lisp/gv.el | 100 |
2 files changed, 100 insertions, 105 deletions
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 7f7eb963423..317a4c62309 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el | |||
| @@ -515,111 +515,6 @@ the process stops as soon as KEYS or VALUES run out. | |||
| 515 | If ALIST is non-nil, the new pairs are prepended to it." | 515 | If ALIST is non-nil, the new pairs are prepended to it." |
| 516 | (nconc (cl-mapcar 'cons keys values) alist)) | 516 | (nconc (cl-mapcar 'cons keys values) alist)) |
| 517 | 517 | ||
| 518 | ;;; Generalized variables. | ||
| 519 | |||
| 520 | ;; These used to be in cl-macs.el since all macros that use them (like setf) | ||
| 521 | ;; were autoloaded from cl-macs.el. But now that setf, push, and pop are in | ||
| 522 | ;; core Elisp, they need to either be right here or be autoloaded via | ||
| 523 | ;; cl-loaddefs.el, which is more trouble than it is worth. | ||
| 524 | |||
| 525 | ;; Some more Emacs-related place types. | ||
| 526 | (gv-define-simple-setter buffer-file-name set-visited-file-name t) | ||
| 527 | (gv-define-setter buffer-modified-p (flag &optional buf) | ||
| 528 | (macroexp-let2 nil buffer `(or ,buf (current-buffer)) | ||
| 529 | `(with-current-buffer ,buffer | ||
| 530 | (set-buffer-modified-p ,flag)))) | ||
| 531 | (gv-define-simple-setter buffer-name rename-buffer t) | ||
| 532 | (gv-define-setter buffer-string (store) | ||
| 533 | `(insert (prog1 ,store (erase-buffer)))) | ||
| 534 | (gv-define-simple-setter buffer-substring cl--set-buffer-substring) | ||
| 535 | (gv-define-simple-setter current-buffer set-buffer) | ||
| 536 | (gv-define-simple-setter current-column move-to-column t) | ||
| 537 | (gv-define-simple-setter current-global-map use-global-map t) | ||
| 538 | (gv-define-setter current-input-mode (store) | ||
| 539 | `(progn (apply #'set-input-mode ,store) ,store)) | ||
| 540 | (gv-define-simple-setter current-local-map use-local-map t) | ||
| 541 | (gv-define-simple-setter current-window-configuration | ||
| 542 | set-window-configuration t) | ||
| 543 | (gv-define-simple-setter default-file-modes set-default-file-modes t) | ||
| 544 | (gv-define-simple-setter documentation-property put) | ||
| 545 | (gv-define-setter face-background (x f &optional s) | ||
| 546 | `(set-face-background ,f ,x ,s)) | ||
| 547 | (gv-define-setter face-background-pixmap (x f &optional s) | ||
| 548 | `(set-face-background-pixmap ,f ,x ,s)) | ||
| 549 | (gv-define-setter face-font (x f &optional s) `(set-face-font ,f ,x ,s)) | ||
| 550 | (gv-define-setter face-foreground (x f &optional s) | ||
| 551 | `(set-face-foreground ,f ,x ,s)) | ||
| 552 | (gv-define-setter face-underline-p (x f &optional s) | ||
| 553 | `(set-face-underline ,f ,x ,s)) | ||
| 554 | (gv-define-simple-setter file-modes set-file-modes t) | ||
| 555 | (gv-define-setter frame-height (x &optional frame) | ||
| 556 | `(set-frame-height (or ,frame (selected-frame)) ,x)) | ||
| 557 | (gv-define-simple-setter frame-parameters modify-frame-parameters t) | ||
| 558 | (gv-define-simple-setter frame-visible-p cl--set-frame-visible-p) | ||
| 559 | (gv-define-setter frame-width (x &optional frame) | ||
| 560 | `(set-frame-width (or ,frame (selected-frame)) ,x)) | ||
| 561 | (gv-define-simple-setter getenv setenv t) | ||
| 562 | (gv-define-simple-setter get-register set-register) | ||
| 563 | (gv-define-simple-setter global-key-binding global-set-key) | ||
| 564 | (gv-define-simple-setter local-key-binding local-set-key) | ||
| 565 | (gv-define-simple-setter mark set-mark t) | ||
| 566 | (gv-define-simple-setter mark-marker set-mark t) | ||
| 567 | (gv-define-simple-setter marker-position set-marker t) | ||
| 568 | (gv-define-setter mouse-position (store scr) | ||
| 569 | `(set-mouse-position ,scr (car ,store) (cadr ,store) | ||
| 570 | (cddr ,store))) | ||
| 571 | (gv-define-simple-setter point goto-char) | ||
| 572 | (gv-define-simple-setter point-marker goto-char t) | ||
| 573 | (gv-define-setter point-max (store) | ||
| 574 | `(progn (narrow-to-region (point-min) ,store) ,store)) | ||
| 575 | (gv-define-setter point-min (store) | ||
| 576 | `(progn (narrow-to-region ,store (point-max)) ,store)) | ||
| 577 | (gv-define-setter read-mouse-position (store scr) | ||
| 578 | `(set-mouse-position ,scr (car ,store) (cdr ,store))) | ||
| 579 | (gv-define-simple-setter screen-height set-screen-height t) | ||
| 580 | (gv-define-simple-setter screen-width set-screen-width t) | ||
| 581 | (gv-define-simple-setter selected-window select-window) | ||
| 582 | (gv-define-simple-setter selected-screen select-screen) | ||
| 583 | (gv-define-simple-setter selected-frame select-frame) | ||
| 584 | (gv-define-simple-setter standard-case-table set-standard-case-table) | ||
| 585 | (gv-define-simple-setter syntax-table set-syntax-table) | ||
| 586 | (gv-define-simple-setter visited-file-modtime set-visited-file-modtime t) | ||
| 587 | (gv-define-setter window-height (store) | ||
| 588 | `(progn (enlarge-window (- ,store (window-height))) ,store)) | ||
| 589 | (gv-define-setter window-width (store) | ||
| 590 | `(progn (enlarge-window (- ,store (window-width)) t) ,store)) | ||
| 591 | (gv-define-simple-setter x-get-secondary-selection x-own-secondary-selection t) | ||
| 592 | |||
| 593 | ;; More complex setf-methods. | ||
| 594 | |||
| 595 | ;; This is a hack that allows (setf (eq a 7) B) to mean either | ||
| 596 | ;; (setq a 7) or (setq a nil) depending on whether B is nil or not. | ||
| 597 | ;; This is useful when you have control over the PLACE but not over | ||
| 598 | ;; the VALUE, as is the case in define-minor-mode's :variable. | ||
| 599 | ;; It turned out that :variable needed more flexibility anyway, so | ||
| 600 | ;; this doesn't seem too useful now. | ||
| 601 | (gv-define-expander eq | ||
| 602 | (lambda (do place val) | ||
| 603 | (gv-letplace (getter setter) place | ||
| 604 | (macroexp-let2 nil val val | ||
| 605 | (funcall do `(eq ,getter ,val) | ||
| 606 | (lambda (v) | ||
| 607 | `(cond | ||
| 608 | (,v ,(funcall setter val)) | ||
| 609 | ((eq ,getter ,val) ,(funcall setter `(not ,val)))))))))) | ||
| 610 | |||
| 611 | (gv-define-expander substring | ||
| 612 | (lambda (do place from &optional to) | ||
| 613 | (gv-letplace (getter setter) place | ||
| 614 | (macroexp-let2* nil ((start from) (end to)) | ||
| 615 | (funcall do `(substring ,getter ,start ,end) | ||
| 616 | (lambda (v) | ||
| 617 | (macroexp-let2 nil v v | ||
| 618 | `(progn | ||
| 619 | ,(funcall setter `(cl--set-substring | ||
| 620 | ,getter ,start ,end ,v)) | ||
| 621 | ,v)))))))) | ||
| 622 | |||
| 623 | ;;; Miscellaneous. | 518 | ;;; Miscellaneous. |
| 624 | 519 | ||
| 625 | (provide 'cl-lib) | 520 | (provide 'cl-lib) |
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el index f08f7ac1153..d6272a52469 100644 --- a/lisp/emacs-lisp/gv.el +++ b/lisp/emacs-lisp/gv.el | |||
| @@ -614,5 +614,105 @@ REF must have been previously obtained with `gv-ref'." | |||
| 614 | ;; (,(nth 1 vars) (v) (funcall ',setter v))) | 614 | ;; (,(nth 1 vars) (v) (funcall ',setter v))) |
| 615 | ;; ,@body))) | 615 | ;; ,@body))) |
| 616 | 616 | ||
| 617 | ;;; Generalized variables. | ||
| 618 | |||
| 619 | ;; Some Emacs-related place types. | ||
| 620 | (gv-define-simple-setter buffer-file-name set-visited-file-name t) | ||
| 621 | (gv-define-setter buffer-modified-p (flag &optional buf) | ||
| 622 | (macroexp-let2 nil buffer `(or ,buf (current-buffer)) | ||
| 623 | `(with-current-buffer ,buffer | ||
| 624 | (set-buffer-modified-p ,flag)))) | ||
| 625 | (gv-define-simple-setter buffer-name rename-buffer t) | ||
| 626 | (gv-define-setter buffer-string (store) | ||
| 627 | `(insert (prog1 ,store (erase-buffer)))) | ||
| 628 | (gv-define-simple-setter buffer-substring cl--set-buffer-substring) | ||
| 629 | (gv-define-simple-setter current-buffer set-buffer) | ||
| 630 | (gv-define-simple-setter current-column move-to-column t) | ||
| 631 | (gv-define-simple-setter current-global-map use-global-map t) | ||
| 632 | (gv-define-setter current-input-mode (store) | ||
| 633 | `(progn (apply #'set-input-mode ,store) ,store)) | ||
| 634 | (gv-define-simple-setter current-local-map use-local-map t) | ||
| 635 | (gv-define-simple-setter current-window-configuration | ||
| 636 | set-window-configuration t) | ||
| 637 | (gv-define-simple-setter default-file-modes set-default-file-modes t) | ||
| 638 | (gv-define-simple-setter documentation-property put) | ||
| 639 | (gv-define-setter face-background (x f &optional s) | ||
| 640 | `(set-face-background ,f ,x ,s)) | ||
| 641 | (gv-define-setter face-background-pixmap (x f &optional s) | ||
| 642 | `(set-face-background-pixmap ,f ,x ,s)) | ||
| 643 | (gv-define-setter face-font (x f &optional s) `(set-face-font ,f ,x ,s)) | ||
| 644 | (gv-define-setter face-foreground (x f &optional s) | ||
| 645 | `(set-face-foreground ,f ,x ,s)) | ||
| 646 | (gv-define-setter face-underline-p (x f &optional s) | ||
| 647 | `(set-face-underline ,f ,x ,s)) | ||
| 648 | (gv-define-simple-setter file-modes set-file-modes t) | ||
| 649 | (gv-define-setter frame-height (x &optional frame) | ||
| 650 | `(set-frame-height (or ,frame (selected-frame)) ,x)) | ||
| 651 | (gv-define-simple-setter frame-parameters modify-frame-parameters t) | ||
| 652 | (gv-define-simple-setter frame-visible-p cl--set-frame-visible-p) | ||
| 653 | (gv-define-setter frame-width (x &optional frame) | ||
| 654 | `(set-frame-width (or ,frame (selected-frame)) ,x)) | ||
| 655 | (gv-define-simple-setter getenv setenv t) | ||
| 656 | (gv-define-simple-setter get-register set-register) | ||
| 657 | (gv-define-simple-setter global-key-binding global-set-key) | ||
| 658 | (gv-define-simple-setter local-key-binding local-set-key) | ||
| 659 | (gv-define-simple-setter mark set-mark t) | ||
| 660 | (gv-define-simple-setter mark-marker set-mark t) | ||
| 661 | (gv-define-simple-setter marker-position set-marker t) | ||
| 662 | (gv-define-setter mouse-position (store scr) | ||
| 663 | `(set-mouse-position ,scr (car ,store) (cadr ,store) | ||
| 664 | (cddr ,store))) | ||
| 665 | (gv-define-simple-setter point goto-char) | ||
| 666 | (gv-define-simple-setter point-marker goto-char t) | ||
| 667 | (gv-define-setter point-max (store) | ||
| 668 | `(progn (narrow-to-region (point-min) ,store) ,store)) | ||
| 669 | (gv-define-setter point-min (store) | ||
| 670 | `(progn (narrow-to-region ,store (point-max)) ,store)) | ||
| 671 | (gv-define-setter read-mouse-position (store scr) | ||
| 672 | `(set-mouse-position ,scr (car ,store) (cdr ,store))) | ||
| 673 | (gv-define-simple-setter screen-height set-screen-height t) | ||
| 674 | (gv-define-simple-setter screen-width set-screen-width t) | ||
| 675 | (gv-define-simple-setter selected-window select-window) | ||
| 676 | (gv-define-simple-setter selected-screen select-screen) | ||
| 677 | (gv-define-simple-setter selected-frame select-frame) | ||
| 678 | (gv-define-simple-setter standard-case-table set-standard-case-table) | ||
| 679 | (gv-define-simple-setter syntax-table set-syntax-table) | ||
| 680 | (gv-define-simple-setter visited-file-modtime set-visited-file-modtime t) | ||
| 681 | (gv-define-setter window-height (store) | ||
| 682 | `(progn (enlarge-window (- ,store (window-height))) ,store)) | ||
| 683 | (gv-define-setter window-width (store) | ||
| 684 | `(progn (enlarge-window (- ,store (window-width)) t) ,store)) | ||
| 685 | (gv-define-simple-setter x-get-secondary-selection x-own-secondary-selection t) | ||
| 686 | |||
| 687 | ;; More complex setf-methods. | ||
| 688 | |||
| 689 | ;; This is a hack that allows (setf (eq a 7) B) to mean either | ||
| 690 | ;; (setq a 7) or (setq a nil) depending on whether B is nil or not. | ||
| 691 | ;; This is useful when you have control over the PLACE but not over | ||
| 692 | ;; the VALUE, as is the case in define-minor-mode's :variable. | ||
| 693 | ;; It turned out that :variable needed more flexibility anyway, so | ||
| 694 | ;; this doesn't seem too useful now. | ||
| 695 | (gv-define-expander eq | ||
| 696 | (lambda (do place val) | ||
| 697 | (gv-letplace (getter setter) place | ||
| 698 | (macroexp-let2 nil val val | ||
| 699 | (funcall do `(eq ,getter ,val) | ||
| 700 | (lambda (v) | ||
| 701 | `(cond | ||
| 702 | (,v ,(funcall setter val)) | ||
| 703 | ((eq ,getter ,val) ,(funcall setter `(not ,val)))))))))) | ||
| 704 | |||
| 705 | (gv-define-expander substring | ||
| 706 | (lambda (do place from &optional to) | ||
| 707 | (gv-letplace (getter setter) place | ||
| 708 | (macroexp-let2* nil ((start from) (end to)) | ||
| 709 | (funcall do `(substring ,getter ,start ,end) | ||
| 710 | (lambda (v) | ||
| 711 | (macroexp-let2 nil v v | ||
| 712 | `(progn | ||
| 713 | ,(funcall setter `(cl--set-substring | ||
| 714 | ,getter ,start ,end ,v)) | ||
| 715 | ,v)))))))) | ||
| 716 | |||
| 617 | (provide 'gv) | 717 | (provide 'gv) |
| 618 | ;;; gv.el ends here | 718 | ;;; gv.el ends here |