Pretty-printing small n-d arrays

I haven’t really looked at anything yet; I figured this might be small enough to be a first contribution, but I first wanted to ask if it would be welcome before I spent a bunch of time on it.

I really like the terminal-size aware printing of vectors and matrices, and I want higher dimensional arrays to be pretty like that as well. For 3, 4, 5, and 6 -d arrays, what would you say to:

julia> collect(reshape(1:360, 20, 18))
20×18 Matrix{Int64}:
  1  21  41  61   81  101  121  141  161  181  201  221  241  261  281  301  321  341
  2  22  42  62   82  102  122  142  162  182  202  222  242  262  282  302  322  342
  3  23  43  63   83  103  123  143  163  183  203  223  243  263  283  303  323  343
  4  24  44  64   84  104  124  144  164  184  204  224  244  264  284  304  324  344
  5  25  45  65   85  105  125  145  165  185  205  225  245  265  285  305  325  345
  6  26  46  66   86  106  126  146  166  186  206  226  246  266  286  306  326  346
  7  27  47  67   87  107  127  147  167  187  207  227  247  267  287  307  327  347
  8  28  48  68   88  108  128  148  168  188  208  228  248  268  288  308  328  348
  9  29  49  69   89  109  129  149  169  189  209  229  249  269  289  309  329  349
 10  30  50  70   90  110  130  150  170  190  210  230  250  270  290  310  330  350
 11  31  51  71   91  111  131  151  171  191  211  231  251  271  291  311  331  351
 12  32  52  72   92  112  132  152  172  192  212  232  252  272  292  312  332  352
 13  33  53  73   93  113  133  153  173  193  213  233  253  273  293  313  333  353
 14  34  54  74   94  114  134  154  174  194  214  234  254  274  294  314  334  354
 15  35  55  75   95  115  135  155  175  195  215  235  255  275  295  315  335  355
 16  36  56  76   96  116  136  156  176  196  216  236  256  276  296  316  336  356
 17  37  57  77   97  117  137  157  177  197  217  237  257  277  297  317  337  357
 18  38  58  78   98  118  138  158  178  198  218  238  258  278  298  318  338  358
 19  39  59  79   99  119  139  159  179  199  219  239  259  279  299  319  339  359
 20  40  60  80  100  120  140  160  180  200  220  240  260  280  300  320  340  360

julia> collect(reshape(1:360, 12, 10, 3))
12×10×3 Array{Int64, 3}:
   1   13   25   37   49   61   73   85   97  109
   2   14   26   38   50   62   74   86   98  110
   3   15   27   39   51   63   75   87   99  111
   4   16   28   40   52   64   76   88  100  112
   5   17   29   41   53   65   77   89  101  113
   6   18   30   42   54   66   78   90  102  114
   7   19   31   43   55   67   79   91  103  115
   8   20   32   44   56   68   80   92  104  116
   9   21   33   45   57   69   81   93  105  117
  10   22   34   46   58   70   82   94  106  118
  11   23   35   47   59   71   83   95  107  119
  12   24   36   48   60   72   84   96  108  120
 ────────────────────────────────────────────────
 121  133  145  157  169  181  193  205  217  229
 122  134  146  158  170  182  194  206  218  230
 123  135  147  159  171  183  195  207  219  231
 124  136  148  160  172  184  196  208  220  232
 125  137  149  161  173  185  197  209  221  233
 126  138  150  162  174  186  198  210  222  234
 127  139  151  163  175  187  199  211  223  235
 128  140  152  164  176  188  200  212  224  236
 129  141  153  165  177  189  201  213  225  237
 130  142  154  166  178  190  202  214  226  238
 131  143  155  167  179  191  203  215  227  239
 132  144  156  168  180  192  204  216  228  240
 ────────────────────────────────────────────────
 241  253  265  277  289  301  313  325  337  349
 242  254  266  278  290  302  314  326  338  350
 243  255  267  279  291  303  315  327  339  351
 244  256  268  280  292  304  316  328  340  352
 245  257  269  281  293  305  317  329  341  353
 246  258  270  282  294  306  318  330  342  354
 247  259  271  283  295  307  319  331  343  355
 248  260  272  284  296  308  320  332  344  356
 249  261  273  285  297  309  321  333  345  357
 250  262  274  286  298  310  322  334  346  358
 251  263  275  287  299  311  323  335  347  359
 252  264  276  288  300  312  324  336  348  360

