OneFinger: TO-DO LIST
======================


1. TO DO THINGS
---------------


Before next release
-------------------


* make the view menu show checks.

* can't delete files (pyqt error)

* this would give a huge speedup: reload the history in
  background. What does it mean?
  
  1. first you show the items without the icons (before reading the
     mimetype);
 
  2. then, slowly, you show the icons. 

  This is possible because, in the history, there is no grouping that
  requires knowing the mimetype.


* allow to suggest programs for a file without adding the file to a
  simple command. Why? It may be useful to suggest programs in order
  to compose a bash command. In this case, it is unintuitive to add a
  file to a simple command just to suggest programs.

  In other words, we should not use selected files to determine which
  programs are visible anymore. We should split the list
  "selected_files" in two: files_in_simple_command and
  files_used_to_narrow_programs.

  We should add a menu option "suggest programs for managing this
  file", in addition to "add to command and suggest programs".

* make OneFinger display filenames correctly, if encoded in something
  different from unicode. This requires a big amount of refactoring,
  in order to use only the kde libs, bypassing the python libs.

* fix redundant separators in popup menus

* bug in redrawing listbox: click on a prog so that the popup menu
  covers the file panel. Close the menu. Files are not redrawn. Tested
  when there are 5 visible files. It does not seem to happen in prog
  list.

  BUG: while the history is refreshing, if you move the mouse to the file
  panel, you don't see the hightlighted file, even after the history
  stops refreshing. You have to move the mouse for the highlight to 
  appear.

* support the Python accelerator Psyco.

* implement "remove constraint "pdf""
                         
