Гарри упомянул удобный маленький phpm около трех лет назад. И Шон Коутс был достаточно любезен, чтобы указать, как его можно заменить на оболочку с одним вкладышем. Разве это не вызывает любовь?
Одна вещь, которую я пропустил с любым из двух, была способность видеть всю ручную запись. Довольно часто руководство содержит полезную информацию (кто бы это знал!), Поэтому я часто использую www.php.net . Или я, пока я не решил что-то сделать с этим. Теперь, написание сценариев оболочки — это не то, на что я потратил большую часть своего времени, так что не без особой гордости я представляю вам phpm два-о-о .
Установка его
Вам, очевидно, нужна среда bash для ее запуска (я думаю, что Cygwin подойдет). Кроме того, вам нужно множество инструментов и утилит Cli. Если вы работаете в системе на основе Debian, вам нужно запустить следующее:
#!/bin/bash
# phpm
# commandline php-manual interface
# Kudos to Havard Eide and Sean Coates for the original idea
#
# author: Troels Knak-Nielsen <[email protected]>
# version: 2007-11-27
#
# dependencies:
# wget sudo apt-get install wget
# sed sudo apt-get install sed
# tidy sudo apt-get install tidy
# xmlstarlet sudo apt-get install xmlstarlet
# konwert sudo apt-get install konwert
# html2text get from http://www.aaronsw.com/2002/html2text/html2text.py
# symlink to ~/bin/html2text
# urlencode get from http://www.shelldorado.de/scripts/cmds/urlencode.txt
# symlink to ~/bin/urlencode
function print_usage {
echo "USAGE: phpm <function>"
echo "To clear cache: phpm --clear"
exit 0
}
# create cachedir on first run
CACHEDIR=~/.phpm
if [ ! -e $CACHEDIR ]
then
mkdir $CACHEDIR
fi
if [ $# -gt 0 ]
then
# parse a few options
if [ $1 = "--clear" ]
then
echo "clearing cache"
rm -r $CACHEDIR
exit 0
fi
if [ $1 = "--help" ]
then
print_usage
fi
if [ $1 = "-?" ]
then
print_usage
fi
URLNAME=$(echo $1 | urlencode)
CACHE_FILENAME=$CACHEDIR/$URLNAME
# check cache
if [ ! -e $CACHE_FILENAME ]
then
# fetch from HTTP
HREF=http://www.php.net/manual-lookup.php?function=$URLNAME
RESPONSE=$(wget --quiet -O - $HREF)
if [ $? != 0 ]
then
echo "HTTP error" 1>&2
exit $?
fi
# process response
# test if function has direct match
if echo $RESPONSE | grep -Eiq '<div([^>]*)class="refentry">'
then
# grap and format output
# the first sed collapses blank lines, the second formats headers
echo $RESPONSE
| tidy -latin1 -asxhtml --input-encoding utf8 --output-xml true --numeric-entities true 2>/dev/null
| xmlstarlet select --net --html -t -c "//*[@class='refentry']" 2>/dev/null
| tidy -latin1 --input-encoding utf8 -asxhtml 2>/dev/null
| konwert utf8-ascii
| html2text 2>&1
| sed -n 'G; s/n/&&/; /^([ -~]*n).*n1/d; s/n//; h; P'
| sed -e '/^# (.*)$/ { s/^# (.*)/1/p ; s/(.{1,1})/=/g }' -e '/^## (.*)$/ { s/^## (.*)/n1/p ; s/(.{1,1})/-/g }' -e '/^### (.*)$/ { s/^### (.*)/n1/p ; s/(.{1,1})/~/g }'
> $CACHE_FILENAME
# test if there are any "best" matches
elif echo $RESPONSE | grep -Eiq '<a href="/manual/en/function[^>]*><b>'
then
echo "Best matches for '$1':" > $CACHE_FILENAME
echo $RESPONSE
| tidy -latin1 -asxhtml --input-encoding utf8 --output-xml true --numeric-entities true --wrap 0 2>/dev/null
| sed -n 's/.*<a href="/manual/en/function[^>]*><b>([^<]{1,})<.*/1/p'
>> $CACHE_FILENAME
# test if there are any "weak" matches
elif echo $RESPONSE | grep -Eiq '<a href="/manual/en/function[^>]*>[^<]+'
then
echo "Possible matches for '$1':" > $CACHE_FILENAME
echo $RESPONSE
| tidy -latin1 -asxhtml --input-encoding utf8 --output-xml true --numeric-entities true --wrap 0 2>/dev/null
| sed -n 's/.*<a href="/manual/en/function[^>]*>[^<]{1,}([^<]{1,})<.*/1/p'
>> $CACHE_FILENAME
fi
fi
if [ -e $CACHE_FILENAME ]
then
cat $CACHE_FILENAME
else
echo "No matches found for '$1'"
exit -1
fi
else
print_usage
fi
Затем получите следующие два сценария:
Сохраните их (без расширения файла) в sudo apt-get install wget sed tidy xmlstarlet konwert
~/bin
chmod +x ~/bin/html2text
(Или вы можете поместить их где-нибудь, например, в chmod +x ~/bin/urlencode
Наконец, сохраните приведенный выше скрипт как ~/scripts
~/bin/phpm
использование
Теперь вы сможете найти функцию в руководстве по PHP так же просто, как:
phpm substr
В качестве бонуса вы получите список предложений по несоответствиям. Например:
$ phpm substring
Best matches for 'substring':
is_string
substr
Очень удобно, когда вы помните только часть названия функции.
Сценарий запрашивает документацию на сайте php, поэтому он всегда актуален. Для повышения производительности результаты кэшируются в ~/.phpm
Вы всегда можете очистить кеш, вызвав phpm:
phpm --clear
Бонус Emacs
В качестве последнего небольшого бонуса для пользователей Emacs, вот фрагмент для привязки F4 к phpm для текущего слова:
(defun php-manual-lookup ()
"Shows short documentation for the word at the point."
(interactive)
(let ((word (current-word t))
(buffername "*phpm*"))
(when (get-buffer buffername)
(kill-buffer buffername))
(save-excursion
(pop-to-buffer buffername)
(shell-command (format "phpm %s"
(shell-quote-argument word)) buffername)
(other-window 1))))
(global-set-key '[f4] 'php-manual-lookup)