From: "Eric Twietmeyer" <zimbus26@yahoo.com>
Subject: Re: upgrading from 21.2.1 to 21.3.50.1
Date: 26 Oct 2006 16:53:12 -0700 [thread overview]
Message-ID: <1161906792.467329.223400@e3g2000cwe.googlegroups.com> (raw)
In-Reply-To: 1161893765.148453.299830@f16g2000cwb.googlegroups.com
To follow up with this: It appears that the initial call to
(window-edges) is returning incorrect values. When I put the point in
one of the windows and Esc - : to eval (window_edges), the 4 numbers I
get seem incorrect. The y values are wrong. For instance, if I have
my main frame split into 4 windows and place the point in the upper
left window, then I get a bottom left coordinate of (0,0), which is
obviously incorrect. If I place the point in the lower left window and
execute (window-edges) then I get a lower left point of (0,52), which
is the coordinate of the lower left of the upper left window.
The x values always seem correct. Is it possible that this version of
emacs has a bad implementation of (window_edges)? It appears this
function is not implemented in elisp itself, so I don't have it
available.
Anyway, if anyone has further info...
Thanks!
Eric Twietmeyer
Eric Twietmeyer wrote:
> Hello,
>
> I just upgraded my local emacs to version 21.3.50.1 (which may be
> cygwin specific, and which according to
> http://www.cygwin.com/ml/cygwin/2005-03/msg00529.html is the same as
> 22.0.50).
>
> The problem I'm having is that a library I have been carrying around
> with me for about 10 years now has stopped working as it used to. It
> is a very small thing, but I don't know enough about debugging elisp to
> know how to fix it. Basically it simply defines 3 sparse keymaps for
> the f1, f3, and f4 keys so that you can hit "<f1> <up>" for instance
> and move to the window in the current frame "above" the currently
> active window.
>
> Now that I have upgraded, the <left> and <right> directions work to
> move to, create, or delete a window, but the <up> and <down> directions
> don't work. They don't work if I execute the command directly either,
> so somehow things changed internally, it isn't something as simple as
> the key bindings being screwed up.
>
> Anyway, here is the code. Any help would be hugely appreciated.
> Thanks so much!
>
> -Eric Twietmeyer
>
>
> ;; Brief-like window manipulation
> ;; Dan Schmidt, 5/6/96
> ;;
> ;; F1 plus a direction goes to that window
> ;; F3 plus a direction creates a window over there
> ;; F4 plus a direction deletes that window
> ;;
> ;; To do:
> ;;
> ;; - F2 window resizing
> ;;
> ;; - F1 should work across frames, argh
>
> (defun find-nearby-window (dx dy)
> "Return the nearest window in the direction of DX DY,
> or nil if there is none."
> (let* ((this-window (selected-window)) ; current window
> (we (window-edges)) ; its coordinates
> (x0 (nth 0 we))
> (y0 (nth 1 we))
> (x1 (nth 2 we))
> (y1 (nth 3 we))
> ; (x (/ (+ x0 x1) 2)) ; x-y location of
> ; (y (/ (+ y0 y1) 2)) ; center of window
> ; (x x0) (y y0) ; I think UL of window works
> better
> (x (+ x0 (current-column)))
> (y (+ y0
> (if (= (point) (point-max))
> (+ 1 (count-lines (window-start) (point)))
> (count-lines (window-start) (+ 1 (point))))))
> (new-window))
> (catch 'look
> (while t
> (setq x (+ x dx)) ; keep moving
> (setq y (+ y dy))
> (setq new-window (window-at x y))
> ;; Don't go off-screen, or into the minibuffer unless it's
> active.
> (if (or (null new-window)
> (and (window-minibuffer-p new-window)
> (not (eq new-window (active-minibuffer-window)))))
> (throw 'look nil)) ; off screen
> (if (not (equal new-window this-window))
> (throw 'look new-window)))))) ; found a new one
>
>
> (defun move-to-nearby-window (dx dy)
> "Move to the nearest window in the direction of DX DY if possible."
> (let ((new-window (find-nearby-window dx dy)))
> (if new-window
> (select-window new-window))))
>
> (defun delete-nearby-window (dx dy)
> "Delete the nearest window in the direction of DX DY if possible."
> (let ((new-window (find-nearby-window dx dy)))
> (if new-window
> (delete-window new-window))))
>
>
>
> (defun create-new-window-up ()
> "Create a new window above the current one."
> (interactive)
> (let ((this-window (selected-window))
> (new-window (split-window-vertically)))
> ;; We've split the window vertically, now make sure that
> ;; the new window is above the current one.
> (if (< (nth 1 (window-edges new-window))
> (nth 1 (window-edges this-window)))
> (select-window new-window))))
>
> (defun create-new-window-down ()
> "Create a new window below the current one."
> (interactive)
> (let ((this-window (selected-window))
> (new-window (split-window-vertically)))
> (if (> (nth 1 (window-edges new-window))
> (nth 1 (window-edges this-window)))
> (select-window new-window))))
>
> (defun create-new-window-left ()
> "Create a new window to the left of the current one."
> (interactive)
> (let ((this-window (selected-window))
> (new-window (split-window-horizontally)))
> (if (< (nth 0 (window-edges new-window))
> (nth 0 (window-edges this-window)))
> (select-window new-window))))
>
> (defun create-new-window-right ()
> "Create a new window to the right of the current one."
> (interactive)
> (let ((this-window (selected-window))
> (new-window (split-window-horizontally)))
> (if (> (nth 0 (window-edges new-window))
> (nth 0 (window-edges this-window)))
> (select-window new-window))))
>
>
>
> (defun move-up-to-window ()
> "Move up to the next window."
> (interactive)
> (move-to-nearby-window 0 -1))
>
> (defun move-down-to-window ()
> "Move down to the next window."
> (interactive)
> (move-to-nearby-window 0 1))
>
> (defun move-left-to-window ()
> "Move left to the next window."
> (interactive)
> (move-to-nearby-window -1 0))
>
> (defun move-right-to-window ()
> "Move right to the next window."
> (interactive)
> (move-to-nearby-window 1 0))
>
>
>
> (defun delete-up-window ()
> "Delete the window above this one."
> (interactive)
> (delete-nearby-window 0 -1))
>
> (defun delete-down-window ()
> "Delete the window below this one."
> (interactive)
> (delete-nearby-window 0 1))
>
> (defun delete-left-window ()
> "Delete the window to the left of this one."
> (interactive)
> (delete-nearby-window -1 0))
>
> (defun delete-right-window ()
> "Delete the window to the right of this one."
> (interactive)
> (delete-nearby-window 1 0))
>
>
> (defvar f1-map (make-sparse-keymap) "Keymap for F1.")
> (define-key global-map [f1] f1-map)
>
> (define-key f1-map [up] 'move-up-to-window)
> (define-key f1-map [down] 'move-down-to-window)
> (define-key f1-map [left] 'move-left-to-window)
> (define-key f1-map [right] 'move-right-to-window)
>
>
> (defvar f3-map (make-sparse-keymap) "Keymap for F3.")
> (define-key global-map [f3] f3-map)
>
> (define-key f3-map [up] 'create-new-window-up)
> (define-key f3-map [down] 'create-new-window-down)
> (define-key f3-map [left] 'create-new-window-left)
> (define-key f3-map [right] 'create-new-window-right)
>
>
> (defvar f4-map (make-sparse-keymap) "Keymap for F4.")
> (define-key global-map [f4] f4-map)
>
> (define-key f4-map [up] 'delete-up-window)
> (define-key f4-map [down] 'delete-down-window)
> (define-key f4-map [left] 'delete-left-window)
> (define-key f4-map [right] 'delete-right-window)
next prev parent reply other threads:[~2006-10-26 23:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-26 20:16 upgrading from 21.2.1 to 21.3.50.1 Eric Twietmeyer
2006-10-26 23:53 ` Eric Twietmeyer [this message]
2006-10-27 8:50 ` Eli Zaretskii
2006-10-27 12:12 ` Kim F. Storm
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=1161906792.467329.223400@e3g2000cwe.googlegroups.com \
--to=zimbus26@yahoo.com \
/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.
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).