Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
e9bce288
Commit
e9bce288
authored
Sep 29, 2011
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix zsh completion
parent
510b8c25
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
206 additions
and
367 deletions
+206
-367
extras/analyser/zsh.cpp
extras/analyser/zsh.cpp
+203
-365
extras/analyser/zsh_completion.sh
extras/analyser/zsh_completion.sh
+3
-2
No files found.
extras/analyser/zsh.cpp
View file @
e9bce288
/*****************************************************************************
* zsh.cpp: create zsh completion rule for vlc
*****************************************************************************
* Copyright © 2005-2008 the VideoLAN team
* $Id$
* Copyright © 2005-2011 the VideoLAN team
*
* Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
Rafaël Carré <funman@videolanorg>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -21,21 +21,26 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdio.h>
#include <map>
#include <string>
#include <sstream>
#include <utility>
#include <iostream>
#include <algorithm>
typedef
std
::
multimap
<
std
::
string
,
std
::
string
>
mumap
;
typedef
std
::
multimap
<
int
,
std
::
string
>
mcmap
;
typedef
std
::
pair
<
std
::
string
,
std
::
string
>
mpair
;
typedef
std
::
multimap
<
std
::
string
,
std
::
string
>
mumap
;
mumap
mods
;
typedef
std
::
pair
<
int
,
std
::
string
>
mcpair
;
typedef
std
::
multimap
<
int
,
std
::
string
>
mcmap
;
mcmap
mods2
;
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc_common.h>
#include <vlc/vlc.h>
...
...
@@ -45,418 +50,251 @@ typedef std::pair<int, std::string> mcpair;
#undef __PLUGIN__
#include <../src/modules/modules.h>
void
ParseModules
(
mumap
&
mods
,
mcmap
&
mods2
);
void
PrintModuleList
(
mumap
&
mods
,
mcmap
&
mods2
);
void
ParseOption
(
module_config_t
*
p_item
,
mumap
&
mods
,
mcmap
&
mods2
);
void
PrintOption
(
char
*
psz_option
,
char
i_short
,
char
*
psz_exlusive
,
char
*
psz_text
,
char
*
psz_longtext
,
char
*
psz_args
);
int
main
(
int
i_argc
,
const
char
**
ppsz_argv
)
static
void
ReplaceChars
(
char
*
str
)
{
mumap
mods
;
mcmap
mods2
;
/* Create a libvlc structure */
const
char
*
argv
[
i_argc
+
1
];
argv
[
0
]
=
"vlc"
;
for
(
int
i
=
0
;
i
<
i_argc
;
i
++
)
argv
[
i
+
1
]
=
ppsz_argv
[
i
];
libvlc_instance_t
*
p_libvlc_instance
=
libvlc_new
(
i_argc
+
1
,
argv
);
if
(
!
p_libvlc_instance
)
{
return
1
;
if
(
str
)
{
char
*
parser
;
while
((
parser
=
strchr
(
str
,
':'
)))
*
parser
=
';'
;
while
((
parser
=
strchr
(
str
,
'"'
)))
*
parser
=
'\''
;
while
((
parser
=
strchr
(
str
,
'`'
)))
*
parser
=
'\''
;
}
printf
(
"#compdef vlc cvlc rvlc svlc mvlc qvlc nvlc
\n\n
"
"#This file is autogenerated by zsh.cpp
\n
"
"typeset -A opt_args
\n
"
"local context state line ret=1
\n
"
"local modules
\n\n
"
);
PrintModuleList
(
mods
,
mods2
);
printf
(
"_arguments -S -s
\\\n
"
);
ParseModules
(
mods
,
mods2
);
printf
(
"
\"
(--module)-p[print help on module]:print help on module:($modules)
\"\\\n
"
);
printf
(
"
\"
(-p)--module[print help on module]:print help on module:($modules)
\"\\\n
"
);
printf
(
"
\"
(--help)-h[print help]
\"\\\n
"
);
printf
(
"
\"
(-h)--help[print help]
\"\\\n
"
);
printf
(
"
\"
(--longhelp)-H[print detailed help]
\"\\\n
"
);
printf
(
"
\"
(-H)--longhelp[print detailed help]
\"\\\n
"
);
printf
(
"
\"
(--list)-l[print a list of available modules]
\"\\\n
"
);
printf
(
"
\"
(-l)--list[print a list of available modules]
\"\\\n
"
);
printf
(
"
\"
--reset-config[reset the current config to the default values]
\"\\\n
"
);
printf
(
"
\"
--config[use alternate config file]
\"\\\n
"
);
printf
(
"
\"
--reset-plugins-cache[resets the current plugins cache]
\"\\\n
"
);
printf
(
"
\"
--version[print version information]
\"\\\n
"
);
printf
(
"
\"
*:Playlist item:->mrl
\"
&& ret=0
\n\n
"
);
printf
(
"case $state in
\n
"
);
printf
(
" mrl)
\n
"
);
printf
(
" _alternative 'files:file:_files' 'urls:URL:_urls' && ret=0
\n
"
);
printf
(
" ;;
\n
"
);
printf
(
"esac
\n\n
"
);
printf
(
"return ret
\n
"
);
libvlc_release
(
p_libvlc_instance
);
return
0
;
}
void
ParseModules
(
mumap
&
mods
,
mcmap
&
mods2
)
static
void
PrintOption
(
const
module_config_t
*
item
,
const
std
::
string
&
opt
,
const
std
::
string
&
excl
,
const
std
::
string
&
args
)
{
module_t
**
p_list
;
module_t
*
p_module
;
module_config_t
*
p_item
;
int
i_index
;
int
i_items
;
size_t
i_modules
;
/* List the plugins */
p_list
=
module_list_get
(
&
i_modules
);
if
(
!
p_list
)
return
;
for
(
i_index
=
0
;
i_index
<
i_modules
;
i_index
++
)
{
p_module
=
p_list
[
i_index
];
char
*
longtext
=
item
->
psz_longtext
;
char
*
text
=
item
->
psz_text
;
char
i_short
=
item
->
i_short
;
ReplaceChars
(
longtext
);
ReplaceChars
(
text
);
/* Exclude empty plugins (submodules don't have config options, they
* are stored in the parent module) */
if
(
p_module
->
parent
)
continue
;
// p_item = ((module_t *)p_module->p_parent)->p_config;
else
p_item
=
p_module
->
p_config
;
// printf( " #%s\n", p_module->psz_longname );
if
(
!
p_item
)
continue
;
i_items
=
0
;
do
{
if
(
CONFIG_ITEM
(
p_item
->
i_type
)
)
ParseOption
(
p_item
,
mods
,
mods2
);
#if 0
else if( p_item->i_type == CONFIG_CATEGORY )
printf( " #Category %d\n", p_item->i_value );
else if( p_item->i_type == CONFIG_SUBCATEGORY )
printf( " #Subcategory %d\n", p_item->i_value );
#endif
}
while
(
++
i_items
<
p_module
->
confsize
&&
p_item
++
);
if
(
!
longtext
||
strchr
(
longtext
,
'\n'
)
||
strchr
(
longtext
,
'('
))
longtext
=
text
;
}
module_list_free
(
p_list
);
}
printf
(
"
\"
"
);
void
PrintModuleList
(
mumap
&
mods
,
mcmap
&
mods2
)
{
module_t
**
p_list
=
NULL
;
module_t
*
p_module
;
int
i_index
;
int
i_items
;
size_t
i_modules
;
/* List the plugins */
p_list
=
module_list_get
(
&
i_modules
);
if
(
!
p_list
)
return
;
printf
(
"modules=
\"
"
);
for
(
i_index
=
0
;
i_index
<
i_modules
;
i_index
++
)
{
p_module
=
p_list
[
i_index
];
const
char
*
args_c
=
args
.
empty
()
?
""
:
"="
;
if
(
i_short
)
{
printf
(
"(-%c"
,
i_short
);
/* Exclude empty plugins (submodules don't have config options, they
* are stored in the parent module) */
if
(
!
excl
.
empty
())
printf
(
"%s"
,
excl
.
c_str
());
if
(
strcmp
(
p_module
->
psz_object_name
,
"main"
)
)
{
mods
.
insert
(
mpair
(
p_module
->
psz_capability
,
p_module
->
psz_object_name
)
);
module_config_t
*
p_config
=
p_module
->
p_config
;
i_items
=
0
;
if
(
p_config
)
do
{
/* Hack: required subcategory is stored in i_min */
if
(
p_config
->
i_type
==
CONFIG_SUBCATEGORY
)
{
mods2
.
insert
(
mcpair
(
p_config
->
value
.
i
,
p_module
->
psz_object_name
)
);
}
}
while
(
i_items
++
<
p_module
->
i_config_items
&&
p_config
++
);
if
(
p_module
->
parent
)
continue
;
printf
(
"%s "
,
p_module
->
psz_object_name
);
}
printf
(
")--%s%s[%s]"
,
opt
.
c_str
(),
args_c
,
text
);
if
(
!
args
.
empty
())
printf
(
":%s:%s"
,
longtext
,
args
.
c_str
());
printf
(
"
\"\\\n
\"
(--%s%s)-%c"
,
opt
.
c_str
(),
excl
.
c_str
(),
i_short
);
}
else
{
if
(
!
excl
.
empty
())
printf
(
"(%s)"
,
excl
.
c_str
());
printf
(
"--%s"
,
opt
.
c_str
());
if
(
!
excl
.
empty
())
printf
(
"%s"
,
args_c
);
}
printf
(
"
\"\n\n
"
);
module_list_free
(
p_list
);
return
;
printf
(
"[%s]"
,
text
);
if
(
!
args
.
empty
())
printf
(
":%s:%s"
,
longtext
,
args
.
c_str
());
puts
(
"
\"\\
"
);
}
void
ParseOption
(
module_config_t
*
p_item
,
mumap
&
mods
,
mcmap
&
mods2
)
static
void
ParseOption
(
const
module_config_t
*
item
)
{
char
*
psz_arguments
=
NULL
;
char
*
psz_exclusive
;
char
*
psz_option
;
char
*
psz_name
;
char
*
psz_text
;
char
*
psz_longtext
;
std
::
string
excl
,
args
;
std
::
string
list
;
std
::
pair
<
mcmap
::
iterator
,
mcmap
::
iterator
>
range
;
std
::
pair
<
mumap
::
iterator
,
mumap
::
iterator
>
range_mod
;
#define DUP( x ) strdup( x ? x : "" )
//Skip deprecated options
if
(
p_item
->
b_removed
)
if
(
item
->
b_removed
)
return
;
switch
(
p_item
->
i_type
)
switch
(
item
->
i_type
)
{
case
CONFIG_ITEM_MODULE
:
{
std
::
pair
<
mumap
::
iterator
,
mumap
::
iterator
>
range
=
mods
.
equal_range
(
p_item
->
psz_type
);
std
::
string
list
=
(
*
range
.
first
).
second
;
if
(
range
.
first
!=
range
.
second
)
{
while
(
range
.
first
++
!=
range
.
second
)
{
list
=
list
.
append
(
" "
);
list
=
list
.
append
(
range
.
first
->
second
);
}
asprintf
(
&
psz_arguments
,
"(%s)"
,
list
.
c_str
()
);
range_mod
=
mods
.
equal_range
(
item
->
psz_type
);
list
=
(
*
range_mod
.
first
).
second
;
if
(
range_mod
.
first
!=
range_mod
.
second
)
{
while
(
range_mod
.
first
++
!=
range_mod
.
second
)
list
+=
" "
+
range_mod
.
first
->
second
;
args
=
std
::
string
(
"("
)
+
list
+
")"
;
}
}
break
;
case
CONFIG_ITEM_MODULE_CAT
:
{
std
::
pair
<
mcmap
::
iterator
,
mcmap
::
iterator
>
range
=
mods2
.
equal_range
(
p_item
->
min
.
i
);
std
::
string
list
=
(
*
range
.
first
).
second
;
if
(
range
.
first
!=
range
.
second
)
{
while
(
range
.
first
++
!=
range
.
second
)
{
list
=
list
.
append
(
" "
);
list
=
list
.
append
(
range
.
first
->
second
);
}
asprintf
(
&
psz_arguments
,
"(%s)"
,
list
.
c_str
()
);
range
=
mods2
.
equal_range
(
item
->
min
.
i
);
list
=
(
*
range
.
first
).
second
;
if
(
range
.
first
!=
range
.
second
)
{
while
(
range
.
first
++
!=
range
.
second
)
list
+=
" "
+
range
.
first
->
second
;
args
=
std
::
string
(
"("
)
+
list
+
")"
;
}
}
break
;
case
CONFIG_ITEM_MODULE_LIST_CAT
:
{
std
::
pair
<
mcmap
::
iterator
,
mcmap
::
iterator
>
range
=
mods2
.
equal_range
(
p_item
->
min
.
i
);
std
::
string
list
=
"_values -s , "
;
list
=
list
.
append
(
p_item
->
psz_name
);
while
(
range
.
first
!=
range
.
second
)
{
list
=
list
.
append
(
" '*"
);
list
=
list
.
append
(
range
.
first
->
second
);
list
=
list
.
append
(
"'"
);
++
range
.
first
;
}
psz_arguments
=
strdup
(
list
.
c_str
()
);
}
range
=
mods2
.
equal_range
(
item
->
min
.
i
);
args
=
std
::
string
(
"_values -s , "
)
+
item
->
psz_name
;
while
(
range
.
first
!=
range
.
second
)
args
+=
" '*"
+
range
.
first
++->
second
+
"'"
;
break
;
case
CONFIG_ITEM_STRING
:
if
(
p_item
->
i_list
)
{
int
i
=
p_item
->
i_list
-
1
;
char
*
psz_list
;
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_list
,
"%s
\\
:
\\\"
%s
\\\"
"
,
p_item
->
ppsz_list
[
i
],
p_item
->
ppsz_list_text
[
i
]
);
else
psz_list
=
strdup
(
p_item
->
ppsz_list
[
i
]);
char
*
psz_list2
;
while
(
i
>
1
)
{
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_list2
,
"%s
\\
:
\\\"
%s
\\\"
%s"
,
p_item
->
ppsz_list
[
i
-
1
],
p_item
->
ppsz_list_text
[
i
-
1
],
psz_list
);
else
asprintf
(
&
psz_list2
,
"
\\\"
%s
\\\"
%s"
,
p_item
->
ppsz_list
[
i
-
1
],
psz_list
);
free
(
psz_list
);
psz_list
=
psz_list2
;
i
--
;
}
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_arguments
,
"((%s))"
,
psz_list
);
else
asprintf
(
&
psz_arguments
,
"(%s)"
,
psz_list
);
free
(
psz_list
);
}
break
;
case
CONFIG_ITEM_LOADFILE
:
case
CONFIG_ITEM_SAVEFILE
:
psz_arguments
=
strdup
(
"_files"
)
;
args
=
"_files"
;
break
;
case
CONFIG_ITEM_DIRECTORY
:
psz_arguments
=
strdup
(
"_files -/"
)
;
args
=
"_files -/"
;
break
;
case
CONFIG_ITEM_STRING
:
case
CONFIG_ITEM_INTEGER
:
if
(
p_item
->
i_list
)
{
int
i
=
p_item
->
i_list
-
1
;
char
*
psz_list
;
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_list
,
"%d
\\
:
\\\"
%s
\\\"
"
,
p_item
->
pi_list
[
i
],
p_item
->
ppsz_list_text
[
i
]
);
else
psz_list
=
strdup
(
p_item
->
ppsz_list
[
i
]);
char
*
psz_list2
;
while
(
i
>
0
)
{
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_list2
,
"%d
\\
:
\\\"
%s
\\\"
%s"
,
p_item
->
pi_list
[
i
-
1
],
p_item
->
ppsz_list_text
[
i
-
1
],
psz_list
);
else
asprintf
(
&
psz_list2
,
"
\\\"
%s
\\\"
%s"
,
p_item
->
ppsz_list
[
i
-
1
],
psz_list
);
free
(
psz_list
);
psz_list
=
psz_list2
;
i
--
;
}
if
(
p_item
->
ppsz_list_text
)
asprintf
(
&
psz_arguments
,
"((%s))"
,
psz_list
);
else
asprintf
(
&
psz_arguments
,
"(%s)"
,
psz_list
);
free
(
psz_list
);
}
else
if
(
p_item
->
min
.
i
!=
0
||
p_item
->
max
.
i
!=
0
)
{
// p_control = new RangedIntConfigControl( p_this, p_item, parent );
}
else
{
// p_control = new IntegerConfigControl( p_this, p_item, parent );
if
(
item
->
i_list
==
0
)
break
;
for
(
int
i
=
0
;
i
<
item
->
i_list
;
i
++
)
{
std
::
string
val
;
if
(
item
->
ppsz_list_text
)
{
const
char
*
text
=
item
->
ppsz_list_text
[
i
];
if
(
item
->
i_type
==
CONFIG_ITEM_INTEGER
)
{
std
::
stringstream
s
;
s
<<
item
->
pi_list
[
i
];
val
=
s
.
str
()
+
"
\\
:
\\\"
"
+
text
;
}
else
{
if
(
!
item
->
ppsz_list
[
i
]
||
!
text
)
continue
;
val
=
item
->
ppsz_list
[
i
]
+
std
::
string
(
"
\\
:
\\\"
"
)
+
text
;
}
}
else
val
=
std
::
string
(
"
\\\"
"
)
+
item
->
ppsz_list
[
i
];
list
=
val
+
"
\\\"
"
+
list
;
}
break
;
case
CONFIG_ITEM_KEY
:
// p_control = new KeyConfigControl( p_this, p_item, parent );
break
;
if
(
item
->
ppsz_list_text
)
args
=
std
::
string
(
"(("
)
+
list
+
"))"
;
else
args
=
std
::
string
(
"("
)
+
list
+
")"
;
case
CONFIG_ITEM_FLOAT
:
// p_control = new FloatConfigControl( p_this, p_item, parent );
break
;
case
CONFIG_ITEM_BOOL
:
// p_control = new BoolConfigControl( p_this, p_item, parent );
asprintf
(
&
psz_exclusive
,
"--no%s --no-%s"
,
p_item
->
psz_name
,
p_item
->
psz_name
);
psz_name
=
DUP
(
p_item
->
psz_name
);
psz_text
=
DUP
(
p_item
->
psz_text
);
psz_longtext
=
DUP
(
p_item
->
psz_longtext
);
PrintOption
(
psz_name
,
p_item
->
i_short
,
psz_exclusive
,
psz_text
,
psz_longtext
,
psz_arguments
);
free
(
psz_name
);
free
(
psz_text
);
free
(
psz_longtext
);
free
(
psz_exclusive
);
asprintf
(
&
psz_exclusive
,
"--no%s --%s"
,
p_item
->
psz_name
,
p_item
->
psz_name
);
asprintf
(
&
psz_option
,
"no-%s"
,
p_item
->
psz_name
);
psz_text
=
DUP
(
p_item
->
psz_text
);
psz_longtext
=
DUP
(
p_item
->
psz_longtext
);
PrintOption
(
psz_option
,
p_item
->
i_short
,
psz_exclusive
,
psz_text
,
psz_longtext
,
psz_arguments
);
free
(
psz_text
);
free
(
psz_longtext
);
free
(
psz_exclusive
);
free
(
psz_option
);
asprintf
(
&
psz_exclusive
,
"--no-%s --%s"
,
p_item
->
psz_name
,
p_item
->
psz_name
);
asprintf
(
&
psz_option
,
"no%s"
,
p_item
->
psz_name
);
psz_text
=
DUP
(
p_item
->
psz_text
);
psz_longtext
=
DUP
(
p_item
->
psz_longtext
);
PrintOption
(
psz_option
,
p_item
->
i_short
,
psz_exclusive
,
psz_text
,
psz_longtext
,
psz_arguments
);
free
(
psz_text
);
free
(
psz_longtext
);
free
(
psz_exclusive
);
free
(
psz_option
);
excl
=
std
::
string
(
"--no"
)
+
item
->
psz_name
+
" --no-"
+
item
->
psz_name
;
PrintOption
(
item
,
item
->
psz_name
,
excl
,
args
);
excl
=
std
::
string
(
"--no"
)
+
item
->
psz_name
+
" --"
+
item
->
psz_name
;
PrintOption
(
item
,
std
::
string
(
"no-"
)
+
item
->
psz_name
,
excl
,
args
);
excl
=
std
::
string
(
"--no-"
)
+
item
->
psz_name
+
" --"
+
item
->
psz_name
;
PrintOption
(
item
,
std
::
string
(
"no"
)
+
item
->
psz_name
,
excl
,
args
);
return
;
case
CONFIG_ITEM_KEY
:
case
CONFIG_SECTION
:
// p_control = new SectionConfigControl( p_this, p_item, parent );
break
;
case
CONFIG_ITEM_FLOAT
:
default:
break
;
}
psz_name
=
DUP
(
p_item
->
psz_name
);
psz_text
=
DUP
(
p_item
->
psz_text
);
psz_longtext
=
DUP
(
p_item
->
psz_longtext
);
PrintOption
(
psz_name
,
p_item
->
i_short
,
NULL
,
psz_text
,
psz_longtext
,
psz_arguments
);
free
(
psz_name
);
free
(
psz_text
);
free
(
psz_longtext
);
free
(
psz_arguments
);
PrintOption
(
item
,
item
->
psz_name
,
""
,
args
);
}
void
PrintOption
(
char
*
psz_option
,
char
i_short
,
char
*
psz_exclusive
,
char
*
psz_text
,
char
*
psz_longtext
,
char
*
psz_args
)
static
void
PrintModuleList
()
{
char
*
foo
;
if
(
psz_text
)
{
while
(
(
foo
=
strchr
(
psz_text
,
':'
)))
*
foo
=
';'
;
while
(
(
foo
=
strchr
(
psz_text
,
'"'
)))
*
foo
=
'\''
;
while
(
(
foo
=
strchr
(
psz_text
,
'`'
)))
*
foo
=
'\''
;
}
if
(
psz_longtext
)
{
while
(
(
foo
=
strchr
(
psz_longtext
,
':'
)))
*
foo
=
';'
;
while
(
(
foo
=
strchr
(
psz_longtext
,
'"'
)))
*
foo
=
'\''
;
while
(
(
foo
=
strchr
(
psz_longtext
,
'`'
)))
*
foo
=
'\''
;
}
if
(
!
psz_longtext
||
strchr
(
psz_longtext
,
'\n'
)
||
strchr
(
psz_longtext
,
'('
)
)
psz_longtext
=
psz_text
;
if
(
i_short
)
{
if
(
!
psz_exclusive
)
printf
(
"
\"
(-%c)--%s%s[%s]"
,
i_short
,
psz_option
,
psz_args
?
"="
:
""
,
psz_text
);
else
printf
(
"
\"
(-%c%s)--%s%s[%s]"
,
i_short
,
psz_exclusive
,
psz_option
,
psz_args
?
"="
:
""
,
psz_text
);
if
(
psz_args
)
printf
(
":%s:%s
\"\\\n
"
,
psz_longtext
,
psz_args
);
else
printf
(
"
\"\\\n
"
);
printf
(
"vlc_modules=
\"
"
);
printf
(
"
\"
(--%s%s)-%c[%s]"
,
psz_option
,
psz_exclusive
?
psz_exclusive
:
""
,
i_short
,
psz_text
);
if
(
psz_args
)
printf
(
":%s:%s
\"\\\n
"
,
psz_longtext
,
psz_args
);
else
printf
(
"
\"\\\n
"
);
size_t
modules
=
0
;
module_t
**
list
=
module_list_get
(
&
modules
);
if
(
!
list
||
modules
==
0
)
return
;
for
(
module_t
**
pmod
=
list
;
pmod
<
&
list
[
modules
];
pmod
++
)
{
/* Exclude empty plugins (submodules don't have config options, they
* are stored in the parent module) */
module_t
*
mod
=
*
pmod
;
if
(
!
strcmp
(
mod
->
pp_shortcuts
[
0
],
"main"
))
continue
;
const
char
*
capability
=
mod
->
psz_capability
?
mod
->
psz_capability
:
""
;
mods
.
insert
(
mpair
(
capability
,
mod
->
pp_shortcuts
[
0
]));
module_config_t
*
max
=
&
mod
->
p_config
[
mod
->
i_config_items
];
for
(
module_config_t
*
cfg
=
mod
->
p_config
;
cfg
&&
cfg
<
max
;
cfg
++
)
if
(
cfg
->
i_type
==
CONFIG_SUBCATEGORY
)
mods2
.
insert
(
mcpair
(
cfg
->
value
.
i
,
mod
->
pp_shortcuts
[
0
]));
if
(
!
mod
->
parent
)
printf
(
"%s "
,
mod
->
pp_shortcuts
[
0
]);
}
else
{
if
(
psz_exclusive
)
printf
(
"
\"
(%s)--%s%s[%s]"
,
psz_exclusive
,
psz_option
,
psz_args
?
"="
:
""
,
psz_text
);
else
printf
(
"
\"
--%s[%s]"
,
psz_option
,
psz_text
);
puts
(
"
\"\n
"
);
module_list_free
(
list
);
}
if
(
psz_args
)
printf
(
":%s:%s
\"\\\n
"
,
psz_longtext
,
psz_args
);
else
printf
(
"
\"\\\n
"
);
static
void
ParseModules
()
{
size_t
modules
=
0
;
module_t
**
list
=
module_list_get
(
&
modules
);
if
(
!
list
||
modules
==
0
)
return
;
for
(
module_t
**
pmod
=
list
;
pmod
<
&
list
[
modules
];
pmod
++
)
{
/* Exclude empty plugins (submodules don't have config options, they
* are stored in the parent module) */
module_t
*
mod
=
*
pmod
;
if
(
mod
->
parent
)
continue
;
module_config_t
*
max
=
mod
->
p_config
+
mod
->
confsize
;
for
(
module_config_t
*
cfg
=
mod
->
p_config
;
cfg
&&
cfg
<
max
;
cfg
++
)
if
(
CONFIG_ITEM
(
cfg
->
i_type
))
ParseOption
(
cfg
);
}
module_list_free
(
list
);
}
int
main
(
int
argc
,
const
char
**
argv
)
{
libvlc_instance_t
*
libvlc
=
libvlc_new
(
argc
,
argv
);
if
(
!
libvlc
)
return
1
;
puts
(
"#compdef vlc cvlc rvlc svlc mvlc qvlc nvlc
\n
"
"#This file is autogenerated by zsh.cpp"
"typeset -A opt_args"
"local context state line ret=1"
"local modules
\n
"
);
PrintModuleList
();
puts
(
"_arguments -S -s
\\
"
);
ParseModules
();
puts
(
"
\"
(--module)-p[print help on module]:print help on module:($vlc_modules)
\"\\
"
);
puts
(
"
\"
(-p)--module[print help on module]:print help on module:($vlc_modules)
\"\\
"
);
puts
(
"
\"
(--help)-h[print help]
\"\\
"
);
puts
(
"
\"
(-h)--help[print help]
\"\\
"
);
puts
(
"
\"
(--longhelp)-H[print detailed help]
\"\\
"
);
puts
(
"
\"
(-H)--longhelp[print detailed help]
\"\\
"
);
puts
(
"
\"
(--list)-l[print a list of available modules]
\"\\
"
);
puts
(
"
\"
(-l)--list[print a list of available modules]
\"\\
"
);
puts
(
"
\"
--reset-config[reset the current config to the default values]
\"\\
"
);
puts
(
"
\"
--config[use alternate config file]
\"\\
"
);
puts
(
"
\"
--reset-plugins-cache[resets the current plugins cache]
\"\\
"
);
puts
(
"
\"
--version[print version information]
\"\\
"
);
puts
(
"
\"
*:Playlist item:->mrl
\"
&& ret=0
\n
"
);
puts
(
"case $state in"
);
puts
(
" mrl)"
);
puts
(
" _alternative 'files:file:_files' 'urls:URL:_urls' && ret=0"
);
puts
(
" ;;"
);
puts
(
"esac
\n
"
);
puts
(
"return ret"
);
libvlc_release
(
libvlc
);
return
0
;
}
extras/analyser/zsh_completion.sh
View file @
e9bce288
...
...
@@ -27,7 +27,7 @@ export VLC_PLUGIN_PATH
function
find_libvlc
{
[
-z
"
$SUFFIX
"
]
&&
return
0
# linking will fail if lib isn't found
for
i
in
$BUILDDIR
/
src/.libs/libvlc.
$SUFFIX
$BUILDDIR
/src
/libvlc.
$SUFFIX
;
do
for
i
in
$BUILDDIR
/
lib/.libs/libvlc.
$SUFFIX
$BUILDDIR
/lib
/libvlc.
$SUFFIX
;
do
[
-e
$i
]
&&
LIBVLC
=
$i
&&
return
0
done
return
1
...
...
@@ -54,6 +54,7 @@ if ! find_libvlccore; then
fi
export
LD_LIBRARY_PATH
=
$BUILDDIR
/src/.libs
CXXFLAGS
=
"
$CXXFLAGS
-g -O0"
if
[
-e
../../extras/contrib/config.mak
-a
!
"
`
grep
HOST ../../extras/contrib/config.mak 2>/dev/null|awk
'{print $3}'
`
"
!=
"
$HOST
"
]
;
then
CXXFLAGS
=
"-I../../extras/contrib/include"
...
...
@@ -77,7 +78,7 @@ Please press enter to verify that all the VLC modules are shown"
./zsh_gen
-vv
--list
echo
"
If they are shown, press enter to see if you can debug the problem
It will be reproduced by running
\"
./zsh_gen -vv
v
\"
"
It will be reproduced by running
\"
./zsh_gen -vv
\"
"
read
i
./zsh_gen
--plugin-path
=
$BUILDDIR
-vv
exit
1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment