tmux-python / tmuxp Goto Github PK
View Code? Open in Web Editor NEWπ₯οΈ Session manager for tmux, build on libtmux.
Home Page: https://tmuxp.git-pull.com/
License: MIT License
π₯οΈ Session manager for tmux, build on libtmux.
Home Page: https://tmuxp.git-pull.com/
License: MIT License
The version checking for tmux fails under Arch Linux, which reports the version as '1.9a'. The tmux version was updated to 1.9a on 24 Feb 2014. (https://www.archlinux.org/packages/community/x86_64/tmux/)
Traceback (most recent call last):
File "/usr/sbin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.6', 'console_scripts', 'tmuxp')()
File "/usr/lib/python3.3/site-packages/tmuxp/cli.py", line 946, in main
util.has_required_tmux_version()
File "/usr/lib/python3.3/site-packages/tmuxp/util.py", line 275, in has_required_tmux_version
if StrictVersion(version) <= StrictVersion("1.7"):
File "/usr/lib/python3.3/distutils/version.py", line 40, in __init__
self.parse(vstring)
File "/usr/lib/python3.3/distutils/version.py", line 143, in parse
raise ValueError("invalid version number '%s'" % vstring)
ValueError: invalid version number '1.9a'
Hi, I just ran tmuxp freeze test
in a tmux window, and got the following traceback:
~/workspace/tmuxp/ [master]tmuxp freeze test
Traceback (most recent call last):
File "/home/maomao/.virtualenvs/tmuxp/bin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.0rc2', 'console_scripts', 'tmuxp')()
File "/home/maomao/workspace/tmuxp/tmuxp/cli.py", line 958, in main
command_freeze(args)
File "/home/maomao/workspace/tmuxp/tmuxp/cli.py", line 336, in command_freeze
'session_name': ctext
File "/home/maomao/workspace/tmuxp/tmuxp/util.py", line 159, in findWhere
return self.where(attrs)[0] or None
IndexError: list index out of range
The tmuxp version I installed is: 0.1.0rc4
, and it's in a virtualenv.
I use zsh, and Oh-my-Zsh.
Python version is Python 2.7.5+
.
My OS is Ubuntu 13.10.
Besides, I ran the tests, all pass.
This issue occurs with files on python 2.6 and leads to failed builds on travis.
test_freeze_config (tmuxp.testsuite.test_workspacefreezer.FreezeTest) ... ok
======================================================================
ERROR: test_export_json (tmuxp.testsuite.test_config.ImportExportTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/tony/tmuxp/tmuxp/testsuite/test_config.py", line 71, in test_export_json
buf = open(json_config_file, 'w')
IOError: [Errno 2] No such file or directory: '/home/travis/build/tony/tmuxp/tmuxp/testsuite/.tmuxp/config.json'
======================================================================
ERROR: test_export_yaml (tmuxp.testsuite.test_config.ImportExportTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/tony/tmuxp/tmuxp/testsuite/test_config.py", line 89, in test_export_yaml
buf = open(yaml_config_file, 'w')
IOError: [Errno 2] No such file or directory: '/home/travis/build/tony/tmuxp/tmuxp/testsuite/.tmuxp/config.yaml'
======================================================================
ERROR: test_scan_config (tmuxp.testsuite.test_config.ImportExportTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/tony/tmuxp/tmuxp/testsuite/test_config.py", line 101, in test_scan_config
buf = open(garbage_file, 'w')
IOError: [Errno 2] No such file or directory: '/home/travis/build/tony/tmuxp/tmuxp/testsuite/.tmuxp/config.psd'
----------------------------------------------------------------------
Ran 72 tests in 34.752s
FAILED (errors=3)
The command "python setup.py test" exited with 1.
Done. Your build exited with 1.
re #27
@tony
The freeze
help message suggests it supports to freeze several sessions.
(tmuxp) tmuxp (master) β tmuxp freeze -h
usage: tmuxp freeze [-h] [-L socket-name] [-S socket-path] [-y]
session_name [session_name ...]
But the result I got is not as expected.
(tmuxp) tmuxp (master) β tmuxp freeze 0 1 3
args is Namespace(answer_yes=None, callback=<function command_freeze at 0x9036b8c>, colors=None, session_name=['0', '1', '3'], socket_name=None, socket_path=None)
session name are ['0', '1', '3']
Traceback (most recent call last):
File "/home/maomao/.virtualenvs/tmuxp/bin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.0rc4', 'console_scripts', 'tmuxp')()
File "/home/maomao/workspace/tmuxp/tmuxp/cli.py", line 958, in main
command_freeze(args)
File "/home/maomao/workspace/tmuxp/tmuxp/cli.py", line 335, in command_freeze
'session_name': ctext
File "/home/maomao/workspace/tmuxp/tmuxp/util.py", line 159, in findWhere
return self.where(attrs)[0] or None
IndexError: list index out of range
I can confirm that the valid session names are 0
1
3
in my case.
(tmuxp) tmuxp (master) β tmux list-sessions
0: 2 windows (created Tue Dec 3 16:01:57 2013) [213x54] (attached)
1: 1 windows (created Wed Dec 4 10:50:35 2013) [213x54]
3: 1 windows (created Wed Dec 4 20:47:53 2013) [80x23]
Currently, arguments are being accepting multiple words and concatenating them by spaces so users don't have to escape spaces in session names.
This will require updating autocomplete to add a \
for spaces in session names.
this requires having a tmux client open while the tests run.
I have made some progress on using tmux -C
but it's not quite there yet. (https://travis-ci.org/tony/tmuxp/builds/11223314).
workaround: have a tmux client open in another window while tests run.
I think it will be awesome, have tmuxp completion
in official oh-my-zsh plugins :)
If automatic-rename: off
in .tmux.conf
, don't freeze in tmuxp config.
no client
errors happening.
kill-session is creates clean TestSuites, look into an open to not kill session / kick tester out of an attached tmux session afterwards so session may be viewed.
~ β― tmux list-panes -a
cpython:1.0: [143x35] [history 0/2000, 0 bytes] %17 (active)
cpython:1.1: [71x20] [history 0/2000, 0 bytes] %18
cpython:1.2: [71x20] [history 0/2000, 0 bytes] %19
cpython:2.0: [143x35] [history 0/2000, 0 bytes] %20 (active)
cpython:2.1: [71x20] [history 0/2000, 0 bytes] %21
cpython:2.2: [71x20] [history 0/2000, 0 bytes] %22
cpython:3.0: [121x19] [history 0/2000, 0 bytes] %23 (active)
cpython:4.0: [143x56] [history 0/2000, 0 bytes] %24 (active)
cpython:5.0: [60x19] [history 0/2000, 0 bytes] %25 (active)
cpython:5.1: [60x19] [history 0/2000, 0 bytes] %26
cpython:6.0: [121x16] [history 0/2000, 0 bytes] %27 (active)
cpython:6.1: [60x2] [history 1/2000, 856 bytes] %28
cpython:6.2: [60x2] [history 1/2000, 856 bytes] %29
cpython:7.0: [121x19] [history 0/2000, 0 bytes] %30 (active)
cpython:8.0: [121x19] [history 0/2000, 0 bytes] %31 (active)
cpython:9.0: [121x19] [history 0/2000, 0 bytes] %32 (active)
hi $ haha/ laa \:1.0: [167x28] [history 328/2000, 229458 bytes] %34
hi $ haha/ laa \:1.1: [167x27] [history 1856/2000, 1402522 bytes] %38 (active)
hi $ haha/ laa \:2.0: [155x56] [history 1/2000, 2018 bytes] %39 (active)
hi hi hi:1.0: [122x50] [history 9/2000, 3700 bytes] %33 (active)
libunihan:1.0: [167x32] [history 0/2000, 0 bytes] %13 (active)
libunihan:1.1: [83x23] [history 91/2000, 56756 bytes] %14
libunihan:1.2: [83x23] [history 1859/2000, 1794150 bytes] %15
libunihan:2.0: [170x39] [history 1/2000, 2018 bytes] %113 (active)
logbook:1.0: [167x56] [history 1/2000, 2354 bytes] %117 (active)
tmuxp:1.0: [143x35] [history 12/2000, 11322 bytes] %105 (active)
tmuxp:1.1: [71x20] [history 1/2000, 968 bytes] %106
tmuxp:1.2: [71x20] [history 444/2000, 314600 bytes] %107
tmuxp:2.0: [122x32] [history 16/2000, 14158 bytes] %108 (active)
tmuxp:2.1: [40x17] [history 8/2000, 3712 bytes] %109
tmuxp:2.2: [40x17] [history 14/2000, 6258 bytes] %110
tmuxp:2.3: [40x17] [history 116/2000, 48644 bytes] %111
tornado:1.0: [167x35] [history 0/2000, 0 bytes] %60
tornado:1.1: [84x20] [history 5/2000, 2726 bytes] %61 (active)
tornado:1.2: [82x20] [history 0/2000, 0 bytes] %62
tornado:2.0: [131x37] [history 0/2000, 0 bytes] %63 (active)
tornado:2.1: [65x18] [history 3/2000, 1392 bytes] %64
tornado:2.2: [65x18] [history 3/2000, 1392 bytes] %65
tornado:3.0: [155x38] [history 0/2000, 0 bytes] %66 (active)
tornado:3.1: [77x17] [history 1/2000, 1094 bytes] %67
tornado:3.2: [77x17] [history 1/2000, 1094 bytes] %68
~ β― tmuxp load /home/tony/.tmuxp/logbook.yaml
load /home/tony/.tmuxp/logbook.yaml
(I) [16:12:08] tmuxp.cli cli.load_workspace():255 Loading /home/tony/.tmuxp/logbook.yaml.
Traceback (most recent call last):
File "/usr/local/bin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.0rc5', 'console_scripts', 'tmuxp')()
File "/home/tony/workspace/tmuxp/tmuxp/cli.py", line 957, in main
command_load(args)
File "/home/tony/workspace/tmuxp/tmuxp/cli.py", line 421, in command_load
load_workspace(file_cwd, args)
File "/home/tony/workspace/tmuxp/tmuxp/cli.py", line 277, in load_workspace
builder.build()
File "/home/tony/workspace/tmuxp/tmuxp/workspacebuilder.py", line 141, in build
for p, pconf in self.iter_create_panes(w, wconf):
File "/home/tony/workspace/tmuxp/tmuxp/workspacebuilder.py", line 225, in iter_create_panes
p = w.attached_pane()
File "/home/tony/workspace/tmuxp/tmuxp/window.py", line 404, in attached_pane
for pane in self._panes:
File "/home/tony/workspace/tmuxp/tmuxp/window.py", line 430, in _panes
return self._list_panes()
File "/home/tony/workspace/tmuxp/tmuxp/window.py", line 416, in _list_panes
panes = self.server._update_panes()._panes
File "/home/tony/workspace/tmuxp/tmuxp/server.py", line 287, in _update_panes
self._list_panes()
File "/home/tony/workspace/tmuxp/tmuxp/server.py", line 251, in _list_panes
'-F%s' % ''.join(tmux_formats), # output
File "/home/tony/workspace/tmuxp/tmuxp/server.py", line 97, in tmux
return tmux(*args, **kwargs)
File "/home/tony/workspace/tmuxp/tmuxp/util.py", line 79, in __init__
self.stdout = stdout.decode().split('\n')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 3172: ordinal not in range(128)
Please look at the startup sequence below:
lowks@robot-ng4 ~/Downloads/tmuxp $ tmuxp load ~/.tmuxp/editing.json
load /home/lowks/.tmuxp/editing.json
(I) [10:11:37] tmuxp.cli cli.load_workspace():256 Loading /home/lowks/.tmuxp/editing.json.
Traceback (most recent call last):
File "/usr/local/bin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.0rc1', 'console_scripts', 'tmuxp')()
File "/usr/local/lib/python2.7/dist-packages/tmuxp/cli.py", line 977, in main
command_load(args)
File "/usr/local/lib/python2.7/dist-packages/tmuxp/cli.py", line 435, in command_load
load_workspace(file_cwd, args)
File "/usr/local/lib/python2.7/dist-packages/tmuxp/cli.py", line 278, in load_workspace
builder.build()
File "/usr/local/lib/python2.7/dist-packages/tmuxp/workspacebuilder.py", line 138, in build
for p in self.iter_create_panes(w, wconf):
File "/usr/local/lib/python2.7/dist-packages/tmuxp/workspacebuilder.py", line 219, in iter_create_panes
assert int(p.get('pane_index')) == int(pane_base_index + pindex)
AssertionError
lowks@robot-ng4 ~/Downloads/tmuxp $ tmuxp load ~/.tmuxp/editing.json
load /home/lowks/.tmuxp/editing.json
(I) [10:11:44] tmuxp.cli cli.load_workspace():256 Loading /home/lowks/.tmuxp/editing.json.
Session name 2-pane-vertical is already running. Attach? [Y/n] y
After this second time of loading, then it works.
Edit by Tony. wrapped output so it will be formatted.
Finish http://tmuxp.readthedocs.org/en/latest/about_tmux.html tao of tmux documentation.
@wrongwaycn also needs this for δΈζ docs.
$ tmuxp load <session-name> <session-name> <session-name>
If a relative path is specified in a window's start_directory, it should be considered relative to the session's. For example, in the following config:
session_name: test
start_directory: ~/projects/test
windows:
- start_directory: dir/inside/project
- panes:
- pwd
the pane's pwd should be "~/projects/test/dir/inside/project". Right now it is "/".
Current logger weak
Hi ,
I dont know where to find package_metadata
$ pip install tmuxp
Downloading/unpacking tmuxp
Downloading tmuxp-0.1.5.tar.gz (71kB): 71kB downloaded
Running setup.py (path:/tmp/pip_build_root/tmuxp/setup.py) egg_info for package tmuxp
Traceback (most recent call last):
File "", line 17, in
File "/tmp/pip_build_root/tmuxp/setup.py", line 15, in
from package_metadata import p
ImportError: No module named 'package_metadata'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "", line 17, in
File "/tmp/pip_build_root/tmuxp/setup.py", line 15, in
from package_metadata import p
session_name: logbook
start_directory: ~/study/python/logbook
windows:
- layout: 67d3,239x56,0,0[239x37,0,0,15,239x18,0,38{119x18,0,38,17,119x18,120,38,16}]
focus: true # focus works
panes:
- shell_command:
- vim
focus: true # works!
- pane
- pane
window_name: logbook
- layout: fbd5,239x56,0,0[239x33,0,0,18,239x22,0,34{119x22,0,34,20,119x22,120,34,19}]
panes:
- shell_command: vim
focus: true # focus Breaks!
- pane
- pane
start_directory: docs
window_name: docs
When flask_colors
session exists, a session name with any part of the string flask_colors
e.g. flask
will prevent the flask
session from loading.
Steps to reproduce:
my_session
opensession_name
of my
, my_s
, my_sess
etc. will fail.I brought this up before at philberty/cython-book#1.
There needs to be a way to:
Currently this is being done via Shell and subprocess. This would be like a dream scenario for integration and reducing lag.
@redbrain: Any update on your cython / tmux client effort?
This new testsuite will aim for a higher % coverage rate, separate unit API tests, from integration, and tmux-binary client tests. Have a non-tmux test client, and allow for TestSuite to run without tmux available.
Ensure options
and automatic-rename
option is working, is tested and is shown in the examples in the docs.
Setting start_directory is being used as the way to make startdirs work open correctly. Find a new way to make this work in >1.8 or reset / flush start_dirs accordingly.
Can you add a task to tmuxp to generate a sample config file, the use case is as follows:
The sample is just a very simple say two column config which users can start on. This will help speed up users which are new to tmuxp.
There is no option in tmuxp to load a session in a detached manner, which makes some automation scripts uncomfortable.
For example, one might use saltstack to start a develop server via tmuxp and do something, which could be achieved by tmux new-session -d "teamocil keystone"
. However, it would get a TmuxpException
if tmuxp was used.
I've got a setup with 4 or 6 panes, works fine, however the orderings not what id expect (not the same as 4 panes on tmuxinator)
Id expect
pane1 pane2
pane3 pane4
pane5 pane6
.. ..
It seems to work if you reorder the panes lists in the yaml, but in normal order, ie
panes:
you get
1 4
3 2
I have base-index and pane-base-index set to 1, but seems the same without...
Am i missing something?
session_name: libunihan
start_directory: ./
shell_command_before:
- command -v virtualenv >/dev/null 2>&1 || { pip install virtualenv; }
- '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate || virtualenv .env'
- '[ ! -d .env/build ] || rm -rf .env/build'
windows:
- layout: 89b3,239x56,0,0[239x36,0,0,0,239x19,0,37{119x19,0,37,1,119x19,120,37,3}]
panes:
- shell_command:
- vim
- :Ex
focus: true
- pane
- shell_command:
- command -v watching_testrunner >/dev/null 2>&1 || { pip install watching_testrunner; }
- watching_testrunner --basepath ./ --pattern="*.py" 'python -m libunihan'
window_name: libunihan
Hi,
I have a question regarding the usage of tmuxp :
For example say I have an iteration from 1 to 100.
in one terminal i need to run:
for i in range(100):
print i
I would like to know if it's possible to separate this work into four parts and run the following in each part:
for i in range(25):
print i
I don't want to write yml or json config file for this run, but want to integrate them into the codes. can you please offer some hints?
Thanks
Consider this code(from documentation):
session_name: focus
windows:
- window_name: attached window
focus: true
panes:
- shell_command:
- pwd
- echo 'this pane should be selected on load'
focus: true
- shell_command:
- cd /var/log
- pwd
- window_name: second window
shell_command_before: cd /var/log
panes:
- pane
- shell_command:
- echo 'this pane should be focused, when window switched to first
time'
focus: true
- pane
If I execute "tmuxp load focus.yaml" (focus.yaml is in /home/user/.tmuxp) it doesn't work.
(I) [19:12:41] tmuxp.cli cli.load_workspace():260 Loading /home/andrea/.tmuxp/focus.yaml.
Traceback (most recent call last):
File "/usr/bin/tmuxp", line 9, in <module>
load_entry_point('tmuxp==0.1.1', 'console_scripts', 'tmuxp')()
File "/usr/lib/python3.3/site-packages/tmuxp-0.1.1-py3.3.egg/tmuxp/cli.py", line 962, in main
command_load(args)
File "/usr/lib/python3.3/site-packages/tmuxp-0.1.1-py3.3.egg/tmuxp/cli.py", line 427, in command_load
load_workspace(file_user, args)
File "/usr/lib/python3.3/site-packages/tmuxp-0.1.1-py3.3.egg/tmuxp/cli.py", line 263, in load_workspace
sconfig = sconfig.import_config(config_file).get()
File "/usr/lib/python3.3/site-packages/kaptan/__init__.py", line 69, in import_config
self.configuration_data = self.handler.load(value)
File "/usr/lib/python3.3/site-packages/kaptan/handlers/yaml_handler.py", line 20, in load
return yaml.load(data)
File "/usr/lib/python3.3/site-packages/yaml/__init__.py", line 72, in load
return loader.get_single_data()
File "/usr/lib/python3.3/site-packages/yaml/constructor.py", line 35, in get_single_data
node = self.get_single_node()
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 36, in get_single_node
document = self.compose_document()
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 55, in compose_document
node = self.compose_node(None, None)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 82, in compose_node
node = self.compose_sequence_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 111, in compose_sequence_node
node.value.append(self.compose_node(node, index))
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 82, in compose_node
node = self.compose_sequence_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 111, in compose_sequence_node
node.value.append(self.compose_node(node, index))
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 82, in compose_node
node = self.compose_sequence_node(anchor)
File "/usr/lib/python3.3/site-packages/yaml/composer.py", line 110, in compose_sequence_node
while not self.check_event(SequenceEndEvent):
File "/usr/lib/python3.3/site-packages/yaml/parser.py", line 98, in check_event
self.current_event = self.state()
File "/usr/lib/python3.3/site-packages/yaml/parser.py", line 403, in parse_indentless_sequence_entry
if self.check_token(BlockEntryToken):
File "/usr/lib/python3.3/site-packages/yaml/scanner.py", line 115, in check_token
while self.need_more_tokens():
File "/usr/lib/python3.3/site-packages/yaml/scanner.py", line 149, in need_more_tokens
self.stale_possible_simple_keys()
File "/usr/lib/python3.3/site-packages/yaml/scanner.py", line 289, in stale_possible_simple_keys
"could not found expected ':'", self.get_mark())
yaml.scanner.ScannerError: while scanning a simple key
in "<unicode string>", line 19, column 1:
time'
^
could not found expected ':'
in "<unicode string>", line 20, column 12:
focus: true
^
I tried both Python 3 and Python 2. I also tried to install via pip or source(lastest version on github).
Sorry for my basic english.
PS: I'm on ArchLinux
like only_if
in salt.
Issue is with tmuxp example configs that check for virtualenv with bash, every pane is checking. Instead, allow a script to return an exit code of 0/1 and return stderr if the message fails - don't continue building session.
I love the project. Is there a recommended way of manipulating tmuxp from within tmux? For instance, loading a new session.
Following verbatim the example provided here:
http://tmuxp.readthedocs.org/en/latest/quickstart.html
I was not able to get tmuxp running. I got this error:
File "/usr/local/lib/python2.7/dist-packages/tmuxp/cli.py", line 278, in load_workspace
builder.build()
File "/usr/local/lib/python2.7/dist-packages/tmuxp/workspacebuilder.py", line 125, in build
session_name=self.sconf['session_name']
File "/usr/local/lib/python2.7/dist-packages/tmuxp/server.py", line 449, in new_session
raise exc.TmuxpException(proc.stderr)
TmuxpException: [u'usage: new-session [-d] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]']
(E) [20:11:49] tmuxp.cli cli.load_workspace():305 [u'usage: new-session [-d] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]']
Is the documentation outdated or something ?
Trying to install tmuxp on a server (not connected to the internet), and I'm getting this error (all deps are installed):
~$ pip install tmuxp-0.0.36.tar.gz
Unpacking ./tmuxp-0.0.36.tar.gz
Running setup.py egg_info for package from file:///home/smichael/tmuxp-0.0.36.tar.gz
Traceback (most recent call last):
File "", line 14, in
File "/tmp/pip-YsW3B2-build/setup.py", line 47, in
install_requires=requirements('requirements.pip'),
File "/tmp/pip-YsW3B2-build/setup.py", line 20, in requirements
reqs = [str(r.req) for r in install_reqs]
File "/home/smichael/env/lib/python2.6/site-packages/pip-0.8.1-py2.6.egg/pip/req.py", line 1154, in parse_requirements
skip_regex = options.skip_requirements_regex
AttributeError: 'NoneType' object has no attribute 'skip_requirements_regex'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "/tmp/pip-YsW3B2-build/setup.py", line 47, in <module>
install_requires=requirements('requirements.pip'),
File "/tmp/pip-YsW3B2-build/setup.py", line 20, in requirements
reqs = [str(r.req) for r in install_reqs]
File "/home/smichael/env/lib/python2.6/site-packages/pip-0.8.1-py2.6.egg/pip/req.py", line 1154, in parse_requirements
skip_regex = options.skip_requirements_regex
AttributeError: 'NoneType' object has no attribute 'skip_requirements_regex'
Command python setup.py egg_info failed with error code 1
Storing complete log in /home/smichael/.pip/pip.log
When options pass through tmuxp the attribute types should be accurate. Currently, everything is being treated as unicode. In the future, typos should be enforced. Perhaps objects can keep a schema inside, set
and get
inside will run it through the schema to convert the unicode to a specified type.
Have window_name
freeze to the top of the dict.
FocusAndPaneIndexTest and PaneOrderingTest in test_workspacebuilder.py fail to pass under OS X for 2 reasons:
/sys
does not exist in OS X/var
is symlinked to /private/var
and pane.get('pane_current_path')
returns the resolved path, so assertEqual
fails with AssertionError: u'/private/var' != '/var'
. The same also stands for /tmp
.I tried to fix this, either by manually resolving the paths in the test case with os.path.realpath
, or by changing the paths in the test case and the yaml configuration to /usr
. In both cases there were some weird issues with running the tests.
When I run one of the failing tests alone, it works with either fix. If I run the whole suite, the test cases failed randomly (not always!) because pane.get('pane_current_path')
returned either my cwd
(the root of the repo) or my home directory.
This is related to #34 . A script can be used to verify state of a project (virtualenv, packages installed) before launching a tmux session. As it stands examples are pure bash input in tmux.
This can get annoying, but panes are passed commands in the background via send-keys
and this populates .bash-history
and .zsh_history
. Using a space in front of the commands can make life easier in this respect.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.