However, mod creators have to take action in order to make their mod support that feature.
The basic setup is as follows: with formspec declarations, you build a list ring, by either naming formspec inventory lists, one after another, or using the shorthand listring[]. In fact, in most of the cases (in all with only two inventory lists you want to shift transport between), you will only need the shorthand. That means it can be used for a chest together with an inventory, or a crafting menu.
With the shorthand, a chest would look like this:
"list[current_name;main;0,0;8,4;]"..
"list[current_player;main;0,5;8,4;]" ..
"listring[]"
With the slightly more verbose method, it would look like this:
"list[current_name;main;0,0;8,4;]"..
"list[current_player;main;0,5;8,4;]" ..
"listring[current_name;main]"..
"listring[current_player;main]"
The explicit naming allows one to much tighter control the ring.
The inventory list ring is like a linked list of elements, with the last element referencing the first as child, so that it forms a ring. Inventory lists can appear multiple times, so its permitted to do:
"listring[current_name;main]"..
"listring[current_name;main]"..
"listring[current_player;main]"
This allows one to freely specify almost all mappings -- read below for the furnace example.
When you shift-click a stack inside a given inventory list, it will search for the first occurrence inside the list ring, and then put the item into its child list. As its a ring, shift-clicking inside the inventory would successfully put the stack into the chest in the example from above.
Now to a slightly more interesting example, the furnace:
"list[current_name;fuel;2,3;1,1;]"..
"list[current_name;src;2,1;1,1;]"..
"list[current_name;dst;5,1;2,2;]"..
"list[current_player;main;0,5;8,4;]" ..
"listring[current_name;dst]" ..
"listring[current_player;main]" ..
"listring[current_name;src]" ..
"listring[current_player;main]"
There you have a ring
furnace destination -> player inventory -> furnace source -> player inventory
This will put items from the output of the furnace into the inventory, and items from the inventory to the furnace's source. Also, you can put items from the source back to your inventory if you have decided not to smelt/cook them.
however, the last "arrow" player inventory -> furnace destination which crosses the border doesn't have any impact, because "player inventory" already appears at an earlier point.
For a compact description of the listring formspec elements, consult the documentation inside lua_api.txt.