emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112158: Add `superword-mode'


From: Ted Zlatanov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112158: Add `superword-mode'
Date: Wed, 27 Mar 2013 10:04:34 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 112158
committer: Ted Zlatanov <address@hidden>
branch nick: quickfixes
timestamp: Wed 2013-03-27 10:04:34 -0400
message:
  Add `superword-mode'
modified:
  etc/NEWS
  lisp/ChangeLog
  lisp/progmodes/subword.el
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2013-03-23 00:38:11 +0000
+++ b/etc/NEWS  2013-03-27 14:04:34 +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/ChangeLog'
--- a/lisp/ChangeLog    2013-03-26 03:38:18 +0000
+++ b/lisp/ChangeLog    2013-03-27 14:04:34 +0000
@@ -1,3 +1,9 @@
+2013-03-27  Teodor Zlatanov  <address@hidden>
+
+       * progmodes/subword.el: Add `superword-mode' to do word motion
+       over symbol_words (parallels and leverages `subword-mode' which
+       does word motion inside MixedCaseWords).
+
 2013-03-26  Stefan Monnier  <address@hidden>
 
        * desktop.el (desktop--v2s): Rename from desktop-internal-v2s.

=== modified file 'lisp/progmodes/subword.el'
--- a/lisp/progmodes/subword.el 2013-01-01 09:11:05 +0000
+++ b/lisp/progmodes/subword.el 2013-03-27 14:04:34 +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 subword-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 superword-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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]