* Bug deleting custom command: (I can't seem to reproduce it)

  Traceback (most recent call last):
  File "/usr/share/OneFinger/src/my_qt_widgets.py", line 1457, in onActivated
    self.emit(PYSIGNAL("itemActivated"), (self, item_data))
  File "/usr/bin/one-finger", line 2064, in on_item_chosen_from_action_popup_menu
    del usage_count_of_custom_mime_program[action_arg.exec_]
    KeyError: 'test %f'
	  


* the info bar should also show permissions and date, if a single file
  is selected.

* the history is slow. Add a mode where you refresh it by hand. Or
  maybe, redraw the panel in background?



* bug: Crash if OneFinger is launched from CLI while in a nonexistent
  dir.

* add a way to see the trash contents.

* integrate "media:/" in the filesystem hierarchy.

* make drag and drop work between multiple desktops.

* minor bug: os.path.basename() is applied to options too. So if an
  option is "http://bugs/foo", and you search for "bugs", you don't find it.

* check for free space before copying/moving. Actually, it should be
  KIO::move to do this transparently, but I'm not sure KDE is working
  towards it.

* test shell mode with a for loop

* test shell mode with a pipe command


* bug: os.getcwd fails:
setting sorting_criterion_for_dir /root = Date
Traceback (most recent call last):
  File "/usr/share/OneFinger/src/my_qt_widgets.py", line 1193, in onActivated
    self.emit(PYSIGNAL("itemActivated"), (self, self.idToItem[i]))
  File "/usr/bin/one-finger", line 4284, in onSortBoxItemActivated
    redraw_files()
  File "/usr/bin/one-finger", line 985, in redraw_files
    set_current_dir_button.setOn(cur_dir == os.getcwd())
OSError: [Errno 2] No such file or directory
splitting konsole --noclose -e cat %f
Traceback (most recent call last):
  File "/usr/bin/one-finger", line 339, in clearArgumentFiltersAndUpdate
    clearAux('argument')
  File "/usr/bin/one-finger", line 347, in clearAux
    redraw_files(centering = True)
  File "/usr/bin/one-finger", line 985, in redraw_files
    set_current_dir_button.setOn(cur_dir == os.getcwd())
OSError: [Errno 2] No such file or directory

* Bug: if I show files used with a program, the message "truncated"
  does not appear. And the list of all files does not appear either.






After next release
------------------

* Implement "select all files with this extension". can already be
  done with the magical wand button.


* select by pattern is case-sensitive. Difficult to fix, because we
  rely on bash for pattern expansion.

* rename "directory" to "folder" everywhere.


* Consistency: either select a file if it is in bash area too, or do
  not select it ever.


* showing the contents of big directories is too slow. I may know the
  name of the file, and want to type part of it in the search box
  INSTEAD OF BROWSING. In that case, I still have to wait for the file
  list to appear.

  Solution: incremental display of files? Difficult due to sorting. Or
  just incremental mime-type guessing?

* run programs as other user

* add tab bar with terminals, and a button beside the command area
  called "Execute with output in tab".

* popup menu "remove this group" in history panel. It appears when you
  click on titles.

* allow to associate an icon with a custom command. How? What icon
  list should be shown?

* show tooltip on files. They show the file size and date.

* preview pictures in the panel.

* refactoring: if files_selected_in_hist_panel is only used in cli
  mode, put it there

* set correct min height for TruncatingButton

* toolbar button "restore last selection". 

* allow to remove from the list the mime programs improperly
  used. This means forgetting the program has been ever used. I'm not
  so sure this is useful.

* add some kind of animation to make it more apparent when the current
  dir is selected

* if the user deletes the cur_dir, onefinger should detect it (via
  fam) and hide it, and get back to a default dir (e.g. the home).

* manage trashcan according to freedesktop. like gnome.

* add a way to hide the goto-parent-dir button, which is fake.

* add a rename verb that preserves the file history.

* From Dusty Phillips: Another thing mentioned in the todo list is
  what to call the 'current directory' in custom command line, for
  example whes using ./*.mpg, or even 'programname file' where file is
  a relative path that was typed in instead of chosen with the
  mouse. I think this should execute the command on the currently open
  directory (in the leftmost panel).  Currently, I find I'm selecting
  the currently open directory from the recent history panel a lot and
  then appending a filename or expression to it.

  another example: mv file1 file2

  might be created by typing mv, then clicking file1 in the open
  directory, and then typing file2. file2 has to be typed because it
  doesn't exist. To do this now, I have to click the icon for the
  directory to get the complete path to the file.



* internationalization :-)

* don't reset files scrolling after executing a command. suppose you
  sort by name, and want to execute a program (e.g. chmod) to all
  files. Each time you have to scroll downwards.+

* Don't reset scrolling if I go the the previous dir: remember scroll
  position for each dir.


* allow to purge from the history list files unused for more than X
  days. Otherwise, onefinger is ever slower and slower.

* allow to drag a folder (or a file) to OneFinger in mime-mode. This
  opens the folder (or the parent folder) in the file browser.

* implement "create directory here".

* allow undo to "paste here" and "move to trash"

* add integrity rules such as "selected_files = [] ==>
  files_selected_in_history_panel = [] "

* the "only show favorites" button &C. should be automatically
  deselected.

* convert message boxes to use the status bar?

* in shell mode, add verbs in the program panel. This allows "add to
  favorites" and "remove from favorites" in shell mode too. These verbs
  are special items that are not clickable, but only have an "execute"
  button besides them.

* allow to cancel cut & paste. How?


* in shell-mode, speed-up file selection by caching mimetypes? WRONG:
  File selection is slow because it takes time to filter
  programs. Detecting mimetypes is NOT the bottleneck. I discovered
  this when programming the mime-mode.

* window-list: when pressing the + icon, bring windows on top of list.

* add konqueror's action menu to programs.

* In mime mode, consider removing toolbar buttons and make them
  zeroary verbs. You gain searchability, clutter removal, and labeled
  icons. You loose ease of use: some functions are used rarely, yet
  should be easily reachable when needed. Also, do we loose
  togglebuttons?  Do we loose the drop target?

* In shell mode, can we remove the toolbar and make them zeroary verbs
  as well? We would gain consistency with the mime mode, but we would
  loose consistency inside shell mode: when you click a program, its
  name is inserted in the box... not so for verbs. Possible solution:
  the are not clickable nor selectable. They have a different button
  "execute" besides them.

* What should OneFinger do if the line is:

	mplayer ./*.mpg              --> simple shell expansion

	mplayer `find . -name '*.mpg'`

	for f in ./*.mpg; do mplayer "$f"; done

	./foo bar


* Make programs not in path, but executed almost once, appear in the
  program list, with full path.

* since OneFinger does * expansion before sending the command to bash,
  the command can become too long. Or do we send the unexpanded
  command? I don't remember :-)

* (I don't remember if this is already fixed.) if a user keeps
  launching an mp3 from konqueror, OneFinger doesn't increment its
  usage count. It stays to 1. Fix this.

* OneFinger does not use the LastOpenedWith field of KDE recent files
  database.

* when PyKDE allows it, add the dirs you visit in OneFinger to KDE's
  recent dirs.

* in shell mode, add programs not in path to history

* add dragged files to history (in shell mode).

* splash screen at startup?

* make the "rescan programs" algo incremental, and therefore faster.

* tell the user how many progs were removed and how many new progs
  were installed.

* window-list: add button to close window?

* if a program is a link to another program, and has no icon, inherit
  the icon of the real program.

* in the history panel, when you are showing the full path name, display
  basenames in a different color.

* window-list: implement scrolling during drag.

* on purge, check that all important dirs are also existing


* watch all directories in path to detect installation of
  programs. Tricky.

* window-list: add button to "pin" some windows to be always
  visible. This makes the tray area useless. But is it worth the added
  complexity?

* sort progs by installation date. Difficult.

* in the window-list, separate the output windows from the normal
  windows?

* applet: flash when a new window is created and not yet focused?

* bug: the window list appears below windows that are set always-on-top.

* BUG: discover why some programs like kaffeine, k3b, gimp and aMule
   mandrake) don't start (or exit immediately) if executed in shell
   mode, in a terminal.

* consider whether never-used files should be sorted by date instead
  of by name.

* fix bug where the door icon appears nontransparent at 640x480.

* in shell mode, consider how to better use .desktop files for
  programs: see if you can put a comment like "web browser" besides
  programs, in parentheses.

* Bug: the window-list position is not remembered correctly - it is
  placed a bit lower and a bit to the right. This is related to the
  border of the window.

* Add tooltips to the buttons inside the lists.

* BUG: The execution won't work if the file name contains strange
  letters.

* Bug: If you try to enter a protected directory such as /root, you
  should have an error message. Instead you get an output message:
  File "/usr/bin/one-finger", line 477, in redraw_files
  files_without_path = [x for x in os.listdir(cur_dir)] OSError:
  [Errno 13] Permission denied: '/root'

* after you drag files, update the file stats.

* write uninstall script

* At the beginning, as the recently used verbs, give a merge of default
  verbs and the parse of bash_history.

* when purging the database, allow to optionally remove nonfile
  arguments. Which ones? The ones that were used only once and those
  that weren't used recently?

* BUG: if you rename the current dir, OneFinger misbehaves. The right
  way to fix this bug is to lock the cur_dir while you are redrawing
  the file panel.


* BUG: OneFinger sometimes crashes when closing KDE.

* "mv X X", shown in the title bar of konsole, should be "mv ...debian
  ...ry-long-name"


* Add two buttons to delete forward and backward in the command area.


* konsole is slow opening. Solution: Substitute konsole windows with
  your own child windows (use libkonsole -- otherwise you loose search
  functions, readline functions...).

* There is no reliable way to automatically close finished konsole
  sessions. Solution: Reprogram your konsole with libkonsole.

* Abolish executing a command without a terminal. Only after you have
  programmed a faster konsole.


* OneFinger should remember args for programs not in path.

* After you implemented dropping in applet, disable the behavior of
  minimizing OneFinger when you switch task? But 1. this is needed for
  ksnapshot to work; 2. you can't drag text from one app to another.

* When activating a window, mind transient_for flags?

* k3b's modal progress dialog doesn't go on top of the window list,
  even if activated.


* in the taskbar, group never activated windows on top, and add a
  label.

* add the mounted disks to the important locations?

* fallback to gnome-terminal

* At regular intervals, parse ~/.bash_history.

* When the user presses tab, autocomplete over the recent
  arguments. Another tab cycles the completions.

* Some users don't like to have to open everything in the terminal. Why?
  Should we include a log window? Or some tabs?


* If you type the program by hand, the argument list does not appear. 

* decide what must happen when two programs with same name are installed
  in different paths.

* in shell mode, add toolbar button to insert relative filenames when
  you click. Useful for CVS I think.

* don't reset program scrolling otherwise, when you sort by frequent
  usage, it's difficult to repeat the same program twice.




* allow the user to associate metadata to program arguments, so it
  does not need to remember what they mean! This is important because
  if I click dpkg-deb, OneFinger gives me the list of options, but
  even looking at the options it is difficult to remember what they
  do. A short explanation would make me recall.


* each letter you type, OneFinger makes bash parse the
  string. Sometimes bash fails, obviously, and prints an error on
  stdout. Verify what happens on errors, and remove the message on
  stdout.




* allow files to be shown in a concise way in the command window? How?


2. Tests to do before releasing
--------------------------------


   - What happens when I delete a file that was selected?

   - test with crystal icons

   - Delete the current dir

   - test FAM


3. DISCARDED IDEAS
------------------

Make the buttons flash more apparently with plastik. (it was a bug in
debian's kdeartwork, it's ok with suse)

make the wrappingbuttons appear pressed for a while? No it would make
the UI less responsive.

change ListBox to draw adjacent items with two different background
colors. useless: I separated the items with a nonconstant factor.

Add narrowing program-> file. It would be nice, when a program p is
clicked, to narrow all the files that wouldn't work with it. Doing so
automatically would require OneFinger to be omniscent, and we cannot
support it. A good compromise is to add a button besides programs to
narrow the files.

* in mime mode, why show nonexistent files in hist panel? AS A LOG.


* THis was not a bug: drag a dir to ark, to extract there. THen enter
  the new dir and read a text file with emacs. OneFinger passes to
  emacs both the file and the dir. Somehow, the dragged dir was also
  selected.

  The problem was failing to notice that the dir was still selected
  after the drag. Fixed by deselecting after the drag.


* Bug: in shell mode, press the "only show important dirs in hist
  panel", then click a program's name. The hist panel is changed.

  I don't understand this bug anymore :-)
