all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Will Monroe <wtmonroe.ls@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Advice on troubleshooting function to "unscroll"
Date: Sun, 25 Jan 2015 14:52:13 -0600	[thread overview]
Message-ID: <54C5577D.4030700@gmail.com> (raw)

Hello,

I'm studying Emacs Lisp so that I can become more proficient at 
customizing GNU Emacs for purposes, mainly using org-mode.  I'm studying 
alone using Bob Glickstein's *Writing GNU Emacs Extensions*.  So far, 
the book has been a terrific guide to basic concepts.  But I've run into 
a problem that I can't seem to troubleshoot any further and I'd 
appreciate advice on: 1) the best way to troubleshoot this problem 
(e.g., other forums, listservs, or IRC channels that might be more 
appropriate) and 2) troubleshooting the problem itself.  I apologize in 
advance if this query has failed to take into account any basics or if 
it would be better posed elsewhere.  I welcome your on the best way to 
proceed.

So, following Glickstein's advice in Chapter 3, I'm trying to create a 
function that will allow me to create an "unscroll" function that will 
allow me to return to a prior buffer position after (inadvertently) 
pressing C-v a few times.  The code to do this defines three new 
variables, defines advice for an extant Emacs function, scroll-up, and 
then defines a new function, unscroll.  The code is below.

#+BEGIN_SRC emacs-lisp
(defvar unscroll-point nil
   "Cursor position for next call to 'unscroll'.")

(defvar unscroll-window-start nil
   "Window start for next call to 'unscroll'.")

(defvar unscroll-hscroll nil
   "Hscroll start for next call to 'unscroll'.")

(defadvice scroll-up (before remember-for-unscroll
			     activate compile)
   "Remember where we started from, for 'unscroll'."
   (if (not (eq last-command 'scroll-up))
       (setq unscroll-point (point)
	      unscroll-window-start (window-start)
	      unscroll-hscroll (window-hscroll))))

(defun unscroll ()
   "Revert to 'unscroll-point' and 'unscroll-window-start'."
   (interactive)
   (goto-char unscroll-point)
   (set-window-start nil unscroll-window-start)
   (set-window-hscroll nil unscroll-hscroll))
#+END_SRC

I've loaded this code in Emacs under two different conditions:  1) by 
firing up a vanilla Emacs instance without any configuration file, and 
evaluating the code in scratch and 2) by saving the above code as the 
sole contents in a configuration file (~/.emacs.d/init.el) and then 
starting up Emacs.  I've done this on two different machines both 
running versions of Emacs 24.

The test was just opening a lengthy file, usually an info page or an 
existing org-mode file, pressing C-v a few times, and then using M-x 
unscroll.  In all cases, I found that M-x unscroll would return to the 
position just before the last C-v but not to the original position.  In 
other words, if I pressed C-v two times and then pressed M-x unscroll, 
in would only go back one C-v.  My intent, and that of the example in 
the book, is to return the point the position before any C-v key 
sequences were pressed.

I could move one but I suspect that the mistake I've made will come up 
again.  I'd really welcome your (gentle) feedback!

All the best,

Will



             reply	other threads:[~2015-01-25 20:52 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-25 20:52 Will Monroe [this message]
2015-01-25 21:35 ` Advice on troubleshooting function to "unscroll" Marcin Borkowski
2015-01-25 21:43   ` Will Monroe
2015-01-25 21:55     ` Marcin Borkowski
2015-01-25 22:01       ` Will Monroe
2015-01-25 21:45 ` Marcin Borkowski
2015-01-25 22:03   ` Will Monroe
2015-01-25 22:09     ` Marcin Borkowski
2015-01-25 22:45     ` Drew Adams
2015-01-25 22:56       ` Will Monroe
2015-01-25 23:15         ` Marcin Borkowski
2015-01-26  0:03         ` Drew Adams
2015-01-26  0:16           ` Marcin Borkowski
2015-01-26  1:06             ` Drew Adams
2015-01-26  1:17             ` Will Monroe
2015-01-26  1:21               ` Marcin Borkowski
2015-01-26  1:33               ` Drew Adams
     [not found] <mailman.18583.1422219396.1147.help-gnu-emacs@gnu.org>
2015-01-25 21:35 ` Joost Kremers
2015-01-25 21:57   ` Will Monroe

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

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

  git send-email \
    --in-reply-to=54C5577D.4030700@gmail.com \
    --to=wtmonroe.ls@gmail.com \
    --cc=help-gnu-emacs@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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.