bug-gnu-emacs
[Top][All Lists]
Advanced

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

c-subword-mode - inconsistent behavior


From: Paul Curry
Subject: c-subword-mode - inconsistent behavior
Date: Mon, 2 Apr 2007 15:46:32 -0500

The functions c-capitalize-subword, c-downcase-subword, c-upcase-subword
claim to behave like their normal emacs counterparts, but all three
functions move the point when given a negative argument.  Furthermore,
c-capitalize-subword doesn't even work with a negative argument on my
machine.  I changed the functions to better mimic the behavior of
capitalize/downcase/upcase/-word: they no longer move point with a negative
argument.

Here's my code:

(defun c-capitalize-subword (arg)
  "Do the same as `capitalize-word' but on subwords.
See the command `c-subword-mode' for a description of subwords.
Optional argument ARG is the same as for `capitalize-word'."
  (interactive "p")
  (let ((count (abs arg))
        (start (point)))
    (dotimes (i count)
      (when (if (< arg 0)
                (re-search-backward
                 (concat "\\<[" c-alpha "]")
                 nil t)
              (re-search-forward
               (concat "[" c-alpha "]")
               nil t))
        (goto-char (match-beginning 0)))
      (let* ((p (point))
             (pp (1+ p))
             (np (c-forward-subword)))
        (upcase-region p pp)
        (downcase-region pp np)
        (if (< arg 0)
            (c-backward-subword)
          (goto-char np))))
    (if (< arg 0) (goto-char start))))

(defun c-downcase-subword (arg)
  "Do the same as `downcase-word' but on subwords.
See the command `c-subword-mode' for a description of subwords.
Optional argument ARG is the same as for `downcase-word'."
  (interactive "p")
  (let ((start (point)))
    (downcase-region (point) (c-forward-subword arg))
    (if (< arg 0) (goto-char start))))

(defun c-upcase-subword (arg)
  "Do the same as `upcase-word' but on subwords.
See the command `c-subword-mode' for a description of subwords.
Optional argument ARG is the same as for `upcase-word'."
  (interactive "p")
  (let ((start (point)))
    (upcase-region (point) (c-forward-subword arg))
    (if (< arg 0) (goto-char start))))




reply via email to

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