Xiki: A shell console with GUI features.
xiki.org
xiki.org
The “hero unit” at the top should contain a big link to install it (appropriately worded to indicate that it’s just sending you to instructions in a README on GitHub). Another big button link to the screencasts would probably help, since most people won’t understand what Xiki is without them. Alternatively, have a “features” page with a list of features and large, static screenshot demonstrating each of them.
"Type and double-click Type a word, any word. Then double click on it or type control-return (or command-return). For example type: git, bootstrap, mysql, mongo, rails, node, coffee, js, dom, jquery, svg, ruby code, file paths, url's, shell commands, etc."
I can type and double click on any word in this text box. It doesn't do anything, but I can poke at them all I want. Or, how about this:
"Wiki inspired Everything is editable text. Type commands anywhere. Edit the output. (Vs. typing commands at the bottom, and read-only output.) Intermix menus, headings, bullet points, wherever you want. Xiki == executable wiki."
Why would I want to do any of that? Edit the output of commands?
The screencast narrator asks a number of intriguing "what if you could XYZ" questions, but it doesn't actually answer them, leaving the listener to come up with useful applications. Well, what if I could do all those things? I would like to have heard more about what higher-level problem(s) these solutions address, and why these are better solutions than what I'm already using. Something motivated the developer(s) to write this, but I can't immediately tell what that motivation was.
When you first dive into Linux, you learn that you have a thousand different simple commands. And you feel kinda lost. Then you start using them in ways their programmers never imagined. And you chain them with pipes and do some really cool shit.
You do that because nobody told you what they were for, they just were.
I do that because I've seen previous examples of these things, often cases of solving a real problem, and then go from there.
Yes there are times I see some set of tools and just mess with them and make stuff up, but really I only have so many hours in a day for that and other things.
FWIW I think most people dive into Linux because they already had an idea of what they expected it to do for them.
Perhaps Xiki really can do assorted cool and novel things. Or maybe it just does familiar things in a cool way. That's much less interesting to me.
I think the correct way is the `<` operator. `>` writes to a file, and `<` is the inverse, so it reads from a file. One shouldn’t `cat some-file.txt` or `cat some-file.txt | wc -l`; one should `< some-file.txt` or `< some-file.txt | wc -l`. `cat` is only necessary when you supply to it multiple arguments, as in `cat first-file.txt second-file.txt`.
Of course, `cat` still works for outputting file contents, as it has for me all this time. But it just feels more “right” and “safe” to use the operator that is built for that purpose.
I just wanted to mention that discovery in case anyone else wondered the same thing when they read the words about using commands in unintended ways.
Also, `< file.txt | wc` doesn't work (at least not in bash; zsh (my install/plugin combo, at least) apparently tries to map the lone `< file.txt` to `less -R file.txt`...which spits out an error. Anyway, omitting the pipe will work: `< file.txt wc -l`
`cat` by definition concatenates one or more files and spits the output to stdout, so using it on a single file is perfectly within the bounds of its definition (IMHO; I realize people get really zealous about this type of thing and I'm not trying to start a war).
Bash has the "set -C" option to toggle on "no-overwrite" mode for redirection operators.
Default behavior:
% touch foo
% echo bar > foo
% cat foo
bar
% rm foo
No clobber mode: % setopt NO_CLOBBER
% touch foo
% echo bar > foo
zsh: file exists: foo
Manual override: % echo bar >| foo
% cat foo
bar $ < some-file.txt | wc -l
doesn't work. You should run $ wc -l <some-file.txt
Although in most cases the program you're using is capable of reading from both stdin and from a file. So you'd really just run $ wc -l some-file.txt
When you see characters like '|', '<', and '>' the things you're playing with are called pipes. (There's a decent wikipedia article on 'Pipeline (UNIX)' that talks more about them) Having tons of commands that do specific things wouldn't be very useful if you couldn't compose them (in the function composition sense), and pipes are the tools you use to combine them. This is where the 'using commands in ways never imagined by their authors' really comes from. $ < some-file.txt ws -l
(without the pipe). '<' works at the beginning of the command just as well as it works at the end, meaning you can basically do: s/^cat \(.*\)|/\<\1"< some-file.txt | wc -l" doesn't work for me. "< some-file.txt wc -l" does. I actually wasn't aware of the latter syntax; and now that I think about it, I'm actually not sure if I've ever used redirection in combination with piped commands.
(I don't do a whole lot of shell scripting, and I exclusively used DOS, Windows, and OS/2 during my most formative years, so my reflex is to reach for an actual programming language to do nontrivial things, because even though I've been using Linux for years as my main OS, the fact that I now have a competent shell available still hasn't completely sunk in. I was amazed when I discovered the xargs command and its --max-procs option; I'd written a Python script to do much the same thing.)
I've gotten similar feedback, re imagining what it would be used for. The simplest use case is probably the "shell terminal but better" one. You can narrow down the output of shell commands, and make reusable files with notes as you run stuff (for yourself to use later on, or for other people). You can nest the commands underneath directory paths to avoid having to CD. You can change parts of the paths to re-run the same commands in a parallel dir structure in a different place (even a remote server). You can search command history in a specific dir and re-run commands (vs bash history showing you commands that were run in any dir). You can post any notes you made on the web or email them to people, for others to help others get started using stuff.
Going a bit higher-level, Xiki sort of lets you have "paths" (kind of analogous to url's) for many different things - database records, running commands in specific dirs, running a line of javascript in your browser, changing the style of a div, firing off a button click on a web page given its id, running unit tests, showing runnable (and modifiable) example code for various frameworks, etc. Most people probably agree that having paths for files and web pages is pretty useful. Having paths to other things can be useful for many of the same reasons.
1) It's too difficult to remember all the tricks to make it useful, and the cost of memorizing tricks that I saw in the first screencast isn't worth the efficiency it provides.
2) It's too difficult for new users to remember the tricks that are supposedly "better." It's a lot like Python vs. Perl -- Perl is a really smart and clever language, but you can type just a few characters more to write Python and it'll be a lot clearer as to what's going on.
The one exception to all of this is the MySQL stuff I saw. The MySQL prompt has sucked for a long, long time, and building SQL queries is something you do iteratively anyway.
All of the above said, I still think this is pretty neat. But I won't use it.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi...
vim is the most popular implementation of vi, with lots of added bells and whistles
I'd say learn vi first; then learn the vim bells and whistles.
I have resources for learning vi at http://www.verticalsysadmin.com/vi.htm
I'm really into improving efficiency and I enjoy teaching people how to use vi. The class materials are publicly available and are based on Bill Joy's original paper introducing vi:
Basic vi: http://www.verticalsysadmin.com/vi/class/
Advanced vi: http://www.verticalsysadmin.com/vi/class/advanced.html
My next vi class will be in Columbus, Ohio at Ohio Linux Fest in a couple of weeks (http://ohiolinux.org/olfi2012/classes/editing-with-vi)
If I had a nickel for every time someone justified not using vim's features by invoking a bizarre imaginary scenario where they were using vi to twiddle bits on a downed snowflake machine, I could buy a few fancy coffees.
As a user of Emacs, Blender, and Perl, I’m probably in the latter camp. And this tool seems like something I might enjoy using. But I don’t think that, as a rule, things should be designed this way unless there’s a very good reason to do so, backed by user research. I would not design a programming language like Perl, for example, because “people who program” will always outnumber “programmers” and it’s best to cater to the majority.
It works great, much faster than regular prompt. Shame it's only for oracle db.
Doesn't this same argument lead to the conclusion that new users won't use Perl over Python or --to put it more inflammatorily-- that Python killed Perl? This is surely demonstrably incorrect.
(Maybe I'm worse off for it? Who knows. I mean no harm and don't want to impinge on anyone's feelings. I just don't see myself picking up Perl anytime soon. Just my own two cents, FWLIW.)
everything is just (UTF-8) text.
the window system and acme allow you to edit whats on the screen. and theres a mechanism called the plumber that lets you execute various action depending on selected text.
see:
http://plan9.bell-labs.com/sys/doc/plumb.html
and
http://news.ycombinator.com/item?id=4483750
http://news.ycombinator.com/item?id=3506613
As with the last time I tried it, it still doesn't work. Crashes right away trying to read from some tmp file.
But aside from that, this looks fantastic, it'd be interesting to see if more text editors could be ported to it (e.g. Sublime Text 2)
Also, one you get used to the commands, it's often easier to use too many without thinking rather than planning out an efficient way to do something.
Go to beginning of line, set mark, go to end of line, copy, paste.
I'd rather start with something designed well enough that I am not tempted constantly to change it.
In principle, you could convert all those docs and tutorials to use more vim-like keybindings, but that would be a lot of effort, and you'd have to learn emacs/SLIME with standard keybindings first.
Furthermore, if you rely on non-standard keybindings, you'd be completely lost when reading a conversation between typical emacs users, when they say stuff like "oh, just use C-X-a-b C-Y-c-d" or whatever (as they do in another post in this very thread).
For better or for worse, it seems the default keybindings in emacs are pretty tightly bound to its culture and ecosystem.
Cmd - s Cmd - z Cmd - Shift - z Cmd - c Cmd - x Cmd - v
The only thing that doesn't work reliable for me is
Shift - left/right
to mark text.
I've got a hobby project that I work on on and off that's similar (although I'm a vim guy no evil mouse clicks) with a heavy org-mode influence. Some of the features you demo in your screencasts are inspired.
I'll be following Xiki closely and probably stealing some of your ideas for my own project.
Good work, I'm glad to see people experimenting with new ideas in modern keyboard based power user interfaces.
I tire of trying out software with new bright ideas not informed by a knowledge of the best of the old bright ideas.
EDIT: added the 4 words in italics.
When I install and test-drive new software, however, I am less open-minded because I know of no real way to evaluate the new software without spending a lot of my time and energy learning about it.
Having said that, it is a bit disheartening when somebody solves a problem which is solved almost exactly the same way as several other solutions.
Not that I would tell these guys to go about their business this or that way or anything. Whatever works for them and so on. Though it would obviously be helpful to know which things it is similar to and how it compares to them when telling people what it's like.
Join the Xiki google group and we'll get your problems fixed! The install has been tested on Lion and the latest Ubuntu and there are some reports of success. A few weeks back we shifted gears to get "gem install xiki" working and improve the install process.
The installation appeared to proceed successfully, but when I started emacs, I got errors about "ignore-errors" being void, and there was also an error in one of the various buffers about not being able to find "el4r-setup". I'm running OS X Lion, I created a new rvm gemset with 1.9.2-p290 to do the gem installation, and I didn't have to "sudo" anything for any of the installation steps.
Also, your install documentation could do with more hints on what to do once it's installed to figure out whether it's working or not. I started emacs, typed "ls" and double-clicked it, but I had (and have) no idea whether nothing happened because I was doing something wrong, or because it was broken.
If any vim user in the bay area are interested in getting together and pair programming on knocking this out, ping me on twitter! The current vim xiki proof of concept uses the vim ruby api, which is actually pretty decent.
If you're on a Mac, you install AquaMacs which is very mac-like (shift-arrow-key to select, type to replace, etc.) and doesn't require emacs skills.
Another option is for vim people is Viper mode, which emulates vim from inside emacs (a lot of people like it apparently).
Related note, I was pairing with someone on Monday at Proto Night (protonight.com) and we got a very simple TextMate xiki client mostly working.
Would it be possible to tap into GUI applications via OSX UI Scripting, and maybe mirroring the app's menus with Wiki menus?
I just made a Shoes menu (shoesrb.com) yesterday, though it's not checked in yet. Clicking Xiki menus that bring up custom native UI windows seems like it could have a lot of potential, though haven't really explored it. Might be interesting to try a shoes native interface for Xiki menus.
Another possible direction... Xiki has a web interface that you can enable. So you can to http://xiki and navigate menus. It probably wouldn't be too tough to make a native OSX app with an embedded browser that displays it.
i think if they limit their focus on have one shell to replace anything that have a shell ... yet offer a better shell experience, they will have a winner
i believe they could be going to too many features so far that those comments comparing it to emacs seem to have a point ...
This xiki thing on the other hand seems to have only a few new "keyboard shortcuts", and consequently I would be more inclined to adopt it if I gets more traction (hackers who have tried it and like it).
I know a lot of people here like to do everything with the keyboard, but I am not one of them.
I distinctly recall shortcuts unique to org mode for moving a subtree up and down relative to a list of subtrees all at the same nesting level -- an operation done by dragging with the mouse in many or most other outliners. I know the dragging interface is harder to implement, but I find it more ergonomic.
Something interesting I see would be having a .project file in the repository where all the common commands are written. That would be a mix between a cheatsheet and a wiki. For instance, for django, you would have a Database section with some commands. which could dynamically be adapted to the current project. (Database or table names, etc.). Or, if south isn't installed yet, we could see the command to initiate it.. but then, it'll simply be the command to --auto migrate stuff.
Anyhow, really promising and I'm excited to give it a fair try.
That looks promising. Does like "xiki ip" work?
> the instructions are not helpful
Definitely upgrade so you get the latest gem, as the instructions have been updated lately. If you're still seeing errors join the google group (groups.google.com/group/xiki) and we'll get it figured out!
Looks like a neat idea. Not entirely clear what the "cmd-return" is supposed to do. Run a command?
My thought exactly. The website tells me to try the combination, as if advertising a feature, but never ends up telling me what the feature actually is..
When you launch a $... shell command it executes it and inserts the results. When you launch a url, it opens it in the browser. When you launch a dir path it lets you navigate the dir contents, etc.
Are we going to see more of a return to Modal editing?
the doc need more details, still do not know how to save a menu.
update: works in Safari though.
Or you can do "gem install xiki" and it will guide you through setting it up.
I'm working on making a page that highlights similarities between Xiki and various tools / paradigms.
Echo "main() {}" > {Fred}.$ cc -o mything {Fred}.$
(Of note, the actual syntax included high bit MacRoman characters, so you were actually using the "section" glyph rather than $)
To this day I miss this ability on command shells. On Windows there is lame cut-and-paste (and it's disabled by default). It feels like cement galoshes, all that dead text just sitting there on the screen, useless and flat.