unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Lele Gaifax <lele@metapensiero.it>
To: emacs-devel@gnu.org
Subject: Re: Strange problem with emacs-lisp/copyright.el
Date: Fri, 21 Apr 2017 19:49:23 +0200	[thread overview]
Message-ID: <8760hxk5wc.fsf@metapensiero.it> (raw)
In-Reply-To: 87mvbfvt63.fsf@metapensiero.it

Lele Gaifax <lele@metapensiero.it> writes:

> I will try to store the point determined by copyright-find-end in a local
> variable and explicitly move there in the inner progn, but I'm obviously
> missing... the point :)

FYI, since a couple of days I'm using this override, that apparently fixes my
issue:

  (defun copyright-update-year (replace noquery)
    ;; This uses the match-data from copyright-find-copyright/end.
    (goto-char (match-end 1))
    (copyright-find-end)
    (let ((copyright-end (point)))
      (setq copyright-current-year (format-time-string "%Y"))
      (unless (string= (buffer-substring (- (match-end 3) 2) (match-end 3))
                       (substring copyright-current-year -2))
        (if (or noquery
                (save-window-excursion
                  (switch-to-buffer (current-buffer))
                  ;; Fixes some point-moving oddness (bug#2209).
                  (save-excursion
                    (y-or-n-p (if replace
                                  (concat "Replace copyright year(s) by "
                                          copyright-current-year "? ")
                                (concat "Add " copyright-current-year
                                        " to copyright? "))))))
            (progn
              (goto-char copyright-end)
              (if replace
                  (replace-match copyright-current-year t t nil 3)
                (let ((size (save-excursion (skip-chars-backward "0-9"))))
                  (if (and (eq (% (- (string-to-number copyright-current-year)
                                     (string-to-number (buffer-substring
                                                        (+ (point) size)
                                                        (point))))
                                  100)
                               1)
                           (or (eq (char-after (+ (point) size -1)) ?-)
                               (eq (char-after (+ (point) size -2)) ?-)))
                      ;; This is a range so just replace the end part.
                      (delete-char size)
                    ;; Insert a comma with the preferred number of spaces.
                    (insert
                     (save-excursion
                       (if (re-search-backward "[0-9]\\( *, *\\)[0-9]"
                                               (line-beginning-position) t)
                           (match-string 1)
                         ", ")))
                    ;; If people use the '91 '92 '93 scheme, do that as well.
                    (if (eq (char-after (+ (point) size -3)) ?')
                        (insert ?')))
                  ;; Finally insert the new year.
                  (insert (substring copyright-current-year size)))))))))

It just saves and restore the point position found by `copyright-find-end': I
tried to understand why the `save-excursion' isn't enough, but failed.

All the best,
ciao, lele.
-- 
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele@metapensiero.it  |                 -- Fortunato Depero, 1929.




  reply	other threads:[~2017-04-21 17:49 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-11  6:53 Strange problem with emacs-lisp/copyright.el Lele Gaifax
2017-04-11  9:28 ` Alan Third
2017-04-17 17:29 ` Lele Gaifax
2017-04-21 17:49   ` Lele Gaifax [this message]
2017-04-22 13:21     ` Johan Bockgård
2017-04-23 21:00       ` Lele Gaifax
2017-05-05  9:36         ` Lele Gaifax
2017-10-31 18:14           ` Lele Gaifax
2017-11-01  2:19             ` Noam Postavsky
2017-11-05 11:36             ` Johan Bockgård

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8760hxk5wc.fsf@metapensiero.it \
    --to=lele@metapensiero.it \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).