comparison lisp/viper/viper-ex.el @ 163:0132846995bd r20-3b8

Import from CVS: tag r20-3b8
author cvs
date Mon, 13 Aug 2007 09:43:35 +0200
parents cf808b4c4290
children 2d532a89d707
comparison
equal deleted inserted replaced
162:4de2936b4e77 163:0132846995bd
32 (defvar vip-related-files-and-buffers-ring) 32 (defvar vip-related-files-and-buffers-ring)
33 (defvar vip-local-search-start-marker) 33 (defvar vip-local-search-start-marker)
34 (defvar vip-expert-level) 34 (defvar vip-expert-level)
35 (defvar vip-custom-file-name) 35 (defvar vip-custom-file-name)
36 (defvar vip-case-fold-search) 36 (defvar vip-case-fold-search)
37 37 (defvar explicit-shell-file-name)
38 (eval-when-compile 38
39 (let ((load-path (cons (expand-file-name ".") load-path))) 39 ;; loading happens only in non-interactive compilation
40 (or (featurep 'viper-util) 40 ;; in order to spare non-viperized emacs from being viperized
41 (load "viper-util.el" nil nil 'nosuffix)) 41 (if noninteractive
42 (or (featurep 'viper-keym) 42 (eval-when-compile
43 (load "viper-keym.el" nil nil 'nosuffix)) 43 (let ((load-path (cons (expand-file-name ".") load-path)))
44 (or (featurep 'viper) 44 (or (featurep 'viper-util)
45 (load "viper.el" nil nil 'nosuffix)) 45 (load "viper-util.el" nil nil 'nosuffix))
46 )) 46 (or (featurep 'viper-keym)
47 (load "viper-keym.el" nil nil 'nosuffix))
48 (or (featurep 'viper-cmd)
49 (load "viper-cmd.el" nil nil 'nosuffix))
50 )))
47 ;; end pacifier 51 ;; end pacifier
48 52
49 (require 'viper-util) 53 (require 'viper-util)
50 54
51 55
71 ("chdir") ("cd") ("Buffer") ("buffer") ("args")) ) 75 ("chdir") ("cd") ("Buffer") ("buffer") ("args")) )
72 76
73 ;; A-list of Ex variables that can be set using the :set command. 77 ;; A-list of Ex variables that can be set using the :set command.
74 (defconst ex-variable-alist 78 (defconst ex-variable-alist
75 '(("wrapscan") ("ws") ("wrapmargin") ("wm") 79 '(("wrapscan") ("ws") ("wrapmargin") ("wm")
76 ("global-tabstop") ("gts") ("tabstop") ("ts") 80 ("tabstop-global") ("ts-g") ("tabstop") ("ts")
77 ("showmatch") ("sm") ("shiftwidth") ("sw") ("shell") ("sh") 81 ("showmatch") ("sm") ("shiftwidth") ("sw") ("shell") ("sh")
78 ("readonly") ("ro") 82 ("readonly") ("ro")
79 ("nowrapscan") ("nows") ("noshowmatch") ("nosm") 83 ("nowrapscan") ("nows") ("noshowmatch") ("nosm")
80 ("noreadonly") ("noro") ("nomagic") ("noma") 84 ("noreadonly") ("noro") ("nomagic") ("noma")
81 ("noignorecase") ("noic") 85 ("noignorecase") ("noic")
82 ("global-noautoindent") ("gnoai") ("noautoindent") ("noai") 86 ("noautoindent-global") ("noai-g") ("noautoindent") ("noai")
83 ("magic") ("ma") ("ignorecase") ("ic") 87 ("magic") ("ma") ("ignorecase") ("ic")
84 ("global-autoindent") ("gai") ("autoindent") ("ai") 88 ("autoindent-global") ("ai-g") ("autoindent") ("ai")
89 ("all")
85 )) 90 ))
86 91
87 92
88 93
89 ;; Token recognized during parsing of Ex commands (e.g., "read", "comma") 94 ;; Token recognized during parsing of Ex commands (e.g., "read", "comma")
1559 (or batch (sit-for 2)) 1564 (or batch (sit-for 2))
1560 1565
1561 (while (string-match "^[ \\t\\n]*$" 1566 (while (string-match "^[ \\t\\n]*$"
1562 (setq str 1567 (setq str
1563 (completing-read ":set " ex-variable-alist))) 1568 (completing-read ":set " ex-variable-alist)))
1564 (message ":set <Variable> ") 1569 (message ":set <Variable> [= <Value>]")
1565 ;; if there are unread events, don't wait 1570 ;; if there are unread events, don't wait
1566 (or (vip-set-unread-command-events "") (sit-for 2)) 1571 (or (vip-set-unread-command-events "") (sit-for 2))
1567 ) ; while 1572 ) ; while
1568 str)) 1573 str))
1569 1574
1577 (delete-turn-on-auto-fill-pattern 1582 (delete-turn-on-auto-fill-pattern
1578 "([ \t]*add-hook[ \t]+'vip-insert-state-hooks[ \t]+'turn-on-auto-fill.*)") 1583 "([ \t]*add-hook[ \t]+'vip-insert-state-hooks[ \t]+'turn-on-auto-fill.*)")
1579 actual-lisp-cmd lisp-cmd-del-pattern 1584 actual-lisp-cmd lisp-cmd-del-pattern
1580 val2 orig-var) 1585 val2 orig-var)
1581 (setq orig-var var) 1586 (setq orig-var var)
1582 (cond ((member var '("ai" "autoindent")) 1587 (cond ((string= var "all")
1588 (setq ask-if-save nil
1589 set-cmd nil))
1590 ((member var '("ai" "autoindent"))
1583 (setq var "vip-auto-indent" 1591 (setq var "vip-auto-indent"
1584 set-cmd "setq" 1592 set-cmd "setq"
1585 ask-if-save nil 1593 ask-if-save nil
1586 val "t")) 1594 val "t"))
1587 ((member var '("gai" "global-autoindent")) 1595 ((member var '("ai-g" "autoindent-global"))
1588 (kill-local-variable 'vip-auto-indent) 1596 (kill-local-variable 'vip-auto-indent)
1589 (setq var "vip-auto-indent" 1597 (setq var "vip-auto-indent"
1590 set-cmd "setq-default" 1598 set-cmd "setq-default"
1591 val "t")) 1599 val "t"))
1592 ((member var '("noai" "noautoindent")) 1600 ((member var '("noai" "noautoindent"))
1593 (setq var "vip-auto-indent" 1601 (setq var "vip-auto-indent"
1594 ask-if-save nil 1602 ask-if-save nil
1595 val "nil")) 1603 val "nil"))
1596 ((member var '("gnoai" "global-noautoindent")) 1604 ((member var '("noai-g" "noautoindent-global"))
1597 (kill-local-variable 'vip-auto-indent) 1605 (kill-local-variable 'vip-auto-indent)
1598 (setq var "vip-auto-indent" 1606 (setq var "vip-auto-indent"
1599 set-cmd "setq-default" 1607 set-cmd "setq-default"
1600 val "nil")) 1608 val "nil"))
1601 ((member var '("ic" "ignorecase")) 1609 ((member var '("ic" "ignorecase"))
1605 (setq var "vip-case-fold-search" 1613 (setq var "vip-case-fold-search"
1606 val "nil")) 1614 val "nil"))
1607 ((member var '("ma" "magic")) 1615 ((member var '("ma" "magic"))
1608 (setq var "vip-re-search" 1616 (setq var "vip-re-search"
1609 val "t")) 1617 val "t"))
1610 ((member var '("noma" "nomagic")) 1618 ((member var '("noma" "nomagic"))
1611 (setq var "vip-re-search" 1619 (setq var "vip-re-search"
1612 val "nil")) 1620 val "nil"))
1613 ((member var '("ro" "readonly")) 1621 ((member var '("ro" "readonly"))
1614 (setq var "buffer-read-only" 1622 (setq var "buffer-read-only"
1615 val "t")) 1623 val "t"))
1626 (setq var "vip-search-wrap-around-t" 1634 (setq var "vip-search-wrap-around-t"
1627 val "t")) 1635 val "t"))
1628 ((member var '("nows" "nowrapscan")) 1636 ((member var '("nows" "nowrapscan"))
1629 (setq var "vip-search-wrap-around-t" 1637 (setq var "vip-search-wrap-around-t"
1630 val "nil"))) 1638 val "nil")))
1631 (if (eq val 0) ; value must be set by the user 1639 (if (and set-cmd (eq val 0)) ; value must be set by the user
1632 (let ((cursor-in-echo-area t)) 1640 (let ((cursor-in-echo-area t))
1633 (message ":set %s = <Value>" var) 1641 (message ":set %s = <Value>" var)
1634 ;; if there are unread events, don't wait 1642 ;; if there are unread events, don't wait
1635 (or (vip-set-unread-command-events "") (sit-for 2)) 1643 (or (vip-set-unread-command-events "") (sit-for 2))
1636 (setq val (read-string (format ":set %s = " var))) 1644 (setq val (read-string (format ":set %s = " var)))
1638 1646
1639 ;; check numerical values 1647 ;; check numerical values
1640 (if (member var 1648 (if (member var
1641 '("sw" "shiftwidth" 1649 '("sw" "shiftwidth"
1642 "ts" "tabstop" 1650 "ts" "tabstop"
1643 "gts" "global-tabstop" 1651 "ts-g" "tabstop-global"
1644 "wm" "wrapmargin")) 1652 "wm" "wrapmargin"))
1645 (condition-case nil 1653 (condition-case nil
1646 (or (numberp (setq val2 (car (read-from-string val)))) 1654 (or (numberp (setq val2 (car (read-from-string val))))
1647 (error "%s: Invalid value, numberp, %S" var val)) 1655 (error "%s: Invalid value, numberp, %S" var val))
1648 (error 1656 (error
1654 ((member var '("ts" "tabstop")) 1662 ((member var '("ts" "tabstop"))
1655 ;; make it take effect in curr buff and new bufs 1663 ;; make it take effect in curr buff and new bufs
1656 (setq var "tab-width" 1664 (setq var "tab-width"
1657 set-cmd "setq" 1665 set-cmd "setq"
1658 ask-if-save nil)) 1666 ask-if-save nil))
1659 ((member var '("gts" "global-tabstop")) 1667 ((member var '("ts-g" "tabstop-global"))
1660 (kill-local-variable 'tab-width) 1668 (kill-local-variable 'tab-width)
1661 (setq var "tab-width" 1669 (setq var "tab-width"
1662 set-cmd "setq-default")) 1670 set-cmd "setq-default"))
1663 ((member var '("wm" "wrapmargin")) 1671 ((member var '("wm" "wrapmargin"))
1664 ;; make it take effect in curr buff and new bufs 1672 ;; make it take effect in curr buff and new bufs
1669 ((member var '("sh" "shell")) 1677 ((member var '("sh" "shell"))
1670 (setq var "explicit-shell-file-name" 1678 (setq var "explicit-shell-file-name"
1671 val (format "\"%s\"" val))))) 1679 val (format "\"%s\"" val)))))
1672 (ex-fixup-history "set" orig-var)) 1680 (ex-fixup-history "set" orig-var))
1673 1681
1674 (setq actual-lisp-cmd (format "\n(%s %s %s) %s" 1682 (if set-cmd
1675 set-cmd var val auto-cmd-label)) 1683 (setq actual-lisp-cmd
1676 (setq lisp-cmd-del-pattern 1684 (format "\n(%s %s %s) %s" set-cmd var val auto-cmd-label)
1677 (format "^\n?[ \t]*([ \t]*%s[ \t]+%s[ \t].*)[ \t]*%s" 1685 lisp-cmd-del-pattern
1678 set-cmd var auto-cmd-label)) 1686 (format "^\n?[ \t]*([ \t]*%s[ \t]+%s[ \t].*)[ \t]*%s"
1687 set-cmd var auto-cmd-label)))
1679 1688
1680 (if (and ask-if-save 1689 (if (and ask-if-save
1681 (y-or-n-p (format "Do you want to save this setting in %s " 1690 (y-or-n-p (format "Do you want to save this setting in %s "
1682 vip-custom-file-name))) 1691 vip-custom-file-name)))
1683 (progn 1692 (progn
1700 ;; del pattern 1709 ;; del pattern
1701 lisp-cmd-del-pattern) 1710 lisp-cmd-del-pattern)
1702 )) 1711 ))
1703 )) 1712 ))
1704 1713
1705 (message "%s %s %s" set-cmd var (if (string-match "^[ \t]*$" val) 1714 (if set-cmd
1706 (format "%S" val) 1715 (message "%s %s %s"
1707 val)) 1716 set-cmd var
1708 (eval (car (read-from-string actual-lisp-cmd))) 1717 (if (string-match "^[ \t]*$" val)
1709 (if (string= var "fill-column") 1718 (format "%S" val)
1710 (if (> val2 0) 1719 val)))
1711 (auto-fill-mode 1) 1720 (if actual-lisp-cmd
1712 (auto-fill-mode -1))) 1721 (eval (car (read-from-string actual-lisp-cmd))))
1713 1722 (if (string= var "fill-column")
1723 (if (> val2 0)
1724 (auto-fill-mode 1)
1725 (auto-fill-mode -1)))
1726 (if (string= var "all") (ex-show-vars))
1714 )) 1727 ))
1715 1728
1716 ;; In inline args, skip regex-forw and (optionally) chars-back. 1729 ;; In inline args, skip regex-forw and (optionally) chars-back.
1717 ;; Optional 3d arg is a string that should replace ' ' to prevent its 1730 ;; Optional 3d arg is a string that should replace ' ' to prevent its
1718 ;; special meaning 1731 ;; special meaning
2072 "\n\n\nPress any key to continue...\n\n"))) 2085 "\n\n\nPress any key to continue...\n\n")))
2073 (vip-read-event) 2086 (vip-read-event)
2074 (kill-buffer " *vip-info*"))) 2087 (kill-buffer " *vip-info*")))
2075 )) 2088 ))
2076 2089
2090 ;; display all variables set through :set
2091 (defun ex-show-vars ()
2092 (with-output-to-temp-buffer " *vip-info*"
2093 (princ (if vip-auto-indent
2094 "autoindent (local)\n" "noautoindent (local)\n"))
2095 (princ (if (default-value 'vip-auto-indent)
2096 "autoindent (global) \n" "noautoindent (global) \n"))
2097 (princ (if vip-case-fold-search "ignorecase\n" "noignorecase\n"))
2098 (princ (if vip-re-search "magic\n" "nomagic\n"))
2099 (princ (if buffer-read-only "readonly\n" "noreadonly\n"))
2100 (princ (if blink-matching-paren "showmatch\n" "noshowmatch\n"))
2101 (princ (if vip-search-wrap-around-t "wrapscan\n" "nowrapscan\n"))
2102 (princ (format "shiftwidth \t\t= %S\n" vip-shift-width))
2103 (princ (format "tabstop (local) \t= %S\n" tab-width))
2104 (princ (format "tabstop (global) \t= %S\n" (default-value 'tab-width)))
2105 (princ (format "wrapmargin (local) \t= %S\n"
2106 (- (window-width) fill-column)))
2107 (princ (format "wrapmargin (global) \t= %S\n"
2108 (- (window-width) (default-value 'fill-column))))
2109 (princ (format "shell \t\t\t= %S\n" (if (boundp 'explicit-shell-file-name)
2110 explicit-shell-file-name
2111 'none)))
2112 ))
2113
2114
2115
2116
2077 2117
2078 ;;; viper-ex.el ends here 2118 ;;; viper-ex.el ends here