blob: 4a0d04c886726269bcc96eaa64bf07d9dcc4108c [file] [log] [blame]
Christian Brabandt8b94afc2024-11-17 16:02:41 +01001*gui_x11.txt* For Vim version 9.1. Last change: 2024 Nov 17
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*
Bram Moolenaar0b962e52022-04-03 18:02:37 +01008 *Motif*
Bram Moolenaar071d4272004-06-13 20:20:40 +000091. 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 Moolenaar0b962e52022-04-03 18:02:37 +010067If using the Motif 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.
Bram Moolenaar071d4272004-06-13 20:20:40 +000099
100A special font for italic, bold, and italic-bold text will only be used if
101the user has specified one via a resource. No attempt is made to guess what
102fonts should be used for these based on the normal text font.
103
104Note that the colors can also be set with the ":highlight" command, using the
105"Normal", "Menu", "Tooltip", and "Scrollbar" groups. Example: >
106 :highlight Menu guibg=lightblue
107 :highlight Tooltip guibg=yellow
108 :highlight Scrollbar guibg=lightblue guifg=blue
109 :highlight Normal guibg=grey90
110<
111 *font-sizes*
112Note: All fonts (except for the menu and tooltip) must be of the same size!!!
113If you don't do this, text will disappear or mess up the display. Vim does
114not check the font sizes. It's the size in screen pixels that must be the
115same. Note that some fonts that have the same point size don't have the same
116pixel size! Additionally, the positioning of the fonts must be the same
117(ascent and descent). You can check this with "xlsfonts -l {fontname}".
118
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000119If any of these things are also set with Vim commands, e.g. with
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120":set guifont=Screen15", then this will override the X resources (currently
121'guifont' is the only option that is supported).
122
123Here is an example of what you might put in your ~/.Xdefaults file: >
124
125 Vim*useSchemes: all
126 Vim*sgiMode: true
127 Vim*useEnhancedFSB: true
128 Vim.foreground: Black
129 Vim.background: Wheat
130 Vim*fontList: 7x13
131
132The first three of these are standard resources on Silicon Graphics machines
133which make Motif applications look even better, highly recommended!
134
135The "Vim*fontList" is to set the menu font for Motif. Example: >
136 Vim*menuBar*fontList: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138NOTE: A more portable, and indeed more correct, way to specify the menu font
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100139in Motif is through the resource: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140 Vim.menuFont: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
141Or, when compiled with the |+xfontset| feature: >
142 Vim.menuFontSet: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
143
144Don't use "Vim*geometry" in the defaults. This will break the menus. Use
145"Vim.geometry" instead.
146
147If you get an error message "Cannot allocate colormap entry for "gray60",
148try adding this to your Vim resources (change the colors to your liking): >
149
150 Vim*scrollBackground: Black
151 Vim*scrollForeground: Blue
152
153The resources can also be set with arguments to Vim:
154
155 argument meaning ~
156 *-gui*
157 -display {display} Run vim on {display} *-display*
158 -iconic Start vim iconified *-iconic*
159 -background {color} Use {color} for the background *-background*
160 -bg {color} idem *-bg*
161 -foreground {color} Use {color} for normal text *-foreground*
162 -fg {color} idem *-fg*
163 -ul {color} idem *-ul*
164 -font {font} Use {font} for normal text *-font*
165 -fn {font} idem *-fn*
166 -boldfont {font} Use {font} for bold text *-boldfont*
167 -italicfont {font} Use {font} for italic text *-italicfont*
168 -menufont {font} Use {font} for menu items *-menufont*
169 -menufontset {fontset} Use {fontset} for menu items *-menufontset*
170 -mf {font} idem *-mf*
171 -geometry {geom} Use {geom} for initial geometry *-geometry*
172 -geom {geom} idem, see |-geometry-example| *-geom*
173 -borderwidth {width} Use a border width of {width} *-borderwidth*
174 -bw {width} idem *-bw*
175 *-scrollbarwidth*
176 -scrollbarwidth {width} Use a scrollbar width of {width}
177 -sw {width} idem *-sw*
178 -menuheight {height} Use a menu bar height of {height} *-menuheight*
179 -mh {height} idem *-mh*
180 NOTE: On Motif the value is ignored, the menu height
181 is computed to fit the menus.
182 -reverse Use reverse video *-reverse*
183 -rv idem *-rv*
184 +reverse Don't use reverse video *-+reverse*
185 +rv idem *-+rv*
186 -xrm {resource} Set the specified resource *-xrm*
187
188Note about reverse video: Vim checks that the result is actually a light text
189on a dark background. The reason is that some X11 versions swap the colors,
190and some don't. These two examples will both give yellow text on a blue
191background:
192 gvim -fg Yellow -bg Blue -reverse
193 gvim -bg Yellow -fg Blue -reverse
194
195 *-geometry-example*
196An example for the geometry argument: >
197 gvim -geometry 80x63+8+100
198This creates a window with 80 columns and 63 lines at position 8 pixels from
199the left and 100 pixels from the top of the screen.
200
201==============================================================================
2023. Shell Commands *gui-pty*
203
204WARNING: Executing an external command from the GUI will not always work.
205"normal" commands like "ls", "grep" and "make" mostly work fine. Commands
206that require an intelligent terminal like "less" and "ispell" won't work.
207Some may even hang and need to be killed from another terminal. So be
208careful!
209
210There are two ways to do the I/O with a shell command: Pipes and a pseudo-tty.
211The default is to use a pseudo-tty. This should work best on most systems.
212
213Unfortunately, the implementation of the pseudo-tty is different on every Unix
214system. And some systems require root permission. To avoid running into
215problems with a pseudo-tty when you least expect it, test it when not editing
216a file. Be prepared to "kill" the started command or Vim. Commands like
217":r !cat" may hang!
218
219If using a pseudo-tty does not work for you, reset the 'guipty' option: >
220
221 :set noguipty
222
223Using a pipe should work on any Unix system, but there are disadvantages:
224- Some shell commands will notice that a pipe is being used and behave
225 differently. E.g., ":!ls" will list the files in one column.
226- The ":sh" command won't show a prompt, although it will sort of work.
227- When using ":make" it's not possible to interrupt with a CTRL-C.
228
229Typeahead while the external command is running is often lost. This happens
230both with a pipe and a pseudo-tty. This is a known problem, but it seems it
231can't be fixed (or at least, it's very difficult).
232
233 *gui-pty-erase*
234When your erase character is wrong for an external command, you should fix
235this in your "~/.cshrc" file, or whatever file your shell uses for
236initializations. For example, when you want to use backspace to delete
237characters, but hitting backspaces produces "^H" instead, try adding this to
238your "~/.cshrc": >
239 stty erase ^H
240The ^H is a real CTRL-H, type it as CTRL-V CTRL-H.
241
242==============================================================================
2434. Various *gui-x11-various*
244
245 *gui-x11-printing*
246The "File/Print" menu simply sends the current buffer to "lpr". No options or
247whatever. If you want something else, you can define your own print command.
248For example: >
249
250 :10amenu File.Print :w !lpr -Php3
251 :10vmenu File.Print :w !lpr -Php3
252<
253 *X11-icon*
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100254Vim uses a black&white icon by default when compiled with Motif. A
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255colored Vim icon is included as $VIMRUNTIME/vim32x32.xpm. For GTK+, this is
256the builtin icon used. Unfortunately, how you should install it depends on
257your window manager. When you use this, remove the 'i' flag from
258'guioptions', to remove the black&white icon: >
259 :set guioptions-=i
260
261If you use one of the fvwm* family of window managers simply add this line to
262your .fvwm2rc configuration file: >
263
264 Style "vim" Icon vim32x32.xpm
265
266Make sure the icon file's location is consistent with the window manager's
267ImagePath statement. Either modify the ImagePath from within your .fvwm2rc or
268drop the icon into one the pre-defined directories: >
269
270 ImagePath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps
271
272Note: older versions of fvwm use "IconPath" instead of "ImagePath".
273
274For CDE "dtwm" (a derivative of Motif) add this line in the .Xdefaults: >
275 Dtwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
276
277For "mwm" (Motif window manager) the line would be: >
278 Mwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280
Bram Moolenaar74675a62017-07-15 13:53:23 +0200281Mouse Pointers Available in X11 ~
282 *X11_mouse_shapes*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283By using the |'mouseshape'| option, the mouse pointer can be automatically
284changed whenever Vim enters one of its various modes (e.g., Insert or
285Command). Currently, the available pointers are:
286
287 arrow an arrow pointing northwest
288 beam a I-like vertical bar
289 size an arrow pointing up and down
290 busy a wristwatch
291 blank an invisible pointer
292 crosshair a thin "+" sign
293 hand1 a dark hand pointing northeast
294 hand2 a light hand pointing northwest
295 pencil a pencil pointing southeast
296 question question_arrow
297 right_arrow an arrow pointing northeast
298 up_arrow an arrow pointing upwards
299
300Additionally, any of the mouse pointers that are built into X11 may be
301used by specifying an integer from the X11/cursorfont.h include file.
302
303If a name is used that exists on other systems, but not in X11, the default
304"arrow" pointer is used.
305
306==============================================================================
Bram Moolenaar03413f42016-04-12 21:07:15 +02003075. GTK version *gui-gtk* *GTK+* *GTK* *GTK3*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308
309The GTK version of the GUI works a little bit different.
310
311GTK does _not_ use the traditional X resource settings. Thus items in your
312~/.Xdefaults or app-defaults files are not used.
313Many of the traditional X command line arguments are not supported. (e.g.,
314stuff like -bg, -fg, etc). The ones that are supported are:
315
316 command line argument resource name meaning ~
317 -fn or -font .font font name for the text
318 -geom or -geometry .geometry size of the gvim window
319 -rv or -reverse *reverseVideo white text on black background
320 -display display to be used
321 -fg -foreground {color} foreground color
322 -bg -background {color} background color
323
324To set the font, see |'guifont'|. For GTK, there's also a menu option that
325does this.
326
327Additionally, there are these command line arguments, which are handled by GTK
328internally. Look in the GTK documentation for how they are used:
329 --sync
330 --gdk-debug
331 --gdk-no-debug
332 --no-xshm (not in GTK+ 2)
333 --xim-preedit (not in GTK+ 2)
334 --xim-status (not in GTK+ 2)
335 --gtk-debug
336 --gtk-no-debug
337 --g-fatal-warnings
338 --gtk-module
339 --display (GTK+ counterpart of -display; works the same way.)
340 --screen (The screen number; for GTK+ 2.2 multihead support.)
341
342These arguments are ignored when the |+netbeans_intg| feature is used:
343 -xrm
344 -mf
345
346As for colors, Vim's color settings (for syntax highlighting) is still
347done the traditional Vim way. See |:highlight| for more help.
348
349If you want to set the colors of remaining gui components (e.g., the
350menubar, scrollbar, whatever), those are GTK specific settings and you
351need to set those up in some sort of gtkrc file. You'll have to refer
352to the GTK documentation, however little there is, on how to do this.
353See http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html
354for more information.
Bram Moolenaaracc22402020-06-07 21:07:18 +0200355 *gtk3-slow*
356If you are using GTK3 and Vim appears to be slow, try setting the environment
357variable $GDK_RENDERING to "image".
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358
Bram Moolenaar74675a62017-07-15 13:53:23 +0200359
360Tooltip Colors ~
361 *gtk-tooltip-colors*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362Example, which sets the tooltip colors to black on light-yellow: >
363
364 style "tooltips"
365 {
366 bg[NORMAL] = "#ffffcc"
367 fg[NORMAL] = "#000000"
368 }
369
370 widget "gtk-tooltips*" style "tooltips"
371
372Write this in the file ~/.gtkrc and it will be used by GTK+. For GTK+ 2
373you might have to use the file ~/.gtkrc-2.0 instead, depending on your
374distribution.
375
Bram Moolenaar98921892016-02-23 17:14:37 +0100376For GTK+ 3, an effect similar to the above can be obtained by adding the
Bram Moolenaar20aac6c2018-09-02 21:07:30 +0200377following snippet of CSS code to $XDG_HOME_DIR/gtk-3.0/gtk.css (see the next
378section):
Bram Moolenaar74675a62017-07-15 13:53:23 +0200379
380For GTK+ 3 < 3.20: >
381
Bram Moolenaar98921892016-02-23 17:14:37 +0100382 .tooltip {
383 background-color: #ffffcc;
384 color: #000000;
385 }
386<
Bram Moolenaar74675a62017-07-15 13:53:23 +0200387For GTK+ 3 >= 3.20: >
Bram Moolenaar98921892016-02-23 17:14:37 +0100388
Bram Moolenaar74675a62017-07-15 13:53:23 +0200389 tooltip {
390 background-color: #ffffcc;
391 text-shadow: none;
392 }
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393
Bram Moolenaar74675a62017-07-15 13:53:23 +0200394 tooltip label {
395 color: #2e3436;
396 }
397<
398
399A Quick Look at GTK+ CSS ~
400 *gtk-css*
401The contents of this subsection apply to GTK+ 3.20 or later which provides
402stable support for GTK+ CSS:
403
404 https://developer.gnome.org/gtk3/stable/theming.html
405
406GTK+ uses CSS for styling and layout of widgets. In this subsection, we'll
407have a quick look at GTK+ CSS through simple, illustrative examples.
408
Bram Moolenaar20aac6c2018-09-02 21:07:30 +0200409You can usually edit the config with: >
410 vim $HOME/.config/gtk-3.0/gtk.css
411
412
Bram Moolenaar74675a62017-07-15 13:53:23 +0200413Example 1. Empty Space Adjustment ~
414
415By default, the toolbar and the tabline of the GTK+ 3 GUI are somewhat larger
416than those of the GTK+ 2 GUI. Some people may want to make them look similar
417to the GTK+ 2 GUI in size.
418
419To do that, we'll try reducing empty space around icons and labels that looks
420apparently superfluous.
421
422Add the following lines to $XDG_HOME_DIR/gtk-3.0/gtk.css (usually,
423$HOME/.config/gtk-3.0/gtk.css): >
424
425 toolbar button {
426 margin-top: -2px;
427 margin-right: 0px;
428 margin-bottom: -2px;
429 margin-left: 0px;
430
431 padding-top: 0px;
432 padding-right: 0px;
433 padding-bottom: 0px;
434 padding-left: 0px
435 }
436
437 notebook tab {
438 margin-top: -1px;
439 margin-right: 3px;
440 margin-bottom: -1px;
441 margin-left: 3px;
442
443 padding-top: 0px;
444 padding-right: 0px;
445 padding-bottom: 0px;
446 padding-left: 0px
447 }
448<
449Since it's a CSS, they can be rewritten using shorthand: >
450
451 toolbar button {
452 margin: -2px 0px;
453 padding: 0px;
454 }
455
456 notebook tab {
457 margin: -1px 3px;
458 padding: 0px
459 }
460<
461Note: You might want to use 'toolbariconsize' to adjust the icon size, too.
462
463Note: Depending on the icon theme and/or the font in use, some extra tweaks
464may be needed for a satisfactory result.
465
466Note: In addition to margin and padding, you can use border. For details,
467refer to the box model of CSS, e.g.,
468
469 https://www.w3schools.com/css/css_boxmodel.asp
470
471Example 2. More Than Just Colors ~
472
473GTK+ CSS supports gradients as well: >
474
475 tooltip {
476 background-image: -gtk-gradient(linear,
477 0 0, 0 1,
478 color-stop(0, #344752),
479 color-stop(0.5, #546772),
480 color-stop(1, #243742));
481 }
482
483 tooltip label {
484 color: #f3f3f3;
485 }
486<
487Gradients can be used to make a GUI element visually distinguishable from
488others without relying on high contrast. Accordingly, effective use of them is
489a useful technique to give a theme a sense of unity in color and luminance.
490
491Note: Theming can be difficult since it must make every application look
492equally good; making a single application more charming often gets others
493unexpectedly less attractive or even deteriorates their usability. Keep this
494in mind always when you try improving a theme.
495
496
Bram Moolenaar2c64ca12018-10-19 16:22:31 +0200497Example 3. border color ~
Bram Moolenaar20aac6c2018-09-02 21:07:30 +0200498
499To eliminate borders when maximized: >
500
501 @define-color bg_color #1B2B34;
502 #vim-main-window {
503 background-color: @bg_color;
504 }
505
506
Bram Moolenaar74675a62017-07-15 13:53:23 +0200507Using Vim as a GTK+ plugin ~
508 *gui-gtk-socketid*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000509When the GTK+ version of Vim starts up normally, it creates its own top level
510window (technically, a 'GtkWindow'). GTK+ provides an embedding facility with
511its GtkSocket and GtkPlug widgets. If one GTK+ application creates a
512GtkSocket widget in one of its windows, an entirely different GTK+ application
513may embed itself into the first application by creating a top-level GtkPlug
514widget using the socket's ID.
515
516If you pass Vim the command-line option '--socketid' with a decimal or
517hexadecimal value, Vim will create a GtkPlug widget using that value instead
518of the normal GtkWindow. This enables Vim to act as a GTK+ plugin.
519
520This really is a programmer's interface, and is of no use without a supporting
521application to spawn the Vim correctly. For more details on GTK+ sockets, see
522http://www.gtk.org/api/
523
524Note that this feature requires the latest GTK version. GTK 1.2.10 still has
525a small problem. The socket feature has not yet been tested with GTK+ 2 --
526feel free to volunteer.
527
528==============================================================================
5296. GNOME version *gui-gnome* *Gnome* *GNOME*
530
531The GNOME GUI works just like the GTK+ version. See |GTK+| above for how it
532works. It looks a bit different though, and implements one important feature
533that's not available in the plain GTK+ GUI: Interaction with the session
534manager. |gui-gnome-session|
535
536These are the different looks:
537- Uses GNOME dialogs (GNOME 1 only). The GNOME 2 GUI uses the same nice
538 dialogs as the GTK+ 2 version.
539- Uses the GNOME dock, so that the toolbar and menubar can be moved to
540 different locations other than the top (e.g., the toolbar can be placed on
541 the left, right, top, or bottom). The placement of the menubar and
542 toolbar is only saved in the GNOME 2 version.
543- That means the menubar and toolbar handles are back! Yeah! And the
544 resizing grid still works too.
545
Bram Moolenaar9964e462007-05-05 17:54:07 +0000546GNOME is compiled with if it was found by configure and the
547--enable-gnome-check argument was used.
548
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200549Note: Avoid use of --enable-gnome-check with GTK+ 3 GUI build. The
550functionality mentioned above is consolidated in GTK+ 3.
551
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552
Bram Moolenaar74675a62017-07-15 13:53:23 +0200553GNOME session support ~
554 *gui-gnome-session* *gnome-session*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555On logout, Vim shows the well-known exit confirmation dialog if any buffers
556are modified. Clicking [Cancel] will stop the logout process. Otherwise the
557current session is stored to disk by using the |:mksession| command, and
558restored the next time you log in.
559
560The GNOME session support should also work with the KDE session manager.
561If you are experiencing any problems please report them as bugs.
562
563Note: The automatic session save works entirely transparent, in order to
564avoid conflicts with your own session files, scripts and autocommands. That
565means in detail:
566- The session file is stored to a separate directory (usually $HOME/.gnome2).
567- 'sessionoptions' is ignored, and a hardcoded set of appropriate flags is
568 used instead: >
Bram Moolenaar446cb832008-06-24 21:56:24 +0000569 blank,curdir,folds,globals,help,options,tabpages,winsize
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570- The internal variable |v:this_session| is not changed when storing the
571 session. Also, it is restored to its old value when logging in again.
572
573The position and size of the GUI window is not saved by Vim since doing so
574is the window manager's job. But if compiled with GTK+ 2 support, Vim helps
575the WM to identify the window by restoring the window role (using the |--role|
576command line argument).
577
578==============================================================================
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00005797. KDE version *gui-kde* *kde* *KDE* *KVim*
Bram Moolenaar9964e462007-05-05 17:54:07 +0000580 *gui-x11-kde*
Bram Moolenaar9372a112005-12-06 19:59:18 +0000581There is no KDE version of Vim. There has been some work on a port using the
582Qt toolkit, but it never worked properly and it has been abandoned. Work
Christian Brabandt1b7fbe72024-01-30 20:41:07 +0100583continues on Yzis: https://github.com/chrizel/Yzis but it seems also
584abandoned.
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.
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100594If both fail, the GUI will be disabled.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200596For GTK+, Vim's configuration process uses pkg-config(1) to check if the
597GTK+ required for a specified build is properly installed and usable.
598Accordingly, it is a good idea to make sure before running configure that
599your system has a working pkg-config together with the .pc file of the
600required GTK+. For that, say, run the following on the command line to see if
601your pkg-config works with your GTK+ 2: >
602
Bram Moolenaard0796902016-09-16 20:02:31 +0200603 $ pkg-config --modversion gtk+-2.0
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200604
605Replace gtk+-2.0 with gtk+-3.0 for GTK+ 3. If you get the correct version
606number of your GTK+, you can proceed; if not, you probably need to do some
607system administration chores to set up pkg-config and GTK+ correctly.
608
609The GTK+ 2 GUI is built by default. Therefore, you usually don't need to pass
610any options such as --enable-gui=gtk2 to configure and build that.
611
612Optionally, the GTK+ 2 GUI can consolidate the GNOME 2 support. This support
613is enabled by passing --enable-gnome-check to configure.
614
615If you want to build the GTK+ 3 GUI, you have to pass --enable-gui=gtk3
616explicitly to configure, and avoid passing --enable-gnome-check to that, as
617the functionality of the GNOME 2 support has already been consolidated in
618GTK+ 3.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100620Otherwise, if you are using Motif, when you have the Motif files in a
621directory where configure doesn't look, edit the Makefile to enter the names
622of the directories. Search for "GUI_INC_LOC" for an example to set
623the Motif directories.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624
625 *gui-x11-gtk*
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200626Currently, Vim supports both GTK+ 2 and GTK+ 3.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200628The GTK+ 2 GUI requires GTK+ 2.2 or later.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000629
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200630Although the GTK+ 3 GUI is written in such a way that the source code can be
631compiled against all versions of the 3.x series, we recommend GTK+ 3.10 or
632later because of its substantial implementation changes in redraw done at
633that version.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000634
635 *gui-x11-motif*
636For Motif, you need at least Motif version 1.2 and/or X11R5. Motif 2.0 and
637X11R6 are OK. Motif 1.1 and X11R4 might work, no guarantee (there may be a
638few problems, but you might make it compile and run with a bit of work, please
RestorerZf7a38652024-04-22 20:55:32 +0200639send patches if you do). The newest releases of LessTif have been reported to
640work fine too.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000641
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100642 *gui-x11-athena* *gui-x11-neXtaw*
643Support for the Athena GUI and neXtaw was removed in patch 8.2.4677.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000644
645 *gui-x11-misc*
Bram Moolenaar0b962e52022-04-03 18:02:37 +0100646In general, do not try to mix files from different GTK+, Motif and X11
Bram Moolenaar071d4272004-06-13 20:20:40 +0000647versions. This will cause problems. For example, using header files for
648X11R5 with a library for X11R6 probably doesn't work (although the linking
649won't give an error message, Vim will crash later).
650
Christian Brabandt1b7fbe72024-01-30 20:41:07 +0100651 *gui-wayland*
652Initial support for the Wayland display server protocol has landed in patch
Christian Brabandt8fecb472024-01-30 23:37:41 +01006539.1.0064. To enable it, you need to set the environment variable
Christian Brabandt1b7fbe72024-01-30 20:41:07 +0100654"$GVIM_ENABLE_WAYLAND" in your shell.
655
656Note: The Wayland protocol is subject to some restrictions, so the following
657functions won't work: |getwinpos()|, |getwinposx()|, |getwinposy()| and the
658|v:windowid| variable won't be available.
659
Bram Moolenaar071d4272004-06-13 20:20:40 +0000660==============================================================================
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
Bram Moolenaarfee0c4a2022-07-07 22:31:59 +0100692This applies both to the GUI and the terminal version. For non-X11 systems
Bram Moolenaarb529cfb2022-07-25 15:42:07 +0100693the plus and the star register both use the system clipboard.
Bram Moolenaarfee0c4a2022-07-07 22:31:59 +0100694
Bram Moolenaar071d4272004-06-13 20:20:40 +0000695Examples: (assuming the default option values)
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200696- Select a URL in Visual mode in Vim. Go to your browser and click the
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100697 middle mouse button in the URL text field. The selected text will be
698 inserted (hopefully!). Note: in Firefox you can set the
699 middlemouse.contentLoadURL preference to true in about:config, then the
700 selected URL will be used when pressing middle mouse button in most places
701 in the window.
702- Select some text in your browser by dragging with the mouse. Go to Vim and
Bram Moolenaar071d4272004-06-13 20:20:40 +0000703 press the middle mouse button: The selected text is inserted.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100704- Select some text in Vim and do "+y. Go to your browser, select some text in
705 a textfield by dragging with the mouse. Now use the right mouse button and
Bram Moolenaar071d4272004-06-13 20:20:40 +0000706 select "Paste" from the popup menu. The selected text is overwritten by the
707 text from Vim.
708Note that the text in the "+ register remains available when making a Visual
709selection, which makes other text available in the "* register. That allows
710overwriting selected text.
Christian Brabandt45e07042024-11-11 20:52:55 +0100711
712 *W23*
713When you are yanking into the "* or "+ register and Vim cannot establish a
714connection to the X11 selection (or clipboard), it will use register 0 and
715output a warning:
716
717 Warning: Clipboard register not available, using register 0 ~
718
Christian Brabandt8b94afc2024-11-17 16:02:41 +0100719 *W24*
720Vim comes in different flavors, from a tiny build, that just tries to be
721compatible to original Vi, to enhanced builds which include many improvements
722(like a GUI). However, on servers and embedded systems, Vim is typically
723compiled without clipboard support, since this feature requires X11 libraries
724to be present. Check the ":version" output for the flag |+clipboard| or
725-clipboard. The former means clipboard support is present while the latter
726means your Vim does not contain clipboard support.
727
728In the case when you are trying to access the "* or "+ register and Vim has
729no clipboard support, you will see this warning:
730
731 Warning: Clipboard register not available. See :h W24~
732
733If you have a vim with no clipboard support but would like to use the
734clipboard, try to install a more enhanced Vim package like vim-enhanced or
735vim-gtk3 (the gui packages usually also come with a terminal Vim that has
736clipboard support included).
737
Bram Moolenaar071d4272004-06-13 20:20:40 +0000738 *x11-cut-buffer*
739There are, by default, 8 cut-buffers: CUT_BUFFER0 to CUT_BUFFER7. Vim only
740uses CUT_BUFFER0, which is the one that xterm uses by default.
741
742Whenever Vim is about to become unavailable (either via exiting or becoming
743suspended), and thus unable to respond to another application's selection
744request, it writes the contents of any owned selection to CUT_BUFFER0. If the
745"+ CLIPBOARD selection is owned by Vim, then this is written in preference,
746otherwise if the "* PRIMARY selection is owned by Vim, then that is written.
747
748Similarly, when Vim tries to paste from "* or "+ (either explicitly, or, in
749the case of the "* register, when the middle mouse button is clicked), if the
750requested X selection is empty or unavailable, Vim reverts to reading the
751current value of the CUT_BUFFER0.
752
753Note that when text is copied to CUT_BUFFER0 in this way, the type of
754selection (character, line or block) is always lost, even if it is a Vim which
755later pastes it.
756
757Xterm, by default, always writes visible selections to both PRIMARY and
758CUT_BUFFER0. When it pastes, it uses PRIMARY if this is available, or else
759falls back upon CUT_BUFFER0. For this reason, when cutting and pasting
760between Vim and an xterm, you should use the "* register. Xterm doesn't use
761CLIPBOARD, thus the "+ doesn't work with xterm.
762
763Most newer applications will provide their current selection via PRIMARY ("*)
764and use CLIPBOARD ("+) for cut/copy/paste operations. You thus have access to
765both by choosing to use either of the "* or "+ registers.
766
767
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200768 vim:tw=78:sw=4:ts=8:noet:ft=help:norl: