summaryrefslogtreecommitdiffstats
path: root/Documentation/ioctl
AgeCommit message (Expand)Author
2012-05-09mei: update Documentation/ioctl/ioctl-number.txtTomas Winkler
2012-04-02Merge branch 'for-next' of git://gitorious.org/kernel-hsi/kernel-hsiLinus Torvalds
2012-03-21Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vir...Linus Torvalds
2012-03-20Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jik...Linus Torvalds
2012-03-20Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-nextLinus Torvalds
2012-03-20hfsplus: add an ioctl to bless filesMatthew Garrett
2012-03-07Documentation: Fix multiple typo in DocumentationMasanari Iida
2012-03-04ppp: Move ioctl definitions from if_ppp.h to new ppp-ioctl.hPaul Mackerras
2012-02-15driver-core: documentation: fix up Greg's email addressGreg Kroah-Hartman
2012-01-05HSI: hsi_char: Update ioctl-number.txtAndras Domokos
2011-11-04NVMe: New driverMatthew Wilcox
2011-09-12ioctl: register LTTng ioctlMathieu Desnoyers
2011-08-02Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tileLinus Torvalds
2011-07-08drivers/virt: introduce Freescale hypervisor management driverTimur Tabi
2011-06-10ioctl-number.txt: add the tile hardwall ioctl rangeChris Metcalf
2011-05-25Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb...Linus Torvalds
2011-05-24mmc: core: Add mmc CMD+ACMD passthrough ioctlJohn Calixto
2011-05-20[media] uvcvideo: Make the API publicLaurent Pinchart
2011-03-24Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git...Linus Torvalds
2011-03-22[media] media: Pick a free ioctls rangeLaurent Pinchart
2011-02-03HID: roccat: Rename header roccat.h -> hid-roccat.hStefan Achatz
2011-02-03HID: roccat: Add ioctl command to retreive report size from chardevStefan Achatz
2011-01-13pps: add kernel consumer supportAlexander Gordeev
2010-12-29[media] bt819: the ioctls in the header are internal to the kernelHans Verkuil
2010-12-29[media] saa6588: rename rds.h to saa6588.hHans Verkuil
2009-10-06ceph: ioctlsSage Weil
2009-09-24drivers/char/uv_mmtimer.c: add memory mapped RTC driver for UVDimitri Sivanich
2009-09-14Merge branch 'kvm-updates/2.6.32' of git://git.kernel.org/pub/scm/virt/kvm/kvmLinus Torvalds
2009-09-10Documentation: Update KVM list email addressAmit Shah
2009-08-31x86, msr: Export the register-setting MSR functions via /dev/*/msrH. Peter Anvin
2009-08-10documentation: register ioctl entry of nilfs2Ryusuke Konishi
2009-06-18LinuxPPS: core supportRodolfo Giometti
2009-03-30V4L/DVB (10870a): remove all references for video_decoder.hMauro Carvalho Chehab
2009-03-30V4L/DVB(10738a): remove include/linux/video_encoder.hMauro Carvalho Chehab
2009-01-06documentation: update header file pathsRandy Dunlap
2008-12-09UBI: document UBI ioctlsArtem Bityutskiy
2008-11-14Create/use more directory structure in the Documentation/ tree.Randy Dunlap
2008-09-27cdrom: update ioctl documentationMárton Németh
2008-07-26Documentation cleanup: trivial misspelling, punctuation, and grammar correcti...Matt LaPlante
2008-07-16IDE: Report errors during drive reset back to user spaceElias Oltmanns
getchar.c | getting characters and key mapping indent.c | C and Lisp indentation insexpand.c | Insert mode completion mark.c | marks mbyte.c | multi-byte character handling memfile.c | storing lines for buffers in a swapfile memline.c | storing lines for buffers in memory menu.c | menus message.c | (error) messages ops.c | handling operators ("d", "y", "p") option.c | options quickfix.c | quickfix commands (":make", ":cn") regexp.c | pattern matching screen.c | updating the windows search.c | pattern searching sign.c | signs spell.c | spell checking syntax.c | syntax and other highlighting tag.c | tags term.c | terminal handling, termcap codes undo.c | undo and redo usercmd.c | user defined commands userfunc.c | user defined functions window.c | handling split windows ## Debugging ## If you have a reasonable recent version of gdb, you can use the `:Termdebug` command to debug Vim. See `:help :Termdebug`. When something is time critical or stepping through code is a hassle, use the channel logging to create a time-stamped log file. Add lines to the code like this: ch_log(NULL, "Value is now %02x", value); After compiling and starting Vim, do: :call ch_logfile('debuglog', 'w') And edit `debuglog` to see what happens. The channel functions already have `ch_log()` calls, thus you always see that in the log. ## Important Variables ## The current mode is stored in `State`. The values it can have are `NORMAL`, `INSERT`, `CMDLINE`, and a few others. The current window is `curwin`. The current buffer is `curbuf`. These point to structures with the cursor position in the window, option values, the file name, etc. These are defined in [`structs.h`](https://github.com/vim/vim/blob/master/src/structs.h). All the global variables are declared in [`globals.h`](https://github.com/vim/vim/blob/master/src/globals.h). ## The main loop ## This is conveniently called `main_loop()`. It updates a few things and then calls `normal_cmd()` to process a command. This returns when the command is finished. The basic idea is that Vim waits for the user to type a character and processes it until another character is needed. Thus there are several places where Vim waits for a character to be typed. The `vgetc()` function is used for this. It also handles mapping. Updating the screen is mostly postponed until a command or a sequence of commands has finished. The work is done by `update_screen()`, which calls `win_update()` for every window, which calls `win_line()` for every line. See the start of [`screen.c`](https://github.com/vim/vim/blob/master/src/screen.c) for more explanations. ## Command-line mode ## When typing a `:`, `normal_cmd()` will call `getcmdline()` to obtain a line with an Ex command. `getcmdline()` contains a loop that will handle each typed character. It returns when hitting `CR` or `Esc` or some other character that ends the command line mode. ## Ex commands ## Ex commands are handled by the function `do_cmdline()`. It does the generic parsing of the `:` command line and calls `do_one_cmd()` for each separate command. It also takes care of while loops. `do_one_cmd()` parses the range and generic arguments and puts them in the `exarg_t` and passes it to the function that handles the command. The `:` commands are listed in `ex_cmds.h`. The third entry of each item is the name of the function that handles the command. The last entry are the flags that are used for the command. ## Normal mode commands ## The Normal mode commands are handled by the `normal_cmd()` function. It also handles the optional count and an extra character for some commands. These are passed in a `cmdarg_t` to the function that handles the command. There is a table `nv_cmds` in [`normal.c`](https://github.com/vim/vim/blob/master/src/normal.c) which lists the first character of every command. The second entry of each item is the name of the function that handles the command. ## Insert mode commands ## When doing an `i` or `a` command, `normal_cmd()` will call the `edit()` function. It contains a loop that waits for the next character and handles it. It returns when leaving Insert mode. ## Options ## There is a list with all option names in [`option.c`](https://github.com/vim/vim/blob/master/src/option.c), called `options[]`. ## The GUI ## Most of the GUI code is implemented like it was a clever terminal. Typing a character, moving a scrollbar, clicking the mouse, etc. are all translated into events which are written in the input buffer. These are read by the main code, just like reading from a terminal. The code for this is scattered through [`gui.c`](https://github.com/vim/vim/blob/master/src/gui.c). For example, `gui_send_mouse_event()` for a mouse click and `gui_menu_cb()` for a menu action. Key hits are handled by the system-specific GUI code, which calls `add_to_input_buf()` to send the key code. Updating the GUI window is done by writing codes in the output buffer, just like writing to a terminal. When the buffer gets full or is flushed, `gui_write()` will parse the codes and draw the appropriate items. Finally the system-specific GUI code will be called to do the work. ## Debugging the GUI ## Remember to prevent that gvim forks and the debugger thinks Vim has exited, add the `-f` argument. In gdb: `run -f -g`. When stepping through display updating code, the focus event is triggered when going from the debugger to Vim and back. To avoid this, recompile with some code in `gui_focus_change()` disabled. ## Contributing ## If you would like to help making Vim better, see the [`CONTRIBUTING.md`](https://github.com/vim/vim/blob/master/CONTRIBUTING.md) file. This is `README.md` for version 8.1 of the Vim source code.