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