[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

file:/// -> find-file and dired



大和です.

file:///で指定されたファイルでも,そのファイル名が
w3m-content-type-alistにヒットしない場合には表示することが
できませんが,find-fileかdiredを実行するというのは難しいで
しょうか.

私は任意のコマンドのhtml出力をemacsの機能を結び付けることが
できることがemacs-w3mのすばらしさの一つだと考えています.
それを示す例として,ローカルのファイルシステムのツリー構造を
html出力するプログラムを書き,さらにそのプログラムの出力を
ファイルに落してM-x w3mするプログラムを書いてみました.
そのスクリーンショットです.
http://www.gyve.org/~jet/dtree.png


(defun dtree (allfiles path)
  (interactive "P\nDDirectory: ")
  (let ((flag (if allfiles "-f" "-d")))
    (shell-command (format "htree %s %s" 
			   flag
			   path)
			   (get-buffer-create "*DTREE*"))
    (set-buffer (get-buffer "*DTREE*"))
    (w3m-region (point-min) (point-max))
    (toggle-read-only t)
    ))

#!/bin/sh
# PATHの通っているところにhtreeの名前で置いてchmod +xして下さい.
# Name: htree
# Programmer:
#            Hemant T. Shah
#            Life Insurance Data Processing
#            July 12 1994
#           
#            Masatake YAMATO
#            HTML produce code       
#
# Description:
#  Print directory tree structure as follows:
#   |___Mail
#     |___scheduler
#     |___cics_scripts
#     |___tar_msdos
#     |___awk
#     |___attributes
#   |___tmp
#   |___News
#     |___dosscsi
#     |___FAQ_xterminal
#     |___shell_history.Z
#     |___FAQ_AIX
#     |___aix_ftp_site
#     |___hp_software
#   |___dnload
#     |___telnet.h
#     |___msdos
#     |___tnetd.tar.Z
#     |___aix
#     |___hp
#   |___xkey.c
#
# Conversion to bash v2 syntax done by Chet Ramey
#	- removed command substitutions calling `basename'
#

ProgramName=${0##*/}
Path="."
ShowAll=1
ShowDir=0


ExpandDirectory()
{
local object   # Local variable

cd "$1"

for object in $PWD/.??* $PWD/*
do
   if [ -d $object ];  # It is a directory
   then
      echo "${indent}+---<A HREF="\"file://${object}\"">${object##*/}/</A>"
#      indent="${indent}!   "   # Add to indentation
      indent="${indent}    "   # Add to indentation
      if [ -x $object ];
      then
         ExpandDirectory $object
      fi
      indent=${indent%????}    # Remove from indentation
   elif [ -e $object ]; then
      if (( ShowAll == 1 ));
      then
         echo "${indent}+---<A HREF="\"file://${object}\"">${object##*/}</A>"
      fi
   fi
done

}

usage()
{
	echo -e "Usage: $ProgramName [-h] [-f] [-d] [path] "
	echo -e "\t-h       ... display this help message."
	echo -e "\t-f path  ... shows all files and directories below path (default)."
	echo -e "\t-d path  ... shows all directories only below path."
}

while getopts "fd" opt
do
	case $opt in
	f) ShowAll=1 ;;
	d) ShowDir=1 
	   ShowAll=0 ;;
	*) usage ; exit 2;;
	esac
done

shift $(( $OPTIND - 1 ))

Path=${1:-.}

if [ ! -d "$Path" ]; then
	echo "$0: error: specified path is not a directory." >&2
	exit 1
fi



# echo "!$Path/"
echo "<pre>"
echo "<A HREF=\"file://$PWD\">$Path</A>"
ExpandDirectory $Path
echo "</pre>"