Status: Add ability to filter files

In a big project with a lot of change spread across directory, it is
hard to search a specific for a file change.

This change will add ability to filter the files status similar to how
git status filtering.

Reported-by: hrj
Signed-off-by: Minarto Margoliono <lie.r.min.g@gmail.com>
Status: Filter multiple path criteria inputs

The files filtering in status widget was only accepting single path
criteria. This is a bit inconvenience when you want to filter on
multiple path filter criteria.

This change will add ability to filter the files based on multiple
criteria separated by a space.

Reported-by: hrj
Signed-off-by: Minarto Margoliono <lie.r.min.g@gmail.com>
Status: Add autocompletion for the filter

To use the filter in status widget, a user need to know the exact path
they want to filter. This is a bit user unfriendly as the user might not
always remember the exact path they want to filter on.

This change will add autocomplete pop-up for filter in status widget. It
will autocomplete to both folders path and files path.

Reported-by: hrj
Signed-off-by: Minarto Margoliono <lie.r.min.g@gmail.com>
status: make sure we always pass None as the status filter

Make filter_paths default to None so that we can check explicitly check
for None.

Adjust the callsites so that  `*filter_paths` is always passed after the
keyword arguments, which is required by Python.

Signed-off-by: David Aguilar <davvid@gmail.com>
status: add a specialized completion model for status filtering

Rework the completion widgets to provide a completer for the status
filter.

Signed-off-by: David Aguilar <davvid@gmail.com>
utils: simplify add_parents() by operating on a copy

The add_parents() callers were all creating a copy of their input before
passing it off to add_parents().

Simplify things by creating the copy inside of add_parents() so that it
does not modify its input.

Signed-off-by: David Aguilar <davvid@gmail.com>
completion: use value() where appropriate

Signed-off-by: David Aguilar <davvid@gmail.com>
completion: better double-dash handling for DAG-like inputs

Eliminate refs from the match when we're using double-dash -- to
separate refs and paths.

Signed-off-by: David Aguilar <davvid@gmail.com>
status: update filter when return is pressed

Signed-off-by: David Aguilar <davvid@gmail.com>
widgets: use consistent margins across all widgets

Signed-off-by: David Aguilar <davvid@gmail.com>
completion: use hinted line edits as the base class

Signed-off-by: David Aguilar <davvid@gmail.com>
status: add hint text to the filter widget

Signed-off-by: David Aguilar <davvid@gmail.com>
fixup! completion: use hinted line edits as the base class

Signed-off-by: David Aguilar <davvid@gmail.com>
status: remove the "Filter" button

Signed-off-by: David Aguilar <davvid@gmail.com>
status: add a filter toggle button

Hide the filter widget by default and add a toggle button to display it.

Related-to: #337

Signed-off-by: David Aguilar <davvid@gmail.com>
Merge branch 'status-filtering'

Teach the status widget to filter paths.

* status-filtering:
  status: add a filter toggle button
  status: remove the "Filter" button
  fixup! completion: use hinted line edits as the base class
  status: add hint text to the filter widget
  completion: use hinted line edits as the base class
  widgets: use consistent margins across all widgets
  status: update filter when return is pressed
  completion: better double-dash handling for DAG-like inputs
  completion: use value() where appropriate
  utils: simplify add_parents() by operating on a copy
  status: add a specialized completion model for status filtering
  status: make sure we always pass None as the status filter
  Status: Add autocompletion for the filter
  Status: Filter multiple path criteria inputs
  Status: Add ability to filter files

Closes #337
Closes #339

Suggested-by: @hrf
Thanks-to: Minarto Margoliono <lie.r.min.g@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>