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