[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: superword-mode
From: |
Ted Zlatanov |
Subject: |
Re: superword-mode |
Date: |
Wed, 27 Mar 2013 09:04:49 -0400 |
User-agent: |
Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.3.50 (gnu/linux) |
On Tue, 26 Mar 2013 21:23:18 -0400 Stefan Monnier <address@hidden> wrote:
>> OK; see attached. Implemented by looking at the `superword-mode'
>> variable in the internal `subword-mode' commands.
SM> Looks good, see comments below.
>> Included and done for both `subword-mode' and `superword-mode'.
SM> BTW, this needs an entry in etc/NEWS, of course.
OK; done.
>> +;; (add-hook 'c-mode-common-hook
>> +;; (lambda () (superword-mode 1)))
SM> This should be simply
SM> +;; (add-hook 'c-mode-common-hook 'superword-mode)
OK; done for both cases in the docs.
>> + :lighter " ,"
>> + nil
>> + nil
>> + subword-mode-map
SM> The "three args" are only used if there's no :keyword arg.
SM> So the above is the same as
>> + :lighter " ,"
>> + (progn nil
>> + nil
>> + subword-mode-map)
SM> The subword-mode-map should be used by default anyway, so you can just
SM> remove those 3 expressions.
Oh, OK. Done for both subword and superword.
SM> I'm not sure we want to add a :lighter, by the way.
Booo. I want my modeline to look like a Christmas tree ;)
SM> Why not (defalias 'subword-right 'subword-forward)?
SM> Else, please add a docstring.
I thought it would be nicer, but I see it's not. Changed for both left
and right.
>> +(defvar superword-mode-map
>> + (let ((map (make-sparse-keymap)))
>> + (dolist (cmd '(forward-word backward-word mark-word kill-word
>> + backward-kill-word transpose-words
>> + capitalize-word upcase-word downcase-word
>> + left-word right-word))
>> + (let ((othercmd (let ((name (symbol-name cmd)))
>> + (string-match "\\([[:alpha:]-]+\\)-word[s]?" name)
>> + (intern (concat "subword-" (match-string 1
>> name))))))
>> + (define-key map (vector 'remap cmd) othercmd)))
>> + map)
SM> Why not (defvar superword-mode-map subword-mode-map)?
OK; done. I'd rather not inherit, they are identical right now.
I still don't have the mutual exclusivity working; you can't go
subword->superword with `M-x superword-mode'. It goes
subword->subword disabled->superword and you have to do
`M-x superword-mode' twice. See attached.
Ted
=== modified file 'etc/NEWS'
--- etc/NEWS 2013-03-23 00:38:11 +0000
+++ etc/NEWS 2013-03-27 12:55:03 +0000
@@ -254,6 +254,11 @@
* New Modes and Packages in Emacs 24.4
+** New `superword-mode' in subword.el
+`superword-mode' overrides the default word motion commands to treat
+symbol_words as a single word, similar to what `subword-mode' does and
+using the same internal functions.
+
** New nadvice.el package offering lighter-weight advice facilities.
It is layered as:
- add-function/remove-function which can be used to add/remove code on any
=== modified file 'lisp/progmodes/subword.el'
--- lisp/progmodes/subword.el 2013-01-01 09:11:05 +0000
+++ lisp/progmodes/subword.el 2013-03-27 13:01:32 +0000
@@ -26,7 +26,8 @@
;; This package provides `subword' oriented commands and a minor mode
;; (`subword-mode') that substitutes the common word handling
-;; functions with them.
+;; functions with them. It also provides the `superword-mode' minor
+;; mode that treats symbols as words, the opposite of `subword-mode'.
;; In spite of GNU Coding Standards, it is popular to name a symbol by
;; mixing uppercase and lowercase letters, e.g. "GtkWidget",
@@ -43,12 +44,13 @@
;; The subword oriented commands defined in this package recognize
;; subwords in a nomenclature to move between them and to edit them as
-;; words.
+;; words. You also get a mode to treat symbols as words instead,
+;; called `superword-mode' (the opposite of `subword-mode').
;; In the minor mode, all common key bindings for word oriented
;; commands are overridden by the subword oriented commands:
-;; Key Word oriented command Subword oriented command
+;; Key Word oriented command Subword oriented command (also superword)
;; ============================================================
;; M-f `forward-word' `subword-forward'
;; M-b `backward-word' `subword-backward'
@@ -67,8 +69,13 @@
;; To make the mode turn on automatically, put the following code in
;; your .emacs:
;;
-;; (add-hook 'c-mode-common-hook
-;; (lambda () (subword-mode 1)))
+;; (add-hook 'c-mode-common-hook 'subword-mode)
+;;
+
+;; To make the mode turn `superword-mode' on automatically for
+;; only some modes, put the following code in your .emacs:
+;;
+;; (add-hook 'c-mode-common-hook 'superword-mode)
;;
;; Acknowledgment:
@@ -98,7 +105,8 @@
(let ((map (make-sparse-keymap)))
(dolist (cmd '(forward-word backward-word mark-word kill-word
backward-kill-word transpose-words
- capitalize-word upcase-word downcase-word))
+ capitalize-word upcase-word downcase-word
+ left-word right-word))
(let ((othercmd (let ((name (symbol-name cmd)))
(string-match "\\([[:alpha:]-]+\\)-word[s]?" name)
(intern (concat "subword-" (match-string 1 name))))))
@@ -133,9 +141,8 @@
as words.
\\{subword-mode-map}"
- nil
- nil
- subword-mode-map)
+ :lighter " ,"
+ (when superword-mode (superword-mode -1)))
(define-obsolete-function-alias 'c-subword-mode 'subword-mode "23.2")
@@ -161,6 +168,8 @@
(put 'subword-forward 'CUA 'move)
+(defalias 'subword-right 'subword-forward)
+
(defun subword-backward (&optional arg)
"Do the same as `backward-word' but on subwords.
See the command `subword-mode' for a description of subwords.
@@ -168,6 +177,8 @@
(interactive "p")
(subword-forward (- (or arg 1))))
+(defalias 'subword-left 'subword-backward)
+
(defun subword-mark (arg)
"Do the same as `mark-word' but on subwords.
See the command `subword-mode' for a description of subwords.
@@ -254,41 +265,73 @@
(unless advance
(goto-char start))))
+
+
+(defvar superword-mode-map subword-mode-map
+ "Keymap used in `superword-mode' minor mode.")
+
+;;;###autoload
+(define-minor-mode superword-mode
+ "Toggle superword movement and editing (Superword mode).
+With a prefix argument ARG, enable Superword mode if ARG is
+positive, and disable it otherwise. If called from Lisp, enable
+the mode if ARG is omitted or nil.
+
+Superword mode is a buffer-local minor mode. Enabling it remaps
+word-based editing commands to superword-based commands that
+treat symbols as words, e.g. \"this_is_a_symbol\".
+
+The superword oriented commands activated in this minor mode
+recognize symbols as superwords to move between superwords and to
+edit them as words.
+
+\\{superword-mode-map}"
+ :lighter " ²"
+ (when subword-mode (subword-mode -1)))
+
+;;;###autoload
+(define-global-minor-mode global-superword-mode superword-mode
+ (lambda () (superword-mode 1)))
;;
;; Internal functions
;;
(defun subword-forward-internal ()
- (if (and
- (save-excursion
- (let ((case-fold-search nil))
- (re-search-forward subword-forward-regexp nil t)))
- (> (match-end 0) (point)))
- (goto-char
- (cond
- ((< 1 (- (match-end 2) (match-beginning 2)))
- (1- (match-end 2)))
- (t
- (match-end 0))))
- (forward-word 1)))
-
+ (if superword-mode
+ (forward-symbol 1)
+ (if (and
+ (save-excursion
+ (let ((case-fold-search nil))
+ (re-search-forward subword-forward-regexp nil t)))
+ (> (match-end 0) (point)))
+ (goto-char
+ (cond
+ ((< 1 (- (match-end 2) (match-beginning 2)))
+ (1- (match-end 2)))
+ (t
+ (match-end 0))))
+ (forward-word 1))))
(defun subword-backward-internal ()
- (if (save-excursion
- (let ((case-fold-search nil))
- (re-search-backward subword-backward-regexp nil t)))
- (goto-char
- (cond
- ((and (match-end 3)
- (< 1 (- (match-end 3) (match-beginning 3)))
- (not (eq (point) (match-end 3))))
- (1- (match-end 3)))
- (t
- (1+ (match-beginning 0)))))
- (backward-word 1)))
+ (if superword-mode
+ (forward-symbol -1)
+ (if (save-excursion
+ (let ((case-fold-search nil))
+ (re-search-backward subword-backward-regexp nil t)))
+ (goto-char
+ (cond
+ ((and (match-end 3)
+ (< 1 (- (match-end 3) (match-beginning 3)))
+ (not (eq (point) (match-end 3))))
+ (1- (match-end 3)))
+ (t
+ (1+ (match-beginning 0)))))
+ (backward-word 1))))
+
(provide 'subword)
+(provide 'superword)
;;; subword.el ends here
- Re: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax., (continued)
- Re: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax., Ted Zlatanov, 2013/03/22
- Re: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax., Stefan Monnier, 2013/03/23
- Re: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax., Ted Zlatanov, 2013/03/26
- Re: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax., Stefan Monnier, 2013/03/26
- superword-mode (was: [Emacs-diffs] /srv/bzr/emacs/trunk r112104: * progmodes/cfengine.el (cfengine-common-syntax): Add "_" to word syntax.), Ted Zlatanov, 2013/03/26
- Re: superword-mode, Stefan Monnier, 2013/03/26
- Re: superword-mode, Masatake YAMATO, 2013/03/26
- Re: superword-mode, Andreas Schwab, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/27
- Re: superword-mode, Stefan Monnier, 2013/03/27
- Re: superword-mode,
Ted Zlatanov <=
- Re: superword-mode, Stefan Monnier, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/27
- Re: superword-mode, Davis Herring, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/27
- Re: superword-mode, Stefan Monnier, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/27
- Re: superword-mode, Stefan Monnier, 2013/03/27
- Re: superword-mode, Ted Zlatanov, 2013/03/28
- Re: superword-mode, Ted Zlatanov, 2013/03/29