{"id":13437684,"url":"https://github.com/martanne/dvtm","last_synced_at":"2025-05-16T08:05:21.683Z","repository":{"id":23317169,"uuid":"26677040","full_name":"martanne/dvtm","owner":"martanne","description":"dvtm brings the concept of tiling window management, popularized by X11-window managers like dwm to the console. As a console window manager it tries to make it easy to work with multiple console based programs.","archived":false,"fork":false,"pushed_at":"2024-05-18T02:03:26.000Z","size":946,"stargazers_count":876,"open_issues_count":75,"forks_count":106,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-08T19:23:54.970Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martanne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-11-15T10:51:33.000Z","updated_at":"2025-04-03T11:28:07.000Z","dependencies_parsed_at":"2024-06-19T02:58:39.910Z","dependency_job_id":null,"html_url":"https://github.com/martanne/dvtm","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martanne%2Fdvtm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martanne%2Fdvtm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martanne%2Fdvtm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martanne%2Fdvtm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martanne","download_url":"https://codeload.github.com/martanne/dvtm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493378,"owners_count":22080126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:00:59.289Z","updated_at":"2025-05-16T08:05:16.675Z","avatar_url":"https://github.com/martanne.png","language":"C","funding_links":[],"categories":["HarmonyOS","C","others","Table of Contents"],"sub_categories":["Windows Manager"],"readme":"# dvtm - dynamic virtual terminal manager\n\n[dvtm](https://www.brain-dump.org/projects/dvtm/) brings the concept\nof tiling window management, popularized by X11-window managers like\n[dwm](https://dwm.suckless.org) to the console. As a console window\nmanager it tries to make it easy to work with multiple console based\nprograms.\n\n![abduco+dvtm demo](https://raw.githubusercontent.com/martanne/dvtm/gh-pages/screencast.gif#center)\n\n## News\n\n- [dvtm-0.15](https://www.brain-dump.org/projects/dvtm/dvtm-0.15.tar.gz)\n  [released](https://lists.suckless.org/dev/1601/28095.html) (09.01.2016)\n- [dvtm-0.14](https://www.brain-dump.org/projects/dvtm/dvtm-0.14.tar.gz)\n  [released](https://lists.suckless.org/dev/1502/25558.html) (19.02.2015)\n- [dvtm-0.13](https://www.brain-dump.org/projects/dvtm/dvtm-0.13.tar.gz)\n  [released](https://lists.suckless.org/dev/1411/24449.html) (15.11.2014)\n- [dvtm-0.12](https://www.brain-dump.org/projects/dvtm/dvtm-0.12.tar.gz)\n  [released](https://lists.suckless.org/dev/1407/22702.html) (05.07.2014)\n- [dvtm-0.11](https://www.brain-dump.org/projects/dvtm/dvtm-0.11.tar.gz)\n  [released](https://lists.suckless.org/dev/1403/20371.html) (08.03.2014)\n- [dvtm-0.10](https://www.brain-dump.org/projects/dvtm/dvtm-0.10.tar.gz)\n  [released](https://lists.suckless.org/dev/1312/18805.html) (28.12.2013)\n- [dvtm-0.9](https://www.brain-dump.org/projects/dvtm/dvtm-0.9.tar.gz)\n  [released](https://lists.suckless.org/dev/1304/15112.html) (3.04.2013)\n- [dvtm-0.8](https://www.brain-dump.org/projects/dvtm/dvtm-0.8.tar.gz)\n  [released](https://lists.suckless.org/dev/1208/12004.html) (1.08.2012)\n- [dvtm-0.7](https://www.brain-dump.org/projects/dvtm/dvtm-0.7.tar.gz)\n  [released](https://lists.suckless.org/dev/1109/9266.html) (4.09.2011)\n- [dvtm-0.6](https://www.brain-dump.org/projects/dvtm/dvtm-0.6.tar.gz)\n  [released](https://lists.suckless.org/dev/1010/6146.html) (8.10.2010)\n- [dvtm-0.5.2](https://www.brain-dump.org/projects/dvtm/dvtm-0.5.2.tar.gz)\n  [released](https://lists.suckless.org/dev/0907/0520.html) (7.07.2009)\n- [dvtm-0.5.1](https://www.brain-dump.org/projects/dvtm/dvtm-0.5.1.tar.gz)\n  [released](https://lists.suckless.org/dwm/0902/7405.html) (8.02.2009)\n- [dvtm-0.5](https://www.brain-dump.org/projects/dvtm/dvtm-0.5.tar.gz)\n  [released](https://lists.suckless.org/dwm/0901/7354.html) (26.01.2009)\n- [dvtm-0.4.1](https://www.brain-dump.org/projects/dvtm/dvtm-0.4.1.tar.gz)\n  [released](https://lists.suckless.org/dwm/0805/5672.html) (10.05.2008)\n- [dvtm-0.4](https://www.brain-dump.org/projects/dvtm/dvtm-0.4.tar.gz)\n  [released](https://lists.suckless.org/dwm/0802/4850.html) (17.02.2008)\n- [dvtm-0.3](https://www.brain-dump.org/projects/dvtm/dvtm-0.3.tar.gz)\n  [released](https://lists.suckless.org/dwm/0801/4735.html) (12.01.2008)\n- [dvtm-0.2](https://www.brain-dump.org/projects/dvtm/dvtm-0.2.tar.gz)\n  [released](https://lists.suckless.org/dwm/0712/4677.html) (29.12.2007)\n- [dvtm-0.1](https://www.brain-dump.org/projects/dvtm/dvtm-0.1.tar.gz)\n  [released](https://lists.suckless.org/dwm/0712/4632.html) (21.12.2007)\n- [dvtm-0.01](https://www.brain-dump.org/projects/dvtm/dvtm-0.01.tar.gz)\n  [released](https://lists.suckless.org/dwm/0712/4424.html) (08.12.2007)\n\n## Download\n\nEither Download the latest [source tarball](https://github.com/martanne/dvtm/releases),\ncompile (you will need curses headers) and install it\n\n    $EDITOR config.mk \u0026\u0026 $EDITOR config.def.h \u0026\u0026 make \u0026\u0026 sudo make install\n\nor use one of the distribution provided\n[binary packages](https://repology.org/project/dvtm/packages).\n\n## Why dvtm? The philosophy behind\n\ndvtm strives to adhere to the\n[Unix philosophy](http://www.catb.org/esr/writings/taoup/html/ch01s06.html).\nIt tries to do one thing, *dynamic* window management on the console,\nand to do it well.\n\nAs such dvtm does *not* implement [session management](#faq) but instead\ndelegates this task to a separate tool called\n[abduco](https://www.brain-dump.org/projects/abduco/).\n\nSimilarly dvtm's copy mode is implemented by piping the scroll back buffer\ncontent to an external editor and only storing whatever the editor writes\nto `stdout`. Hence the selection process is delegated to the editor\nwhere powerful features such as regular expression search are available.\n\nAs a result dvtm's source code is relatively small\n([~4000 lines of C](https://www.ohloh.net/p/dvtm/analyses/latest/languages_summary)),\nsimple and therefore easy to hack on.\n\n## Quickstart\n\nAll of dvtm keybindings start with a common modifier which from now\non is refered to as `MOD`. By default `MOD` is set to `CTRL+g` however\nthis can be changed at runttime with the `-m` command line option.\nFor example setting `MOD` to `CTRL-b` is accomplished by starting\n`dvtm -m ^b`.\n\n### Windows\n\nNew windows are created with `MOD+c` and closed with `MOD+x`.\nTo switch among the windows use `MOD+j` and `MOD+k` or `MOD+[1..9]`\nwhere the digit corresponds to the window number which is displayed\nin the title bar. Windows can be minimized and restored with `MOD+.`.\nInput can be directed to all visible window by pressing `MOD+a`,\nissuing the same key combination again restores normal behaviour\ni.e. only the currently focused window will receive input.\n\n### Layouts\n\nVisible Windows are arranged by a layout. Each layout consists of a\nmaster and a tile area. Typically the master area occupies the largest\npart of the screen and is intended for the currently most important\nwindow. The size of the master area can be shrunk with `MOD+h`\nand enlarged with `MOD-l` respectively. Windows can be zoomed into\nthe master area with `MOD+Enter`. The number of windows in the\nmaster area can be increased and decreased with `MOD+i` and `MOD+d`.\n\nBy default dvtm comes with 4 different layouts which can be cycled\nthrough via `MOD+Space`\n\n * vertical stack: master area on the left half, other clients\n   stacked on the right\n * bottom stack: master area on the top half, other clients stacked below\n * grid: every window gets an equally sized portion of the screen\n * fullscreen: only the selected window is shown and occupies the\n   whole available display area `MOD+m`\n\nFurther layouts are included in the source tarball but disabled by\ndefault.\n\n### Tagging\n\nEach window has a non empty set of tags [1..n] associated with it. A view\nconsists of a number of tags. The current view includes all windows\nwhich are tagged with the currently active tags. The following key\nbindings are used to manipulate the tagsets.\n\n- `MOD-0`  view all windows with any tag\n- `Mod-v-Tab` toggles to the previously selected tags\n- `MOD-v-[1..n]` view all windows with nth tag\n- `Mod-V-[1..n]` add/remove all windows with nth tag to/from the view\n- `Mod-t-[1..n]` apply nth tag to focused window\n- `Mod-T-[1..n]` add/remove nth tag to/from focused window\n\n### Statusbar\n\ndvtm can be instructed to read and display status messages from a named\npipe. As an example the\n[`dvtm-status` script](https://raw.githubusercontent.com/martanne/dvtm/master/dvtm-status)\nis provided which shows the current time.\n\n### Copymode ###\n\n`MOD+e` pipes the whole scroll buffer content to an external editor.\nWhat ever the editor writes to `stdout` is remembered by dvtm and can\nlater be pasted with `MOD+p`.\n\nIn order for this to work the editor needs to be usable as a filter\nand should use `stderr` for its user interface. Examples where this is\nthe case include `sandy(1)` and [vis](https://www.brain-dump.org/projects/vis).\n\n    $ echo Hello World | vis - | cat\n\n## Patches\n\nThere exist a number of out of tree patches which customize dvtm's\nbehaviour:\n\n - [pertag](http://waxandwane.org/dvtm.html) (see also the corresponding\n   [mailing list post](https://lists.suckless.org/hackers/1510/8186.html))\n\n## FAQ\n\n### Detach / reattach functionality\n\ndvtm doesn't have session support built in. Use\n[abduco](https://www.brain-dump.org/projects/abduco/) instead.\n\n    $ abduco -c dvtm-session\n\nDetach using `CTRL-\\` and later reattach with\n\n    $ abduco -a dvtm-session\n\n### Copy / Paste does not work under X\n\nIf you have mouse support enabled, which is the case with the\ndefault settings, you need to hold down shift while selecting\nand inserting text. In case you don't like this behaviour either\nrun dvtm with the `-M` command line argument, disable it at run\ntime with `MOD+M` or modify `config.def.h` to disable it completely\nat compile time. You will however no longer be able to perform\nother mouse actions like selecting windows etc.\n\n### How to change the key bindings?\n\nThe configuration of dvtm is done by creating a custom `config.h`\nand (re)compiling the source code. See the default `config.def.h`\nas an example, adapting it to your preference should be straightforward.\nYou basically define a set of layouts and keys which dvtm will use.\nThere are some pre defined macros to ease configuration.\n\n### WARNING: terminal is not fully functional\n\nThis means you haven't installed the `dvtm.info` terminfo description\nwhich can be done with `tic -s dvtm.info`. If for some reason you\ncan't install new terminfo descriptions set the `DVTM_TERM` environment\nvariable to a known terminal when starting `dvtm` as in\n\n    $ DVTM_TERM=rxvt dvtm\n\nThis will instruct dvtm to use rxvt as `$TERM` value within its windows.\n\n### How to set the window title?\n\nThe window title can be changed by means of a\n[xterm extension](https://tldp.org/HOWTO/Xterm-Title-3.html#ss3.2)\nterminal escape sequence\n\n    $ echo -ne \"\\033]0;Your title here\\007\"\n\nSo for example in `bash` if you want to display the current working\ndirectory in the window title this can be accomplished by means of\nthe following section in your startup files.\n\n    # If this is an xterm set the title to user@host:dir\n    case \"$TERM\" in\n    dvtm*|xterm*|rxvt*)\n        PROMPT_COMMAND='echo -ne \"\\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\\007\"'\n        ;;\n    *)\n        ;;\n    esac\n\nOther shells provide similar functionality, zsh as an example has a\n[precmd function](http://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions)\nwhich can be used to achieve the same effect.\n\n### Something is wrong with the displayed colors\n\nMake sure you have set `$TERM` correctly for example if you want to\nuse 256 color profiles you probably have to append `-256color` to\nyour regular terminal name. Also due to limitations of ncurses by\ndefault you can only use 255 color pairs simultaneously. If you\nneed more than 255 different color pairs at the same time, then you\nhave to rebuild ncurses with\n\n    $ ./configure ... --enable-ext-colors\n\nNote that this changes the ABI and therefore sets SONAME of the\nlibrary to 6 (i.e. you have to link against `libncursesw.so.6`).\n\n### Some characters are displayed like garbage\n\nMake sure you compiled dvtm against a unicode aware curses library\n(in case of ncurses this would be `libncursesw`). Also make sure\nthat your locale settings contain UTF-8.\n\n### The numeric keypad does not work with Putty\n\nDisable [application keypad mode](https://the.earth.li/~sgtatham/putty/0.64/htmldoc/Chapter4.html#config-features-application)\nin the Putty configuration under `Terminal =\u003e Features =\u003e Disable application keypad mode`.\n\n### Unicode characters do not work within Putty\n\nYou have to tell Putty in which\n[character encoding](https://the.earth.li/~sgtatham/putty/0.64/htmldoc/Chapter4.html#config-translation)\nthe received data is. Set the dropdown box under `Window =\u003e Translation`\nto UTF-8. In order to get proper line drawing characters you proabably\nalso want to set the TERM environment variable to `putty` or `putty-256color`.\nIf that still doesn't do the trick then try running dvtm with the\nfollowing ncurses related environment variable set `NCURSES_NO_UTF8_ACS=1`.\n\n## Development\n\nYou can always fetch the current code base from the git repository\nlocated at [Github](https://github.com/martanne/dvtm/) or\n[Sourcehut](https://git.sr.ht/~martanne/dvtm).\n\nIf you have comments, suggestions, ideas, a bug report, a patch or\nsomething else related to dvtm then write to the\n[suckless developer mailing list](https://suckless.org/community)\nor contact me directly.\n\n## License\n\ndvtm reuses some code of dwm and is released under the same\n[MIT/X11 license](https://raw.githubusercontent.com/martanne/dvtm/master/LICENSE).\nThe terminal emulation part is licensed under the ISC license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartanne%2Fdvtm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartanne%2Fdvtm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartanne%2Fdvtm/lists"}