julia> collect(reshape(1:360, 6, 5, 4, 3))
6×5×4×3 Array{Int64, 4}:
   1    7   13   19   25 │ 121  127  133  139  145 │ 241  247  253  259  265
   2    8   14   20   26 │ 122  128  134  140  146 │ 242  248  254  260  266
   3    9   15   21   27 │ 123  129  135  141  147 │ 243  249  255  261  267
   4   10   16   22   28 │ 124  130  136  142  148 │ 244  250  256  262  268
   5   11   17   23   29 │ 125  131  137  143  149 │ 245  251  257  263  269
   6   12   18   24   30 │ 126  132  138  144  150 │ 246  252  258  264  270
 ────────────────────────┼─────────────────────────┼────────────────────────
  31   37   43   49   55 │ 151  157  163  169  175 │ 271  277  283  289  295
  32   38   44   50   56 │ 152  158  164  170  176 │ 272  278  284  290  296
  33   39   45   51   57 │ 153  159  165  171  177 │ 273  279  285  291  297
  34   40   46   52   58 │ 154  160  166  172  178 │ 274  280  286  292  298
  35   41   47   53   59 │ 155  161  167  173  179 │ 275  281  287  293  299
  36   42   48   54   60 │ 156  162  168  174  180 │ 276  282  288  294  300
 ────────────────────────┼─────────────────────────┼────────────────────────
  61   67   73   79   85 │ 181  187  193  199  205 │ 301  307  313  319  325
  62   68   74   80   86 │ 182  188  194  200  206 │ 302  308  314  320  326
  63   69   75   81   87 │ 183  189  195  201  207 │ 303  309  315  321  327
  64   70   76   82   88 │ 184  190  196  202  208 │ 304  310  316  322  328
  65   71   77   83   89 │ 185  191  197  203  209 │ 305  311  317  323  329
  66   72   78   84   90 │ 186  192  198  204  210 │ 306  312  318  324  330
 ────────────────────────┼─────────────────────────┼────────────────────────
  91   97  103  109  115 │ 211  217  223  229  235 │ 331  337  343  349  355
  92   98  104  110  116 │ 212  218  224  230  236 │ 332  338  344  350  356
  93   99  105  111  117 │ 213  219  225  231  237 │ 333  339  345  351  357
  94  100  106  112  118 │ 214  220  226  232  238 │ 334  340  346  352  358
  95  101  107  113  119 │ 215  221  227  233  239 │ 335  341  347  353  359
  96  102  108  114  120 │ 216  222  228  234  240 │ 336  342  348  354  360

julia> collect(reshape(1:360, 5, 4, 3, 3, 2))
5×4×3×3×2 Array{Int64, 5}:
   1    6   11   16 │  61   66   71   76 │ 121  126  131  136
   2    7   12   17 │  62   67   72   77 │ 122  127  132  137
   3    8   13   18 │  63   68   73   78 │ 123  128  133  138
   4    9   14   19 │  64   69   74   79 │ 124  129  134  139
   5   10   15   20 │  65   70   75   80 │ 125  130  135  140
 ───────────────────┼────────────────────┼───────────────────
  21   26   31   36 │  81   86   91   96 │ 141  146  151  156
  22   27   32   37 │  82   87   92   97 │ 142  147  152  157
  23   28   33   38 │  83   88   93   98 │ 143  148  153  158
  24   29   34   39 │  84   89   94   99 │ 144  149  154  159
  25   30   35   40 │  85   90   95  100 │ 145  150  155  160
 ───────────────────┼────────────────────┼───────────────────
  41   46   51   56 │ 101  106  111  116 │ 161  166  171  176
  42   47   52   57 │ 102  107  112  117 │ 162  167  172  177
  43   48   53   58 │ 103  108  113  118 │ 163  168  173  178
  44   49   54   59 │ 104  109  114  119 │ 164  169  174  179
  45   50   55   60 │ 105  110  115  120 │ 165  170  175  180
 ═══════════════════╪════════════════════╪═══════════════════
 181  186  191  196 │ 241  246  251  256 │ 301  306  311  316
 182  187  192  197 │ 242  247  252  257 │ 302  307  312  317
 183  188  193  198 │ 243  248  253  258 │ 303  308  313  318
 184  189  194  199 │ 244  249  254  259 │ 304  309  314  319
 185  190  195  200 │ 245  250  255  260 │ 305  310  315  320
 ───────────────────┼────────────────────┼───────────────────
 201  206  211  216 │ 261  266  271  276 │ 321  326  331  336
 202  207  212  217 │ 262  267  272  277 │ 322  327  332  337
 203  208  213  218 │ 263  268  273  278 │ 323  328  333  338
 204  209  214  219 │ 264  269  274  279 │ 324  329  334  339
 205  210  215  220 │ 265  270  275  280 │ 325  330  335  340
 ───────────────────┼────────────────────┼───────────────────
 221  226  231  236 │ 281  286  291  296 │ 341  346  351  356
 222  227  232  237 │ 282  287  292  297 │ 342  347  352  357
 223  228  233  238 │ 283  288  293  298 │ 343  348  353  358
 224  229  234  239 │ 284  289  294  299 │ 344  349  354  359
 225  230  235  240 │ 285  290  295  300 │ 345  350  355  360

