Compare commits
	
		
			145 Commits
		
	
	
		
			2c595100ae
			...
			v1.0.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						272ee62ad8
	
				 | 
					
					
						|||
| 
						
						
							
						
						a85426541a
	
				 | 
					
					
						|||
| 
						
						
							
						
						c9b003735d
	
				 | 
					
					
						|||
| 
						
						
							
						
						52a28f01c8
	
				 | 
					
					
						|||
| 
						
						
							
						
						3607757554
	
				 | 
					
					
						|||
| 
						
						
							
						
						6eb216a40a
	
				 | 
					
					
						|||
| 
						
						
							
						
						9ce6f47716
	
				 | 
					
					
						|||
| 
						
						
							
						
						c9662f1a7b
	
				 | 
					
					
						|||
| 
						
						
							
						
						9ddeb03652
	
				 | 
					
					
						|||
| 
						
						
							
						
						acb187c6b1
	
				 | 
					
					
						|||
| 
						
						
							
						
						9427df62e7
	
				 | 
					
					
						|||
| 
						
						
							
						
						4d6999c415
	
				 | 
					
					
						|||
| 
						
						
							
						
						30ed61fdd2
	
				 | 
					
					
						|||
| 
						
						
							
						
						2df916c9b3
	
				 | 
					
					
						|||
| 
						
						
							
						
						24401825b4
	
				 | 
					
					
						|||
| 
						
						
							
						
						2bfb490798
	
				 | 
					
					
						|||
| 
						
						
							
						
						338d00d605
	
				 | 
					
					
						|||
| 
						
						
							
						
						015652e379
	
				 | 
					
					
						|||
| 
						
						
							
						
						c298b6fc97
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c2ab8ab59
	
				 | 
					
					
						|||
| 
						
						
							
						
						e423a3a1b1
	
				 | 
					
					
						|||
| 
						
						
							
						
						916f354c9b
	
				 | 
					
					
						|||
| 
						
						
							
						
						050f875c47
	
				 | 
					
					
						|||
| 
						
						
							
						
						aeffe40efc
	
				 | 
					
					
						|||
| 
						
						
							
						
						536aa57761
	
				 | 
					
					
						|||
| 
						
						
							
						
						0d10ae06e6
	
				 | 
					
					
						|||
| 
						
						
							
						
						e1b0831854
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e93dfbb8d
	
				 | 
					
					
						|||
| 
						
						
							
						
						8a6bb54eb5
	
				 | 
					
					
						|||
| 
						
						
							
						
						4ef7c9edf7
	
				 | 
					
					
						|||
| 
						
						
							
						
						3eea106c3c
	
				 | 
					
					
						|||
| 
						
						
							
						
						7de8c84e8f
	
				 | 
					
					
						|||
| 
						
						
							
						
						e17c5e2083
	
				 | 
					
					
						|||
| 
						
						
							
						
						9bd3739122
	
				 | 
					
					
						|||
| 
						
						
							
						
						ec1f1031cc
	
				 | 
					
					
						|||
| 
						
						
							
						
						bc99b3dd48
	
				 | 
					
					
						|||
| 
						
						
							
						
						e948741864
	
				 | 
					
					
						|||
| 
						
						
							
						
						0adbac2066
	
				 | 
					
					
						|||
| 
						
						
							
						
						2238db5a4e
	
				 | 
					
					
						|||
| 
						
						
							
						
						98612f5492
	
				 | 
					
					
						|||
| 
						
						
							
						
						1034321f81
	
				 | 
					
					
						|||
| 
						
						
							
						
						e7da32160c
	
				 | 
					
					
						|||
| 
						
						
							
						
						fdb338fe12
	
				 | 
					
					
						|||
| 
						
						
							
						
						9056ef4194
	
				 | 
					
					
						|||
| 
						
						
							
						
						b8a4742fb9
	
				 | 
					
					
						|||
| 
						
						
							
						
						c999e5a8e4
	
				 | 
					
					
						|||
| 
						
						
							
						
						07ef834a1e
	
				 | 
					
					
						|||
| 
						
						
							
						
						997f5c25a2
	
				 | 
					
					
						|||
| 
						
						
							
						
						39e68a977c
	
				 | 
					
					
						|||
| 
						
						
							
						
						c20d3780b2
	
				 | 
					
					
						|||
| 
						
						
							
						
						22725ba3b7
	
				 | 
					
					
						|||
| 
						
						
							
						
						df046bb071
	
				 | 
					
					
						|||
| 
						
						
							
						
						0c1a8d9902
	
				 | 
					
					
						|||
| 
						
						
							
						
						cc59fcfb41
	
				 | 
					
					
						|||
| 
						
						
							
						
						c88566e7bb
	
				 | 
					
					
						|||
| 
						
						
							
						
						39c840cd74
	
				 | 
					
					
						|||
| 
						
						
							
						
						f231828e8d
	
				 | 
					
					
						|||
| 
						
						
							
						
						1318c4983f
	
				 | 
					
					
						|||
| 
						
						
							
						
						c503954f44
	
				 | 
					
					
						|||
| 
						
						
							
						
						77973fc026
	
				 | 
					
					
						|||
| 
						
						
							
						
						61be9528e4
	
				 | 
					
					
						|||
| 
						
						
							
						
						2313485970
	
				 | 
					
					
						|||
| 
						
						
							
						
						20c883fb8a
	
				 | 
					
					
						|||
| 
						
						
							
						
						bbf97f6d3d
	
				 | 
					
					
						|||
| 
						
						
							
						
						706795c85c
	
				 | 
					
					
						|||
| 
						
						
							
						
						e8eaa2366a
	
				 | 
					
					
						|||
| 
						
						
							
						
						12d8f6a931
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d0c105b10
	
				 | 
					
					
						|||
