A major mode for editing q (the language written by Kx Systems, see URL `https://code.kx.com') in Emacs. Some of its major features include: - syntax highlighting (font lock), - interaction with inferior q[con] instance, - scans declarations and places them in a menu. To load `q-mode' on-demand, instead of at startup, add this to your initialization file (autoload 'q-mode "q-mode") The add the following to your initialization file to open all .k and .q files with q-mode as major mode automatically: (add-to-list 'auto-mode-alist '("\\.[kq]\\'" . q-mode)) If you load ess-mode, it will attempt to associate the .q extension with S-mode. To stop this, add the following lines to your initialization file. (defun remove-ess-q-extn () (when (assoc "\\.[qsS]\\'" auto-mode-alist) (setq auto-mode-alist (remassoc "\\.[qsS]\\'" auto-mode-alist)))) (add-hook 'ess-mode-hook 'remove-ess-q-extn) (add-hook 'inferior-ess-mode-hook 'remove-ess-q-extn) Use `M-x q' to start an inferior q shell. Or use `M-x q-qcon' to create an inferior qcon shell to communicate with an existing q process. Both can be prefixed with the universal-argument `C-u` to customize the arguments used to start the processes. The first q[con] session opened becomes the activated buffer. To open a new session and send code to the new buffer, it must be actived. Switch to the desired buffer and type `C-c M-RET' to activate it. Displaying tables with many columns will wrap around the buffer - making the data hard to read. You can use the `toggle-truncate-lines' function to prevent the wrapping. You can then scroll left and right in the buffer to see all the columns. The following commands are available to interact with an inferior q[con] process/buffer. `C-c C-j' (as well as `C-c C-l' and `C-M-x') sends a single line, `C-c C-f' sends the surrounding function, `C-c C-r' sends the selected region and `C-c C-b' sends the whole buffer. If prefixed with `C-u C-u', or pressing `C-c M-j' `C-c M-f' `C-c M-r' respectively, will also switch point to the active q process buffer for direct interaction. If the source file exists on the same machine as the q process, `C-c M-l' can be used to load the file associated with the active buffer. `M-x customize-group' can be used to customize the `q' group. Specifically, the `q-program' and `q-qcon-program' variables can be changed depending on your environment. Q-mode indents each level based on `q-indent-step'. To indent code based on {}-, ()-, and []-groups instead of equal width tabs, you can set this value to nil. The variables `q-msg-prefix' and `q-msg-postfix' can be customized to prefix and postfix every msg sent to the inferior q[con] process. This can be used to change directories before evaluating definitions within the q process and then changing back to the root directory. To make the variables change values depending on which file they are sent from, values can be defined in a single line a the top of each .q file: / -*- q-msg-prefix: "system \"d .jnp\";"; q-msg-postfix: ";system \"d .\"";-*- or at the end: / Local Variables: / q-msg-prefix: "system \"d .jnp\";" / q-msg-postfix: ";system \"d .\"" / End: