Browse Source

- Changed mw to mutt-wizard

- Added new Dependencies and Optional Dependencies
pull/870/head
Braulio Henrique Marques Souto 2 years ago
parent
commit
44cf82b197
3 changed files with 123 additions and 102 deletions
  1. +29
    -24
      README.md
  2. +4
    -4
      share/mailcap
  3. +90
    -74
      share/mutt-wizard.muttrc

+ 29
- 24
README.md View File

@@ -30,11 +30,12 @@ Specifically, this wizard:


#### Dependencies #### Dependencies


- `neomutt` - the email client. (If you are using Gentoo GNU/Linux, you will need the `sasl` use flag to be enabled)
- `neomutt` - the email client (If you are using Gentoo GNU/Linux, you will need the `sasl` use flag to be enabled).
- `curl` - tests connections (required at install). - `curl` - tests connections (required at install).
- `isync` - downloads and syncs the mail (required if storing IMAP mail locally). - `isync` - downloads and syncs the mail (required if storing IMAP mail locally).
- `msmtp` - sends the email. - `msmtp` - sends the email.
- `pass` - safely encrypts passwords (required at install). - `pass` - safely encrypts passwords (required at install).
- `xdg-utils` - desktop integration utilities.


**Note**: There's a chance of errors if you use a slow-release distro like **Note**: There's a chance of errors if you use a slow-release distro like
Ubuntu, Debian, or Mint. If you get errors in `neomutt`, install the most Ubuntu, Debian, or Mint. If you get errors in `neomutt`, install the most
@@ -42,7 +43,7 @@ recent version manually or manually remove the offending lines in the config in
`/usr/share/mutt-wizard/mutt-wizard.muttrc`. `/usr/share/mutt-wizard/mutt-wizard.muttrc`.


```bash ```bash
git clone https://github.com/LukeSmithxyz/mutt-wizard
git clone https://github.com/brauliohms/mutt-wizard
cd mutt-wizard cd mutt-wizard
sudo make install sudo make install
``` ```
@@ -55,34 +56,39 @@ A user of Arch-based distros can also install the current mutt-wizard release fr
- `pam-gnupg` - Automatically logs you into your GPG key on login so you will - `pam-gnupg` - Automatically logs you into your GPG key on login so you will
never need to input your password once logged on to your system. Check the never need to input your password once logged on to your system. Check the
repo and directions out [here](https://github.com/cruegge/pam-gnupg). repo and directions out [here](https://github.com/cruegge/pam-gnupg).
- `lynx` - view HTML email in neomutt.
- `lynx` or `w3m` or `links2` - view HTML email in neomutt.
- `notmuch` - index and search mail. Install it and run `notmuch setup`, tell - `notmuch` - index and search mail. Install it and run `notmuch setup`, tell
it that your mail is in `~/.local/share/mail/` (although `mw` will do this
it that your mail is in `~/.local/share/mail/` (although `mutt-wizard` will do this
automatically if you haven't set notmuch up before). You can run it in mutt automatically if you haven't set notmuch up before). You can run it in mutt
with <kbd>ctrl-f</kbd>. Run `notmuch new` to process new mail. with <kbd>ctrl-f</kbd>. Run `notmuch new` to process new mail.
- `abook` - a terminal-based address book. Pressing tab while typing an address - `abook` - a terminal-based address book. Pressing tab while typing an address
to send mail to will suggest contacts that are in your abook. to send mail to will suggest contacts that are in your abook.
- `urlview` - outputs urls in mail to browser. - `urlview` - outputs urls in mail to browser.
- `cronie` - (or any other major cronjob manager) to set up automatic mail
- `crontab` - (or any other major cronjob manager) to set up automatic mail
syncing. syncing.
- `mpop` - If you want to use POP protocol instead of IMAP. - `mpop` - If you want to use POP protocol instead of IMAP.

- `aspell` - GNU Aspell spell-checker.
- `dunst` - dmenu style notification.
- `feh` - Image viewer.
- `mpv` - Media file viewer (audio and videos).
- `zathura` - Pdf viewer.
- `font-awesome` - Iconic font and CSS toolkit.


## Usage ## Usage


The mutt-wizard runs via the command `mw`. Once setup is complete, you'll use
The mutt-wizard runs via the command `mutt-wizard`. Once setup is complete, you'll use
`neomutt` to access your mail. `neomutt` to access your mail.


- `mw -a you@email.com` -- add a new email account
- `mw -l` -- list existing accounts
- `mw -y your@email.com` -- sync an email account
- `mw -Y` -- sync all configured email accounts
- `mw -d` -- choose an account to delete
- `mw -D your@email.com` -- delete account settings without confirmation
- `mw -t 30` -- toggle automatic mailsync to every 30 minutes
- `mw -T` -- toggle mailsync without specifying minutes (default is 10)
- `mw -r` -- reorder account shortcut numbers
- `pass edit mw-your@email.com` -- revise an account's password
- `mutt-wizard -a you@email.com` -- add a new email account
- `mutt-wizard -l` -- list existing accounts
- `mutt-wizard -y your@email.com` -- sync an email account
- `mutt-wizard -Y` -- sync all configured email accounts
- `mutt-wizard -d` -- choose an account to delete
- `mutt-wizard -D your@email.com` -- delete account settings without confirmation
- `mutt-wizard -t 30` -- toggle automatic mailsync to every 30 minutes
- `mutt-wizard -T` -- toggle mailsync without specifying minutes (default is 10)
- `mutt-wizard -r` -- reorder account shortcut numbers
- `pass edit mutt-wizard-your@email.com` -- revise an account's password


### Options usable when adding an account ### Options usable when adding an account


@@ -135,9 +141,9 @@ To give you an example of the interface, here's an idea:
- `pam-gnupg` - Automatically logs you into your GPG key on login, so you will - `pam-gnupg` - Automatically logs you into your GPG key on login, so you will
never need to input your password once logged on to your system. Check the never need to input your password once logged on to your system. Check the
repo and directions out [here](https://github.com/cruegge/pam-gnupg). repo and directions out [here](https://github.com/cruegge/pam-gnupg).
- `lynx` - View HTML email in neomutt.
- `lynx` or `w3m` or `links2` - view HTML email in neomutt.
- `notmuch` - Index and search mail. Install it and run `notmuch setup`, tell it - `notmuch` - Index and search mail. Install it and run `notmuch setup`, tell it
that your mail is in `~/.local/share/mail/` (although `mw` will do this
that your mail is in `~/.local/share/mail/` (although `mutt-wizard` will do this
automatically if you haven't set notmuch up before). You can run it in mutt automatically if you haven't set notmuch up before). You can run it in mutt
with <kbd>ctrl-f</kbd>. Run `notmuch new` to process new mail. with <kbd>ctrl-f</kbd>. Run `notmuch new` to process new mail.
- `abook` - A terminal-based address book. Pressing tab while typing an address - `abook` - A terminal-based address book. Pressing tab while typing an address
@@ -146,13 +152,12 @@ To give you an example of the interface, here's an idea:


## New stuff and improvements since the original release ## New stuff and improvements since the original release


- `mw` is now scriptable with command-line options and can run successfully
- `mutt-wizard` is now an installed program instead of just a script needed to be kept in
your mutt folder. Is now scriptable with command-line options and can run successfully
without any interaction, making it possible to deploy in a script. without any interaction, making it possible to deploy in a script.
- `isync`/`mbsync` has replaced `offlineimap` as the backend. Offlineimap was - `isync`/`mbsync` has replaced `offlineimap` as the backend. Offlineimap was
error-prone, bloated, used obsolete Python 2 modules, and required separate error-prone, bloated, used obsolete Python 2 modules, and required separate
steps to install the system. steps to install the system.
- `mw` is now an installed program instead of just a script needed to be kept in
your mutt folder.
- `dialog` is no longer used and the interface is simply text commands. - `dialog` is no longer used and the interface is simply text commands.
- More autogenerated shortcuts that allow quickly moving and copying mail - More autogenerated shortcuts that allow quickly moving and copying mail
between boxes. between boxes.
@@ -167,7 +172,7 @@ To give you an example of the interface, here's an idea:
- Script is POSIX sh compliant. - Script is POSIX sh compliant.
- Error handling for the many people who don't read or follow directions. Fewer - Error handling for the many people who don't read or follow directions. Fewer
errors generally. errors generally.
- Addition of a manual `man mw`
- Addition of a manual `man mutt-wizard`
- Now handles POP protocol via `mpop` for those who prefer it (add an account - Now handles POP protocol via `mpop` for those who prefer it (add an account
with the `-p` option). POP configs are still generated automatically. with the `-p` option). POP configs are still generated automatically.


@@ -209,7 +214,7 @@ To give you an example of the interface, here's an idea:
might be other hurdles or two-factor authentication you have to jump through. might be other hurdles or two-factor authentication you have to jump through.
Some, for example, will want you to create a separate IMAP password, etc. Some, for example, will want you to create a separate IMAP password, etc.
- `isync` is not fully UTF-8 compatible, so non-Latin characters may be garbled - `isync` is not fully UTF-8 compatible, so non-Latin characters may be garbled
(although sync should succeed). `mw` will also not auto-create mailbox
(although sync should succeed). `mutt-wizard` will also not auto-create mailbox
shortcuts since it is looking for English mailbox names. I strongly recommend shortcuts since it is looking for English mailbox names. I strongly recommend
you to set your email language to English on your mail server to avoid these you to set your email language to English on your mail server to avoid these
problems. problems.


+ 4
- 4
share/mailcap View File

@@ -1,9 +1,9 @@
text/plain; $EDITOR %s ;
text/html; /usr/local/lib/mutt-wizard/openfile %s ; nametemplate=%s.html
text/plain; nano %s ;
text/html; /usr/lib/mutt-wizard/openfile %s ; nametemplate=%s.html
text/html; lynx -assume_charset=%{charset} -display_charset=utf-8 -dump -width=1024 %s; nametemplate=%s.html; copiousoutput; text/html; lynx -assume_charset=%{charset} -display_charset=utf-8 -dump -width=1024 %s; nametemplate=%s.html; copiousoutput;
image/*; /usr/local/lib/mutt-wizard/openfile %s ;
image/*; /usr/lib/mutt-wizard/openfile %s ;
video/*; setsid mpv --quiet %s &; copiousoutput video/*; setsid mpv --quiet %s &; copiousoutput
audio/*; mpv %s ; audio/*; mpv %s ;
application/pdf; /usr/local/lib/mutt-wizard/openfile %s ;
application/pdf; /usr/lib/mutt-wizard/openfile %s ;
application/pgp-encrypted; gpg -d '%s'; copiousoutput; application/pgp-encrypted; gpg -d '%s'; copiousoutput;
application/pgp-keys; gpg --import '%s'; copiousoutput; application/pgp-keys; gpg --import '%s'; copiousoutput;

+ 90
- 74
share/mutt-wizard.muttrc View File

@@ -5,8 +5,9 @@
# If you want to override any settings, set those in your muttrc. # If you want to override any settings, set those in your muttrc.
set mailcap_path = $HOME/.config/mutt/mailcap:/usr/local/share/mutt-wizard/mailcap:$mailcap_path set mailcap_path = $HOME/.config/mutt/mailcap:/usr/local/share/mutt-wizard/mailcap:$mailcap_path
set mime_type_query_command = "file --mime-type -b %s" set mime_type_query_command = "file --mime-type -b %s"
set date_format="%y/%m/%d %I:%M%p"
set index_format="%2C %Z %?X?A& ? %D %-15.15F %s (%-4.4c)"
set date_format="%y/%m/%d %H:%M"
set index_format=" %2C %zs %zc %zt %D %-28.28L %?M?(%1M)& %4cr ? %?X? &·? %s"
#set index_format="%2C %Z %?X?A& ? %D %-15.15F %s (%-4.4c)"
set sort = 'reverse-date' set sort = 'reverse-date'
set smtp_authenticators = 'gssapi:login' set smtp_authenticators = 'gssapi:login'
set query_command = "abook --mutt-query '%s'" set query_command = "abook --mutt-query '%s'"
@@ -27,6 +28,19 @@ auto_view text/html # automatically show html (mailcap uses lynx)
auto_view application/pgp-encrypted auto_view application/pgp-encrypted
#set display_filter = "tac | sed '/\\\[-- Autoview/,+1d' | tac" # Suppress autoview messages. #set display_filter = "tac | sed '/\\\[-- Autoview/,+1d' | tac" # Suppress autoview messages.
alternative_order text/plain text/enriched text/html alternative_order text/plain text/enriched text/html
set to_chars=""
ifdef crypt_chars set crypt_chars = " "
set flag_chars = " "

tag-transforms "replied" "↻ " \
"encrytpted" "" \
"signed" "" \
"attachment" "" \

tag-formats "replied" "GR" \
"encrypted" "GE" \
"signed" "GS" \
"attachment" "GA" \


bind index,pager i noop bind index,pager i noop
bind index,pager g noop bind index,pager g noop
@@ -48,6 +62,7 @@ bind pager j next-line
bind pager k previous-line bind pager k previous-line
bind pager l view-attachments bind pager l view-attachments
bind index D delete-message bind index D delete-message
bind pager D delete-message
bind index U undelete-message bind index U undelete-message
bind index L limit bind index L limit
bind index h noop bind index h noop
@@ -70,6 +85,7 @@ bind index \005 next-undeleted # Mouse wheel
bind pager \031 previous-line # Mouse wheel bind pager \031 previous-line # Mouse wheel
bind pager \005 next-line # Mouse wheel bind pager \005 next-line # Mouse wheel
bind editor <Tab> complete-query bind editor <Tab> complete-query
bind index \em recall-message


macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox" macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox"
macro index,pager Mi ";<save-message>=INBOX<enter>" "move mail to inbox" macro index,pager Mi ";<save-message>=INBOX<enter>" "move mail to inbox"
@@ -97,7 +113,7 @@ macro index,pager Ca ";<copy-message>=Archive<enter>" "copy mail to archive"


macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook" macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook"
macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read" macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
macro index O "<shell-escape>mw -Y<enter>" "run mw -Y to sync all mail"
macro index O "<shell-escape>mutt-wizard -Y<enter>" "run mutt-wizard -Y to sync all mail"
macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>printf 'Enter a search term to find with notmuch: '; read x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/ for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern" macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>printf 'Enter a search term to find with notmuch: '; read x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/ for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern"
macro index A "<limit>all\n" "show all messages (undo limit)" macro index A "<limit>all\n" "show all messages (undo limit)"


@@ -115,74 +131,74 @@ bind index,pager \Cp sidebar-prev-new
bind index,pager \Cn sidebar-next-new bind index,pager \Cn sidebar-next-new
bind index,pager B sidebar-toggle-visible bind index,pager B sidebar-toggle-visible


# Default index colors:
color index yellow default '.*'
color index_author red default '.*'
color index_number blue default
color index_subject cyan default '.*'
# New mail is boldened:
color index brightyellow black "~N"
color index_author brightred black "~N"
color index_subject brightcyan black "~N"
# Tagged mail is highlighted:
color index brightyellow blue "~T"
color index_author brightred blue "~T"
color index_subject brightcyan blue "~T"
# Other colors and aesthetic settings:
mono bold bold
mono underline underline
mono indicator reverse
mono error bold
color normal default default
color indicator brightblack white
color sidebar_highlight red default
color sidebar_divider brightblack black
color sidebar_flagged red black
color sidebar_new green black
color normal brightyellow default
color error red default
color tilde black default
color message cyan default
color markers red white
color attachment white default
color search brightmagenta default
color status brightyellow black
color hdrdefault brightgreen default
color quoted green default
color quoted1 blue default
color quoted2 cyan default
color quoted3 yellow default
color quoted4 red default
color quoted5 brightred default
color signature brightgreen default
color bold black default
color underline black default
color normal default default
# Regex highlighting:
color header brightmagenta default "^From"
color header brightcyan default "^Subject"
color header brightwhite default "^(CC|BCC)"
color header blue default ".*"
color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body green default "\`[^\`]*\`" # Green text between ` and `
color body brightblue default "^# \.*" # Headings as bold blue
color body brightcyan default "^## \.*" # Subheadings as bold cyan
color body brightgreen default "^### \.*" # Subsubheadings as bold green
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body brightcyan default "[;:][-o][)/(|]" # emoticons
color body brightcyan default "[;:][)(|]" # emoticons
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
color body red default "(BAD signature)"
color body cyan default "(Good signature)"
color body brightblack default "^gpg: Good signature .*"
color body brightyellow default "^gpg: "
color body brightyellow red "^gpg: BAD signature from.*"
mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
## Default index colors:
#color index yellow default '.*'
#color index_author red default '.*'
#color index_number blue default
#color index_subject cyan default '.*'
#
## New mail is boldened:
#color index brightyellow black "~N"
#color index_author brightred black "~N"
#color index_subject brightcyan black "~N"
#
## Tagged mail is highlighted:
#color index brightyellow blue "~T"
#color index_author brightred blue "~T"
#color index_subject brightcyan blue "~T"
#
## Other colors and aesthetic settings:
#mono bold bold
#mono underline underline
#mono indicator reverse
#mono error bold
#color normal default default
#color indicator brightblack white
#color sidebar_highlight red default
#color sidebar_divider brightblack black
#color sidebar_flagged red black
#color sidebar_new green black
#color normal brightyellow default
#color error red default
#color tilde black default
#color message cyan default
#color markers red white
#color attachment white default
#color search brightmagenta default
#color status brightyellow black
#color hdrdefault brightgreen default
#color quoted green default
#color quoted1 blue default
#color quoted2 cyan default
#color quoted3 yellow default
#color quoted4 red default
#color quoted5 brightred default
#color signature brightgreen default
#color bold black default
#color underline black default
#color normal default default
#
## Regex highlighting:
#color header brightmagenta default "^From"
#color header brightcyan default "^Subject"
#color header brightwhite default "^(CC|BCC)"
#color header blue default ".*"
#color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
#color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
#color body green default "\`[^\`]*\`" # Green text between ` and `
#color body brightblue default "^# \.*" # Headings as bold blue
#color body brightcyan default "^## \.*" # Subheadings as bold cyan
#color body brightgreen default "^### \.*" # Subsubheadings as bold green
#color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
#color body brightcyan default "[;:][-o][)/(|]" # emoticons
#color body brightcyan default "[;:][)(|]" # emoticons
#color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
#color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
#color body red default "(BAD signature)"
#color body cyan default "(Good signature)"
#color body brightblack default "^gpg: Good signature .*"
#color body brightyellow default "^gpg: "
#color body brightyellow red "^gpg: BAD signature from.*"
#mono body bold "^gpg: Good signature"
#mono body bold "^gpg: BAD signature from.*"
#color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"

Loading…
Cancel
Save