| 
						
						
							
						
						33a8e26efc
	
				 | 
					
					
						|||
| 
						
						
							
						
						bbd23187bc
	
				 | 
					
					
						|||
| 
						
						
							
						
						a0eacf4607
	
				 | 
					
					
						|||
| 
						
						
							
						
						37ad5f43df
	
				 | 
					
					
						|||
| 
						
						
							
						
						a95fa2f96d
	
				 | 
					
					
						|||
| 
						
						
							
						
						6f40b8db3a
	
				 | 
					
					
						|||
| 
						
						
							
						
						63e7895905
	
				 | 
					
					
						|||
| 
						
						
							
						
						6aa4bd2ff5
	
				 | 
					
					
						|||
| 
						
						
							
						
						000315165d
	
				 | 
					
					
						|||
| 
						
						
							
						
						d2e4b91262
	
				 | 
					
					
						|||
| 
						
						
							
						
						c18630295c
	
				 | 
					
					
						|||
| 
						
						
							
						
						b53a3a0981
	
				 | 
					
					
						|||
| 
						
						
							
						
						cf80a15501
	
				 | 
					
					
						|||
| 
						
						
							
						
						2d6d0582a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						5451eba2a3
	
				 | 
					
					
						|||
| 
						
						
							
						
						b8c767354e
	
				 | 
					
					
						|||
| 
						
						
							
						
						c07f557c16
	
				 | 
					
					
						|||
| 
						
						
							
						
						5fff336e77
	
				 | 
					
					
						|||
| 
						
						
							
						
						6e8d816ada
	
				 | 
					
					
						|||
| 
						
						
							
						
						063938ff60
	
				 | 
					
					
						|||
| 
						
						
							
						
						93172797e1
	
				 | 
					
					
						|||
| 
						
						
							
						
						1507f2dff9
	
				 | 
					
					
						|||
| 
						
						
							
						
						9a12fd8021
	
				 | 
					
					
						|||
| 
						
						
							
						
						f596bb8f5e
	
				 | 
					
					
						|||
| 
						
						
							
						
						67da8d965b
	
				 | 
					
					
						|||
| 
						
						
							
						
						e60ffeeb20
	
				 | 
					
					
						|||
| 
						
						
							
						
						9a2f6ab5cf
	
				 | 
					
					
						|||
| 
						
						
							
						
						0a66ae4d26
	
				 | 
					
					
						|||
| 
						
						
							
						
						121d7850fe
	
				 | 
					
					
						|||
| 
						
						
							
						
						98c8dc5b7d
	
				 | 
					
					
						|||
| 
						
						
							
						
						b99f96cf6a
	
				 | 
					
					
						|||
| 
						
						
							
						
						5759df156b
	
				 | 
					
					
						|||
| 
						
						
							
						
						91df92f49a
	
				 | 
					
					
						|||
| 
						
						
							
						
						bff886841b
	
				 | 
					
					
						|||
| 
						
						
							
						
						ebb444dda1
	
				 | 
					
					
						|||
| 
						
						
							
						
						da0252ff98
	
				 | 
					
					
						|||
| 
						
						
							
						
						98da5f6d35
	
				 | 
					
					
						|||
| 
						
						
							
						
						f4eebf59af
	
				 | 
					
					
						|||
| 
						
						
							
						
						63982b3754
	
				 | 
					
					
						|||
| 
						
						
							
						
						d6eaf44aee
	
				 | 
					
					
						|||
| 
						
						
							
						
						b8344f215c
	
				 | 
					
					
						|||
| 
						
						
							
						
						623c4914d1
	
				 | 
					
					
						|||
| 
						
						
							
						
						c0f0328762
	
				 | 
					
					
						|||
| 
						
						
							
						
						571ec74706
	
				 | 
					
					
						|||
| 
						
						
							
						
						7cce0cc2fd
	
				 | 
					
					
						|||
| 
						
						
							
						
						bf38e4e9ea
	
				 | 
					
					
						|||
| 
						
						
							
						
						2c847fb4a3
	
				 | 
					
					
						|||
| 
						
						
							
						
						296c0cc66f
	
				 | 
					
					
						|||
| 
						
						
							
						
						71fbaca9e5
	
				 | 
					
					
						|||
| 
						
						
							
						
						4ce6454ebb
	
				 | 
					
					
						|||
| 
						
						
							
						
						315b662581
	
				 | 
					
					
						|||
| 
						
						
							
						
						4a2a49312b
	
				 | 
					
					
						|||
| 
						
						
							
						
						7174b507d3
	
				 | 
					
					
						|||
| 
						
						
							
						
						aae9c392fa
	
				 | 
					
					
						|||
| 
						
						
							
						
						fad0d264a5
	
				 | 
					
					
						|||
| 
						
						
							
						
						473aa8788c
	
				 | 
					
					
						|||
| 
						
						
							
						
						85ada4dd2b
	
				 | 
					
					
						|||
| 
						
						
							
						
						e6ed7da395
	
				 | 
					
					
						|||
| 
						
						
							
						
						c065238e75
	
				 | 
					
					
						|||
| 
						
						
							
						
						579e4c9a34
	
				 | 
					
					
						|||
| 
						
						
							
						
						3c056dde91
	
				 | 
					
					
						|||
| 
						
						
							
						
						081b4db5c3
	
				 | 
					
					
						|||
| 
						
						
							
						
						36454fb90c
	
				 | 
					
					
						|||
| 
						
						
							
						
						6b1ff048b8
	
				 | 
					
					
						|||
| 
						
						
							
						
						3790f8dfa0
	
				 | 
					
					
						|||
| 
						
						
							
						
						5c086016b5
	
				 | 
					
					
						|||
| 
						
						
							
						
						232ecffa2d
	
				 | 
					
					
						|||
