zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: kfmclient and MIME type completion
@ 2004-07-26 13:46 Peter Stephenson
  2004-07-26 15:29 ` Oliver Kiddle
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Peter Stephenson @ 2004-07-26 13:46 UTC (permalink / raw)
  To: Zsh hackers list

This patch

- adds completion for MIME types.  The only place I found where this
  slotted into the current system, after a rather cursory inspection,
  was _elinks.
- adds completion for kfmclient.  This is the neat way of passing
  remote commands to konqueror (KDE's file manager and web browser).
  This works for most MIME types because it uses the full KDE bindings.
  Hence pick-web-browser becomes an alternative to the zsh MIME functions,
  although you have to do the aliasing by hand.
- prefers kfmclient to dcop in pick-web-browser
- allows mailcap and mime-types styles to include a `+' to get the
  default path.  This works in zsh-mime-setup and _mime_types.

Index: Completion/Unix/Command/_elinks
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_elinks,v
retrieving revision 1.8
diff -u -r1.8 _elinks
--- Completion/Unix/Command/_elinks	16 Apr 2004 15:50:02 -0000	1.8
+++ Completion/Unix/Command/_elinks	26 Jul 2004 13:34:10 -0000
@@ -11,7 +11,7 @@
   '*-base-session[clone session with given ID]:ID number:' \
   '*-confdir[set config dir to given string]:configuration directory:_files -/' \
   '*-conffile[configuration file name]:configuration file:_files' \
-  '*-default-mime-type[MIME type to assume for documents]:MIME type:' \
+  '*-default-mime-type[MIME type to assume for documents]:MIME type:_mime_types' \
   '*-dump[write formatted version of given URL to stdout]::boolean:(0 1)' \
   '*-dump-charset[codepage to use with -dump]:codepage:' \
   '*-dump-width[width of document formatted with -dump]:width:' \
Index: Completion/Unix/Type/.distfiles
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/.distfiles,v
retrieving revision 1.12
diff -u -r1.12 .distfiles
--- Completion/Unix/Type/.distfiles	16 Feb 2004 10:50:56 -0000	1.12
+++ Completion/Unix/Type/.distfiles	26 Jul 2004 13:34:10 -0000
@@ -10,4 +10,5 @@
 _hosts               _tar_archive         _time_zone
 _file_systems        _net_interfaces      _terminals           _locales
 _java_class          _services		  _email_addresses     _global_tags
+_mime_types
 '
