From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Eric Twietmeyer" Newsgroups: gmane.emacs.help Subject: upgrading from 21.2.1 to 21.3.50.1 Date: 26 Oct 2006 13:16:05 -0700 Organization: http://groups.google.com Message-ID: <1161893765.148453.299830@f16g2000cwb.googlegroups.com> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-Trace: sea.gmane.org 1161895309 31352 80.91.229.2 (26 Oct 2006 20:41:49 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 26 Oct 2006 20:41:49 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Oct 26 22:41:48 2006 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GdC2d-0007Yz-Dq for geh-help-gnu-emacs@m.gmane.org; Thu, 26 Oct 2006 22:41:31 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GdC2c-0007O1-Um for geh-help-gnu-emacs@m.gmane.org; Thu, 26 Oct 2006 16:41:30 -0400 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!postnews.google.com!f16g2000cwb.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 197 Original-NNTP-Posting-Host: 209.12.29.235 Original-X-Trace: posting.google.com 1161893770 21799 127.0.0.1 (26 Oct 2006 20:16:10 GMT) Original-X-Complaints-To: groups-abuse@google.com Original-NNTP-Posting-Date: Thu, 26 Oct 2006 20:16:10 +0000 (UTC) User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: f16g2000cwb.googlegroups.com; posting-host=209.12.29.235; posting-account=X4mNGgwAAABKvPB38ntAu46e-VHbLqgS Original-Xref: shelby.stanford.edu gnu.emacs.help:142693 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:38313 Archived-At: 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 " " for instance and move to the window in the current frame "above" the currently active window. Now that I have upgraded, the and directions work to move to, create, or delete a window, but the and 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)