]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/csv-mode/csv-mode.el
Sync with yasnippet/master
[gnu-emacs-elpa] / packages / csv-mode / csv-mode.el
index 37da4d338438f2a7f990175edea2cb4e4a0c3016..dbc6182b42eb4e691b120034cf4349fa0c2557f6 100644 (file)
@@ -1,11 +1,11 @@
 ;;; csv-mode.el --- Major mode for editing comma/char separated values  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2003, 2004, 2012  Free Software Foundation, Inc
+;; Copyright (C) 2003, 2004, 2012, 2013  Free Software Foundation, Inc
 
 ;; Author: Francis J. Wright <F.J.Wright at qmul.ac.uk>
 ;; Time-stamp: <23 August 2004>
 ;; URL: http://centaur.maths.qmul.ac.uk/Emacs/
-;; Version: 1.1
+;; Version: 1.2
 ;; Keywords: convenience
 
 ;; This package is free software; you can redistribute it and/or modify
@@ -126,7 +126,7 @@ Set by customizing `csv-separators' -- do not set directly!")
   "Regexp to match a field separator.
 Set by customizing `csv-separators' -- do not set directly!")
 
-(defvar csv-skip-regexp nil
+(defvar csv--skip-regexp nil
   "Regexp used by `skip-chars-forward' etc. to skip fields.
 Set by customizing `csv-separators' -- do not set directly!")
 
@@ -154,7 +154,7 @@ All must be different from the field quote characters, `csv-field-quotes'."
               value)
         (custom-set-default variable value)
         (setq csv-separator-chars (mapcar 'string-to-char value)
-              csv-skip-regexp (apply 'concat "^\n" csv-separators)
+              csv--skip-regexp (apply 'concat "^\n" csv-separators)
               csv-separator-regexp (apply 'concat `("[" ,@value "]"))
               csv-font-lock-keywords
               ;; NB: csv-separator-face variable evaluates to itself.
@@ -597,7 +597,7 @@ BEG and END specify the region to sort."
   (barf-if-buffer-read-only)
   (csv-sort-fields-1 field beg end
                     (lambda () (csv-sort-skip-fields field) nil)
-                    (lambda () (skip-chars-forward csv-skip-regexp))))
+                    (lambda () (skip-chars-forward csv--skip-regexp))))
 
 (defun csv-sort-numeric-fields (field beg end)
   "Sort lines in region numerically by the ARGth field of each line.
@@ -651,17 +651,17 @@ point or marker arguments, BEG and END, delimiting the region."
 
 (defsubst csv-end-of-field ()
   "Skip forward over one field."
-  (skip-syntax-forward " ")
+  (skip-chars-forward " ")
   (if (eq (char-syntax (following-char)) ?\")
       (goto-char (scan-sexps (point) 1)))
-  (skip-chars-forward csv-skip-regexp))
+  (skip-chars-forward csv--skip-regexp))
 
 (defsubst csv-beginning-of-field ()
   "Skip backward over one field."
   (skip-syntax-backward " ")
   (if (eq (char-syntax (preceding-char)) ?\")
       (goto-char (scan-sexps (point) -1)))
-  (skip-chars-backward csv-skip-regexp))
+  (skip-chars-backward csv--skip-regexp))
 
 (defun csv-forward-field (arg)
   "Move forward across one field, cf. `forward-sexp'.
@@ -844,21 +844,18 @@ and END specify the region to process."
        (csv-kill-one-column (car fields)))))
   (setq csv-killed-fields (nreverse csv-killed-fields)))
 
-(defmacro csv-kill-one-field (field killed-fields)
+(defun csv-kill-one-field (field)
   "Kill field with index FIELD in current line.
-Save killed field by `push'ing onto KILLED-FIELDS.
-Assumes point is at beginning of line.
-Called by `csv-kill-one-column' and `csv-kill-many-columns'."
-  `(progn
-     ;; Move to start of field to kill:
-     (csv-sort-skip-fields ,field)
-     ;; Kill to end of field (cf. `kill-region'):
-     (push (delete-and-extract-region
-           (point)
-           (progn (csv-end-of-field) (point)))
-          ,killed-fields)
-     (if (eolp) (delete-char -1)    ; delete trailing separator at eol
-       (delete-char 1))))          ; or following separator otherwise
+Return killed text.  Assumes point is at beginning of line."
+  ;; Move to start of field to kill:
+  (csv-sort-skip-fields field)
+  ;; Kill to end of field (cf. `kill-region'):
+  (prog1 (delete-and-extract-region
+          (point)
+          (progn (csv-end-of-field) (point)))
+    (if (eolp)
+        (unless (bolp) (delete-char -1)) ; Delete trailing separator at eol
+      (delete-char 1))))                 ; or following separator otherwise.
 
 (defun csv-kill-one-column (field)
   "Kill field with index FIELD in all lines in (narrowed) buffer.
@@ -867,7 +864,7 @@ Assumes point is at `point-min'.  Called by `csv-kill-fields'.
 Ignore blank and comment lines."
   (while (not (eobp))
     (or (csv-not-looking-at-record)
-       (csv-kill-one-field field csv-killed-fields))
+       (push (csv-kill-one-field field) csv-killed-fields))
     (forward-line)))
 
 (defun csv-kill-many-columns (fields)
@@ -912,7 +909,7 @@ Ignore blank and comment lines."
            (setq field (car fields)
                  fields (cdr fields))
            (beginning-of-line)
-           (csv-kill-one-field field killed-fields))
+           (push (csv-kill-one-field field) killed-fields))
          (push (mapconcat 'identity killed-fields (car csv-separators))
                csv-killed-fields)))
     (forward-line)))