Index: Completion/Unix/Type/_mime_types
===================================================================
RCS file: Completion/Unix/Type/_mime_types
diff -N Completion/Unix/Type/_mime_types
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Completion/Unix/Type/_mime_types	26 Jul 2004 13:34:10 -0000
@@ -0,0 +1,42 @@
+#autoload
+
+local expl maintype
+local -a default_type_files type_files match mbegin mend
+integer ind
+
+default_type_files=(~/.mime.types /etc/mime.types)
+
+# This is the same style as used by zsh-mime-setup, with a different
+# context.
+if zstyle -a ":completion:${curcontext}:mime" mime-types type_files; then
+  while (( (ind = ${type_files[(I)+]}) > 0 )); do
+    type_files[$ind]=($default_type_files)
+  done
+else
+  type_files=($default_type_files)
+fi
+
+#
+# Handle two different mime type formats; the simple
+# format:
+#   application/x-pws-frobnicate psf pwsf
+# and the extended format
+#   type=application/x-pws-frobnicate \
+#   desc="PWS frobnicated widget" \
+#   exts="pwsf,psf"
+# which Netscape seems to like.
+#
+
+if [[ $PREFIX = (#b)([^/]##)/* ]]; then
+  # Search for subtype.
+  maintype=$match[1]
+  compset -p $(( ${#maintype} + 1 ))
+  _wanted mimesubtype expl 'MIME subtype' \
+      compadd -- $(sed -ne "s%^\(type=\|\)${maintype}/\([^ 	]*\).*$%\2%p" \
+      $type_files)
+else
+  # Search for main type.
+  _wanted mimetype expl 'MIME type' \
+    compadd -S/ -- $(sed -ne "s/^type=//" \
+      -e "s%^\(${PREFIX:-[a-z]}[^=\"]*\)/.*$%\1%p" $type_files)
+fi
Index: Completion/X/Command/.distfiles
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/X/Command/.distfiles,v
retrieving revision 1.9
diff -u -r1.9 .distfiles
--- Completion/X/Command/.distfiles	28 May 2003 14:17:13 -0000	1.9
+++ Completion/X/Command/.distfiles	26 Jul 2004 13:34:10 -0000
@@ -3,4 +3,5 @@
 _gv        _netscape  _xauth     _xfig      _mozilla   _xterm     _xwit
 _nedit     _vnc       _x_utils   _xdvi      _xmodmap   _xset      _xv
 _acroread  _dcop      _gqview    _xloadimage _mplayer
+_kfmclient
 '
Index: Completion/X/Command/_kfmclient
===================================================================
RCS file: Completion/X/Command/_kfmclient
diff -N Completion/X/Command/_kfmclient
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Completion/X/Command/_kfmclient	26 Jul 2004 13:34:10 -0000
@@ -0,0 +1,93 @@
+#compdef kfmclient
+
+local expl
+local -a context state line
+typeset -A opt_args
+
+_arguments \
+  '--help[show help message]' \
+  '--help-qt[show Qt specific options]' \
+  '--help-kde[show KDE specific options]' \
+  '--help-all[show all options]' \
+  '--author[show author information]' \
+  '-v[show version information]' \
+  '--version[show version information]' \
+  '--license[show license information]' \
+  '--commands[show available commands]' \
+  '--display=:X display:_x_display' \
+  '--session=:session id for restoring application: ' \
+  '--cmap[use private colormap (8-bit display)]' \
+  '--ncols=:limit on number of colors (8-bit display): ' \
+  '--nograb[never grab mouse or keyboard]' \
+  '--dograb[override nograb in debugger]' \
+  '--sync[switch to synchronous mode when debugging]' \
+  '--fn=:font name:_x_font' \
+  '--font=:font name:_x_font' \
+  '--bg=:background color:_x_color' \
+  '--background=:background color:_x_color' \
+  '--fg=:foreground color:_x_color' \
+  '--foreround=:foreground color:_x_color' \
+  '--btn=:button color:_x_color' \
+  '--button=:button color:_x_color' \
+  '--name=:application name: ' \
+  '--title=:application title (caption): ' \
+  '--visual=:specify visual:_x_visual' \
+  '--inputstyle:X input method:(onthespot overthespot offthespot root)' \
+  '--im:X Input Method server: ' \
+  '--noxim[disable X Input Method]' \
+  '--reverse[reverse widget layout]' \
+  '--caption=:name in titlebar: ' \
+  '--icon=:application icon: ' \
+  '--miniicon=:icon in titlebar: ' \
+  '--config=:configuration  file:_files' \
+  '--dcopserver=:DCOP server: ' \
+  '--nocrashhandler[disable crash handler, allow core dumps]' \
+  '--waitforwm[Wait for a WM_NET compatible window manager]' \
+  '--style=:GUI style for application: ' \
+  '--geometry=:client window geometry:_x_geometry' \
+  '1:client command:(openURL openProfile openProperties exec move
+download copy sortDesktop configure configureDesktop)' \
+  '2::args:->firstarg' \
+  '3::args:->secondarg'  &&  return 0
+
+[[ $state = *arg ]] || return 1
+
+# Argument to previous command.
+
+print $line >/tmp/tmp.out
+
+case $line[1] in
+  (openURL)
+  if [[ $state = secondarg ]]; then
+    _mime_types && return 0
+  elif [[ $state = firstarg ]]; then
+    _urls && return 0
+  fi
+  ;;
+
+  (openProfile)
+  if [[ $state = secondarg ]]; then
+    _urls && return 0
+  elif [[ $state = firstarg ]]; then
+    _wanted profile expl 'Konqueror profile' \
+      compadd -- ~/.kde/share/apps/konqueror/profiles/*(:t) && return 0
+  fi
+  ;;
+
+  (exec)
+  if [[ $state = secondarg ]]; then
+    # TODO: could probe inside Desktop files.
+    _message "KDE binding" && return 0
+  elif [[ $state = firstarg ]]; then
+    _urls && return 0
+  fi
+  ;;
+
+  (move|download|openProperties)
+  if [[ $state = firstarg ]]; then
+      _urls && return 0
+  fi
+  ;;
+esac
+
+_message "no more arguments"
Index: Doc/Zsh/contrib.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/contrib.yo,v
retrieving revision 1.34
diff -u -r1.34 contrib.yo
--- Doc/Zsh/contrib.yo	26 Jul 2004 06:57:46 -0000	1.34
+++ Doc/Zsh/contrib.yo	26 Jul 2004 13:34:12 -0000
@@ -1045,11 +1045,13 @@
 A list of files in the format of tt(~/.mime.types) and
 tt(/etc/mime.types) to be read during setup, replacing the default list
 which consists of those two files.  The context is tt(:mime:).
+A tt(PLUS()) in the list will be replaced by the default files.
 )
 item(mailcap)(
 A list of files in the format of tt(~/.mailcap) and
 tt(/etc/mailcap) to be read during setup, replacing the default list
 which consists of those two files.  The context is tt(:mime:).
+A tt(PLUS()) in the list will be replaced by the default files.
 )
 item(handler)(
 Specifies a handler for a suffix; the suffix is given by the context as
Index: Functions/MIME/pick-web-browser
===================================================================
RCS file: /cvsroot/zsh/zsh/Functions/MIME/pick-web-browser,v
retrieving revision 1.1
diff -u -r1.1 pick-web-browser
--- Functions/MIME/pick-web-browser	14 Sep 2003 19:37:35 -0000	1.1
+++ Functions/MIME/pick-web-browser	26 Jul 2004 13:34:13 -0000
@@ -82,8 +82,13 @@
   for browser in $xbrowsers; do
     if [[ $windows[(I)(#i)$browser] -ne 0 ]]; then
       if [[ $browser = konqueror ]]; then
-	# I'm sure there's documentation for this somewhere...
-	dcop $(dcop|grep konqueror) default openBrowserWindow $url
+	# kfmclient is less hairy and better supported than direct
+	# use of dcop.  Run kfmclient --commands
+	# for more information.  Note that as konqueror is a fully
+	# featured file manager, this will actually do complete
+	# MIME handling, not just web pages.
+	kfmclient openURL $url ||
+	  dcop $(dcop|grep konqueror) default openBrowserWindow $url
       else
 	# Mozilla bells and whistles are described at:
 	# http://www.mozilla.org/unix/remote.html
Index: Functions/MIME/zsh-mime-setup
===================================================================
RCS file: /cvsroot/zsh/zsh/Functions/MIME/zsh-mime-setup,v
retrieving revision 1.2
diff -u -r1.2 zsh-mime-setup
--- Functions/MIME/zsh-mime-setup	22 Jun 2004 14:35:05 -0000	1.2
+++ Functions/MIME/zsh-mime-setup	26 Jul 2004 13:34:13 -0000
@@ -53,14 +53,30 @@
 # to handlers and their flags.
 typeset -A suffix_type_map type_handler_map type_flags_map
 
+local -a default_type_files default_cap_files
 local -a type_files cap_files array match mbegin mend
 local file line type suffix exts elt flags line2
+integer ind
+
+default_type_files=(~/.mime.types /etc/mime.types)
+default_cap_files=(~/.mailcap /etc/mailcap)
 
 # Customizable list of files to examine.
-zstyle -a :mime: mime-types type_files ||
-  type_files=(~/.mime.types /etc/mime.types)
-zstyle -a :mime: mailcap cap_files ||
-  cap_files=(~/.mailcap /etc/mailcap)
+if zstyle -a :mime: mime-types type_files; then
+  while (( (ind = ${type_files[(I)+]}) > 0 )); do
+    type_files[$ind]=($default_type_files)
+  done
+else
+  type_files=($default_type_files)
+fi
+
+if zstyle -a :mime: mailcap cap_files; then
+  while (( (ind = ${cap_files[(I)+]}) > 0 )); do
+    cap_files[$ind]=($default_cap_files)
+  done
+else
+  cap_files=($default_cap_files)
+fi
 
 {
   mime-setup-add-type() {

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR Ltd., Science Park, Milton Road,
Cambridge, CB4 0WH, UK                          Tel: +44 (0)1223 692070


**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.

www.mimesweeper.com
**********************************************************************


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PATCH: kfmclient and MIME type completion
  2004-07-26 13:46 PATCH: kfmclient and MIME type completion Peter Stephenson
@ 2004-07-26 15:29 ` Oliver Kiddle
  2004-07-27  9:14   ` Peter Stephenson
  2004-07-26 16:54 ` Bart Schaefer
  2004-07-27 11:40 ` Oliver Kiddle
  2 siblings, 1 reply; 6+ messages in thread
From: Oliver Kiddle @ 2004-07-26 15:29 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh hackers list

Peter wrote:

> +# This is the same style as used by zsh-mime-setup, with a different
> +# context.
> +if zstyle -a ":completion:${curcontext}:mime" mime-types type_files; then

Why do you use `mime' as the tag? It should either be empty or the same
as the tag used when adding matches (such as mime-types).

> +  _wanted mimetype expl 'MIME type' \

The convention is for tags to be plural. We also seem to use hyphens to
separate words so I'd use mime-types and mime-subtypes for the tags.

> +[[ $state = *arg ]] || return 1
> +
> +# Argument to previous command.
> +
> +print $line >/tmp/tmp.out

That looks like remnant debug which we won't want.


Oliver


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PATCH: kfmclient and MIME type completion
  2004-07-26 13:46 PATCH: kfmclient and MIME type completion Peter Stephenson
  2004-07-26 15:29 ` Oliver Kiddle
@ 2004-07-26 16:54 ` Bart Schaefer
  2004-07-28  9:42   ` Peter Stephenson
  2004-07-27 11:40 ` Oliver Kiddle
  2 siblings, 1 reply; 6+ messages in thread
From: Bart Schaefer @ 2004-07-26 16:54 UTC (permalink / raw)
  To: Zsh hackers list

On Mon, 26 Jul 2004, Peter Stephenson wrote:

> This patch
> 
> - prefers kfmclient to dcop in pick-web-browser

RedHat ships something called "htmlview" which tries to guess what web 
browser to invoke based on what desktop you're running (gnome, kde, etc.)
and what browsers are installed on the system.

It might be useful to have pick-web-browser look for htmlview before going 
on a browser search of its own.  Or perhaps not.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PATCH: kfmclient and MIME type completion
  2004-07-26 15:29 ` Oliver Kiddle
@ 2004-07-27  9:14   ` Peter Stephenson
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Stephenson @ 2004-07-27  9:14 UTC (permalink / raw)
  To: Zsh hackers list

Oliver Kiddle wrote:
> Peter wrote:
> 
> > +# This is the same style as used by zsh-mime-setup, with a different
> > +# context.
> > +if zstyle -a ":completion:${curcontext}:mime" mime-types type_files; then
> 
> Why do you use `mime' as the tag? It should either be empty or the same
> as the tag used when adding matches (such as mime-types).

It depends which part of the completion system you believe.  This was
an echo of the way it's done in zsh-mime-setup.  I do think it's cleaner
without a tag, though.

> > +[[ $state = *arg ]] || return 1
> > +
> > +# Argument to previous command.
> > +
> > +print $line >/tmp/tmp.out
> 
> That looks like remnant debug which we won't want.

I can see how you might think that.

Index: Completion/Unix/Type/_mime_types
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_mime_types,v
retrieving revision 1.1
diff -u -r1.1 _mime_types
--- Completion/Unix/Type/_mime_types	26 Jul 2004 16:59:54 -0000	1.1
+++ Completion/Unix/Type/_mime_types	27 Jul 2004 09:11:18 -0000
@@ -8,7 +8,7 @@
 
 # This is the same style as used by zsh-mime-setup, with a different
 # context.
-if zstyle -a ":completion:${curcontext}:mime" mime-types type_files; then
+if zstyle -a ":completion:${curcontext}:" mime-types type_files; then
   while (( (ind = ${type_files[(I)+]}) > 0 )); do
     type_files[$ind]=($default_type_files)
   done
@@ -31,12 +31,12 @@
   # Search for subtype.
   maintype=$match[1]
   compset -p $(( ${#maintype} + 1 ))
-  _wanted mimesubtype expl 'MIME subtype' \
+  _wanted mime-subtypes expl 'MIME subtype' \
       compadd -- $(sed -ne "s%^\(type=\|\)${maintype}/\([^ 	]*\).*$%\2%p" \
       $type_files)
 else
   # Search for main type.
-  _wanted mimetype expl 'MIME type' \
+  _wanted mime-types expl 'MIME type' \
     compadd -S/ -- $(sed -ne "s/^type=//" \
       -e "s%^\(${PREFIX:-[a-z]}[^=\"]*\)/.*$%\1%p" $type_files)
 fi
Index: Completion/X/Command/_kfmclient
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/X/Command/_kfmclient,v
retrieving revision 1.1
diff -u -r1.1 _kfmclient
--- Completion/X/Command/_kfmclient	26 Jul 2004 16:59:54 -0000	1.1
+++ Completion/X/Command/_kfmclient	27 Jul 2004 09:11:18 -0000
@@ -54,8 +54,6 @@
 
 # Argument to previous command.
 
-print $line >/tmp/tmp.out
-
 case $line[1] in
   (openURL)
   if [[ $state = secondarg ]]; then

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR Ltd., Science Park, Milton Road,
Cambridge, CB4 0WH, UK                          Tel: +44 (0)1223 692070


**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.

www.mimesweeper.com
**********************************************************************


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PATCH: kfmclient and MIME type completion
  2004-07-26 13:46 PATCH: kfmclient and MIME type completion Peter Stephenson
  2004-07-26 15:29 ` Oliver Kiddle
  2004-07-26 16:54 ` Bart Schaefer
@ 2004-07-27 11:40 ` Oliver Kiddle
  2 siblings, 0 replies; 6+ messages in thread
From: Oliver Kiddle @ 2004-07-27 11:40 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh hackers list

[I'm resending this because it didn't come through yesterday. Sorry if
it now comes through twice.]

Peter wrote:

> +# This is the same style as used by zsh-mime-setup, with a different
> +# context.
> +if zstyle -a ":completion:${curcontext}:mime" mime-types type_files; then

Why do you use `mime' as the tag? It should either be empty or the same
as the tag used when adding matches (such as mime-types).

> +  _wanted mimetype expl 'MIME type' \

The convention is for tags to be plural. We also seem to use hyphens to
separate words so I'd use mime-types and mime-subtypes for the tags.

> +[[ $state = *arg ]] || return 1
> +
> +# Argument to previous command.
> +
> +print $line >/tmp/tmp.out

That looks like remnant debug which we won't want.

Oliver


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PATCH: kfmclient and MIME type completion
  2004-07-26 16:54 ` Bart Schaefer
@ 2004-07-28  9:42   ` Peter Stephenson
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Stephenson @ 2004-07-28  9:42 UTC (permalink / raw)
  To: zsh-workers

Bart Schaefer wrote:
> On Mon, 26 Jul 2004, Peter Stephenson wrote:
> 
> > This patch
> > 
> > - prefers kfmclient to dcop in pick-web-browser
> 
> RedHat ships something called "htmlview" which tries to guess what web 
> browser to invoke based on what desktop you're running (gnome, kde, etc.)
> and what browsers are installed on the system.
> 
> It might be useful to have pick-web-browser look for htmlview before going 
> on a browser search of its own.  Or perhaps not.

% grep WARNING =htmlview
# WARNING: Deprecated Script
% man htmlview
No manual entry for htmlview

I think I'll just stick with pick-web-browser.  (It's obviously possible
to work out what htmlview's doing by looking in it, though.)

You can configure pick-web-browser to use htmlview if you want, or
simply use htmlview as the target for HTML files.

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR Ltd., Science Park, Milton Road,
Cambridge, CB4 0WH, UK                          Tel: +44 (0)1223 692070


**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.

www.mimesweeper.com
**********************************************************************


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-07-28  9:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-07-26 13:46 PATCH: kfmclient and MIME type completion Peter Stephenson
2004-07-26 15:29 ` Oliver Kiddle
2004-07-27  9:14   ` Peter Stephenson
2004-07-26 16:54 ` Bart Schaefer
2004-07-28  9:42   ` Peter Stephenson
2004-07-27 11:40 ` Oliver Kiddle

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).