mirror of
https://github.com/kovidgoyal/kitty.git
synced 2024-11-11 09:52:13 +03:00
97 lines
3.2 KiB
ReStructuredText
97 lines
3.2 KiB
ReStructuredText
Launching programs in new windows/tabs
|
|
========================================
|
|
|
|
.. program:: launch
|
|
|
|
|
|
|kitty| has a :code:`launch` action that can be used to run arbitrary programs
|
|
in new windows/tabs. It can be mapped to user defined shortcuts in kitty.conf.
|
|
It is very powerful and allows sending the contents of
|
|
the current window to the launched program, as well as many other options.
|
|
|
|
In the simplest form, you can use it to open a new kitty window running the
|
|
shell, as shown below::
|
|
|
|
map f1 launch
|
|
|
|
To run a different program simply pass the command line as arguments to
|
|
launch::
|
|
|
|
map f1 launch vim path/to/some/file
|
|
|
|
|
|
To open a new window with the same working directory as the currently
|
|
active window::
|
|
|
|
map f1 launch --cwd=current
|
|
|
|
To open the new window in a new tab::
|
|
|
|
map f1 launch --type=tab
|
|
|
|
To pass the contents of the current screen and scrollback to the started process::
|
|
|
|
map f1 launch --stdin-source=@screen_scrollback less
|
|
|
|
There are many more powerful options, refer to the complete list below.
|
|
|
|
The piping environment
|
|
--------------------------
|
|
|
|
When using :option:`launch --stdin-source`, the program to which the data is
|
|
piped has a special environment variable declared, ``KITTY_PIPE_DATA`` whose
|
|
contents are::
|
|
|
|
KITTY_PIPE_DATA={scrolled_by}:{cursor_x},{cursor_y}:{lines},{columns}
|
|
|
|
where ``scrolled_by`` is the number of lines kitty is currently scrolled by,
|
|
``cursor_(x|y)`` is the position of the cursor on the screen with ``(1,1)``
|
|
being the top left corner and ``{lines},{columns}`` being the number of rows
|
|
and columns of the screen.
|
|
|
|
|
|
Special arguments
|
|
-------------------
|
|
|
|
There are a few special placeholder arguments that can be specified as part of
|
|
the command line. Namely ``@selection`` which is replaced by the current
|
|
selection and ``@active-kitty-window-id`` which is replaced by the id of the
|
|
currently active kitty window. For example::
|
|
|
|
map f1 launch my-program @active-kitty-window-id
|
|
|
|
|
|
Watching launched windows
|
|
---------------------------
|
|
|
|
The :option:`launch --watcher` option allows you to specify python functions
|
|
that will be called at specific events, such as when the window is resized or
|
|
closed. Simply specify the path to a python module that specifies callback
|
|
functions for the events you are interested in, for example:
|
|
|
|
.. code-block:: python
|
|
|
|
def on_resize(boss, window, data):
|
|
# Here data will contain old_geometry and new_geometry
|
|
|
|
def on_close(boss, window, data):
|
|
# called when window is closed, typically when the program running in
|
|
# it exits.
|
|
|
|
|
|
Every callback is passed a reference to the global ``Boss`` object as well as
|
|
the ``Window`` object the action is occurring on. The ``data`` object is
|
|
mapping that contains event dependent data. Some useful methods and attributes
|
|
for the ``Window`` object are: ``as_text(as_ans=False, add_history=False,
|
|
add_wrap_markers=False, alternate_screen=False)`` with which you can get the
|
|
contents of the window and its scrollback buffer. Similarly,
|
|
``window.child.pid`` is the PID of the processes that was launched
|
|
in the window and ``window.id`` is the internal kitty ``id`` of the
|
|
window.
|
|
|
|
|
|
Syntax reference
|
|
------------------
|
|
|
|
.. include:: /generated/launch.rst
|