mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 04:43:10 +00:00
Add i18n through gettext, as well as a Swedish translation
darcs-hash:20060104125102-ac50b-5bf026578a69bd94f7a7a3c8dee0ebccd95e5c24.gz
This commit is contained in:
parent
26de6ba26b
commit
ec43c635cc
30 changed files with 1999 additions and 546 deletions
165
Makefile.in
165
Makefile.in
|
@ -38,6 +38,7 @@ INSTALL:=@INSTALL@
|
||||||
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
|
datadir = @datadir@
|
||||||
bindir = @bindir@
|
bindir = @bindir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
|
@ -46,13 +47,15 @@ fishfile = @fishfile@
|
||||||
fishinputfile = @fishinputfile@
|
fishinputfile = @fishinputfile@
|
||||||
docdir = @docdir@
|
docdir = @docdir@
|
||||||
|
|
||||||
|
HAVE_GETTEXT=@HAVE_GETTEXT@
|
||||||
|
|
||||||
# All objects used by fish, that are compiled from an ordinary .c file
|
# All objects used by fish, that are compiled from an ordinary .c file
|
||||||
# using an ordinary .h file.
|
# using an ordinary .h file.
|
||||||
COMMON_OBJS := function.o builtin.o common.o complete.o env.o exec.o \
|
COMMON_OBJS := function.o builtin.o common.o complete.o env.o exec.o \
|
||||||
expand.o highlight.o history.o kill.o parser.o proc.o reader.o \
|
expand.o highlight.o history.o kill.o parser.o proc.o reader.o \
|
||||||
sanity.o tokenizer.o util.o wildcard.o wgetopt.o wutil.o input.o \
|
sanity.o tokenizer.o util.o wildcard.o wgetopt.o wutil.o input.o \
|
||||||
output.o intern.o env_universal.o env_universal_common.o \
|
output.o intern.o env_universal.o env_universal_common.o \
|
||||||
input_common.o event.o signal.o io.o
|
input_common.o event.o signal.o io.o translate.o
|
||||||
|
|
||||||
# builtin_help.h exists, but builtin_help.c is autogenerated
|
# builtin_help.h exists, but builtin_help.c is autogenerated
|
||||||
COMMON_OBJS_WITH_HEADER := builtin_help.o
|
COMMON_OBJS_WITH_HEADER := builtin_help.o
|
||||||
|
@ -154,8 +157,12 @@ MANUALS:=doc_src/fish.1 @XSEL_MAN_PATH@ \
|
||||||
doc_src/builtin_doc/man/man1/tokenize.1 \
|
doc_src/builtin_doc/man/man1/tokenize.1 \
|
||||||
doc_src/builtin_doc/man/man1/count.1
|
doc_src/builtin_doc/man/man1/count.1
|
||||||
|
|
||||||
|
#All translation message catalogs
|
||||||
|
TRANSLATIONS_SRC := $(wildcard po/*.po)
|
||||||
|
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)
|
||||||
|
|
||||||
#Make everything needed for installing fish
|
#Make everything needed for installing fish
|
||||||
all: $(PROGRAMS) user_doc
|
all: $(PROGRAMS) user_doc
|
||||||
|
|
||||||
# User documentation, describing the features of the fish shell.
|
# User documentation, describing the features of the fish shell.
|
||||||
user_doc: doc.h Doxyfile.user user_doc.head.html
|
user_doc: doc.h Doxyfile.user user_doc.head.html
|
||||||
|
@ -205,6 +212,28 @@ doc.h:$(BUILTIN_DOC_SRC) $(CMD_DOC_SRC) doc_src/doc.hdr
|
||||||
cat $*.txt >>$@;
|
cat $*.txt >>$@;
|
||||||
echo "*/" >>$@
|
echo "*/" >>$@
|
||||||
|
|
||||||
|
# Compile translation file
|
||||||
|
%.gmo:%.po
|
||||||
|
if test $(HAVE_GETTEXT) = 1; then \
|
||||||
|
msgfmt $*.po -o $*.gmo; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update existing po file or copy messages.pot
|
||||||
|
%.po: messages.pot
|
||||||
|
if test $(HAVE_GETTEXT) = 1;then \
|
||||||
|
if test -f $*.po; then \
|
||||||
|
msgmerge -U --backup=existing --no-wrap $*.po messages.pot;\
|
||||||
|
else \
|
||||||
|
cp messages.pot $*.po;\
|
||||||
|
fi; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a template translation object
|
||||||
|
messages.pot: *.c *.h
|
||||||
|
if test $(HAVE_GETTEXT) = 1;then \
|
||||||
|
xgettext -k_ -kN_ --no-wrap *.c *.h -o messages.pot; \
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate the internal help functions by making doxygen create
|
# Generate the internal help functions by making doxygen create
|
||||||
# man-pages which are then converted into C code. The convertion path
|
# man-pages which are then converted into C code. The convertion path
|
||||||
# looks like this:
|
# looks like this:
|
||||||
|
@ -266,7 +295,7 @@ builtin_help.c: $(BUILTIN_DOC_HDR) doc_src/count.doxygen gen_hdr2 gen_hdr.sh bui
|
||||||
echo "}" >>$@
|
echo "}" >>$@
|
||||||
#man -- doc_src/builtin_doc/man/man1/`basename $@ .c`.1 | cat -s | ./gen_hdr2 >>$@
|
#man -- doc_src/builtin_doc/man/man1/`basename $@ .c`.1 | cat -s | ./gen_hdr2 >>$@
|
||||||
|
|
||||||
install: all
|
install: all install-translations
|
||||||
$(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
|
$(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
|
||||||
for i in $(PROGRAMS); do\
|
for i in $(PROGRAMS); do\
|
||||||
$(INSTALL) -m 755 $$i $(DESTDIR)$(bindir) ; \
|
$(INSTALL) -m 755 $$i $(DESTDIR)$(bindir) ; \
|
||||||
|
@ -294,7 +323,7 @@ install: all
|
||||||
@echo If you want to use fish as the default shell, remember to first
|
@echo If you want to use fish as the default shell, remember to first
|
||||||
@echo add the line \'$(DESTDIR)$(bindir)/fish\' to the file \'/etc/shells\'.
|
@echo add the line \'$(DESTDIR)$(bindir)/fish\' to the file \'/etc/shells\'.
|
||||||
|
|
||||||
uninstall:
|
uninstall: uninstall-translations
|
||||||
for i in $(PROGRAMS); do \
|
for i in $(PROGRAMS); do \
|
||||||
rm -f $(DESTDIR)$(bindir)/$$i; \
|
rm -f $(DESTDIR)$(bindir)/$$i; \
|
||||||
done;
|
done;
|
||||||
|
@ -307,6 +336,21 @@ uninstall:
|
||||||
rm $(DESTDIR)$(mandir)/man1/$$i; \
|
rm $(DESTDIR)$(mandir)/man1/$$i; \
|
||||||
done;
|
done;
|
||||||
|
|
||||||
|
install-translations: all
|
||||||
|
if test $(HAVE_GETTEXT) = 1; then \
|
||||||
|
for i in $(TRANSLATIONS); do \
|
||||||
|
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/locale/$$(basename $$i .gmo)/LC_MESSAGES; \
|
||||||
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/locale/$$(basename $$i .gmo)/LC_MESSAGES/fish.mo; \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
uninstall-translations: all
|
||||||
|
if test $(HAVE_GETTEXT) = 1; then \
|
||||||
|
for i in $(TRANSLATIONS_SRC); do \
|
||||||
|
rm -f $(DESTDIR)$(datadir)/locale/$$(basename $$i .po)/LC_MESSAGES/fish.mo; \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
|
||||||
# The fish shell
|
# The fish shell
|
||||||
fish: $(FISH_OBJS)
|
fish: $(FISH_OBJS)
|
||||||
$(CC) $(FISH_OBJS) $(LDFLAGS) -o $@
|
$(CC) $(FISH_OBJS) $(LDFLAGS) -o $@
|
||||||
|
@ -346,18 +390,20 @@ depend:
|
||||||
#
|
#
|
||||||
# Uses install instead of mkdir so build won't fail if the directory
|
# Uses install instead of mkdir so build won't fail if the directory
|
||||||
# exists
|
# exists
|
||||||
fish-@PACKAGE_VERSION@.tar: $(DOC_SRC_DIR_FILES) $(MAIN_DIR_FILES) $(INIT_DIR_FILES) $(TEST_DIR_FILES) $(COMPLETIONS_DIR_FILES) ChangeLog
|
fish-@PACKAGE_VERSION@.tar: $(DOC_SRC_DIR_FILES) $(MAIN_DIR_FILES) $(INIT_DIR_FILES) $(TEST_DIR_FILES) $(COMPLETIONS_DIR_FILES) ChangeLog $(TRANSLATIONS_SRC)
|
||||||
rm -rf fish-@PACKAGE_VERSION@
|
rm -rf fish-@PACKAGE_VERSION@
|
||||||
$(INSTALL) -d fish-@PACKAGE_VERSION@
|
$(INSTALL) -d fish-@PACKAGE_VERSION@
|
||||||
$(INSTALL) -d fish-@PACKAGE_VERSION@/doc_src
|
$(INSTALL) -d fish-@PACKAGE_VERSION@/doc_src
|
||||||
$(INSTALL) -d fish-@PACKAGE_VERSION@/init
|
$(INSTALL) -d fish-@PACKAGE_VERSION@/init
|
||||||
$(INSTALL) -d fish-@PACKAGE_VERSION@/init/completions
|
$(INSTALL) -d fish-@PACKAGE_VERSION@/init/completions
|
||||||
$(INSTALL) -d fish-@PACKAGE_VERSION@/tests
|
$(INSTALL) -d fish-@PACKAGE_VERSION@/tests
|
||||||
|
$(INSTALL) -d fish-@PACKAGE_VERSION@/translations
|
||||||
cp -f $(DOC_SRC_DIR_FILES) fish-@PACKAGE_VERSION@/doc_src
|
cp -f $(DOC_SRC_DIR_FILES) fish-@PACKAGE_VERSION@/doc_src
|
||||||
cp -f $(MAIN_DIR_FILES) fish-@PACKAGE_VERSION@/
|
cp -f $(MAIN_DIR_FILES) fish-@PACKAGE_VERSION@/
|
||||||
cp -f $(INIT_DIR_FILES) fish-@PACKAGE_VERSION@/init/
|
cp -f $(INIT_DIR_FILES) fish-@PACKAGE_VERSION@/init/
|
||||||
cp -f $(COMPLETIONS_DIR_FILES) fish-@PACKAGE_VERSION@/init/completions/
|
cp -f $(COMPLETIONS_DIR_FILES) fish-@PACKAGE_VERSION@/init/completions/
|
||||||
cp -f $(TESTS_DIR_FILES) fish-@PACKAGE_VERSION@/tests/
|
cp -f $(TESTS_DIR_FILES) fish-@PACKAGE_VERSION@/tests/
|
||||||
|
cp -f $(TRANSLATIONS_SRC) fish-@PACKAGE_VERSION@/translations/
|
||||||
tar -c fish-@PACKAGE_VERSION@ >fish-@PACKAGE_VERSION@.tar
|
tar -c fish-@PACKAGE_VERSION@ >fish-@PACKAGE_VERSION@.tar
|
||||||
rm -rf fish-@PACKAGE_VERSION@
|
rm -rf fish-@PACKAGE_VERSION@
|
||||||
|
|
||||||
|
@ -394,66 +440,85 @@ clean:
|
||||||
rm -rf doc_src/builtin_doc
|
rm -rf doc_src/builtin_doc
|
||||||
rm -rf fish-@PACKAGE_VERSION@
|
rm -rf fish-@PACKAGE_VERSION@
|
||||||
rm -rf xsel-0.9.6/
|
rm -rf xsel-0.9.6/
|
||||||
|
rm $(TRANSLATIONS)
|
||||||
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
builtin.o: config.h util.h wutil.h builtin.h function.h complete.h proc.h
|
builtin.o: config.h util.h wutil.h builtin.h function.h complete.h proc.h
|
||||||
builtin.o: parser.h reader.h env.h expand.h common.h wgetopt.h sanity.h
|
builtin.o: io.h parser.h reader.h env.h expand.h common.h wgetopt.h sanity.h
|
||||||
builtin.o: tokenizer.h builtin_help.h wildcard.h input_common.h input.h
|
builtin.o: tokenizer.h builtin_help.h wildcard.h input_common.h input.h
|
||||||
builtin.o: intern.h
|
builtin.o: intern.h event.h signal.h
|
||||||
builtin_commandline.o: config.h util.h builtin.h common.h wgetopt.h reader.h
|
builtin_commandline.o: signal.h config.h util.h builtin.h common.h wgetopt.h
|
||||||
builtin_commandline.o: proc.h parser.h tokenizer.h input_common.h input.h
|
builtin_commandline.o: reader.h proc.h io.h parser.h tokenizer.h
|
||||||
|
builtin_commandline.o: input_common.h input.h
|
||||||
builtin_help.o: config.h util.h common.h builtin_help.h
|
builtin_help.o: config.h util.h common.h builtin_help.h
|
||||||
builtin_set.o: config.h util.h builtin.h env.h expand.h common.h wgetopt.h
|
builtin_set.o: signal.h config.h util.h builtin.h env.h expand.h common.h
|
||||||
builtin_set.o: proc.h parser.h
|
builtin_set.o: wgetopt.h proc.h io.h parser.h
|
||||||
common.o: config.h util.h wutil.h common.h expand.h proc.h wildcard.h
|
builtin_ulimit.o: config.h util.h builtin.h common.h wgetopt.h
|
||||||
common.o: parser.h
|
common.o: config.h signal.h util.h wutil.h common.h expand.h proc.h io.h
|
||||||
complete.o: config.h util.h tokenizer.h wildcard.h proc.h parser.h function.h
|
common.o: wildcard.h parser.h
|
||||||
complete.o: complete.h builtin.h env.h exec.h expand.h common.h reader.h
|
complete.o: signal.h config.h util.h tokenizer.h wildcard.h proc.h io.h
|
||||||
complete.o: history.h intern.h wutil.h
|
complete.o: parser.h function.h complete.h builtin.h env.h exec.h expand.h
|
||||||
env.o: config.h util.h wutil.h proc.h common.h env.h sanity.h expand.h
|
complete.o: common.h reader.h history.h intern.h wutil.h
|
||||||
env.o: history.h reader.h parser.h env_universal.h env_universal_common.h
|
env.o: config.h signal.h util.h wutil.h proc.h io.h common.h env.h sanity.h
|
||||||
env_universal.o: util.h common.h wutil.h env_universal_common.h
|
env.o: expand.h history.h reader.h parser.h env_universal.h
|
||||||
env_universal.o: env_universal.h
|
env.o: env_universal_common.h input_common.h event.h
|
||||||
env_universal_common.o: util.h common.h wutil.h env_universal_common.h
|
env_universal.o: config.h signal.h util.h common.h wutil.h
|
||||||
exec.o: config.h util.h common.h wutil.h proc.h exec.h parser.h builtin.h
|
env_universal.o: env_universal_common.h env_universal.h
|
||||||
exec.o: function.h env.h wildcard.h sanity.h expand.h env_universal.h
|
env_universal_common.o: signal.h util.h common.h wutil.h
|
||||||
exec.o: env_universal_common.h
|
env_universal_common.o: env_universal_common.h
|
||||||
expand.o: config.h util.h common.h wutil.h env.h proc.h parser.h expand.h
|
event.o: signal.h config.h util.h function.h proc.h io.h parser.h common.h
|
||||||
expand.o: wildcard.h exec.h tokenizer.h complete.h
|
event.o: event.h
|
||||||
fishd.o: util.h common.h wutil.h env_universal_common.h
|
exec.o: signal.h config.h util.h common.h wutil.h proc.h io.h exec.h parser.h
|
||||||
fish_pager.o: config.h util.h wutil.h common.h complete.h output.h
|
exec.o: builtin.h function.h env.h wildcard.h sanity.h expand.h
|
||||||
|
exec.o: env_universal.h env_universal_common.h
|
||||||
|
expand.o: signal.h config.h util.h common.h wutil.h env.h proc.h io.h
|
||||||
|
expand.o: parser.h expand.h wildcard.h exec.h tokenizer.h complete.h
|
||||||
|
fishd.o: signal.h util.h common.h wutil.h env_universal_common.h
|
||||||
|
fish_pager.o: config.h signal.h util.h wutil.h common.h complete.h output.h
|
||||||
fish_pager.o: input_common.h env_universal.h env_universal_common.h
|
fish_pager.o: input_common.h env_universal.h env_universal_common.h
|
||||||
fish_tests.o: config.h util.h common.h proc.h reader.h builtin.h function.h
|
fish_tests.o: config.h signal.h util.h common.h proc.h io.h reader.h
|
||||||
fish_tests.o: complete.h wutil.h env.h expand.h parser.h tokenizer.h
|
fish_tests.o: builtin.h function.h complete.h wutil.h env.h expand.h parser.h
|
||||||
function.o: config.h util.h function.h proc.h parser.h common.h intern.h
|
fish_tests.o: tokenizer.h output.h exec.h event.h
|
||||||
highlight.o: config.h util.h wutil.h highlight.h tokenizer.h proc.h parser.h
|
function.o: signal.h config.h util.h function.h proc.h io.h parser.h common.h
|
||||||
highlight.o: builtin.h function.h env.h expand.h sanity.h common.h complete.h
|
function.o: intern.h event.h
|
||||||
highlight.o: output.h
|
highlight.o: signal.h config.h util.h wutil.h highlight.h tokenizer.h proc.h
|
||||||
|
highlight.o: io.h parser.h builtin.h function.h env.h expand.h sanity.h
|
||||||
|
highlight.o: common.h complete.h output.h
|
||||||
history.o: config.h util.h wutil.h history.h common.h reader.h env.h sanity.h
|
history.o: config.h util.h wutil.h history.h common.h reader.h env.h sanity.h
|
||||||
input.o: config.h util.h wutil.h reader.h proc.h common.h sanity.h
|
input.o: config.h signal.h util.h wutil.h reader.h proc.h io.h common.h
|
||||||
input.o: input_common.h input.h parser.h env.h expand.h
|
input.o: sanity.h input_common.h input.h parser.h env.h expand.h event.h
|
||||||
input_common.o: config.h util.h common.h wutil.h input_common.h
|
input_common.o: config.h util.h common.h wutil.h input_common.h
|
||||||
input_common.o: env_universal.h env_universal_common.h
|
input_common.o: env_universal.h env_universal_common.h
|
||||||
intern.o: config.h util.h common.h intern.h
|
intern.o: config.h util.h common.h intern.h
|
||||||
kill.o: config.h util.h wutil.h kill.h proc.h sanity.h common.h env.h
|
io.o: config.h util.h wutil.h exec.h proc.h io.h common.h
|
||||||
kill.o: expand.h exec.h parser.h
|
key_reader.o: input_common.h
|
||||||
main.o: config.h util.h common.h reader.h builtin.h function.h complete.h
|
kill.o: signal.h config.h util.h wutil.h kill.h proc.h io.h sanity.h common.h
|
||||||
main.o: wutil.h env.h sanity.h proc.h parser.h expand.h intern.h
|
kill.o: env.h expand.h exec.h parser.h
|
||||||
|
main.o: config.h signal.h util.h common.h reader.h builtin.h function.h
|
||||||
|
main.o: complete.h wutil.h env.h sanity.h proc.h io.h parser.h expand.h
|
||||||
|
main.o: intern.h exec.h event.h output.h translate.h
|
||||||
mimedb.o: config.h xdgmime.h util.h
|
mimedb.o: config.h xdgmime.h util.h
|
||||||
output.o: config.h util.h wutil.h expand.h common.h output.h highlight.h
|
output.o: config.h signal.h util.h wutil.h expand.h common.h output.h
|
||||||
parser.o: config.h util.h common.h wutil.h proc.h parser.h tokenizer.h exec.h
|
output.o: highlight.h
|
||||||
parser.o: wildcard.h function.h builtin.h builtin_help.h env.h expand.h
|
parser.o: signal.h config.h util.h common.h wutil.h proc.h io.h parser.h
|
||||||
parser.o: reader.h sanity.h env_universal.h env_universal_common.h
|
parser.o: tokenizer.h exec.h wildcard.h function.h builtin.h builtin_help.h
|
||||||
proc.o: config.h util.h wutil.h proc.h common.h reader.h sanity.h env.h
|
parser.o: env.h expand.h reader.h sanity.h env_universal.h
|
||||||
reader.o: config.h util.h wutil.h highlight.h reader.h proc.h parser.h
|
parser.o: env_universal_common.h event.h translate.h msgnrs.h
|
||||||
reader.o: complete.h history.h common.h sanity.h env.h exec.h expand.h
|
proc.o: config.h signal.h util.h wutil.h proc.h io.h common.h reader.h
|
||||||
reader.o: tokenizer.h kill.h input_common.h input.h function.h output.h
|
proc.o: sanity.h env.h parser.h event.h
|
||||||
sanity.o: config.h util.h common.h sanity.h proc.h history.h reader.h kill.h
|
reader.o: config.h signal.h util.h wutil.h highlight.h reader.h proc.h io.h
|
||||||
sanity.o: wutil.h
|
reader.o: parser.h complete.h history.h common.h sanity.h env.h exec.h
|
||||||
|
reader.o: expand.h tokenizer.h kill.h input_common.h input.h function.h
|
||||||
|
reader.o: output.h
|
||||||
|
sanity.o: signal.h config.h util.h common.h sanity.h proc.h io.h history.h
|
||||||
|
sanity.o: reader.h kill.h wutil.h
|
||||||
set_color.o: config.h
|
set_color.o: config.h
|
||||||
|
signal.o: config.h signal.h common.h util.h wutil.h event.h reader.h proc.h
|
||||||
|
signal.o: io.h
|
||||||
tokenize.o: config.h
|
tokenize.o: config.h
|
||||||
tokenizer.o: config.h util.h wutil.h tokenizer.h common.h wildcard.h
|
tokenizer.o: config.h util.h wutil.h tokenizer.h common.h wildcard.h
|
||||||
|
translate.o: msgnrs.h common.h util.h
|
||||||
util.o: config.h util.h common.h wutil.h
|
util.o: config.h util.h common.h wutil.h
|
||||||
wgetopt.o: config.h wgetopt.h wutil.h
|
wgetopt.o: config.h wgetopt.h wutil.h
|
||||||
wildcard.o: config.h util.h wutil.h complete.h common.h wildcard.h reader.h
|
wildcard.o: config.h util.h wutil.h complete.h common.h wildcard.h reader.h
|
||||||
|
|
398
builtin.c
398
builtin.c
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
2). Add a line like hash_put( &builtin, L"NAME", &builtin_NAME ); to builtin_init. This will enable the parser to find the builtin function.
|
2). Add a line like hash_put( &builtin, L"NAME", &builtin_NAME ); to builtin_init. This will enable the parser to find the builtin function.
|
||||||
|
|
||||||
3). Add a line like hash_put( desc, L"NAME", L"Bla bla bla" ); to the proper part of builtin_get_desc, containing a short description of what the builtin does. This description is used by the completion system.
|
3). Add a line like hash_put( desc, L"NAME", _(L"Bla bla bla") ); to the proper part of builtin_get_desc, containing a short description of what the builtin does. This description is used by the completion system.
|
||||||
|
|
||||||
4). Create a file doc_src/NAME.txt, containing the manual for the builtin in Doxygen-format. Check the other builtin manuals for proper syntax.
|
4). Create a file doc_src/NAME.txt, containing the manual for the builtin in Doxygen-format. Check the other builtin manuals for proper syntax.
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@
|
||||||
#include "intern.h"
|
#include "intern.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "signal.h"
|
#include "signal.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The default prompt for the read command
|
The default prompt for the read command
|
||||||
|
@ -76,7 +77,7 @@
|
||||||
/**
|
/**
|
||||||
The send stuff to foreground message
|
The send stuff to foreground message
|
||||||
*/
|
*/
|
||||||
#define FG_MSG L"Send job %d, '%ls' to foreground\n"
|
#define FG_MSG _( L"Send job %d, '%ls' to foreground\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Print modes for the jobs builtin
|
Print modes for the jobs builtin
|
||||||
|
@ -234,9 +235,8 @@ static int builtin_bind( wchar_t **argv )
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls%ls %ls\n",
|
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_UNKNOWN,
|
BUILTIN_ERR_UNKNOWN,
|
||||||
|
argv[0],
|
||||||
long_options[opt_index].name );
|
long_options[opt_index].name );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
|
@ -331,13 +331,10 @@ static int builtin_block( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -370,13 +367,13 @@ static int builtin_block( wchar_t **argv )
|
||||||
{
|
{
|
||||||
if( scope != UNSET )
|
if( scope != UNSET )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err, L"%ls: Can not specify scope when removing block\n", argv[0] );
|
sb_printf( sb_err, _( L"%ls: Can not specify scope when removing block\n" ), argv[0] );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !global_event_block )
|
if( !global_event_block )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err, L"%ls: No blocks defined\n", argv[0] );
|
sb_printf( sb_err, _( L"%ls: No blocks defined\n" ), argv[0] );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,13 +470,10 @@ static int builtin_builtin( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
|
|
||||||
|
@ -570,13 +564,10 @@ static int builtin_generic( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -633,13 +624,10 @@ static int builtin_exec( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -796,13 +784,10 @@ static int builtin_functions( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
|
|
||||||
|
@ -840,10 +825,11 @@ static int builtin_functions( wchar_t **argv )
|
||||||
*/
|
*/
|
||||||
if( (erase + (desc!=0) + list) > 1 )
|
if( (erase + (desc!=0) + list) > 1 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: Invalid combination of options\n" ),
|
||||||
L": Invalid combination of options\n",
|
argv[0] );
|
||||||
(void *)0);
|
|
||||||
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -864,7 +850,7 @@ static int builtin_functions( wchar_t **argv )
|
||||||
if( argc-woptind != 1 )
|
if( argc-woptind != 1 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Expected exactly one function name\n",
|
_( L"%ls: Expected exactly one function name\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
|
@ -874,7 +860,7 @@ static int builtin_functions( wchar_t **argv )
|
||||||
if( !function_exists( func ) )
|
if( !function_exists( func ) )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Function '%ls' does not exist\n",
|
_( L"%ls: Function '%ls' does not exist\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
func );
|
func );
|
||||||
|
|
||||||
|
@ -913,7 +899,7 @@ static int builtin_functions( wchar_t **argv )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
sb_append( sb_out, L"Current function definitions are:\n\n" );
|
sb_append( sb_out, _( L"Current function definitions are:\n\n" ) );
|
||||||
al_init( &names );
|
al_init( &names );
|
||||||
function_get_names( &names, show_hidden );
|
function_get_names( &names, show_hidden );
|
||||||
names_arr = list_to_char_arr( &names );
|
names_arr = list_to_char_arr( &names );
|
||||||
|
@ -1049,13 +1035,10 @@ static int builtin_function( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
res = 1;
|
res = 1;
|
||||||
|
@ -1078,7 +1061,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
if( sig < 0 )
|
if( sig < 0 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Unknown signal %ls\n",
|
_( L"%ls: Unknown signal '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
woptarg );
|
woptarg );
|
||||||
res=1;
|
res=1;
|
||||||
|
@ -1102,7 +1085,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
if( !wcsvarname( woptarg ) )
|
if( !wcsvarname( woptarg ) )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Invalid variable name %ls\n",
|
_( L"%ls: Invalid variable name '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
woptarg );
|
woptarg );
|
||||||
res=1;
|
res=1;
|
||||||
|
@ -1164,7 +1147,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
if( job_id == -1 )
|
if( job_id == -1 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Cannot find calling job for event handler\n",
|
_( L"%ls: Cannot find calling job for event handler\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
res=1;
|
res=1;
|
||||||
}
|
}
|
||||||
|
@ -1182,7 +1165,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
if( errno || !end || *end )
|
if( errno || !end || *end )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Invalid process id %ls\n",
|
_( L"%ls: Invalid process id %ls\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
woptarg );
|
woptarg );
|
||||||
res=1;
|
res=1;
|
||||||
|
@ -1219,7 +1202,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
if( argc-woptind != 1 )
|
if( argc-woptind != 1 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Expected one argument, got %d\n",
|
_( L"%ls: Expected one argument, got %d\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argc-woptind );
|
argc-woptind );
|
||||||
res=1;
|
res=1;
|
||||||
|
@ -1227,7 +1210,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
else if( !(is_binding?wcsbindingname( argv[woptind] ) : wcsvarname( argv[woptind] ) ))
|
else if( !(is_binding?wcsbindingname( argv[woptind] ) : wcsvarname( argv[woptind] ) ))
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: illegal function name '%ls'\n",
|
_( L"%ls: Illegal function name '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[woptind] );
|
argv[woptind] );
|
||||||
|
|
||||||
|
@ -1237,7 +1220,7 @@ static int builtin_function( wchar_t **argv )
|
||||||
{
|
{
|
||||||
|
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: the name '%ls' is reserved,\nand can not be used as a function name\n",
|
_( L"%ls: The name '%ls' is reserved,\nand can not be used as a function name\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[woptind] );
|
argv[woptind] );
|
||||||
|
|
||||||
|
@ -1253,9 +1236,10 @@ static int builtin_function( wchar_t **argv )
|
||||||
int chars=0;
|
int chars=0;
|
||||||
|
|
||||||
// builtin_print_help( argv[0], sb_err );
|
// builtin_print_help( argv[0], sb_err );
|
||||||
|
const wchar_t *cfa = _( L"Current functions are: " );
|
||||||
sb_append( sb_err, L"Current functions are: " );
|
sb_append( sb_err, cfa );
|
||||||
chars += wcslen( L"Current functions are: " );
|
chars += wcslen( cfa );
|
||||||
|
|
||||||
al_init( &names );
|
al_init( &names );
|
||||||
function_get_names( &names, 0 );
|
function_get_names( &names, 0 );
|
||||||
names_arr = list_to_char_arr( &names );
|
names_arr = list_to_char_arr( &names );
|
||||||
|
@ -1350,13 +1334,10 @@ static int builtin_random( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1398,7 +1379,7 @@ static int builtin_random( wchar_t **argv )
|
||||||
if( errno || *end )
|
if( errno || *end )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Seed value '%ls' is not a valid number\n",
|
_( L"%ls: Seed value '%ls' is not a valid number\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[woptind] );
|
argv[woptind] );
|
||||||
|
|
||||||
|
@ -1412,7 +1393,7 @@ static int builtin_random( wchar_t **argv )
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Expected zero or one argument, got %d\n",
|
_( L"%ls: Expected zero or one argument, got %d\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argc-woptind );
|
argc-woptind );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -1488,13 +1469,10 @@ static int builtin_read( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1529,26 +1507,22 @@ static int builtin_read( wchar_t **argv )
|
||||||
|
|
||||||
if( ( place & ENV_UNEXPORT ) && ( place & ENV_EXPORT ) )
|
if( ( place & ENV_UNEXPORT ) && ( place & ENV_EXPORT ) )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_EXPUNEXP,
|
||||||
BUILTIN_ERR_EXPUNEXP,
|
argv[0],
|
||||||
L"\n",
|
parser_current_line() );
|
||||||
parser_current_line(),
|
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( (place&ENV_LOCAL) && (place & ENV_GLOBAL) )
|
if( (place&ENV_LOCAL) && (place & ENV_GLOBAL) )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_GLOCAL,
|
||||||
BUILTIN_ERR_GLOCAL,
|
argv[0],
|
||||||
L"\n",
|
parser_current_line() );
|
||||||
parser_current_line(),
|
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1556,10 +1530,11 @@ static int builtin_read( wchar_t **argv )
|
||||||
|
|
||||||
if( woptind == argc )
|
if( woptind == argc )
|
||||||
{
|
{
|
||||||
|
sb_printf( sb_err,
|
||||||
|
BUILTIN_ERR_MISSING,
|
||||||
|
argv[0] );
|
||||||
|
|
||||||
sb_append2( sb_err,
|
sb_append2( sb_err,
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_MISSING,
|
|
||||||
L"\n",
|
|
||||||
parser_current_line(),
|
parser_current_line(),
|
||||||
L"\n",
|
L"\n",
|
||||||
(void *)0 );
|
(void *)0 );
|
||||||
|
@ -1752,13 +1727,10 @@ static int builtin_status( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1855,7 +1827,7 @@ static int builtin_exit( wchar_t **argv )
|
||||||
if( errno || *end != 0)
|
if( errno || *end != 0)
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Argument must be an integer '%ls'\n",
|
_( L"%ls: Argument must be an integer '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1] );
|
argv[1] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -1866,7 +1838,7 @@ static int builtin_exit( wchar_t **argv )
|
||||||
|
|
||||||
default:
|
default:
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Too many arguments\n",
|
_( L"%ls: Too many arguments\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -1910,11 +1882,9 @@ static int builtin_cd( wchar_t **argv )
|
||||||
dir_in = env_get( L"HOME" );
|
dir_in = env_get( L"HOME" );
|
||||||
if( !dir_in )
|
if( !dir_in )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: Could not find home directory\n" ),
|
||||||
L": Could not find home directory\n",
|
argv[0] );
|
||||||
(void *)0 );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1925,7 +1895,7 @@ static int builtin_cd( wchar_t **argv )
|
||||||
if( !dir )
|
if( !dir )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: is not a directory or you do not have permission to enter it\n",
|
_( L"%ls: '%ls' is not a directory or you do not have permission to enter it\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
dir_in );
|
dir_in );
|
||||||
sb_append2( sb_err,
|
sb_append2( sb_err,
|
||||||
|
@ -1937,7 +1907,7 @@ static int builtin_cd( wchar_t **argv )
|
||||||
if( wchdir( dir ) != 0 )
|
if( wchdir( dir ) != 0 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: '%ls' is not a directory\n",
|
_( L"%ls: '%ls' is not a directory\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
dir );
|
dir );
|
||||||
sb_append2( sb_err,
|
sb_append2( sb_err,
|
||||||
|
@ -1952,7 +1922,7 @@ static int builtin_cd( wchar_t **argv )
|
||||||
if (!set_pwd(L"PWD"))
|
if (!set_pwd(L"PWD"))
|
||||||
{
|
{
|
||||||
res=1;
|
res=1;
|
||||||
sb_printf( sb_err, L"%ls: Could not set PWD variable\n", argv[0] );
|
sb_printf( sb_err, _( L"%ls: Could not set PWD variable\n" ), argv[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
free( dir );
|
free( dir );
|
||||||
|
@ -2061,12 +2031,10 @@ static int builtin_complete( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
L": Unknown option ",
|
argv[0],
|
||||||
long_options[opt_index].name,
|
long_options[opt_index].name );
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
sb_append( sb_err,
|
sb_append( sb_err,
|
||||||
parser_current_line() );
|
parser_current_line() );
|
||||||
// builtin_print_help( argv[0], sb_err );
|
// builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -2108,12 +2076,11 @@ static int builtin_complete( wchar_t **argv )
|
||||||
case 's':
|
case 's':
|
||||||
if( wcslen( woptarg ) > 1 )
|
if( wcslen( woptarg ) > 1 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: Parameter '%ls' is too long\n" ),
|
||||||
L": Parameter too long ",
|
argv[0],
|
||||||
woptarg,
|
woptarg );
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
sb_append( sb_err,
|
sb_append( sb_err,
|
||||||
parser_current_line() );
|
parser_current_line() );
|
||||||
// builtin_print_help( argv[0], sb_err );
|
// builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -2164,7 +2131,7 @@ static int builtin_complete( wchar_t **argv )
|
||||||
if( woptind != argc )
|
if( woptind != argc )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Too many arguments\n",
|
_( L"%ls: Too many arguments\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
sb_append( sb_err,
|
sb_append( sb_err,
|
||||||
parser_current_line() );
|
parser_current_line() );
|
||||||
|
@ -2231,7 +2198,7 @@ static int builtin_source( wchar_t ** argv )
|
||||||
|
|
||||||
if( argc != 2 )
|
if( argc != 2 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err, L"%ls: Expected exactly one argument, gor %d\n", argv[0], argc );
|
sb_printf( sb_err, _( L"%ls: Expected exactly one argument, got %d\n" ), argv[0], argc );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2244,7 +2211,7 @@ static int builtin_source( wchar_t ** argv )
|
||||||
|
|
||||||
if( !S_ISREG(buf.st_mode) )
|
if( !S_ISREG(buf.st_mode) )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err, L"%ls: '%ls' is not a file\n", argv[0], argv[1] );
|
sb_printf( sb_err, _( L"%ls: '%ls' is not a file\n" ), argv[0], argv[1] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2269,7 +2236,7 @@ static int builtin_source( wchar_t ** argv )
|
||||||
if( res )
|
if( res )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls : Error while reading file '%ls'\n",
|
_( L"%ls: Error while reading file '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1]
|
argv[1]
|
||||||
);
|
);
|
||||||
|
@ -2341,18 +2308,16 @@ static int builtin_fg( wchar_t **argv )
|
||||||
j = job_get_from_pid( pid );
|
j = job_get_from_pid( pid );
|
||||||
if( j != 0 )
|
if( j != 0 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: Ambiguous job\n" ),
|
||||||
L": Ambiguous job\n",
|
argv[0] );
|
||||||
(void *)0);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: '%ls' is not a job\n" ),
|
||||||
L": Not a job (",
|
argv[0],
|
||||||
argv[1],
|
argv[1] );
|
||||||
L")\n", (void *)0 );
|
|
||||||
}
|
}
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
|
@ -2366,10 +2331,9 @@ static int builtin_fg( wchar_t **argv )
|
||||||
|
|
||||||
if( j == 0 )
|
if( j == 0 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_( L"%ls: No suitable job\n" ),
|
||||||
L": No suitable job\n",
|
argv[0] );
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2413,18 +2377,21 @@ static int builtin_fg( wchar_t **argv )
|
||||||
/**
|
/**
|
||||||
Helper function for builtin_bg()
|
Helper function for builtin_bg()
|
||||||
*/
|
*/
|
||||||
static void send_to_bg( job_t *j, wchar_t *name )
|
static void send_to_bg( job_t *j, const wchar_t *name )
|
||||||
{
|
{
|
||||||
if( j == 0 )
|
if( j == 0 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err, L"bg", L": Unknown job ", name, L"\n", (void *)0 );
|
sb_printf( sb_err,
|
||||||
|
_( L"%ls: Unknown job '%ls'\n" ),
|
||||||
|
L"bg",
|
||||||
|
name );
|
||||||
builtin_print_help( L"bg", sb_err );
|
builtin_print_help( L"bg", sb_err );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"Send job %d '%ls' to background\n",
|
_(L"Send job %d '%ls' to background\n"),
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command );
|
j->command );
|
||||||
}
|
}
|
||||||
|
@ -2444,7 +2411,7 @@ static int builtin_bg( wchar_t **argv )
|
||||||
job_t *j;
|
job_t *j;
|
||||||
for( j=first_job; ((j!=0) && (!j->constructed) && (!job_is_stopped(j))); j=j->next )
|
for( j=first_job; ((j!=0) && (!j->constructed) && (!job_is_stopped(j))); j=j->next )
|
||||||
;
|
;
|
||||||
send_to_bg( j, L"(default)");
|
send_to_bg( j, _(L"(default)" ) );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for( argv++; *argv != 0; argv++ )
|
for( argv++; *argv != 0; argv++ )
|
||||||
|
@ -2498,11 +2465,11 @@ static void builtin_jobs_print( job_t *j, int mode, int header )
|
||||||
/*
|
/*
|
||||||
Print table header before first job
|
Print table header before first job
|
||||||
*/
|
*/
|
||||||
sb_append( sb_out, L"Job\tGroup\t");
|
sb_append( sb_out, _( L"Job\tGroup\t" ));
|
||||||
#ifdef HAVE__PROC_SELF_STAT
|
#ifdef HAVE__PROC_SELF_STAT
|
||||||
sb_append( sb_out, L"CPU\t" );
|
sb_append( sb_out, _( L"CPU\t" ) );
|
||||||
#endif
|
#endif
|
||||||
sb_append( sb_out, L"State\tCommand\n" );
|
sb_append( sb_out, _( L"State\tCommand\n" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
sb_printf( sb_out, L"%d\t%d\t", j->job_id, j->pgid );
|
sb_printf( sb_out, L"%d\t%d\t", j->job_id, j->pgid );
|
||||||
|
@ -2510,8 +2477,12 @@ static void builtin_jobs_print( job_t *j, int mode, int header )
|
||||||
#ifdef HAVE__PROC_SELF_STAT
|
#ifdef HAVE__PROC_SELF_STAT
|
||||||
sb_printf( sb_out, L"%d%%\t", cpu_use(j) );
|
sb_printf( sb_out, L"%d%%\t", cpu_use(j) );
|
||||||
#endif
|
#endif
|
||||||
sb_append2( sb_out, job_is_stopped(j)?L"stopped\t":L"running\t",
|
sb_append2( sb_out,
|
||||||
j->command, L"\n", (void *)0 );
|
job_is_stopped(j)?_(L"stopped"):_(L"running"),
|
||||||
|
L"\t",
|
||||||
|
j->command,
|
||||||
|
L"\n",
|
||||||
|
(void *)0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2522,7 +2493,7 @@ static void builtin_jobs_print( job_t *j, int mode, int header )
|
||||||
/*
|
/*
|
||||||
Print table header before first job
|
Print table header before first job
|
||||||
*/
|
*/
|
||||||
sb_append( sb_out, L"Group\n");
|
sb_append( sb_out, _( L"Group\n" ));
|
||||||
}
|
}
|
||||||
sb_printf( sb_out, L"%d\n", j->pgid );
|
sb_printf( sb_out, L"%d\n", j->pgid );
|
||||||
break;
|
break;
|
||||||
|
@ -2535,7 +2506,7 @@ static void builtin_jobs_print( job_t *j, int mode, int header )
|
||||||
/*
|
/*
|
||||||
Print table header before first job
|
Print table header before first job
|
||||||
*/
|
*/
|
||||||
sb_append( sb_out, L"Procces\n");
|
sb_append( sb_out, _( L"Procces\n" ));
|
||||||
}
|
}
|
||||||
|
|
||||||
for( p=j->first_process; p; p=p->next )
|
for( p=j->first_process; p; p=p->next )
|
||||||
|
@ -2552,7 +2523,7 @@ static void builtin_jobs_print( job_t *j, int mode, int header )
|
||||||
/*
|
/*
|
||||||
Print table header before first job
|
Print table header before first job
|
||||||
*/
|
*/
|
||||||
sb_append( sb_out, L"Command\n");
|
sb_append( sb_out, _( L"Command\n" ));
|
||||||
}
|
}
|
||||||
|
|
||||||
for( p=j->first_process; p; p=p->next )
|
for( p=j->first_process; p; p=p->next )
|
||||||
|
@ -2623,10 +2594,10 @@ static int builtin_jobs( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Unknown option '%ls'\n",
|
BUILTIN_ERR_UNKNOWN,
|
||||||
argv[0],
|
argv[0],
|
||||||
long_options[opt_index].name );
|
long_options[opt_index].name );
|
||||||
|
|
||||||
sb_append( sb_err,
|
sb_append( sb_err,
|
||||||
parser_current_line() );
|
parser_current_line() );
|
||||||
|
@ -2704,7 +2675,7 @@ static int builtin_jobs( wchar_t **argv )
|
||||||
if( errno || *end )
|
if( errno || *end )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Not a process id: '%ls'\n",
|
_( L"%ls: Not a process id: '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[i] );
|
argv[i] );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2719,7 +2690,7 @@ static int builtin_jobs( wchar_t **argv )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: No suitable job: %d\n",
|
_( L"%ls: No suitable job: %d\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
pid );
|
pid );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2745,7 +2716,7 @@ static int builtin_jobs( wchar_t **argv )
|
||||||
if( !found )
|
if( !found )
|
||||||
{
|
{
|
||||||
sb_printf( sb_out,
|
sb_printf( sb_out,
|
||||||
L"%ls: There are no running jobs\n",
|
_( L"%ls: There are no jobs\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2764,14 +2735,14 @@ static int builtin_for( wchar_t **argv )
|
||||||
if( argc < 3)
|
if( argc < 3)
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Expected at least two arguments\n",
|
_( L"%ls: Expected at least two arguments\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
}
|
}
|
||||||
else if ( !wcsvarname(argv[1]) )
|
else if ( !wcsvarname(argv[1]) )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: '%ls' invalid variable name\n",
|
_( L"%ls: '%ls' invalid variable name\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1] );
|
argv[1] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -2779,7 +2750,7 @@ static int builtin_for( wchar_t **argv )
|
||||||
else if (wcscmp( argv[2], L"in") != 0 )
|
else if (wcscmp( argv[2], L"in") != 0 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Second argument must be 'in'\n",
|
_( L"%ls: Second argument must be 'in'\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
}
|
}
|
||||||
|
@ -2841,7 +2812,7 @@ static int builtin_end( wchar_t **argv )
|
||||||
current_block->type == AND )
|
current_block->type == AND )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Not inside of block\n",
|
_( L"%ls: Not inside of block\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -2965,7 +2936,7 @@ static int builtin_else( wchar_t **argv )
|
||||||
current_block->param1.if_state != 1)
|
current_block->param1.if_state != 1)
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: not inside of if block\n",
|
_( L"%ls: Not inside of 'if' block\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2997,10 +2968,11 @@ static int builtin_break_continue( wchar_t **argv )
|
||||||
|
|
||||||
if( argc != 1 )
|
if( argc != 1 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Unknown option '%ls'\n",
|
BUILTIN_ERR_UNKNOWN,
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1] );
|
argv[1] );
|
||||||
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -3016,7 +2988,7 @@ static int builtin_break_continue( wchar_t **argv )
|
||||||
if( b == 0 )
|
if( b == 0 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Not inside of loop\n",
|
_( L"%ls: Not inside of loop\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -3056,7 +3028,7 @@ static int builtin_return( wchar_t **argv )
|
||||||
if( errno || *end != 0)
|
if( errno || *end != 0)
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Argument must be an integer '%ls'\n",
|
_( L"%ls: Argument must be an integer '%ls'\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1] );
|
argv[1] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
@ -3067,7 +3039,7 @@ static int builtin_return( wchar_t **argv )
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Too many arguments\n",
|
_( L"%ls: Too many arguments\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -3083,7 +3055,7 @@ static int builtin_return( wchar_t **argv )
|
||||||
if( b == 0 )
|
if( b == 0 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: Not inside of function\n",
|
_( L"%ls: Not inside of function\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -3112,7 +3084,7 @@ static int builtin_switch( wchar_t **argv )
|
||||||
if( argc != 2 )
|
if( argc != 2 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls : syntax error, expected exactly one argument, got %d\n",
|
_( L"%ls: Expected exactly one argument, got %d\n" ),
|
||||||
argv[0],
|
argv[0],
|
||||||
argc-1 );
|
argc-1 );
|
||||||
|
|
||||||
|
@ -3143,7 +3115,7 @@ static int builtin_case( wchar_t **argv )
|
||||||
if( current_block->type != SWITCH )
|
if( current_block->type != SWITCH )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls: syntax error, case command while not in switch block\n",
|
_( L"%ls: 'case' command while not in switch block\n" ),
|
||||||
argv[0] );
|
argv[0] );
|
||||||
builtin_print_help( L"case", sb_err );
|
builtin_print_help( L"case", sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -3341,7 +3313,7 @@ int builtin_run( wchar_t **argv )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug( 0, L"Unknown builtin: ", argv[0], 0 );
|
debug( 0, _( L"Unknown builtin '%ls'" ), argv[0] );
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -3363,41 +3335,41 @@ const wchar_t *builtin_get_desc( const wchar_t *b )
|
||||||
|
|
||||||
hash_init( desc, &hash_wcs_func, &hash_wcs_cmp );
|
hash_init( desc, &hash_wcs_func, &hash_wcs_cmp );
|
||||||
|
|
||||||
hash_put( desc, L"block", L"Temporarily block delivery of events" );
|
hash_put( desc, L"block", _( L"Temporarily block delivery of events" ) );
|
||||||
hash_put( desc, L"builtin", L"Run a builtin command" );
|
hash_put( desc, L"builtin", _( L"Run a builtin command" ) );
|
||||||
hash_put( desc, L"complete", L"Edit command specific completions" );
|
hash_put( desc, L"complete", _( L"Edit command specific completions" ) );
|
||||||
hash_put( desc, L"cd", L"Change working directory" );
|
hash_put( desc, L"cd", _( L"Change working directory" ) );
|
||||||
hash_put( desc, L"exit", L"Exit the shell" );
|
hash_put( desc, L"exit", _( L"Exit the shell" ) );
|
||||||
hash_put( desc, L"function", L"Define a new function" );
|
hash_put( desc, L"function", _( L"Define a new function" ) );
|
||||||
hash_put( desc, L"functions", L"List or remove functions" );
|
hash_put( desc, L"functions", _( L"List or remove functions" ) );
|
||||||
hash_put( desc, L"end", L"End a block of commands" );
|
hash_put( desc, L"end", _( L"End a block of commands" ) );
|
||||||
hash_put( desc, L"else", L"Evaluate block if condition is false" );
|
hash_put( desc, L"else", _( L"Evaluate block if condition is false" ) );
|
||||||
hash_put( desc, L"eval", L"Evaluate parameters as a command" );
|
hash_put( desc, L"eval", _( L"Evaluate parameters as a command" ) );
|
||||||
hash_put( desc, L"for", L"Perform a set of commands multiple times" );
|
hash_put( desc, L"for", _( L"Perform a set of commands multiple times" ) );
|
||||||
hash_put( desc, L".", L"Evaluate contents of file" );
|
hash_put( desc, L".", _( L"Evaluate contents of file" ) );
|
||||||
hash_put( desc, L"set", L"Handle environment variables" );
|
hash_put( desc, L"set", _( L"Handle environment variables" ) );
|
||||||
hash_put( desc, L"fg", L"Send job to foreground" );
|
hash_put( desc, L"fg", _( L"Send job to foreground" ) );
|
||||||
hash_put( desc, L"bg", L"Send job to background" );
|
hash_put( desc, L"bg", _( L"Send job to background" ) );
|
||||||
hash_put( desc, L"jobs", L"Print currently running jobs" );
|
hash_put( desc, L"jobs", _( L"Print currently running jobs" ) );
|
||||||
hash_put( desc, L"read", L"Read a line of input into variables" );
|
hash_put( desc, L"read", _( L"Read a line of input into variables" ) );
|
||||||
hash_put( desc, L"break", L"Stop the innermost loop" );
|
hash_put( desc, L"break", _( L"Stop the innermost loop" ) );
|
||||||
hash_put( desc, L"continue", L"Skip the rest of the current lap of the innermost loop" );
|
hash_put( desc, L"continue", _( L"Skip the rest of the current lap of the innermost loop" ) );
|
||||||
hash_put( desc, L"return", L"Stop the innermost currently evaluated function" );
|
hash_put( desc, L"return", _( L"Stop the innermost currently evaluated function" ) );
|
||||||
hash_put( desc, L"commandline", L"Set the commandline" );
|
hash_put( desc, L"commandline", _( L"Set the commandline" ) );
|
||||||
hash_put( desc, L"switch", L"Conditionally execute a block of commands" );
|
hash_put( desc, L"switch", _( L"Conditionally execute a block of commands" ) );
|
||||||
hash_put( desc, L"case", L"Conditionally execute a block of commands" );
|
hash_put( desc, L"case", _( L"Conditionally execute a block of commands" ) );
|
||||||
hash_put( desc, L"command", L"Run a program" );
|
hash_put( desc, L"command", _( L"Run a program" ) );
|
||||||
hash_put( desc, L"if", L"Conditionally execute a command" );
|
hash_put( desc, L"if", _( L"Conditionally execute a command" ) );
|
||||||
hash_put( desc, L"while", L"Perform a command multiple times" );
|
hash_put( desc, L"while", _( L"Perform a command multiple times" ) );
|
||||||
hash_put( desc, L"bind", L"Handle key bindings");
|
hash_put( desc, L"bind", _( L"Handle key bindings" ));
|
||||||
hash_put( desc, L"random", L"Generate random number");
|
hash_put( desc, L"random", _( L"Generate random number" ));
|
||||||
hash_put( desc, L"exec", L"Run command in current process");
|
hash_put( desc, L"exec", _( L"Run command in current process" ));
|
||||||
hash_put( desc, L"not", L"Negate exit status of job");
|
hash_put( desc, L"not", _( L"Negate exit status of job" ));
|
||||||
hash_put( desc, L"or", L"Execute second command if first fails");
|
hash_put( desc, L"or", _( L"Execute second command if first fails" ));
|
||||||
hash_put( desc, L"and", L"Execute second command if first suceeds");
|
hash_put( desc, L"and", _( L"Execute second command if first suceeds" ));
|
||||||
hash_put( desc, L"begin", L"Create a block of code" );
|
hash_put( desc, L"begin", _( L"Create a block of code" ) );
|
||||||
hash_put( desc, L"status", L"Return status information about fish" );
|
hash_put( desc, L"status", _( L"Return status information about fish" ) );
|
||||||
hash_put( desc, L"ulimit", L"Set or get the shells resurce usage limits" );
|
hash_put( desc, L"ulimit", _( L"Set or get the shells resurce usage limits" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return hash_get( desc, b );
|
return hash_get( desc, b );
|
||||||
|
|
19
builtin.h
19
builtin.h
|
@ -20,31 +20,36 @@ enum
|
||||||
/**
|
/**
|
||||||
Error message on missing argument
|
Error message on missing argument
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_ERR_MISSING L": Expected argument"
|
#define BUILTIN_ERR_MISSING _( L"%ls: Expected argument\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message on invalid combination of options
|
Error message on invalid combination of options
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_ERR_COMBO L": Invalid combination of options"
|
#define BUILTIN_ERR_COMBO _( L"%ls: Invalid combination of options\n" )
|
||||||
|
|
||||||
|
/**
|
||||||
|
Error message on invalid combination of options
|
||||||
|
*/
|
||||||
|
#define BUILTIN_ERR_COMBO2 _( L"%ls: Invalid combination of options,\n%ls\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message on multiple scope levels for variables
|
Error message on multiple scope levels for variables
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_ERR_GLOCAL L": Variable can only be one of universal, global and local"
|
#define BUILTIN_ERR_GLOCAL _( L"%ls: Variable can only be one of universal, global and local\n%ls\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for specifying both export and unexport to set/read
|
Error message for specifying both export and unexport to set/read
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_ERR_EXPUNEXP L": Variable can't be both exported and unexported"
|
#define BUILTIN_ERR_EXPUNEXP _( L"%ls: Variable can't be both exported and unexported\n%ls\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for unknown switch
|
Error message for unknown switch
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_ERR_UNKNOWN L": Unknown option"
|
#define BUILTIN_ERR_UNKNOWN _( L"%ls: Unknown option '%ls'\n" )
|
||||||
|
|
||||||
#define BUILTIN_ERR_VARCHAR L"%ls: Invalid character in variable name: '%lc'. Only alphanumerical characters and underscores are valid in a variable name.\n"
|
#define BUILTIN_ERR_VARCHAR _( L"%ls: Invalid character '%lc' in variable name. Only alphanumerical characters and underscores are valid in a variable name.\n" )
|
||||||
|
|
||||||
#define BUILTIN_ERR_VARNAME_ZERO L"%ls: Variable name can not be the empty string\n"
|
#define BUILTIN_ERR_VARNAME_ZERO _( L"%ls: Variable name can not be the empty string\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Stringbuffer used to represent standard output
|
Stringbuffer used to represent standard output
|
||||||
|
|
|
@ -22,6 +22,7 @@ Functions used for implementing the commandline builtin.
|
||||||
#include "tokenizer.h"
|
#include "tokenizer.h"
|
||||||
#include "input_common.h"
|
#include "input_common.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Which part of the comandbuffer are we operating on
|
Which part of the comandbuffer are we operating on
|
||||||
|
@ -260,13 +261,10 @@ int builtin_commandline( wchar_t **argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -322,10 +320,11 @@ int builtin_commandline( wchar_t **argv )
|
||||||
*/
|
*/
|
||||||
if( buffer_part || cut_at_cursor || append_mode || tokenize )
|
if( buffer_part || cut_at_cursor || append_mode || tokenize )
|
||||||
{
|
{
|
||||||
|
sb_printf(sb_err,
|
||||||
|
BUILTIN_ERR_COMBO,
|
||||||
|
argv[0] );
|
||||||
|
|
||||||
sb_append2(sb_err,
|
sb_append2(sb_err,
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_COMBO,
|
|
||||||
L"\n",
|
|
||||||
parser_current_line(),
|
parser_current_line(),
|
||||||
L"\n",
|
L"\n",
|
||||||
(void *)0);
|
(void *)0);
|
||||||
|
@ -335,10 +334,11 @@ int builtin_commandline( wchar_t **argv )
|
||||||
|
|
||||||
if( argc == woptind )
|
if( argc == woptind )
|
||||||
{
|
{
|
||||||
|
sb_printf( sb_err,
|
||||||
|
BUILTIN_ERR_MISSING,
|
||||||
|
argv[0] );
|
||||||
|
|
||||||
sb_append2( sb_err,
|
sb_append2( sb_err,
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_MISSING,
|
|
||||||
L"\n",
|
|
||||||
parser_current_line(),
|
parser_current_line(),
|
||||||
L"\n",
|
L"\n",
|
||||||
(void *)0 );
|
(void *)0 );
|
||||||
|
@ -394,22 +394,23 @@ int builtin_commandline( wchar_t **argv )
|
||||||
if( (tokenize || cut_at_cursor) && (argc-woptind) )
|
if( (tokenize || cut_at_cursor) && (argc-woptind) )
|
||||||
{
|
{
|
||||||
|
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_COMBO2,
|
||||||
BUILTIN_ERR_COMBO,
|
argv[0],
|
||||||
L",\n --cut-at-cursor and --tokenize can not be used when setting the commandline",
|
L"--cut-at-cursor and --tokenize can not be used when setting the commandline" );
|
||||||
(void *)0 );
|
|
||||||
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( append_mode && !(argc-woptind) )
|
if( append_mode && !(argc-woptind) )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
|
BUILTIN_ERR_COMBO2,
|
||||||
argv[0],
|
argv[0],
|
||||||
BUILTIN_ERR_COMBO,
|
L"insertion mode switches can not be used when not in insertion mode" );
|
||||||
L",\n insertion mode switches can not be used when not in insertion mode",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ Functions used for implementing the set builtin.
|
||||||
#include "wgetopt.h"
|
#include "wgetopt.h"
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Extract the name from a destination argument of the form name[index1 index2...]
|
Extract the name from a destination argument of the form name[index1 index2...]
|
||||||
|
@ -92,9 +93,7 @@ static int parse_fill_indexes( array_list_t *indexes,
|
||||||
long l_ind = wcstol(src, &end, 10);
|
long l_ind = wcstol(src, &end, 10);
|
||||||
if (end == src)
|
if (end == src)
|
||||||
{
|
{
|
||||||
wchar_t sbuf[256];
|
sb_printf(sb_err, _(L"%ls: Invalid index starting at '%ls'\n"), L"set", src);
|
||||||
swprintf(sbuf, 255, L"Invalid index starting at %ls\n", src);
|
|
||||||
sb_append(sb_err, sbuf);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,13 +361,11 @@ int builtin_set( wchar_t **argv )
|
||||||
|
|
||||||
if( query && (erase || list || global || local || universal || export || unexport ) )
|
if( query && (erase || list || global || local || universal || export || unexport ) )
|
||||||
{
|
{
|
||||||
sb_append2(sb_err,
|
sb_printf(sb_err,
|
||||||
|
BUILTIN_ERR_COMBO2,
|
||||||
argv[0],
|
argv[0],
|
||||||
BUILTIN_ERR_COMBO,
|
parser_current_line() );
|
||||||
L"\n",
|
|
||||||
parser_current_line(),
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -377,13 +374,11 @@ int builtin_set( wchar_t **argv )
|
||||||
/* Check operation and modifiers sanity */
|
/* Check operation and modifiers sanity */
|
||||||
if( erase && list )
|
if( erase && list )
|
||||||
{
|
{
|
||||||
sb_append2(sb_err,
|
sb_printf(sb_err,
|
||||||
|
BUILTIN_ERR_COMBO2,
|
||||||
argv[0],
|
argv[0],
|
||||||
BUILTIN_ERR_COMBO,
|
parser_current_line() );
|
||||||
L"\n",
|
|
||||||
parser_current_line(),
|
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -391,9 +386,8 @@ int builtin_set( wchar_t **argv )
|
||||||
if( local + global + universal > 1 )
|
if( local + global + universal > 1 )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
L"%ls%ls\n%ls\n",
|
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_GLOCAL,
|
BUILTIN_ERR_GLOCAL,
|
||||||
|
argv[0],
|
||||||
parser_current_line() );
|
parser_current_line() );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -401,13 +395,10 @@ int builtin_set( wchar_t **argv )
|
||||||
|
|
||||||
if( export && unexport )
|
if( export && unexport )
|
||||||
{
|
{
|
||||||
sb_append2(sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
|
||||||
BUILTIN_ERR_EXPUNEXP,
|
BUILTIN_ERR_EXPUNEXP,
|
||||||
L"\n",
|
argv[0],
|
||||||
parser_current_line(),
|
parser_current_line() );
|
||||||
L"\n",
|
|
||||||
(void *)0);
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -493,12 +484,11 @@ int builtin_set( wchar_t **argv )
|
||||||
/* No arguments -- display name & value for all variables in scope */
|
/* No arguments -- display name & value for all variables in scope */
|
||||||
if( erase )
|
if( erase )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_(L"%ls: Erase needs a variable name\n%ls\n"),
|
||||||
L": Erase needs a variable name\n",
|
argv[0],
|
||||||
parser_current_line(),
|
parser_current_line() );
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
retcode = 1;
|
retcode = 1;
|
||||||
}
|
}
|
||||||
|
@ -531,12 +521,11 @@ int builtin_set( wchar_t **argv )
|
||||||
/* There are some arguments, we have at least a variable name */
|
/* There are some arguments, we have at least a variable name */
|
||||||
if( erase && al_get_count(&values) != 0 )
|
if( erase && al_get_count(&values) != 0 )
|
||||||
{
|
{
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
_(L"%ls: Values cannot be specfied with erase\n%ls\n"),
|
||||||
L": Values cannot be specfied with erase\n",
|
argv[0],
|
||||||
parser_current_line(),
|
parser_current_line() );
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
retcode = 1;
|
retcode = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ Functions used for implementing the ulimit builtin.
|
||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "wgetopt.h"
|
#include "wgetopt.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Struct describing a resource limit
|
Struct describing a resource limit
|
||||||
|
@ -344,13 +345,10 @@ int builtin_ulimit( wchar_t ** argv )
|
||||||
case 0:
|
case 0:
|
||||||
if(long_options[opt_index].flag != 0)
|
if(long_options[opt_index].flag != 0)
|
||||||
break;
|
break;
|
||||||
sb_append2( sb_err,
|
sb_printf( sb_err,
|
||||||
argv[0],
|
BUILTIN_ERR_UNKNOWN,
|
||||||
BUILTIN_ERR_UNKNOWN,
|
argv[0],
|
||||||
L" ",
|
long_options[opt_index].name );
|
||||||
long_options[opt_index].name,
|
|
||||||
L"\n",
|
|
||||||
(void *)0 );
|
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
10
common.c
10
common.c
|
@ -724,6 +724,7 @@ void fish_setlocale(int category, const wchar_t *locale)
|
||||||
{
|
{
|
||||||
char *lang = wcs2str( locale );
|
char *lang = wcs2str( locale );
|
||||||
setlocale(category,lang);
|
setlocale(category,lang);
|
||||||
|
|
||||||
free( lang );
|
free( lang );
|
||||||
/*
|
/*
|
||||||
Use ellipsis if on known unicode system, otherwise use $
|
Use ellipsis if on known unicode system, otherwise use $
|
||||||
|
@ -784,11 +785,16 @@ int writeb( tputs_arg_t b )
|
||||||
|
|
||||||
void die_mem()
|
void die_mem()
|
||||||
{
|
{
|
||||||
debug( 0, L"Out of memory, shutting down fish." );
|
/*
|
||||||
|
Do not translate this message, and do not send it through the
|
||||||
|
usual channels. This increases the odds that the message gets
|
||||||
|
through correctly, even if we are out of memory.
|
||||||
|
*/
|
||||||
|
fwprintf( stderr, L"Out of memory, shutting down fish.\n" );
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug( int level, wchar_t *msg, ... )
|
void debug( int level, const wchar_t *msg, ... )
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
string_buffer_t sb;
|
string_buffer_t sb;
|
||||||
|
|
12
common.h
12
common.h
|
@ -134,7 +134,6 @@ wchar_t *wcsdupcat( const wchar_t *a, const wchar_t *b );
|
||||||
*/
|
*/
|
||||||
wchar_t *wcsdupcat2( const wchar_t *a, ... );
|
wchar_t *wcsdupcat2( const wchar_t *a, ... );
|
||||||
|
|
||||||
#ifndef HAVE_WCSNDUP
|
|
||||||
/**
|
/**
|
||||||
Returns a newly allocated wide character string wich is a copy of
|
Returns a newly allocated wide character string wich is a copy of
|
||||||
the string in, but of length c or shorter. The returned string is
|
the string in, but of length c or shorter. The returned string is
|
||||||
|
@ -142,7 +141,6 @@ wchar_t *wcsdupcat2( const wchar_t *a, ... );
|
||||||
length.
|
length.
|
||||||
*/
|
*/
|
||||||
wchar_t *wcsndup( const wchar_t *in, int c );
|
wchar_t *wcsndup( const wchar_t *in, int c );
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts from wide char to digit in the specified base. If d is not
|
Converts from wide char to digit in the specified base. If d is not
|
||||||
|
@ -185,19 +183,14 @@ size_t wcslcat( wchar_t *dst, const wchar_t *src, size_t siz );
|
||||||
*/
|
*/
|
||||||
size_t wcslcpy( wchar_t *dst, const wchar_t *src, size_t siz );
|
size_t wcslcpy( wchar_t *dst, const wchar_t *src, size_t siz );
|
||||||
|
|
||||||
#ifndef HAVE_WCSDUP
|
|
||||||
/**
|
/**
|
||||||
Create a duplicate string. Wide string version of strdup. Will
|
Create a duplicate string. Wide string version of strdup. Will
|
||||||
automatically exit if out of memory.
|
automatically exit if out of memory.
|
||||||
*/
|
*/
|
||||||
wchar_t *wcsdup(const wchar_t *in);
|
wchar_t *wcsdup(const wchar_t *in);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_WCSLEN
|
|
||||||
size_t wcslen(const wchar_t *in);
|
size_t wcslen(const wchar_t *in);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_WCSCASECMP
|
|
||||||
/**
|
/**
|
||||||
Case insensitive string compare function. Wide string version of
|
Case insensitive string compare function. Wide string version of
|
||||||
strcasecmp.
|
strcasecmp.
|
||||||
|
@ -210,9 +203,7 @@ size_t wcslen(const wchar_t *in);
|
||||||
a user-supplied string should be considered a bug.
|
a user-supplied string should be considered a bug.
|
||||||
*/
|
*/
|
||||||
int wcscasecmp( const wchar_t *a, const wchar_t *b );
|
int wcscasecmp( const wchar_t *a, const wchar_t *b );
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_WCSNCASECMP
|
|
||||||
/**
|
/**
|
||||||
Case insensitive string compare function. Wide string version of
|
Case insensitive string compare function. Wide string version of
|
||||||
strncasecmp.
|
strncasecmp.
|
||||||
|
@ -225,7 +216,6 @@ int wcscasecmp( const wchar_t *a, const wchar_t *b );
|
||||||
a user-supplied string should be considered a bug.
|
a user-supplied string should be considered a bug.
|
||||||
*/
|
*/
|
||||||
int wcsncasecmp( const wchar_t *a, const wchar_t *b, int count );
|
int wcsncasecmp( const wchar_t *a, const wchar_t *b, int count );
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Test if the given string is a valid variable name
|
Test if the given string is a valid variable name
|
||||||
|
@ -314,7 +304,7 @@ void common_destroy();
|
||||||
|
|
||||||
will print the string 'fish: Pi = 3.141', given that debug_level is 1 or higher, and that program_name is 'fish'.
|
will print the string 'fish: Pi = 3.141', given that debug_level is 1 or higher, and that program_name is 'fish'.
|
||||||
*/
|
*/
|
||||||
void debug( int level, wchar_t *msg, ... );
|
void debug( int level, const wchar_t *msg, ... );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Replace special characters with backslash escape sequences. Newline is
|
Replace special characters with backslash escape sequences. Newline is
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "intern.h"
|
#include "intern.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
#include "wutil.h"
|
#include "wutil.h"
|
||||||
|
|
||||||
|
@ -746,7 +747,7 @@ int complete_is_valid_option( const wchar_t *str,
|
||||||
str[0] = opt[j];
|
str[0] = opt[j];
|
||||||
str[1]=0;
|
str[1]=0;
|
||||||
al_push( errors,
|
al_push( errors,
|
||||||
wcsdupcat2(L"Unknown option \'", str, L"\'", 0) );
|
wcsdupcat2(_( L"Unknown option: " ), L"'", str, L"'", 0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
opt_found = 0;
|
opt_found = 0;
|
||||||
|
@ -765,12 +766,12 @@ int complete_is_valid_option( const wchar_t *str,
|
||||||
if( hash_get_count( &gnu_match_hash )==0)
|
if( hash_get_count( &gnu_match_hash )==0)
|
||||||
{
|
{
|
||||||
al_push( errors,
|
al_push( errors,
|
||||||
wcsdupcat2(L"Unknown option \'", opt, L"\'", 0) );
|
wcsdupcat2( _(L"Unknown option: "), L"'", opt, L"\'", 0) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
al_push( errors,
|
al_push( errors,
|
||||||
wcsdupcat2(L"Multiple matches for option \'", opt, L"\'", 0) );
|
wcsdupcat2( _(L"Multiple matches for option: "), L"'", opt, L"\'", 0) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -845,7 +846,7 @@ static const wchar_t *complete_get_desc_suffix( const wchar_t *suff_orig )
|
||||||
if( al_get_count( &l )>0 )
|
if( al_get_count( &l )>0 )
|
||||||
{
|
{
|
||||||
wchar_t *ln = (wchar_t *)al_get(&l, 0 );
|
wchar_t *ln = (wchar_t *)al_get(&l, 0 );
|
||||||
if( wcscmp( ln, L"unknown" ) != 0 )
|
if( wcscmp( ln, _(L"unknown") ) != 0 )
|
||||||
{
|
{
|
||||||
desc = wcsdupcat( COMPLETE_SEP_STR, ln);
|
desc = wcsdupcat( COMPLETE_SEP_STR, ln);
|
||||||
/*
|
/*
|
||||||
|
|
18
configure.ac
18
configure.ac
|
@ -53,6 +53,9 @@ else
|
||||||
AC_SUBST( PREFIX, [$prefix])
|
AC_SUBST( PREFIX, [$prefix])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE_UNQUOTED( [LOCALEDIR], "$(eval echo $datadir)/locale", [Locale directory])
|
||||||
|
AC_SUBST( [LOCALEDIR], [$datadir/locale])
|
||||||
|
|
||||||
AC_SUBST(fishdir,[/fish.d])
|
AC_SUBST(fishdir,[/fish.d])
|
||||||
AC_SUBST(fishfile,[/fish])
|
AC_SUBST(fishfile,[/fish])
|
||||||
AC_SUBST(fishinputfile,[/fish_inputrc])
|
AC_SUBST(fishinputfile,[/fish_inputrc])
|
||||||
|
@ -63,6 +66,7 @@ if test -z $docdir; then
|
||||||
AC_SUBST(docdir,[$datadir/doc/fish])
|
AC_SUBST(docdir,[$datadir/doc/fish])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED( DOCDIR, [L"$(eval echo $docdir)"], [Documentation directory] )
|
AC_DEFINE_UNQUOTED( DOCDIR, [L"$(eval echo $docdir)"], [Documentation directory] )
|
||||||
AC_DEFINE_UNQUOTED( SYSCONFDIR, [L"$(eval echo $sysconfdir)"], [System configuration directory] )
|
AC_DEFINE_UNQUOTED( SYSCONFDIR, [L"$(eval echo $sysconfdir)"], [System configuration directory] )
|
||||||
AC_SUBST( SYSCONFDIR, ["$(eval echo $sysconfdir)"] )
|
AC_SUBST( SYSCONFDIR, ["$(eval echo $sysconfdir)"] )
|
||||||
|
@ -113,6 +117,7 @@ else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Check for RLIMIT_NPROC in sys/resource.h.
|
# Check for RLIMIT_NPROC in sys/resource.h.
|
||||||
AC_MSG_CHECKING([for RLIMIT_NPROC in sys/resource.h])
|
AC_MSG_CHECKING([for RLIMIT_NPROC in sys/resource.h])
|
||||||
AC_TRY_COMPILE([#include <sys/resource.h>],
|
AC_TRY_COMPILE([#include <sys/resource.h>],
|
||||||
|
@ -125,18 +130,17 @@ else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_LIB(socket, connect, rt, nanosleep)
|
||||||
|
AC_CHECK_FUNCS(wcsdup wcsndup wcslen wcscasecmp wcsncasecmp gettext)
|
||||||
|
|
||||||
AC_CHECK_LIB(socket, connect)
|
AC_CHECK_FUNC(gettext, AC_SUBST(HAVE_GETTEXT,1), AC_SUBST(HAVE_GETTEXT,0) )
|
||||||
AC_CHECK_LIB(rt, nanosleep)
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS(wcsdup wcsndup wcslen wcscasecmp wcsncasecmp)
|
|
||||||
|
|
||||||
# Check if we have ncurses, and use it rather than curses if possible.
|
# Check if we have ncurses, and use it rather than curses if possible.
|
||||||
AC_CHECK_HEADERS([ncurses.h],[AC_SUBST(CURSESLIB,[ncurses]) AC_DEFINE(HAVE_NCURSES_H)],[AC_SUBST(CURSESLIB,[curses])])
|
AC_CHECK_HEADERS([ncurses.h],[AC_SUBST(CURSESLIB,[ncurses]) AC_DEFINE(HAVE_NCURSES_H)],[AC_SUBST(CURSESLIB,[curses])])
|
||||||
|
|
||||||
#Force use of ncurses if it is avialable via NetBSD pkgsrc. This is an
|
# Force use of ncurses if it is avialable via NetBSD pkgsrc. This is an
|
||||||
#ugly kludge to force NetBSD to use ncurses, since NetBSDs own version
|
# ugly kludge to force NetBSD to use ncurses, since NetBSDs own version
|
||||||
#does not properly support terminfo.
|
# does not properly support terminfo.
|
||||||
AC_CHECK_FILE([/usr/pkg/include/ncurses.h],[AC_SUBST(CURSESLIB,[ncurses]) AC_DEFINE(HAVE_NCURSES_H)])
|
AC_CHECK_FILE([/usr/pkg/include/ncurses.h],[AC_SUBST(CURSESLIB,[ncurses]) AC_DEFINE(HAVE_NCURSES_H)])
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile fish.spec doc_src/fish.1 doc_src/Doxyfile init/fish init/fish_interactive.fish init/fish_complete.fish])
|
AC_CONFIG_FILES([Makefile fish.spec doc_src/fish.1 doc_src/Doxyfile init/fish init/fish_interactive.fish init/fish_complete.fish])
|
||||||
|
|
|
@ -975,7 +975,68 @@ it's initalization files to function properly. To solve this
|
||||||
problem, either copy the initialization files to each fish users home
|
problem, either copy the initialization files to each fish users home
|
||||||
directory, or install them in /etc.
|
directory, or install them in /etc.
|
||||||
|
|
||||||
|
\section i18n Translating fish to other languages
|
||||||
|
|
||||||
|
Fish uses the GNU gettext library to implement translation to multiple
|
||||||
|
languages. If fish is not available in your language, please consider
|
||||||
|
making a translation. Currently, only the shell itself can be
|
||||||
|
translated, a future version of fish should also include translated
|
||||||
|
manuals.
|
||||||
|
|
||||||
|
To make a translation of fish, you will first need the sourcecode,
|
||||||
|
available from the <a href='http://roo.no-ip.org/fish'>fish
|
||||||
|
homepage</a>. Download the latest version, and then extract it using a
|
||||||
|
command like <code>tar -zxf fish-VERSION.tar.gz</code>.
|
||||||
|
|
||||||
|
Next, cd into the newly created fish directory using <code>cd
|
||||||
|
fish-VERSION</code>.
|
||||||
|
|
||||||
|
You will now need to configure the sourcecode using the command
|
||||||
|
<code>./configure</code>. This step might take a while.
|
||||||
|
|
||||||
|
Before you continue, you will need to know the ISO 639 language code
|
||||||
|
of the language you are translating to. These codes can be found <a
|
||||||
|
href='http://www.w3.org/WAI/ER/IG/ert/iso639.htm'>here</a>. For
|
||||||
|
example, the language code for Uighur is ug.
|
||||||
|
|
||||||
|
Now you have the sourcecode and it is properly configured. Lets start
|
||||||
|
translating. To do this, first create an empty translation table for
|
||||||
|
the language you wish to translate to by writing <code>make
|
||||||
|
po/[LANGUAGE CODE].po</code> in the fish terminal. For example, if you
|
||||||
|
are translating to Uighur, you should write <code>make
|
||||||
|
po/ug.po</code>. This should create the file po/ug.po, a template
|
||||||
|
translation table containing all the strings that need to be
|
||||||
|
translated.
|
||||||
|
|
||||||
|
Now you are all set up to translate fish to a new language. Open the
|
||||||
|
newly created .po file in your editor of choice, and start
|
||||||
|
translating. The .po file format is rather simple. It contains pairs
|
||||||
|
of string in a format like:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
msgid "%ls: No suitable job\n"
|
||||||
|
msgstr ""
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
The first line is the english string to translate, the second line
|
||||||
|
should contain your translation. For example, in swedish the above
|
||||||
|
might become:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
msgid "%ls: No suitable job\n"
|
||||||
|
msgstr "%ls: Inget jobb matchar\n"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
%s, %ls, %d and other tokens beginning with a '%' are
|
||||||
|
placeholders. These will be replaced by a value by fish at
|
||||||
|
runtime. You must always take care to use exactly the same
|
||||||
|
placeholders in the same order in your translation. (Actually, there
|
||||||
|
are ways to avoid this, but they are to complicated for this short
|
||||||
|
introduction. See the full manual for the printf C function for more
|
||||||
|
information.)
|
||||||
|
|
||||||
|
Once you have provided a translation for fish, please send it to <a
|
||||||
|
href='fish-users@lists.sf.net'>fish-users@lists.sf.net</a>.
|
||||||
|
|
||||||
\section todo Missing features and bugs
|
\section todo Missing features and bugs
|
||||||
|
|
||||||
|
|
14
env.c
14
env.c
|
@ -41,6 +41,7 @@
|
||||||
#include "env_universal.h"
|
#include "env_universal.h"
|
||||||
#include "input_common.h"
|
#include "input_common.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Command used to start fishd
|
Command used to start fishd
|
||||||
|
@ -190,7 +191,7 @@ static void start_fishd()
|
||||||
|
|
||||||
if( !pw )
|
if( !pw )
|
||||||
{
|
{
|
||||||
debug( 0, L"Could not get user information" );
|
debug( 0, _( L"Could not get user information" ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,7 +418,7 @@ void env_init()
|
||||||
free( uname );
|
free( uname );
|
||||||
}
|
}
|
||||||
|
|
||||||
env_universal_init( env_get( L"FISHD_SOKET_DIR"),
|
env_universal_init( env_get( L"FISHD_SOCKET_DIR"),
|
||||||
env_get( L"USER" ),
|
env_get( L"USER" ),
|
||||||
&start_fishd,
|
&start_fishd,
|
||||||
&universal_callback );
|
&universal_callback );
|
||||||
|
@ -499,6 +500,11 @@ void env_set( const wchar_t *key,
|
||||||
if( wcscmp(key, L"LANG" )==0 )
|
if( wcscmp(key, L"LANG" )==0 )
|
||||||
{
|
{
|
||||||
fish_setlocale(LC_ALL,val);
|
fish_setlocale(LC_ALL,val);
|
||||||
|
/* Make change known to gettext. */
|
||||||
|
{
|
||||||
|
extern int _nl_msg_cat_cntr;
|
||||||
|
++_nl_msg_cat_cntr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( wcscmp( key, L"umask" ) == 0)
|
if( wcscmp( key, L"umask" ) == 0)
|
||||||
|
@ -754,7 +760,7 @@ wchar_t *env_get( const wchar_t *key )
|
||||||
wchar_t *next = history_get( i-add_current );
|
wchar_t *next = history_get( i-add_current );
|
||||||
if( !next )
|
if( !next )
|
||||||
{
|
{
|
||||||
debug( 1, L"No history at idx %d\n", i );
|
debug( 1, _( L"No history at idx %d\n" ), i );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -914,7 +920,7 @@ void env_pop()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"Tried to pop empty environment stack." );
|
_( L"Tried to pop empty environment stack." ) );
|
||||||
sanity_lose();
|
sanity_lose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
event.c
3
event.c
|
@ -19,6 +19,7 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "signal.h"
|
#include "signal.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Number of signals that can be queued before an overflow occurs
|
Number of signals that can be queued before an overflow occurs
|
||||||
|
@ -486,7 +487,7 @@ static void event_fire_delayed()
|
||||||
|
|
||||||
if( lst->overflow )
|
if( lst->overflow )
|
||||||
{
|
{
|
||||||
debug( 0, L"Signal list overflow. Signals have been ignored" );
|
debug( 0, _( L"Signal list overflow. Signals have been ignored." ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
21
exec.c
21
exec.c
|
@ -36,6 +36,7 @@
|
||||||
#include "expand.h"
|
#include "expand.h"
|
||||||
#include "signal.h"
|
#include "signal.h"
|
||||||
#include "env_universal.h"
|
#include "env_universal.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Prototype for the getpgid library function. The prototype for this
|
Prototype for the getpgid library function. The prototype for this
|
||||||
|
@ -48,15 +49,15 @@ pid_t getpgid( pid_t pid );
|
||||||
/**
|
/**
|
||||||
file descriptor redirection error message
|
file descriptor redirection error message
|
||||||
*/
|
*/
|
||||||
#define FD_ERROR L"An error occurred while redirecting file descriptor %d"
|
#define FD_ERROR _( L"An error occurred while redirecting file descriptor %d" )
|
||||||
/**
|
/**
|
||||||
file redirection error message
|
file redirection error message
|
||||||
*/
|
*/
|
||||||
#define FILE_ERROR L"An error occurred while redirecting file '%ls'"
|
#define FILE_ERROR _( L"An error occurred while redirecting file '%ls'" )
|
||||||
/**
|
/**
|
||||||
fork error message
|
fork error message
|
||||||
*/
|
*/
|
||||||
#define FORK_ERROR L"Could not create child process - exiting"
|
#define FORK_ERROR _( L"Could not create child process - exiting" )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -421,7 +422,7 @@ static void launch_process( process_t *p )
|
||||||
|
|
||||||
execve (wcs2str(p->actual_cmd), wcsv2strv( (const wchar_t **) p->argv), env_export_arr( 0 ) );
|
execve (wcs2str(p->actual_cmd), wcsv2strv( (const wchar_t **) p->argv), env_export_arr( 0 ) );
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"Failed to execute process %ls",
|
_( L"Failed to execute process '%ls'" ),
|
||||||
p->actual_cmd );
|
p->actual_cmd );
|
||||||
wperror( L"execve" );
|
wperror( L"execve" );
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -580,7 +581,7 @@ static int handle_new_child( job_t *j, process_t *p )
|
||||||
if( getpgid( p->pid) != j->pgid )
|
if( getpgid( p->pid) != j->pgid )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not send process %d from group %d to group %d",
|
_( L"Could not send process %d from group %d to group %d" ),
|
||||||
p->pid,
|
p->pid,
|
||||||
getpgid( p->pid),
|
getpgid( p->pid),
|
||||||
j->pgid );
|
j->pgid );
|
||||||
|
@ -592,7 +593,7 @@ static int handle_new_child( job_t *j, process_t *p )
|
||||||
{
|
{
|
||||||
if( tcsetpgrp (0, j->pgid) )
|
if( tcsetpgrp (0, j->pgid) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not send job %d ('%ls')to foreground",
|
debug( 1, _( L"Could not send job %d ('%ls') to foreground" ),
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command );
|
j->command );
|
||||||
wperror( L"tcsetpgrp" );
|
wperror( L"tcsetpgrp" );
|
||||||
|
@ -604,7 +605,7 @@ static int handle_new_child( job_t *j, process_t *p )
|
||||||
{
|
{
|
||||||
if( tcsetpgrp (0, j->pgid) )
|
if( tcsetpgrp (0, j->pgid) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not send job %d ('%ls')to foreground",
|
debug( 1, _( L"Could not send job %d ('%ls') to foreground" ),
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command );
|
j->command );
|
||||||
wperror( L"tcsetpgrp" );
|
wperror( L"tcsetpgrp" );
|
||||||
|
@ -766,7 +767,7 @@ void exec( job_t *j )
|
||||||
// fwprintf( stderr, L"run function %ls\n", argv[0] );
|
// fwprintf( stderr, L"run function %ls\n", argv[0] );
|
||||||
if( def == 0 )
|
if( def == 0 )
|
||||||
{
|
{
|
||||||
debug( 0, L"Unknown function %ls", p->argv[0] );
|
debug( 0, _( L"Unknown function '%ls'" ), p->argv[0] );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
parser_push_block( FUNCTION_CALL );
|
parser_push_block( FUNCTION_CALL );
|
||||||
|
@ -874,7 +875,7 @@ void exec( job_t *j )
|
||||||
{
|
{
|
||||||
builtin_stdin=-1;
|
builtin_stdin=-1;
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Unknown input redirection type %d",
|
_( L"Unknown input redirection type %d" ),
|
||||||
in->io_mode);
|
in->io_mode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1201,7 +1202,7 @@ int exec_subshell( const wchar_t *cmd,
|
||||||
if( !cmd )
|
if( !cmd )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Sent null command to subshell. This is a fish bug. If it can be reproduced, please send a bug report to %s",
|
_( L"Sent null command to subshell. This is a fish bug. If it can be reproduced, please send a bug report to %s." ),
|
||||||
PACKAGE_BUGREPORT );
|
PACKAGE_BUGREPORT );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
2
exec.h
2
exec.h
|
@ -16,7 +16,7 @@
|
||||||
/**
|
/**
|
||||||
pipe redirection error message
|
pipe redirection error message
|
||||||
*/
|
*/
|
||||||
#define PIPE_ERROR L"An error occurred while setting up pipe"
|
#define PIPE_ERROR _(L"An error occurred while setting up pipe")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize the exec library
|
Initialize the exec library
|
||||||
|
|
|
@ -67,6 +67,7 @@ fi
|
||||||
%config %_sysconfdir/fish.d/fish_*.fish
|
%config %_sysconfdir/fish.d/fish_*.fish
|
||||||
%dir %_sysconfdir/fish.d/completions
|
%dir %_sysconfdir/fish.d/completions
|
||||||
%config %_sysconfdir/fish.d/completions/*.fish
|
%config %_sysconfdir/fish.d/completions/*.fish
|
||||||
|
%_datadir/locale/*/fish.cat
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Nov 29 2005 Axel Liljencrantz <axel@liljencrantz.se> 1.17.0-0
|
* Tue Nov 29 2005 Axel Liljencrantz <axel@liljencrantz.se> 1.17.0-0
|
||||||
|
|
|
@ -70,6 +70,6 @@ for i in ls ll la
|
||||||
complete -c $i -s X -d "sort by extension"
|
complete -c $i -s X -d "sort by extension"
|
||||||
complete -c $i -s 1 -d "List one file per line"
|
complete -c $i -s 1 -d "List one file per line"
|
||||||
complete -c $i -l help -d "Display help and exit"
|
complete -c $i -l help -d "Display help and exit"
|
||||||
complete -c $i -l version -d "Output version and exit"
|
complete -c $i -l version -d "Display version and exit"
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
37
input.c
37
input.c
|
@ -50,6 +50,7 @@ implementation in fish is as of yet incomplete.
|
||||||
#include "env.h"
|
#include "env.h"
|
||||||
#include "expand.h"
|
#include "expand.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
static void input_read_inputrc( wchar_t *fn );
|
static void input_read_inputrc( wchar_t *fn );
|
||||||
|
|
||||||
|
@ -402,7 +403,7 @@ static wchar_t *input_symbolic_sequence( const wchar_t *in )
|
||||||
in++;
|
in++;
|
||||||
if( c < L'a' || c > L'z' )
|
if( c < L'a' || c > L'z' )
|
||||||
{
|
{
|
||||||
debug( 1, L"Invalid Control sequence" );
|
debug( 1, _( L"Invalid Control sequence" ) );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if( has_meta )
|
if( has_meta )
|
||||||
|
@ -514,7 +515,7 @@ static wchar_t *input_symbolic_sequence( const wchar_t *in )
|
||||||
}
|
}
|
||||||
if( !res )
|
if( !res )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not parse sequence %ls", in );
|
debug( 1, _( L"Could not parse sequence '%ls'" ), in );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if( !*in || *in == L'\n')
|
if( !*in || *in == L'\n')
|
||||||
|
@ -678,7 +679,7 @@ static wchar_t *input_expand_sequence( const wchar_t *in )
|
||||||
if( *in != L'-' )
|
if( *in != L'-' )
|
||||||
{
|
{
|
||||||
error=1;
|
error=1;
|
||||||
debug( 1, L"Invalid sequence - no dash after control\n" );
|
debug( 1, _( L"Invalid sequence - no dash after control\n" ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
in++;
|
in++;
|
||||||
|
@ -696,7 +697,7 @@ static wchar_t *input_expand_sequence( const wchar_t *in )
|
||||||
*(out++)=*in-L'A'+1;
|
*(out++)=*in-L'A'+1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
debug( 1, L"Invalid sequence - Control-nothing?\n" );
|
debug( 1, _( L"Invalid sequence - Control-nothing?\n" ) );
|
||||||
error = 1;
|
error = 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -711,12 +712,12 @@ static wchar_t *input_expand_sequence( const wchar_t *in )
|
||||||
if( *in != L'-' )
|
if( *in != L'-' )
|
||||||
{
|
{
|
||||||
error=1;
|
error=1;
|
||||||
debug( 1, L"Invalid sequence - no dash after meta\n" );
|
debug( 1, _( L"Invalid sequence - no dash after meta\n" ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( !*(in+1) )
|
if( !*(in+1) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Invalid sequence - Meta-nothing?" );
|
debug( 1, _( L"Invalid sequence - Meta-nothing?" ) );
|
||||||
error=1;
|
error=1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -761,7 +762,7 @@ static wchar_t *input_expand_sequence( const wchar_t *in )
|
||||||
{
|
{
|
||||||
if( wcslen( res ) == 0 )
|
if( wcslen( res ) == 0 )
|
||||||
{
|
{
|
||||||
debug( 1, L"Invalid sequence - '%ls' expanded to zero characters", in_orig );
|
debug( 1, _( L"Invalid sequence - '%ls' expanded to zero characters" ), in_orig );
|
||||||
error =1;
|
error =1;
|
||||||
res = 0;
|
res = 0;
|
||||||
}
|
}
|
||||||
|
@ -825,7 +826,7 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
{
|
{
|
||||||
inputrc_error = 1;
|
inputrc_error = 1;
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Mismatched $endif in inputrc file" );
|
_( L"Mismatched $endif in inputrc file" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -877,7 +878,7 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
if( !*cmd )
|
if( !*cmd )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Mismatched quote" );
|
_( L"Mismatched quote" ) );
|
||||||
inputrc_error = 1;
|
inputrc_error = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -891,7 +892,7 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
if( *cmd != L':' )
|
if( *cmd != L':' )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Expected a \':\'" );
|
_( L"Expected a \':\'" ) );
|
||||||
inputrc_error = 1;
|
inputrc_error = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -936,16 +937,16 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
|
|
||||||
if( wcscmp( set, L"set" ) != 0 )
|
if( wcscmp( set, L"set" ) != 0 )
|
||||||
{
|
{
|
||||||
debug( 1, L"I don\'t know what %ls means", set );
|
debug( 1, _( L"I don\'t know what '%ls' means" ), set );
|
||||||
}
|
}
|
||||||
else if( end )
|
else if( end )
|
||||||
{
|
{
|
||||||
debug( 1, L"Expected end of line, got '%ls'", end );
|
debug( 1, _( L"Expected end of line, got '%ls'" ), end );
|
||||||
|
|
||||||
}
|
}
|
||||||
else if( (!key) || (!value) )
|
else if( (!key) || (!value) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Syntax: set KEY VALUE" );
|
debug( 1, _( L"Syntax: set KEY VALUE" ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1011,7 +1012,7 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
if( !cmd )
|
if( !cmd )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Unable to parse binding" );
|
_( L"Unable to parse binding" ) );
|
||||||
inputrc_error = 1;
|
inputrc_error = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1037,7 +1038,7 @@ void input_parse_inputrc_line( wchar_t *cmd )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug( 1, L"I don\'t know what %ls means", cmd );
|
debug( 1, _( L"I don\'t know what %ls means" ), cmd );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1063,7 +1064,7 @@ static void input_read_inputrc( wchar_t *fn )
|
||||||
case -1:
|
case -1:
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Error while reading input information from file: %s",
|
_( L"Error while reading input information from file '%ls'" ),
|
||||||
fn );
|
fn );
|
||||||
|
|
||||||
wperror( L"fgetws2 (read_ni)" );
|
wperror( L"fgetws2 (read_ni)" );
|
||||||
|
@ -1168,6 +1169,8 @@ static void add_common_bindings()
|
||||||
add_terminfo_mapping( name[i], (key_backspace), L"Backspace", L"backward-delete-char" );
|
add_terminfo_mapping( name[i], (key_backspace), L"Backspace", L"backward-delete-char" );
|
||||||
add_mapping( name[i], L"\x7f", L"Backspace", L"backward-delete-char" );
|
add_mapping( name[i], L"\x7f", L"Backspace", L"backward-delete-char" );
|
||||||
|
|
||||||
|
add_mapping( name[i], L"\e[H", L"Home", L"beginning-of-line" );
|
||||||
|
add_mapping( name[i], L"\e[F", L"End", L"end-of-line" );
|
||||||
add_terminfo_mapping( name[i], (key_home), L"Home", L"beginning-of-line" );
|
add_terminfo_mapping( name[i], (key_home), L"Home", L"beginning-of-line" );
|
||||||
add_terminfo_mapping( name[i], (key_end), L"End", L"end-of-line" );
|
add_terminfo_mapping( name[i], (key_end), L"End", L"end-of-line" );
|
||||||
|
|
||||||
|
@ -1288,7 +1291,7 @@ int input_init()
|
||||||
|
|
||||||
if( setupterm( 0, STDOUT_FILENO, 0) == ERR )
|
if( setupterm( 0, STDOUT_FILENO, 0) == ERR )
|
||||||
{
|
{
|
||||||
debug( 0, L"Could not set up terminal" );
|
debug( 0, _( L"Could not set up terminal" ) );
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
hash_init( &all_mappings, &hash_wcs_func, &hash_wcs_cmp );
|
hash_init( &all_mappings, &hash_wcs_func, &hash_wcs_cmp );
|
||||||
|
|
3
io.c
3
io.c
|
@ -32,6 +32,7 @@ Utilities for io redirection.
|
||||||
#include "exec.h"
|
#include "exec.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ void io_buffer_read( io_data_t *d )
|
||||||
if( errno != EAGAIN )
|
if( errno != EAGAIN )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"An error occured while reading output from code block on fd %d",
|
_(L"An error occured while reading output from code block on fd %d"),
|
||||||
d->param1.pipe_fd[0] );
|
d->param1.pipe_fd[0] );
|
||||||
wperror( L"io_buffer_read" );
|
wperror( L"io_buffer_read" );
|
||||||
}
|
}
|
||||||
|
|
5
main.c
5
main.c
|
@ -56,6 +56,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "exec.h"
|
#include "exec.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Parse init files
|
Parse init files
|
||||||
|
@ -207,7 +208,8 @@ int main( int argc, char **argv )
|
||||||
|
|
||||||
if( force_interactive )
|
if( force_interactive )
|
||||||
is_interactive_session=1;
|
is_interactive_session=1;
|
||||||
|
|
||||||
|
translate_init();
|
||||||
proc_init();
|
proc_init();
|
||||||
output_init();
|
output_init();
|
||||||
event_init();
|
event_init();
|
||||||
|
@ -300,6 +302,7 @@ int main( int argc, char **argv )
|
||||||
exec_destroy();
|
exec_destroy();
|
||||||
event_destroy();
|
event_destroy();
|
||||||
output_destroy();
|
output_destroy();
|
||||||
|
translate_destroy();
|
||||||
|
|
||||||
intern_free_all();
|
intern_free_all();
|
||||||
|
|
||||||
|
|
194
parser.c
194
parser.c
|
@ -35,6 +35,8 @@ The fish parser. Contains functions for parsing code.
|
||||||
#include "sanity.h"
|
#include "sanity.h"
|
||||||
#include "env_universal.h"
|
#include "env_universal.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
#include "translate.h"
|
||||||
|
#include "msgnrs.h"
|
||||||
|
|
||||||
/** Length of the lineinfo string used for describing the current tokenizer position */
|
/** Length of the lineinfo string used for describing the current tokenizer position */
|
||||||
#define LINEINFO_SIZE 128
|
#define LINEINFO_SIZE 128
|
||||||
|
@ -55,93 +57,188 @@ The fish parser. Contains functions for parsing code.
|
||||||
Message about reporting bugs, used on weird internal error to
|
Message about reporting bugs, used on weird internal error to
|
||||||
hopefully get them to report stuff.
|
hopefully get them to report stuff.
|
||||||
*/
|
*/
|
||||||
#define BUGREPORT_MSG L"If this error can be reproduced, please send a bug report to %s."
|
#define BUGREPORT_MSG _( L"If this error can be reproduced, please send a bug report to %s.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for improper use of the exec builtin
|
Error message for improper use of the exec builtin
|
||||||
*/
|
*/
|
||||||
#define EXEC_ERR_MSG L"this command can not be used in a pipeline"
|
#define EXEC_ERR_MSG _(L"This command can not be used in a pipeline")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for tokenizer error. The tokenizer message is
|
Error message for tokenizer error. The tokenizer message is
|
||||||
appended to this message.
|
appended to this message.
|
||||||
*/
|
*/
|
||||||
#define TOK_ERR_MSG L"Tokenizer error: '%ls'"
|
#define TOK_ERR_MSG _( L"Tokenizer error: '%ls'")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for short circut command error.
|
Error message for short circut command error.
|
||||||
*/
|
*/
|
||||||
#define COND_ERR_MSG L"Short circut command requires additional command"
|
#define COND_ERR_MSG _( L"Short circut command requires additional command")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message on reaching maximum recusrion depth
|
Error message on reaching maximum recusrion depth
|
||||||
*/
|
*/
|
||||||
#define RECURSION_ERR_MSG L"Maximum recursion depth reached. Accidental infinite loop?"
|
#define RECURSION_ERR_MSG _( L"Maximum recursion depth reached. Accidental infinite loop?")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message used when the end of a block can't be located
|
Error message used when the end of a block can't be located
|
||||||
*/
|
*/
|
||||||
#define BLOCK_END_ERR_MSG L"Could not locate end of block. The 'end' command is missing, misspelled or a preceding ';' is missing."
|
#define BLOCK_END_ERR_MSG _( L"Could not locate end of block. The 'end' command is missing, misspelled or a preceding ';' is missing.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message on reaching maximum number of block calls
|
Error message on reaching maximum number of block calls
|
||||||
*/
|
*/
|
||||||
#define BLOCK_ERR_MSG L"Maximum number of nested blocks reached."
|
#define BLOCK_ERR_MSG _( L"Maximum number of nested blocks reached.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message when a non-string token is found when expecting a command name
|
Error message when a non-string token is found when expecting a command name
|
||||||
*/
|
*/
|
||||||
#define CMD_ERR_MSG L"Expected a command string, got token of type '%ls'"
|
#define CMD_ERR_MSG _( L"Expected a command string, got token of type '%ls'.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message when encountering an illegal command name
|
Error message when encountering an illegal command name
|
||||||
*/
|
*/
|
||||||
#define ILLEGAL_CMD_ERR_MSG L"Illegal command name '%ls'"
|
#define ILLEGAL_CMD_ERR_MSG _( L"Illegal command name '%ls'.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for wildcards with no matches
|
Error message for wildcards with no matches
|
||||||
*/
|
*/
|
||||||
#define WILDCARD_ERR_MSG L"Warning: No match for wildcard '%ls'"
|
#define WILDCARD_ERR_MSG _( L"Warning: No match for wildcard '%ls'. The command will not be executed.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error when using case builtin outside of switch block
|
Error when using case builtin outside of switch block
|
||||||
*/
|
*/
|
||||||
#define INVALID_CASE_ERR_MSG L"'case' builtin not inside of switch block"
|
#define INVALID_CASE_ERR_MSG _( L"'case' builtin not inside of switch block")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error when using loop control builtins (break or continue) outside of loop
|
Error when using loop control builtins (break or continue) outside of loop
|
||||||
*/
|
*/
|
||||||
#define INVALID_LOOP_ERR_MSG L"Loop control command while not inside of loop"
|
#define INVALID_LOOP_ERR_MSG _( L"Loop control command while not inside of loop" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error when using else builtin outside of if block
|
Error when using else builtin outside of if block
|
||||||
*/
|
*/
|
||||||
#define INVALID_ELSE_ERR_MSG L"'else' builtin not inside of if block"
|
#define INVALID_ELSE_ERR_MSG _( L"'else' builtin not inside of if block" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error when using end builtin outside of block
|
Error when using end builtin outside of block
|
||||||
*/
|
*/
|
||||||
#define INVALID_END_ERR_MSG L"'end' command outside of block"
|
#define INVALID_END_ERR_MSG _( L"'end' command outside of block")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message for Posix-style assignment
|
Error message for Posix-style assignment
|
||||||
*/
|
*/
|
||||||
#define COMMAND_ASSIGN_ERR_MSG L"Unknown command '%ls'. Did you mean 'set VARIABLE VALUE'? For information on setting variable values, see the manual section on the set command by typing 'help set'."
|
#define COMMAND_ASSIGN_ERR_MSG _( L"Unknown command '%ls'. Did you mean 'set VARIABLE VALUE'? For information on setting variable values, see the manual section on the set command by typing 'help set'.")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error for invalid redirection token
|
Error for invalid redirection token
|
||||||
*/
|
*/
|
||||||
#define REDIRECT_TOKEN_ERR_MSG L"Expected redirection specification, got token of type '%ls'"
|
#define REDIRECT_TOKEN_ERR_MSG _( L"Expected redirection specification, got token of type '%ls'")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error when encountering redirection without a command
|
Error when encountering redirection without a command
|
||||||
*/
|
*/
|
||||||
#define INVALID_REDIRECTION_ERR_MSG L"Encountered redirection when expecting a command name. Fish does not allow a redirection operation before a command."
|
#define INVALID_REDIRECTION_ERR_MSG _( L"Encountered redirection when expecting a command name. Fish does not allow a redirection operation before a command.")
|
||||||
|
|
||||||
|
/**
|
||||||
|
Error for evaluating null pointer
|
||||||
|
*/
|
||||||
|
#define EVAL_NULL_ERR_MSG _( L"Tried to evaluate null pointer." )
|
||||||
|
|
||||||
|
/**
|
||||||
|
Error for evaluating in illegal scope
|
||||||
|
*/
|
||||||
|
#define INVALID_SCOPE_ERR_MSG _( L"Tried to evaluate buffer using invalid block scope of type '%ls'." )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error for wrong token type
|
Error for wrong token type
|
||||||
*/
|
*/
|
||||||
#define UNEXPECTED_TOKEN_ERR_MSG L"Unexpected token of type '%ls'"
|
#define UNEXPECTED_TOKEN_ERR_MSG _( L"Unexpected token of type '%ls'")
|
||||||
|
|
||||||
|
/**
|
||||||
|
Unexpected error in parser_get_filename()
|
||||||
|
*/
|
||||||
|
#define MISSING_COMMAND_ERR_MSG _( L"Error while searching for command '%ls'" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
While block description
|
||||||
|
*/
|
||||||
|
#define WHILE_BLOCK _( L"'while' block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
For block description
|
||||||
|
*/
|
||||||
|
#define FOR_BLOCK _( L"'for' block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
If block description
|
||||||
|
*/
|
||||||
|
#define IF_BLOCK _( L"'if' conditional block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
function definition block description
|
||||||
|
*/
|
||||||
|
#define FUNCTION_DEF_BLOCK _( L"function definition block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function invocation block description
|
||||||
|
*/
|
||||||
|
#define FUNCTION_CALL_BLOCK _( L"function invocation block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Switch block description
|
||||||
|
*/
|
||||||
|
#define SWITCH_BLOCK _( L"'switch' block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fake block description
|
||||||
|
*/
|
||||||
|
#define FAKE_BLOCK _( L"unexecutable block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Top block description
|
||||||
|
*/
|
||||||
|
#define TOP_BLOCK _( L"global root block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Command substitution block description
|
||||||
|
*/
|
||||||
|
#define SUBST_BLOCK _( L"command substitution block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Begin block description
|
||||||
|
*/
|
||||||
|
#define BEGIN_BLOCK _( L"unconditional block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
And block description
|
||||||
|
*/
|
||||||
|
#define AND_BLOCK _( L"'and' conditional block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
block description
|
||||||
|
*/
|
||||||
|
#define OR_BLOCK _( L"'or' conditional block" )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Unknown block description
|
||||||
|
*/
|
||||||
|
#define UNKNOWN_BLOCK _( L"unknown/invalid block" )
|
||||||
|
|
||||||
|
|
||||||
/** Last error code */
|
/** Last error code */
|
||||||
int error_code;
|
int error_code;
|
||||||
|
@ -322,48 +419,48 @@ void parser_pop_block()
|
||||||
free( old );
|
free( old );
|
||||||
}
|
}
|
||||||
|
|
||||||
wchar_t *parser_get_block_desc( int block )
|
const wchar_t *parser_get_block_desc( int block )
|
||||||
{
|
{
|
||||||
switch( block )
|
switch( block )
|
||||||
{
|
{
|
||||||
case WHILE:
|
case WHILE:
|
||||||
return L"while block";
|
return WHILE_BLOCK;
|
||||||
|
|
||||||
case FOR:
|
case FOR:
|
||||||
return L"for block";
|
return FOR_BLOCK;
|
||||||
|
|
||||||
case IF:
|
case IF:
|
||||||
return L"'if' conditional block";
|
return IF_BLOCK;
|
||||||
|
|
||||||
case FUNCTION_DEF:
|
case FUNCTION_DEF:
|
||||||
return L"function definition block";
|
return FUNCTION_DEF_BLOCK;
|
||||||
|
|
||||||
case FUNCTION_CALL:
|
case FUNCTION_CALL:
|
||||||
return L"function invocation block";
|
return FUNCTION_CALL_BLOCK;
|
||||||
|
|
||||||
case SWITCH:
|
case SWITCH:
|
||||||
return L"switch block";
|
return SWITCH_BLOCK;
|
||||||
|
|
||||||
case FAKE:
|
case FAKE:
|
||||||
return L"unexecutable block";
|
return FAKE_BLOCK;
|
||||||
|
|
||||||
case TOP:
|
case TOP:
|
||||||
return L"global root block";
|
return TOP_BLOCK;
|
||||||
|
|
||||||
case SUBST:
|
case SUBST:
|
||||||
return L"command substitution block";
|
return SUBST_BLOCK;
|
||||||
|
|
||||||
case BEGIN:
|
case BEGIN:
|
||||||
return L"unconditional block";
|
return BEGIN_BLOCK;
|
||||||
|
|
||||||
case AND:
|
case AND:
|
||||||
return L"'and' conditional command";
|
return AND_BLOCK;
|
||||||
|
|
||||||
case OR:
|
case OR:
|
||||||
return L"'or' conditional command";
|
return OR_BLOCK;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return L"unknown/invalid block";
|
return UNKNOWN_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -714,7 +811,7 @@ wchar_t *get_filename( const wchar_t *cmd )
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Error while searching for command %ls",
|
MISSING_COMMAND_ERR_MSG,
|
||||||
new_cmd );
|
new_cmd );
|
||||||
wperror( L"access" );
|
wperror( L"access" );
|
||||||
}
|
}
|
||||||
|
@ -724,7 +821,6 @@ wchar_t *get_filename( const wchar_t *cmd )
|
||||||
free( new_cmd );
|
free( new_cmd );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -793,13 +889,13 @@ void parser_destroy()
|
||||||
if( !f )
|
if( !f )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not write profiling information to file '%s'",
|
_(L"Could not write profiling information to file '%s'"),
|
||||||
profile );
|
profile );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fwprintf( f,
|
fwprintf( f,
|
||||||
L"Time\tSum\tCommand\n",
|
_(L"Time\tSum\tCommand\n"),
|
||||||
al_get_count( &profile_data ) );
|
al_get_count( &profile_data ) );
|
||||||
print_profile( &profile_data, 0, f );
|
print_profile( &profile_data, 0, f );
|
||||||
fclose( f );
|
fclose( f );
|
||||||
|
@ -949,7 +1045,7 @@ wchar_t *parser_current_line()
|
||||||
{
|
{
|
||||||
swprintf( lineinfo,
|
swprintf( lineinfo,
|
||||||
LINEINFO_SIZE,
|
LINEINFO_SIZE,
|
||||||
L"%ls (line %d): %n",
|
_(L"%ls (line %d): %n"),
|
||||||
file,
|
file,
|
||||||
lineno,
|
lineno,
|
||||||
&offset );
|
&offset );
|
||||||
|
@ -1135,7 +1231,7 @@ static void parse_job_main_loop( process_t *p,
|
||||||
{
|
{
|
||||||
error( SYNTAX_ERROR,
|
error( SYNTAX_ERROR,
|
||||||
tok_get_pos( tok ),
|
tok_get_pos( tok ),
|
||||||
L"Could not expand string '%ls'",
|
_(L"Could not expand string '%ls'"),
|
||||||
tok_last(tok) );
|
tok_last(tok) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1237,7 +1333,7 @@ static void parse_job_main_loop( process_t *p,
|
||||||
if( error_code == 0 )
|
if( error_code == 0 )
|
||||||
error( SYNTAX_ERROR,
|
error( SYNTAX_ERROR,
|
||||||
tok_get_pos( tok ),
|
tok_get_pos( tok ),
|
||||||
L"Invalid IO redirection" );
|
_(L"Invalid IO redirection") );
|
||||||
tok_next(tok);
|
tok_next(tok);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1280,8 +1376,7 @@ static void parse_job_main_loop( process_t *p,
|
||||||
{
|
{
|
||||||
error( SYNTAX_ERROR,
|
error( SYNTAX_ERROR,
|
||||||
tok_get_pos( tok ),
|
tok_get_pos( tok ),
|
||||||
L"Requested redirection to something "
|
_(L"Requested redirection to something that is not a file descriptor %ls"),
|
||||||
L"that is not a file descriptor %ls",
|
|
||||||
target );
|
target );
|
||||||
|
|
||||||
tok_next(tok);
|
tok_next(tok);
|
||||||
|
@ -1672,7 +1767,7 @@ static int parse_job( process_t *p,
|
||||||
{
|
{
|
||||||
error( EVAL_ERROR,
|
error( EVAL_ERROR,
|
||||||
tok_get_pos( tok ),
|
tok_get_pos( tok ),
|
||||||
L"Unknown command '%ls'",
|
_(L"Unknown command '%ls'"),
|
||||||
(wchar_t *)al_get( &args, 0 ) );
|
(wchar_t *)al_get( &args, 0 ) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2046,7 +2141,9 @@ int eval( const wchar_t *cmd, io_data_t *io, int block_type )
|
||||||
if( !cmd )
|
if( !cmd )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Tried to evaluate null pointer. " BUGREPORT_MSG,
|
EVAL_NULL_ERR_MSG );
|
||||||
|
debug( 1,
|
||||||
|
BUGREPORT_MSG,
|
||||||
PACKAGE_BUGREPORT );
|
PACKAGE_BUGREPORT );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2056,8 +2153,11 @@ int eval( const wchar_t *cmd, io_data_t *io, int block_type )
|
||||||
(block_type != SUBST))
|
(block_type != SUBST))
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Tried to evaluate buffer using invalid block scope of type '%ls'. " BUGREPORT_MSG,
|
INVALID_SCOPE_ERR_MSG,
|
||||||
parser_get_block_desc( block_type ),
|
parser_get_block_desc( block_type ) );
|
||||||
|
|
||||||
|
debug( 1,
|
||||||
|
BUGREPORT_MSG,
|
||||||
PACKAGE_BUGREPORT );
|
PACKAGE_BUGREPORT );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2092,8 +2192,8 @@ int eval( const wchar_t *cmd, io_data_t *io, int block_type )
|
||||||
if( current_block == 0 )
|
if( current_block == 0 )
|
||||||
{
|
{
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"End of block mismatch. "
|
_(L"End of block mismatch. Program terminating.") );
|
||||||
L"Program terminating. "
|
debug( 0,
|
||||||
BUGREPORT_MSG,
|
BUGREPORT_MSG,
|
||||||
PACKAGE_BUGREPORT );
|
PACKAGE_BUGREPORT );
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
2
parser.h
2
parser.h
|
@ -283,7 +283,7 @@ void parser_pop_block();
|
||||||
/**
|
/**
|
||||||
Return a description of the given blocktype
|
Return a description of the given blocktype
|
||||||
*/
|
*/
|
||||||
wchar_t *parser_get_block_desc( int block );
|
const wchar_t *parser_get_block_desc( int block );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
54
proc.c
54
proc.c
|
@ -48,6 +48,7 @@ Some of the code in this file is based on code from the Glibc manual.
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
#include "signal.h"
|
#include "signal.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Size of message buffer
|
Size of message buffer
|
||||||
|
@ -139,7 +140,7 @@ static int job_remove( job_t *j )
|
||||||
|
|
||||||
if( j != curr )
|
if( j != curr )
|
||||||
{
|
{
|
||||||
debug( 1, L"Job inconsistency" );
|
debug( 1, _( L"Job inconsistency" ) );
|
||||||
sanity_lose();
|
sanity_lose();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -477,7 +478,7 @@ void job_handle_signal ( int signal, siginfo_t *info, void *con )
|
||||||
*/
|
*/
|
||||||
static void format_job_info( const job_t *j, const wchar_t *status )
|
static void format_job_info( const job_t *j, const wchar_t *status )
|
||||||
{
|
{
|
||||||
fwprintf (stdout, L"\rJob %d, \'%ls\' has %ls", j->job_id, j->command, status);
|
fwprintf (stdout, _( L"\rJob %d, \'%ls\' has %ls" ), j->job_id, j->command, status);
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
tputs(clr_eol,1,&writeb);
|
tputs(clr_eol,1,&writeb);
|
||||||
fwprintf (stdout, L"\n" );
|
fwprintf (stdout, L"\n" );
|
||||||
|
@ -553,14 +554,16 @@ int job_reap( int interactive )
|
||||||
{
|
{
|
||||||
if( proc_is_job )
|
if( proc_is_job )
|
||||||
fwprintf( stdout,
|
fwprintf( stdout,
|
||||||
L"fish: Job %d, \'%ls\' terminated by signal %ls (%ls)",
|
_( L"%ls: Job %d, \'%ls\' terminated by signal %ls (%ls)" ),
|
||||||
|
program_name,
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command,
|
j->command,
|
||||||
sig2wcs(WTERMSIG(p->status)),
|
sig2wcs(WTERMSIG(p->status)),
|
||||||
sig_description( WTERMSIG(p->status) ) );
|
sig_description( WTERMSIG(p->status) ) );
|
||||||
else
|
else
|
||||||
fwprintf( stdout,
|
fwprintf( stdout,
|
||||||
L"fish: Process %d, \'%ls\' from job %d, \'%ls\' terminated by signal %ls (%ls)",
|
_( L"%ls: Process %d, \'%ls\' from job %d, \'%ls\' terminated by signal %ls (%ls)" ),
|
||||||
|
program_name,
|
||||||
p->pid,
|
p->pid,
|
||||||
p->argv[0],
|
p->argv[0],
|
||||||
j->job_id,
|
j->job_id,
|
||||||
|
@ -590,7 +593,7 @@ int job_reap( int interactive )
|
||||||
{
|
{
|
||||||
if( !j->skip_notification )
|
if( !j->skip_notification )
|
||||||
{
|
{
|
||||||
format_job_info( j, L"ended" );
|
format_job_info( j, _( L"ended" ) );
|
||||||
found=1;
|
found=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -606,7 +609,7 @@ int job_reap( int interactive )
|
||||||
*/
|
*/
|
||||||
if( !j->skip_notification )
|
if( !j->skip_notification )
|
||||||
{
|
{
|
||||||
format_job_info( j, L"stopped" );
|
format_job_info( j, _( L"stopped" ) );
|
||||||
found=1;
|
found=1;
|
||||||
}
|
}
|
||||||
j->notified = 1;
|
j->notified = 1;
|
||||||
|
@ -805,7 +808,7 @@ static void read_try( job_t *j )
|
||||||
if( errno != EAGAIN )
|
if( errno != EAGAIN )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"An error occured while reading output from code block" );
|
_( L"An error occured while reading output from code block" ) );
|
||||||
wperror( L"read_try" );
|
wperror( L"read_try" );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -848,7 +851,7 @@ void job_continue (job_t *j, int cont)
|
||||||
if( tcsetpgrp (0, j->pgid) )
|
if( tcsetpgrp (0, j->pgid) )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not send job %d ('%ls') to foreground",
|
_( L"Could not send job %d ('%ls') to foreground" ),
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command );
|
j->command );
|
||||||
wperror( L"tcsetpgrp" );
|
wperror( L"tcsetpgrp" );
|
||||||
|
@ -860,7 +863,7 @@ void job_continue (job_t *j, int cont)
|
||||||
if( tcsetattr (0, TCSADRAIN, &j->tmodes))
|
if( tcsetattr (0, TCSADRAIN, &j->tmodes))
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not send job %d ('%ls') to foreground",
|
_( L"Could not send job %d ('%ls') to foreground" ),
|
||||||
j->job_id,
|
j->job_id,
|
||||||
j->command );
|
j->command );
|
||||||
wperror( L"tcsetattr" );
|
wperror( L"tcsetattr" );
|
||||||
|
@ -972,7 +975,7 @@ void job_continue (job_t *j, int cont)
|
||||||
signal_block();
|
signal_block();
|
||||||
if( tcsetpgrp (0, getpid()) )
|
if( tcsetpgrp (0, getpid()) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not return shell to foreground" );
|
debug( 1, _( L"Could not return shell to foreground" ) );
|
||||||
wperror( L"tcsetpgrp" );
|
wperror( L"tcsetpgrp" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -982,7 +985,7 @@ void job_continue (job_t *j, int cont)
|
||||||
*/
|
*/
|
||||||
if( tcgetattr (0, &j->tmodes) )
|
if( tcgetattr (0, &j->tmodes) )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not return shell to foreground" );
|
debug( 1, _( L"Could not return shell to foreground" ) );
|
||||||
wperror( L"tcgetattr" );
|
wperror( L"tcgetattr" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -992,7 +995,7 @@ void job_continue (job_t *j, int cont)
|
||||||
*/
|
*/
|
||||||
if( tcsetattr (0, TCSADRAIN, &shell_modes))
|
if( tcsetattr (0, TCSADRAIN, &shell_modes))
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not return shell to foreground" );
|
debug( 1, _( L"Could not return shell to foreground" ) );
|
||||||
wperror( L"tcsetattr" );
|
wperror( L"tcsetattr" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1015,17 +1018,15 @@ void proc_sanity_check()
|
||||||
|
|
||||||
|
|
||||||
validate_pointer( j->command,
|
validate_pointer( j->command,
|
||||||
L"Job command",
|
_( L"Job command" ),
|
||||||
0 );
|
0 );
|
||||||
validate_pointer( j->first_process,
|
validate_pointer( j->first_process,
|
||||||
L"Process list pointer",
|
_( L"Process list pointer" ),
|
||||||
0 );
|
0 );
|
||||||
validate_pointer( j->next,
|
validate_pointer( j->next,
|
||||||
L"Job list pointer",
|
_( L"Job list pointer" ),
|
||||||
1 );
|
1 );
|
||||||
validate_pointer( j->command,
|
|
||||||
L"Job command",
|
|
||||||
0 );
|
|
||||||
/*
|
/*
|
||||||
More than one foreground job?
|
More than one foreground job?
|
||||||
*/
|
*/
|
||||||
|
@ -1034,8 +1035,7 @@ void proc_sanity_check()
|
||||||
if( fg_job != 0 )
|
if( fg_job != 0 )
|
||||||
{
|
{
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"More than one job in foreground:\n"
|
_( L"More than one job in foreground: job 1: '%ls' job 2: '%ls'"),
|
||||||
L"job 1: %ls\njob 2: %ls",
|
|
||||||
fg_job->command,
|
fg_job->command,
|
||||||
j->command );
|
j->command );
|
||||||
sanity_lose();
|
sanity_lose();
|
||||||
|
@ -1046,16 +1046,15 @@ void proc_sanity_check()
|
||||||
p = j->first_process;
|
p = j->first_process;
|
||||||
while( p )
|
while( p )
|
||||||
{
|
{
|
||||||
validate_pointer( p->argv, L"Process argument list", 0 );
|
validate_pointer( p->argv, _( L"Process argument list" ), 0 );
|
||||||
validate_pointer( p->argv[0], L"Process name", 0 );
|
validate_pointer( p->argv[0], _( L"Process name" ), 0 );
|
||||||
validate_pointer( p->next, L"Process list pointer", 1 );
|
validate_pointer( p->next, _( L"Process list pointer" ), 1 );
|
||||||
validate_pointer( p->actual_cmd, L"Process command", 1 );
|
validate_pointer( p->actual_cmd, _( L"Process command" ), 1 );
|
||||||
|
|
||||||
if ( (p->stopped & (~0x00000001)) != 0 )
|
if ( (p->stopped & (~0x00000001)) != 0 )
|
||||||
{
|
{
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"Job %ls, process %ls "
|
_( L"Job '%ls', process '%ls' has inconsistent state \'stopped\'=%d" ),
|
||||||
L"has inconsistent state \'stopped\'=%d",
|
|
||||||
j->command,
|
j->command,
|
||||||
p->argv[0],
|
p->argv[0],
|
||||||
p->stopped );
|
p->stopped );
|
||||||
|
@ -1065,8 +1064,7 @@ void proc_sanity_check()
|
||||||
if ( (p->completed & (~0x00000001)) != 0 )
|
if ( (p->completed & (~0x00000001)) != 0 )
|
||||||
{
|
{
|
||||||
debug( 0,
|
debug( 0,
|
||||||
L"Job %ls, process %ls "
|
_( L"Job '%ls', process '%ls' has inconsistent state \'completed\'=%d" ),
|
||||||
L"has inconsistent state \'completed\'=%d",
|
|
||||||
j->command,
|
j->command,
|
||||||
p->argv[0],
|
p->argv[0],
|
||||||
p->completed );
|
p->completed );
|
||||||
|
|
27
reader.c
27
reader.c
|
@ -74,6 +74,7 @@ commence.
|
||||||
#include "function.h"
|
#include "function.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "signal.h"
|
#include "signal.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Maximum length of prefix string when printing completion
|
Maximum length of prefix string when printing completion
|
||||||
|
@ -295,7 +296,7 @@ static void term_donate()
|
||||||
{
|
{
|
||||||
if( errno != EINTR )
|
if( errno != EINTR )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not set terminal mode for new job" );
|
debug( 1, _( L"Could not set terminal mode for new job" ) );
|
||||||
wperror( L"tcsetattr" );
|
wperror( L"tcsetattr" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -316,7 +317,7 @@ static void term_steal()
|
||||||
{
|
{
|
||||||
if( errno != EINTR )
|
if( errno != EINTR )
|
||||||
{
|
{
|
||||||
debug( 1, L"Could not set terminal mode for shell" );
|
debug( 1, _( L"Could not set terminal mode for shell" ) );
|
||||||
wperror( L"tcsetattr" );
|
wperror( L"tcsetattr" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1593,7 +1594,7 @@ static void reader_interactive_init()
|
||||||
if (setpgid (shell_pgid, shell_pgid) < 0)
|
if (setpgid (shell_pgid, shell_pgid) < 0)
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Couldn't put the shell in its own process group");
|
_( L"Couldn't put the shell in its own process group" ));
|
||||||
wperror( L"setpgid" );
|
wperror( L"setpgid" );
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
@ -1603,7 +1604,7 @@ static void reader_interactive_init()
|
||||||
if( tcsetpgrp (STDIN_FILENO, shell_pgid) )
|
if( tcsetpgrp (STDIN_FILENO, shell_pgid) )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Couldn't grab control of terminal" );
|
_( L"Couldn't grab control of terminal" ) );
|
||||||
wperror( L"tcsetpgrp" );
|
wperror( L"tcsetpgrp" );
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -1635,7 +1636,7 @@ static void reader_interactive_init()
|
||||||
original_pid = getpid();
|
original_pid = getpid();
|
||||||
|
|
||||||
if( atexit( &exit_func ) )
|
if( atexit( &exit_func ) )
|
||||||
debug( 1, L"Could not set exit function" );
|
debug( 1, _( L"Could not set exit function" ) );
|
||||||
|
|
||||||
env_set( L"_", L"fish", ENV_GLOBAL );
|
env_set( L"_", L"fish", ENV_GLOBAL );
|
||||||
}
|
}
|
||||||
|
@ -2367,7 +2368,7 @@ void reader_pop()
|
||||||
|
|
||||||
if( data == 0 )
|
if( data == 0 )
|
||||||
{
|
{
|
||||||
debug( 0, L"Pop null reader block" );
|
debug( 0, _( L"Pop null reader block" ) );
|
||||||
sanity_lose();
|
sanity_lose();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2509,7 +2510,7 @@ static int read_i()
|
||||||
{
|
{
|
||||||
if( !prev_end_loop && first_job != 0 )
|
if( !prev_end_loop && first_job != 0 )
|
||||||
{
|
{
|
||||||
writestr(L"There are stopped jobs\n");
|
writestr(_( L"There are stopped jobs\n" ));
|
||||||
write_prompt();
|
write_prompt();
|
||||||
data->end_loop = 0;
|
data->end_loop = 0;
|
||||||
prev_end_loop=1;
|
prev_end_loop=1;
|
||||||
|
@ -3025,7 +3026,7 @@ wchar_t *reader_readline()
|
||||||
if( (!wchar_private(c)) && (c>31) && (c != 127) )
|
if( (!wchar_private(c)) && (c>31) && (c != 127) )
|
||||||
insert_char( c );
|
insert_char( c );
|
||||||
else
|
else
|
||||||
debug( 0, L"Unknown keybinding %d", c );
|
debug( 0, _( L"Unknown keybinding %d" ), c );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3095,7 +3096,7 @@ static int read_ni( int fd )
|
||||||
if( ferror( in_stream ) )
|
if( ferror( in_stream ) )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Error while reading commands" );
|
_( L"Error while reading commands" ) );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Reset buffer. We won't evaluate incomplete files.
|
Reset buffer. We won't evaluate incomplete files.
|
||||||
|
@ -3114,7 +3115,7 @@ static int read_ni( int fd )
|
||||||
if( fclose( in_stream ))
|
if( fclose( in_stream ))
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Error while closing input" );
|
_( L"Error while closing input" ) );
|
||||||
wperror( L"fclose" );
|
wperror( L"fclose" );
|
||||||
res = 1;
|
res = 1;
|
||||||
}
|
}
|
||||||
|
@ -3142,13 +3143,13 @@ static int read_ni( int fd )
|
||||||
if( acc_used > 1 )
|
if( acc_used > 1 )
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not convert input. Read %d bytes.",
|
_( L"Could not convert input. Read %d bytes." ),
|
||||||
acc_used-1 );
|
acc_used-1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Could not read input stream" );
|
_( L"Could not read input stream" ) );
|
||||||
}
|
}
|
||||||
res=1;
|
res=1;
|
||||||
}
|
}
|
||||||
|
@ -3157,7 +3158,7 @@ static int read_ni( int fd )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug( 1,
|
debug( 1,
|
||||||
L"Error while opening input" );
|
_( L"Error while opening input" ) );
|
||||||
wperror( L"fdopen" );
|
wperror( L"fdopen" );
|
||||||
free( buff );
|
free( buff );
|
||||||
res=1;
|
res=1;
|
||||||
|
|
63
signal.c
63
signal.c
|
@ -21,6 +21,7 @@ The library for various signal related issues
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Struct describing an entry for the lookup table used to convert
|
Struct describing an entry for the lookup table used to convert
|
||||||
|
@ -51,182 +52,182 @@ static struct lookup_entry lookup[] =
|
||||||
{
|
{
|
||||||
SIGHUP,
|
SIGHUP,
|
||||||
L"SIGHUP",
|
L"SIGHUP",
|
||||||
L"Terminal hung up"
|
N_( L"Terminal hung up" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGINT,
|
SIGINT,
|
||||||
L"SIGINT",
|
L"SIGINT",
|
||||||
L"Quit request from job control (^C)"
|
N_( L"Quit request from job control (^C)" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGQUIT,
|
SIGQUIT,
|
||||||
L"SIGQUIT",
|
L"SIGQUIT",
|
||||||
L"Quit request from job control with core dump (^\\)"
|
N_( L"Quit request from job control with core dump (^\\)" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGILL,
|
SIGILL,
|
||||||
L"SIGILL",
|
L"SIGILL",
|
||||||
L"Illegal instruction"
|
N_( L"Illegal instruction" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGTRAP,
|
SIGTRAP,
|
||||||
L"SIGTRAP",
|
L"SIGTRAP",
|
||||||
L"Trace or breakpoint trap"
|
N_( L"Trace or breakpoint trap" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGABRT,
|
SIGABRT,
|
||||||
L"SIGABRT",
|
L"SIGABRT",
|
||||||
L"Abort"
|
N_( L"Abort" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGBUS,
|
SIGBUS,
|
||||||
L"SIGBUS",
|
L"SIGBUS",
|
||||||
L"Misaligned address error"
|
N_( L"Misaligned address error" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGFPE,
|
SIGFPE,
|
||||||
L"SIGFPE",
|
L"SIGFPE",
|
||||||
L"Floating point exception"
|
N_( L"Floating point exception" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGKILL,
|
SIGKILL,
|
||||||
L"SIGKILL",
|
L"SIGKILL",
|
||||||
L"Forced quit"
|
N_( L"Forced quit" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGUSR1,
|
SIGUSR1,
|
||||||
L"SIGUSR1",
|
L"SIGUSR1",
|
||||||
L"User defined signal 1"
|
N_( L"User defined signal 1" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGUSR2, L"SIGUSR2",
|
SIGUSR2, L"SIGUSR2",
|
||||||
L"User defined signal 2"
|
N_( L"User defined signal 2" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGSEGV,
|
SIGSEGV,
|
||||||
L"SIGSEGV",
|
L"SIGSEGV",
|
||||||
L"Address boundary error"
|
N_( L"Address boundary error" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGPIPE,
|
SIGPIPE,
|
||||||
L"SIGPIPE",
|
L"SIGPIPE",
|
||||||
L"Broken pipe"
|
N_( L"Broken pipe" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGALRM,
|
SIGALRM,
|
||||||
L"SIGALRM",
|
L"SIGALRM",
|
||||||
L"Timer expired"
|
N_( L"Timer expired" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGTERM,
|
SIGTERM,
|
||||||
L"SIGTERM",
|
L"SIGTERM",
|
||||||
L"Polite quit request"
|
N_( L"Polite quit request" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGCHLD,
|
SIGCHLD,
|
||||||
L"SIGCHLD",
|
L"SIGCHLD",
|
||||||
L"Child process status changed"
|
N_( L"Child process status changed" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGCONT,
|
SIGCONT,
|
||||||
L"SIGCONT",
|
L"SIGCONT",
|
||||||
L"Continue previously stopped process"
|
N_( L"Continue previously stopped process" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGSTOP,
|
SIGSTOP,
|
||||||
L"SIGSTOP",
|
L"SIGSTOP",
|
||||||
L"Forced stop"
|
N_( L"Forced stop" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGTSTP,
|
SIGTSTP,
|
||||||
L"SIGTSTP",
|
L"SIGTSTP",
|
||||||
L"Stop request from job control (^Z)"
|
N_( L"Stop request from job control (^Z)" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGTTIN,
|
SIGTTIN,
|
||||||
L"SIGTTIN",
|
L"SIGTTIN",
|
||||||
L"Stop from terminal input"
|
N_( L"Stop from terminal input" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGTTOU,
|
SIGTTOU,
|
||||||
L"SIGTTOU",
|
L"SIGTTOU",
|
||||||
L"Stop from terminal output"
|
N_( L"Stop from terminal output" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGURG,
|
SIGURG,
|
||||||
L"SIGURG",
|
L"SIGURG",
|
||||||
L"Urgent socket condition"
|
N_( L"Urgent socket condition" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGXCPU,
|
SIGXCPU,
|
||||||
L"SIGXCPU",
|
L"SIGXCPU",
|
||||||
L"CPU time limit exceeded"
|
N_( L"CPU time limit exceeded" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGXFSZ,
|
SIGXFSZ,
|
||||||
L"SIGXFSZ",
|
L"SIGXFSZ",
|
||||||
L"File size limit exceeded"
|
N_( L"File size limit exceeded" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGVTALRM,
|
SIGVTALRM,
|
||||||
L"SIGVTALRM",
|
L"SIGVTALRM",
|
||||||
L"Virtual timer expired"
|
N_( L"Virtual timer expired" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGPROF,
|
SIGPROF,
|
||||||
L"SIGPROF",
|
L"SIGPROF",
|
||||||
L"Profiling timer expired"
|
N_( L"Profiling timer expired" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGWINCH,
|
SIGWINCH,
|
||||||
L"SIGWINCH",
|
L"SIGWINCH",
|
||||||
L"Window size change"
|
N_( L"Window size change" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
SIGIO,
|
SIGIO,
|
||||||
L"SIGIO",
|
L"SIGIO",
|
||||||
L"Asynchronous IO event"
|
N_( L"Asynchronous IO event" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
#ifdef SIGPWR
|
#ifdef SIGPWR
|
||||||
{
|
{
|
||||||
SIGPWR,
|
SIGPWR,
|
||||||
L"SIGPWR",
|
L"SIGPWR",
|
||||||
L"Power failure"
|
N_( L"Power failure" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
SIGSYS,
|
SIGSYS,
|
||||||
L"SIGSYS",
|
L"SIGSYS",
|
||||||
L"Bad system call"
|
N_( L"Bad system call" )
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
|
@ -292,7 +293,7 @@ const wchar_t *sig_description( int sig )
|
||||||
{
|
{
|
||||||
if( lookup[i].signal == sig )
|
if( lookup[i].signal == sig )
|
||||||
{
|
{
|
||||||
return lookup[i].desc;
|
return _(lookup[i].desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return L"Unknown";
|
return L"Unknown";
|
||||||
|
|
53
tokenizer.c
53
tokenizer.c
|
@ -20,64 +20,62 @@
|
||||||
#include "tokenizer.h"
|
#include "tokenizer.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "wildcard.h"
|
#include "wildcard.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error string for unexpected end of string
|
Error string for unexpected end of string
|
||||||
*/
|
*/
|
||||||
#define EOL_ERROR L"Unexpected end of token"
|
#define EOL_ERROR _( L"Unexpected end of token" )
|
||||||
/**
|
/**
|
||||||
Error string for mismatched parenthesis
|
Error string for mismatched parenthesis
|
||||||
*/
|
*/
|
||||||
#define PARAN_ERROR L"Parenthesis mismatch"
|
#define PARAN_ERROR _( L"Parenthesis mismatch" )
|
||||||
/**
|
/**
|
||||||
Error string for invalid redirections
|
Error string for invalid redirections
|
||||||
*/
|
*/
|
||||||
#define REDIRECT_ERROR L"Invalid redirection"
|
#define REDIRECT_ERROR _( L"Invalid redirection" )
|
||||||
/**
|
/**
|
||||||
Error string for invalid input
|
Error string for invalid input
|
||||||
*/
|
*/
|
||||||
#define INPUT_ERROR L"Invalid input"
|
#define INPUT_ERROR _( L"Invalid input" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error string for when trying to pipe from fd 0
|
Error string for when trying to pipe from fd 0
|
||||||
*/
|
*/
|
||||||
#define PIPE_ERROR L"Can not use fd 0 as pipe output"
|
#define PIPE_ERROR _( L"Can not use fd 0 as pipe output" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Characters that separate tokens. They are ordered by frequency of occurrence to increase parsing speed.
|
Characters that separate tokens. They are ordered by frequency of occurrence to increase parsing speed.
|
||||||
*/
|
*/
|
||||||
#define SEP L" \n|\t;#\r<>^&"
|
#define SEP L" \n|\t;#\r<>^&"
|
||||||
/**
|
|
||||||
Tests if the tokenizer buffer is large enough to hold contents of
|
|
||||||
the specified length, and if not, reallocates the tokenizer buffer.
|
|
||||||
|
|
||||||
\return 0 if the system could not provide the memory needed, and 1 otherwise.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Maximum length of a string containing a file descriptor number
|
Maximum length of a string containing a file descriptor number
|
||||||
*/
|
*/
|
||||||
#define FD_STR_MAX_LEN 16
|
#define FD_STR_MAX_LEN 16
|
||||||
|
|
||||||
const static wchar_t *tok_desc[] =
|
static const wchar_t *tok_desc[] =
|
||||||
{
|
{
|
||||||
L"Tokenizer not yet initialized",
|
N_(L"Tokenizer not yet initialized"),
|
||||||
L"Tokenizer error",
|
N_( L"Tokenizer error" ),
|
||||||
L"Invalid token",
|
N_( L"Invalid token" ),
|
||||||
L"String",
|
N_( L"String" ),
|
||||||
L"Pipe",
|
N_( L"Pipe" ),
|
||||||
L"End of command",
|
N_( L"End of command" ),
|
||||||
L"Redirect output to file",
|
N_( L"Redirect output to file" ),
|
||||||
L"Append output to file",
|
N_( L"Append output to file" ),
|
||||||
L"Redirect input to file",
|
N_( L"Redirect input to file" ),
|
||||||
L"Redirect to file descriptor",
|
N_( L"Redirect to file descriptor" ),
|
||||||
L"Run job in background",
|
N_( L"Run job in background" ),
|
||||||
L"Comment"
|
N_( L"Comment" )
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Make sure the tokenizer buffer have room for a token of the specified size.
|
Tests if the tokenizer buffer is large enough to hold contents of
|
||||||
|
the specified length, and if not, reallocates the tokenizer buffer.
|
||||||
|
|
||||||
|
\return 0 if the system could not provide the memory needed, and 1 otherwise.
|
||||||
*/
|
*/
|
||||||
static int check_size( tokenizer *tok, size_t len )
|
static int check_size( tokenizer *tok, size_t len )
|
||||||
{
|
{
|
||||||
|
@ -484,7 +482,8 @@ static int my_iswspace( wchar_t c )
|
||||||
|
|
||||||
const wchar_t *tok_get_desc( int type )
|
const wchar_t *tok_get_desc( int type )
|
||||||
{
|
{
|
||||||
return tok_desc[type];
|
|
||||||
|
return _(tok_desc[type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
78
translate.c
Normal file
78
translate.c
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/** \file translate.c
|
||||||
|
|
||||||
|
Translation library, internally uses catgets
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
#if HAVE_GETTEXT
|
||||||
|
|
||||||
|
#define BUFF_COUNT 64
|
||||||
|
|
||||||
|
static string_buffer_t buff[BUFF_COUNT];
|
||||||
|
static int curr_buff=0;
|
||||||
|
|
||||||
|
const wchar_t *wgettext( const wchar_t *in )
|
||||||
|
{
|
||||||
|
char *mbs_in = wcs2str( in );
|
||||||
|
char *out = gettext( mbs_in );
|
||||||
|
wchar_t *wres=0;
|
||||||
|
|
||||||
|
sb_clear( &buff[curr_buff] );
|
||||||
|
sb_printf( &buff[curr_buff], L"%s", out );
|
||||||
|
wres = (wchar_t *)buff[curr_buff].buff;
|
||||||
|
curr_buff = (curr_buff+1)%BUFF_COUNT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
write( 2, res, strlen(res) );
|
||||||
|
*/
|
||||||
|
// debug( 1, L"%ls -> %s (%d) -> %ls (%d)\n", in, out, strlen(out) , wres, wcslen(wres) );
|
||||||
|
|
||||||
|
return wres;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void translate_init()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i<BUFF_COUNT; i++ )
|
||||||
|
sb_init( &buff[i] );
|
||||||
|
|
||||||
|
bindtextdomain( PACKAGE_NAME, LOCALEDIR );
|
||||||
|
textdomain( PACKAGE_NAME );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void translate_destroy()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i<BUFF_COUNT; i++ )
|
||||||
|
sb_destroy( &buff[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
const wchar_t *wgettext( const wchar_t *in )
|
||||||
|
{
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
|
void translate_init()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void translate_destroy()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
27
translate.h
Normal file
27
translate.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/** \file translate.h
|
||||||
|
|
||||||
|
Translation library, internally uses catgets
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
Shorthand for wgettext call
|
||||||
|
*/
|
||||||
|
#define _(wstr) wgettext(wstr)
|
||||||
|
|
||||||
|
/**
|
||||||
|
Noop, used to tell xgettext that a string should be translated, even though it is not directly sent to wgettext.
|
||||||
|
*/
|
||||||
|
#define N_(wstr) wstr
|
||||||
|
|
||||||
|
/**
|
||||||
|
Wide character wwrapper around the gettext function
|
||||||
|
*/
|
||||||
|
const wchar_t *wgettext( const wchar_t *in );
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initialize (or reinitialize) the translation library
|
||||||
|
\param lang The two-character language name, such as 'de' or 'en'
|
||||||
|
*/
|
||||||
|
void translate_init();
|
||||||
|
void translate_destroy();
|
11
wildcard.c
11
wildcard.c
|
@ -1,8 +1,8 @@
|
||||||
/** \file wildcard.c
|
/** \file wildcard.c
|
||||||
|
|
||||||
Fish needs it's own globbing implementation to support
|
Fish needs it's own globbing implementation to support
|
||||||
tab-expansion of globbed parameters. Also provides recursive
|
tab-expansion of globbed parameters. Also provides recursive
|
||||||
wildcards using **.
|
wildcards using **.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
#include "complete.h"
|
#include "complete.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "expand.h"
|
#include "expand.h"
|
||||||
|
#include "translate.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This flag is set in the flags parameter of wildcard_expand if the
|
This flag is set in the flags parameter of wildcard_expand if the
|
||||||
|
@ -272,11 +273,11 @@ void get_desc( wchar_t *fn, string_buffer_t *sb, int is_cmd )
|
||||||
sb_append2( sb, desc, L", ", (void *)0 );
|
sb_append2( sb, desc, L", ", (void *)0 );
|
||||||
if( sz < 0 )
|
if( sz < 0 )
|
||||||
{
|
{
|
||||||
sb_append( sb, L"unknown" );
|
sb_append( sb, _(L"unknown") );
|
||||||
}
|
}
|
||||||
else if( sz < 1 )
|
else if( sz < 1 )
|
||||||
{
|
{
|
||||||
sb_append( sb, L"empty" );
|
sb_append( sb, _( L"empty" ) );
|
||||||
}
|
}
|
||||||
else if( sz < 1024 )
|
else if( sz < 1024 )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue