# Session Options

    library(sinew)

`sinew` options can be set to remain persistent across sessions or at a global level within a session

For those familiar with `knitr` `sinew` follows the same option logic, and instead of `knitr::opts_chunk` we define `sinew::sinew_opts`.

The defaults settings for the core function parameters in `sinew` are defined in `sinew_opts`. These include the roxygen2 fields and their values to include by default in the function header.

These settings will persist for a `R` session.

If the user needs the settings to persist across sessions, like in package development, sinew reads on load a file called `_sinewconfig.yml`, placed in the working directory.

## Using _sinewconfig.yml

When loading the `sinew` package the file `_sinewconfig.yml` will be searched for in the working directory, if found settings found in it will be used instead of the package defaults.

To create the `_sinewconfig.yml` file in the current project directory and update the `.Rbuildignore` automatically use the function `create_yml()`. In the example below the field author will be added to all roxygen2 headers returned by `sinew` and its value is `Jonathan Sidi`.

    add_fields: ["author"]
    author: 'Jonathan Sidi'

## Using sinew_opts

Retrieve all current values

    sinew_opts$get()
    #> $add_fields
    #> [1] "details"  "examples" "seealso"  "rdname"   "export"
    #>
    #> $cut
    #> NULL
    #>
    #> $pretty_print
    #> [1] TRUE
    #>
    #> $markdown_links
    #> [1] TRUE
    #>
    #> $author
    #> [1] "AUTHOR [AUTHOR_2]"
    #>
    #> $backref
    #> [1] "src/filename.cpp"
    #>
    #> $concept
    #> [1] "CONCEPT_TERM_1 [CONCEPT_TERM_2]"
    #>
    #> $describeIn
    #> [1] "FUNCTION_NAME DESCRIPTION"
    #>
    #> $details
    #> [1] "DETAILS"
    #>
    #> $example
    #> [1] "path_to_file/relative/to/packge/root"
    #>
    #> $examples
    #> [1] "\n#' \\dontrun{\n#' if(interactive()){\n#'  #EXAMPLE1\n#'  }\n#' }"
    #>
    #> $export
    #> [1] ""
    #>
    #> $family
    #> [1] "FAMILY_TITLE"
    #>
    #> $field
    #> [1] "FIELD_IN_S4_RefClass DESCRIPTION"
    #>
    #> $format
    #> [1] "DATA_STRUCTURE"
    #>
    #> $importClassesFrom
    #> [1] "PKG CLASS_a [CLASS_b]"
    #>
    #> $importMethodsFrom
    #> [1] "PKG METHOD_a [METHOD_b]"
    #>
    #> $include
    #> [1] "FILENAME.R [FILENAME_b.R]"
    #>
    #> $inherit
    #> [1] "[PKG::]SOURCE_FUNCTION [FIELD_a FIELD_b]"
    #>
    #> $inheritDotParams
    #> [1] "[PKG::]SOURCE_FUNCTION"
    #>
    #> $inheritSection
    #> [1] "[PKG::]SOURCE_FUNCTION [SECTION_a SECTION_b]"
    #>
    #> $keywords
    #> [1] "KEYWORD_TERM"
    #>
    #> $name
    #> [1] "NAME"
    #>
    #> $rdname
    #> [1] "FUNCTION_NAME"
    #>
    #> $references
    #> [1] "BIB_CITATION"
    #>
    #> $section
    #> [1] "SECTION_NAME"
    #>
    #> $source
    #> [1] "\\url{http://somewhere.important.com/}"
    #>
    #> $slot
    #> [1] "SLOTNAME DESCRIPTION"
    #>
    #> $template
    #> [1] "FILENAME"
    #>
    #> $templateVar
    #> [1] "NAME VALUE"
    #>
    #> $useDynLib
    #> [1] "PKG [ROUTINE_a ROUTINE_b]"

Retrieve a specific field

    sinew_opts$get('author')
    #> [1] "AUTHOR [AUTHOR_2]"

Retrieve a multiple fields

    sinew_opts$get(c('author','source'))
    #> $author
    #> [1] "AUTHOR [AUTHOR_2]"
    #>
    #> $source
    #> [1] "\\url{http://somewhere.important.com/}"

Set a value

    sinew_opts$set(list(author='John Doe'))
    sinew_opts$get('author')
    #> [1] "John Doe"

Append a new value to the current field values

    sinew_opts$get('add_fields')
    #> [1] "details"  "examples" "seealso"  "rdname"   "export"

    sinew_opts$append(add_fields='source')
    sinew_opts$get('add_fields')
    #> [1] "details"  "examples" "seealso"  "rdname"   "export"   "source"

Reset fields to package defaults

    sinew_opts$restore()
    sinew_opts$get(c('add_fields','author'))
    #> $add_fields
    #> [1] "details"  "examples" "seealso"  "rdname"   "export"
    #>
    #> $author
    #> [1] "AUTHOR [AUTHOR_2]"