Mercurial > hg > xemacs-beta
diff lisp/hyperbole/h-skip-bytec.lsp @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/hyperbole/h-skip-bytec.lsp Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,84 @@ +;;!emacs +;; +;; FILE: h-skip-bytec.lsp +;; SUMMARY: Functions that should not be byte-compiled. +;; USAGE: GNU Emacs Lisp Library +;; KEYWORDS: mouse, hypermedia +;; +;; AUTHOR: Bob Weiner +;; ORG: Motorola, Inc., PPG +;; +;; ORIG-DATE: 8-Oct-92 at 17:17:10 +;; LAST-MOD: 9-May-95 at 16:18:42 by Bob Weiner +;; +;; This file is part of Hyperbole. +;; Available for use and distribution under the same terms as GNU Emacs. +;; +;; Copyright (C) 1992-1995, Free Software Foundation, Inc. +;; Developed with support from Motorola Inc. +;; +;; DESCRIPTION: +;; +;; DON'T byte-compile this file or its functions may not work. +;; If we knew why they won't work, they wouldn't be in here. +;; +;; DESCRIP-END. + +;;; ************************************************************************ +;;; Public functions +;;; ************************************************************************ + +;;; For some reason, using this in byte-compiled form causes first character +;;; after mouse key depress to be dropped from input queue when running +;;; Emacs under X. The non-byte-compiled form works fine. + +(defun hmouse-set-point (args) + "Sets point to Smart Key press/release location given by ARGS. +Returns argument list including x and y frame coordinates in characters and +lines." + (and (car args) (listp (car args)) (setq args (car args))) + (if (not hyperb:window-system) + (point-marker) + (let ((point-args (hmouse-set-point-at args))) + (cond (hyperb:xemacs-p + (if (eventp current-mouse-event) + (copy-event current-mouse-event))) + (hyperb:lemacs-p + (cond ((and (fboundp 'mouse-position) + ;; mouse-position returns nil coords when not over + ;; existing text within a window, so we can only use + ;; its coordinates when non-nil. It returns a cons + ;; of (device X . Y) in chars. We drop the device + ;; and assume the selected frame. + (car (cdr (setq point-args (mouse-position))))) + (cdr point-args)) + ((and (fboundp 'read-mouse-position) + ;; read-mouse-position returns nil coords when not + ;; over existing text within a window, so we can + ;; only use its coordinates when non-nil. It + ;; returns a cons of (X . Y) in chars. + (car (setq point-args (read-mouse-position + (selected-frame))))) + point-args) + (t + ;; We just compute X and Y from event's location. + (cons (event-x current-mouse-event) + (event-y current-mouse-event))))) + (hyperb:epoch-p + ;; Modeline clicks return nil for point position so we + ;; must compute it instead of using the arguments given. + (let ((x-char (/ (* mouse::x (window-width)) + (window-pixwidth))) + (y-char (/ (* mouse::y (window-height)) + (window-pixheight)))) + (apply 'list x-char y-char args))) + ((or (equal hyperb:window-system "next") + (equal hyperb:window-system "sun")) + (let ((win (car args))) + (list win + (+ (nth 1 args) (nth 0 (window-edges win))) + (+ (nth 2 args) (nth 1 (window-edges win)))))) + ((equal hyperb:window-system "apollo") point-args) + (t args))))) + +(provide 'h-skip-bytec)