{ "info": { "author": "Paul Ivanov", "author_email": "pi@berkeley.edu", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Topic :: Utilities" ], "description": "kanten\n======\n\nthe enlightened pager. less paging. more content. read widely.\n--------------------------------------------------------------\n\n...because you have more than 80 columns\n\nOrigin:\n\nkan-ten: Japanese for word for agar, a gelatinous substance derived from seaweed.\n\nA program for reading in the terminal. A pager for the early 90s?\n\nThis program was inspired by a similar one called\n[Tofu](http://amarsagoo.info/tofu/) for OS X, a column-based reader application,\nwhere the columns are arranged horizontally. Given the aspect ratio of computer\nmonitors, I decided to create kanten to be a unix pager replacement (more and\nless) that is not limited to 80 columns.\n\nTODO\n----\n[x] horizontal progress bar indicator\n[x] figure out how many columns are displayed, and adjust pbar accordingly\n[x] max columns should always be shown\n[x] progress bar should consider all visible columns as shown \n[x] some vertical empty space at the top\n[x] space bar should move whole screen over (displayed_columns)\n[x] scroll using the mouse\n[ ] middle mouse button pastes contests of X11 paste register into a new buffer\n[ ] mouse events don't work after 'v' (entering editor)\n[ ] d and u (^D and ^U) go forward and back a column (half-screen in less)\n[x] reading from stdin\n[x] process keyboard shortcuts after reading from stdin (the way less does)\n[ ] read buffering (don't read the whole file before filling in)\n - MUSTFIX for sane STDIN piping (e.g. git log | kanten)\n - urwid's edit.py has an example of lazy loading\n[ ] mouse interactions broken in xterm after sleeping kanten - what gives?\n - can't click to select text in xterm\n - cannot select text even after sleeping kanten\n[ ] double spacing option for easier reading?\n[x] specifying a filename from commandline\n[ ] demo file that explains kanten (tutorial)\n[ ] do a full install as a python package with an entry point\n[ ] configuration in ~/.config/kanten\n[ ] all configurable take defaults from ~/.config, but overwritten by params\n[x] configurable number of columns (via -w or --width)\n[x] automatically figure out size (for height, and number of columns)\n[x] allow setting height from command line\n[x] implement :set commands\n (:set height, :set width)\n[x] 'v' to edit the file , just like less\n - disabled for stdin? at least if EOF not encountered\n - wouldn't support editing stdin\n [x] respect $EDITOR, use vim if EDITOR not set\n [ ] would be even better if we check if vim exists, use vi otherwise\n [ ] on exit from editing, refresh the file in kanten\n[ ] open file to the right line (at least the top-left column's line)\n - set cursor location either via search or mouseclick\n - mouseclick should un-highlight the current match of search (if any) and\n highlight the whole line instead\n - actually - it might make sense to just use widget focus infrastructure\n for this in urwid?\n [ ] mouse click column detection is off by the size of the margins\n - find it from window_width % column_width / num_columns\n [ ] drag click events for paging (flick-click right to go forward, etc)\n[ ] run_wrapper to restore previous screen?\n - moar and bpython do this, i think\n[ ] (refactor) move all initialization into a function, to allow for re-init\n[ ] dynamic resizing of width \n [ ] (via + and - commands, perhaps)\n [ ] via \":set width=40\"\n[ ] respond to sigwinch and re-do the number of columns\n - number displayed changed, so the pbar needs an update\n[x] param parsing (e.g. add --help)\n[x] hide the progress bar (ctrl-n is what zathura uses or something?)\n [x] currently implemented via t\n[ ] add a parameter to disable progress bar\n[ ] add help dialog on h\n - not ? - that's reverse search, but h and H and F1\n [x] easter egg planted\n [x] :help should work\n[x] add : command mode\n [x] support :q\n [x] support :f for file info\n [ ] don't allow deletion of ':' prompt in command mode\n [ ] backspace in command mode should leave it? (like vim\n ( ) history (up and down arrows)\n ( ) q: and :^F command buffer?\n[ ] (maybe) support multiple buffers?\n - :n and :p (or :N) for next and previous\n [ ] :e to read a different file?\n - filename tab completion for :e\n[x] . (dot) to repeat previous command (page up or down, next, etc)\n[ ] support more less/more keys \n [x] < and >\n [x] z and w\n [x] j and k (page-wise OK)\n [x] = to show file name / info (ctrl-g should also work)\n [x] ctrl-g should show status bar only once\n [ ] others?\n [ ] F - forward forever (for stdin)\n[ ] control key combos\n [x] ctrl-v ctrl-f for page forward and ctrl-b for back back\n [x] ctrl-g for file info\n[ ] (maybe) implement marking system (top lines?)\n - like less, marks will only live for duration of program execution\n[ ] support jumping to a particular line\n - would go along with editing a file at that line\n - and allow us to jump back into the same line after editing?\n - jump to the line of the currently highlighted thing\n[ ] support ctrl-i and ctrl-o location-list jumping\n[x] reflow of text\n[ ] (maybe) reading cursor (like dictator?)\n[x] 'g' to go to the beginning \n [ ] gg g0 g$ and other commands?\n[ ] implement number prefixes\n[x] 'G' to go to the end\n[x] split boxes so that they partially fit\n[x] clip off lines that are too long even in one go\n[x] last line of text being cut-off\n[x] fix formatting (spacing) for cells which were cut\n[x] columns currently allowed to expand: don't let them \n - boxadapter?\n - options('given', width) ?\n - use padding!!\n[ ] (alignment) 'the less is' line currently getting screwed up :\\\n[ ] (refactor) start off with one Padding(text) and keep splitting in\n - don't pre-split\n - such an approach will be a reasonable way to go with searching, anyway\n - i.e. highlight the word in every instance, and reflow?\n - or at least to find the location of the word, and then index into the\n right / approximate column\n - also makes it reasonable to scroll line by line (daisy chain visible cols)\n - stop after all visible columns are filled\n[x] search using / (to seek around)\n - use a footer / header of the frame widget to do this and :?\n [x] enter do submit footer content\n [x] esc to refocus the window\n [ ] case insensitive search via -I command line parameter\n [ ] incremental search via incsearch\n[x] highlight words in the text\n[x] highlight searched word (switch to ANSIText?) \n[x] highlight diff output (via 'd', disable with 'D')\n [ ] detect diff output \n [x] toggle it via :set ft=diff\n [x] force diff output with -d flag\n [x] use diff output when openining .diff and .patch files\n [ ] handle diff lines that span multiple columns properly \n[ ] parse shell escaped characters properly\n - so we can read man pages\n - look at the piped output of grep --color=always\n - I think the Qt console has some code for this?\n[x] replace searched words with highlighted version\n[ ] highlight current matched search item differently than some other\n - traverse the contents, and change an 'important' to somehting else\n[ ] wrap-around optionally\n[x] going forward 4 times and then going back 4 doesn't work :(\n maybe related:\n File \"/usr/lib/python2.7/dist-packages/urwid/widget.py\", line 142, in cached_render validate_size(self, size, canv)\n File \"/usr/lib/python2.7/dist-packages/urwid/widget.py\", line 112, in validate_size canv.rows(), size))\n urwid.widget.WidgetError: Widget valign='top'> rendered (193 x 45) canvas when passed size (193, 51\n [x] (maybe) try cache invalidation? nope, _invalidate doesn't hel\n [x] [cols.focus_position=0 seems to have done the trick!\n[ ] bash completion for flags (is there one for python ArgParse code already?)\n - yeap! use https://github.com/kislyuk/argcomplete\n[ ] write some tests, with Travis and Coveralls badges in the readme?\n [ ] look at how pudb xo and other urwid apps do testing\n [ ] urwid tests are in e.g. /home/pi/code/urwid/urwid/tests/test_listbox.py\n[ ] take a look at what @jlord accomplished with http://jlord.us/horizontal-web/\n[ ] more has a way of listing multiple files\n[x] hide progress bar (perhaps on timeout after paging through)\n[ ] adding a keyboard shortcut should be sure to remove it from others\n[ ] handle really short input gracefully \n - put the first column on the left-most position\n[ ] rest and markdown highlighting (if available)\n[ ] use pygments for highlighting, when possible\n [x] detect filetype, at least by filename\n [x] .diff and .patch for ft=diff\n [ ] .py for ft=python\n[ ] see what rifle does in ranger - utilize those plugins / handling\n[ ] fix bug for small width and few number of lines (looks ugly, spaces/line\n breaks are missing)\n[x] clear edit text on motion key\n[ ] kanten.js\n[ ] refactor to remove globals with instance variables\n[ ] write a kanten man page\n [ ] add section for COMPATIBILITY WITH MORE and COMPATIBILITY WITH LESS\n[ ] -F or --quit-if-one-screen\n Causes less to automatically exit if the entire file can be dis\u2010\n played on the first screen.\n[ ] -i or --ignore-case\n Causes searches to ignore case; that is, uppercase and lowercase\n are considered identical. This option is ignored if any upper\u2010\n case letters appear in the search pattern; in other words, if a\n pattern contains uppercase letters, then that search does not\n ignore case.\n[ ] -I or --IGNORE-CASE\n Like -i, but searches ignore case even if the pattern contains\n uppercase letters.\n[ ] add \\c and \\C (insensitive and sensitive, respectively) to the\n search parsing\n[ ] support set ignorecase? set smartcase?\n[ ] add saveas (to save STDIN input)\n[ ] center single column\n[ ] version string\n [ ] :version command\n[ ] corner cases when -t and -b \\lim 0\n[ ] for ipython: register .ipynb as a json lexer-able thing\n pygments.lexers.web.JsonLexer\n[ ] swallow last empty panel in the banner\n[ ] make kanten importable (refactor out the cli aspects to make testing easier)\n[ ] bug - height is exceeded in my piles (off by one?)", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/ivanov/kanten/zipball/0.5", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://kant-en.org/", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "kanten", "package_url": "https://pypi.org/project/kanten/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/kanten/", "project_urls": { "Download": "https://github.com/ivanov/kanten/zipball/0.5", "Homepage": "http://kant-en.org/" }, "release_url": "https://pypi.org/project/kanten/0.5.123/", "requires_dist": null, "requires_python": null, "summary": "The enlightened pager: less paging. more content. read widely.", "version": "0.5.123" }, "last_serial": 1154067, "releases": { "0.5": [ { "comment_text": "built for Linux-3.13-1-amd64-x86_64-with-glibc2.4", "digests": { "md5": "8cb1af34b02ca7f357fa61b22f8fee0c", "sha256": "caeb427984c53a5142119247da210716c14af4596593d42c9a1d900826011acb" }, "downloads": -1, "filename": "kanten-0.5.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "8cb1af34b02ca7f357fa61b22f8fee0c", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 27167, "upload_time": "2014-07-10T20:44:05", "url": "https://files.pythonhosted.org/packages/b7/1d/42e7400e5e5bb2e29b4f8fe4f2ee3c018bc5bcf69c132ebdd1d6107ff001/kanten-0.5.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "ccc68b61795ba39e3f814fbac56808f9", "sha256": "51ca83b51f5979bc80f1867ba8577cc1585f3829356734298952daeba215f51d" }, "downloads": -1, "filename": "kanten-0.5.tar.gz", "has_sig": false, "md5_digest": "ccc68b61795ba39e3f814fbac56808f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13933, "upload_time": "2014-07-10T20:44:31", "url": "https://files.pythonhosted.org/packages/23/fe/538c83c35f4114283ef27e47d76079c8c137ef1800d80d966bc8960af1f3/kanten-0.5.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "63790ddae1aac35f0c96042e787eb7a1", "sha256": "aa3586f869d6c44056f9e2eb15e621905bbce4f48ed24dc66c55a99ba72df2f6" }, "downloads": -1, "filename": "kanten-0.5.0.tar.gz", "has_sig": false, "md5_digest": "63790ddae1aac35f0c96042e787eb7a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15545, "upload_time": "2014-07-10T20:46:21", "url": "https://files.pythonhosted.org/packages/60/fe/e9c12343d7cedab4a90ae3b576a79f6460913e0b79a25d8bf1d1d9288c0a/kanten-0.5.0.tar.gz" } ], "0.5.00": [ { "comment_text": "built for Linux-3.13-1-amd64-x86_64-with-glibc2.4", "digests": { "md5": "3e96438561abac43bae1b037855368c9", "sha256": "c401ba617752064d7d1cd1f6f33ddfe6d16920168480ada6e70067cc51306434" }, "downloads": -1, "filename": "kanten-0.5.00.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "3e96438561abac43bae1b037855368c9", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 23627, "upload_time": "2014-07-10T20:54:35", "url": "https://files.pythonhosted.org/packages/5a/c2/4a5c8e37a25fb20c8920cd26fee2d3d561ea1613d02089c7d6069cde7b2a/kanten-0.5.00.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "f197aca7affcbd44e09b493f792408b2", "sha256": "6016ece42c41fd8e742928cb60df17491cd33735a9b21dc6111e56b2470fa8f0" }, "downloads": -1, "filename": "kanten-0.5.00.tar.gz", "has_sig": false, "md5_digest": "f197aca7affcbd44e09b493f792408b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15563, "upload_time": "2014-07-10T20:48:46", "url": "https://files.pythonhosted.org/packages/67/9b/91fe61f5639de411f49173da4b013cb4614206d18bf80ee75678e403f672/kanten-0.5.00.tar.gz" } ], "0.5.12": [ { "comment_text": "", "digests": { "md5": "cc3ead73c36089ebf432674bae0940e0", "sha256": "a931580116b841292a6795823953cb0331f742349bde2f998ddec6a0f6796864" }, "downloads": -1, "filename": "kanten-0.5.12.tar.gz", "has_sig": false, "md5_digest": "cc3ead73c36089ebf432674bae0940e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15585, "upload_time": "2014-07-10T21:21:12", "url": "https://files.pythonhosted.org/packages/14/c0/60113199f8535429a269b36143f48f1987dab2289424ef117efd53bdcc9d/kanten-0.5.12.tar.gz" } ], "0.5.123": [ { "comment_text": "", "digests": { "md5": "8a9f4c58e46a81c445beb91328c2be3d", "sha256": "8c345d3a825d965ba938b79716f503abe455371a58ce90a7d2416d8a8f66df72" }, "downloads": -1, "filename": "kanten-0.5.123.tar.gz", "has_sig": false, "md5_digest": "8a9f4c58e46a81c445beb91328c2be3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15582, "upload_time": "2014-07-10T21:59:37", "url": "https://files.pythonhosted.org/packages/4c/bd/8b6808ba579dfc44232a579644b86c8dacb5ddc063bc44d451107c5deb4b/kanten-0.5.123.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8a9f4c58e46a81c445beb91328c2be3d", "sha256": "8c345d3a825d965ba938b79716f503abe455371a58ce90a7d2416d8a8f66df72" }, "downloads": -1, "filename": "kanten-0.5.123.tar.gz", "has_sig": false, "md5_digest": "8a9f4c58e46a81c445beb91328c2be3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15582, "upload_time": "2014-07-10T21:59:37", "url": "https://files.pythonhosted.org/packages/4c/bd/8b6808ba579dfc44232a579644b86c8dacb5ddc063bc44d451107c5deb4b/kanten-0.5.123.tar.gz" } ] }