blob: fd2ef56824ea325000817fc90409afba3fb22e57 [file] [log] [blame]
Bram Moolenaar74675a62017-07-15 13:53:23 +02001*gui_x11.txt* For Vim version 8.0. Last change: 2017 Jun 27
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Vim's Graphical User Interface *gui-x11* *GUI-X11*
8 *Athena* *Motif*
91. Starting the X11 GUI |gui-x11-start|
102. GUI Resources |gui-resources|
113. Shell Commands |gui-pty|
124. Various |gui-x11-various|
135. GTK version |gui-gtk|
146. GNOME version |gui-gnome|
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000157. KDE version |gui-kde|
Bram Moolenaar843ee412004-06-30 16:16:41 +0000168. Compiling |gui-x11-compiling|
179. X11 selection mechanism |x11-selection|
Bram Moolenaar071d4272004-06-13 20:20:40 +000018
19Other relevant documentation:
20|gui.txt| For generic items of the GUI.
21
22{Vi does not have any of these commands}
23
24==============================================================================
251. Starting the X11 GUI *gui-x11-start* *E665*
26
27Then you can run the GUI version of Vim in either of these ways:
28 gvim [options] [files...]
29 vim -g [options] [files...]
30
31So if you call the executable "gvim", or make "gvim" a link to the executable,
32then the GUI version will automatically be used. Additional characters may be
33added after "gvim", for example "gvim-5".
34
35You may also start up the GUI from within the terminal version by using one of
36these commands:
37 :gui [++opt] [+cmd] [-f|-b] [files...] *:gu* *:gui*
38 :gvim [++opt] [+cmd] [-f|-b] [files...] *:gv* *:gvim*
39The "-f" option runs Vim in the foreground.
40The "-b" option runs Vim in the background (this is the default).
41Also see |++opt| and |+cmd|.
42
43 *gui-fork*
44When the GUI is started, it does a fork() and exits the current process.
45When gvim was started from a shell this makes the shell accept further
46commands. If you don't want this (e.g. when using gvim for a mail program
47that waits for gvim to exit), start gvim with "gvim -f", "vim -gf" or use
48":gui -f". Don't use "vim -fg", because "-fg" specifies the foreground
49color.
50
51When using "gvim -f" and then ":gui", Vim will run in the foreground. The
52"-f" argument will be remembered. To force running Vim in the background use
53":gui -b".
54
55"gvim --nofork" does the same as "gvim -f".
Bram Moolenaar5302d9e2011-09-14 17:55:08 +020056 *E851* *E852*
57When starting the GUI fails Vim will try to continue running in the terminal.
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
59If you want the GUI to run in the foreground always, include the 'f'
60flag in 'guioptions'. |-f|.
61
62==============================================================================
632. GUI Resources *gui-resources* *.Xdefaults*
64
Bram Moolenaar843ee412004-06-30 16:16:41 +000065If using the Motif or Athena version of the GUI (not for the KDE, GTK+ or Win32
Bram Moolenaar071d4272004-06-13 20:20:40 +000066version), a number of X resources are available. You should use Vim's class
67"Vim" when setting these. They are as follows:
68
69 Resource name Meaning ~
70
71 reverseVideo Boolean: should reverse video be used?
72 background Color of background.
73 foreground Color of normal text.
74 scrollBackground Color of trough portion of scrollbars.
75 scrollForeground Color of slider and arrow portions of scrollbars.
76 menuBackground Color of menu backgrounds.
77 menuForeground Color of menu foregrounds.
78 tooltipForeground Color of tooltip and balloon foreground.
79 tooltipBackground Color of tooltip and balloon background.
80
81 font Name of font used for normal text.
82 boldFont Name of font used for bold text.
83 italicFont Name of font used for italic text.
84 boldItalicFont Name of font used for bold, italic text.
85 menuFont Name of font used for the menus, used when compiled
86 without the |+xfontset| feature
87 menuFontSet Name of fontset used for the menus, used when compiled
88 with the |+xfontset| feature
89 tooltipFont Name of the font used for the tooltip and balloons.
90 When compiled with the |+xfontset| feature this is a
91 fontset name.
92
93 geometry Initial geometry to use for gvim's window (default
94 is same size as terminal that started it).
95 scrollbarWidth Thickness of scrollbars.
96 borderWidth Thickness of border around text area.
97 menuHeight Height of the menu bar (only for Athena).
98
99A special font for italic, bold, and italic-bold text will only be used if
100the user has specified one via a resource. No attempt is made to guess what
101fonts should be used for these based on the normal text font.
102
103Note that the colors can also be set with the ":highlight" command, using the
104"Normal", "Menu", "Tooltip", and "Scrollbar" groups. Example: >
105 :highlight Menu guibg=lightblue
106 :highlight Tooltip guibg=yellow
107 :highlight Scrollbar guibg=lightblue guifg=blue
108 :highlight Normal guibg=grey90
109<
110 *font-sizes*
111Note: All fonts (except for the menu and tooltip) must be of the same size!!!
112If you don't do this, text will disappear or mess up the display. Vim does
113not check the font sizes. It's the size in screen pixels that must be the
114same. Note that some fonts that have the same point size don't have the same
115pixel size! Additionally, the positioning of the fonts must be the same
116(ascent and descent). You can check this with "xlsfonts -l {fontname}".
117
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000118If any of these things are also set with Vim commands, e.g. with
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119":set guifont=Screen15", then this will override the X resources (currently
120'guifont' is the only option that is supported).
121
122Here is an example of what you might put in your ~/.Xdefaults file: >
123
124 Vim*useSchemes: all
125 Vim*sgiMode: true
126 Vim*useEnhancedFSB: true
127 Vim.foreground: Black
128 Vim.background: Wheat
129 Vim*fontList: 7x13
130
131The first three of these are standard resources on Silicon Graphics machines
132which make Motif applications look even better, highly recommended!
133
134The "Vim*fontList" is to set the menu font for Motif. Example: >
135 Vim*menuBar*fontList: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
136With Athena: >
137 Vim*menuBar*SmeBSB*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
138 Vim*menuBar*MenuButton*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
139
140NOTE: A more portable, and indeed more correct, way to specify the menu font
141in either Motif or Athena is through the resource: >
142 Vim.menuFont: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
143Or, when compiled with the |+xfontset| feature: >
144 Vim.menuFontSet: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
145
146Don't use "Vim*geometry" in the defaults. This will break the menus. Use
147"Vim.geometry" instead.
148
149If you get an error message "Cannot allocate colormap entry for "gray60",
150try adding this to your Vim resources (change the colors to your liking): >
151
152 Vim*scrollBackground: Black
153 Vim*scrollForeground: Blue
154
155The resources can also be set with arguments to Vim:
156
157 argument meaning ~
158 *-gui*
159 -display {display} Run vim on {display} *-display*
160 -iconic Start vim iconified *-iconic*
161 -background {color} Use {color} for the background *-background*
162 -bg {color} idem *-bg*
163 -foreground {color} Use {color} for normal text *-foreground*
164 -fg {color} idem *-fg*
165 -ul {color} idem *-ul*
166 -font {font} Use {font} for normal text *-font*
167 -fn {font} idem *-fn*
168 -boldfont {font} Use {font} for bold text *-boldfont*
169 -italicfont {font} Use {font} for italic text *-italicfont*
170 -menufont {font} Use {font} for menu items *-menufont*
171 -menufontset {fontset} Use {fontset} for menu items *-menufontset*
172 -mf {font} idem *-mf*
173 -geometry {geom} Use {geom} for initial geometry *-geometry*
174 -geom {geom} idem, see |-geometry-example| *-geom*
175 -borderwidth {width} Use a border width of {width} *-borderwidth*
176 -bw {width} idem *-bw*
177 *-scrollbarwidth*
178 -scrollbarwidth {width} Use a scrollbar width of {width}
179 -sw {width} idem *-sw*
180 -menuheight {height} Use a menu bar height of {height} *-menuheight*
181 -mh {height} idem *-mh*
182 NOTE: On Motif the value is ignored, the menu height
183 is computed to fit the menus.
184 -reverse Use reverse video *-reverse*
185 -rv idem *-rv*
186 +reverse Don't use reverse video *-+reverse*
187 +rv idem *-+rv*
188 -xrm {resource} Set the specified resource *-xrm*
189
190Note about reverse video: Vim checks that the result is actually a light text
191on a dark background. The reason is that some X11 versions swap the colors,
192and some don't. These two examples will both give yellow text on a blue
193background:
194 gvim -fg Yellow -bg Blue -reverse
195 gvim -bg Yellow -fg Blue -reverse
196
197 *-geometry-example*
198An example for the geometry argument: >
199 gvim -geometry 80x63+8+100
200This creates a window with 80 columns and 63 lines at position 8 pixels from
201the left and 100 pixels from the top of the screen.
202
203==============================================================================
2043. Shell Commands *gui-pty*
205
206WARNING: Executing an external command from the GUI will not always work.
207"normal" commands like "ls", "grep" and "make" mostly work fine. Commands
208that require an intelligent terminal like "less" and "ispell" won't work.
209Some may even hang and need to be killed from another terminal. So be
210careful!
211
212There are two ways to do the I/O with a shell command: Pipes and a pseudo-tty.
213The default is to use a pseudo-tty. This should work best on most systems.
214
215Unfortunately, the implementation of the pseudo-tty is different on every Unix
216system. And some systems require root permission. To avoid running into
217problems with a pseudo-tty when you least expect it, test it when not editing
218a file. Be prepared to "kill" the started command or Vim. Commands like
219":r !cat" may hang!
220
221If using a pseudo-tty does not work for you, reset the 'guipty' option: >
222
223 :set noguipty
224
225Using a pipe should work on any Unix system, but there are disadvantages:
226- Some shell commands will notice that a pipe is being used and behave
227 differently. E.g., ":!ls" will list the files in one column.
228- The ":sh" command won't show a prompt, although it will sort of work.
229- When using ":make" it's not possible to interrupt with a CTRL-C.
230
231Typeahead while the external command is running is often lost. This happens
232both with a pipe and a pseudo-tty. This is a known problem, but it seems it
233can't be fixed (or at least, it's very difficult).
234
235 *gui-pty-erase*
236When your erase character is wrong for an external command, you should fix
237this in your "~/.cshrc" file, or whatever file your shell uses for
238initializations. For example, when you want to use backspace to delete
239characters, but hitting backspaces produces "^H" instead, try adding this to
240your "~/.cshrc": >
241 stty erase ^H
242The ^H is a real CTRL-H, type it as CTRL-V CTRL-H.
243
244==============================================================================
2454. Various *gui-x11-various*
246
247 *gui-x11-printing*
248The "File/Print" menu simply sends the current buffer to "lpr". No options or
249whatever. If you want something else, you can define your own print command.
250For example: >
251
252 :10amenu File.Print :w !lpr -Php3
253 :10vmenu File.Print :w !lpr -Php3
254<
255 *X11-icon*
256Vim uses a black&white icon by default when compiled with Motif or Athena. A
257colored Vim icon is included as $VIMRUNTIME/vim32x32.xpm. For GTK+, this is
258the builtin icon used. Unfortunately, how you should install it depends on
259your window manager. When you use this, remove the 'i' flag from
260'guioptions', to remove the black&white icon: >
261 :set guioptions-=i
262
263If you use one of the fvwm* family of window managers simply add this line to
264your .fvwm2rc configuration file: >
265
266 Style "vim" Icon vim32x32.xpm
267
268Make sure the icon file's location is consistent with the window manager's
269ImagePath statement. Either modify the ImagePath from within your .fvwm2rc or
270drop the icon into one the pre-defined directories: >
271
272 ImagePath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps
273
274Note: older versions of fvwm use "IconPath" instead of "ImagePath".
275
276For CDE "dtwm" (a derivative of Motif) add this line in the .Xdefaults: >
277 Dtwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
278
279For "mwm" (Motif window manager) the line would be: >
280 Mwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
281
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282
Bram Moolenaar74675a62017-07-15 13:53:23 +0200283Mouse Pointers Available in X11 ~
284 *X11_mouse_shapes*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285By using the |'mouseshape'| option, the mouse pointer can be automatically
286changed whenever Vim enters one of its various modes (e.g., Insert or
287Command). Currently, the available pointers are:
288
289 arrow an arrow pointing northwest
290 beam a I-like vertical bar
291 size an arrow pointing up and down
292 busy a wristwatch
293 blank an invisible pointer
294 crosshair a thin "+" sign
295 hand1 a dark hand pointing northeast
296 hand2 a light hand pointing northwest
297 pencil a pencil pointing southeast
298 question question_arrow
299 right_arrow an arrow pointing northeast
300 up_arrow an arrow pointing upwards
301
302Additionally, any of the mouse pointers that are built into X11 may be
303used by specifying an integer from the X11/cursorfont.h include file.
304
305If a name is used that exists on other systems, but not in X11, the default
306"arrow" pointer is used.
307
308==============================================================================
Bram Moolenaar03413f42016-04-12 21:07:15 +02003095. GTK version *gui-gtk* *GTK+* *GTK* *GTK3*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310
311The GTK version of the GUI works a little bit different.
312
313GTK does _not_ use the traditional X resource settings. Thus items in your
314~/.Xdefaults or app-defaults files are not used.
315Many of the traditional X command line arguments are not supported. (e.g.,
316stuff like -bg, -fg, etc). The ones that are supported are:
317
318 command line argument resource name meaning ~
319 -fn or -font .font font name for the text
320 -geom or -geometry .geometry size of the gvim window
321 -rv or -reverse *reverseVideo white text on black background
322 -display display to be used
323 -fg -foreground {color} foreground color
324 -bg -background {color} background color
325
326To set the font, see |'guifont'|. For GTK, there's also a menu option that
327does this.
328
329Additionally, there are these command line arguments, which are handled by GTK
330internally. Look in the GTK documentation for how they are used:
331 --sync
332 --gdk-debug
333 --gdk-no-debug
334 --no-xshm (not in GTK+ 2)
335 --xim-preedit (not in GTK+ 2)
336 --xim-status (not in GTK+ 2)
337 --gtk-debug
338 --gtk-no-debug
339 --g-fatal-warnings
340 --gtk-module
341 --display (GTK+ counterpart of -display; works the same way.)
342 --screen (The screen number; for GTK+ 2.2 multihead support.)
343
344These arguments are ignored when the |+netbeans_intg| feature is used:
345 -xrm
346 -mf
347
348As for colors, Vim's color settings (for syntax highlighting) is still
349done the traditional Vim way. See |:highlight| for more help.
350
351If you want to set the colors of remaining gui components (e.g., the
352menubar, scrollbar, whatever), those are GTK specific settings and you
353need to set those up in some sort of gtkrc file. You'll have to refer
354to the GTK documentation, however little there is, on how to do this.
355See http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html
356for more information.
357
Bram Moolenaar74675a62017-07-15 13:53:23 +0200358
359Tooltip Colors ~
360 *gtk-tooltip-colors*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361Example, which sets the tooltip colors to black on light-yellow: >
362
363 style "tooltips"
364 {
365 bg[NORMAL] = "#ffffcc"
366 fg[NORMAL] = "#000000"
367 }
368
369 widget "gtk-tooltips*" style "tooltips"
370
371Write this in the file ~/.gtkrc and it will be used by GTK+. For GTK+ 2
372you might have to use the file ~/.gtkrc-2.0 instead, depending on your
373distribution.
374
Bram Moolenaar98921892016-02-23 17:14:37 +0100375For GTK+ 3, an effect similar to the above can be obtained by adding the
376following snippet of CSS code to $XDG_HOME_DIR/gtk-3.0/gtk.css (usually,
377$HOME/.config/gtk-3.0/gtk.css):
Bram Moolenaar74675a62017-07-15 13:53:23 +0200378
379For GTK+ 3 < 3.20: >
380
Bram Moolenaar98921892016-02-23 17:14:37 +0100381 .tooltip {
382 background-color: #ffffcc;
383 color: #000000;
384 }
385<
Bram Moolenaar74675a62017-07-15 13:53:23 +0200386For GTK+ 3 >= 3.20: >
Bram Moolenaar98921892016-02-23 17:14:37 +0100387
Bram Moolenaar74675a62017-07-15 13:53:23 +0200388 tooltip {
389 background-color: #ffffcc;
390 text-shadow: none;
391 }
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392
Bram Moolenaar74675a62017-07-15 13:53:23 +0200393 tooltip label {
394 color: #2e3436;
395 }
396<
397
398A Quick Look at GTK+ CSS ~
399 *gtk-css*
400The contents of this subsection apply to GTK+ 3.20 or later which provides
401stable support for GTK+ CSS:
402
403 https://developer.gnome.org/gtk3/stable/theming.html
404
405GTK+ uses CSS for styling and layout of widgets. In this subsection, we'll
406have a quick look at GTK+ CSS through simple, illustrative examples.
407
408Example 1. Empty Space Adjustment ~
409
410By default, the toolbar and the tabline of the GTK+ 3 GUI are somewhat larger
411than those of the GTK+ 2 GUI. Some people may want to make them look similar
412to the GTK+ 2 GUI in size.
413
414To do that, we'll try reducing empty space around icons and labels that looks
415apparently superfluous.
416
417Add the following lines to $XDG_HOME_DIR/gtk-3.0/gtk.css (usually,
418$HOME/.config/gtk-3.0/gtk.css): >
419
420 toolbar button {
421 margin-top: -2px;
422 margin-right: 0px;
423 margin-bottom: -2px;
424 margin-left: 0px;
425
426 padding-top: 0px;
427 padding-right: 0px;
428 padding-bottom: 0px;
429 padding-left: 0px
430 }
431
432 notebook tab {
433 margin-top: -1px;
434 margin-right: 3px;
435 margin-bottom: -1px;
436 margin-left: 3px;
437
438 padding-top: 0px;
439 padding-right: 0px;
440 padding-bottom: 0px;
441 padding-left: 0px
442 }
443<
444Since it's a CSS, they can be rewritten using shorthand: >
445
446 toolbar button {
447 margin: -2px 0px;
448 padding: 0px;
449 }
450
451 notebook tab {
452 margin: -1px 3px;
453 padding: 0px
454 }
455<
456Note: You might want to use 'toolbariconsize' to adjust the icon size, too.
457
458Note: Depending on the icon theme and/or the font in use, some extra tweaks
459may be needed for a satisfactory result.
460
461Note: In addition to margin and padding, you can use border. For details,
462refer to the box model of CSS, e.g.,
463
464 https://www.w3schools.com/css/css_boxmodel.asp
465
466Example 2. More Than Just Colors ~
467
468GTK+ CSS supports gradients as well: >
469
470 tooltip {
471 background-image: -gtk-gradient(linear,
472 0 0, 0 1,
473 color-stop(0, #344752),
474 color-stop(0.5, #546772),
475 color-stop(1, #243742));
476 }
477
478 tooltip label {
479 color: #f3f3f3;
480 }
481<
482Gradients can be used to make a GUI element visually distinguishable from
483others without relying on high contrast. Accordingly, effective use of them is
484a useful technique to give a theme a sense of unity in color and luminance.
485
486Note: Theming can be difficult since it must make every application look
487equally good; making a single application more charming often gets others
488unexpectedly less attractive or even deteriorates their usability. Keep this
489in mind always when you try improving a theme.
490
491
492Using Vim as a GTK+ plugin ~
493 *gui-gtk-socketid*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494When the GTK+ version of Vim starts up normally, it creates its own top level
495window (technically, a 'GtkWindow'). GTK+ provides an embedding facility with
496its GtkSocket and GtkPlug widgets. If one GTK+ application creates a
497GtkSocket widget in one of its windows, an entirely different GTK+ application
498may embed itself into the first application by creating a top-level GtkPlug
499widget using the socket's ID.
500
501If you pass Vim the command-line option '--socketid' with a decimal or
502hexadecimal value, Vim will create a GtkPlug widget using that value instead
503of the normal GtkWindow. This enables Vim to act as a GTK+ plugin.
504
505This really is a programmer's interface, and is of no use without a supporting
506application to spawn the Vim correctly. For more details on GTK+ sockets, see
507http://www.gtk.org/api/
508
509Note that this feature requires the latest GTK version. GTK 1.2.10 still has
510a small problem. The socket feature has not yet been tested with GTK+ 2 --
511feel free to volunteer.
512
513==============================================================================
5146. GNOME version *gui-gnome* *Gnome* *GNOME*
515
516The GNOME GUI works just like the GTK+ version. See |GTK+| above for how it
517works. It looks a bit different though, and implements one important feature
518that's not available in the plain GTK+ GUI: Interaction with the session
519manager. |gui-gnome-session|
520
521These are the different looks:
522- Uses GNOME dialogs (GNOME 1 only). The GNOME 2 GUI uses the same nice
523 dialogs as the GTK+ 2 version.
524- Uses the GNOME dock, so that the toolbar and menubar can be moved to
525 different locations other than the top (e.g., the toolbar can be placed on
526 the left, right, top, or bottom). The placement of the menubar and
527 toolbar is only saved in the GNOME 2 version.
528- That means the menubar and toolbar handles are back! Yeah! And the
529 resizing grid still works too.
530
Bram Moolenaar9964e462007-05-05 17:54:07 +0000531GNOME is compiled with if it was found by configure and the
532--enable-gnome-check argument was used.
533
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200534Note: Avoid use of --enable-gnome-check with GTK+ 3 GUI build. The
535functionality mentioned above is consolidated in GTK+ 3.
536
Bram Moolenaar071d4272004-06-13 20:20:40 +0000537
Bram Moolenaar74675a62017-07-15 13:53:23 +0200538GNOME session support ~
539 *gui-gnome-session* *gnome-session*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000540On logout, Vim shows the well-known exit confirmation dialog if any buffers
541are modified. Clicking [Cancel] will stop the logout process. Otherwise the
542current session is stored to disk by using the |:mksession| command, and
543restored the next time you log in.
544
545The GNOME session support should also work with the KDE session manager.
546If you are experiencing any problems please report them as bugs.
547
548Note: The automatic session save works entirely transparent, in order to
549avoid conflicts with your own session files, scripts and autocommands. That
550means in detail:
551- The session file is stored to a separate directory (usually $HOME/.gnome2).
552- 'sessionoptions' is ignored, and a hardcoded set of appropriate flags is
553 used instead: >
Bram Moolenaar446cb832008-06-24 21:56:24 +0000554 blank,curdir,folds,globals,help,options,tabpages,winsize
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555- The internal variable |v:this_session| is not changed when storing the
556 session. Also, it is restored to its old value when logging in again.
557
558The position and size of the GUI window is not saved by Vim since doing so
559is the window manager's job. But if compiled with GTK+ 2 support, Vim helps
560the WM to identify the window by restoring the window role (using the |--role|
561command line argument).
562
563==============================================================================
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00005647. KDE version *gui-kde* *kde* *KDE* *KVim*
Bram Moolenaar9964e462007-05-05 17:54:07 +0000565 *gui-x11-kde*
Bram Moolenaar9372a112005-12-06 19:59:18 +0000566There is no KDE version of Vim. There has been some work on a port using the
567Qt toolkit, but it never worked properly and it has been abandoned. Work
Bram Moolenaar08589172014-03-08 18:38:28 +0100568continues on Yzis: https://github.com/chrizel/Yzis.
Bram Moolenaar843ee412004-06-30 16:16:41 +0000569
570==============================================================================
5718. Compiling *gui-x11-compiling*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000572
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200573If using X11, Vim's configure will by default first try to find the necessary
574GTK+ files on your system. When both GTK+ 2 and GTK+ 3 are available, GTK+ 2
575will be chosen unless --enable-gui=gtk3 is passed explicitly to configure.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200577If the GTK+ files cannot be found, then the Motif files will be searched for.
578Finally, if this fails, the Athena files will be searched for. If all three
579fail, the GUI will be disabled.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200581For GTK+, Vim's configuration process uses pkg-config(1) to check if the
582GTK+ required for a specified build is properly installed and usable.
583Accordingly, it is a good idea to make sure before running configure that
584your system has a working pkg-config together with the .pc file of the
585required GTK+. For that, say, run the following on the command line to see if
586your pkg-config works with your GTK+ 2: >
587
Bram Moolenaard0796902016-09-16 20:02:31 +0200588 $ pkg-config --modversion gtk+-2.0
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200589
590Replace gtk+-2.0 with gtk+-3.0 for GTK+ 3. If you get the correct version
591number of your GTK+, you can proceed; if not, you probably need to do some
592system administration chores to set up pkg-config and GTK+ correctly.
593
594The GTK+ 2 GUI is built by default. Therefore, you usually don't need to pass
595any options such as --enable-gui=gtk2 to configure and build that.
596
597Optionally, the GTK+ 2 GUI can consolidate the GNOME 2 support. This support
598is enabled by passing --enable-gnome-check to configure.
599
600If you want to build the GTK+ 3 GUI, you have to pass --enable-gui=gtk3
601explicitly to configure, and avoid passing --enable-gnome-check to that, as
602the functionality of the GNOME 2 support has already been consolidated in
603GTK+ 3.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604
605Otherwise, if you are using Motif or Athena, when you have the Motif or Athena
606files in a directory where configure doesn't look, edit the Makefile to enter
607the names of the directories. Search for "GUI_INC_LOC" for an example to set
608the Motif directories, "CONF_OPT_X" for Athena.
609
610 *gui-x11-gtk*
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200611Currently, Vim supports both GTK+ 2 and GTK+ 3.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200613The GTK+ 2 GUI requires GTK+ 2.2 or later.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200615Although the GTK+ 3 GUI is written in such a way that the source code can be
616compiled against all versions of the 3.x series, we recommend GTK+ 3.10 or
617later because of its substantial implementation changes in redraw done at
618that version.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619
620 *gui-x11-motif*
621For Motif, you need at least Motif version 1.2 and/or X11R5. Motif 2.0 and
622X11R6 are OK. Motif 1.1 and X11R4 might work, no guarantee (there may be a
623few problems, but you might make it compile and run with a bit of work, please
624send me the patches if you do). The newest releases of LessTif have been
625reported to work fine too.
626
627 *gui-x11-athena*
628The Athena version uses the Xaw widget set by default. If you have the 3D
629version, you might want to link with Xaw3d instead. This will make the
630menus look a bit better. Edit the Makefile and look for "XAW_LIB". The
631scrollbars will remain the same, because Vim has its own, which are already
6323D (in fact, they look more like Motif).
633
634 *gui-x11-neXtaw*
635The neXtaw version is mostly like Athena, but uses different widgets.
636
637 *gui-x11-misc*
638In general, do not try to mix files from different GTK+, Motif, Athena and X11
639versions. This will cause problems. For example, using header files for
640X11R5 with a library for X11R6 probably doesn't work (although the linking
641won't give an error message, Vim will crash later).
642
643==============================================================================
Bram Moolenaar843ee412004-06-30 16:16:41 +00006449. X11 selection mechanism *x11-selection*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000645
646If using X11, in either the GUI or an xterm with an X11-aware Vim, then Vim
647provides varied access to the X11 selection and clipboard. These are accessed
648by using the two selection registers "* and "+.
649
650X11 provides two basic types of global store, selections and cut-buffers,
651which differ in one important aspect: selections are "owned" by an
652application, and disappear when that application (e.g., Vim) exits, thus
653losing the data, whereas cut-buffers, are stored within the X-server itself
654and remain until written over or the X-server exits (e.g., upon logging out).
655
656The contents of selections are held by the originating application (e.g., upon
657a copy), and only passed on to another application when that other application
658asks for them (e.g., upon a paste).
659
660The contents of cut-buffers are immediately written to, and are then
661accessible directly from the X-server, without contacting the originating
662application.
663
664 *quoteplus* *quote+*
665There are three documented X selections: PRIMARY (which is expected to
666represent the current visual selection - as in Vim's Visual mode), SECONDARY
667(which is ill-defined) and CLIPBOARD (which is expected to be used for
668cut, copy and paste operations).
669
670Of these three, Vim uses PRIMARY when reading and writing the "* register
671(hence when the X11 selections are available, Vim sets a default value for
672|'clipboard'| of "autoselect"), and CLIPBOARD when reading and writing the "+
673register. Vim does not access the SECONDARY selection.
674
675Examples: (assuming the default option values)
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100676- Select an URL in Visual mode in Vim. Go to your browser and click the
677 middle mouse button in the URL text field. The selected text will be
678 inserted (hopefully!). Note: in Firefox you can set the
679 middlemouse.contentLoadURL preference to true in about:config, then the
680 selected URL will be used when pressing middle mouse button in most places
681 in the window.
682- Select some text in your browser by dragging with the mouse. Go to Vim and
Bram Moolenaar071d4272004-06-13 20:20:40 +0000683 press the middle mouse button: The selected text is inserted.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100684- Select some text in Vim and do "+y. Go to your browser, select some text in
685 a textfield by dragging with the mouse. Now use the right mouse button and
Bram Moolenaar071d4272004-06-13 20:20:40 +0000686 select "Paste" from the popup menu. The selected text is overwritten by the
687 text from Vim.
688Note that the text in the "+ register remains available when making a Visual
689selection, which makes other text available in the "* register. That allows
690overwriting selected text.
691 *x11-cut-buffer*
692There are, by default, 8 cut-buffers: CUT_BUFFER0 to CUT_BUFFER7. Vim only
693uses CUT_BUFFER0, which is the one that xterm uses by default.
694
695Whenever Vim is about to become unavailable (either via exiting or becoming
696suspended), and thus unable to respond to another application's selection
697request, it writes the contents of any owned selection to CUT_BUFFER0. If the
698"+ CLIPBOARD selection is owned by Vim, then this is written in preference,
699otherwise if the "* PRIMARY selection is owned by Vim, then that is written.
700
701Similarly, when Vim tries to paste from "* or "+ (either explicitly, or, in
702the case of the "* register, when the middle mouse button is clicked), if the
703requested X selection is empty or unavailable, Vim reverts to reading the
704current value of the CUT_BUFFER0.
705
706Note that when text is copied to CUT_BUFFER0 in this way, the type of
707selection (character, line or block) is always lost, even if it is a Vim which
708later pastes it.
709
710Xterm, by default, always writes visible selections to both PRIMARY and
711CUT_BUFFER0. When it pastes, it uses PRIMARY if this is available, or else
712falls back upon CUT_BUFFER0. For this reason, when cutting and pasting
713between Vim and an xterm, you should use the "* register. Xterm doesn't use
714CLIPBOARD, thus the "+ doesn't work with xterm.
715
716Most newer applications will provide their current selection via PRIMARY ("*)
717and use CLIPBOARD ("+) for cut/copy/paste operations. You thus have access to
718both by choosing to use either of the "* or "+ registers.
719
720
721 vim:tw=78:sw=4:ts=8:ft=help:norl: