Comments (58)
Hi there. Found this thread from https://neomutt.org/contrib/vim-keys. Maybe the doc could be updated to indicate that this feature is not under development anymore :)
from neomutt.
@pickfire this is my .muttrc
:
source "gpg -d ~/.mutt/accounts/$MUTT_ACCOUNT |"
source ~/.mutt/keybindings
source ~/.mutt/colorscheme
folder-hook . 'push <collapse-all>'
set realname = 'Francisco Lopes'
set editor = 'vim'
set folder = 'imaps://imap.gmail.com:993'
set spoolfile = '+INBOX'
set hostname = gmail.com
set mail_check = 60
set timeout = 300
set imap_keepalive = 300
set postponed = '+[GMail]/Drafts'
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
set certificate_file = ~/.mutt/certificates
set move = no
set sort = 'threads'
set sort_aux = 'reverse-last-date-received'
set auto_tag = yes
set record = ''
set quit = ask-yes
set include
set uncollapse_jump
set imap_check_subscribed
unset collapse_unread
ignore 'DKIM-Signature:'
ignore 'DomainKey-Signature:'
ignore 'Authentication-Results:'
hdr_order Date From To Cc
auto_view text/html application/pdf
alternative_order text/plain text/enriched text/html
# GooBook
set query_command = "goobook query '%s'"
macro index,pager a "<pipe-message>goobook add<return>" 'add sender to google contacts'
# Sidebar configuration
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/?%S'
set sidebar_visible
set mail_check_stats
- This is my sole keybindings file:
bind editor ^T complete
bind editor <tab> complete-query
bind editor <space> noop
bind attach <space> view-mailcap
#------------------------------------------------------------
# Vi Key Bindings
#------------------------------------------------------------
# Moving around
bind attach,browser,index gg first-entry
bind attach,browser,index G last-entry
bind pager gg top
bind pager G bottom
bind pager k previous-line
bind pager j next-line
# Scrolling
bind attach,browser,pager,index \CF next-page
bind attach,browser,pager,index \CB previous-page
bind attach,browser,pager,index \Cu half-up
bind attach,browser,pager,index \Cd half-down
bind browser,pager \Ce next-line
bind browser,pager \Cy previous-line
bind index \Ce next-line
bind index \Cy previous-line
bind pager,index dd delete-message
# Mail & Reply
bind pager,index gr group-reply
bind index \Cm list-reply # Doesn't work currently
# Threads
bind browser,pager,index N search-opposite
bind pager,index dT delete-thread
bind pager,index dt delete-subthread
bind pager,index gt next-thread
bind pager,index gT previous-thread
bind index za collapse-thread
bind index zA collapse-all # Missing :folddisable/foldenable
# Refreshing
bind index \Cl imap-fetch-mail
- NeoMutt version:
β―β―β― mutt -v
NeoMutt 20160916 (1.7.0)
Copyright (C) 1996-2016 Michael R. Elkins and others.
Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.
Mutt is free software, and you are welcome to redistribute it
under certain conditions; type `mutt -vv' for details.
System: Linux 4.7.5-1-ARCH (x86_64)
libidn: 1.33 (compiled with 1.33)
hcache backend: GDBM version 1.12. 16/05/2016 (built May 31 2016 18:36:34)
Compiler:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc-multilib/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --enable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 6.2.1 20160830 (GCC)
Configure options: '--prefix=/usr' '--sysconfdir=/etc' '--enable-debug' '--enable-pgp' '--enable-gpgme' '--enable-notmuch' '--enable-pop' '--enable-imap' '--enable-smtp' '--enable-hcache' '--enable-sidebar' '--with-gss=/usr' '--with-ssl=/usr' '--with-sasl' '--with-curses=/usr' '--with-regex' '--with-idn' 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro' 'CPPFLAGS=-D_FORTIFY_SOURCE=2'
Compilation CFLAGS: -Wall -pedantic -Wno-long-long -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong
Compile options:
+CRYPT_BACKEND_CLASSIC_PGP +CRYPT_BACKEND_CLASSIC_SMIME +CRYPT_BACKEND_GPGME
+DEBUG -DL_STANDALONE +ENABLE_NLS -EXACT_ADDRESS -HOMESPOOL -LOCALES_HACK
-SUN_ATTACHMENT +HAVE_BKGDSET +HAVE_COLOR +HAVE_CURS_SET +HAVE_GETADDRINFO
+HAVE_GETSID +HAVE_ICONV +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_YESEXPR
+HAVE_LIBIDN +HAVE_META -HAVE_REGCOMP +HAVE_RESIZETERM +HAVE_START_COLOR
+HAVE_TYPEAHEAD +HAVE_WC_FUNCS +ICONV_NONTRANS -USE_COMPRESSED +USE_DOTLOCK
+USE_FCNTL -USE_FLOCK -USE_FMEMOPEN +USE_GNU_REGEX +USE_GSS +USE_HCACHE
+USE_IMAP +USE_NOTMUCH -USE_NNTP +USE_POP +USE_SASL -USE_SETGID +USE_SIDEBAR
+USE_SMTP -USE_SSL_GNUTLS +USE_SSL_OPENSSL
-DOMAIN
-MIXMASTER
-ISPELL
SENDMAIL="/usr/sbin/sendmail"
MAILPATH="/var/mail"
PKGDATADIR="/usr/share/mutt"
SYSCONFDIR="/etc"
EXECSHELL="/bin/sh"
patch-attach-headers-color-neomutt
patch-compress-neomutt
patch-cond-date-neomutt
patch-encrypt-to-self-neomutt
patch-fmemopen-neomutt
patch-forgotten-attachments-neomutt
patch-ifdef-neomutt
patch-index-color-neomutt
patch-initials-neomutt
patch-keywords-neomutt
patch-limit-current-thread-neomutt
patch-lmdb-neomutt
patch-multiple-fcc-neomutt
patch-nested-if-neomutt
patch-new-mail-neomutt
patch-nntp-neomutt
patch-notmuch-neomutt
patch-progress-neomutt
patch-quasi-delete-neomutt
patch-reply-with-xorig-neomutt
patch-sensible-browser-neomutt
patch-sidebar-neomutt
patch-skip-quoted-neomutt
patch-smime-encrypt-self-neomutt
patch-status-color-neomutt
patch-timeout-neomutt
patch-tls-sni-neomutt
To learn more about NeoMutt, visit: http://www.neomutt.org/
If you find a bug in NeoMutt, please raise an issue at:
https://github.com/neomutt/neomutt/issues
or send an email at: <[email protected]>
The case is, with that:
- if I remove the
gr
binding I have no binding for group reply, not only that, but Mutt doesn't show any binding for group reply at the top. - if I comment out the line importing the vim-bindings,
g
not only works but is also shown again at the top of Mutt as the binding for group reply. - using the vim-bindings with the
gr
binding,gr
not only works but is also displayed at the Mutt top as the group reply binding.
I'd like to use g
alone, but it stopped working with the original vim-bindings.
from neomutt.
sidebar
Well, we've got cursor line up/down, page up/down.
What else sounds useful?
- Shift line up/down (Ctrl-E/Ctrl-Y in vim)?
- Search in sidebar (and reverse search)?
- Numbered jump to mailbox (like the Index jump to email)?
As for the Index, a few things spring to mind (but would need code to be written):
- Top/Middle/Bottom of screen (H/M/L in vim)
- Open fold, close fold (in addition to toggle)
- Visual mode (highlighting of tagged files)
- vip/vap - highlight paragraph (thread)
- dip/dap - delete paragraph (thread)
And how about a command mode (for real power!)
- :g/spam/d
- :q (I type this way too often)
Someone in another forum wanted to be able to to the Sidebar, then use the normal motion keys. Until the new window code lands, that isn't going to be possible.
from neomutt.
@pickfire That's a great start (and welcome to NeoMutt).
These bindings are certain to improve my productivity :-)
from neomutt.
I've created a new branch contrib/vim-keybindings and added your config and simple README. You can commit to it directly.
from neomutt.
Great idea. I have my own ad-hoc vim like bindings set but would love to switch to something more thought out.
from neomutt.
I have my own ad-hoc vim like bindings
Show us.
- What should we add from your set?
- What can't you do that would be useful?
from neomutt.
FWIW those are the ones I have configured: http://git.the-compiler.org/configs/tree/mutt/muttrc#n32
from neomutt.
What should we add from your set?
As I've said, What I have is quite adhoc so it's hard for me to tell what is actually vim like vs what I've gotten used to and seems vim inspired. Here's a few that I'm fairly confident about:
bind index \Cu half-up
bind pager \Cu half-up
bind index \Cd half-down
bind pager \Cd half-down
What can't you do that would be useful?
Sidebar navigation is something I haven't yet figured out how to do in a vim like way. That's 1 glaring example for me, will need more time to ponder over other things.
from neomutt.
For the sidebar:
- I'd like a more searchy way to navigate. Incremental search on the
sidebar would be very useful to me. I know I can already kind of do this
without the sidebar just with normal directory changing but it would be
nicer to do it directly there IMO. - Having sidebar directories nest and fold would of course be wonderful
as well. - Quite nice would also be the ability to toggle between 2 sidebar
directories a laC-6
in vim.
In General:
- I'd love to see something like vim's
:jumps
,C-o
andC-i
imitated. - marks in the index/pager might be incredibly useful.
- Vimscript! I kid, I kid...
On 06/19, Richard Russon wrote:
sidebar
Well, we've got cursor line up/down, page up/down.
What else sounds useful?
- Shift line up/down (Ctrl-E/Ctrl-Y in vim)?
- Search in sidebar (and reverse search)?
- Numbered jump to mailbox (like the Index jump to email)?
As for the Index, a few things spring to mind (but would need code to be written):
- Top/Middle/Bottom of screen (H/M/L in vim)
- Open fold, close fold (in addition to toggle)
- Visual mode (highlighting of tagged files)
- vip/vap - highlight paragraph (thread)
- dip/dap - delete paragraph (thread)
And how about a command mode (for real power!)
- :g/spam/d
- :q (I type this way too often)
Someone in another forum wanted to be able to to the Sidebar, then use the normal motion keys. Until the new window code lands, that isn't going to be possible.
You are receiving this because you commented.
Reply to this email directly or view it on GitHub:
#56 (comment)
from neomutt.
They're some good ideas. I shall have a think about how much effort each would be.
Some of the simpler ideas would be great for NeoMutt-newbies / mentoring.
Vimscript
I was thinking Lua -- it's light and simple.
It's certainly not a crazy idea, but I have no idea where to start.
from neomutt.
The bind index \Cm list-reply
changes <Return>
to list-reply
on my Mutt. Which means I can no longer use the Enter key to view a message.
from neomutt.
@flatcap Thanks a lot for the quick response and the welcome.
@rgrinberg Ah, thanks for reminding me about the half-up and half-down feature.
@flatcap for your information:
- - Shift line up/down (Ctrl-E/Ctrl-Y in vim)? (My first plan)
- - Search in sidebar (and reverse search)? haven't tried sidebar
- - Numbered jump to mailbox (like the Index jump to email)?
- I might just use the number as a count, not sure if I could do that
??? As for the Index, a few things spring to mind (but would need code to be written):
EDIT: TODO moved to https://github.com/neomutt/neomutt.github.io/edit/master/_contrib/vim-keybindings.md
@rgrinberg Wow, you have great ideas, I have zero idea how to implement those things. And I haven't heard of mentor system here.
@darnir The list-reply
doesn't work yet for unknown reason. I need to take a look into it.
Edited: Fixed tickboxes (flatcap)
from neomutt.
Shift line up/down
I was suggesting an idea to manipulate the Sidebar in the same way
- And how about a command mode (for real power!), isn't there :?
Yes, that starts Mutt's command mode.
It wouldn't be too hard to add some extra "vim-like" commands to the list.
:q (I type this way too often) (me too)
Such as the 'q' command :-)
- What is :g/spam/d ?
I was suggesting the global command in vim. :g/REGEX/COMMAND
For example:
:g/spam/d
Find each line in the file matching the string 'spam' and delete it ('d')
I think this could be a powerful way to quickly perform commands on certain emails. It would be equivalent to:
shift-t
-- tag messages matching- type in regex
;
-- perform command on tagged messagesd
-- e.g. delete
from neomutt.
@rgrinberg I have added the feature to scroll half page in 2bab308
@flatcap Sorry for not replying you, I have no idea what do you want.
More suggestions are welcomed. Currently I think the delete key needs some discussion as I think dd
might not be so useful as in mutt. I think D
might do or ^d
from neomutt.
@pickfire
Don't worry. I was just trying to list all the possible ideas for making Mutt more vim-like.
Most require code changes so can be ignored, for now.
from neomutt.
@flatcap I am not sure how to build neomutt the normal way, I can't find the INSTALL page and it isn't in README, maybe we need a more beginner-friendly guide?
from neomutt.
@pickfire
A build HOWTO is on my list of things to do. I need more volunteers :-)
Here's a basic build with some sensible configure options:
git clone https://github.com/neomutt/neomutt.git
cd neomutt
autoreconf --install
./configure --enable-imap --enable-notmuch --enable-pop --enable-sidebar --enable-hcache
make
./mutt
Afterwards you might want to run make install
Although a smarter move would be to install your distro's version of mutt and just put neomutt ahead of it in your $PATH.
from neomutt.
the ability to toggle between 2 sidebar directories a la
Ctrl-^
in vim.
It's a bit complicated, but you can fake this in Mutt, already.
You'd use macros, unmailboxes and mailboxes
# muttrc
source fruit.rc
# fruit.rc
unmailboxes *
mailboxes apple banana cherry
macro index,pager \C^ "<enter-command>source cars.rc<enter>"
# cars.rc
unmailboxes *
mailboxes audi bentley corvette
macro index,pager \C^ "<enter-command>source fruit.rc<enter>"
The trick is that the macro is redefined each time.
from neomutt.
Vimscript
I was thinking Lua -- it's light and simple.
It's certainly not a crazy idea, but I have no idea where to start.
I don't think it's about language, but about any API provided by mutt core. If you will have API then you can use it in arbitrary interpreter which is possible link to C programs (javascript, python, etc...)
from neomutt.
@flatcap Do you want me to help to write INSTALL?
By the way, what are those README.* for, it's seems long.
from neomutt.
Do you want me to help to write INSTALL?
Yes please. That'd be useful.
I've just looked at the history of the file. Apart from some spelling fixes a year ago, it hasn't changed in 7 years.
what are those README.* for, it's seems long.
Most of them are generated automatically from the features' entry in the manual.
Besides NeoMutt, I distribute each feature as a separate patch.
The README.{feature} gives the user a quick guide without having to build anything.
Shorter, more focussed, guides (tutorials perhaps) would be better :-)
from neomutt.
@flatcap I found those README being the duplicates' of http://www.neomutt.org/features.html it seems confusing to me at first.
Oh, of course, I would like to help to write INSTALL, I will submit a pull request for that in docs/INSTALL.
from neomutt.
Yes. The official route is:
- Edit
doc/manual.xml.head
(in DocBook XML format) - Convert to Markdown for http://www.neomutt.org/feature/X (rendered as HTML by Jekyll)
- Convert to Text for README.X
from neomutt.
@pickfire
I'm making a release on Friday. If you have any more changes, please commit them as soon as possible.
Thanks.
from neomutt.
@flatcap I found that it is a bit troublesome to type dd
and so on, maybe I will change some keys for d
.
from neomutt.
@flatcap Okay, this should be done now, that dd
doesn't seems so bad anyway. I will be closing this until furthur enchancement is needed.
from neomutt.
I will be closing this until further enhancement is needed.
Thanks for all your work. It'll be in the release that may be out today.
from neomutt.
Hi. I saw in the latest changelog that these vim keybindings have been added. My question is, how do I use them now that I've upgraded neomutt? Do I need to source something in my muttrc?
I installed neomutt using the AUR package for arch linux. I'm not sure where the "vim-keybindings.rc" file is installed to.
from neomutt.
@tarpack It's in contrib/vim-keybindings/vim-keybindings.rc
, you can copy that to your ~/.mutt and use it by sourcing it:
source ~/.mutt/vim-keybindings.rc
from neomutt.
Ok, so it isn't installed somewhere by the package. It would be nice if stuff like this could go into something like "/usr/share/doc/mutt/samples" so that we can source from there rather than copying the file out of the repo and worrying about maintaining our own versions.
Thanks!
from neomutt.
I have the same problem with list-reply
as @darnir. I had to comment that line out in order to open mail.
from neomutt.
Yes, that's why I commented that. Need to see how it goes.
from neomutt.
Since we know about the list-reply
issue, can we just comment out that whole line (rather than just placing a comment about the breakage at the end of the line)? Now that the keybindings are installed to /usr/share/doc/neomutt/
I would like to just include the file from there. As it is I still need to maintain my own copy so that I can remove that breaking line.
from neomutt.
@pigmonkey I need to find a replacement for list-reply
before doing that or else the others can't use list-reply
.
from neomutt.
How make group reply work? With the keybindings g
doesn't show up in the mutt top anymore, nor does it work for group reply.
from neomutt.
If the new bindings conflicts with well used ones like group-reply I think the keybinding list must provide an alternative binding for this action by default.
from neomutt.
I've bind gr
for group-reply, and it's also now shown back at top of mutt.
from neomutt.
@oblitum Did you remember inserting some key-bindings? I don't recall that I set g
to scroll to the top, I think it's gg
instead.
from neomutt.
@pickfire I only have these vim-keybindings. I did know that only gg
was being set but still, g
alone stopped working because of these keybindings. This is how I'm using it now: https://github.com/oblitum/dotfiles/blob/7a8d652a473e53b09ae5a5f8108ecd467ee79309/.mutt/vim-keybindings.
from neomutt.
@oblitum It should work, I don't see why g
alone breaks. Maybe you can show how to reproduce it?
from neomutt.
@oblitum If you tried to switch to g
alone, the other g.
combination won't work as g
has override it and prevent the use of second key. I would say that setting keys with their respective meanings would be nice.
I can't find out the reason that caused this but maybe you could check the ? (help page) to see which key is preventing the g.
combination.
from neomutt.
@pickfire g.
? I didn't know about this one, I thought just g
was the default for Mutt. I know g
alone is indeed, because when not using custom keybindings it works and is shown at the window top. As far as I see, g.
is just "not bound".
from neomutt.
@pickfire didn't you forget to add such binding? Anyway I'm just using gr
now.
from neomutt.
@oblitum I think you don't get what I mean, do you? g.
is not about g
+ .
but it's g
+ one character.
from neomutt.
@pickfire no I didn't. I think employing some regex flavor out of a sudden like that isn't good communication.
My problem is not that g.
is not working, since the beginning all I'm talking about is that if you provide keybindings that override useful ones like for group-reply, the new keybinding set must provide an alternative keybinding for such function!
from neomutt.
If g
alone keeps working for you, despite using these vim keybindings, OK, so you don't know why it doesn't work for me. No problem, I'm just registering here that it doesn't work for me and I had to input an alternative (gr
).
from neomutt.
@oblitum What do you mean? g
alone does nothing and that is expected.
from neomutt.
@pickfire g
alone is group reply in standard install.
from neomutt.
the bindings remove the group-reply functionality/binding and don't provide any alternative for such a common operation. There's a reason group-reply has a binding in standard installation.
from neomutt.
@oblitum Ah, I didn't notice that, maybe I will change it to gr
. Just submit a pull request so that you can take in some credit for this too.
from neomutt.
just noticed this issue as referenced from the main site β which would need some updating. Here's my own version of vi keybindings:
exiting
I unbound all x
, i
and q
and left only x
(I'm thinking on switching to another key though). And to exit mutt
, it's ZZ
(with a confirmation, because I never relaly want to exit mutt βΊ).
# unbinding x and i because only one key is enough
bind generic,compose,attach,pager,index i noop
bind generic,compose,attach,pager,index q noop
# binding q for exiting all menus
bind generic,compose,attach,pager x exit
# making q do nothing in index
bind index x noop
# binding ZZ like in vim to quit, only in index
bind index ZZ quit
set quit=ask-yes
top/down, reply-group
I also implemented go to top/down, and to avoid issues, I added ro
for reply only and rr
for reply to all.
# just like vi and less
bind index gg first-entry
bind index G last-entry
bind index,pager rr group-reply
bind index,pager ro reply
from neomutt.
@guyzmo Ah, you are back. I will take a look at it and see if any keys will do better.
from neomutt.
Back? it's my first comment on this ticket! π
β¦and I never left βΊ
from neomutt.
@guyzmo I think q
for quitting neomut is good, no need to change that.
For the gg
and G
, I have already implemented it.
But for reply and group-reply, I have yet think of a good key so it uses r
for reply and gr
for group reply for now.
from neomutt.
actually, q
for quitting is ok, but having x
and i
never made much sense to me.
ZZ
is mostly because it's now in my muscle memory (thanks vim), and a good way to actually quit from mutt.
Because I did implement gg
and G
, I figured it was very vim-like β yet based on existing mutt comand β to implement both rr
and ro
. The rationale is that I always prefer to group reply per default (even if I have to drop a recipient in the editor before sending the mail), which is why rr
is group-reply
, and ro
is the special case where you only want to reply to the sender (r
eply to o
ne). Talking about that, I'm also adding rl
(for r
eply to l
ist) βΊ
from neomutt.
I don't use ZZ
in vim although I know that it is there as well as :x
, I just use :q
most of the time. But for reply to list, I am still looking for a better suited key. Thanks a lot for suggesting rl
. If you want, just submit a pull request and maybe others can have a look.
from neomutt.
from neomutt.
Related Issues (20)
- Newline in attribution no longer properly handled HOT 2
- Compose Menu - top bar not updated after attaching files from file browser HOT 3
- Subject with non-printable characters or new line is shown with `?` HOT 30
- `Today` conditional date broken HOT 4
- Lag on half-down/half-up scrolling on macOS HOT 5
- Do we need to handle <stddef.h> specially? HOT 1
- conditional format strings broken in 2024-04-25 HOT 8
- Duplicate gpg keys in key selection menu for message encryption HOT 18
- segfault while opening a mailbox in from the sidebar HOT 2
- Doubts about paranoic defensive programming style HOT 3
- C dialect HOT 2
- tag-prefix doesn't show-up in attach HOT 5
- Doubts about some `*const` pointers HOT 5
- How to use the notmuch command <modify-labels> to tag emails with tags containing spaces?
- Is it possible to edit the automatic title when forwarding or replying a message? HOT 1
- Progress for postponing a message with remote (IMAP)
- autocrypt breaks command line argument `-e "push foo"` HOT 4
- How to forward an email thread to someone else together with attachments ? HOT 3
- `delete-thread` does not support `tag-prefix` operator
- split outgoing email into batches to work around max number of recipients limit in some SMTP providers (infomaniak) HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from neomutt.