home *** CD-ROM | disk | FTP | other *** search
- %
- % JED mouse interface
- %
- % These routines assume a 3 button mouse
- %
- % left : set point to mouse point
- % middle : paste from cut buffer moving point to mouse point
- % right : copy region from point to mouse point to cut buffer
- % drag left : mark a region and copy it to cut buffer
- % drag right : mark a region and copy it to cut buffer
- % shift left : split window mouse is in
- % control left : delete window mouse is in
- % control right : kill region between point and mouse point to cut buffer
- %
- % Other buttons are undefined.
- %
-
- setkey ("mouse_set_point_open", "^[^@Dl"); % left button down
- setkey ("mouse_set_point_close", "^[^@Ul"); % left button up
- setkey ("mouse_yank_cutbuffer", "^[^@Dm"); % middle down
- setkey ("mouse_mark_and_copy", "^[^@Dr"); % right down
- setkey ("mouse_set_point_close", "^[^@Ur"); % right up
- setkey ("mouse_null", "^[^@Um"); % middle up
-
- % dragging
- setkey ("mouse_drag", "^[^@^@l"); % left dragging
- setkey ("mouse_drag", "^[^@^@r"); % right dragging
- setkey ("mouse_null", "^[^@^@^L"); % C-left dragging
- setkey ("mouse_drag", "^[^@^@^R"); % C-right dragging
- setkey ("mouse_null", "^[^@^@L"); % S-left dragging
- setkey ("mouse_null", "^[^@^@R"); % S-right dragging
-
- % shifted
- setkey ("mouse_split_window", "^[^@DL"); % Shift-left button down
- setkey ("mouse_null", "^[^@UL"); % left button up
- setkey ("mouse_yank_from_jed", "^[^@DM"); % middle down
- setkey ("mouse_null", "^[^@DR"); % right down
- setkey ("mouse_null", "^[^@UR"); % right up
- setkey ("mouse_null", "^[^@UM"); % middle up
-
- % ctrl
- setkey ("mouse_delete_window", "^[^@D^L"); % left button down
- setkey ("mouse_null", "^[^@U^L"); % left button up
- setkey ("mouse_null", "^[^@D^M"); % middle down
- setkey ("mouse_kill_region", "^[^@D^R"); % right down
- setkey ("mouse_set_point_close", "^[^@U^R"); % right up
- setkey ("mouse_null", "^[^@U^M"); % middle up
-
- define mouse_null ();
-
- % loop through windows moving the point to the mouse point
- % if same_window is false, and mouse is on status line, call status_fun
- % if use_status_fun is non-zero.
- define mouse_point_mouse (force, same_window, push, use_status_fun, status_fun)
- {
- variable n = nwindows ();
- variable top, bot, dy, col, want_col;
-
- while (n)
- {
- top = window_info('t');
- bot = window_info('r') + top;
- if ((MOUSE_Y >= top) and (MOUSE_Y < bot))
- {
- if (push) call("set_mark_cmd");
- dy = MOUSE_Y - (top - 1 + window_line());
- if (dy > 0)
- {
- dy -= down(dy);
- eol();
- if (force) loop (dy) newline();
- }
- else go_up(- dy);
-
- eol();
- col = what_column ();
- want_col = window_info('c') + MOUSE_X - 1;
- !if (force or (want_col <= col)) want_col = col;
- goto_column_best_try(want_col); pop();
- return 1;
- }
-
- if (same_window)
- {
- if (push) call("set_mark_cmd");
- if (MOUSE_Y >= bot)
- {
- go_down(MOUSE_Y - bot);
- }
- else
- {
- go_up(top - MOUSE_Y);
- }
- x_warp_pointer ();
- return 1;
- }
-
- if ((bot == MOUSE_Y) and (use_status_fun))
- {
- status_fun ();
- return 0;
- }
-
- otherwindow();
- n--;
- }
- error ("Mouse not in a window.");
- }
-
- variable Mouse_Drag_Mode = 0;
- variable Mouse_Buffer = " *Mouse buffer*";
- variable Mouse_Delete_Region = 0;
- define copy_kill_to_mouse_buffer ()
- {
- variable cbuf = whatbuf ();
- variable pnt, n;
- %
- % We are not going to copy to the pastebuffer if the region is nil
- %
- n = whatline(); pnt = POINT;
- push_spot();
- pop_mark(1);
- if ((whatline() == n) and (POINT == pnt))
- {
- pop_spot();
- return;
- }
- push_mark();
- pop_spot();
-
- setbuf(Mouse_Buffer);
- erase_buffer ();
- setbuf (cbuf);
-
- if (Mouse_Delete_Region) pop(dupmark());
- dupmark(); pop(); %/* for cut buffer */
- x_copy_region_to_cutbuffer ();
- copy_region(Mouse_Buffer);
- if (Mouse_Delete_Region)
- {
- Mouse_Delete_Region = 0;
- del_region();
- }
- message ("region copied.");
- }
-
-
- define mouse_next_buffer ()
- {
- variable n, buf, cbuf = whatbuf ();
-
- n = buffer_list (); %/* buffers on stack */
- loop (n)
- {
- =buf;
- n--;
- if (buf[0] == ' ') continue;
- if (buffer_visible (buf)) continue;
- sw2buf (buf);
- loop (n) pop ();
- return;
- }
- error ("All buffers are visible.");
- }
-
-
-
-
- define mouse_set_point_open ()
- {
- Mouse_Drag_Mode = 0;
- mouse_point_mouse (0, 0, 0, 1, &mouse_next_buffer); pop ();
- }
-
- define mouse_set_point_close ()
- {
- if (Mouse_Drag_Mode)
- {
- copy_kill_to_mouse_buffer ();
- Mouse_Drag_Mode = 0;
- }
- else if (MOUSE_BUTTON == 3)
- {
- dupmark(); pop();
- copy_kill_to_mouse_buffer ();
- pop_mark(1);
- }
- }
-
- define mouse_yank_from_jed ()
- {
- mouse_point_mouse (0, 0, 0, 0, 0); pop ();
- if (bufferp(Mouse_Buffer)) insbuf(Mouse_Buffer);
- }
-
- define mouse_yank_cutbuffer ()
- {
- if (mouse_point_mouse (0, 0, 0, 1, &splitwindow))
- {
- x_insert_cutbuffer (); pop();
- return;
- }
- }
-
- define delete_window ()
- {
- call("delete_window");
- }
-
- define mouse_mark_and_copy ()
- {
- Mouse_Drag_Mode = 0;
- mouse_point_mouse (0, 0, 1, 1, &delete_window); pop ();
- }
-
-
- define mouse_drag ()
- {
- !if (Mouse_Drag_Mode)
- {
- call ("set_mark_cmd");
- Mouse_Drag_Mode = 1;
- }
- mouse_point_mouse (0, 1, 0, 0, 0); pop ();
- update (not(input_pending(0)));
- }
-
-
- define mouse_kill_region ()
- {
- Mouse_Delete_Region = 1;
- mouse_mark_and_copy (0, 0, 1);
- }
-
-
- define mouse_split_window ()
- {
- mouse_point_mouse (0, 0, 0, 0, 0); pop ();
- splitwindow();
- }
-
- define mouse_delete_window ()
- {
- mouse_point_mouse (0, 0, 0, 0, 0); pop ();
- delete_window ();
- }
-
-
-