| 
						
						
							
						
						f3fffe4b25
	
				 | 
					
					
						|||
| 
						
						
							
						
						77313663a3
	
				 | 
					
					
						|||
| 
						
						
							
						
						5f2eaa88e0
	
				 | 
					
					
						|||
| 
						
						
							
						
						d6846e6327
	
				 | 
					
					
						|||
| 
						
						
							
						
						314ba114a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						4de89faf7e
	
				 | 
					
					
						|||
| 
						
						
							
						
						beee2e2683
	
				 | 
					
					
						|||
| 
						
						
							
						
						4ab0db3c04
	
				 | 
					
					
						|||
| 
						
						
							
						
						3624636c2f
	
				 | 
					
					
						|||
| 
						
						
							
						
						e80c56e249
	
				 | 
					
					
						
							
								
								
									
										14
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
BasedOnStyle: LLVM
 | 
			
		||||
ColumnLimit: 80
 | 
			
		||||
IndentWidth: 4
 | 
			
		||||
TabWidth: 4
 | 
			
		||||
UseTab: ForContinuationAndIndentation
 | 
			
		||||
SpaceAfterCStyleCast: true
 | 
			
		||||
SpaceBeforeParens: Always
 | 
			
		||||
AlignAfterOpenBracket: DontAlign
 | 
			
		||||
AlignEscapedNewlines: DontAlign
 | 
			
		||||
AlignOperands: DontAlign
 | 
			
		||||
AlignConsecutiveMacros: Consecutive
 | 
			
		||||
BreakBeforeTernaryOperators: true
 | 
			
		||||
SpacesBeforeTrailingComments: 2
 | 
			
		||||
WhitespaceSensitiveMacros: ['XX', 'ACTIONS', 'LS']
 | 
			
		||||
@@ -1,46 +1,45 @@
 | 
			
		||||
# target_compile_features has been introduced in that version
 | 
			
		||||
cmake_minimum_required (VERSION 3.1.0)
 | 
			
		||||
 | 
			
		||||
project (sdn CXX)
 | 
			
		||||
set (version 0.1)
 | 
			
		||||
cmake_minimum_required (VERSION 3.1...3.27)
 | 
			
		||||
project (sdn VERSION 1.0 LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
 | 
			
		||||
	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
# Since we use a language with slow compilers, let's at least use a fast linker
 | 
			
		||||
execute_process (COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=gold -Wl,--version
 | 
			
		||||
	ERROR_QUIET OUTPUT_VARIABLE ld_version)
 | 
			
		||||
if ("${ld_version}" MATCHES "GNU gold")
 | 
			
		||||
	set (CMAKE_EXE_LINKER_FLAGS "-fuse-ld=gold ${CMAKE_EXE_LINKER_FLAGS}")
 | 
			
		||||
	set (CMAKE_CXX_FLAGS
 | 
			
		||||
		"${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-misleading-indentation -pedantic")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
find_package (PkgConfig REQUIRED)
 | 
			
		||||
pkg_check_modules (NCURSESW QUIET ncursesw)
 | 
			
		||||
pkg_check_modules (ACL libacl)
 | 
			
		||||
pkg_check_modules (NCURSESW ncursesw)
 | 
			
		||||
if (NOT NCURSESW_FOUND)
 | 
			
		||||
	find_library (NCURSESW_LIBRARIES NAMES ncursesw)
 | 
			
		||||
	find_path (NCURSESW_INCLUDE_DIRS ncurses.h PATH_SUFFIXES ncurses)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
add_executable (${PROJECT_NAME} ${PROJECT_NAME}.cpp)
 | 
			
		||||
target_include_directories (${PROJECT_NAME} PUBLIC ${NCURSESW_INCLUDE_DIRS})
 | 
			
		||||
target_link_libraries (${PROJECT_NAME} PUBLIC ${NCURSESW_LIBRARIES} acl)
 | 
			
		||||
target_link_libraries (${PROJECT_NAME}
 | 
			
		||||
	PUBLIC ${NCURSESW_LIBRARIES} ${ACL_LIBRARIES})
 | 
			
		||||
target_compile_features (${PROJECT_NAME} PUBLIC cxx_std_14)
 | 
			
		||||
target_compile_definitions (${PROJECT_NAME} PUBLIC
 | 
			
		||||
	-DPROJECT_NAME=\"${PROJECT_NAME}\" -DPROJECT_VERSION=\"${version}\")
 | 
			
		||||
	-DPROJECT_NAME=\"${PROJECT_NAME}\" -DPROJECT_VERSION=\"${PROJECT_VERSION}\")
 | 
			
		||||
 | 
			
		||||
include (GNUInstallDirs)
 | 
			
		||||
install (TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
 | 
			
		||||
install (PROGRAMS ${PROJECT_NAME}-install DESTINATION ${CMAKE_INSTALL_BINDIR})
 | 
			
		||||
install (FILES sdn.1 sdn-install.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
 | 
			
		||||
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
 | 
			
		||||
 | 
			
		||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Directory navigator")
 | 
			
		||||
set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
 | 
			
		||||
set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p@janouch.name>")
 | 
			
		||||
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
 | 
			
		||||
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
 | 
			
		||||
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
 | 
			
		||||
set (CPACK_PACKAGE_VERSION ${version})
 | 
			
		||||
set (CPACK_GENERATOR "TGZ;ZIP")
 | 
			
		||||
set (CPACK_PACKAGE_FILE_NAME
 | 
			
		||||
	"${PROJECT_NAME}-${version}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
 | 
			
		||||
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}-${version}")
 | 
			
		||||
	"${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
 | 
			
		||||
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}-${PROJECT_VERSION}")
 | 
			
		||||
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
 | 
			
		||||
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user")
 | 
			
		||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${version}")
 | 
			
		||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
 | 
			
		||||
 | 
			
		||||
set (CPACK_SET_DESTDIR TRUE)
 | 
			
		||||
include (CPack)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
Copyright (c) 2017 - 2018, Přemysl Janouch <p@janouch.name>
 | 
			
		||||
Copyright (c) 2017 - 2024, Přemysl Eric Janouch <p@janouch.name>
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,12 +1,19 @@
 | 
			
		||||
.POSIX:
 | 
			
		||||
SHELL = /bin/sh
 | 
			
		||||
CXXFLAGS = -g -std=c++14 -Wall -Wextra -pedantic -static-libstdc++
 | 
			
		||||
CXXFLAGS = -g -std=c++14 -Wall -Wextra -Wno-misleading-indentation -pedantic
 | 
			
		||||
CPPFLAGS = `sed -ne '/^project (\([^ )]*\) VERSION \([^ )]*\).*/ \
 | 
			
		||||
	s//-DPROJECT_NAME="\1" -DPROJECT_VERSION="\2"/p' CMakeLists.txt`
 | 
			
		||||
 | 
			
		||||
all: sdn
 | 
			
		||||
%: %.cpp CMakeLists.txt
 | 
			
		||||
	$(CXX) $(CXXFLAGS) $< -o $@ `pkg-config --libs --cflags ncursesw` -lacl \
 | 
			
		||||
	`sed -ne 's/^project (\([^ )]*\).*/-DPROJECT_NAME="\1"/p' \
 | 
			
		||||
	-e 's/^set (version \([^ )]*\).*/-DPROJECT_VERSION="\1"/p' CMakeLists.txt`
 | 
			
		||||
sdn: sdn.cpp CMakeLists.txt
 | 
			
		||||
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o $@ \
 | 
			
		||||
	-lacl `pkg-config --libs --cflags ncursesw`
 | 
			
		||||
sdn-static: sdn.cpp CMakeLists.txt
 | 
			
		||||
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o $@ \
 | 
			
		||||
	-static-libstdc++ \
 | 
			
		||||
	-Wl,--start-group,-Bstatic \
 | 
			
		||||
	-lacl `pkg-config --static --libs --cflags ncursesw` \
 | 
			
		||||
	-Wl,--end-group,-Bdynamic
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f sdn
 | 
			
		||||
	rm -f sdn sdn-static
 | 
			
		||||
 | 
			
		||||
.PHONY: all clean
 | 
			
		||||
.PHONY: clean
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								README.adoc
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								README.adoc
									
									
									
									
									
								
							@@ -11,15 +11,28 @@ commands.  It enables you to:
 | 
			
		||||
   can be simply forwarded if it is to be edited.  What's more, it will always
 | 
			
		||||
   be obvious whether the navigator is running.
 | 
			
		||||
 | 
			
		||||
Development has just started and the only supported platform is Linux.
 | 
			
		||||
I wanted to try a different, simpler approach here.
 | 
			
		||||
'sdn' runs on Linux and all BSD derivatives.  I wanted to try a different,
 | 
			
		||||
simpler approach here, and the end result is very friendly to tinkering.
 | 
			
		||||
 | 
			
		||||
image::sdn.png[align="center"]
 | 
			
		||||
 | 
			
		||||
Packages
 | 
			
		||||
--------
 | 
			
		||||
Regular releases are sporadic.  git master should be stable enough.
 | 
			
		||||
You can get a package with the latest development version using Arch Linux's
 | 
			
		||||
https://aur.archlinux.org/packages/sdn-git[AUR],
 | 
			
		||||
or as a https://git.janouch.name/p/nixexprs[Nix derivation].
 | 
			
		||||
 | 
			
		||||
Building
 | 
			
		||||
--------
 | 
			
		||||
Build dependencies: CMake and/or make, a C++14 compiler, pkg-config +
 | 
			
		||||
Runtime dependencies: ncursesw
 | 
			
		||||
Runtime dependencies: ncursesw, libacl (on Linux)
 | 
			
		||||
 | 
			
		||||
 $ git clone https://github.com/pjanouch/sdn.git
 | 
			
		||||
// Working around libasciidoc's missing support for escaping it like \++
 | 
			
		||||
Unfortunately most LLVM libc{plus}{plus} versions have a bug that crashes 'sdn'
 | 
			
		||||
on start.  Use GNU libstdc{plus}{plus} if you're affected.
 | 
			
		||||
 | 
			
		||||
 $ git clone https://git.janouch.name/p/sdn.git
 | 
			
		||||
 $ mkdir sdn/build
 | 
			
		||||
 $ cd sdn/build
 | 
			
		||||
 $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
 | 
			
		||||
@@ -37,64 +50,63 @@ Or you can try telling CMake to make a package for you.  For Debian it is:
 | 
			
		||||
There is also a Makefile you can use to quickly build a binary to be copied
 | 
			
		||||
into the PATH of any machine you want to have 'sdn' on.
 | 
			
		||||
 | 
			
		||||
zsh
 | 
			
		||||
---
 | 
			
		||||
To start using this navigator, put the following in your .zshrc:
 | 
			
		||||
....
 | 
			
		||||
sdn-navigate () {
 | 
			
		||||
  # ... possibly zle-line-init
 | 
			
		||||
  eval `sdn`
 | 
			
		||||
  [ -z "$cd" ] || cd "$cd"
 | 
			
		||||
  [ -z "$insert" ] || LBUFFER="$LBUFFER$insert "
 | 
			
		||||
  zle reset-prompt
 | 
			
		||||
  # ... possibly zle-line-finish
 | 
			
		||||
}
 | 
			
		||||
zle -N sdn-navigate
 | 
			
		||||
bindkey '\eo' sdn-navigate
 | 
			
		||||
....
 | 
			
		||||
Configuration
 | 
			
		||||
-------------
 | 
			
		||||
For a slightly more technical explanation please refer to manual pages.
 | 
			
		||||
 | 
			
		||||
bash
 | 
			
		||||
----
 | 
			
		||||
Here we can't reset the prompt from within a `bind -x` handler but there is
 | 
			
		||||
an acceptable workaround:
 | 
			
		||||
....
 | 
			
		||||
sdn-navigate () {
 | 
			
		||||
  SDN_L=$READLINE_LINE SDN_P=$READLINE_POINT
 | 
			
		||||
  READLINE_LINE=
 | 
			
		||||
Integration
 | 
			
		||||
~~~~~~~~~~~
 | 
			
		||||
The package contains an installation script called 'sdn-install' which will bind
 | 
			
		||||
'sdn' to Alt-o in your shell's initialisation file.  The supported shells are:
 | 
			
		||||
 | 
			
		||||
  eval `sdn`
 | 
			
		||||
  [[ -z "$cd" ]] || cd "$cd"
 | 
			
		||||
  [[ -z "$insert" ]] || {
 | 
			
		||||
    SDN_L="${SDN_L:0:$SDN_P}$insert ${SDN_L:$SDN_P}"
 | 
			
		||||
    ((SDN_P=SDN_P+${#insert}+1))
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
sdn-restore () {
 | 
			
		||||
  READLINE_LINE=$SDN_L READLINE_POINT=$SDN_P
 | 
			
		||||
  unset SDN_L SDN_P
 | 
			
		||||
}
 | 
			
		||||
 - *zsh*: works well
 | 
			
		||||
 - *bash*: minor issue: exiting the navigator confirms an empty prompt
 | 
			
		||||
 - *fish*: works well
 | 
			
		||||
 - *elvish*: version 0.14.1 and above, an unstable API is used, works well
 | 
			
		||||
+
 | 
			
		||||
elvish is absolutely perverse.  And so is integrating 'sdn' into it because it
 | 
			
		||||
already includes a custom file manager, bound to Ctrl-N (though I find the
 | 
			
		||||
ranger-like interface confusing and resource-demanding).
 | 
			
		||||
 | 
			
		||||
bind -x '"\200": sdn-navigate'
 | 
			
		||||
bind -x '"\201": sdn-restore'
 | 
			
		||||
bind '"\eo":"\200\C-m\201"'
 | 
			
		||||
....
 | 
			
		||||
 | 
			
		||||
Colors
 | 
			
		||||
------
 | 
			
		||||
Colours
 | 
			
		||||
~~~~~~~
 | 
			
		||||
Here is an example of a '~/.config/sdn/look' file; the format is similar to
 | 
			
		||||
that of git, only named colors aren't supported:
 | 
			
		||||
that of git, only named colours aren't supported:
 | 
			
		||||
 | 
			
		||||
....
 | 
			
		||||
cursor 231 202
 | 
			
		||||
bar 16 255 ul
 | 
			
		||||
cwd bold
 | 
			
		||||
input
 | 
			
		||||
cmdline 145
 | 
			
		||||
....
 | 
			
		||||
 | 
			
		||||
Similar software
 | 
			
		||||
----------------
 | 
			
		||||
 * https://elvish.io/ is an entire shell with an integrated ranger-like file
 | 
			
		||||
   manager on Ctrl-N (I find this confusing and resource-demanding, preferring
 | 
			
		||||
   to keep closer to "orthodox file managers")
 | 
			
		||||
Filename colours are taken from the `LS_COLORS` environment variable.
 | 
			
		||||
Run `dircolors` to get some defaults.
 | 
			
		||||
 | 
			
		||||
Bindings
 | 
			
		||||
~~~~~~~~
 | 
			
		||||
To obtain more vifm-like controls, you may write the following to your
 | 
			
		||||
'~/.config/sdn/bindings' file:
 | 
			
		||||
 | 
			
		||||
....
 | 
			
		||||
normal h parent
 | 
			
		||||
normal l choose
 | 
			
		||||
....
 | 
			
		||||
 | 
			
		||||
Helper programs
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
The F3 and F4 keys are normally bound to actions 'view' and 'edit', similarly to
 | 
			
		||||
Norton Commander and other orthodox file managers.  The helper programs used
 | 
			
		||||
here may be changed by setting the PAGER and VISUAL (or EDITOR) environment
 | 
			
		||||
variables.
 | 
			
		||||
 | 
			
		||||
While it is mostly possible to get 'mcview' working using an invocation like
 | 
			
		||||
`PAGER='mcview -u' sdn`, beware that this helper cannot read files from its
 | 
			
		||||
standard input, nor does it enable overstrike processing by default (F9, could
 | 
			
		||||
be hacked around in 'mc.ext' by turning on the `nroff` switch for a custom file
 | 
			
		||||
extension, just without actually invoking 'nroff'), and thus it can't show the
 | 
			
		||||
program help.  'sdn' is currently optimised for 'less' as the pager.
 | 
			
		||||
 | 
			
		||||
Contributing and Support
 | 
			
		||||
------------------------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										182
									
								
								sdn-install
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										182
									
								
								sdn-install
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
#!/bin/sh -e
 | 
			
		||||
# sdn-install: integrate sdn with the shell, binding to M-o
 | 
			
		||||
# vim: set sw=2 ts=2 sts=2 et tw=80:
 | 
			
		||||
 | 
			
		||||
zsh() {
 | 
			
		||||
cat <<'EOF'
 | 
			
		||||
sdn-navigate () {
 | 
			
		||||
  # optionally: zle zle-line-finish
 | 
			
		||||
  while eval "`SDN=1 sdn "$BUFFER" "$CURSOR"`"
 | 
			
		||||
  do
 | 
			
		||||
    [ -z "$cd" ] || cd "$cd"
 | 
			
		||||
    [ -z "$insert" ] || LBUFFER="$LBUFFER$insert "
 | 
			
		||||
    [ -z "$helper" ] && break
 | 
			
		||||
 | 
			
		||||
    # Workaround for "zsh: suspended (tty output)" when invoking
 | 
			
		||||
    # helpers after the terminal has been resized while running sdn
 | 
			
		||||
    command true
 | 
			
		||||
 | 
			
		||||
    # Add to history, see https://www.zsh.org/mla/workers/2020/msg00633.html
 | 
			
		||||
    fc -R =(print -- "$helper")
 | 
			
		||||
 | 
			
		||||
    /bin/sh -c "$helper" </dev/tty || break
 | 
			
		||||
  done
 | 
			
		||||
  # optionally: zle zle-line-init
 | 
			
		||||
  zle reset-prompt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
zle -N sdn-navigate
 | 
			
		||||
bindkey '\eo' sdn-navigate
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bash() {
 | 
			
		||||
cat <<'EOF'
 | 
			
		||||
# We can't make the shell update the prompt on directory changes
 | 
			
		||||
# since there's no way to invoke `prompt_again()` from a `bind -x`
 | 
			
		||||
# handler but we can work around it by submitting a blank line.
 | 
			
		||||
sdn-cursor () {
 | 
			
		||||
  if [[ $BASH_VERSINFO -lt 5 ]]
 | 
			
		||||
  then echo -n "$SDN_L" | wc -m
 | 
			
		||||
  else echo "$SDN_P"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sdn-navigate () {
 | 
			
		||||
  SDN_L=$READLINE_LINE SDN_P=$READLINE_POINT
 | 
			
		||||
  READLINE_LINE=
 | 
			
		||||
 | 
			
		||||
  while eval "`SDN=1 sdn "$SDN_L" "$(sdn-cursor)"`"
 | 
			
		||||
  do
 | 
			
		||||
    [[ -z $cd ]] || cd "$cd"
 | 
			
		||||
    [[ -z $insert ]] || {
 | 
			
		||||
      SDN_L="${SDN_L:0:$SDN_P}$insert ${SDN_L:$SDN_P}"
 | 
			
		||||
      ((SDN_P=SDN_P+${#insert}+1))
 | 
			
		||||
    }
 | 
			
		||||
    [[ -z $helper ]] && break
 | 
			
		||||
    history -s -- "$helper"
 | 
			
		||||
    /bin/sh -c "$helper" || break
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sdn-restore () {
 | 
			
		||||
  READLINE_LINE=$SDN_L READLINE_POINT=$SDN_P
 | 
			
		||||
  unset SDN_L SDN_P
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# These never occur in UTF-8: \300-\301 \365-\367 \370-\377
 | 
			
		||||
bind -x '"\300": sdn-navigate'
 | 
			
		||||
bind -x '"\301": sdn-restore'
 | 
			
		||||
bind '"\eo": "\300\C-m\301"'
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fish() {
 | 
			
		||||
cat <<'EOF'
 | 
			
		||||
function sdn-navigate
 | 
			
		||||
  set --local IFS
 | 
			
		||||
  set --local buffer (commandline)
 | 
			
		||||
  set --local cursor (commandline --cursor)
 | 
			
		||||
  while eval (SDN=1 sdn $buffer $cursor | \
 | 
			
		||||
    string replace -ar '^(.*?)=' 'set --$1 ')
 | 
			
		||||
    test -z "$cd" || cd "$cd"
 | 
			
		||||
    test -z "$insert" || commandline --insert "$insert "
 | 
			
		||||
    test -z "$helper" && break
 | 
			
		||||
    /bin/sh -c "$helper" || break
 | 
			
		||||
  end
 | 
			
		||||
  commandline --function repaint
 | 
			
		||||
end
 | 
			
		||||
bind \eo sdn-navigate
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elvish() {
 | 
			
		||||
cat <<'EOF'
 | 
			
		||||
edit:insert:binding[Alt-o] = {
 | 
			
		||||
  use str
 | 
			
		||||
  local:reesc = [posix]{ str:replace "'\\''"  "''" $posix }
 | 
			
		||||
  local:posix = [cmd]{ /bin/sh -c $cmd </dev/tty >/dev/tty 2>&1 }
 | 
			
		||||
 | 
			
		||||
  # XXX: the -dot is not a stable API, and may hence break soon
 | 
			
		||||
  # https://elv.sh/ref/builtin.html#do-not-use-functions-and-variables
 | 
			
		||||
  local:buffer = $edit:current-command
 | 
			
		||||
  local:cursor = (str:to-codepoints $buffer[0..$edit:-dot] | count)
 | 
			
		||||
  local:ns = (ns [&])
 | 
			
		||||
  while ?(eval ($reesc (E:SDN=1 sdn $buffer $cursor |
 | 
			
		||||
    sed 's/^local //' | slurp)) &ns=$ns) {
 | 
			
		||||
    if (not-eq $ns[cd] "") { cd $ns[cd] }
 | 
			
		||||
    if (not-eq $ns[insert] "") { edit:insert-at-dot $ns[insert]" " }
 | 
			
		||||
    if (or (eq $ns[helper] "") (not ?($posix $ns[helper]))) { break }
 | 
			
		||||
  }
 | 
			
		||||
  edit:redraw &full=$true
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
shell= path=
 | 
			
		||||
while getopts s:f:h opt
 | 
			
		||||
do
 | 
			
		||||
  case $opt in
 | 
			
		||||
  s) shell=$OPTARG;;
 | 
			
		||||
  f) path=$OPTARG;;
 | 
			
		||||
  *) echo "Usage: $0 [-s SHELL] [-f RCPATH | -]"; exit 2
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Figure out the shell to integrate with
 | 
			
		||||
login=$(basename "$SHELL")
 | 
			
		||||
actual=$(ps -p $$ -o ppid= | xargs ps -o comm= -p | sed 's/^-//')
 | 
			
		||||
if [ -z "$shell" ]
 | 
			
		||||
then
 | 
			
		||||
  if [ "$login" != "$actual" ]
 | 
			
		||||
  then
 | 
			
		||||
    echo "Conflict between login ($login) and invoking ($actual) shell."
 | 
			
		||||
    echo "Specify the shell with the -s option."
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  shell=$actual
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Figure out the default initialisation file
 | 
			
		||||
case "$shell" in
 | 
			
		||||
zsh|bash)
 | 
			
		||||
  rc=~/.${shell}rc;;
 | 
			
		||||
fish)
 | 
			
		||||
  rc=${XDG_CONFIG_HOME:-$HOME/.config}/fish/conf.d/sdn.fish;;
 | 
			
		||||
elvish)
 | 
			
		||||
  rc=~/.elvish/rc.elv;;
 | 
			
		||||
*)
 | 
			
		||||
  echo "$shell is not supported."
 | 
			
		||||
  exit 1
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Just print out the snippet if requested
 | 
			
		||||
if [ "$path" = "-" ]
 | 
			
		||||
then
 | 
			
		||||
  $shell
 | 
			
		||||
  exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Finally append to or update the appropriate file
 | 
			
		||||
b="# sdn-install begin"
 | 
			
		||||
e="# sdn-install end"
 | 
			
		||||
[ -z "$path" ] && path=$rc
 | 
			
		||||
mkdir -p "$(dirname "$path")"
 | 
			
		||||
touch "$path"
 | 
			
		||||
 | 
			
		||||
if ! grep -q "^$b" "$path" 2>/dev/null || ! grep -q "^$e" "$path" 2>/dev/null
 | 
			
		||||
then
 | 
			
		||||
  printf "\n$b\n%s\n$e\n" "$($shell)" >> "$path"
 | 
			
		||||
  echo "The snippet has been added to $path"
 | 
			
		||||
  exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# POSIX-compliant in-place sed, trying to retain permissions here
 | 
			
		||||
temp=$path.sdn.new
 | 
			
		||||
cp -p -- "$path" "$temp"
 | 
			
		||||
sed < "$path" > "$temp" "/^$b/,/^$e/c\\
 | 
			
		||||
$b\\
 | 
			
		||||
$($shell | sed 's/\\/&&/g; s/$/\\/')
 | 
			
		||||
$e"
 | 
			
		||||
mv -- "$temp" "$path"
 | 
			
		||||
echo "The snippet in $path has been updated."
 | 
			
		||||
							
								
								
									
										35
									
								
								sdn-install.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								sdn-install.1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
.Dd October 27, 2020
 | 
			
		||||
.Dt SDN-INSTALL 1
 | 
			
		||||
.Os Linux
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm sdn-install
 | 
			
		||||
.Nd integrate sdn with the shell
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm sdn-install
 | 
			
		||||
.Op Fl s Ar shell
 | 
			
		||||
.Op Fl p Ar - | rcpath
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
integrates
 | 
			
		||||
.Xr sdn 1
 | 
			
		||||
with your shell, binding it to M-o.  If the navigator has already been
 | 
			
		||||
integrated, it updates the snippet in-place.
 | 
			
		||||
.Pp
 | 
			
		||||
The options are as follows:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
.It Fl p Ar -
 | 
			
		||||
Merely print the integration snippet for the appropriate shell to the standard
 | 
			
		||||
output, not changing anything.
 | 
			
		||||
.It Fl p Ar rcpath
 | 
			
		||||
Install the integration snippet into a different shell initialization file than
 | 
			
		||||
the default one for your user.
 | 
			
		||||
.It Fl s Ar shell
 | 
			
		||||
If you want to integrate
 | 
			
		||||
.Xr sdn 1
 | 
			
		||||
with a different shell than the one you're running, use this option to specify
 | 
			
		||||
it.
 | 
			
		||||
.El
 | 
			
		||||
.Sh REPORTING BUGS
 | 
			
		||||
Use
 | 
			
		||||
.Lk https://git.janouch.name/p/sdn
 | 
			
		||||
to report bugs, request features, or submit pull requests.
 | 
			
		||||
							
								
								
									
										131
									
								
								sdn.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								sdn.1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
\" https://mandoc.bsd.lv/man/roff.7.html#Sentence_Spacing
 | 
			
		||||
.Dd October 27, 2020
 | 
			
		||||
.Dt SDN 1
 | 
			
		||||
.Os Linux
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm sdn
 | 
			
		||||
.Nd directory navigator
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm sdn
 | 
			
		||||
.Op Ar line Ar point
 | 
			
		||||
.Nm sdn
 | 
			
		||||
.Cm --version
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
is a simple directory navigator that you can launch while editing shell
 | 
			
		||||
commands.
 | 
			
		||||
Use the
 | 
			
		||||
.Xr sdn-install 1
 | 
			
		||||
script to integrate it with your shell, then invoke it at any time with M-o.
 | 
			
		||||
.Pp
 | 
			
		||||
Press F1 to get a list of active key bindings and their assigned actions,
 | 
			
		||||
grouped by their contexts.
 | 
			
		||||
.Pp
 | 
			
		||||
Program arguments are only used by integration snippets to forward the parent
 | 
			
		||||
shell's command line.
 | 
			
		||||
The
 | 
			
		||||
.Ar point
 | 
			
		||||
is given in terms of characters.
 | 
			
		||||
.Sh OPTIONS
 | 
			
		||||
While some behaviour can be toggled from within the program, some can only be
 | 
			
		||||
changed by modifying configuration files manually.
 | 
			
		||||
.Pp
 | 
			
		||||
The files follow a simple syntax derived from the Bourne shell: each option is
 | 
			
		||||
on its own line, with words separated by linear whitespace.
 | 
			
		||||
Comments start with a hash (#) and continue until the end of the line.
 | 
			
		||||
All special characters may be quoted using either a backslash or single-quoted
 | 
			
		||||
strings.
 | 
			
		||||
.Pp
 | 
			
		||||
The options and the default key bindings controlling them are as follows:
 | 
			
		||||
.Bl -tag
 | 
			
		||||
.It full-view Em bool No (t)
 | 
			
		||||
If non-zero, the equivalent format to
 | 
			
		||||
.Ql ls -l
 | 
			
		||||
is used to display directory contents rather than simply listing the filenames.
 | 
			
		||||
.It gravity Em bool
 | 
			
		||||
If non-zero, all entries stick to the bottom of the screen, i.e., all empty
 | 
			
		||||
space is at the top.
 | 
			
		||||
.It reverse-sort Em bool No (R)
 | 
			
		||||
If non-zero, the order of entries is reversed.
 | 
			
		||||
.It show-hidden Em bool No (M-.)
 | 
			
		||||
If non-zero, filenames beginning with a full stop are shown.
 | 
			
		||||
.It ext-helpers Em bool
 | 
			
		||||
If non-zero, viewers and editors are launched from the parent shell.
 | 
			
		||||
This way you can suspend them and use job control features of the shell.
 | 
			
		||||
However it also enforces any pending change to the shell's working directory.
 | 
			
		||||
.It sort-column Em number No (< >)
 | 
			
		||||
The zero-based index of the
 | 
			
		||||
.Ql full-view
 | 
			
		||||
column that entries are ordered by.
 | 
			
		||||
.El
 | 
			
		||||
.Sh ENVIRONMENT
 | 
			
		||||
.Bl -tag -width 15n
 | 
			
		||||
.It Ev LS_COLORS
 | 
			
		||||
Used to retrieve filename colours.
 | 
			
		||||
The format is described in
 | 
			
		||||
.Xr dir_colors 5
 | 
			
		||||
and you can use the
 | 
			
		||||
.Xr dircolors 1
 | 
			
		||||
utility to initialize this variable.
 | 
			
		||||
.It Ev PAGER
 | 
			
		||||
The viewer program to be launched by the F3 key binding as well as to show
 | 
			
		||||
the internal help message.
 | 
			
		||||
If none is set, it defaults to
 | 
			
		||||
.Xr less 1 .
 | 
			
		||||
.It Ev VISUAL , Ev EDITOR
 | 
			
		||||
The editor program to be launched by the F4 key binding.
 | 
			
		||||
If neither variable is set, it defaults to
 | 
			
		||||
.Xr vi 1 .
 | 
			
		||||
.El
 | 
			
		||||
.Sh FILES
 | 
			
		||||
.Bl -tag -width 25n -compact
 | 
			
		||||
.It Pa ~/.config/sdn/config
 | 
			
		||||
Program configuration and navigation state, initialized or overwritten on exit.
 | 
			
		||||
.It Pa ~/.config/sdn/bindings
 | 
			
		||||
Custom key binding overrides.
 | 
			
		||||
.It Pa ~/.config/sdn/look
 | 
			
		||||
Redefine terminal attributes for UI elements.
 | 
			
		||||
.El
 | 
			
		||||
.Sh EXAMPLES
 | 
			
		||||
.Ss Pa bindings
 | 
			
		||||
Key names or combinations follow the Emacs syntax for Control and Meta prefixes
 | 
			
		||||
and
 | 
			
		||||
.Xr terminfo 5
 | 
			
		||||
names are used for special keys.
 | 
			
		||||
To obtain more vifm-like controls and Windows-like quit abilities:
 | 
			
		||||
.Bd -literal -offset indent
 | 
			
		||||
normal h parent
 | 
			
		||||
normal l choose
 | 
			
		||||
normal M-f4 quit
 | 
			
		||||
.Ed
 | 
			
		||||
.Pp
 | 
			
		||||
Midnight Commander binds the same traversal actions to sequences normally
 | 
			
		||||
unknown to ncurses, due to them being missing from terminfo.
 | 
			
		||||
You'll need to define them manually to match your terminal.
 | 
			
		||||
For rxvt, that would be:
 | 
			
		||||
.Bd -literal -offset indent
 | 
			
		||||
define C-ppage ^[[5^
 | 
			
		||||
define C-npage ^[[6^
 | 
			
		||||
normal C-ppage parent
 | 
			
		||||
normal C-npage choose
 | 
			
		||||
.Ed
 | 
			
		||||
.Pp
 | 
			
		||||
Escape characters must be inserted verbatim, e.g., by pressing C-v ESC in vi,
 | 
			
		||||
or C-q ESC in Emacs.
 | 
			
		||||
.Ss Pa look
 | 
			
		||||
Terminal attributes are accepted in a format similar to that of
 | 
			
		||||
.Xr git-config 1 ,
 | 
			
		||||
only named colours aren't supported.
 | 
			
		||||
For a black-on-white terminal supporting 256 colours, a theme such as the
 | 
			
		||||
following may work:
 | 
			
		||||
.Bd -literal -offset indent
 | 
			
		||||
cursor 231 202
 | 
			
		||||
bar 16 255 ul
 | 
			
		||||
cwd bold
 | 
			
		||||
input
 | 
			
		||||
cmdline 145
 | 
			
		||||
.Ed
 | 
			
		||||
.Sh REPORTING BUGS
 | 
			
		||||
Use
 | 
			
		||||
.Lk https://git.janouch.name/p/sdn
 | 
			
		||||
to report bugs, request features, or submit pull requests.
 | 
			
		||||
		Reference in New Issue
	
	Block a user