Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 8433 Details for
Bug 15932
ratpoison-1.2.0_pre.ebuild (Update)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
ratpoison-1.2.0_pre-wrap.diff
ratpoison-1.2.0_pre-wrap.diff (text/plain), 13.69 KB, created by
Björn Lindström
on 2003-02-18 11:59:45 UTC
(
hide
)
Description:
ratpoison-1.2.0_pre-wrap.diff
Filename:
MIME Type:
Creator:
Björn Lindström
Created:
2003-02-18 11:59:45 UTC
Size:
13.69 KB
patch
obsolete
>diff -urN ratpoison-1.2.0.cvs.20020425/src/actions.c ratpoison-1.2.0.wrapmenu/src/actions.c >--- ratpoison-1.2.0.cvs.20020425/src/actions.c Thu Apr 25 14:30:46 2002 >+++ ratpoison-1.2.0.wrapmenu/src/actions.c Tue Oct 15 14:08:26 2002 >@@ -43,6 +43,7 @@ > {"echo", cmd_echo, arg_STRING}, > {"escape", cmd_escape, arg_STRING}, > {"exec", cmd_exec, arg_STRING}, >+ {"verbexec", cmd_verbexec, arg_STRING}, > {"focus", cmd_next_frame, arg_VOID}, > {"focusup", cmd_focusup, arg_VOID}, > {"focusdown", cmd_focusdown, arg_VOID}, >@@ -99,6 +100,8 @@ > {"defbarborder", cmd_defbarborder, arg_STRING}, > {"deftransgravity", cmd_deftransgravity, arg_STRING}, > {"defwaitcursor", cmd_defwaitcursor, arg_STRING}, >+ {"defwrapwinlist", cmd_defwrapwinlist, arg_STRING}, >+ {"togglewrapwinlist", cmd_togglewrapwinlist, arg_STRING}, > {"defwinfmt", cmd_defwinfmt, arg_STRING}, > {"defwinname", cmd_defwinname, arg_STRING}, > {"defwingravity", cmd_defwingravity, arg_STRING}, >@@ -967,6 +970,16 @@ > return NULL; > } > >+char * >+cmd_verbexec (int interactive, void *data) >+{ >+ char msg[100]="Running "; >+ strncat(msg, data, 100-strlen(msg)); >+ >+ if(data) cmd_echo(interactive, msg); >+ return cmd_exec(interactive, data); >+} >+ > > void > spawn(void *data) >@@ -1953,6 +1966,29 @@ > || sscanf (data, "%d", &defaults.wait_for_key_cursor) < 1) > { > message (" defwaitforkey: One argument required "); >+ } >+ >+ return NULL; >+} >+ >+ >+char* >+cmd_togglewrapwinlist() >+{ >+ if(defaults.wrap_window_list) return cmd_defwrapwinlist(0,(void*)"0"); >+ return cmd_defwrapwinlist(0,(void*)"1"); >+} >+ >+char * >+cmd_defwrapwinlist (int interactive, void *data) >+{ >+ if (data == NULL && !interactive) >+ return xsprintf ("%d", defaults.wrap_window_list); >+ >+ if (data == NULL >+ || sscanf (data, "%d", &defaults.wrap_window_list) < 1) >+ { >+ message (" defwrapwinlist: One argument required "); > } > > return NULL; >diff -urN ratpoison-1.2.0.cvs.20020425/src/actions.h ratpoison-1.2.0.wrapmenu/src/actions.h >--- ratpoison-1.2.0.cvs.20020425/src/actions.h Sun Mar 24 06:05:03 2002 >+++ ratpoison-1.2.0.wrapmenu/src/actions.h Tue Oct 15 13:55:29 2002 >@@ -44,6 +44,7 @@ > char * cmd_meta (int interactive, void *data); > char * cmd_abort (int interactive, void *data); > char * cmd_exec (int interactive, void *data); >+char * cmd_verbexec (int interactive, void *data); > char * cmd_colon (int interactive, void *data); > char * cmd_kill (int interactive, void *data); > char * cmd_delete (int interactive, void *data); >@@ -86,6 +87,8 @@ > char * cmd_defborder (int interactive, void *data); > char * cmd_definputwidth (int interactive, void *data); > char * cmd_defwaitcursor (int interactive, void *data); >+char * cmd_defwrapwinlist (int interactive, void *data); >+char * cmd_togglewrapwinlist (); > char * cmd_defwinfmt (int interactive, void *data); > char * cmd_defwinname (int interactive, void *data); > char * cmd_deffgcolor (int interactive, void *data); >diff -urN ratpoison-1.2.0.cvs.20020425/src/bar.c ratpoison-1.2.0.wrapmenu/src/bar.c >--- ratpoison-1.2.0.cvs.20020425/src/bar.c Sun Feb 3 00:45:18 2002 >+++ ratpoison-1.2.0.wrapmenu/src/bar.c Tue Oct 15 12:49:43 2002 >@@ -107,7 +107,7 @@ > } > > int >-bar_y (screen_info *s) >+bar_y (screen_info *s, int height) > { > int y = 0; > >@@ -121,13 +121,13 @@ > case EastGravity: > case CenterGravity: > case WestGravity: >- y = (s->root_attr.height - (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2) >+ y = (s->root_attr.height - height > - defaults.bar_border_width * 2) / 2; > break; > case SouthEastGravity: > case SouthGravity: > case SouthWestGravity: >- y = (s->root_attr.height - (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2) >+ y = (s->root_attr.height - height > - defaults.bar_border_width * 2); > break; > } >@@ -148,9 +148,15 @@ > if (bar_buffer == NULL) > bar_buffer = sbuf_new (0); > >- get_window_list (defaults.window_fmt, NULL, bar_buffer, &mark_start, &mark_end); >+ if(!defaults.wrap_window_list){ >+ get_window_list (defaults.window_fmt, NULL, bar_buffer, &mark_start, &mark_end); >+ marked_message (sbuf_get (bar_buffer), mark_start, mark_end); >+ } >+ else{ >+ get_window_list (defaults.window_fmt, "\n", bar_buffer, &mark_start, &mark_end); >+ marked_wrapped_message(sbuf_get (bar_buffer), mark_start, mark_end); >+ } > >- marked_message (sbuf_get (bar_buffer), mark_start, mark_end); > } > > void >@@ -167,6 +173,229 @@ > free (buffer); > } > >+ >+int >+count_lines (char* msg, int len) >+{ >+ int ret=1; >+ int i=0; >+ for(; i<len; ++i) { >+ if(msg[i]=='\n') ret++; >+ } >+ PRINT_DEBUG("count_lines: %d\n", ret); >+ return ret; >+} >+ >+ >+int >+max_line_length (char* msg) >+{ >+ int ret=0; >+ int i=0; >+ int j=0; >+ int len=strlen(msg); >+ int current_width=0; >+ char tmp_buf[100]; >+ >+ for(; i<=len; ++j, ++i) { >+ if(msg[i]=='\n' || msg[i]=='\0') { >+ tmp_buf[j]='\0'; >+ current_width = XTextWidth (defaults.font, tmp_buf, strlen (tmp_buf)); >+ if(current_width>ret) ret=current_width; >+ j=0; >+ } >+ else tmp_buf[j]=msg[i]; >+ } >+ PRINT_DEBUG("max_line_length: %d\n", ret); >+ return ret; >+} >+ >+int >+pos_in_line (char* msg, int pos) >+{ >+ int i=pos - 1; >+ int ret=0; >+ if(i>=0) { >+ for(; i<=pos && i>=0; ++ret, --i) if(msg[i]=='\n') break; >+ } >+ PRINT_DEBUG("pos_in_line(\"%s\", %d) = %d\n", msg, pos, ret); >+ return ret; >+} >+ >+int >+line_beginning (char* msg, int pos) >+{ >+ int ret=0; >+ int i=pos-1; >+ if(i) { >+ for(; i>=0; --i) { >+ /* PRINT_DEBUG("pos = %d, i = %d, msg[i] = '%c'\n", pos, i, msg[i]); */ >+ if (msg[i]=='\n') { >+ ret=i+1; >+ break; >+ } >+ } >+ } >+ PRINT_DEBUG("line_beginning(\"%s\", %d) = %d\n", msg, pos, ret); >+ return ret; >+ >+} >+ >+void >+marked_wrapped_message (char *msg, int mark_start, int mark_end) >+{ >+ XGCValues lgv; >+ GC lgc; >+ unsigned long mask; >+ screen_info *s = current_screen (); >+ int i=0; >+ int j=0; >+ int num_lines; >+ int line_no=0; >+ char tmp_buf[100]; >+ >+ >+ >+ int width = defaults.bar_x_padding * 2 + max_line_length(msg); >+ /* XTextWidth (defaults.font, msg, strlen (msg)); */ >+ int line_height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2); >+ int height; >+ >+ PRINT_DEBUG ("msg = %s\n", msg); >+ PRINT_DEBUG ("mark_start = %d, mark_end = %d\n", mark_start, mark_end); >+ >+ >+ num_lines = count_lines(msg, strlen(msg)); >+ height = line_height * num_lines; >+ >+ /* Map the bar if needed */ >+ if (!s->bar_is_raised) >+ { >+ s->bar_is_raised = BAR_IS_MESSAGE; >+ XMapRaised (dpy, s->bar_window); >+ } >+ >+ /* Reset the alarm to auto-hide the bar in BAR_TIMEOUT seconds. */ >+ alarm (defaults.bar_timeout); >+ alarm_signalled = 0; >+ >+ XMoveResizeWindow (dpy, s->bar_window, >+ bar_x (s, width), bar_y (s, height), >+ width, >+ height); >+ >+ XRaiseWindow (dpy, s->bar_window); >+ XClearWindow (dpy, s->bar_window); >+ XSync (dpy, False); >+ >+ /* if(!defaults.wrap_window_list){ >+ XDrawString (dpy, s->bar_window, s->normal_gc, >+ defaults.bar_x_padding, >+ defaults.bar_y_padding + defaults.font->max_bounds.ascent, >+ msg, strlen (msg)); >+ } else { */ >+ for(i=0; i<=strlen(msg); ++i) { >+ if (msg[i]!='\0' && msg[i]!='\n') { >+ tmp_buf[j]=msg[i]; >+ j++; >+ } >+ else { >+ tmp_buf[j]='\0'; >+ XDrawString (dpy, s->bar_window, s->normal_gc, >+ defaults.bar_x_padding, >+ defaults.bar_y_padding + defaults.font->max_bounds.ascent >+ + line_no * line_height, >+ tmp_buf, strlen(tmp_buf)); >+ j=0; >+ line_no++; >+ } >+ } >+ >+ >+ >+ XSync (dpy, False); >+ >+ /* Crop to boundary conditions. */ >+ if (mark_start < 0) >+ mark_start = 0; >+ >+ if (mark_end < 0) >+ mark_end = 0; >+ >+ if (mark_start > strlen (msg)) >+ mark_start = strlen (msg); >+ >+ if (mark_end > strlen (msg)) >+ mark_end = strlen (msg); >+ >+ if (mark_start > mark_end+mark_start) >+ { >+ int tmp; >+ tmp = mark_start; >+ mark_start = mark_end; >+ mark_end = tmp; >+ } >+ >+ /* xor the string representing the current window */ >+ if (mark_end) >+ { >+ int start; >+ int end; >+ /* int width; */ >+ int start_line, end_line; >+ int start_pos_in_line, end_pos_in_line; >+ int start_line_beginning, end_line_beginning; >+ >+ start_line=count_lines(msg, mark_start); >+ end_line=count_lines(msg, mark_end+mark_start-1); >+ >+ start_pos_in_line = pos_in_line(msg, mark_start); >+ end_pos_in_line = pos_in_line(msg, mark_end+mark_start-1); >+ >+ start_line_beginning = line_beginning(msg, mark_start); >+ end_line_beginning = line_beginning(msg, mark_end+mark_start-1); >+ >+ PRINT_DEBUG ("start_line = %d, end_line = %d\n", start_line, end_line); >+ >+ if (mark_start == 0 || start_pos_in_line == 0) >+ start = 0; >+ else >+ start = XTextWidth (defaults.font, >+ &msg[start_line_beginning], >+ start_pos_in_line) + defaults.bar_x_padding; >+ >+ >+ end = XTextWidth (defaults.font, &msg[end_line_beginning], >+ end_pos_in_line + (msg[end_line_beginning+end_pos_in_line+1] == '\0'?1:0) ) >+ + defaults.bar_x_padding * 2; >+ >+ if (mark_end != strlen (msg)) end -= defaults.bar_x_padding; >+ >+ /* width = end - start; */ >+ >+ PRINT_DEBUG ("start = %d, end = %d, width = %d\n", start, end, width); >+ >+ lgv.foreground = current_screen()->fg_color; >+ lgv.function = GXxor; >+ mask = GCForeground | GCFunction; >+ lgc = XCreateGC(dpy, s->root, mask, &lgv); >+ >+ XFillRectangle (dpy, s->bar_window, lgc, start, (start_line-1)*line_height, width, (end_line-start_line+1)*line_height); >+ >+ lgv.foreground = s->bg_color; >+ lgc = XCreateGC(dpy, s->root, mask, &lgv); >+ >+ XFillRectangle (dpy, s->bar_window, lgc, start, (start_line-1)*line_height, width, (end_line-start_line+1)*line_height); >+ } >+ >+ /* Keep a record of the message. */ >+ if (last_msg) >+ free (last_msg); >+ last_msg = xstrdup (msg); >+ last_mark_start = mark_start; >+ last_mark_end = mark_end; >+} >+ > void > marked_message (char *msg, int mark_start, int mark_end) > { >@@ -192,7 +421,7 @@ > alarm_signalled = 0; > > XMoveResizeWindow (dpy, s->bar_window, >- bar_x (s, width), bar_y (s), >+ bar_x (s, width), bar_y (s, height), > width, > height); > >@@ -267,6 +496,7 @@ > last_mark_start = mark_start; > last_mark_end = mark_end; > } >+ > > void > show_last_message () >diff -urN ratpoison-1.2.0.cvs.20020425/src/bar.h ratpoison-1.2.0.wrapmenu/src/bar.h >--- ratpoison-1.2.0.cvs.20020425/src/bar.h Tue Sep 18 08:19:46 2001 >+++ ratpoison-1.2.0.wrapmenu/src/bar.h Tue Oct 15 12:48:54 2002 >@@ -25,11 +25,12 @@ > void update_window_names (screen_info *s); > int show_bar (screen_info *s); > int hide_bar (screen_info *s); >-int bar_y (screen_info *s); >+int bar_y (screen_info *s, int height); > int bar_x (screen_info *s, int width); > >-#define message(msg) marked_message (msg, 0, 0) >+#define message(msg) marked_message ((msg), 0, 0) > void marked_message (char *msg, int hl_start, int hl_end); >+void marked_wrapped_message (char *msg, int hl_start, int hl_end); > void marked_message_printf (int mark_start, int mark_end, char *fmt, ...); > void show_last_message (); > >diff -urN ratpoison-1.2.0.cvs.20020425/src/data.h ratpoison-1.2.0.wrapmenu/src/data.h >--- ratpoison-1.2.0.cvs.20020425/src/data.h Wed Mar 13 08:23:30 2002 >+++ ratpoison-1.2.0.wrapmenu/src/data.h Tue Oct 15 12:40:06 2002 >@@ -160,6 +160,8 @@ > int win_name; > > int startup_message; >+ >+ int wrap_window_list; > }; > > extern struct rp_defaults defaults; >diff -urN ratpoison-1.2.0.cvs.20020425/src/input.c ratpoison-1.2.0.wrapmenu/src/input.c >--- ratpoison-1.2.0.cvs.20020425/src/input.c Tue Jan 15 18:50:42 2002 >+++ ratpoison-1.2.0.wrapmenu/src/input.c Tue Oct 15 12:25:16 2002 >@@ -278,18 +278,20 @@ > { > int prompt_width = XTextWidth (defaults.font, prompt, strlen (prompt)); > int input_width = XTextWidth (defaults.font, input, input_len); >- int width; >+ int width, height; > > width = defaults.bar_x_padding * 2 + prompt_width + input_width; >+ height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2); > > if (width < defaults.input_window_size + prompt_width) > { > width = defaults.input_window_size + prompt_width; > } > >+ >+ > XMoveResizeWindow (dpy, s->input_window, >- bar_x (s, width), bar_y (s), width, >- (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2)); >+ bar_x (s, width), bar_y (s, height), width, height); > > XClearWindow (dpy, s->input_window); > XSync (dpy, False); >diff -urN ratpoison-1.2.0.cvs.20020425/src/list.c ratpoison-1.2.0.wrapmenu/src/list.c >--- ratpoison-1.2.0.cvs.20020425/src/list.c Sat Jan 26 23:59:26 2002 >+++ ratpoison-1.2.0.wrapmenu/src/list.c Tue Oct 15 12:50:13 2002 >@@ -19,6 +19,7 @@ > * Boston, MA 02111-1307 USA > */ > >+ > #include <stdio.h> > #include <stdlib.h> > #include <string.h> >@@ -740,7 +741,7 @@ > > if (w == current_window()) > *mark_start = strlen (sbuf_get (buffer)); >- >+ > /* A hack, pad the window with a space at the beginning and end > if there is no delimiter. */ > if (!delim) >@@ -758,8 +759,13 @@ > if (delim && w->next != rp_mapped_window_sentinel) > sbuf_concat (buffer, delim); > >- if (w == current_window()) >- *mark_end = strlen (sbuf_get (buffer)); >+ if (w == current_window()) { >+ if(!defaults.wrap_window_list){ >+ *mark_end = strlen (sbuf_get (buffer)); >+ } else { >+ *mark_end = strlen (sbuf_get(buffer))- *mark_start; >+ } >+ } > } > > if (!strcmp (sbuf_get (buffer), "")) >diff -urN ratpoison-1.2.0.cvs.20020425/src/main.c ratpoison-1.2.0.wrapmenu/src/main.c >--- ratpoison-1.2.0.cvs.20020425/src/main.c Sun Jan 27 00:57:19 2002 >+++ ratpoison-1.2.0.wrapmenu/src/main.c Tue Oct 15 12:50:58 2002 >@@ -445,6 +445,7 @@ > > defaults.win_name = 0; > defaults.startup_message = 1; >+ defaults.wrap_window_list = 1; > } > > int
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 15932
:
8432
| 8433 |
8434