.cshrc の設定

# tcsh の最新リリース 6.24.10 (2023-04-14)
https://mailman.astron.com/pipermail/tcsh/2023-April/000299.html

# .cshrc
https://github.com/jp-yen/dotfiles/blob/main/csh.cshrc へ上げました

```tcsh:.cshrc
#!/usr/bin/tcsh
set echo_style both
set USER = `whoami`
set HOST = `uname -n`

set path = ( ~/opt/bin $path )
setenv PYTHONPATH	~/opt/lib/python2.7/site-packages

setenv CC	/home/pi/opt/bin/gcc
setenv CPP	/home/pi/opt/bin/cpp
setenv CXX	/home/pi/opt/bin/g++
setenv FC	/home/pi/opt/bin/gfortran
setenv AR	/home/pi/opt/bin/ar
setenv NM	/home/pi/opt/bin/nm
setenv CFLAGS		"-I/usr/include/arm-linux-gnueabihf -I$HOME/opt/include -O3 -pipe -march=native"
setenv CXXFLAGS		"${CFLAGS}"
setenv LDFLAGS		"-L$HOME/opt/lib -Wl,-rpath,$HOME/opt/lib -Wl,-O1 -Wl,-Bsymbolic-functions"

set GCC_LIB_PATH="`echo $HOME/opt/lib{,exec}/gcc/armv7l-unknown-linux-gnueabihf/9.?.0{,/plugin} | tr ' ' '\n' | sort -r | tr '\n' ';'`"
setenv LD_LIBRARY_PATH "$HOME/opt/lib;${GCC_LIB_PATH}/lib";
unset GCC_LIB_PATH
# LD_RUN_PATH


if ( $?prompt ) then
	set filec
	set ignoreeof
	set history = 1000
	set fignore = ( .o \~ .aux .log )
	set visiblebell

	alias	c	clear
	alias	JP	setenv LANG ja_JP.utf8
	alias	C	unsetenv LANG LC_ALL
	( which \python3 >& /dev/null ) &&	alias	_python	`which \python3`
	( which \screen  >& /dev/null ) &&	alias	screen	`which \screen` -U
	# cygwin や WSL など、/var/run/screen 問題の回避
	setenv SCREENDIR $HOME/.screen
	if ( ! -d $SCREENDIR ) then
		mkdir $SCREENDIR && chmod 700 $SCREENDIR
	endif

	setenv PAGER more
	( which \less >& /dev/null ) && setenv PAGER `which \less`
	setenv LESS "-ReFXsc"
	setenv LESSOPEN	'| /bin/lesspipe %s'

	set esc=`printf "\e"`
	( which \tput >& /dev/null ) && set TPUT = `which \tput`
	if ( $?TPUT ) then
		set clr = "`$TPUT sgr0`"

		# bold / blink
		setenv  LESS_TERMCAP_mb "`$TPUT blink`"
		setenv  LESS_TERMCAP_md "`$TPUT bold`"

		# standout-mode start/end (Info box)
		setenv  LESS_TERMCAP_so "`$TPUT smso`"
		setenv  LESS_TERMCAP_se "`$TPUT rmso`"

		# under-line start/end
		setenv  LESS_TERMCAP_us "`$TPUT smul ; $TPUT setab 4`"
		setenv  LESS_TERMCAP_ue "`$TPUT rmul ; $TPUT op`"

		# all off
		setenv  LESS_TERMCAP_me "$clr"
		setenv  LESS_TERMCAP_zz "$clr"		# dummy for printenv

		# has 256 color mode?
		if (  `$TPUT colors` > 254 ) then
			setenv  LESS_TERMCAP_md "`$TPUT bold ; $TPUT setab 237`"
			setenv  LESS_TERMCAP_so "`$TPUT smso ; $TPUT setab 18 ; $TPUT setaf 229`"
			setenv  LESS_TERMCAP_se "`$TPUT rmso ; $TPUT op`"
			setenv  LESS_TERMCAP_us "`$TPUT smul ; $TPUT setab 4 ; $TPUT setaf 136`"
		endif
		unset TPUT
	else
		set clr = "`printf '\e[0m'`"

		setenv  LESS_TERMCAP_md "$esc"'[1;44m'		# begin bold
		setenv  LESS_TERMCAP_mb "$esc"'[1;5;31m'	# begin blinking
		setenv  LESS_TERMCAP_me "$clr"				# end mode
		setenv  LESS_TERMCAP_so "$esc"'[5;7;229m'	# begin standout-mode - info box
		setenv  LESS_TERMCAP_se "$clr"				# end standout-mode
		setenv  LESS_TERMCAP_us "$esc"'[4m'			# begin underline
		setenv  LESS_TERMCAP_ue "$esc"'[24m'		# end underline
	endif

	set prompt_char = '#'
	if ( ! $?tcsh ) then
		[ `id -u` -ne 0 ] && set prompt_char = '%'
		alias setprompt 'set prompt="${USER}@${HOST}:${cwd}[\\!]${prompt_char} "'
		alias cd 'chdir \!* ; setprompt'
		alias pushd 'pushd \!* ; setprompt'
		alias popd 'popd \!* ; setprompt'
		setprompt
	else
		set autolist
		# csh と tcsh の間で history ファイルに互換性が無いので
		set histfile = ~/.thistory
		# コマンド履歴の保存設定
		set histdup = erase
		# history の表示形式を変更しますが、変更すると過去の
		# .history ファイルの形式も変わり読めなくなります
		# → history がリセットされます
		set history = ( 1000 "%h %Y/%W/%D %T %R\n" )
		set savehist = ( 1000 merge )
		# 連続してログアウトしたり、WLC でログアウトする時に
		# 保存が失敗することがあるので、明示的に保存する
		alias exit "history -M ; history -S ; exec `which \echo`"

		set nobeep
		# パスの重複削除
		set -f path = ( $path )

		# 色付きプロンプト
		[ `id -u` -ne 0 ] && set prompt_char = '\%'
		set in_screen = `echo $TERM | grep screen | wc -l` >& /dev/null
		if ( $in_screen ) then
			set  prompt_color = "$clr$esc"'[32;44;1m'
		else
			set  prompt_color = "$clr$esc"'[48;5;28;93m'
		endif
		set  prompt = '%{'"$prompt_color"'%}%U%n@%m%u:%B%~%b[%h]'"$prompt_char"'%{'$clr'%} '
		set rprompt = '%{'"$prompt_color"'%}%Y-%W-%D %P%{'$clr'%} '
		unset in_screen prompt_color

		alias	ls	ls-F
	endif
	unset esc
	unset clr

	( which \fortune >& /dev/null ) && fortune -a
endif
# for vim
# vim: set ts=4 fenc=utf-8 ff=unix ft=csh :
```

