summary refs log tree commit diff stats
path: root/ranger.py
blob: 0046f37105ced29ccdd926f132d506c31954e752 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/python -O
# This file is part of ranger, the console file manager.  (coding: utf-8)
# License: GNU GPL version 3, see the file "AUTHORS" for details.

# =====================
# This embedded bash script can be executed by sourcing this file.
# It will cd to ranger's last location after you exit it.
# The first argument specifies the command to run ranger, the
# default is simply "ranger". (Not this file itself!)
# The other arguments are passed to ranger.
"""":
tempfile="$(mktemp -t tmp.XXXXXX)"
ranger="${1:-ranger}"
test -z "$1" || shift
"$ranger" --choosedir="$tempfile" "${@:-$(pwd)}"
returnvalue=$?
test -f "$tempfile" &&
if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
    cd "$(cat "$tempfile")"
fi
rm -f -- "$tempfile"
return $returnvalue
"""

from __future__ import (absolute_import, division, print_function)

import sys
from os.path import exists, abspath

# Need to find out whether or not the flag --clean was used ASAP,
# because --clean is supposed to disable bytecode compilation
ARGV = sys.argv[1:sys.argv.index('--')] if '--' in sys.argv else sys.argv[1:]
sys.dont_write_bytecode = '-c' in ARGV or '--clean' in ARGV

# Don't import ./ranger when running an installed binary at /usr/.../ranger
if __file__[:4] == '/usr' and exists('ranger') and abspath('.') in sys.path:
    sys.path.remove(abspath('.'))

# Start ranger
import ranger  # NOQA pylint: disable=import-self,wrong-import-position
sys.exit(ranger.main())  # pylint: disable=no-member
p">[ local-scope x:&:@:num <- new-array 0, 1, 2 10:@:num/raw <- copy *x ] memory-should-contain [ 10 <- 3 # array length 11 <- 0 12 <- 1 13 <- 2 ] ] # create an array out of a list of args def new-array -> result:&:@:_elem [ local-scope capacity:num <- copy 0 { # while read curr-value curr-value:_elem, exists?:bool <- next-input break-unless exists? capacity <- add capacity, 1 loop } result <- new _elem:type, capacity rewind-inputs i:num <- copy 0 { # while read curr-value done?:bool <- greater-or-equal i, capacity break-if done? curr-value:_elem, exists?:bool <- next-input assert exists?, [error in rewinding inputs to new-array] *result <- put-index *result, i, curr-value i <- add i, 1 loop } return result ] # fill an existing array with a set of numbers # (contributed by Caleb Couch) def fill array:&:@:num -> array:&:@:num [ local-scope load-inputs loopn:num <- copy 0 length:num <- length *array { length?:bool <- equal loopn, length break-if length? object:num, arg-received?:bool <- next-input break-unless arg-received? *array <- put-index *array, loopn, object loopn <- add loopn, 1 loop } ] scenario fill-on-an-empty-array [ local-scope array:&:@:num <- new number:type, 3 run [ array <- fill array, 1 2 3 10:@:num/raw <- copy *array ] memory-should-contain [ 10 <- 3 11 <- 1 12 <- 2 13 <- 3 ] ] scenario fill-overwrites-existing-values [ local-scope array:&:@:num <- new number:type, 3 *array <- put-index *array, 0, 4 run [ array <- fill array, 1 2 3 10:@:num/raw <- copy *array ] memory-should-contain [ 10 <- 3 11 <- 1 12 <- 2 13 <- 3 ] ] scenario fill-exits-gracefully-when-given-no-inputs [ local-scope array:&:@:num <- new number:type, 3 run [ array <- fill array 10:@:num/raw <- copy *array ] memory-should-contain [ 10 <- 3 11 <- 0 12 <- 0 13 <- 0 ] ] # swap two elements of an array # (contributed by Caleb Couch) def swap array:&:@:num, index1:num, index2:num -> array:&:@:num [ local-scope load-inputs object1:num <- index *array, index1 object2:num <- index *array, index2 *array <- put-index *array, index1, object2 *array <- put-index *array, index2, object1 ] scenario swap-works [ local-scope array:&:@:num <- new number:type, 4 array <- fill array, 4 3 2 1 run [ array <- swap array, 0, 2 10:num/raw <- index *array, 0 11:num/raw <- index *array, 2 ] memory-should-contain [ 10 <- 2 11 <- 4 ] ] # reverse the elements of an array # (contributed by Caleb Couch) def reverse array:&:@:_elem -> array:&:@:_elem [ local-scope load-inputs start:num <- copy 0 length:num <- length *array end:num <- subtract length, 1 { done?:bool <- greater-or-equal start, end break-if done? array <- swap array, start, end start <- add start, 1 end <- subtract end, 1 loop } ] scenario reverse-array-odd-length [ local-scope array:&:@:num <- new number:type, 3 array <- fill array, 3 2 1 run [ array <- reverse array 10:@:num/raw <- copy *array ] memory-should-contain [ 10 <- 3 11 <- 1 12 <- 2 13 <- 3 ] ] scenario reverse-array-even-length [ local-scope array:&:@:num <- new number:type, 4 array <- fill array, 4 3 2 1 run [ array <- reverse array 10:@:num/raw <- copy *array ] memory-should-contain [ 10 <- 4 11 <- 1 12 <- 2 13 <- 3 14 <- 4 ] ]