I sent this patch to emacs-devel, but I think its quite relevant here as
well. My aim is to help delete the advice ECB uses, by implementing
suitable C primitives.
Any opinions?
------------------------
As discussed in the IDE threads, it would be desirable to be able to
optionally change certain window operations.
This patch makes it possible to disable delete-other-windows for a
window.
Its only lightly tested, and I offer it here mostly to discuss the
interface.
To test:
- make several windows
- (set-window-operation-behaviour-flags (window-at 0 0) '(delete-other-windows t))
The topmost window now wont go away even if you do c-x 1 in the other windows.
If the windows plist window-operation-behaviour-flags
delete-other-windows is t, the window is not electable for deletion when
delete-other-windows is run.
I chose this interface mostly for ease of implementation, but I think
its ok in other regards as well.
Next task is to do the same for other-window.
=== modified file 'src/window.c'
--- src/window.c 2008-04-03 02:15:43 +0000
+++ src/window.c 2008-04-25 22:10:09 +0000
@@ -55,6 +55,7 @@
Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;
Lisp_Object Qscroll_up, Qscroll_down;
+Lisp_Object Qdelete_other_windows;
Lisp_Object Qwindow_size_fixed;
extern Lisp_Object Qleft_margin, Qright_margin;
@@ -275,6 +276,7 @@
p->frame = Qnil;
p->display_table = Qnil;
p->dedicated = Qnil;
+ p->window_operation_behaviour_flags = Qnil;
p->pseudo_window_p = 0;
bzero (&p->cursor, sizeof (p->cursor));
bzero (&p->last_cursor, sizeof (p->last_cursor));
@@ -1325,6 +1327,32 @@
return w->dedicated;
}
+DEFUN ("window-operation-behaviour-flags", Fwindow_operation_behaviour_flags, Swindow_operation_behaviour_flags,
+ 1, 1, 0,
+ doc: /* Return WINDOW's window_operation_behaviour_flags.
+ returns nil or a plist where keys are
+ window operations, values flags that might modify the operation behaviour'. */)
+ (window)
+ Lisp_Object window;
+{
+ return decode_window (window)->window_operation_behaviour_flags;
+}
+
+
+DEFUN ("set-window-operation-behaviour-flags", Fset_window_operation_behaviour_flags,
+ Sset_window_operation_behaviour_flags, 2, 2, 0,
+ doc: /* set window operation flags */)
+ (window, arg)
+ Lisp_Object window, arg;
+{
+ register struct window *w = decode_window (window);
+
+ w->window_operation_behaviour_flags = arg;
+
+ return w->window_operation_behaviour_flags;
+}
+
+
DEFUN ("window-display-table", Fwindow_display_table, Swindow_display_table,
0, 1, 0,
doc: /* Return the display-table that WINDOW is using.
@@ -2209,7 +2237,10 @@
break;
case DELETE_OTHER_WINDOWS:
- if (!EQ (window, obj))
+ //
+ if ((!EQ (window, obj)) && //obj is not the current window
+ //current window doesnt have delete_other_windows disabled (t inhibits)
+ (NILP(Fplist_get (w->window_operation_behaviour_flags, Qdelete_other_windows))))
Fdelete_window (window);
break;
@@ -7398,6 +7429,10 @@
void
syms_of_window ()
{
+
+ Qdelete_other_windows = intern ("delete-other-windows");
+ staticpro (&Qdelete_other_windows);
+
Qscroll_up = intern ("scroll-up");
staticpro (&Qscroll_up);
@@ -7714,6 +7749,9 @@
defsubr (&Sset_window_vscroll);
defsubr (&Scompare_window_configurations);
defsubr (&Swindow_list);
+ defsubr (&Swindow_operation_behaviour_flags);
+ defsubr (&Sset_window_operation_behaviour_flags);
+
}
void
=== modified file 'src/window.h'
--- src/window.h 2008-01-29 02:05:10 +0000
+++ src/window.h 2008-04-25 15:53:53 +0000
@@ -229,6 +229,9 @@
enlarged. */
Lisp_Object orig_total_lines, orig_top_line;
+ /* a plist with flags that modifies behaviour of certain window operations*/
+ Lisp_Object window_operation_behaviour_flags;
+
/* No Lisp data may follow below this point without changing
mark_object in alloc.c. The member current_matrix must be the
first non-Lisp member. */
--
Joakim Verona
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.