Raspberry Pi で使っている .cshrc。csh と tcsh で共用できるようにしています。
.login, .logout は今のところ使ってません。

CC, LD ...の環境変数は [octave 5.1.0 のコンパイル](https://qiita.com/jp_yen/items/99b877d6bdd4264ec75b) が由来。
※octave は最後のリンクが失敗してしまい、build できませんでした。
このパスに gcc や、ld が無いと色々と問題が起きますのでコピペには注意。

history の形式を変えても履歴を引き継ぐためには .cshrc を書き換える前に

1. バックアップを取る <br> cp .history .history.old 
2. ファイルを読みこむ (現在の history とマージする) <br>  history -M
3. 保存先を変える <br> set histfile = ~/.thistory
4. 書式を変える <br> set history = ( 1000 "%h %Y/%W/%D %T %R\n" )
5. 変わった書式で保存する <br> history -S
6. 書き換える <br> vi .cshrc

[複数のターミナルウィンドウでtcsh履歴を保持する](https://qastack.jp/unix/88838/preserve-tcsh-history-in-multiple-terminal-windows) によると postcmd を設定しなさいという話もあるのですが、これを設定すると上手くいきませんでした。

tcsh の場合、prompt や rprompt で色を使っていて、screen 環境に入っているかどうかで色を変えています。rprompt の後ろの空白が無いと色が漏れ出てしまいすごく使いにくいですので忘れないように。
この問題については、制御文字が後続文字の色を変更するため、後続文字が無い rprompt では色を変えて終了することができないとのことでした。
https://github.com/tcsh-org/tcsh/issues/18
rprompt の後ろに以下の Unicode ゼロ幅文字を試してみましたが上手くいきませんでした。残念。

|文字コード|意味|
|---|---|
|U+200B|ゼロ幅空白|
|U+200C|ゼロ幅非接合子(筆記体の時の制御)|
|U+200D|ゼロ幅接合子(筆記体の時の制御)|
|U+FEFF|ゼロ幅のノーブレークスペース|
他にも空白文字は色々とありそうですが上手くいく文字が無いか、どなたか試してみませんが？👉 [\sが完全には空白文字を網羅できていなかった件](https://web.archive.org/web/20190522073421/https://www.pandanoir.info/entry/2018/03/11/193000)

また、LESS_TERMCAP_* で bold をグレーバックにしたり、underline を青バックにしたり、検索対象の反転を黄色バックにしたりしています。(256色環境かそうでないかで色を変えています)
また、printenv した時などに見難いので LESS_TERMCAP_zz のダミー変数を設定し、属性をクリアしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/91a59e5c-54bd-4ca6-44ea-447102495461.png)
screen を起動する前が上、起動した後が下という配色になっています。