julia> collect(reshape(1:360, 5, 3, 3, 2, 2, 2))
5×3×3×2×2×2 Array{Int64, 6}:
   1    6   11 │  46   51   56 ║ 181  186  191 │ 226  231  236
   2    7   12 │  47   52   57 ║ 182  187  192 │ 227  232  237
   3    8   13 │  48   53   58 ║ 183  188  193 │ 228  233  238
   4    9   14 │  49   54   59 ║ 184  189  194 │ 229  234  239
   5   10   15 │  50   55   60 ║ 185  190  195 │ 230  235  240
 ──────────────┼───────────────╫───────────────┼──────────────
  16   21   26 │  61   66   71 ║ 196  201  206 │ 241  246  251
  17   22   27 │  62   67   72 ║ 197  202  207 │ 242  247  252
  18   23   28 │  63   68   73 ║ 198  203  208 │ 243  248  253
  19   24   29 │  64   69   74 ║ 199  204  209 │ 244  249  254
  20   25   30 │  65   70   75 ║ 200  205  210 │ 245  250  255
 ──────────────┼───────────────╫───────────────┼──────────────
  31   36   41 │  76   81   86 ║ 211  216  221 │ 256  261  266
  32   37   42 │  77   82   87 ║ 212  217  222 │ 257  262  267
  33   38   43 │  78   83   88 ║ 213  218  223 │ 258  263  268
  34   39   44 │  79   84   89 ║ 214  219  224 │ 259  264  269
  35   40   45 │  80   85   90 ║ 215  220  225 │ 260  265  270
 ══════════════╪═══════════════╬═══════════════╪══════════════
  91   96  101 │ 136  141  146 ║ 271  276  281 │ 316  321  326
  92   97  102 │ 137  142  147 ║ 272  277  282 │ 317  322  327
  93   98  103 │ 138  143  148 ║ 273  278  283 │ 318  323  328
  94   99  104 │ 139  144  149 ║ 274  279  284 │ 319  324  329
  95  100  105 │ 140  145  150 ║ 275  280  285 │ 320  325  330
 ──────────────┼───────────────╫───────────────┼──────────────
 106  111  116 │ 151  156  161 ║ 286  291  296 │ 331  336  341
 107  112  117 │ 152  157  162 ║ 287  292  297 │ 332  337  342
 108  113  118 │ 153  158  163 ║ 288  293  298 │ 333  338  343
 109  114  119 │ 154  159  164 ║ 289  294  299 │ 334  339  344
 110  115  120 │ 155  160  165 ║ 290  295  300 │ 335  340  345
 ──────────────┼───────────────╫───────────────┼──────────────
 121  126  131 │ 166  171  176 ║ 301  306  311 │ 346  351  356
 122  127  132 │ 167  172  177 ║ 302  307  312 │ 347  352  357
 123  128  133 │ 168  173  178 ║ 303  308  313 │ 348  353  358
 124  129  134 │ 169  174  179 ║ 304  309  314 │ 349  354  359
 125  130  135 │ 170  175  180 ║ 305  310  315 │ 350  355  360

what I’m thinking is it checks if it can print on the screen, then falls back on the current method if it can’t fit everything.