inquirer-fs-selector

A filesystem prompt selector for Inquirer.js

Usage no npm install needed!

<script type="module">
  import inquirerFsSelector from 'https://cdn.skypack.dev/inquirer-fs-selector';
</script>

README

inquirer-fs-selector

A filesystem prompt selector plugin for Inquirer.js.

npm version dependency status npm downloads

Installation

npm install --save inquirer-fs-selector

Features

  • Support for symlinked files
  • Vim style navigation
  • Search for file with / key
  • Customize (or disable) file and directory icons
  • Select file (optionally) or directory
  • Define the initial pointer position

Key Maps

  • Press / key to enter search mode
  • Press - key to go up (back) a directory
  • Press . key to select the current directory

Usage

This prompt is anonymous, meaning you can register this prompt with the type name you please:

inquirer.registerPrompt('fs-selector', require('inquirer-fs-selector'));
inquirer.prompt({
  type: 'fs-selector',
  // ...
})

Change fs-selector to whatever you might prefer.

Parameters

Note: allowed options written inside square brackets ([]) are optional. Others are required.

Takes type, name, message, basePath[, default, options ] properties.

See inquirer.js README for meaning of all except basePath and default.

Which are:

  • basePath the relative path from your current working directory
  • default the name of the item (string) where the pointer will be initially positioned (default: '.')

Return

An object with the following shape

{
  isDirectory: Boolean
  isFile: Boolean
  path: String // path to selected file/directory
}

Example

const inquirer = require('inquirer')
inquirer.registerPrompt('fs', require('inquirer-fs-selector'))
// ...
inquirer.prompt([{
  type: 'directory',
  name: 'fs',
  message: 'Choose a file or directory',
  basePath: './',
  options: {
    displayHidden: true,
    displayFiles: true,
    canSelectFile: true,
    icons: {
      currentDir: '\u{1F4C2}',
      // dir: '\u{1F4C1}',
      // file: '\u{1F4C4}',
    },
    // icons: false, // Do not display icons
    shouldDisplayItem: (isDir, isFile, path) => true, // display file/directory
  }
}]).then((answers) => {
  console.log(answers.fs)
})

See also example.js for a working example.

asciicast demo

Options

key default description
displayFiles true Set this to false if you need to hide files
displayHidden false Set this to true if you to display hidden folders (and displayFiles === true)
canSelectFile true (if displayFiles === true) Set this to false to disable files selection
icons.currentDir '\u{1F4C2}' (📂) Set an icon for current directory
icons.dir '\u{1F4C1}' (📁) Set an icon for other directories
icons.file '\u{1F4C4}' (📄) Set an icon for files
shouldDisplayItem undefined (same as passing () => true) A callback function with the following signature: (isDirectory: boolean, isFile: boolean, fullPath: string) => boolean. Should return true to prompt the item on the list

TIP: To disable prompt icons, make icons === false.

License

MIT